diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index 6e4a9a8f1..41a72bf0c 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -716,6 +716,7 @@ DECLARE_REFLECTION_STRUCT(VkDeviceGroupRenderPassBeginInfo); DECLARE_REFLECTION_STRUCT(VkDeviceGroupSubmitInfo); DECLARE_REFLECTION_STRUCT(VkDeviceGroupSwapchainCreateInfoKHR); DECLARE_REFLECTION_STRUCT(VkDeviceMemoryOpaqueCaptureAddressInfo); +DECLARE_REFLECTION_STRUCT(VkDevicePrivateDataCreateInfoEXT); DECLARE_REFLECTION_STRUCT(VkDeviceQueueCreateInfo); DECLARE_REFLECTION_STRUCT(VkDeviceQueueGlobalPriorityCreateInfoEXT); DECLARE_REFLECTION_STRUCT(VkDeviceQueueInfo2); @@ -832,6 +833,7 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePerformanceQueryPropertiesKHR); DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR); DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePointClippingProperties); +DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePrivateDataFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceProperties2); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceProtectedMemoryFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceProtectedMemoryProperties); @@ -904,6 +906,7 @@ DECLARE_REFLECTION_STRUCT(VkPresentInfoKHR); DECLARE_REFLECTION_STRUCT(VkPresentRegionsKHR); DECLARE_REFLECTION_STRUCT(VkPresentTimeGOOGLE); DECLARE_REFLECTION_STRUCT(VkPresentTimesInfoGOOGLE); +DECLARE_REFLECTION_STRUCT(VkPrivateDataSlotCreateInfoEXT); DECLARE_REFLECTION_STRUCT(VkProtectedSubmitInfo); DECLARE_REFLECTION_STRUCT(VkQueryPoolCreateInfo); DECLARE_REFLECTION_STRUCT(VkQueryPoolPerformanceCreateInfoKHR); @@ -1017,6 +1020,7 @@ DECLARE_DESERIALISE_TYPE(VkDeviceGroupRenderPassBeginInfo); DECLARE_DESERIALISE_TYPE(VkDeviceGroupSubmitInfo); DECLARE_DESERIALISE_TYPE(VkDeviceGroupSwapchainCreateInfoKHR); DECLARE_DESERIALISE_TYPE(VkDeviceMemoryOpaqueCaptureAddressInfo); +DECLARE_DESERIALISE_TYPE(VkDevicePrivateDataCreateInfoEXT); DECLARE_DESERIALISE_TYPE(VkDeviceQueueCreateInfo); DECLARE_DESERIALISE_TYPE(VkDeviceQueueGlobalPriorityCreateInfoEXT); DECLARE_DESERIALISE_TYPE(VkDeviceQueueInfo2); @@ -1129,6 +1133,7 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePerformanceQueryPropertiesKHR); DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR); DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePointClippingProperties); +DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePrivateDataFeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceProperties2); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceProtectedMemoryFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceProtectedMemoryProperties); @@ -1200,6 +1205,7 @@ DECLARE_DESERIALISE_TYPE(VkPipelineViewportStateCreateInfo); DECLARE_DESERIALISE_TYPE(VkPresentInfoKHR); DECLARE_DESERIALISE_TYPE(VkPresentRegionsKHR); DECLARE_DESERIALISE_TYPE(VkPresentTimesInfoGOOGLE); +DECLARE_DESERIALISE_TYPE(VkPrivateDataSlotCreateInfoEXT); DECLARE_DESERIALISE_TYPE(VkProtectedSubmitInfo); DECLARE_DESERIALISE_TYPE(VkQueryPoolCreateInfo); DECLARE_DESERIALISE_TYPE(VkQueryPoolPerformanceCreateInfoKHR); @@ -1465,6 +1471,7 @@ DECLARE_REFLECTION_ENUM(VkPointClippingBehavior); DECLARE_REFLECTION_ENUM(VkPolygonMode); DECLARE_REFLECTION_ENUM(VkPresentModeKHR); DECLARE_REFLECTION_ENUM(VkPrimitiveTopology); +DECLARE_REFLECTION_ENUM(VkPrivateDataSlotCreateFlagBitsEXT); DECLARE_REFLECTION_ENUM(VkQueryControlFlagBits); DECLARE_REFLECTION_ENUM(VkQueryPipelineStatisticFlagBits); DECLARE_REFLECTION_ENUM(VkQueryResultFlagBits); diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 4fe45af21..3b62482d8 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -860,6 +860,9 @@ static const VkExtensionProperties supportedExtensions[] = { { VK_EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME, VK_EXT_POST_DEPTH_COVERAGE_SPEC_VERSION, }, + { + VK_EXT_PRIVATE_DATA_EXTENSION_NAME, VK_EXT_PRIVATE_DATA_SPEC_VERSION, + }, { VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME, VK_EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION, }, diff --git a/renderdoc/driver/vulkan/vk_core.h b/renderdoc/driver/vulkan/vk_core.h index 2f67f810c..921a31ddb 100644 --- a/renderdoc/driver/vulkan/vk_core.h +++ b/renderdoc/driver/vulkan/vk_core.h @@ -2287,4 +2287,20 @@ public: VkResult vkGetPhysicalDeviceToolPropertiesEXT(VkPhysicalDevice physicalDevice, uint32_t *pToolCount, VkPhysicalDeviceToolPropertiesEXT *pToolProperties); + + // VK_EXT_private_data + + VkResult vkCreatePrivateDataSlotEXT(VkDevice device, + const VkPrivateDataSlotCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkPrivateDataSlotEXT *pPrivateDataSlot); + + void vkDestroyPrivateDataSlotEXT(VkDevice device, VkPrivateDataSlotEXT privateDataSlot, + const VkAllocationCallbacks *pAllocator); + + VkResult vkSetPrivateDataEXT(VkDevice device, VkObjectType objectType, uint64_t objectHandle, + VkPrivateDataSlotEXT privateDataSlot, uint64_t data); + + void vkGetPrivateDataEXT(VkDevice device, VkObjectType objectType, uint64_t objectHandle, + VkPrivateDataSlotEXT privateDataSlot, uint64_t *pData); }; diff --git a/renderdoc/driver/vulkan/vk_hookset_defs.h b/renderdoc/driver/vulkan/vk_hookset_defs.h index cd3c808d8..8cd83896d 100644 --- a/renderdoc/driver/vulkan/vk_hookset_defs.h +++ b/renderdoc/driver/vulkan/vk_hookset_defs.h @@ -490,7 +490,12 @@ DeclExt(KHR_buffer_device_address); \ DeclExt(EXT_tooling_info); \ DeclExt(KHR_separate_depth_stencil_layouts); \ - DeclExt(EXT_inline_uniform_block); + DeclExt(KHR_shader_non_semantic_info); \ + DeclExt(EXT_inline_uniform_block); \ + DeclExt(EXT_custom_border_color); \ + DeclExt(EXT_robustness2); \ + DeclExt(EXT_pipeline_creation_cache_control); \ + DeclExt(EXT_private_data); // for simplicity and since the check itself is platform agnostic, // these aren't protected in platform defines @@ -525,64 +530,69 @@ CheckExt(KHR_wayland_surface, VKXX); \ CheckExt(KHR_performance_query, VKXX); -#define CheckDeviceExts() \ - CheckExt(EXT_debug_marker, VKXX); \ - CheckExt(GGP_frame_token, VKXX); \ - CheckExt(KHR_swapchain, VKXX); \ - CheckExt(KHR_display_swapchain, VKXX); \ - CheckExt(NV_external_memory, VKXX); \ - CheckExt(NV_external_memory_win32, VKXX); \ - CheckExt(NV_win32_keyed_mutex, VKXX); \ - CheckExt(KHR_maintenance1, VK11); \ - CheckExt(KHR_maintenance2, VK11); \ - CheckExt(KHR_maintenance3, VK11); \ - CheckExt(EXT_display_control, VKXX); \ - CheckExt(KHR_external_memory, VK11); \ - CheckExt(KHR_external_memory_win32, VKXX); \ - CheckExt(KHR_external_memory_fd, VKXX); \ - CheckExt(KHR_external_semaphore, VK11); \ - CheckExt(KHR_external_semaphore_win32, VKXX); \ - CheckExt(KHR_external_semaphore_fd, VKXX); \ - CheckExt(KHR_external_fence, VK11); \ - CheckExt(KHR_external_fence_win32, VKXX); \ - CheckExt(KHR_external_fence_fd, VKXX); \ - CheckExt(KHR_get_memory_requirements2, VK11); \ - CheckExt(AMD_shader_info, VKXX); \ - CheckExt(KHR_push_descriptor, VKXX); \ - CheckExt(KHR_descriptor_update_template, VK11); \ - CheckExt(KHR_bind_memory2, VK11); \ - CheckExt(EXT_conservative_rasterization, VKXX); \ - CheckExt(EXT_global_priority, VKXX); \ - CheckExt(AMD_buffer_marker, VKXX); \ - CheckExt(EXT_vertex_attribute_divisor, VKXX); \ - CheckExt(EXT_sampler_filter_minmax, VK12); \ - CheckExt(KHR_sampler_ycbcr_conversion, VK11); \ - CheckExt(KHR_device_group, VK11); \ - CheckExt(MVK_moltenvk, VKXX); \ - CheckExt(KHR_draw_indirect_count, VK12); \ - CheckExt(EXT_validation_cache, VKXX); \ - CheckExt(KHR_shared_presentable_image, VKXX); \ - CheckExt(KHR_create_renderpass2, VK12); \ - CheckExt(EXT_transform_feedback, VKXX); \ - CheckExt(EXT_conditional_rendering, VKXX); \ - CheckExt(EXT_sample_locations, VKXX); \ - CheckExt(EXT_discard_rectangles, VKXX); \ - CheckExt(EXT_calibrated_timestamps, VKXX); \ - CheckExt(EXT_host_query_reset, VK12); \ - CheckExt(EXT_buffer_device_address, VKXX); \ - CheckExt(EXT_hdr_metadata, VKXX); \ - CheckExt(AMD_display_native_hdr, VKXX); \ - CheckExt(EXT_depth_clip_enable, VKXX); \ - CheckExt(KHR_pipeline_executable_properties, VKXX); \ - CheckExt(AMD_negative_viewport_height, VKXX); \ - CheckExt(EXT_line_rasterization, VKXX); \ - CheckExt(GOOGLE_display_timing, VKXX); \ - CheckExt(KHR_timeline_semaphore, VK12); \ - CheckExt(KHR_performance_query, VKXX); \ - CheckExt(KHR_buffer_device_address, VK12); \ - CheckExt(EXT_tooling_info, VKXX); \ - CheckExt(KHR_separate_depth_stencil_layouts, VK12); \ - CheckExt(EXT_inline_uniform_block, VKXX); +#define CheckDeviceExts() \ + CheckExt(EXT_debug_marker, VKXX); \ + CheckExt(GGP_frame_token, VKXX); \ + CheckExt(KHR_swapchain, VKXX); \ + CheckExt(KHR_display_swapchain, VKXX); \ + CheckExt(NV_external_memory, VKXX); \ + CheckExt(NV_external_memory_win32, VKXX); \ + CheckExt(NV_win32_keyed_mutex, VKXX); \ + CheckExt(KHR_maintenance1, VK11); \ + CheckExt(KHR_maintenance2, VK11); \ + CheckExt(KHR_maintenance3, VK11); \ + CheckExt(EXT_display_control, VKXX); \ + CheckExt(KHR_external_memory, VK11); \ + CheckExt(KHR_external_memory_win32, VKXX); \ + CheckExt(KHR_external_memory_fd, VKXX); \ + CheckExt(KHR_external_semaphore, VK11); \ + CheckExt(KHR_external_semaphore_win32, VKXX); \ + CheckExt(KHR_external_semaphore_fd, VKXX); \ + CheckExt(KHR_external_fence, VK11); \ + CheckExt(KHR_external_fence_win32, VKXX); \ + CheckExt(KHR_external_fence_fd, VKXX); \ + CheckExt(KHR_get_memory_requirements2, VK11); \ + CheckExt(AMD_shader_info, VKXX); \ + CheckExt(KHR_push_descriptor, VKXX); \ + CheckExt(KHR_descriptor_update_template, VK11); \ + CheckExt(KHR_bind_memory2, VK11); \ + CheckExt(EXT_conservative_rasterization, VKXX); \ + CheckExt(EXT_global_priority, VKXX); \ + CheckExt(AMD_buffer_marker, VKXX); \ + CheckExt(EXT_vertex_attribute_divisor, VKXX); \ + CheckExt(EXT_sampler_filter_minmax, VK12); \ + CheckExt(KHR_sampler_ycbcr_conversion, VK11); \ + CheckExt(KHR_device_group, VK11); \ + CheckExt(MVK_moltenvk, VKXX); \ + CheckExt(KHR_draw_indirect_count, VK12); \ + CheckExt(EXT_validation_cache, VKXX); \ + CheckExt(KHR_shared_presentable_image, VKXX); \ + CheckExt(KHR_create_renderpass2, VK12); \ + CheckExt(EXT_transform_feedback, VKXX); \ + CheckExt(EXT_conditional_rendering, VKXX); \ + CheckExt(EXT_sample_locations, VKXX); \ + CheckExt(EXT_discard_rectangles, VKXX); \ + CheckExt(EXT_calibrated_timestamps, VKXX); \ + CheckExt(EXT_host_query_reset, VK12); \ + CheckExt(EXT_buffer_device_address, VKXX); \ + CheckExt(EXT_hdr_metadata, VKXX); \ + CheckExt(AMD_display_native_hdr, VKXX); \ + CheckExt(EXT_depth_clip_enable, VKXX); \ + CheckExt(KHR_pipeline_executable_properties, VKXX); \ + CheckExt(AMD_negative_viewport_height, VKXX); \ + CheckExt(EXT_line_rasterization, VKXX); \ + CheckExt(GOOGLE_display_timing, VKXX); \ + CheckExt(KHR_timeline_semaphore, VK12); \ + CheckExt(KHR_performance_query, VKXX); \ + CheckExt(KHR_buffer_device_address, VK12); \ + CheckExt(EXT_tooling_info, VKXX); \ + CheckExt(KHR_separate_depth_stencil_layouts, VK12); \ + CheckExt(KHR_shader_non_semantic_info, VKXX); \ + CheckExt(EXT_inline_uniform_block, VKXX); \ + CheckExt(EXT_custom_border_color, VKXX); \ + CheckExt(EXT_robustness2, VKXX); \ + CheckExt(EXT_pipeline_creation_cache_control, VKXX); \ + CheckExt(EXT_private_data, VKXX); #define HookInitVulkanInstanceExts_PhysDev() \ HookInitExtension(KHR_surface, GetPhysicalDeviceSurfaceSupportKHR); \ @@ -786,6 +796,10 @@ HookInitPromotedExtension(KHR_buffer_device_address, GetBufferDeviceAddress, KHR); \ HookInitPromotedExtension(KHR_buffer_device_address, GetBufferOpaqueCaptureAddress, KHR); \ HookInitPromotedExtension(KHR_buffer_device_address, GetDeviceMemoryOpaqueCaptureAddress, KHR); \ + HookInitExtension(EXT_private_data, CreatePrivateDataSlotEXT); \ + HookInitExtension(EXT_private_data, DestroyPrivateDataSlotEXT); \ + HookInitExtension(EXT_private_data, SetPrivateDataEXT); \ + HookInitExtension(EXT_private_data, GetPrivateDataEXT); \ HookInitDevice_PlatformSpecific() #define DefineHooks() \ @@ -1404,4 +1418,13 @@ VkDeviceMemoryOpaqueCaptureAddressInfo *, pInfo); \ HookDefine3(VkResult, vkGetPhysicalDeviceToolPropertiesEXT, VkPhysicalDevice, physicalDevice, \ uint32_t *, pToolCount, VkPhysicalDeviceToolPropertiesEXT *, pToolProperties); \ + HookDefine4(VkResult, vkCreatePrivateDataSlotEXT, VkDevice, device, \ + const VkPrivateDataSlotCreateInfoEXT *, pCreateInfo, const VkAllocationCallbacks *, \ + pAllocator, VkPrivateDataSlotEXT *, pPrivateDataSlot); \ + HookDefine3(void, vkDestroyPrivateDataSlotEXT, VkDevice, device, VkPrivateDataSlotEXT, \ + privateDataSlot, const VkAllocationCallbacks *, pAllocator); \ + HookDefine5(VkResult, vkSetPrivateDataEXT, VkDevice, device, VkObjectType, objectType, uint64_t, \ + objectHandle, VkPrivateDataSlotEXT, privateDataSlot, uint64_t, data); \ + HookDefine5(void, vkGetPrivateDataEXT, VkDevice, device, VkObjectType, objectType, uint64_t, \ + objectHandle, VkPrivateDataSlotEXT, privateDataSlot, uint64_t *, pData); \ HookDefine_PlatformSpecific() diff --git a/renderdoc/driver/vulkan/vk_next_chains.cpp b/renderdoc/driver/vulkan/vk_next_chains.cpp index 1208cfe6a..04d496753 100644 --- a/renderdoc/driver/vulkan/vk_next_chains.cpp +++ b/renderdoc/driver/vulkan/vk_next_chains.cpp @@ -126,6 +126,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, COPY_STRUCT(VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO, VkDeviceGroupSubmitInfo); \ COPY_STRUCT(VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR, \ VkDeviceGroupSwapchainCreateInfoKHR); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT, \ + VkDevicePrivateDataCreateInfoEXT); \ COPY_STRUCT(VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, VkDeviceQueueCreateInfo); \ COPY_STRUCT(VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT, \ VkDeviceQueueGlobalPriorityCreateInfoEXT); \ @@ -262,6 +264,8 @@ 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_EXT, \ + VkPhysicalDevicePrivateDataFeaturesEXT); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2, VkPhysicalDeviceProperties2); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, \ VkPhysicalDeviceProtectedMemoryFeatures); \ @@ -386,6 +390,7 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, VkPipelineViewportStateCreateInfo); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR, VkPresentRegionsKHR); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE, VkPresentTimesInfoGOOGLE) \ + COPY_STRUCT(VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT, VkPrivateDataSlotCreateInfoEXT) \ COPY_STRUCT(VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO, VkQueryPoolCreateInfo); \ COPY_STRUCT(VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR, \ VkQueryPoolPerformanceCreateInfoKHR); \ @@ -588,7 +593,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR: \ case VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV: \ case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD: \ - case VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT: \ case VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD: \ case VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT: \ case VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT: \ @@ -637,7 +641,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_PRIVATE_DATA_FEATURES_EXT: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV: \ @@ -662,7 +665,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV: \ 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_PRIVATE_DATA_SLOT_CREATE_INFO_EXT: \ case VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL: \ case VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV: \ case VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR: \ diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index e38aadf21..8e4d11143 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -151,6 +151,7 @@ DECL_VKFLAG_EMPTY_EXT(VkPipelineDiscardRectangleStateCreate, EXT); DECL_VKFLAG_EMPTY_EXT(VkPipelineRasterizationConservativeStateCreate, EXT); DECL_VKFLAG_EMPTY_EXT(VkPipelineRasterizationStateStreamCreate, EXT); DECL_VKFLAG_EMPTY_EXT(VkPipelineViewportSwizzleStateCreate, NV); +DECL_VKFLAG_EXT(VkPrivateDataSlotCreate, EXT); DECL_VKFLAG_EXT(VkSurfaceCounter, EXT); DECL_VKFLAG_EXT(VkSurfaceTransform, KHR); DECL_VKFLAG_EXT(VkSwapchainCreate, KHR); @@ -619,6 +620,13 @@ SERIALISE_VK_HANDLES(); PNEXT_STRUCT(VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT, \ VkPipelineCreationFeedbackCreateInfoEXT) \ \ + /* VK_EXT_private_data */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT, \ + VkPhysicalDevicePrivateDataFeaturesEXT) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT, \ + VkDevicePrivateDataCreateInfoEXT) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT, VkPrivateDataSlotCreateInfoEXT) \ + \ /* VK_EXT_robustness2 */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT, \ VkPhysicalDeviceRobustness2FeaturesEXT) \ @@ -1071,11 +1079,6 @@ SERIALISE_VK_HANDLES(); PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT) \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT) \ \ - /* VK_EXT_private_data */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT) \ - \ /* VK_EXT_texture_compression_astc_hdr */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT) \ \ @@ -5679,6 +5682,52 @@ void Deserialise(const VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT &e DeserialiseNext(el.pNext); } +template +void DoSerialise(SerialiserType &ser, VkPhysicalDevicePrivateDataFeaturesEXT &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(privateData); +} + +template <> +void Deserialise(const VkPhysicalDevicePrivateDataFeaturesEXT &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkDevicePrivateDataCreateInfoEXT &el) +{ + RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(privateDataSlotRequestCount); +} + +template <> +void Deserialise(const VkDevicePrivateDataCreateInfoEXT &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkPrivateDataSlotCreateInfoEXT &el) +{ + RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER_VKFLAGS(VkPrivateDataSlotCreateFlagsEXT, flags); +} + +template <> +void Deserialise(const VkPrivateDataSlotCreateInfoEXT &el) +{ + DeserialiseNext(el.pNext); +} + template void DoSerialise(SerialiserType &ser, VkPhysicalDeviceRobustness2FeaturesEXT &el) { @@ -8396,6 +8445,7 @@ INSTANTIATE_SERIALISE_TYPE(VkDeviceGroupRenderPassBeginInfo); INSTANTIATE_SERIALISE_TYPE(VkDeviceGroupSubmitInfo); INSTANTIATE_SERIALISE_TYPE(VkDeviceGroupSwapchainCreateInfoKHR); INSTANTIATE_SERIALISE_TYPE(VkDeviceMemoryOpaqueCaptureAddressInfo); +INSTANTIATE_SERIALISE_TYPE(VkDevicePrivateDataCreateInfoEXT); INSTANTIATE_SERIALISE_TYPE(VkDeviceQueueCreateInfo); INSTANTIATE_SERIALISE_TYPE(VkDeviceQueueGlobalPriorityCreateInfoEXT); INSTANTIATE_SERIALISE_TYPE(VkDeviceQueueInfo2); @@ -8510,6 +8560,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePerformanceQueryPropertiesKHR); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePointClippingProperties); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePrivateDataFeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceProperties2); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceProtectedMemoryFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceProtectedMemoryProperties); @@ -8582,6 +8633,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPresentInfoKHR); INSTANTIATE_SERIALISE_TYPE(VkPresentRegionsKHR); INSTANTIATE_SERIALISE_TYPE(VkPresentTimeGOOGLE); INSTANTIATE_SERIALISE_TYPE(VkPresentTimesInfoGOOGLE); +INSTANTIATE_SERIALISE_TYPE(VkPrivateDataSlotCreateInfoEXT); INSTANTIATE_SERIALISE_TYPE(VkProtectedSubmitInfo); INSTANTIATE_SERIALISE_TYPE(VkQueryPoolCreateInfo); INSTANTIATE_SERIALISE_TYPE(VkQueryPoolPerformanceCreateInfoKHR); diff --git a/renderdoc/driver/vulkan/vk_stringise.cpp b/renderdoc/driver/vulkan/vk_stringise.cpp index 0240dcfca..3c3668369 100644 --- a/renderdoc/driver/vulkan/vk_stringise.cpp +++ b/renderdoc/driver/vulkan/vk_stringise.cpp @@ -846,6 +846,15 @@ rdcstr DoStringise(const VkAcquireProfilingLockFlagBitsKHR &el) END_BITFIELD_STRINGISE(); } +template <> +rdcstr DoStringise(const VkPrivateDataSlotCreateFlagBitsEXT &el) +{ + BEGIN_BITFIELD_STRINGISE(VkPrivateDataSlotCreateFlagBitsEXT); + { + } + END_BITFIELD_STRINGISE(); +} + template <> rdcstr DoStringise(const VkPerformanceCounterDescriptionFlagBitsKHR &el) { diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index 0af562b0f..227d3e52d 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -169,7 +169,7 @@ static void StripUnwantedExtensions(rdcarray &Extensions) return true; // this is debug only, nothing to capture, so nothing to replay - if(ext == "VK_EXT_tooling_info") + if(ext == "VK_EXT_tooling_info" || ext == "VK_EXT_private_data") return true; return false; @@ -1977,6 +1977,14 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi return false; } + // remove private data structs to improve capture compatibility, since we don't replay any + // private data. + if(RemoveNextStruct(&createInfo, VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT) || + RemoveNextStruct(&createInfo, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT)) + { + RDCLOG("Removed private data structs from vkCreateDevice pNext chain"); + } + VkPhysicalDeviceFeatures enabledFeatures = {0}; if(createInfo.pEnabledFeatures != NULL) enabledFeatures = *createInfo.pEnabledFeatures; diff --git a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp index de0dc7ccf..cfefbc01f 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp @@ -1825,12 +1825,16 @@ static ObjData GetObjData(VkObjectType objType, uint64_t object) break; } + // private data slots are not wrapped + case VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT: + ret.unwrapped = object; + break; + // these objects are not supported case VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR: case VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL: case VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR: case VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV: - case VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT: case VK_OBJECT_TYPE_UNKNOWN: case VK_OBJECT_TYPE_MAX_ENUM: break; } @@ -2230,3 +2234,39 @@ void WrappedVulkan::vkReleaseProfilingLockKHR(VkDevice device) { ObjDisp(device)->ReleaseProfilingLockKHR(Unwrap(device)); } + +VkResult WrappedVulkan::vkCreatePrivateDataSlotEXT(VkDevice device, + const VkPrivateDataSlotCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkPrivateDataSlotEXT *pPrivateDataSlot) +{ + // don't even wrap the slot, keep it unwrapped since we don't care about it + return ObjDisp(device)->CreatePrivateDataSlotEXT(Unwrap(device), pCreateInfo, pAllocator, + pPrivateDataSlot); +} + +void WrappedVulkan::vkDestroyPrivateDataSlotEXT(VkDevice device, VkPrivateDataSlotEXT privateDataSlot, + const VkAllocationCallbacks *pAllocator) +{ + return ObjDisp(device)->DestroyPrivateDataSlotEXT(Unwrap(device), privateDataSlot, pAllocator); +} + +VkResult WrappedVulkan::vkSetPrivateDataEXT(VkDevice device, VkObjectType objectType, + uint64_t objectHandle, + VkPrivateDataSlotEXT privateDataSlot, uint64_t data) +{ + ObjData objdata = GetObjData(objectType, objectHandle); + + return ObjDisp(device)->SetPrivateDataEXT(Unwrap(device), objectType, objdata.unwrapped, + privateDataSlot, data); +} + +void WrappedVulkan::vkGetPrivateDataEXT(VkDevice device, VkObjectType objectType, + uint64_t objectHandle, VkPrivateDataSlotEXT privateDataSlot, + uint64_t *pData) +{ + ObjData objdata = GetObjData(objectType, objectHandle); + + return ObjDisp(device)->GetPrivateDataEXT(Unwrap(device), objectType, objdata.unwrapped, + privateDataSlot, pData); +}