diff --git a/renderdoc/driver/vulkan/extension_support.md b/renderdoc/driver/vulkan/extension_support.md index b9145071b..72b56a661 100644 --- a/renderdoc/driver/vulkan/extension_support.md +++ b/renderdoc/driver/vulkan/extension_support.md @@ -125,6 +125,7 @@ Maintainers can update this file by updating vk.xml in this folder and running ` * `VK_EXT_validation_features` * `VK_EXT_validation_flags` * `VK_EXT_vertex_attribute_divisor` +* `VK_EXT_vertex_attribute_robustness` * `VK_EXT_vertex_input_dynamic_state` * `VK_EXT_ycbcr_2plane_444_formats` * `VK_EXT_ycbcr_image_arrays` @@ -316,7 +317,6 @@ The portability subset is only relevant on mac, which is not a supported platfor * `VK_EXT_shader_replicated_composites` * `VK_EXT_shader_tile_image` * `VK_EXT_subpass_merge_feedback` -* `VK_EXT_vertex_attribute_robustness` * `VK_EXT_zero_initialize_device_memory` ## Platform/IHV Extensions diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index c383a562d..4116ba819 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -1835,6 +1835,7 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceVariablePointersFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceVertexAttributeDivisorFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceVertexAttributeDivisorProperties); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT); +DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceVulkan11Features); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceVulkan11Properties); @@ -2363,6 +2364,7 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceVariablePointersFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceVertexAttributeDivisorFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceVertexAttributeDivisorProperties); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT); +DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceVulkan11Features); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceVulkan11Properties); diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 4d6a369e9..da3381463 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -1453,6 +1453,10 @@ static const VkExtensionProperties supportedExtensions[] = { VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION, }, + { + VK_EXT_VERTEX_ATTRIBUTE_ROBUSTNESS_EXTENSION_NAME, + VK_EXT_VERTEX_ATTRIBUTE_ROBUSTNESS_SPEC_VERSION, + }, { VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME, VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_SPEC_VERSION, diff --git a/renderdoc/driver/vulkan/vk_next_chains.cpp b/renderdoc/driver/vulkan/vk_next_chains.cpp index ab6021078..f77d7a6f1 100644 --- a/renderdoc/driver/vulkan/vk_next_chains.cpp +++ b/renderdoc/driver/vulkan/vk_next_chains.cpp @@ -595,6 +595,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES, \ VkPhysicalDeviceVertexAttributeDivisorProperties); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT, \ + VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT, \ VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFIED_IMAGE_LAYOUTS_FEATURES_KHR, \ @@ -1290,7 +1292,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_PROPERTIES_FEATURES_QCOM: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_SHADING_FEATURES_QCOM: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_SHADING_PROPERTIES_QCOM: \ - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_DECODE_VP9_FEATURES_KHR: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_AV1_FEATURES_KHR: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_INTRA_REFRESH_FEATURES_KHR: \ diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index 5614426c4..aaaaf514b 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -1618,6 +1618,10 @@ SERIALISE_VK_HANDLES(); PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES, \ VkPhysicalDeviceVertexAttributeDivisorFeatures) \ \ + /* VK_EXT_vertex_attribute_robustness */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT, \ + VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT) \ + \ /* VK_KHR_vulkan_memory_model */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES, \ VkPhysicalDeviceVulkanMemoryModelFeatures) \ @@ -1937,9 +1941,6 @@ SERIALISE_VK_HANDLES(); PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_FEEDBACK_CREATE_INFO_EXT) \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_RENDER_PASS_SUBPASS_FEEDBACK_CREATE_INFO_EXT) \ \ - /* VK_EXT_vertex_attribute_robustness */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT) \ - \ /* VK_EXT_zero_initialize_device_memory */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_DEVICE_MEMORY_FEATURES_EXT) \ \ @@ -6596,6 +6597,22 @@ void Deserialise(const VkPhysicalDeviceVertexAttributeDivisorFeatures &el) DeserialiseNext(el.pNext); } +template +void DoSerialise(SerialiserType &ser, VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(vertexAttributeRobustness); +} + +template <> +void Deserialise(const VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT &el) +{ + DeserialiseNext(el.pNext); +} + template void DoSerialise(SerialiserType &ser, VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT &el) { @@ -14916,6 +14933,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceVariablePointersFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceVertexAttributeDivisorFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceVertexAttributeDivisorProperties); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceVulkan11Features); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceVulkan11Properties); diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index 22a6695f6..33a3ffe00 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -2661,6 +2661,14 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi } END_PHYS_EXT_CHECK(); + BEGIN_PHYS_EXT_CHECK( + VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT); + { + CHECK_PHYS_EXT_FEATURE(vertexAttributeRobustness); + } + END_PHYS_EXT_CHECK(); + BEGIN_PHYS_EXT_CHECK(VkPhysicalDeviceVulkanMemoryModelFeatures, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES); {