From 5d1dc8f48a6affc77afc73d2638c65f07a949155 Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 22 Oct 2021 12:01:45 +0100 Subject: [PATCH] Add support for VK_EXT_global_priority_query --- renderdoc/driver/vulkan/extension_support.md | 2 +- renderdoc/driver/vulkan/vk_common.h | 4 ++ renderdoc/driver/vulkan/vk_core.cpp | 3 ++ renderdoc/driver/vulkan/vk_next_chains.cpp | 6 ++- renderdoc/driver/vulkan/vk_serialise.cpp | 45 +++++++++++++++++-- .../vulkan/wrappers/vk_device_funcs.cpp | 7 +++ 6 files changed, 60 insertions(+), 7 deletions(-) diff --git a/renderdoc/driver/vulkan/extension_support.md b/renderdoc/driver/vulkan/extension_support.md index 887a41e1f..316fd0550 100644 --- a/renderdoc/driver/vulkan/extension_support.md +++ b/renderdoc/driver/vulkan/extension_support.md @@ -47,6 +47,7 @@ Maintainers can update this file by updating vk.xml in this folder and running ` * `VK_EXT_fragment_shader_interlock` * `VK_EXT_full_screen_exclusive` * `VK_EXT_global_priority` +* `VK_EXT_global_priority_query` * `VK_EXT_hdr_metadata` * `VK_EXT_headless_surface` * `VK_EXT_host_query_reset` @@ -223,7 +224,6 @@ Ray tracing extensions are now standard and will likely be supported at some poi * `VK_EXT_device_memory_report` * `VK_EXT_extended_dynamic_state2` * `VK_EXT_external_memory_host` -* `VK_EXT_global_priority_query` * `VK_EXT_image_drm_format_modifier` * `VK_EXT_load_store_op_none` * `VK_EXT_multi_draw` diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index 8053cf72a..fe6262bfb 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -941,6 +941,7 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceFragmentDensityMap2FeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceFragmentDensityMap2PropertiesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT); +DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceGroupProperties); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceHostQueryResetFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceIDProperties); @@ -1059,6 +1060,7 @@ DECLARE_REFLECTION_STRUCT(VkPrivateDataSlotCreateInfoEXT); DECLARE_REFLECTION_STRUCT(VkProtectedSubmitInfo); DECLARE_REFLECTION_STRUCT(VkQueryPoolCreateInfo); DECLARE_REFLECTION_STRUCT(VkQueryPoolPerformanceCreateInfoKHR); +DECLARE_REFLECTION_STRUCT(VkQueueFamilyGlobalPriorityPropertiesEXT); DECLARE_REFLECTION_STRUCT(VkQueueFamilyProperties2); DECLARE_REFLECTION_STRUCT(VkRefreshCycleDurationGOOGLE); DECLARE_REFLECTION_STRUCT(VkRenderPassAttachmentBeginInfo); @@ -1284,6 +1286,7 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMap2FeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMap2PropertiesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT); +DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceGroupProperties); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceHostQueryResetFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceIDProperties); @@ -1401,6 +1404,7 @@ DECLARE_DESERIALISE_TYPE(VkPrivateDataSlotCreateInfoEXT); DECLARE_DESERIALISE_TYPE(VkProtectedSubmitInfo); DECLARE_DESERIALISE_TYPE(VkQueryPoolCreateInfo); DECLARE_DESERIALISE_TYPE(VkQueryPoolPerformanceCreateInfoKHR); +DECLARE_DESERIALISE_TYPE(VkQueueFamilyGlobalPriorityPropertiesEXT); DECLARE_DESERIALISE_TYPE(VkQueueFamilyProperties2); DECLARE_DESERIALISE_TYPE(VkRenderPassAttachmentBeginInfo); DECLARE_DESERIALISE_TYPE(VkRenderPassBeginInfo); diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 58659f1a4..96779c071 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -944,6 +944,9 @@ static const VkExtensionProperties supportedExtensions[] = { { VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME, VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION, }, + { + VK_EXT_GLOBAL_PRIORITY_QUERY_EXTENSION_NAME, VK_EXT_GLOBAL_PRIORITY_QUERY_SPEC_VERSION, + }, { VK_EXT_HDR_METADATA_EXTENSION_NAME, VK_EXT_HDR_METADATA_SPEC_VERSION, }, diff --git a/renderdoc/driver/vulkan/vk_next_chains.cpp b/renderdoc/driver/vulkan/vk_next_chains.cpp index fe0c47ce6..9629bdd6b 100644 --- a/renderdoc/driver/vulkan/vk_next_chains.cpp +++ b/renderdoc/driver/vulkan/vk_next_chains.cpp @@ -240,6 +240,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, VkPhysicalDeviceFloatControlsProperties); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV, \ VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV) \ + COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT, \ + VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT) \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES, VkPhysicalDeviceGroupProperties) \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, \ VkPhysicalDeviceShaderFloat16Int8Features); \ @@ -461,6 +463,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, COPY_STRUCT(VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO, VkQueryPoolCreateInfo); \ COPY_STRUCT(VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR, \ VkQueryPoolPerformanceCreateInfoKHR); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT, \ + VkQueueFamilyGlobalPriorityPropertiesEXT); \ COPY_STRUCT(VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2, VkQueueFamilyProperties2); \ COPY_STRUCT(VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO, VkRenderPassCreateInfo); \ COPY_STRUCT(VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2, VkRenderPassCreateInfo2); \ @@ -741,7 +745,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR: \ - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI: \ @@ -791,7 +794,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL: \ case VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV: \ case VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV: \ - case VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT: \ case VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR: \ case VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV: \ case VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR: \ diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index 1e24fe5f6..4e44187f2 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -661,6 +661,12 @@ SERIALISE_VK_HANDLES(); PNEXT_STRUCT(VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT, \ VkDeviceQueueGlobalPriorityCreateInfoEXT) \ \ + /* VK_EXT_global_priority_query */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT, \ + VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT, \ + VkQueueFamilyGlobalPriorityPropertiesEXT) \ + \ /* VK_EXT_hdr_metadata */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_HDR_METADATA_EXT, VkHdrMetadataEXT) \ \ @@ -1267,10 +1273,6 @@ SERIALISE_VK_HANDLES(); PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT) \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT) \ \ - /* VK_EXT_global_priority_query */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT) \ - \ /* VK_EXT_headless_surface */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT) \ \ @@ -7830,6 +7832,39 @@ void Deserialise(const VkDeviceQueueGlobalPriorityCreateInfoEXT &el) DeserialiseNext(el.pNext); } +template +void DoSerialise(SerialiserType &ser, VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(globalPriorityQuery); +} + +template <> +void Deserialise(const VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkQueueFamilyGlobalPriorityPropertiesEXT &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(priorityCount); + SERIALISE_MEMBER(priorities); +} + +template <> +void Deserialise(const VkQueueFamilyGlobalPriorityPropertiesEXT &el) +{ + DeserialiseNext(el.pNext); +} + template void DoSerialise(SerialiserType &ser, VkPhysicalDeviceMemoryBudgetPropertiesEXT &el) { @@ -9720,6 +9755,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMap2FeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMap2PropertiesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceGroupProperties); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceHostQueryResetFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceIDProperties); @@ -9836,6 +9872,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPrivateDataSlotCreateInfoEXT); INSTANTIATE_SERIALISE_TYPE(VkProtectedSubmitInfo); INSTANTIATE_SERIALISE_TYPE(VkQueryPoolCreateInfo); INSTANTIATE_SERIALISE_TYPE(VkQueryPoolPerformanceCreateInfoKHR); +INSTANTIATE_SERIALISE_TYPE(VkQueueFamilyGlobalPriorityPropertiesEXT); INSTANTIATE_SERIALISE_TYPE(VkQueueFamilyProperties2); INSTANTIATE_SERIALISE_TYPE(VkRefreshCycleDurationGOOGLE); INSTANTIATE_SERIALISE_TYPE(VkRenderPassAttachmentBeginInfo); diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index 2e2f113d6..cc0529946 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -2792,6 +2792,13 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi CHECK_PHYS_EXT_FEATURE(formatRgba10x6WithoutYCbCrSampler); } END_PHYS_EXT_CHECK(); + + BEGIN_PHYS_EXT_CHECK(VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT); + { + CHECK_PHYS_EXT_FEATURE(globalPriorityQuery); + } + END_PHYS_EXT_CHECK(); } if(availFeatures.depthClamp)