diff --git a/renderdoc/driver/vulkan/extension_support.md b/renderdoc/driver/vulkan/extension_support.md index 88ce2b47a..ef309160f 100644 --- a/renderdoc/driver/vulkan/extension_support.md +++ b/renderdoc/driver/vulkan/extension_support.md @@ -195,6 +195,7 @@ Maintainers can update this file by updating vk.xml in this folder and running ` * `VK_KHR_shader_atomic_int64` * `VK_KHR_shader_clock` * `VK_KHR_shader_draw_parameters` +* `VK_KHR_shader_expect_assume` * `VK_KHR_shader_float_controls` * `VK_KHR_shader_float16_int8` * `VK_KHR_shader_integer_dot_product` @@ -258,7 +259,6 @@ KHR extensions will definitely be implemented at some point, though KHR extensio * `VK_KHR_pipeline_binary` * `VK_KHR_ray_tracing_maintenance1` * `VK_KHR_ray_tracing_position_fetch` -* `VK_KHR_shader_expect_assume` * `VK_KHR_shader_float_controls2` * `VK_KHR_shader_subgroup_rotate` diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index b9e4625a2..1fdd8ab5f 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -1485,6 +1485,7 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderClockFeaturesKHR); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderCorePropertiesAMD); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderDrawParametersFeatures); +DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderExpectAssumeFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderFloat16Int8Features); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderImageFootprintFeaturesNV); @@ -1931,6 +1932,7 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderClockFeaturesKHR); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderCorePropertiesAMD); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderDrawParametersFeatures); +DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderExpectAssumeFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderFloat16Int8Features); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderImageFootprintFeaturesNV); diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index c54af7416..6ac9de92b 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -1690,6 +1690,10 @@ static const VkExtensionProperties supportedExtensions[] = { VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME, VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION, }, + { + VK_KHR_SHADER_EXPECT_ASSUME_EXTENSION_NAME, + VK_KHR_SHADER_EXPECT_ASSUME_SPEC_VERSION, + }, { VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME, VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION, diff --git a/renderdoc/driver/vulkan/vk_next_chains.cpp b/renderdoc/driver/vulkan/vk_next_chains.cpp index daaf58f25..72c29a0b6 100644 --- a/renderdoc/driver/vulkan/vk_next_chains.cpp +++ b/renderdoc/driver/vulkan/vk_next_chains.cpp @@ -452,6 +452,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES, \ VkPhysicalDeviceShaderDrawParametersFeatures); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES, \ + VkPhysicalDeviceShaderExpectAssumeFeatures); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, \ VkPhysicalDeviceShaderFloat16Int8Features); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT, \ @@ -1148,7 +1150,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_ARM: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_FEATURES_AMD: \ - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT: \ diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index ac81a84c2..9e314ea80 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -1333,6 +1333,10 @@ SERIALISE_VK_HANDLES(); PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR, \ VkPhysicalDeviceShaderClockFeaturesKHR) \ \ + /* VK_KHR_shader_expect_assume */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES, \ + VkPhysicalDeviceShaderExpectAssumeFeatures) \ + \ /* VK_KHR_shader_float16_int8 */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, \ VkPhysicalDeviceShaderFloat16Int8Features) \ @@ -1833,9 +1837,6 @@ SERIALISE_VK_HANDLES(); /* VK_KHR_ray_tracing_position_fetch */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_POSITION_FETCH_FEATURES_KHR) \ \ - /* VK_KHR_shader_expect_assume */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES) \ - \ /* VK_KHR_shader_float_controls2 */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES) \ \ @@ -10434,6 +10435,22 @@ void Deserialise(const VkPhysicalDeviceShaderQuadControlFeaturesKHR &el) DeserialiseNext(el.pNext); } +template +void DoSerialise(SerialiserType &ser, VkPhysicalDeviceShaderExpectAssumeFeatures &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(shaderExpectAssume); +} + +template <> +void Deserialise(const VkPhysicalDeviceShaderExpectAssumeFeatures &el) +{ + DeserialiseNext(el.pNext); +} + template void DoSerialise(SerialiserType &ser, VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR &el) { @@ -13002,6 +13019,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderClockFeaturesKHR); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderCorePropertiesAMD); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderDrawParametersFeatures); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderExpectAssumeFeatures) INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderFloat16Int8Features); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderImageFootprintFeaturesNV); diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index 97cb176a5..558138f8a 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -3367,6 +3367,13 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi } END_PHYS_EXT_CHECK(); + BEGIN_PHYS_EXT_CHECK(VkPhysicalDeviceShaderExpectAssumeFeatures, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES); + { + CHECK_PHYS_EXT_FEATURE(shaderExpectAssume); + } + END_PHYS_EXT_CHECK(); + BEGIN_PHYS_EXT_CHECK( VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR);