diff --git a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp index 4a90f545a..b56338bfd 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp @@ -2161,6 +2161,72 @@ bool WrappedVulkan::Serialise_vkDebugMarkerSetObjectNameEXT( else m_CreationInfo.m_Names[GetResourceManager()->GetLiveID(Object)] = ObjectName; + VkDebugMarkerObjectNameInfoEXT name = {VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT}; + name.pObjectName = ObjectName; + WrappedVkRes *res = GetResourceManager()->GetLiveResource(Object); + + if(res) + { + if(IsDispatchableRes(res)) + { + WrappedVkDispRes *disp = (WrappedVkDispRes *)res; + name.object = disp->real.handle; + } + else + { + WrappedVkNonDispRes *nondisp = (WrappedVkNonDispRes *)res; + name.object = nondisp->real.handle; + } + + VkDebugReportObjectTypeEXT type = VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT; + + switch(IdentifyTypeByPtr(res)) + { + case eResUnknown: type = VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT; break; + case eResPhysicalDevice: type = VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT; break; + case eResInstance: type = VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT; break; + case eResDevice: type = VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT; break; + case eResQueue: type = VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT; break; + case eResDeviceMemory: type = VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT; break; + case eResBuffer: type = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT; break; + case eResBufferView: type = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT; break; + case eResImage: type = VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT; break; + case eResImageView: type = VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT; break; + case eResFramebuffer: type = VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT; break; + case eResRenderPass: type = VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT; break; + case eResShaderModule: type = VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT; break; + case eResPipelineCache: type = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT; break; + case eResPipelineLayout: type = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT; break; + case eResPipeline: type = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT; break; + case eResSampler: type = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT; break; + case eResDescriptorPool: type = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT; break; + case eResDescriptorSetLayout: + type = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT; + break; + case eResDescriptorSet: type = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT; break; + case eResCommandPool: type = VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT; break; + case eResCommandBuffer: type = VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT; break; + case eResFence: type = VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT; break; + case eResEvent: type = VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT; break; + case eResQueryPool: type = VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT; break; + case eResSemaphore: type = VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT; break; + case eResSwapchain: type = VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT; break; + case eResSurface: type = VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT; break; + case eResDescUpdateTemplate: + type = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT; + break; + case eResSamplerConversion: + type = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT; + break; + } + + if(ObjDisp(m_Device)->DebugMarkerSetObjectNameEXT && type != VK_OBJECT_TYPE_UNKNOWN) + { + name.objectType = type; + ObjDisp(m_Device)->DebugMarkerSetObjectNameEXT(Unwrap(m_Device), &name); + } + } + ResourceDescription &descr = GetResourceDesc(Object); AddResourceCurChunk(descr); @@ -2279,6 +2345,66 @@ bool WrappedVulkan::Serialise_vkSetDebugUtilsObjectNameEXT( else m_CreationInfo.m_Names[GetResourceManager()->GetLiveID(Object)] = ObjectName; + VkDebugUtilsObjectNameInfoEXT name = {VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT}; + name.pObjectName = ObjectName; + WrappedVkRes *res = GetResourceManager()->GetLiveResource(Object); + + if(res) + { + if(IsDispatchableRes(res)) + { + WrappedVkDispRes *disp = (WrappedVkDispRes *)res; + name.objectHandle = disp->real.handle; + } + else + { + WrappedVkNonDispRes *nondisp = (WrappedVkNonDispRes *)res; + name.objectHandle = nondisp->real.handle; + } + + VkObjectType type = VK_OBJECT_TYPE_UNKNOWN; + + switch(IdentifyTypeByPtr(res)) + { + case eResUnknown: type = VK_OBJECT_TYPE_UNKNOWN; break; + case eResPhysicalDevice: type = VK_OBJECT_TYPE_PHYSICAL_DEVICE; break; + case eResInstance: type = VK_OBJECT_TYPE_INSTANCE; break; + case eResDevice: type = VK_OBJECT_TYPE_DEVICE; break; + case eResQueue: type = VK_OBJECT_TYPE_QUEUE; break; + case eResDeviceMemory: type = VK_OBJECT_TYPE_DEVICE_MEMORY; break; + case eResBuffer: type = VK_OBJECT_TYPE_BUFFER; break; + case eResBufferView: type = VK_OBJECT_TYPE_BUFFER_VIEW; break; + case eResImage: type = VK_OBJECT_TYPE_IMAGE; break; + case eResImageView: type = VK_OBJECT_TYPE_IMAGE_VIEW; break; + case eResFramebuffer: type = VK_OBJECT_TYPE_FRAMEBUFFER; break; + case eResRenderPass: type = VK_OBJECT_TYPE_RENDER_PASS; break; + case eResShaderModule: type = VK_OBJECT_TYPE_SHADER_MODULE; break; + case eResPipelineCache: type = VK_OBJECT_TYPE_PIPELINE_CACHE; break; + case eResPipelineLayout: type = VK_OBJECT_TYPE_PIPELINE_LAYOUT; break; + case eResPipeline: type = VK_OBJECT_TYPE_PIPELINE; break; + case eResSampler: type = VK_OBJECT_TYPE_SAMPLER; break; + case eResDescriptorPool: type = VK_OBJECT_TYPE_DESCRIPTOR_POOL; break; + case eResDescriptorSetLayout: type = VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT; break; + case eResDescriptorSet: type = VK_OBJECT_TYPE_DESCRIPTOR_SET; break; + case eResCommandPool: type = VK_OBJECT_TYPE_COMMAND_POOL; break; + case eResCommandBuffer: type = VK_OBJECT_TYPE_COMMAND_BUFFER; break; + case eResFence: type = VK_OBJECT_TYPE_FENCE; break; + case eResEvent: type = VK_OBJECT_TYPE_EVENT; break; + case eResQueryPool: type = VK_OBJECT_TYPE_QUERY_POOL; break; + case eResSemaphore: type = VK_OBJECT_TYPE_SEMAPHORE; break; + case eResSwapchain: type = VK_OBJECT_TYPE_SWAPCHAIN_KHR; break; + case eResSurface: type = VK_OBJECT_TYPE_SURFACE_KHR; break; + case eResDescUpdateTemplate: type = VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE; break; + case eResSamplerConversion: type = VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION; break; + } + + if(ObjDisp(m_Device)->SetDebugUtilsObjectNameEXT && type != VK_OBJECT_TYPE_UNKNOWN) + { + name.objectType = type; + ObjDisp(m_Device)->SetDebugUtilsObjectNameEXT(Unwrap(m_Device), &name); + } + } + ResourceDescription &descr = GetResourceDesc(Object); AddResourceCurChunk(descr); diff --git a/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp index e216a0aff..23eb3973f 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp @@ -2095,6 +2095,8 @@ bool WrappedVulkan::Serialise_vkCreateImage(SerialiserType &ser, VkDevice device ResourceId live = GetResourceManager()->WrapResource(Unwrap(device), img); GetResourceManager()->AddLiveResource(Image, img); + NameVulkanObject(img, StringFormat::Fmt("Image %s", ToStr(Image).c_str())); + m_CreationInfo.m_Image[live].Init(GetResourceManager(), m_CreationInfo, &CreateInfo); bool inserted = false;