From d0e9d73d3c84e53e3cbe8fc5b82618d61b6dc1ca Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 3 Jul 2026 16:31:28 +0100 Subject: [PATCH] Implement support for NV diagnostics extensions * These are treated as read-only, we replay checkpoints but they are for aftermath so don't mean anything. * This allows applications to leave aftermath on, normally this could be silently allowed but aftermath affects shader compilation when enabled. --- renderdoc/driver/vulkan/extension_support.md | 4 +- renderdoc/driver/vulkan/vk_common.h | 56 +++--- renderdoc/driver/vulkan/vk_core.cpp | 11 ++ renderdoc/driver/vulkan/vk_core.h | 8 + renderdoc/driver/vulkan/vk_hookset_defs.h | 15 +- renderdoc/driver/vulkan/vk_next_chains.cpp | 16 +- renderdoc/driver/vulkan/vk_serialise.cpp | 159 +++++++++++++++--- renderdoc/driver/vulkan/vk_stringise.cpp | 16 +- .../driver/vulkan/wrappers/vk_cmd_funcs.cpp | 54 ++++++ .../vulkan/wrappers/vk_device_funcs.cpp | 7 + .../driver/vulkan/wrappers/vk_get_funcs.cpp | 13 ++ 11 files changed, 308 insertions(+), 51 deletions(-) diff --git a/renderdoc/driver/vulkan/extension_support.md b/renderdoc/driver/vulkan/extension_support.md index 1cdf40156..8a9be4b78 100644 --- a/renderdoc/driver/vulkan/extension_support.md +++ b/renderdoc/driver/vulkan/extension_support.md @@ -258,6 +258,8 @@ Maintainers can update this file by updating vk.xml in this folder and running ` * `VK_MVK_macos_surface` * `VK_NV_compute_shader_derivatives` * `VK_NV_dedicated_allocation` +* `VK_NV_device_diagnostic_checkpoints` +* `VK_NV_device_diagnostics_config` * `VK_NV_external_memory_capabilities` * `VK_NV_external_memory_win32` * `VK_NV_external_memory` @@ -427,8 +429,6 @@ The portability subset is only relevant on mac, which is not a supported platfor * `VK_NV_cuda_kernel_launch` * `VK_NV_dedicated_allocation_image_aliasing` * `VK_NV_descriptor_pool_overallocation` -* `VK_NV_device_diagnostic_checkpoints` -* `VK_NV_device_diagnostics_config` * `VK_NV_device_generated_commands_compute` * `VK_NV_device_generated_commands` * `VK_NV_displacement_micromap` diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index df661d059..da4eef5b5 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -1410,6 +1410,7 @@ enum class VulkanChunk : uint32_t SetQueueAnnotation, SetCommandAnnotation, vkCmdBeginCustomResolveEXT, + vkCmdSetCheckpointNV, Max, }; @@ -1503,6 +1504,8 @@ DECLARE_REFLECTION_STRUCT(VkBufferOpaqueCaptureAddressCreateInfo); DECLARE_REFLECTION_STRUCT(VkBufferUsageFlags2CreateInfo); DECLARE_REFLECTION_STRUCT(VkBufferViewCreateInfo); DECLARE_REFLECTION_STRUCT(VkCalibratedTimestampInfoKHR); +DECLARE_REFLECTION_STRUCT(VkCheckpointData2NV); +DECLARE_REFLECTION_STRUCT(VkCheckpointDataNV); DECLARE_REFLECTION_STRUCT(VkCommandBufferAllocateInfo); DECLARE_REFLECTION_STRUCT(VkCommandBufferBeginInfo); DECLARE_REFLECTION_STRUCT(VkCommandBufferInheritanceConditionalRenderingInfoEXT); @@ -1552,6 +1555,7 @@ DECLARE_REFLECTION_STRUCT(VkDescriptorSetVariableDescriptorCountLayoutSupport) DECLARE_REFLECTION_STRUCT(VkDescriptorUpdateTemplateCreateInfo); DECLARE_REFLECTION_STRUCT(VkDeviceBufferMemoryRequirements); DECLARE_REFLECTION_STRUCT(VkDeviceCreateInfo); +DECLARE_REFLECTION_STRUCT(VkDeviceDiagnosticsConfigCreateInfoNV); DECLARE_REFLECTION_STRUCT(VkDeviceEventInfoEXT); DECLARE_REFLECTION_STRUCT(VkDeviceGroupBindSparseInfo); DECLARE_REFLECTION_STRUCT(VkDeviceGroupCommandBufferBeginInfo); @@ -1578,8 +1582,8 @@ DECLARE_REFLECTION_STRUCT(VkDisplayPlaneProperties2KHR); DECLARE_REFLECTION_STRUCT(VkDisplayPowerInfoEXT); DECLARE_REFLECTION_STRUCT(VkDisplayPresentInfoKHR); DECLARE_REFLECTION_STRUCT(VkDisplayProperties2KHR); -DECLARE_REFLECTION_STRUCT(VkDrmFormatModifierPropertiesListEXT); DECLARE_REFLECTION_STRUCT(VkDrmFormatModifierPropertiesList2EXT); +DECLARE_REFLECTION_STRUCT(VkDrmFormatModifierPropertiesListEXT); DECLARE_REFLECTION_STRUCT(VkEventCreateInfo); DECLARE_REFLECTION_STRUCT(VkExportFenceCreateInfo); DECLARE_REFLECTION_STRUCT(VkExportMemoryAllocateInfo); @@ -1612,10 +1616,10 @@ DECLARE_REFLECTION_STRUCT(VkImageCompressionControlEXT); DECLARE_REFLECTION_STRUCT(VkImageCompressionPropertiesEXT); DECLARE_REFLECTION_STRUCT(VkImageCopy2); DECLARE_REFLECTION_STRUCT(VkImageCreateInfo); -DECLARE_REFLECTION_STRUCT(VkImageFormatListCreateInfo); DECLARE_REFLECTION_STRUCT(VkImageDrmFormatModifierExplicitCreateInfoEXT); DECLARE_REFLECTION_STRUCT(VkImageDrmFormatModifierListCreateInfoEXT); DECLARE_REFLECTION_STRUCT(VkImageDrmFormatModifierPropertiesEXT); +DECLARE_REFLECTION_STRUCT(VkImageFormatListCreateInfo); DECLARE_REFLECTION_STRUCT(VkImageFormatProperties2); DECLARE_REFLECTION_STRUCT(VkImageMemoryBarrier); DECLARE_REFLECTION_STRUCT(VkImageMemoryBarrier2); @@ -1691,6 +1695,7 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceDescriptorBufferFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceDescriptorBufferPropertiesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceDescriptorIndexingFeatures) DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceDescriptorIndexingProperties) +DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceDiagnosticsConfigFeaturesNV); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceDiscardRectanglePropertiesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceDriverProperties); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceDynamicRenderingFeatures); @@ -1709,10 +1714,10 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceFloatControlsProperties); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceFragmentDensityMap2FeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceFragmentDensityMap2PropertiesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceFragmentDensityMapFeaturesEXT); -DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT); -DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE); +DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT); +DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceFragmentDensityMapPropertiesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR); @@ -1740,9 +1745,9 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceImageViewMinLodFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceIndexTypeUint8Features); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceInlineUniformBlockFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceInlineUniformBlockProperties); -DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceLayeredApiVulkanPropertiesKHR); -DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceLayeredApiPropertiesListKHR); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceLayeredApiPropertiesKHR); +DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceLayeredApiPropertiesListKHR); +DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceLayeredApiVulkanPropertiesKHR); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceLineRasterizationFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceLineRasterizationProperties); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceMaintenance3Properties); @@ -1918,6 +1923,8 @@ DECLARE_REFLECTION_STRUCT(VkPushDescriptorSetInfo) DECLARE_REFLECTION_STRUCT(VkPushDescriptorSetWithTemplateInfo) DECLARE_REFLECTION_STRUCT(VkQueryPoolCreateInfo); DECLARE_REFLECTION_STRUCT(VkQueryPoolPerformanceCreateInfoKHR); +DECLARE_REFLECTION_STRUCT(VkQueueFamilyCheckpointProperties2NV); +DECLARE_REFLECTION_STRUCT(VkQueueFamilyCheckpointPropertiesNV); DECLARE_REFLECTION_STRUCT(VkQueueFamilyGlobalPriorityProperties); DECLARE_REFLECTION_STRUCT(VkQueueFamilyOwnershipTransferPropertiesKHR); DECLARE_REFLECTION_STRUCT(VkQueueFamilyProperties2); @@ -1929,10 +1936,10 @@ DECLARE_REFLECTION_STRUCT(VkReleaseSwapchainImagesInfoKHR); DECLARE_REFLECTION_STRUCT(VkRenderingAreaInfo); DECLARE_REFLECTION_STRUCT(VkRenderingAttachmentInfo); DECLARE_REFLECTION_STRUCT(VkRenderingAttachmentLocationInfo); +DECLARE_REFLECTION_STRUCT(VkRenderingEndInfoKHR); DECLARE_REFLECTION_STRUCT(VkRenderingFragmentDensityMapAttachmentInfoEXT); DECLARE_REFLECTION_STRUCT(VkRenderingFragmentShadingRateAttachmentInfoKHR); DECLARE_REFLECTION_STRUCT(VkRenderingInfo); -DECLARE_REFLECTION_STRUCT(VkRenderingEndInfoKHR); DECLARE_REFLECTION_STRUCT(VkRenderingInputAttachmentIndexInfo); DECLARE_REFLECTION_STRUCT(VkRenderPassAttachmentBeginInfo); DECLARE_REFLECTION_STRUCT(VkRenderPassBeginInfo); @@ -2023,6 +2030,7 @@ DECLARE_DESERIALISE_TYPE(VkAttachmentFeedbackLoopInfoEXT); DECLARE_DESERIALISE_TYPE(VkAttachmentReference2); DECLARE_DESERIALISE_TYPE(VkAttachmentReferenceStencilLayout); DECLARE_DESERIALISE_TYPE(VkAttachmentSampleLocationsEXT); +DECLARE_DESERIALISE_TYPE(VkBeginCustomResolveInfoEXT); DECLARE_DESERIALISE_TYPE(VkBindBufferMemoryDeviceGroupInfo); DECLARE_DESERIALISE_TYPE(VkBindBufferMemoryInfo); DECLARE_DESERIALISE_TYPE(VkBindDescriptorBufferEmbeddedSamplersInfoEXT) @@ -2045,6 +2053,8 @@ DECLARE_DESERIALISE_TYPE(VkBufferOpaqueCaptureAddressCreateInfo); DECLARE_DESERIALISE_TYPE(VkBufferUsageFlags2CreateInfo); DECLARE_DESERIALISE_TYPE(VkBufferViewCreateInfo); DECLARE_DESERIALISE_TYPE(VkCalibratedTimestampInfoKHR); +DECLARE_DESERIALISE_TYPE(VkCheckpointData2NV); +DECLARE_DESERIALISE_TYPE(VkCheckpointDataNV); DECLARE_DESERIALISE_TYPE(VkCommandBufferAllocateInfo); DECLARE_DESERIALISE_TYPE(VkCommandBufferBeginInfo); DECLARE_DESERIALISE_TYPE(VkCommandBufferInheritanceConditionalRenderingInfoEXT); @@ -2065,7 +2075,6 @@ DECLARE_DESERIALISE_TYPE(VkCopyImageToImageInfo); DECLARE_DESERIALISE_TYPE(VkCopyImageToMemoryInfo); DECLARE_DESERIALISE_TYPE(VkCopyMemoryToAccelerationStructureInfoKHR); DECLARE_DESERIALISE_TYPE(VkCopyMemoryToImageInfo); -DECLARE_DESERIALISE_TYPE(VkBeginCustomResolveInfoEXT); DECLARE_DESERIALISE_TYPE(VkDebugMarkerMarkerInfoEXT); DECLARE_DESERIALISE_TYPE(VkDebugMarkerObjectNameInfoEXT); DECLARE_DESERIALISE_TYPE(VkDebugMarkerObjectTagInfoEXT); @@ -2094,6 +2103,7 @@ DECLARE_DESERIALISE_TYPE(VkDescriptorSetVariableDescriptorCountLayoutSupport) DECLARE_DESERIALISE_TYPE(VkDescriptorUpdateTemplateCreateInfo); DECLARE_DESERIALISE_TYPE(VkDeviceBufferMemoryRequirements); DECLARE_DESERIALISE_TYPE(VkDeviceCreateInfo); +DECLARE_DESERIALISE_TYPE(VkDeviceDiagnosticsConfigCreateInfoNV); DECLARE_DESERIALISE_TYPE(VkDeviceEventInfoEXT); DECLARE_DESERIALISE_TYPE(VkDeviceGroupBindSparseInfo); DECLARE_DESERIALISE_TYPE(VkDeviceGroupCommandBufferBeginInfo); @@ -2153,10 +2163,10 @@ DECLARE_DESERIALISE_TYPE(VkImageCompressionControlEXT); DECLARE_DESERIALISE_TYPE(VkImageCompressionPropertiesEXT); DECLARE_DESERIALISE_TYPE(VkImageCopy2); DECLARE_DESERIALISE_TYPE(VkImageCreateInfo); -DECLARE_DESERIALISE_TYPE(VkImageFormatListCreateInfo); DECLARE_DESERIALISE_TYPE(VkImageDrmFormatModifierExplicitCreateInfoEXT); DECLARE_DESERIALISE_TYPE(VkImageDrmFormatModifierListCreateInfoEXT); DECLARE_DESERIALISE_TYPE(VkImageDrmFormatModifierPropertiesEXT); +DECLARE_DESERIALISE_TYPE(VkImageFormatListCreateInfo); DECLARE_DESERIALISE_TYPE(VkImageFormatProperties2); DECLARE_DESERIALISE_TYPE(VkImageMemoryBarrier); DECLARE_DESERIALISE_TYPE(VkImageMemoryBarrier2); @@ -2228,6 +2238,7 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceDescriptorBufferFeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceDescriptorBufferPropertiesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceDescriptorIndexingFeatures) DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceDescriptorIndexingProperties) +DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceDiagnosticsConfigFeaturesNV); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceDiscardRectanglePropertiesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceDriverProperties); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceDynamicRenderingFeatures); @@ -2246,10 +2257,10 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceFloatControlsProperties); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMap2FeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMap2PropertiesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMapFeaturesEXT); -DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT); -DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE); +DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT); +DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMapPropertiesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR); @@ -2277,9 +2288,9 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceImageViewMinLodFeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceIndexTypeUint8Features); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceInlineUniformBlockFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceInlineUniformBlockProperties); -DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceLayeredApiVulkanPropertiesKHR); -DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceLayeredApiPropertiesListKHR); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceLayeredApiPropertiesKHR); +DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceLayeredApiPropertiesListKHR); +DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceLayeredApiVulkanPropertiesKHR); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceLineRasterizationFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceLineRasterizationProperties); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceMaintenance3Properties); @@ -2417,8 +2428,8 @@ DECLARE_DESERIALISE_TYPE(VkPipelineExecutableInfoKHR); DECLARE_DESERIALISE_TYPE(VkPipelineExecutableInternalRepresentationKHR); DECLARE_DESERIALISE_TYPE(VkPipelineExecutablePropertiesKHR); DECLARE_DESERIALISE_TYPE(VkPipelineExecutableStatisticKHR); -DECLARE_DESERIALISE_TYPE(VkPipelineFragmentShadingRateStateCreateInfoKHR); DECLARE_DESERIALISE_TYPE(VkPipelineFragmentDensityMapLayeredCreateInfoVALVE); +DECLARE_DESERIALISE_TYPE(VkPipelineFragmentShadingRateStateCreateInfoKHR); DECLARE_DESERIALISE_TYPE(VkPipelineInfoKHR); DECLARE_DESERIALISE_TYPE(VkPipelineInputAssemblyStateCreateInfo); DECLARE_DESERIALISE_TYPE(VkPipelineLayoutCreateInfo); @@ -2454,6 +2465,8 @@ DECLARE_DESERIALISE_TYPE(VkPushDescriptorSetInfo) DECLARE_DESERIALISE_TYPE(VkPushDescriptorSetWithTemplateInfo) DECLARE_DESERIALISE_TYPE(VkQueryPoolCreateInfo); DECLARE_DESERIALISE_TYPE(VkQueryPoolPerformanceCreateInfoKHR); +DECLARE_DESERIALISE_TYPE(VkQueueFamilyCheckpointProperties2NV); +DECLARE_DESERIALISE_TYPE(VkQueueFamilyCheckpointPropertiesNV); DECLARE_DESERIALISE_TYPE(VkQueueFamilyGlobalPriorityProperties); DECLARE_DESERIALISE_TYPE(VkQueueFamilyOwnershipTransferPropertiesKHR); DECLARE_DESERIALISE_TYPE(VkQueueFamilyProperties2); @@ -2464,10 +2477,10 @@ DECLARE_DESERIALISE_TYPE(VkReleaseSwapchainImagesInfoKHR); DECLARE_DESERIALISE_TYPE(VkRenderingAreaInfo); DECLARE_DESERIALISE_TYPE(VkRenderingAttachmentInfo); DECLARE_DESERIALISE_TYPE(VkRenderingAttachmentLocationInfo); +DECLARE_DESERIALISE_TYPE(VkRenderingEndInfoKHR); DECLARE_DESERIALISE_TYPE(VkRenderingFragmentDensityMapAttachmentInfoEXT); DECLARE_DESERIALISE_TYPE(VkRenderingFragmentShadingRateAttachmentInfoKHR); DECLARE_DESERIALISE_TYPE(VkRenderingInfo); -DECLARE_DESERIALISE_TYPE(VkRenderingEndInfoKHR); DECLARE_DESERIALISE_TYPE(VkRenderingInputAttachmentIndexInfo); DECLARE_DESERIALISE_TYPE(VkRenderPassAttachmentBeginInfo); DECLARE_DESERIALISE_TYPE(VkRenderPassBeginInfo); @@ -2756,8 +2769,8 @@ DECLARE_REFLECTION_ENUM(VkChromaLocation); DECLARE_REFLECTION_ENUM(VkColorComponentFlagBits); DECLARE_REFLECTION_ENUM(VkColorSpaceKHR); DECLARE_REFLECTION_ENUM(VkCommandBufferLevel); -DECLARE_REFLECTION_ENUM(VkCommandBufferUsageFlagBits); DECLARE_REFLECTION_ENUM(VkCommandBufferResetFlagBits); +DECLARE_REFLECTION_ENUM(VkCommandBufferUsageFlagBits); DECLARE_REFLECTION_ENUM(VkCommandPoolCreateFlagBits); DECLARE_REFLECTION_ENUM(VkCommandPoolResetFlagBits); DECLARE_REFLECTION_ENUM(VkCompareOp); @@ -2777,6 +2790,7 @@ DECLARE_REFLECTION_ENUM(VkDescriptorPoolCreateFlagBits); DECLARE_REFLECTION_ENUM(VkDescriptorSetLayoutCreateFlagBits); DECLARE_REFLECTION_ENUM(VkDescriptorType); DECLARE_REFLECTION_ENUM(VkDescriptorUpdateTemplateType); +DECLARE_REFLECTION_ENUM(VkDeviceDiagnosticsConfigFlagBitsNV); DECLARE_REFLECTION_ENUM(VkDeviceEventTypeEXT); DECLARE_REFLECTION_ENUM(VkDeviceGroupPresentModeFlagBitsKHR); DECLARE_REFLECTION_ENUM(VkDeviceQueueCreateFlagBits); @@ -2803,11 +2817,11 @@ DECLARE_REFLECTION_ENUM(VkFormatFeatureFlagBits); DECLARE_REFLECTION_ENUM(VkFormatFeatureFlagBits2); DECLARE_REFLECTION_ENUM(VkFragmentShadingRateCombinerOpKHR); DECLARE_REFLECTION_ENUM(VkFramebufferCreateFlagBits); +DECLARE_REFLECTION_ENUM(VkFrontFace); DECLARE_REFLECTION_ENUM(VkGeometryFlagBitsKHR); DECLARE_REFLECTION_ENUM(VkGeometryInstanceFlagBitsKHR); DECLARE_REFLECTION_ENUM(VkGeometryTypeKHR); DECLARE_REFLECTION_ENUM(VkGraphicsPipelineLibraryFlagBitsEXT); -DECLARE_REFLECTION_ENUM(VkFrontFace); DECLARE_REFLECTION_ENUM(VkHostImageCopyFlagBits); DECLARE_REFLECTION_ENUM(VkImageAspectFlagBits); DECLARE_REFLECTION_ENUM(VkImageCompressionFixedRateFlagBitsEXT); @@ -2833,8 +2847,8 @@ DECLARE_REFLECTION_ENUM(VkPerformanceCounterDescriptionFlagBitsKHR); DECLARE_REFLECTION_ENUM(VkPerformanceCounterScopeKHR); DECLARE_REFLECTION_ENUM(VkPerformanceCounterStorageKHR); DECLARE_REFLECTION_ENUM(VkPerformanceCounterUnitKHR); -DECLARE_REFLECTION_ENUM(VkPhysicalDeviceType); DECLARE_REFLECTION_ENUM(VkPhysicalDeviceLayeredApiKHR); +DECLARE_REFLECTION_ENUM(VkPhysicalDeviceType); DECLARE_REFLECTION_ENUM(VkPipelineBindPoint); DECLARE_REFLECTION_ENUM(VkPipelineCacheCreateFlagBits); DECLARE_REFLECTION_ENUM(VkPipelineColorBlendStateCreateFlagBits); @@ -2856,15 +2870,15 @@ DECLARE_REFLECTION_ENUM(VkPresentModeKHR); DECLARE_REFLECTION_ENUM(VkPresentScalingFlagBitsKHR); DECLARE_REFLECTION_ENUM(VkPrimitiveTopology); DECLARE_REFLECTION_ENUM(VkProvokingVertexModeEXT); -DECLARE_REFLECTION_ENUM(VkRayTracingShaderGroupTypeKHR); -DECLARE_REFLECTION_ENUM(VkRenderingFlagBits); DECLARE_REFLECTION_ENUM(VkQueryControlFlagBits); -DECLARE_REFLECTION_ENUM(VkQueryPoolCreateFlagBits); DECLARE_REFLECTION_ENUM(VkQueryPipelineStatisticFlagBits); +DECLARE_REFLECTION_ENUM(VkQueryPoolCreateFlagBits); DECLARE_REFLECTION_ENUM(VkQueryResultFlagBits); DECLARE_REFLECTION_ENUM(VkQueryType); DECLARE_REFLECTION_ENUM(VkQueueFlagBits); DECLARE_REFLECTION_ENUM(VkQueueGlobalPriority); +DECLARE_REFLECTION_ENUM(VkRayTracingShaderGroupTypeKHR); +DECLARE_REFLECTION_ENUM(VkRenderingFlagBits); DECLARE_REFLECTION_ENUM(VkRenderPassCreateFlagBits); DECLARE_REFLECTION_ENUM(VkResolveModeFlagBits); DECLARE_REFLECTION_ENUM(VkResult); diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 6d0bb378a..ccefc9ed0 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -2037,6 +2037,14 @@ static const VkExtensionProperties supportedExtensions[] = { VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME, VK_NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION, }, + { + VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME, + VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_SPEC_VERSION, + }, + { + VK_NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME, + VK_NV_DEVICE_DIAGNOSTICS_CONFIG_SPEC_VERSION, + }, { VK_NV_DEDICATED_ALLOCATION_EXTENSION_NAME, VK_NV_DEDICATED_ALLOCATION_SPEC_VERSION, @@ -4951,6 +4959,9 @@ bool WrappedVulkan::ProcessChunk(ReadSerialiser &ser, VulkanChunk chunk) return Serialise_SetCommandAnnotation(ser, VK_NULL_HANDLE, rdcstr(), eRENDERDOC_AnnotationMax, 0, RENDERDOC_AnnotationValue()); + case VulkanChunk::vkCmdSetCheckpointNV: + return Serialise_vkCmdSetCheckpointNV(ser, VK_NULL_HANDLE, NULL); + // chunks that are reserved but not yet serialised case VulkanChunk::vkResetCommandPool: case VulkanChunk::vkCreateDepthTargetView: diff --git a/renderdoc/driver/vulkan/vk_core.h b/renderdoc/driver/vulkan/vk_core.h index d01f10520..dc3b35169 100644 --- a/renderdoc/driver/vulkan/vk_core.h +++ b/renderdoc/driver/vulkan/vk_core.h @@ -3370,4 +3370,12 @@ public: // VK_EXT_custom_resolve IMPLEMENT_FUNCTION_SERIALISED(void, vkCmdBeginCustomResolveEXT, VkCommandBuffer commandBuffer, const VkBeginCustomResolveInfoEXT *pBeginCustomResolveInfo); + + // VK_NV_device_diagnostic_checkpoints + IMPLEMENT_FUNCTION_SERIALISED(void, vkCmdSetCheckpointNV, VkCommandBuffer commandBuffer, + const void *pCheckpointMarker); + void vkGetQueueCheckpointDataNV(VkQueue queue, uint32_t *pCheckpointDataCount, + VkCheckpointDataNV *pCheckpointData); + void vkGetQueueCheckpointData2NV(VkQueue queue, uint32_t *pCheckpointDataCount, + VkCheckpointData2NV *pCheckpointData); }; diff --git a/renderdoc/driver/vulkan/vk_hookset_defs.h b/renderdoc/driver/vulkan/vk_hookset_defs.h index 4508f40af..40cefcd70 100644 --- a/renderdoc/driver/vulkan/vk_hookset_defs.h +++ b/renderdoc/driver/vulkan/vk_hookset_defs.h @@ -560,7 +560,8 @@ DeclExt(KHR_present_wait2); \ DeclExt(EXT_fragment_density_map_offset); \ DeclExt(EXT_image_drm_format_modifier); \ - DeclExt(EXT_custom_resolve); + DeclExt(EXT_custom_resolve); \ + DeclExt(NV_device_diagnostic_checkpoints); // for simplicity and since the check itself is platform agnostic, // these aren't protected in platform defines @@ -707,7 +708,8 @@ CheckExt(KHR_present_wait2, VKXX); \ CheckExt(EXT_fragment_density_map_offset, VKXX); \ CheckExt(EXT_image_drm_format_modifier, VKXX); \ - CheckExt(EXT_custom_resolve, VKXX); + CheckExt(EXT_custom_resolve, VKXX); \ + CheckExt(NV_device_diagnostic_checkpoints, VKXX); #define HookInitVulkanInstanceExts_PhysDev() \ HookInitExtension(KHR_surface, GetPhysicalDeviceSurfaceSupportKHR); \ @@ -1113,6 +1115,9 @@ HookInitExtension(KHR_present_wait2, WaitForPresent2KHR); \ HookInitExtension(EXT_image_drm_format_modifier, GetImageDrmFormatModifierPropertiesEXT); \ HookInitExtension(EXT_custom_resolve, CmdBeginCustomResolveEXT); \ + HookInitExtension(NV_device_diagnostic_checkpoints, CmdSetCheckpointNV); \ + HookInitExtension(NV_device_diagnostic_checkpoints, GetQueueCheckpointDataNV); \ + HookInitExtension(NV_device_diagnostic_checkpoints, GetQueueCheckpointData2NV); \ HookInitExtension_Device_Win32(); \ HookInitExtension_Device_Linux(); \ HookInitExtension_Device_Android(); \ @@ -2087,6 +2092,12 @@ image, VkImageDrmFormatModifierPropertiesEXT *, pProperties); \ HookDefine2(void, vkCmdBeginCustomResolveEXT, VkCommandBuffer, commandBuffer, \ const VkBeginCustomResolveInfoEXT *, pBeginCustomResolveInfo); \ + HookDefine2(void, vkCmdSetCheckpointNV, VkCommandBuffer, commandBuffer, const void *, \ + pCheckpointMarker); \ + HookDefine3(void, vkGetQueueCheckpointDataNV, VkQueue, queue, uint32_t *, pCheckpointDataCount, \ + VkCheckpointDataNV *, pCheckpointData); \ + HookDefine3(void, vkGetQueueCheckpointData2NV, VkQueue, queue, uint32_t *, pCheckpointDataCount, \ + VkCheckpointData2NV *, pCheckpointData); \ HookDefine_Win32(); \ HookDefine_Linux(); \ HookDefine_Android(); \ diff --git a/renderdoc/driver/vulkan/vk_next_chains.cpp b/renderdoc/driver/vulkan/vk_next_chains.cpp index 44b5d8f9a..353ab8fde 100644 --- a/renderdoc/driver/vulkan/vk_next_chains.cpp +++ b/renderdoc/driver/vulkan/vk_next_chains.cpp @@ -124,6 +124,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, VkBufferOpaqueCaptureAddressCreateInfo); \ COPY_STRUCT(VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO, VkBufferUsageFlags2CreateInfo); \ COPY_STRUCT(VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_KHR, VkCalibratedTimestampInfoKHR); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV, VkCheckpointDataNV); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV, VkCheckpointData2NV); \ COPY_STRUCT(VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, VkCommandBufferBeginInfo); \ COPY_STRUCT(VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT, \ VkCommandBufferInheritanceConditionalRenderingInfoEXT); \ @@ -152,6 +154,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, COPY_STRUCT(VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT, \ VkDescriptorSetVariableDescriptorCountLayoutSupport); \ COPY_STRUCT(VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, VkDeviceCreateInfo); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV, \ + VkDeviceDiagnosticsConfigCreateInfoNV); \ COPY_STRUCT(VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO, VkDeviceGroupBindSparseInfo); \ COPY_STRUCT(VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO, \ VkDeviceGroupCommandBufferBeginInfo); \ @@ -295,6 +299,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, VkPhysicalDeviceDescriptorIndexingFeatures); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES, \ VkPhysicalDeviceDescriptorIndexingProperties); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV, \ + VkPhysicalDeviceDiagnosticsConfigFeaturesNV); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT, \ VkPhysicalDeviceDiscardRectanglePropertiesEXT); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES, \ @@ -709,6 +715,10 @@ 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_CHECKPOINT_PROPERTIES_NV, \ + VkQueueFamilyCheckpointPropertiesNV); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV, \ + VkQueueFamilyCheckpointProperties2NV); \ COPY_STRUCT(VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES, \ VkQueueFamilyGlobalPriorityProperties); \ COPY_STRUCT(VK_STRUCTURE_TYPE_QUEUE_FAMILY_OWNERSHIP_TRANSFER_PROPERTIES_KHR, \ @@ -1026,8 +1036,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA: \ case VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA: \ case VK_STRUCTURE_TYPE_BUILD_PARTITIONED_ACCELERATION_STRUCTURE_INFO_NV: \ - case VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV: \ - case VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV: \ case VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_CLUSTERS_BOTTOM_LEVEL_INPUT_NV: \ case VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_COMMANDS_INFO_NV: \ case VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_INPUT_INFO_NV: \ @@ -1091,7 +1099,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE: \ case VK_STRUCTURE_TYPE_DEVICE_ADDRESS_BINDING_CALLBACK_DATA_EXT: \ case VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT: \ - case VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV: \ case VK_STRUCTURE_TYPE_DEVICE_FAULT_COUNTS_EXT: \ case VK_STRUCTURE_TYPE_DEVICE_FAULT_DEBUG_INFO_KHR: \ case VK_STRUCTURE_TYPE_DEVICE_FAULT_INFO_EXT: \ @@ -1280,7 +1287,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_EXT: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT: \ - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ELAPSED_TIMER_QUERY_FEATURES_QCOM: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV: \ @@ -1470,8 +1476,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL: \ case VK_STRUCTURE_TYPE_QUERY_POOL_VIDEO_ENCODE_FEEDBACK_CREATE_INFO_KHR: \ case VK_STRUCTURE_TYPE_QUERY_POOL_VIDEO_ENCODE_PER_PARTITION_FEEDBACK_CREATE_INFO_KHR: \ - 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_DATA_GRAPH_OPTICAL_FLOW_PROPERTIES_ARM: \ case VK_STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_PROPERTIES_ARM: \ case VK_STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROPERTIES_ARM: \ diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index 2c60b19d7..1ccdc1b32 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -142,6 +142,7 @@ DECL_VKFLAG_EXT(VkDisplayPlaneAlpha, KHR); DECL_VKFLAG_EMPTY_EXT(VkDisplaySurfaceCreate, KHR); DECL_VKFLAG_EXT(VkExternalMemoryHandleType, NV); DECL_VKFLAG_EXT(VkExternalMemoryFeature, NV); +DECL_VKFLAG_EXT(VkDeviceDiagnosticsConfig, NV); DECL_VKFLAG_EXT(VkIndirectCommandsLayoutUsage, NV); DECL_VKFLAG_EXT(VkPerformanceCounterDescription, KHR); DECL_VKFLAG_EMPTY_EXT(VkPipelineCoverageModulationStateCreate, NV); @@ -1666,6 +1667,21 @@ SERIALISE_VK_HANDLES(); PNEXT_STRUCT(VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV, \ VkDedicatedAllocationBufferCreateInfoNV) \ \ + /* VK_NV_device_diagnostic_checkpoints */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV, VkCheckpointDataNV) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV, \ + VkQueueFamilyCheckpointPropertiesNV) \ + /* interactions with VK_KHR_synchronization2 */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV, \ + VkQueueFamilyCheckpointProperties2NV) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV, VkCheckpointData2NV) \ + \ + /* VK_NV_device_diagnostics_config */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV, \ + VkPhysicalDeviceDiagnosticsConfigFeaturesNV) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV, \ + VkDeviceDiagnosticsConfigCreateInfoNV) \ + \ /* VK_NV_external_memory */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV, VkExportMemoryAllocateInfoNV) \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV, \ @@ -2420,17 +2436,6 @@ SERIALISE_VK_HANDLES(); /* VK_NV_descriptor_pool_overallocation */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_POOL_OVERALLOCATION_FEATURES_NV) \ \ - /* VK_NV_device_diagnostic_checkpoints */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV) \ - /* interactrions with VK_KHR_synchronization2 */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV) \ - \ - /* VK_NV_device_diagnostics_config */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV) \ - \ /* VK_NV_device_generated_commands */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV) \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV) \ @@ -9817,6 +9822,116 @@ void Deserialise(const VkPhysicalDeviceShaderImageFootprintFeaturesNV &el) DeserialiseNext(el.pNext); } +template +void DoSerialise(SerialiserType &ser, VkCheckpointDataNV &el) +{ + RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER_VKFLAGS(VkPipelineStageFlags, stage); + + // don't serialise pointer, treat it entirely as opaque + { + uint64_t ptr = (uint64_t)(uintptr_t)el.pCheckpointMarker; + ser.Serialise("pCheckpointMarker"_lit, ptr); + ser.TypedAs("void *"_lit); + if(ser.IsReading()) + el.pCheckpointMarker = (void *)(uintptr_t)ptr; + } +} + +template <> +void Deserialise(const VkCheckpointDataNV &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkCheckpointData2NV &el) +{ + RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER_VKFLAGS(VkPipelineStageFlags2, stage); + + // don't serialise pointer, treat it entirely as opaque + { + uint64_t ptr = (uint64_t)(uintptr_t)el.pCheckpointMarker; + ser.Serialise("pCheckpointMarker"_lit, ptr); + ser.TypedAs("void *"_lit); + if(ser.IsReading()) + el.pCheckpointMarker = (void *)(uintptr_t)ptr; + } +} + +template <> +void Deserialise(const VkCheckpointData2NV &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkQueueFamilyCheckpointPropertiesNV &el) +{ + RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER_VKFLAGS(VkPipelineStageFlags, checkpointExecutionStageMask); +} + +template <> +void Deserialise(const VkQueueFamilyCheckpointPropertiesNV &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkQueueFamilyCheckpointProperties2NV &el) +{ + RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER_VKFLAGS(VkPipelineStageFlags2, checkpointExecutionStageMask); +} + +template <> +void Deserialise(const VkQueueFamilyCheckpointProperties2NV &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkPhysicalDeviceDiagnosticsConfigFeaturesNV &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(diagnosticsConfig); +} + +template <> +void Deserialise(const VkPhysicalDeviceDiagnosticsConfigFeaturesNV &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkDeviceDiagnosticsConfigCreateInfoNV &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER_VKFLAGS(VkDeviceDiagnosticsConfigFlagsNV, flags); +} + +template <> +void Deserialise(const VkDeviceDiagnosticsConfigCreateInfoNV &el) +{ + DeserialiseNext(el.pNext); +} + template void DoSerialise(SerialiserType &ser, VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR &el) { @@ -15067,6 +15182,8 @@ INSTANTIATE_SERIALISE_TYPE(VkBufferOpaqueCaptureAddressCreateInfo); INSTANTIATE_SERIALISE_TYPE(VkBufferUsageFlags2CreateInfo); INSTANTIATE_SERIALISE_TYPE(VkBufferViewCreateInfo); INSTANTIATE_SERIALISE_TYPE(VkCalibratedTimestampInfoKHR); +INSTANTIATE_SERIALISE_TYPE(VkCheckpointDataNV); +INSTANTIATE_SERIALISE_TYPE(VkCheckpointData2NV); INSTANTIATE_SERIALISE_TYPE(VkCommandBufferAllocateInfo); INSTANTIATE_SERIALISE_TYPE(VkCommandBufferBeginInfo); INSTANTIATE_SERIALISE_TYPE(VkCommandBufferInheritanceConditionalRenderingInfoEXT); @@ -15114,6 +15231,7 @@ INSTANTIATE_SERIALISE_TYPE(VkDescriptorSetVariableDescriptorCountLayoutSupport) INSTANTIATE_SERIALISE_TYPE(VkDescriptorUpdateTemplateCreateInfo); INSTANTIATE_SERIALISE_TYPE(VkDeviceBufferMemoryRequirements); INSTANTIATE_SERIALISE_TYPE(VkDeviceCreateInfo); +INSTANTIATE_SERIALISE_TYPE(VkDeviceDiagnosticsConfigCreateInfoNV); INSTANTIATE_SERIALISE_TYPE(VkDeviceEventInfoEXT); INSTANTIATE_SERIALISE_TYPE(VkDeviceGroupBindSparseInfo); INSTANTIATE_SERIALISE_TYPE(VkDeviceGroupCommandBufferBeginInfo); @@ -15140,10 +15258,10 @@ INSTANTIATE_SERIALISE_TYPE(VkDisplayPlaneProperties2KHR); INSTANTIATE_SERIALISE_TYPE(VkDisplayPowerInfoEXT); INSTANTIATE_SERIALISE_TYPE(VkDisplayPresentInfoKHR); INSTANTIATE_SERIALISE_TYPE(VkDisplayProperties2KHR); -INSTANTIATE_SERIALISE_TYPE(VkDrmFormatModifierPropertiesEXT); INSTANTIATE_SERIALISE_TYPE(VkDrmFormatModifierProperties2EXT); -INSTANTIATE_SERIALISE_TYPE(VkDrmFormatModifierPropertiesListEXT); +INSTANTIATE_SERIALISE_TYPE(VkDrmFormatModifierPropertiesEXT); INSTANTIATE_SERIALISE_TYPE(VkDrmFormatModifierPropertiesList2EXT); +INSTANTIATE_SERIALISE_TYPE(VkDrmFormatModifierPropertiesListEXT); INSTANTIATE_SERIALISE_TYPE(VkEventCreateInfo); INSTANTIATE_SERIALISE_TYPE(VkExportFenceCreateInfo); INSTANTIATE_SERIALISE_TYPE(VkExportMemoryAllocateInfo); @@ -15176,10 +15294,10 @@ INSTANTIATE_SERIALISE_TYPE(VkImageCompressionControlEXT); INSTANTIATE_SERIALISE_TYPE(VkImageCompressionPropertiesEXT); INSTANTIATE_SERIALISE_TYPE(VkImageCopy2); INSTANTIATE_SERIALISE_TYPE(VkImageCreateInfo); -INSTANTIATE_SERIALISE_TYPE(VkImageFormatListCreateInfo); INSTANTIATE_SERIALISE_TYPE(VkImageDrmFormatModifierExplicitCreateInfoEXT); INSTANTIATE_SERIALISE_TYPE(VkImageDrmFormatModifierListCreateInfoEXT); INSTANTIATE_SERIALISE_TYPE(VkImageDrmFormatModifierPropertiesEXT); +INSTANTIATE_SERIALISE_TYPE(VkImageFormatListCreateInfo); INSTANTIATE_SERIALISE_TYPE(VkImageFormatProperties2); INSTANTIATE_SERIALISE_TYPE(VkImageMemoryBarrier); INSTANTIATE_SERIALISE_TYPE(VkImageMemoryBarrier2); @@ -15254,6 +15372,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceDescriptorBufferFeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceDescriptorBufferPropertiesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceDescriptorIndexingFeatures) INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceDescriptorIndexingProperties) +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceDiagnosticsConfigFeaturesNV); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceDiscardRectanglePropertiesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceDriverProperties); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceDynamicRenderingFeatures); @@ -15272,11 +15391,11 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceFloatControlsProperties); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMap2FeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMap2PropertiesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMapFeaturesEXT); -INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMapPropertiesEXT); -INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT); -INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceFragmentDensityMapPropertiesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT); @@ -15302,9 +15421,9 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceImageViewImageFormatInfoEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceIndexTypeUint8Features); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceInlineUniformBlockFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceInlineUniformBlockProperties); -INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceLayeredApiVulkanPropertiesKHR); -INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceLayeredApiPropertiesListKHR); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceLayeredApiPropertiesKHR); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceLayeredApiPropertiesListKHR); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceLayeredApiVulkanPropertiesKHR); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceLineRasterizationFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceLineRasterizationProperties); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceMaintenance3Properties); @@ -15479,6 +15598,8 @@ INSTANTIATE_SERIALISE_TYPE(VkPushDescriptorSetInfo); INSTANTIATE_SERIALISE_TYPE(VkPushDescriptorSetWithTemplateInfo); INSTANTIATE_SERIALISE_TYPE(VkQueryPoolCreateInfo); INSTANTIATE_SERIALISE_TYPE(VkQueryPoolPerformanceCreateInfoKHR); +INSTANTIATE_SERIALISE_TYPE(VkQueueFamilyCheckpointPropertiesNV); +INSTANTIATE_SERIALISE_TYPE(VkQueueFamilyCheckpointProperties2NV); INSTANTIATE_SERIALISE_TYPE(VkQueueFamilyGlobalPriorityProperties); INSTANTIATE_SERIALISE_TYPE(VkQueueFamilyOwnershipTransferPropertiesKHR); INSTANTIATE_SERIALISE_TYPE(VkQueueFamilyProperties2); diff --git a/renderdoc/driver/vulkan/vk_stringise.cpp b/renderdoc/driver/vulkan/vk_stringise.cpp index b85c604fd..a47a206f3 100644 --- a/renderdoc/driver/vulkan/vk_stringise.cpp +++ b/renderdoc/driver/vulkan/vk_stringise.cpp @@ -28,7 +28,7 @@ template <> rdcstr DoStringise(const VulkanChunk &el) { - RDCCOMPILE_ASSERT((uint32_t)VulkanChunk::Max == 1237, "Chunks changed without updating names"); + RDCCOMPILE_ASSERT((uint32_t)VulkanChunk::Max == 1238, "Chunks changed without updating names"); BEGIN_ENUM_STRINGISE(VulkanChunk) { @@ -269,6 +269,7 @@ rdcstr DoStringise(const VulkanChunk &el) STRINGISE_ENUM_CLASS_NAMED(SetCommandAnnotation, "Internal::SetCommandAnnotation"); STRINGISE_ENUM_CLASS_NAMED(SetQueueAnnotation, "Internal::SetQueueAnnotation"); STRINGISE_ENUM_CLASS(vkCmdBeginCustomResolveEXT) + STRINGISE_ENUM_CLASS(vkCmdSetCheckpointNV) STRINGISE_ENUM_CLASS_NAMED(Max, "Max Chunk"); } END_ENUM_STRINGISE() @@ -4816,3 +4817,16 @@ rdcstr DoStringise(const VkImageCompressionFlagBitsEXT &el) } END_BITFIELD_STRINGISE(); } + +template <> +rdcstr DoStringise(const VkDeviceDiagnosticsConfigFlagBitsNV &el) +{ + BEGIN_BITFIELD_STRINGISE(VkDeviceDiagnosticsConfigFlagBitsNV); + { + STRINGISE_BITFIELD_BIT(VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV); + STRINGISE_BITFIELD_BIT(VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV); + STRINGISE_BITFIELD_BIT(VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV); + STRINGISE_BITFIELD_BIT(VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_ERROR_REPORTING_BIT_NV); + } + END_BITFIELD_STRINGISE(); +} diff --git a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp index 069dcc393..0f3348e17 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp @@ -10479,6 +10479,57 @@ void WrappedVulkan::vkCmdBeginCustomResolveEXT( } } +template +bool WrappedVulkan::Serialise_vkCmdSetCheckpointNV(SerialiserType &ser, VkCommandBuffer commandBuffer, + const void *pCheckpointMarker) +{ + SERIALISE_ELEMENT(commandBuffer); + SERIALISE_ELEMENT_LOCAL(marker, (uint64_t)(uintptr_t)pCheckpointMarker) + .Important() + .OffsetOrSize() + .Named("pCheckpointMarker") + .TypedAs("void *"_lit); + + if(IsReplayingAndReading()) + { + m_LastCmdBufferID = GetResID(commandBuffer); + + if(IsActiveReplaying(m_State)) + { + if(InRerecordRange(m_LastCmdBufferID)) + commandBuffer = RerecordCmdBuf(m_LastCmdBufferID); + else + commandBuffer = VK_NULL_HANDLE; + } + + if(commandBuffer != VK_NULL_HANDLE) + { + ObjDisp(commandBuffer)->CmdSetCheckpointNV(Unwrap(commandBuffer), (void *)(uintptr_t)marker); + } + } + return true; +} + +void WrappedVulkan::vkCmdSetCheckpointNV(VkCommandBuffer commandBuffer, const void *pCheckpointMarker) +{ + SCOPED_DBG_SINK(); + + SERIALISE_TIME_CALL( + ObjDisp(commandBuffer)->CmdSetCheckpointNV(Unwrap(commandBuffer), pCheckpointMarker)); + + if(IsCaptureMode(m_State)) + { + VkResourceRecord *record = GetRecord(commandBuffer); + + CACHE_THREAD_SERIALISER(); + ser.SetActionChunk(); + SCOPED_SERIALISE_CHUNK(VulkanChunk::vkCmdSetCheckpointNV); + Serialise_vkCmdSetCheckpointNV(ser, commandBuffer, pCheckpointMarker); + + record->AddChunk(scope.Get(&record->cmdInfo->alloc)); + } +} + INSTANTIATE_FUNCTION_SERIALISED(VkResult, vkCreateCommandPool, VkDevice device, const VkCommandPoolCreateInfo *pCreateInfo, const VkAllocationCallbacks *, VkCommandPool *pCommandPool); @@ -10709,3 +10760,6 @@ INSTANTIATE_FUNCTION_SERIALISED( INSTANTIATE_FUNCTION_SERIALISED(void, vkCmdBeginCustomResolveEXT, VkCommandBuffer commandBuffer, const VkBeginCustomResolveInfoEXT *pBeginCustomResolveInfo); + +INSTANTIATE_FUNCTION_SERIALISED(void, vkCmdSetCheckpointNV, VkCommandBuffer commandBuffer, + const void *pCheckpointMarker); diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index 23dea0668..5111f2047 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -3674,6 +3674,13 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi CHECK_PHYS_EXT_FEATURE(customResolve); } END_PHYS_EXT_CHECK(); + + BEGIN_PHYS_EXT_CHECK(VkPhysicalDeviceDiagnosticsConfigFeaturesNV, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV); + { + CHECK_PHYS_EXT_FEATURE(diagnosticsConfig); + } + END_PHYS_EXT_CHECK(); } if(availFeatures.depthClamp) diff --git a/renderdoc/driver/vulkan/wrappers/vk_get_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_get_funcs.cpp index fc625e146..55a91b60a 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_get_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_get_funcs.cpp @@ -1508,3 +1508,16 @@ VkResult WrappedVulkan::vkGetImageDrmFormatModifierPropertiesEXT( return ObjDisp(device)->GetImageDrmFormatModifierPropertiesEXT(Unwrap(device), Unwrap(image), pProperties); } + +void WrappedVulkan::vkGetQueueCheckpointDataNV(VkQueue queue, uint32_t *pCheckpointDataCount, + VkCheckpointDataNV *pCheckpointData) +{ + return ObjDisp(queue)->GetQueueCheckpointDataNV(Unwrap(queue), pCheckpointDataCount, + pCheckpointData); +} +void WrappedVulkan::vkGetQueueCheckpointData2NV(VkQueue queue, uint32_t *pCheckpointDataCount, + VkCheckpointData2NV *pCheckpointData) +{ + return ObjDisp(queue)->GetQueueCheckpointData2NV(Unwrap(queue), pCheckpointDataCount, + pCheckpointData); +}