diff --git a/renderdoc/driver/vulkan/extension_support.md b/renderdoc/driver/vulkan/extension_support.md index cbdecd6bc..032daf8de 100644 --- a/renderdoc/driver/vulkan/extension_support.md +++ b/renderdoc/driver/vulkan/extension_support.md @@ -114,6 +114,7 @@ Maintainers can update this file by updating vk.xml in this folder and running ` * `VK_EXT_shader_demote_to_helper_invocation` * `VK_EXT_shader_image_atomic_int64` * `VK_EXT_shader_object` +* `VK_EXT_shader_split_barrier` * `VK_EXT_shader_stencil_export` * `VK_EXT_shader_subgroup_ballot` * `VK_EXT_shader_subgroup_partitioned` @@ -342,7 +343,6 @@ The portability subset is only relevant on mac, which is not a supported platfor * `VK_EXT_shader_module_identifier` * `VK_EXT_shader_ocp_microscaling_types` * `VK_EXT_shader_replicated_composites` -* `VK_EXT_shader_split_barrier` * `VK_EXT_shader_tile_image` * `VK_EXT_shader_uniform_buffer_unsized_array` * `VK_EXT_subpass_merge_feedback` diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index 96689641d..baa907b03 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -1846,6 +1846,8 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderObjectFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderObjectPropertiesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderQuadControlFeaturesKHR); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR); +DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderSplitBarrierFeaturesEXT); +DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderSplitBarrierPropertiesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderSubgroupRotateFeatures); @@ -2402,6 +2404,8 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderObjectFeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderObjectPropertiesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderQuadControlFeaturesKHR); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR); +DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderSplitBarrierFeaturesEXT); +DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderSplitBarrierPropertiesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderSubgroupRotateFeatures); diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 56d66695c..e77c2e127 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -1444,6 +1444,10 @@ static const VkExtensionProperties supportedExtensions[] = { VK_EXT_SHADER_OBJECT_EXTENSION_NAME, VK_EXT_SHADER_OBJECT_SPEC_VERSION, }, + { + VK_EXT_SHADER_SPLIT_BARRIER_EXTENSION_NAME, + VK_EXT_SHADER_SPLIT_BARRIER_SPEC_VERSION, + }, { VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME, VK_EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION, diff --git a/renderdoc/driver/vulkan/vk_next_chains.cpp b/renderdoc/driver/vulkan/vk_next_chains.cpp index 191d5b8a9..1de0ddc95 100644 --- a/renderdoc/driver/vulkan/vk_next_chains.cpp +++ b/renderdoc/driver/vulkan/vk_next_chains.cpp @@ -596,6 +596,10 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, VkPhysicalDeviceShaderQuadControlFeaturesKHR); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_RELAXED_EXTENDED_INSTRUCTION_FEATURES_KHR, \ VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SPLIT_BARRIER_FEATURES_EXT, \ + VkPhysicalDeviceShaderSplitBarrierFeaturesEXT) \ + COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SPLIT_BARRIER_PROPERTIES_EXT, \ + VkPhysicalDeviceShaderSplitBarrierPropertiesEXT) \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES, \ VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_PARTITIONED_FEATURES_EXT, \ @@ -1422,8 +1426,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_REPLICATED_COMPOSITES_FEATURES_EXT: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV: \ - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SPLIT_BARRIER_FEATURES_EXT: \ - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SPLIT_BARRIER_PROPERTIES_EXT: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_FEATURES_EXT: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_PROPERTIES_EXT: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_FEATURES_EXT: \ diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index 9e13aa915..adca6f955 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -979,6 +979,12 @@ SERIALISE_VK_HANDLES(); PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_PROPERTIES_EXT, \ VkPhysicalDeviceShaderObjectPropertiesEXT) \ \ + /* VK_EXT_shader_split_barrier */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SPLIT_BARRIER_FEATURES_EXT, \ + VkPhysicalDeviceShaderSplitBarrierFeaturesEXT) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SPLIT_BARRIER_PROPERTIES_EXT, \ + VkPhysicalDeviceShaderSplitBarrierPropertiesEXT) \ + \ /* VK_EXT_shader_subgroup_partitioned */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_PARTITIONED_FEATURES_EXT, \ VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT) \ @@ -2094,10 +2100,6 @@ SERIALISE_VK_HANDLES(); /* VK_EXT_shader_ocp_microscaling_types */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OCP_MICROSCALING_TYPES_FEATURES_EXT) \ \ - /* VK_EXT_shader_split_barrier */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SPLIT_BARRIER_FEATURES_EXT) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SPLIT_BARRIER_PROPERTIES_EXT) \ - \ /* VK_EXT_shader_replicated_composites */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_REPLICATED_COMPOSITES_FEATURES_EXT) \ \ @@ -11795,6 +11797,38 @@ void Deserialise(const VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT &el) DeserialiseNext(el.pNext); } +template +void DoSerialise(SerialiserType &ser, VkPhysicalDeviceShaderSplitBarrierFeaturesEXT &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SPLIT_BARRIER_FEATURES_EXT); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(shaderSplitBarrier); +} + +template <> +void Deserialise(const VkPhysicalDeviceShaderSplitBarrierFeaturesEXT &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkPhysicalDeviceShaderSplitBarrierPropertiesEXT &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SPLIT_BARRIER_PROPERTIES_EXT); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(splitBarrierReservedSharedMemory); +} + +template <> +void Deserialise(const VkPhysicalDeviceShaderSplitBarrierPropertiesEXT &el) +{ + DeserialiseNext(el.pNext); +} + template void DoSerialise(SerialiserType &ser, VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures &el) { @@ -15753,6 +15787,8 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderObjectFeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderObjectPropertiesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderQuadControlFeaturesKHR); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderSplitBarrierFeaturesEXT); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderSplitBarrierPropertiesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderSubgroupRotateFeatures); diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index 3ab2af691..c965b7837 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -3747,6 +3747,13 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi CHECK_PHYS_EXT_FEATURE(shaderSubgroupPartitioned); } END_PHYS_EXT_CHECK(); + + BEGIN_PHYS_EXT_CHECK(VkPhysicalDeviceShaderSplitBarrierFeaturesEXT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SPLIT_BARRIER_FEATURES_EXT); + { + CHECK_PHYS_EXT_FEATURE(shaderSplitBarrier); + } + END_PHYS_EXT_CHECK(); } if(availFeatures.depthClamp)