diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index cfedf3537..ec1e5a607 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -933,6 +933,7 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderDrawParametersFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderFloat16Int8Features); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderImageFootprintFeaturesNV); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures); +DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSparseImageFormatInfo2); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSubgroupProperties); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSubgroupSizeControlFeaturesEXT); @@ -1246,6 +1247,7 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderDrawParametersFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderFloat16Int8Features); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderImageFootprintFeaturesNV); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures); +DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceSparseImageFormatInfo2); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceSubgroupProperties); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceSubgroupSizeControlFeaturesEXT); diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index a2dafd7ca..45c374118 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -1151,6 +1151,10 @@ static const VkExtensionProperties supportedExtensions[] = { VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME, VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION, }, + { + VK_KHR_SHADER_TERMINATE_INVOCATION_EXTENSION_NAME, + VK_KHR_SHADER_TERMINATE_INVOCATION_SPEC_VERSION, + }, { VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME, VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION, }, diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index 3208b1b7a..523d6a7cd 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -1010,6 +1010,10 @@ SERIALISE_VK_HANDLES(); PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES, \ VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures) \ \ + /* VK_KHR_shader_terminate_invocation */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR, \ + VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR) \ + \ /* VK_KHR_shared_presentable_image */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR, \ VkSharedPresentSurfaceCapabilitiesKHR) \ @@ -1194,9 +1198,6 @@ SERIALISE_VK_HANDLES(); PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR) \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR) \ \ - /* VK_KHR_shader_terminate_invocation */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR) \ - \ /* VK_NV_clip_space_w_scaling */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV) \ \ @@ -7530,6 +7531,22 @@ void Deserialise(const VkPhysicalDeviceLineRasterizationPropertiesEXT &el) DeserialiseNext(el.pNext); } +template +void DoSerialise(SerialiserType &ser, VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(shaderTerminateInvocation); +} + +template <> +void Deserialise(const VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR &el) +{ + DeserialiseNext(el.pNext); +} + template void DoSerialise(SerialiserType &ser, VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures &el) { @@ -8934,6 +8951,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderDrawParametersFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderFloat16Int8Features); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderImageFootprintFeaturesNV); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSparseImageFormatInfo2); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSubgroupProperties); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSubgroupSizeControlFeaturesEXT); diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index 031cf0e24..c4b00ab97 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -2637,6 +2637,14 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi m_ExtendedDynState = (ext->extendedDynamicState != VK_FALSE); } END_PHYS_EXT_CHECK(); + + BEGIN_PHYS_EXT_CHECK( + VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR); + { + CHECK_PHYS_EXT_FEATURE(shaderTerminateInvocation); + } + END_PHYS_EXT_CHECK(); } if(availFeatures.depthClamp)