diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index 452e3a8de..b834a8afc 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -953,6 +953,7 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceConditionalRenderingFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceConservativeRasterizationPropertiesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceCustomBorderColorFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceCustomBorderColorPropertiesEXT); +DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceDepthClipControlFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceDepthClipEnableFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceDepthStencilResolveProperties); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceDescriptorIndexingFeatures) @@ -1101,6 +1102,7 @@ DECLARE_REFLECTION_STRUCT(VkPipelineTessellationDomainOriginStateCreateInfo); DECLARE_REFLECTION_STRUCT(VkPipelineTessellationStateCreateInfo); DECLARE_REFLECTION_STRUCT(VkPipelineVertexInputDivisorStateCreateInfoEXT); DECLARE_REFLECTION_STRUCT(VkPipelineVertexInputStateCreateInfo); +DECLARE_REFLECTION_STRUCT(VkPipelineViewportDepthClipControlCreateInfoEXT); DECLARE_REFLECTION_STRUCT(VkPipelineViewportStateCreateInfo); DECLARE_REFLECTION_STRUCT(VkPresentIdKHR); DECLARE_REFLECTION_STRUCT(VkPresentInfoKHR); @@ -1331,6 +1333,7 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceConditionalRenderingFeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceConservativeRasterizationPropertiesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceCustomBorderColorFeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceCustomBorderColorPropertiesEXT); +DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceDepthClipControlFeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceDepthClipEnableFeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceDepthStencilResolveProperties); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceDescriptorIndexingFeatures) @@ -1479,6 +1482,7 @@ DECLARE_DESERIALISE_TYPE(VkPipelineTessellationDomainOriginStateCreateInfo); DECLARE_DESERIALISE_TYPE(VkPipelineTessellationStateCreateInfo); DECLARE_DESERIALISE_TYPE(VkPipelineVertexInputDivisorStateCreateInfoEXT); DECLARE_DESERIALISE_TYPE(VkPipelineVertexInputStateCreateInfo); +DECLARE_DESERIALISE_TYPE(VkPipelineViewportDepthClipControlCreateInfoEXT); DECLARE_DESERIALISE_TYPE(VkPipelineViewportStateCreateInfo); DECLARE_DESERIALISE_TYPE(VkPresentIdKHR); DECLARE_DESERIALISE_TYPE(VkPresentInfoKHR); diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 99a4bede0..a82c79661 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -908,6 +908,9 @@ static const VkExtensionProperties supportedExtensions[] = { { VK_EXT_DEBUG_UTILS_EXTENSION_NAME, VK_EXT_DEBUG_UTILS_SPEC_VERSION, }, + { + VK_EXT_DEPTH_CLIP_CONTROL_EXTENSION_NAME, VK_EXT_DEPTH_CLIP_CONTROL_SPEC_VERSION, + }, { VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME, VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION, }, diff --git a/renderdoc/driver/vulkan/vk_hookset_defs.h b/renderdoc/driver/vulkan/vk_hookset_defs.h index 46629f734..b936b2f08 100644 --- a/renderdoc/driver/vulkan/vk_hookset_defs.h +++ b/renderdoc/driver/vulkan/vk_hookset_defs.h @@ -512,6 +512,7 @@ DeclExt(EXT_full_screen_exclusive); \ DeclExt(EXT_hdr_metadata); \ DeclExt(AMD_display_native_hdr); \ + DeclExt(EXT_depth_clip_control); \ DeclExt(EXT_depth_clip_enable); \ DeclExt(KHR_pipeline_executable_properties); \ DeclExt(AMD_negative_viewport_height); \ @@ -623,6 +624,7 @@ CheckExt(EXT_buffer_device_address, VKXX); \ CheckExt(EXT_hdr_metadata, VKXX); \ CheckExt(AMD_display_native_hdr, VKXX); \ + CheckExt(EXT_depth_clip_control, VKXX); \ CheckExt(EXT_depth_clip_enable, VKXX); \ CheckExt(KHR_pipeline_executable_properties, VKXX); \ CheckExt(AMD_negative_viewport_height, VKXX); \ diff --git a/renderdoc/driver/vulkan/vk_info.cpp b/renderdoc/driver/vulkan/vk_info.cpp index 29db55ccf..50ec47c68 100644 --- a/renderdoc/driver/vulkan/vk_info.cpp +++ b/renderdoc/driver/vulkan/vk_info.cpp @@ -866,6 +866,16 @@ void VulkanCreationInfo::Pipeline::Init(VulkanResourceManager *resourceMan, } } + // VkPipelineViewportDepthClipControlCreateInfoEXT + negativeOneToOne = false; + + const VkPipelineViewportDepthClipControlCreateInfoEXT *depthClipControl = + (const VkPipelineViewportDepthClipControlCreateInfoEXT *)FindNextStruct( + pCreateInfo->pViewportState, + VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT); + if(depthClipControl) + negativeOneToOne = depthClipControl->negativeOneToOne != VK_FALSE; + const VkPipelineLibraryCreateInfoKHR *libraryReference = (const VkPipelineLibraryCreateInfoKHR *)FindNextStruct( pCreateInfo, VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR); @@ -934,6 +944,8 @@ void VulkanCreationInfo::Pipeline::Init(VulkanResourceManager *resourceMan, discardRectangles = pipeInfo.discardRectangles; discardMode = pipeInfo.discardMode; + negativeOneToOne = pipeInfo.negativeOneToOne; + flags |= pipeInfo.flags; } diff --git a/renderdoc/driver/vulkan/vk_info.h b/renderdoc/driver/vulkan/vk_info.h index 88bc3147a..dcbc9b0a4 100644 --- a/renderdoc/driver/vulkan/vk_info.h +++ b/renderdoc/driver/vulkan/vk_info.h @@ -429,6 +429,9 @@ struct VulkanCreationInfo // VkPipelineFragmentShadingRateCreateInfoKHR VkExtent2D shadingRate; VkFragmentShadingRateCombinerOpKHR shadingRateCombiners[2]; + + // VkPipelineViewportDepthClipControlCreateInfoEXT + bool negativeOneToOne; }; std::unordered_map m_Pipeline; diff --git a/renderdoc/driver/vulkan/vk_next_chains.cpp b/renderdoc/driver/vulkan/vk_next_chains.cpp index ab8353a86..8b82f8a4d 100644 --- a/renderdoc/driver/vulkan/vk_next_chains.cpp +++ b/renderdoc/driver/vulkan/vk_next_chains.cpp @@ -227,6 +227,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, VkPhysicalDeviceCustomBorderColorPropertiesEXT); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV, \ VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT, \ + VkPhysicalDeviceDepthClipControlFeaturesEXT) \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT, \ VkPhysicalDeviceDepthClipEnableFeaturesEXT) \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES, \ @@ -501,6 +503,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, VkPipelineVertexInputDivisorStateCreateInfoEXT); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO, \ VkPipelineVertexInputStateCreateInfo); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT, \ + VkPipelineViewportDepthClipControlCreateInfoEXT); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO, \ VkPipelineViewportStateCreateInfo); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PRESENT_ID_KHR, VkPresentIdKHR); \ @@ -811,7 +815,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV: \ - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV: \ @@ -881,7 +884,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO_EXT: \ case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_MODULE_IDENTIFIER_CREATE_INFO_EXT: \ case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV: \ - case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT: \ case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV: \ case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV: \ case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV: \ diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index 9d695b212..8fc85059e 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -618,6 +618,12 @@ SERIALISE_VK_HANDLES(); PNEXT_STRUCT(VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT, \ VkDebugUtilsMessengerCreateInfoEXT) \ \ + /* VK_EXT_depth_clip_control */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT, \ + VkPhysicalDeviceDepthClipControlFeaturesEXT) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT, \ + VkPipelineViewportDepthClipControlCreateInfoEXT) \ + \ /* VK_EXT_depth_clip_enable */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT, \ VkPhysicalDeviceDepthClipEnableFeaturesEXT) \ @@ -1349,10 +1355,6 @@ SERIALISE_VK_HANDLES(); PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT) \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT) \ \ - /* VK_EXT_depth_clip_control */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT) \ - \ /* VK_EXT_device_memory_report */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT) \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT) \ @@ -8419,6 +8421,38 @@ void Deserialise(const VkPipelineDiscardRectangleStateCreateInfoEXT &el) delete[] el.pDiscardRectangles; } +template +void DoSerialise(SerialiserType &ser, VkPhysicalDeviceDepthClipControlFeaturesEXT &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(depthClipControl); +} + +template <> +void Deserialise(const VkPhysicalDeviceDepthClipControlFeaturesEXT &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkPipelineViewportDepthClipControlCreateInfoEXT &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(negativeOneToOne); +} + +template <> +void Deserialise(const VkPipelineViewportDepthClipControlCreateInfoEXT &el) +{ + DeserialiseNext(el.pNext); +} + template void DoSerialise(SerialiserType &ser, VkPhysicalDeviceDepthClipEnableFeaturesEXT &el) { @@ -10617,6 +10651,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceConditionalRenderingFeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceConservativeRasterizationPropertiesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceCustomBorderColorFeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceCustomBorderColorPropertiesEXT); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceDepthClipControlFeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceDepthClipEnableFeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceDepthStencilResolveProperties); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceDescriptorIndexingFeatures) @@ -10764,6 +10799,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPipelineTessellationDomainOriginStateCreateInfo); INSTANTIATE_SERIALISE_TYPE(VkPipelineTessellationStateCreateInfo); INSTANTIATE_SERIALISE_TYPE(VkPipelineVertexInputDivisorStateCreateInfoEXT); INSTANTIATE_SERIALISE_TYPE(VkPipelineVertexInputStateCreateInfo); +INSTANTIATE_SERIALISE_TYPE(VkPipelineViewportDepthClipControlCreateInfoEXT); INSTANTIATE_SERIALISE_TYPE(VkPipelineViewportStateCreateInfo); INSTANTIATE_SERIALISE_TYPE(VkPresentIdKHR); INSTANTIATE_SERIALISE_TYPE(VkPresentInfoKHR); diff --git a/renderdoc/driver/vulkan/vk_shader_cache.cpp b/renderdoc/driver/vulkan/vk_shader_cache.cpp index e9d260cb0..66906927e 100644 --- a/renderdoc/driver/vulkan/vk_shader_cache.cpp +++ b/renderdoc/driver/vulkan/vk_shader_cache.cpp @@ -962,6 +962,18 @@ void VulkanShaderCache::MakeGraphicsPipelineInfo(VkGraphicsPipelineCreateInfo &p ret.pNext = &shadingRate; } + static VkPipelineViewportDepthClipControlCreateInfoEXT depthClipControl = { + VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT, + }; + + if(m_pDriver->GetExtensions(GetRecord(m_Device)).ext_EXT_depth_clip_control) + { + depthClipControl.negativeOneToOne = pipeInfo.negativeOneToOne; + + depthClipControl.pNext = vp.pNext; + vp.pNext = &depthClipControl; + } + // never create derivatives ret.flags &= ~VK_PIPELINE_CREATE_DERIVATIVE_BIT;