diff --git a/renderdoc/driver/vulkan/extension_support.md b/renderdoc/driver/vulkan/extension_support.md index 504825ad0..d1c153821 100644 --- a/renderdoc/driver/vulkan/extension_support.md +++ b/renderdoc/driver/vulkan/extension_support.md @@ -87,6 +87,7 @@ Maintainers can update this file by updating vk.xml in this folder and running ` * `VK_EXT_pci_bus_info` * `VK_EXT_pipeline_creation_cache_control` * `VK_EXT_pipeline_creation_feedback` +* `VK_EXT_pipeline_protected_access` * `VK_EXT_pipeline_robustness` * `VK_EXT_post_depth_coverage` * `VK_EXT_present_mode_fifo_latest_ready` @@ -309,7 +310,6 @@ The portability subset is only relevant on mac, which is not a supported platfor * `VK_EXT_opacity_micromap` * `VK_EXT_physical_device_drm` * `VK_EXT_pipeline_library_group_handles` -* `VK_EXT_pipeline_protected_access` * `VK_EXT_shader_float8` * `VK_EXT_shader_module_identifier` * `VK_EXT_shader_replicated_composites` diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index 6f2981b42..14939d26d 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -1755,6 +1755,7 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePerformanceQueryFeaturesKHR); DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePerformanceQueryPropertiesKHR); DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePipelineCreationCacheControlFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR); +DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePipelineProtectedAccessFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePipelineRobustnessFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePipelineRobustnessPropertiesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePointClippingProperties); @@ -2276,6 +2277,7 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePerformanceQueryFeaturesKHR); DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePerformanceQueryPropertiesKHR); DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePipelineCreationCacheControlFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR); +DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePipelineProtectedAccessFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePipelineRobustnessFeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePipelineRobustnessPropertiesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePointClippingProperties); diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 5ef85d4da..1add85e79 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -1278,6 +1278,10 @@ static const VkExtensionProperties supportedExtensions[] = { VK_EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME, VK_EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION, }, + { + VK_EXT_PIPELINE_PROTECTED_ACCESS_EXTENSION_NAME, + VK_EXT_PIPELINE_PROTECTED_ACCESS_SPEC_VERSION, + }, { VK_EXT_PIPELINE_ROBUSTNESS_EXTENSION_NAME, VK_EXT_PIPELINE_ROBUSTNESS_SPEC_VERSION, diff --git a/renderdoc/driver/vulkan/vk_next_chains.cpp b/renderdoc/driver/vulkan/vk_next_chains.cpp index 0a2f948f8..d2fca3662 100644 --- a/renderdoc/driver/vulkan/vk_next_chains.cpp +++ b/renderdoc/driver/vulkan/vk_next_chains.cpp @@ -443,6 +443,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, VkPhysicalDevicePipelineCreationCacheControlFeatures); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR, \ VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR) \ + COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES, \ + VkPhysicalDevicePipelineProtectedAccessFeatures) \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES, \ VkPhysicalDevicePipelineRobustnessFeatures) \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES, \ @@ -1237,7 +1239,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_LIBRARY_GROUP_HANDLES_FEATURES_EXT: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_OPACITY_MICROMAP_FEATURES_ARM: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT: \ - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_BARRIER_FEATURES_NV: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_INFO_ARM: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAW_ACCESS_CHAINS_FEATURES_NV: \ diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index b991a8e22..2c341f46e 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -853,6 +853,10 @@ SERIALISE_VK_HANDLES(); PNEXT_STRUCT(VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO, \ VkPipelineCreationFeedbackCreateInfo) \ \ + /* VK_EXT_pipeline_protected_access */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES, \ + VkPhysicalDevicePipelineProtectedAccessFeatures) \ + \ /* VK_EXT_pipeline_robustness */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO, VkPipelineRobustnessCreateInfo) \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES, \ @@ -1903,9 +1907,6 @@ SERIALISE_VK_HANDLES(); PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PIPELINE_PROPERTIES_IDENTIFIER_EXT) \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT) \ \ - /* VK_EXT_pipeline_protected_access */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES) \ - \ /* VK_EXT_shader_float8 */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT8_FEATURES_EXT) \ \ @@ -10592,6 +10593,22 @@ void Deserialise(const VkPipelineCreationFeedbackCreateInfo &el) delete[] el.pPipelineStageCreationFeedbacks; } +template +void DoSerialise(SerialiserType &ser, VkPhysicalDevicePipelineProtectedAccessFeatures &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(pipelineProtectedAccess); +} + +template <> +void Deserialise(const VkPhysicalDevicePipelineProtectedAccessFeatures &el) +{ + DeserialiseNext(el.pNext); +} + template void DoSerialise(SerialiserType &ser, VkPipelineRobustnessCreateInfo &el) { @@ -14682,6 +14699,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePerformanceQueryFeaturesKHR); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePerformanceQueryPropertiesKHR); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePipelineCreationCacheControlFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePipelineProtectedAccessFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePipelineRobustnessFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePipelineRobustnessProperties); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePointClippingProperties); diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index a6226f2d2..039dad8cd 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -3578,6 +3578,13 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi CHECK_PHYS_EXT_FEATURE(pipelineRobustness); } END_PHYS_EXT_CHECK(); + + BEGIN_PHYS_EXT_CHECK(VkPhysicalDevicePipelineProtectedAccessFeatures, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES); + { + CHECK_PHYS_EXT_FEATURE(pipelineProtectedAccess); + } + END_PHYS_EXT_CHECK(); } if(availFeatures.depthClamp)