From 392073abe652976cf88d5f7a8f84d8cd0fd98a02 Mon Sep 17 00:00:00 2001 From: Shahbaz Youssefi Date: Sat, 27 Aug 2022 23:49:25 -0400 Subject: [PATCH] Support VK_EXT_primitives_generated_query This extension introduces a new query to aid GL emulation (equivalent to GL_PRIMITIVES_GENERATED) --- renderdoc/driver/vulkan/vk_common.h | 6 +++-- renderdoc/driver/vulkan/vk_core.cpp | 4 ++++ renderdoc/driver/vulkan/vk_hookset_defs.h | 2 ++ renderdoc/driver/vulkan/vk_next_chains.cpp | 7 +++--- renderdoc/driver/vulkan/vk_serialise.cpp | 28 ++++++++++++++++++---- 5 files changed, 38 insertions(+), 9 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index 4a52374f9..452e3a8de 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -1009,10 +1009,11 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePerformanceQueryPropertiesKHR); DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePipelineCreationCacheControlFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR); DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePointClippingProperties); -DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePrivateDataFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePresentIdFeaturesKHR); DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePresentWaitFeaturesKHR); +DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT); +DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePrivateDataFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceProperties2); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceProtectedMemoryFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceProtectedMemoryProperties); @@ -1386,10 +1387,11 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePerformanceQueryPropertiesKHR); DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePipelineCreationCacheControlFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR); DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePointClippingProperties); -DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePrivateDataFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePresentIdFeaturesKHR); DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePresentWaitFeaturesKHR); +DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT); +DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePrivateDataFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceProperties2); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceProtectedMemoryFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceProtectedMemoryProperties); diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 7ad7e1972..99a4bede0 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -1017,6 +1017,10 @@ static const VkExtensionProperties supportedExtensions[] = { VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART_EXTENSION_NAME, VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART_SPEC_VERSION, }, + { + VK_EXT_PRIMITIVES_GENERATED_QUERY_EXTENSION_NAME, + VK_EXT_PRIMITIVES_GENERATED_QUERY_SPEC_VERSION, + }, { VK_EXT_PRIVATE_DATA_EXTENSION_NAME, VK_EXT_PRIVATE_DATA_SPEC_VERSION, }, diff --git a/renderdoc/driver/vulkan/vk_hookset_defs.h b/renderdoc/driver/vulkan/vk_hookset_defs.h index 93b877abe..46629f734 100644 --- a/renderdoc/driver/vulkan/vk_hookset_defs.h +++ b/renderdoc/driver/vulkan/vk_hookset_defs.h @@ -528,6 +528,7 @@ DeclExt(EXT_robustness2); \ DeclExt(EXT_pipeline_creation_cache_control); \ DeclExt(EXT_primitive_topology_list_restart); \ + DeclExt(EXT_primitives_generated_query); \ DeclExt(EXT_private_data); \ DeclExt(EXT_extended_dynamic_state); \ DeclExt(KHR_copy_commands2); \ @@ -638,6 +639,7 @@ CheckExt(EXT_robustness2, VKXX); \ CheckExt(EXT_pipeline_creation_cache_control, VKXX); \ CheckExt(EXT_primitive_topology_list_restart, VKXX); \ + CheckExt(EXT_primitives_generated_query, VKXX); \ CheckExt(EXT_private_data, VK13); \ CheckExt(EXT_extended_dynamic_state, VK13); \ CheckExt(KHR_copy_commands2, VK13); \ diff --git a/renderdoc/driver/vulkan/vk_next_chains.cpp b/renderdoc/driver/vulkan/vk_next_chains.cpp index e4878b323..ab8353a86 100644 --- a/renderdoc/driver/vulkan/vk_next_chains.cpp +++ b/renderdoc/driver/vulkan/vk_next_chains.cpp @@ -336,14 +336,16 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR) \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES, \ VkPhysicalDevicePointClippingProperties); \ - COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES, \ - VkPhysicalDevicePrivateDataFeatures); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR, \ VkPhysicalDevicePresentIdFeaturesKHR); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR, \ VkPhysicalDevicePresentWaitFeaturesKHR); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT, \ VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT) \ + COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT, \ + VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES, \ + VkPhysicalDevicePrivateDataFeatures); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2, VkPhysicalDeviceProperties2); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, \ VkPhysicalDeviceProtectedMemoryFeatures); \ @@ -843,7 +845,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES_EXT: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES_EXT: \ - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_ARM: \ diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index 776da6870..9d695b212 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -749,6 +749,10 @@ SERIALISE_VK_HANDLES(); PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT, \ VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT) \ \ + /* VK_EXT_primitives_generated_query */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT, \ + VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT) \ + \ /* VK_EXT_private_data */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES, \ VkPhysicalDevicePrivateDataFeatures) \ @@ -1430,9 +1434,6 @@ SERIALISE_VK_HANDLES(); PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES_EXT) \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES_EXT) \ \ - /* VK_EXT_primitives_generated_query */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT) \ - \ /* VK_EXT_provoking_vertex */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT) \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT) \ @@ -6846,6 +6847,24 @@ void Deserialise(const VkPipelineShaderStageRequiredSubgroupSizeCreateInfo &el) DeserialiseNext(el.pNext); } +template +void DoSerialise(SerialiserType &ser, VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(primitivesGeneratedQuery); + SERIALISE_MEMBER(primitivesGeneratedQueryWithRasterizerDiscard); + SERIALISE_MEMBER(primitivesGeneratedQueryWithNonZeroStreams); +} + +template <> +void Deserialise(const VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT &el) +{ + DeserialiseNext(el.pNext); +} + template void DoSerialise(SerialiserType &ser, VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT &el) { @@ -10652,10 +10671,11 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePerformanceQueryPropertiesKHR); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePipelineCreationCacheControlFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePointClippingProperties); -INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePrivateDataFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePresentIdFeaturesKHR); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePresentWaitFeaturesKHR); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePrivateDataFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceProperties2); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceProtectedMemoryFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceProtectedMemoryProperties);