diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index c9a1fac37..1a109e4ea 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -944,6 +944,7 @@ DECLARE_REFLECTION_STRUCT(VkValidationFlagsEXT); DECLARE_REFLECTION_STRUCT(VkWriteDescriptorSet); DECLARE_DESERIALISE_TYPE(VkAcquireNextImageInfoKHR); +DECLARE_DESERIALISE_TYPE(VkAcquireProfilingLockInfoKHR); DECLARE_DESERIALISE_TYPE(VkApplicationInfo); DECLARE_DESERIALISE_TYPE(VkAttachmentDescription2); DECLARE_DESERIALISE_TYPE(VkAttachmentDescriptionStencilLayout); @@ -1064,6 +1065,9 @@ DECLARE_DESERIALISE_TYPE(VkMemoryOpaqueCaptureAddressAllocateInfo); DECLARE_DESERIALISE_TYPE(VkMemoryPriorityAllocateInfoEXT); DECLARE_DESERIALISE_TYPE(VkMemoryRequirements2); DECLARE_DESERIALISE_TYPE(VkMultisamplePropertiesEXT); +DECLARE_DESERIALISE_TYPE(VkPerformanceCounterDescriptionKHR); +DECLARE_DESERIALISE_TYPE(VkPerformanceCounterKHR); +DECLARE_DESERIALISE_TYPE(VkPerformanceQuerySubmitInfoKHR); DECLARE_DESERIALISE_TYPE(VkPhysicalDevice16BitStorageFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDevice8BitStorageFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceASTCDecodeFeaturesEXT); @@ -1102,6 +1106,8 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceMemoryProperties2); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceMultiviewFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceMultiviewProperties); DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePCIBusInfoPropertiesEXT); +DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePerformanceQueryFeaturesKHR); +DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePerformanceQueryPropertiesKHR); DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR); DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePointClippingProperties); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceProperties2); @@ -1175,6 +1181,7 @@ DECLARE_DESERIALISE_TYPE(VkPresentRegionsKHR); DECLARE_DESERIALISE_TYPE(VkPresentTimesInfoGOOGLE); DECLARE_DESERIALISE_TYPE(VkProtectedSubmitInfo); DECLARE_DESERIALISE_TYPE(VkQueryPoolCreateInfo); +DECLARE_DESERIALISE_TYPE(VkQueryPoolPerformanceCreateInfoKHR); DECLARE_DESERIALISE_TYPE(VkQueueFamilyProperties2); DECLARE_DESERIALISE_TYPE(VkRenderPassAttachmentBeginInfo); DECLARE_DESERIALISE_TYPE(VkRenderPassBeginInfo); diff --git a/renderdoc/driver/vulkan/vk_next_chains.cpp b/renderdoc/driver/vulkan/vk_next_chains.cpp index 4e445a45a..574efee98 100644 --- a/renderdoc/driver/vulkan/vk_next_chains.cpp +++ b/renderdoc/driver/vulkan/vk_next_chains.cpp @@ -162,6 +162,10 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, COPY_STRUCT(VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT, VkMemoryPriorityAllocateInfoEXT); \ COPY_STRUCT(VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2, VkMemoryRequirements2); \ COPY_STRUCT(VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT, VkMultisamplePropertiesEXT); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR, \ + VkPerformanceCounterDescriptionKHR); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR, VkPerformanceCounterKHR); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR, VkPerformanceQuerySubmitInfoKHR); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, \ VkPhysicalDevice16BitStorageFeatures); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES, \ @@ -238,6 +242,10 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, VkPhysicalDeviceLineRasterizationPropertiesEXT) \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT, \ VkPhysicalDevicePCIBusInfoPropertiesEXT); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR, \ + VkPhysicalDevicePerformanceQueryFeaturesKHR); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR, \ + VkPhysicalDevicePerformanceQueryPropertiesKHR); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR, \ VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR) \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES, \ @@ -363,6 +371,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, COPY_STRUCT(VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR, VkPresentRegionsKHR); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE, VkPresentTimesInfoGOOGLE) \ 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_PROPERTIES_2, VkQueueFamilyProperties2); \ COPY_STRUCT(VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO, VkRenderPassCreateInfo); \ COPY_STRUCT(VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2, VkRenderPassCreateInfo2); \ @@ -569,11 +579,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT: \ case VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX: \ case VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL: \ - case VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR: \ - case VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR: \ case VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL: \ case VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL: \ - case VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR: \ case VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT: \ @@ -592,8 +599,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX: \ - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR: \ - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD: \ @@ -616,7 +621,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV: \ case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV: \ case VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL: \ - case VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR: \ case VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV: \ case VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV: \ case VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV: \ diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index 19e93834b..e2800c179 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -126,6 +126,7 @@ DECL_VKFLAG(VkSubpassDescription); DECL_VKFLAG(VkDescriptorBinding); DECL_VKFLAG(VkSemaphoreWait); DECL_VKFLAG(VkResolveMode); +DECL_VKFLAG_EXT(VkAcquireProfilingLock, KHR); DECL_VKFLAG_EXT(VkBuildAccelerationStructure, NV); DECL_VKFLAG_EXT(VkCompositeAlpha, KHR); DECL_VKFLAG_EXT(VkConditionalRendering, EXT); @@ -143,7 +144,7 @@ DECL_VKFLAG_EXT(VkExternalMemoryFeature, NV); DECL_VKFLAG_EXT(VkGeometry, NV); DECL_VKFLAG_EXT(VkGeometryInstance, NV); DECL_VKFLAG_EXT(VkIndirectCommandsLayoutUsage, NVX); -DECL_VKFLAG_EXT(VkObjectEntryUsage, NVX); +DECL_VKFLAG_EXT(VkPerformanceCounterDescription, KHR); DECL_VKFLAG_EMPTY_EXT(VkPipelineCoverageModulationStateCreate, NV); DECL_VKFLAG_EMPTY_EXT(VkPipelineCoverageToColorStateCreate, NV); DECL_VKFLAG_EMPTY_EXT(VkPipelineDiscardRectangleStateCreate, EXT); @@ -860,6 +861,19 @@ SERIALISE_VK_HANDLES(); PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES, \ VkPhysicalDeviceMultiviewProperties) \ \ + /* VK_KHR_performance_query */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR, \ + VkPhysicalDevicePerformanceQueryFeaturesKHR) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR, \ + VkPhysicalDevicePerformanceQueryPropertiesKHR) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR, \ + VkQueryPoolPerformanceCreateInfoKHR) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR, VkPerformanceQuerySubmitInfoKHR) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR, VkAcquireProfilingLockInfoKHR) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR, VkPerformanceCounterKHR) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR, \ + VkPerformanceCounterDescriptionKHR) \ + \ /* VK_KHR_pipeline_executable_properties */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR, \ VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR) \ @@ -887,6 +901,14 @@ SERIALISE_VK_HANDLES(); PNEXT_STRUCT(VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES, \ VkSamplerYcbcrConversionImageFormatProperties) \ \ + /* VK_KHR_separate_depth_stencil_layouts */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES, \ + VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT, \ + VkAttachmentReferenceStencilLayout) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT, \ + VkAttachmentDescriptionStencilLayout) \ + \ /* VK_KHR_shader_atomic_int64 */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES, \ VkPhysicalDeviceShaderAtomicInt64Features) \ @@ -963,14 +985,6 @@ SERIALISE_VK_HANDLES(); PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV, \ VkPhysicalDeviceShaderImageFootprintFeaturesNV) \ \ - /* VK_KHR_separate_depth_stencil_layouts */ \ - PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR, \ - VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR) \ - PNEXT_STRUCT(VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR, \ - VkAttachmentReferenceStencilLayoutKHR) \ - PNEXT_STRUCT(VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR, \ - VkAttachmentDescriptionStencilLayoutKHR) \ - \ /* Surface creation structs. These would pull in dependencies on OS-specific includes. */ \ /* So treat them as unsupported. */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR) \ @@ -1038,15 +1052,6 @@ SERIALISE_VK_HANDLES(); /* VK_EXT_texture_compression_astc_hdr */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT) \ \ - /* VK_KHR_performance_query */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR) \ - \ /* VK_INTEL_performance_query */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL) \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL) \ @@ -7919,26 +7924,25 @@ void Deserialise(const VkPhysicalDeviceCoherentMemoryFeaturesAMD &el) } template -void DoSerialise(SerialiserType &ser, VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR &el) +void DoSerialise(SerialiserType &ser, VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures &el) { RDCASSERT(ser.IsReading() || - el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR); + el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES); SerialiseNext(ser, el.sType, el.pNext); SERIALISE_MEMBER(separateDepthStencilLayouts); } template <> -void Deserialise(const VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR &el) +void Deserialise(const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures &el) { DeserialiseNext(el.pNext); } template -void DoSerialise(SerialiserType &ser, VkAttachmentDescriptionStencilLayoutKHR &el) +void DoSerialise(SerialiserType &ser, VkAttachmentDescriptionStencilLayout &el) { - RDCASSERT(ser.IsReading() || - el.sType == VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR); + RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT); SerialiseNext(ser, el.sType, el.pNext); SERIALISE_MEMBER(stencilInitialLayout); @@ -7946,31 +7950,152 @@ void DoSerialise(SerialiserType &ser, VkAttachmentDescriptionStencilLayoutKHR &e } template <> -void Deserialise(const VkAttachmentDescriptionStencilLayoutKHR &el) +void Deserialise(const VkAttachmentDescriptionStencilLayout &el) { DeserialiseNext(el.pNext); } template -void DoSerialise(SerialiserType &ser, VkAttachmentReferenceStencilLayoutKHR &el) +void DoSerialise(SerialiserType &ser, VkAttachmentReferenceStencilLayout &el) { - RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR); + RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT); SerialiseNext(ser, el.sType, el.pNext); SERIALISE_MEMBER(stencilLayout); } template <> -void Deserialise(const VkAttachmentReferenceStencilLayoutKHR &el) +void Deserialise(const VkAttachmentReferenceStencilLayout &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkPerformanceCounterKHR &el) +{ + RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(unit); + SERIALISE_MEMBER(scope); + SERIALISE_MEMBER(storage); + SERIALISE_MEMBER(uuid); +} + +template <> +void Deserialise(const VkPerformanceCounterKHR &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkPerformanceCounterDescriptionKHR &el) +{ + RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER_VKFLAGS(VkPerformanceCounterDescriptionFlagsKHR, flags); + SERIALISE_MEMBER(name); + SERIALISE_MEMBER(category); + SERIALISE_MEMBER(description); +} + +template <> +void Deserialise(const VkPerformanceCounterDescriptionKHR &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkPhysicalDevicePerformanceQueryFeaturesKHR &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(performanceCounterQueryPools); + SERIALISE_MEMBER(performanceCounterMultipleQueryPools); +} + +template <> +void Deserialise(const VkPhysicalDevicePerformanceQueryFeaturesKHR &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkPhysicalDevicePerformanceQueryPropertiesKHR &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(allowCommandBufferQueryCopies); +} + +template <> +void Deserialise(const VkPhysicalDevicePerformanceQueryPropertiesKHR &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkQueryPoolPerformanceCreateInfoKHR &el) +{ + RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(queueFamilyIndex); + SERIALISE_MEMBER(counterIndexCount); + SERIALISE_MEMBER_ARRAY(pCounterIndices, counterIndexCount); +} + +template <> +void Deserialise(const VkQueryPoolPerformanceCreateInfoKHR &el) +{ + delete[] el.pCounterIndices; + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkAcquireProfilingLockInfoKHR &el) +{ + RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER_VKFLAGS(VkAcquireProfilingLockFlagsKHR, flags); + SERIALISE_MEMBER(timeout); +} + +template <> +void Deserialise(const VkAcquireProfilingLockInfoKHR &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkPerformanceQuerySubmitInfoKHR &el) +{ + RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(counterPassIndex); +} + +template <> +void Deserialise(const VkPerformanceQuerySubmitInfoKHR &el) { DeserialiseNext(el.pNext); } // pNext structs - always have deserialise for the next chain INSTANTIATE_SERIALISE_TYPE(VkAcquireNextImageInfoKHR); +INSTANTIATE_SERIALISE_TYPE(VkAcquireProfilingLockInfoKHR); INSTANTIATE_SERIALISE_TYPE(VkApplicationInfo); INSTANTIATE_SERIALISE_TYPE(VkAttachmentDescription2); +INSTANTIATE_SERIALISE_TYPE(VkAttachmentDescriptionStencilLayoutKHR); INSTANTIATE_SERIALISE_TYPE(VkAttachmentReference2); +INSTANTIATE_SERIALISE_TYPE(VkAttachmentReferenceStencilLayoutKHR); INSTANTIATE_SERIALISE_TYPE(VkAttachmentSampleLocationsEXT); INSTANTIATE_SERIALISE_TYPE(VkBindBufferMemoryDeviceGroupInfo); INSTANTIATE_SERIALISE_TYPE(VkBindBufferMemoryInfo); @@ -8090,11 +8215,14 @@ INSTANTIATE_SERIALISE_TYPE(VkMemoryPriorityAllocateInfoEXT); INSTANTIATE_SERIALISE_TYPE(VkMemoryRequirements2); INSTANTIATE_SERIALISE_TYPE(VkMultisamplePropertiesEXT); INSTANTIATE_SERIALISE_TYPE(VkPastPresentationTimingGOOGLE); +INSTANTIATE_SERIALISE_TYPE(VkPerformanceCounterDescriptionKHR); +INSTANTIATE_SERIALISE_TYPE(VkPerformanceCounterKHR); +INSTANTIATE_SERIALISE_TYPE(VkPerformanceQuerySubmitInfoKHR); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevice16BitStorageFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevice8BitStorageFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceASTCDecodeFeaturesEXT) -INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceBufferDeviceAddressFeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceBufferDeviceAddressFeatures); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceBufferDeviceAddressFeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceCoherentMemoryFeaturesAMD); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceConditionalRenderingFeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceConservativeRasterizationPropertiesEXT); @@ -8130,6 +8258,8 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceMemoryProperties2); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceMultiviewFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceMultiviewProperties); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePCIBusInfoPropertiesEXT); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePerformanceQueryFeaturesKHR); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePerformanceQueryPropertiesKHR); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePointClippingProperties); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceProperties2); @@ -8140,6 +8270,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSampleLocationsPropertiesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSamplerFilterMinmaxProperties); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSamplerYcbcrConversionFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceScalarBlockLayoutFeatures); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderAtomicInt64Features); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderClockFeaturesKHR); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderCorePropertiesAMD); @@ -8203,6 +8334,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPresentTimeGOOGLE); INSTANTIATE_SERIALISE_TYPE(VkPresentTimesInfoGOOGLE); INSTANTIATE_SERIALISE_TYPE(VkProtectedSubmitInfo); INSTANTIATE_SERIALISE_TYPE(VkQueryPoolCreateInfo); +INSTANTIATE_SERIALISE_TYPE(VkQueryPoolPerformanceCreateInfoKHR); INSTANTIATE_SERIALISE_TYPE(VkQueueFamilyProperties2); INSTANTIATE_SERIALISE_TYPE(VkRefreshCycleDurationGOOGLE); INSTANTIATE_SERIALISE_TYPE(VkRenderPassAttachmentBeginInfo); @@ -8249,9 +8381,6 @@ INSTANTIATE_SERIALISE_TYPE(VkValidationCacheCreateInfoEXT); INSTANTIATE_SERIALISE_TYPE(VkValidationFeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkValidationFlagsEXT); INSTANTIATE_SERIALISE_TYPE(VkWriteDescriptorSet); -INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR); -INSTANTIATE_SERIALISE_TYPE(VkAttachmentReferenceStencilLayoutKHR); -INSTANTIATE_SERIALISE_TYPE(VkAttachmentDescriptionStencilLayoutKHR); // plain structs with no next chain INSTANTIATE_SERIALISE_TYPE(VkAllocationCallbacks); diff --git a/renderdoc/driver/vulkan/vk_stringise.cpp b/renderdoc/driver/vulkan/vk_stringise.cpp index e61ec9856..136b12313 100644 --- a/renderdoc/driver/vulkan/vk_stringise.cpp +++ b/renderdoc/driver/vulkan/vk_stringise.cpp @@ -817,6 +817,26 @@ rdcstr DoStringise(const VkDebugUtilsMessageTypeFlagBitsEXT &el) END_BITFIELD_STRINGISE(); } +template <> +rdcstr DoStringise(const VkAcquireProfilingLockFlagBitsKHR &el) +{ + BEGIN_BITFIELD_STRINGISE(VkAcquireProfilingLockFlagBitsKHR); + { + } + END_BITFIELD_STRINGISE(); +} + +template <> +rdcstr DoStringise(const VkPerformanceCounterDescriptionFlagBitsKHR &el) +{ + BEGIN_BITFIELD_STRINGISE(VkPerformanceCounterDescriptionFlagBitsKHR); + { + STRINGISE_BITFIELD_BIT(VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR); + STRINGISE_BITFIELD_BIT(VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR); + } + END_BITFIELD_STRINGISE(); +} + template <> rdcstr DoStringise(const VkMemoryAllocateFlagBits &el) { @@ -2394,6 +2414,53 @@ rdcstr DoStringise(const VkDiscardRectangleModeEXT &el) END_ENUM_STRINGISE(); } +template <> +rdcstr DoStringise(const VkPerformanceCounterUnitKHR &el) +{ + BEGIN_ENUM_STRINGISE(VkPerformanceCounterUnitKHR); + { + STRINGISE_ENUM(VK_PERFORMANCE_COUNTER_UNIT_GENERIC_KHR) + STRINGISE_ENUM(VK_PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR) + STRINGISE_ENUM(VK_PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR) + STRINGISE_ENUM(VK_PERFORMANCE_COUNTER_UNIT_BYTES_KHR) + STRINGISE_ENUM(VK_PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR) + STRINGISE_ENUM(VK_PERFORMANCE_COUNTER_UNIT_KELVIN_KHR) + STRINGISE_ENUM(VK_PERFORMANCE_COUNTER_UNIT_WATTS_KHR) + STRINGISE_ENUM(VK_PERFORMANCE_COUNTER_UNIT_VOLTS_KHR) + STRINGISE_ENUM(VK_PERFORMANCE_COUNTER_UNIT_AMPS_KHR) + STRINGISE_ENUM(VK_PERFORMANCE_COUNTER_UNIT_HERTZ_KHR) + STRINGISE_ENUM(VK_PERFORMANCE_COUNTER_UNIT_CYCLES_KHR) + } + END_ENUM_STRINGISE(); +} + +template <> +rdcstr DoStringise(const VkPerformanceCounterScopeKHR &el) +{ + BEGIN_ENUM_STRINGISE(VkPerformanceCounterScopeKHR); + { + STRINGISE_ENUM(VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR) + STRINGISE_ENUM(VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR) + STRINGISE_ENUM(VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR) + } + END_ENUM_STRINGISE(); +} + +template <> +rdcstr DoStringise(const VkPerformanceCounterStorageKHR &el) +{ + BEGIN_ENUM_STRINGISE(VkPerformanceCounterStorageKHR); + { + STRINGISE_ENUM(VK_PERFORMANCE_COUNTER_STORAGE_INT32_KHR) + STRINGISE_ENUM(VK_PERFORMANCE_COUNTER_STORAGE_INT64_KHR) + STRINGISE_ENUM(VK_PERFORMANCE_COUNTER_STORAGE_UINT32_KHR) + STRINGISE_ENUM(VK_PERFORMANCE_COUNTER_STORAGE_UINT64_KHR) + STRINGISE_ENUM(VK_PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR) + STRINGISE_ENUM(VK_PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR) + } + END_ENUM_STRINGISE(); +} + template <> rdcstr DoStringise(const VkPointClippingBehavior &el) { diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index 83a41a281..eb8b39c08 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -2515,6 +2515,14 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi m_SeparateDepthStencil |= (ext->separateDepthStencilLayouts != VK_FALSE); } END_PHYS_EXT_CHECK(); + + BEGIN_PHYS_EXT_CHECK(VkPhysicalDevicePerformanceQueryFeaturesKHR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR); + { + CHECK_PHYS_EXT_FEATURE(performanceCounterQueryPools); + CHECK_PHYS_EXT_FEATURE(performanceCounterMultipleQueryPools); + } + END_PHYS_EXT_CHECK(); } if(availFeatures.depthClamp)