From c48764f2228227cc734ece666e0d53168660a01b Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 21 Oct 2021 17:04:31 +0100 Subject: [PATCH] Add support for VK_EXT_shader_atomic_float2 --- renderdoc/driver/vulkan/extension_support.md | 2 +- renderdoc/driver/vulkan/vk_common.h | 2 ++ renderdoc/driver/vulkan/vk_core.cpp | 3 ++ renderdoc/driver/vulkan/vk_next_chains.cpp | 3 +- renderdoc/driver/vulkan/vk_serialise.cpp | 35 +++++++++++++++++-- .../vulkan/wrappers/vk_device_funcs.cpp | 18 ++++++++++ 6 files changed, 58 insertions(+), 5 deletions(-) diff --git a/renderdoc/driver/vulkan/extension_support.md b/renderdoc/driver/vulkan/extension_support.md index bd9833eca..395a49e2c 100644 --- a/renderdoc/driver/vulkan/extension_support.md +++ b/renderdoc/driver/vulkan/extension_support.md @@ -69,6 +69,7 @@ Maintainers can update this file by updating vk.xml in this folder and running ` * `VK_EXT_scalar_block_layout` * `VK_EXT_separate_stencil_usage` * `VK_EXT_shader_atomic_float` +* `VK_EXT_shader_atomic_float2` * `VK_EXT_shader_demote_to_helper_invocation` * `VK_EXT_shader_image_atomic_int64` * `VK_EXT_shader_stencil_export` @@ -229,7 +230,6 @@ Ray tracing extensions are now standard and will likely be supported at some poi * `VK_EXT_primitive_topology_list_restart` * `VK_EXT_provoking_vertex` * `VK_EXT_rgba10x6_formats` -* `VK_EXT_shader_atomic_float2` * `VK_EXT_texture_compression_astc_hdr` * `VK_EXT_vertex_input_dynamic_state` * `VK_EXT_ycbcr_2plane_444_formats` diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index 99ad03df8..778644aff 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -982,6 +982,7 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSamplerYcbcrConversionFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceScalarBlockLayoutFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderAtomicFloatFeaturesEXT); +DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderAtomicInt64Features); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderClockFeaturesKHR); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderCorePropertiesAMD); @@ -1322,6 +1323,7 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceSamplerYcbcrConversionFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceScalarBlockLayoutFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderAtomicFloatFeaturesEXT); +DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderAtomicInt64Features); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderClockFeaturesKHR); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderCorePropertiesAMD); diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 87d497172..aee373cdb 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -1014,6 +1014,9 @@ static const VkExtensionProperties supportedExtensions[] = { { VK_EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME, VK_EXT_SHADER_ATOMIC_FLOAT_SPEC_VERSION, }, + { + VK_EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME, VK_EXT_SHADER_ATOMIC_FLOAT_2_SPEC_VERSION, + }, { VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION, diff --git a/renderdoc/driver/vulkan/vk_next_chains.cpp b/renderdoc/driver/vulkan/vk_next_chains.cpp index 68c928197..b0cec585c 100644 --- a/renderdoc/driver/vulkan/vk_next_chains.cpp +++ b/renderdoc/driver/vulkan/vk_next_chains.cpp @@ -333,6 +333,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, VkPhysicalDeviceShaderAtomicInt64Features); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT, \ VkPhysicalDeviceShaderAtomicFloatFeaturesEXT); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT, \ + VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD, \ VkPhysicalDeviceShaderCorePropertiesAMD); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR, \ @@ -756,7 +758,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT: \ - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV: \ diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index 2adf55fc7..4e230cab6 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -752,6 +752,10 @@ SERIALISE_VK_HANDLES(); PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT, \ VkPhysicalDeviceShaderAtomicFloatFeaturesEXT) \ \ + /* VK_EXT_shader_atomic_float2 */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT, \ + VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT) \ + \ /* VK_EXT_shader_demote_to_helper_invocation */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT, \ VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT) \ @@ -1291,9 +1295,6 @@ SERIALISE_VK_HANDLES(); /* VK_EXT_rgba10x6_formats */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT) \ \ - /* VK_EXT_shader_atomic_float2 */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT) \ - \ /* VK_EXT_texture_compression_astc_hdr */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT) \ \ @@ -8203,6 +8204,33 @@ void Deserialise(const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT &el) DeserialiseNext(el.pNext); } +template +void DoSerialise(SerialiserType &ser, VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(shaderBufferFloat16Atomics); + SERIALISE_MEMBER(shaderBufferFloat16AtomicAdd); + SERIALISE_MEMBER(shaderBufferFloat16AtomicMinMax); + SERIALISE_MEMBER(shaderBufferFloat32AtomicMinMax); + SERIALISE_MEMBER(shaderBufferFloat64AtomicMinMax); + SERIALISE_MEMBER(shaderSharedFloat16Atomics); + SERIALISE_MEMBER(shaderSharedFloat16AtomicAdd); + SERIALISE_MEMBER(shaderSharedFloat16AtomicMinMax); + SERIALISE_MEMBER(shaderSharedFloat32AtomicMinMax); + SERIALISE_MEMBER(shaderSharedFloat64AtomicMinMax); + SERIALISE_MEMBER(shaderImageFloat32AtomicMinMax); + SERIALISE_MEMBER(sparseImageFloat32AtomicMinMax); +} + +template <> +void Deserialise(const VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT &el) +{ + DeserialiseNext(el.pNext); +} + template void DoSerialise(SerialiserType &ser, VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT &el) { @@ -9697,6 +9725,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSamplerYcbcrConversionFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceScalarBlockLayoutFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderAtomicFloatFeaturesEXT); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderAtomicInt64Features); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderClockFeaturesKHR); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderCorePropertiesAMD); diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index 4b3afd503..29fa8d0b3 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -2760,6 +2760,24 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi CHECK_PHYS_EXT_FEATURE(shaderSubgroupUniformControlFlow); } END_PHYS_EXT_CHECK(); + + BEGIN_PHYS_EXT_CHECK(VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT); + { + CHECK_PHYS_EXT_FEATURE(shaderBufferFloat16Atomics); + CHECK_PHYS_EXT_FEATURE(shaderBufferFloat16AtomicAdd); + CHECK_PHYS_EXT_FEATURE(shaderBufferFloat16AtomicMinMax); + CHECK_PHYS_EXT_FEATURE(shaderBufferFloat32AtomicMinMax); + CHECK_PHYS_EXT_FEATURE(shaderBufferFloat64AtomicMinMax); + CHECK_PHYS_EXT_FEATURE(shaderSharedFloat16Atomics); + CHECK_PHYS_EXT_FEATURE(shaderSharedFloat16AtomicAdd); + CHECK_PHYS_EXT_FEATURE(shaderSharedFloat16AtomicMinMax); + CHECK_PHYS_EXT_FEATURE(shaderSharedFloat32AtomicMinMax); + CHECK_PHYS_EXT_FEATURE(shaderSharedFloat64AtomicMinMax); + CHECK_PHYS_EXT_FEATURE(shaderImageFloat32AtomicMinMax); + CHECK_PHYS_EXT_FEATURE(sparseImageFloat32AtomicMinMax); + } + END_PHYS_EXT_CHECK(); } if(availFeatures.depthClamp)