Skip to content

Commit d0e9d73

Browse files
committed
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.
1 parent 5904abd commit d0e9d73

11 files changed

Lines changed: 308 additions & 51 deletions

renderdoc/driver/vulkan/extension_support.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,8 @@ Maintainers can update this file by updating vk.xml in this folder and running `
258258
* `VK_MVK_macos_surface`
259259
* `VK_NV_compute_shader_derivatives`
260260
* `VK_NV_dedicated_allocation`
261+
* `VK_NV_device_diagnostic_checkpoints`
262+
* `VK_NV_device_diagnostics_config`
261263
* `VK_NV_external_memory_capabilities`
262264
* `VK_NV_external_memory_win32`
263265
* `VK_NV_external_memory`
@@ -427,8 +429,6 @@ The portability subset is only relevant on mac, which is not a supported platfor
427429
* `VK_NV_cuda_kernel_launch`
428430
* `VK_NV_dedicated_allocation_image_aliasing`
429431
* `VK_NV_descriptor_pool_overallocation`
430-
* `VK_NV_device_diagnostic_checkpoints`
431-
* `VK_NV_device_diagnostics_config`
432432
* `VK_NV_device_generated_commands_compute`
433433
* `VK_NV_device_generated_commands`
434434
* `VK_NV_displacement_micromap`

renderdoc/driver/vulkan/vk_common.h

Lines changed: 35 additions & 21 deletions
Large diffs are not rendered by default.

renderdoc/driver/vulkan/vk_core.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2037,6 +2037,14 @@ static const VkExtensionProperties supportedExtensions[] = {
20372037
VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME,
20382038
VK_NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION,
20392039
},
2040+
{
2041+
VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME,
2042+
VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_SPEC_VERSION,
2043+
},
2044+
{
2045+
VK_NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME,
2046+
VK_NV_DEVICE_DIAGNOSTICS_CONFIG_SPEC_VERSION,
2047+
},
20402048
{
20412049
VK_NV_DEDICATED_ALLOCATION_EXTENSION_NAME,
20422050
VK_NV_DEDICATED_ALLOCATION_SPEC_VERSION,
@@ -4951,6 +4959,9 @@ bool WrappedVulkan::ProcessChunk(ReadSerialiser &ser, VulkanChunk chunk)
49514959
return Serialise_SetCommandAnnotation(ser, VK_NULL_HANDLE, rdcstr(), eRENDERDOC_AnnotationMax,
49524960
0, RENDERDOC_AnnotationValue());
49534961

4962+
case VulkanChunk::vkCmdSetCheckpointNV:
4963+
return Serialise_vkCmdSetCheckpointNV(ser, VK_NULL_HANDLE, NULL);
4964+
49544965
// chunks that are reserved but not yet serialised
49554966
case VulkanChunk::vkResetCommandPool:
49564967
case VulkanChunk::vkCreateDepthTargetView:

renderdoc/driver/vulkan/vk_core.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3370,4 +3370,12 @@ class WrappedVulkan : public IFrameCapturer
33703370
// VK_EXT_custom_resolve
33713371
IMPLEMENT_FUNCTION_SERIALISED(void, vkCmdBeginCustomResolveEXT, VkCommandBuffer commandBuffer,
33723372
const VkBeginCustomResolveInfoEXT *pBeginCustomResolveInfo);
3373+
3374+
// VK_NV_device_diagnostic_checkpoints
3375+
IMPLEMENT_FUNCTION_SERIALISED(void, vkCmdSetCheckpointNV, VkCommandBuffer commandBuffer,
3376+
const void *pCheckpointMarker);
3377+
void vkGetQueueCheckpointDataNV(VkQueue queue, uint32_t *pCheckpointDataCount,
3378+
VkCheckpointDataNV *pCheckpointData);
3379+
void vkGetQueueCheckpointData2NV(VkQueue queue, uint32_t *pCheckpointDataCount,
3380+
VkCheckpointData2NV *pCheckpointData);
33733381
};

renderdoc/driver/vulkan/vk_hookset_defs.h

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -560,7 +560,8 @@
560560
DeclExt(KHR_present_wait2); \
561561
DeclExt(EXT_fragment_density_map_offset); \
562562
DeclExt(EXT_image_drm_format_modifier); \
563-
DeclExt(EXT_custom_resolve);
563+
DeclExt(EXT_custom_resolve); \
564+
DeclExt(NV_device_diagnostic_checkpoints);
564565

565566
// for simplicity and since the check itself is platform agnostic,
566567
// these aren't protected in platform defines
@@ -707,7 +708,8 @@
707708
CheckExt(KHR_present_wait2, VKXX); \
708709
CheckExt(EXT_fragment_density_map_offset, VKXX); \
709710
CheckExt(EXT_image_drm_format_modifier, VKXX); \
710-
CheckExt(EXT_custom_resolve, VKXX);
711+
CheckExt(EXT_custom_resolve, VKXX); \
712+
CheckExt(NV_device_diagnostic_checkpoints, VKXX);
711713

712714
#define HookInitVulkanInstanceExts_PhysDev() \
713715
HookInitExtension(KHR_surface, GetPhysicalDeviceSurfaceSupportKHR); \
@@ -1113,6 +1115,9 @@
11131115
HookInitExtension(KHR_present_wait2, WaitForPresent2KHR); \
11141116
HookInitExtension(EXT_image_drm_format_modifier, GetImageDrmFormatModifierPropertiesEXT); \
11151117
HookInitExtension(EXT_custom_resolve, CmdBeginCustomResolveEXT); \
1118+
HookInitExtension(NV_device_diagnostic_checkpoints, CmdSetCheckpointNV); \
1119+
HookInitExtension(NV_device_diagnostic_checkpoints, GetQueueCheckpointDataNV); \
1120+
HookInitExtension(NV_device_diagnostic_checkpoints, GetQueueCheckpointData2NV); \
11161121
HookInitExtension_Device_Win32(); \
11171122
HookInitExtension_Device_Linux(); \
11181123
HookInitExtension_Device_Android(); \
@@ -2087,6 +2092,12 @@
20872092
image, VkImageDrmFormatModifierPropertiesEXT *, pProperties); \
20882093
HookDefine2(void, vkCmdBeginCustomResolveEXT, VkCommandBuffer, commandBuffer, \
20892094
const VkBeginCustomResolveInfoEXT *, pBeginCustomResolveInfo); \
2095+
HookDefine2(void, vkCmdSetCheckpointNV, VkCommandBuffer, commandBuffer, const void *, \
2096+
pCheckpointMarker); \
2097+
HookDefine3(void, vkGetQueueCheckpointDataNV, VkQueue, queue, uint32_t *, pCheckpointDataCount, \
2098+
VkCheckpointDataNV *, pCheckpointData); \
2099+
HookDefine3(void, vkGetQueueCheckpointData2NV, VkQueue, queue, uint32_t *, pCheckpointDataCount, \
2100+
VkCheckpointData2NV *, pCheckpointData); \
20902101
HookDefine_Win32(); \
20912102
HookDefine_Linux(); \
20922103
HookDefine_Android(); \

renderdoc/driver/vulkan/vk_next_chains.cpp

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
124124
VkBufferOpaqueCaptureAddressCreateInfo); \
125125
COPY_STRUCT(VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO, VkBufferUsageFlags2CreateInfo); \
126126
COPY_STRUCT(VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_KHR, VkCalibratedTimestampInfoKHR); \
127+
COPY_STRUCT(VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV, VkCheckpointDataNV); \
128+
COPY_STRUCT(VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV, VkCheckpointData2NV); \
127129
COPY_STRUCT(VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, VkCommandBufferBeginInfo); \
128130
COPY_STRUCT(VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT, \
129131
VkCommandBufferInheritanceConditionalRenderingInfoEXT); \
@@ -152,6 +154,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
152154
COPY_STRUCT(VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT, \
153155
VkDescriptorSetVariableDescriptorCountLayoutSupport); \
154156
COPY_STRUCT(VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, VkDeviceCreateInfo); \
157+
COPY_STRUCT(VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV, \
158+
VkDeviceDiagnosticsConfigCreateInfoNV); \
155159
COPY_STRUCT(VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO, VkDeviceGroupBindSparseInfo); \
156160
COPY_STRUCT(VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO, \
157161
VkDeviceGroupCommandBufferBeginInfo); \
@@ -295,6 +299,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
295299
VkPhysicalDeviceDescriptorIndexingFeatures); \
296300
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES, \
297301
VkPhysicalDeviceDescriptorIndexingProperties); \
302+
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV, \
303+
VkPhysicalDeviceDiagnosticsConfigFeaturesNV); \
298304
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT, \
299305
VkPhysicalDeviceDiscardRectanglePropertiesEXT); \
300306
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES, \
@@ -709,6 +715,10 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
709715
COPY_STRUCT(VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO, VkQueryPoolCreateInfo); \
710716
COPY_STRUCT(VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR, \
711717
VkQueryPoolPerformanceCreateInfoKHR); \
718+
COPY_STRUCT(VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV, \
719+
VkQueueFamilyCheckpointPropertiesNV); \
720+
COPY_STRUCT(VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV, \
721+
VkQueueFamilyCheckpointProperties2NV); \
712722
COPY_STRUCT(VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES, \
713723
VkQueueFamilyGlobalPriorityProperties); \
714724
COPY_STRUCT(VK_STRUCTURE_TYPE_QUEUE_FAMILY_OWNERSHIP_TRANSFER_PROPERTIES_KHR, \
@@ -1026,8 +1036,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
10261036
case VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA: \
10271037
case VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA: \
10281038
case VK_STRUCTURE_TYPE_BUILD_PARTITIONED_ACCELERATION_STRUCTURE_INFO_NV: \
1029-
case VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV: \
1030-
case VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV: \
10311039
case VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_CLUSTERS_BOTTOM_LEVEL_INPUT_NV: \
10321040
case VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_COMMANDS_INFO_NV: \
10331041
case VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_INPUT_INFO_NV: \
@@ -1091,7 +1099,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
10911099
case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE: \
10921100
case VK_STRUCTURE_TYPE_DEVICE_ADDRESS_BINDING_CALLBACK_DATA_EXT: \
10931101
case VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT: \
1094-
case VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV: \
10951102
case VK_STRUCTURE_TYPE_DEVICE_FAULT_COUNTS_EXT: \
10961103
case VK_STRUCTURE_TYPE_DEVICE_FAULT_DEBUG_INFO_KHR: \
10971104
case VK_STRUCTURE_TYPE_DEVICE_FAULT_INFO_EXT: \
@@ -1280,7 +1287,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
12801287
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_EXT: \
12811288
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV: \
12821289
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT: \
1283-
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV: \
12841290
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT: \
12851291
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ELAPSED_TIMER_QUERY_FEATURES_QCOM: \
12861292
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV: \
@@ -1470,8 +1476,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
14701476
case VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL: \
14711477
case VK_STRUCTURE_TYPE_QUERY_POOL_VIDEO_ENCODE_FEEDBACK_CREATE_INFO_KHR: \
14721478
case VK_STRUCTURE_TYPE_QUERY_POOL_VIDEO_ENCODE_PER_PARTITION_FEEDBACK_CREATE_INFO_KHR: \
1473-
case VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV: \
1474-
case VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV: \
14751479
case VK_STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_OPTICAL_FLOW_PROPERTIES_ARM: \
14761480
case VK_STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_PROPERTIES_ARM: \
14771481
case VK_STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROPERTIES_ARM: \

0 commit comments

Comments
 (0)