diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index 019fac550..81e66e78a 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -964,6 +964,7 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceVulkan12Features); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceVulkan12Properties); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceVulkanMemoryModelFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceYcbcrImageArraysFeaturesEXT); +DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR); DECLARE_REFLECTION_STRUCT(VkPipelineCacheCreateInfo); DECLARE_REFLECTION_STRUCT(VkPipelineColorBlendStateCreateInfo); DECLARE_REFLECTION_STRUCT(VkPipelineCreationFeedbackCreateInfoEXT); @@ -1281,6 +1282,7 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceVulkan12Features); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceVulkan12Properties); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceVulkanMemoryModelFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceYcbcrImageArraysFeaturesEXT); +DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR); DECLARE_DESERIALISE_TYPE(VkPipelineCacheCreateInfo); DECLARE_DESERIALISE_TYPE(VkPipelineColorBlendStateCreateInfo); DECLARE_DESERIALISE_TYPE(VkPipelineCreationFeedbackCreateInfoEXT); diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 371f5367c..b44b39017 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -1233,6 +1233,10 @@ static const VkExtensionProperties supportedExtensions[] = { VK_KHR_XLIB_SURFACE_EXTENSION_NAME, VK_KHR_XLIB_SURFACE_SPEC_VERSION, }, #endif + { + VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME, + VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_SPEC_VERSION, + }, #ifdef VK_MVK_macos_surface { VK_MVK_MACOS_SURFACE_EXTENSION_NAME, VK_MVK_MACOS_SURFACE_SPEC_VERSION, diff --git a/renderdoc/driver/vulkan/vk_next_chains.cpp b/renderdoc/driver/vulkan/vk_next_chains.cpp index 1fd1bbc0a..be23e831e 100644 --- a/renderdoc/driver/vulkan/vk_next_chains.cpp +++ b/renderdoc/driver/vulkan/vk_next_chains.cpp @@ -371,6 +371,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, VkPhysicalDeviceVulkanMemoryModelFeatures); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT, \ VkPhysicalDeviceYcbcrImageArraysFeaturesEXT) \ + COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR, \ + VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR) \ COPY_STRUCT(VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO, VkPipelineCacheCreateInfo); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT, \ VkPipelineCreationFeedbackCreateInfoEXT); \ @@ -692,7 +694,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR: \ - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR: \ case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT: \ case VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD: \ case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV: \ diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index 6613857c5..7aa37a265 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -1075,6 +1075,10 @@ SERIALISE_VK_HANDLES(); PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES, \ VkPhysicalDeviceVulkanMemoryModelFeatures) \ \ + /* VK_KHR_zero_initialize_workgroup_memory */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR, \ + VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR) \ + \ /* VK_NV_compute_shader_derivatives */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV, \ VkPhysicalDeviceComputeShaderDerivativesFeaturesNV) \ @@ -1229,9 +1233,6 @@ SERIALISE_VK_HANDLES(); /* VK_KHR_workgroup_memory_explicit_layout */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR) \ \ - /* VK_KHR_zero_initialize_workgroup_memory */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR) \ - \ /* VK_NV_clip_space_w_scaling */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV) \ \ @@ -3707,6 +3708,23 @@ void Deserialise(const VkPhysicalDeviceVulkanMemoryModelFeatures &el) DeserialiseNext(el.pNext); } +template +void DoSerialise(SerialiserType &ser, VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(shaderZeroInitializeWorkgroupMemory); +} + +template <> +void Deserialise(const VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR &el) +{ + DeserialiseNext(el.pNext); +} + template void DoSerialise(SerialiserType &ser, VkPhysicalDeviceVulkan11Features &el) { @@ -9088,6 +9106,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceVulkan12Features); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceVulkan12Properties); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceVulkanMemoryModelFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceYcbcrImageArraysFeaturesEXT); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR); INSTANTIATE_SERIALISE_TYPE(VkPipelineCacheCreateInfo); INSTANTIATE_SERIALISE_TYPE(VkPipelineColorBlendStateCreateInfo); INSTANTIATE_SERIALISE_TYPE(VkPipelineCreationFeedbackCreateInfoEXT); diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index aea2e704b..c5b0e6ed2 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -2678,6 +2678,14 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi CHECK_PHYS_EXT_FEATURE(sparseImageInt64Atomics); } END_PHYS_EXT_CHECK(); + + BEGIN_PHYS_EXT_CHECK( + VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR); + { + CHECK_PHYS_EXT_FEATURE(shaderZeroInitializeWorkgroupMemory); + } + END_PHYS_EXT_CHECK(); } if(availFeatures.depthClamp)