From 27ae3b6fbfbd5ea76df776c7a0187d0dbe527708 Mon Sep 17 00:00:00 2001 From: baldurk Date: Sat, 7 May 2016 10:27:01 +0200 Subject: [PATCH] Remove VK_LUNARG_DEBUG_MARKER, change support to VK_EXT_debug_marker --- .../vulkan/official/vk_lunarg_debug_marker.h | 98 ------------------- .../driver/vulkan/renderdoc_vulkan.vcxproj | 1 - .../vulkan/renderdoc_vulkan.vcxproj.filters | 3 - renderdoc/driver/vulkan/vk_common.h | 2 +- renderdoc/driver/vulkan/vk_core.cpp | 24 +++-- renderdoc/driver/vulkan/vk_core.h | 36 +++---- renderdoc/driver/vulkan/vk_hookset_defs.h | 32 +++--- renderdoc/driver/vulkan/vk_info.h | 2 + .../driver/vulkan/wrappers/vk_cmd_funcs.cpp | 81 ++++++++++++--- .../vulkan/wrappers/vk_device_funcs.cpp | 2 +- .../driver/vulkan/wrappers/vk_misc_funcs.cpp | 90 +++++++++++------ 11 files changed, 180 insertions(+), 191 deletions(-) delete mode 100644 renderdoc/driver/vulkan/official/vk_lunarg_debug_marker.h diff --git a/renderdoc/driver/vulkan/official/vk_lunarg_debug_marker.h b/renderdoc/driver/vulkan/official/vk_lunarg_debug_marker.h deleted file mode 100644 index edff2b9ee..000000000 --- a/renderdoc/driver/vulkan/official/vk_lunarg_debug_marker.h +++ /dev/null @@ -1,98 +0,0 @@ -// -// File: vk_lunarg_debug_marker.h -// -/* - * Copyright (c) 2015-2016 The Khronos Group Inc. - * Copyright (c) 2015-2016 Valve Corporation - * Copyright (c) 2015-2016 LunarG, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and/or associated documentation files (the "Materials"), to - * deal in the Materials without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Materials, and to permit persons to whom the Materials are - * furnished to do so, subject to the following conditions: - * - * The above copyright notice(s) and this permission notice shall be included in - * all copies or substantial portions of the Materials. - * - * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE - * USE OR OTHER DEALINGS IN THE MATERIALS. - * - * Authors: - * Jon Ashburn - * Courtney Goeltzenleuchter - */ - -#ifndef __VK_DEBUG_MARKER_H__ -#define __VK_DEBUG_MARKER_H__ - -#include "vulkan.h" - -#define VK_DEBUG_MARKER_EXTENSION_NUMBER 6 -#define VK_DEBUG_MARKER_EXTENSION_REVISION 1 -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus - -/* -*************************************************************************************************** -* DebugMarker Vulkan Extension API -*************************************************************************************************** -*/ - -#define DEBUG_MARKER_EXTENSION_NAME "VK_LUNARG_DEBUG_MARKER" - -// ------------------------------------------------------------------------------------------------ -// Enumerations - -#define VK_DEBUG_MARKER_ENUM_EXTEND(type, id) \ - ((type)(VK_DEBUG_MARKER_EXTENSION_NUMBER * -1000 + (id))) - -#define VK_OBJECT_INFO_TYPE_DBG_OBJECT_TAG \ - VK_DEBUG_MARKER_ENUM_EXTEND(VkDbgObjectInfoType, 0) -#define VK_OBJECT_INFO_TYPE_DBG_OBJECT_NAME \ - VK_DEBUG_MARKER_ENUM_EXTEND(VkDbgObjectInfoType, 1) - -// ------------------------------------------------------------------------------------------------ -// API functions - -typedef void(VKAPI_PTR *PFN_vkCmdDbgMarkerBegin)(VkCommandBuffer commandBuffer, - const char *pMarker); -typedef void(VKAPI_PTR *PFN_vkCmdDbgMarkerEnd)(VkCommandBuffer commandBuffer); -typedef VkResult(VKAPI_PTR *PFN_vkDbgSetObjectTag)( - VkDevice device, VkDebugReportObjectTypeEXT objType, uint64_t object, - size_t tagSize, const void *pTag); -typedef VkResult(VKAPI_PTR *PFN_vkDbgSetObjectName)( - VkDevice device, VkDebugReportObjectTypeEXT objType, uint64_t object, - size_t nameSize, const char *pName); - -#ifndef VK_NO_PROTOTYPES - -// DebugMarker extension entrypoints -VKAPI_ATTR void VKAPI_CALL -vkCmdDbgMarkerBegin(VkCommandBuffer commandBuffer, const char *pMarker); - -VKAPI_ATTR void VKAPI_CALL vkCmdDbgMarkerEnd(VkCommandBuffer commandBuffer); - -VKAPI_ATTR VkResult VKAPI_CALL -vkDbgSetObjectTag(VkDevice device, VkDebugReportObjectTypeEXT objType, - uint64_t object, size_t tagSize, const void *pTag); - -VKAPI_ATTR VkResult VKAPI_CALL -vkDbgSetObjectName(VkDevice device, VkDebugReportObjectTypeEXT objType, - uint64_t object, size_t nameSize, const char *pName); - -#endif // VK_NO_PROTOTYPES - -#ifdef __cplusplus -} // extern "C" -#endif // __cplusplus - -#endif // __VK_DEBUG_MARKER_H__ diff --git a/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj b/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj index 3f9e91b8d..9b82c90f0 100644 --- a/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj +++ b/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj @@ -61,7 +61,6 @@ - diff --git a/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj.filters b/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj.filters index 3cf1de790..893212b53 100644 --- a/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj.filters +++ b/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj.filters @@ -117,9 +117,6 @@ official - - official - official diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index 561d21142..4b124cc5b 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -41,7 +41,6 @@ #define VK_NO_PROTOTYPES #include "official/vulkan.h" -#include "official/vk_lunarg_debug_marker.h" #include "api/replay/renderdoc_replay.h" @@ -301,6 +300,7 @@ enum VulkanChunkType END_EVENT, SET_NAME, + SET_SHADER_DEBUG_PATH, CREATE_SWAP_BUFFER, diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 0c8f7ee61..4012b62e3 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -145,11 +145,12 @@ const char *VkChunkNames[] = "vkCmdDispatch", "vkCmdDispatchIndirect", - "vkCmdDbgMarkerBegin", - "vkCmdDbgMarker", // no equivalent function at the moment - "vkCmdDbgMarkerEnd", + "vkCmdDebugMarkerBeginEXT", + "vkCmdDebugMarkerInsertEXT", + "vkCmdDebugMarkerEndEXT", - "vkDbgSetObjectName", + "vkDebugMarkerSetObjectNameEXT", + "vkDebugMarkerSetObjectTagEXT", "vkCreateSwapchainKHR", @@ -724,8 +725,8 @@ VkResult WrappedVulkan::GetProvidedExtensionProperties(uint32_t *pPropertyCount, // this is the list of extensions we provide - regardless of whether the ICD supports them const VkExtensionProperties providedExtensions[] = { { - DEBUG_MARKER_EXTENSION_NAME, - VK_DEBUG_MARKER_EXTENSION_REVISION + VK_EXT_DEBUG_MARKER_EXTENSION_NAME, + VK_EXT_DEBUG_MARKER_SPEC_VERSION }, }; @@ -1920,16 +1921,19 @@ void WrappedVulkan::ProcessChunk(uint64_t offset, VulkanChunkType context) break; case BEGIN_EVENT: - Serialise_vkCmdDbgMarkerBegin(GetMainSerialiser(), VK_NULL_HANDLE, NULL); + Serialise_vkCmdDebugMarkerBeginEXT(GetMainSerialiser(), VK_NULL_HANDLE, NULL); break; case SET_MARKER: - RDCFATAL("No such function vkCmdDbgMarker"); + Serialise_vkCmdDebugMarkerInsertEXT(GetMainSerialiser(), VK_NULL_HANDLE, NULL); break; case END_EVENT: - Serialise_vkCmdDbgMarkerEnd(GetMainSerialiser(), VK_NULL_HANDLE); + Serialise_vkCmdDebugMarkerEndEXT(GetMainSerialiser(), VK_NULL_HANDLE); break; case SET_NAME: - Serialise_vkDbgSetObjectName(GetMainSerialiser(), VK_NULL_HANDLE, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, 0, NULL); + Serialise_vkDebugMarkerSetObjectNameEXT(GetMainSerialiser(), VK_NULL_HANDLE, NULL); + break; + case SET_SHADER_DEBUG_PATH: + Serialise_SetShaderDebugPath(GetMainSerialiser(), VK_NULL_HANDLE, NULL); break; case CREATE_SWAP_BUFFER: diff --git a/renderdoc/driver/vulkan/vk_core.h b/renderdoc/driver/vulkan/vk_core.h index 4e884d40f..e1e56366b 100644 --- a/renderdoc/driver/vulkan/vk_core.h +++ b/renderdoc/driver/vulkan/vk_core.h @@ -487,6 +487,8 @@ private: void StartFrameCapture(void *dev, void *wnd); bool EndFrameCapture(void *dev, void *wnd); + + bool Serialise_SetShaderDebugPath(Serialiser *localSerialiser, VkDevice device, VkDebugMarkerObjectTagInfoEXT* pTagInfo); // replay @@ -1444,28 +1446,26 @@ public: const char* pLayerPrefix, const char* pMessage); - // VK_LUNARG_DEBUG_MARKER functions + // VK_EXT_debug_marker functions - IMPLEMENT_FUNCTION_SERIALISED(void, vkCmdDbgMarkerBegin, + IMPLEMENT_FUNCTION_SERIALISED(VkResult, vkDebugMarkerSetObjectTagEXT, + VkDevice device, + VkDebugMarkerObjectTagInfoEXT* pTagInfo); + + IMPLEMENT_FUNCTION_SERIALISED(VkResult, vkDebugMarkerSetObjectNameEXT, + VkDevice device, + VkDebugMarkerObjectNameInfoEXT* pNameInfo); + + IMPLEMENT_FUNCTION_SERIALISED(void, vkCmdDebugMarkerBeginEXT, VkCommandBuffer commandBuffer, - const char* pMarker); + VkDebugMarkerMarkerInfoEXT* pMarker); - IMPLEMENT_FUNCTION_SERIALISED(void, vkCmdDbgMarkerEnd, + IMPLEMENT_FUNCTION_SERIALISED(void, vkCmdDebugMarkerEndEXT, VkCommandBuffer commandBuffer); - - IMPLEMENT_FUNCTION_SERIALISED(VkResult, vkDbgSetObjectTag, - VkDevice device, - VkDebugReportObjectTypeEXT objType, - uint64_t object, - size_t tagSize, - const void* pTag); - - IMPLEMENT_FUNCTION_SERIALISED(VkResult, vkDbgSetObjectName, - VkDevice device, - VkDebugReportObjectTypeEXT objType, - uint64_t object, - size_t nameSize, - const char* pName); + + IMPLEMENT_FUNCTION_SERIALISED(void, vkCmdDebugMarkerInsertEXT, + VkCommandBuffer commandBuffer, + VkDebugMarkerMarkerInfoEXT* pMarker); // Windowing extension functions diff --git a/renderdoc/driver/vulkan/vk_hookset_defs.h b/renderdoc/driver/vulkan/vk_hookset_defs.h index 0f2227607..ad663fed4 100644 --- a/renderdoc/driver/vulkan/vk_hookset_defs.h +++ b/renderdoc/driver/vulkan/vk_hookset_defs.h @@ -32,6 +32,7 @@ #undef VK_KHR_surface #undef VK_KHR_swapchain #undef VK_EXT_debug_report +#undef VK_EXT_debug_marker #if defined(VK_USE_PLATFORM_WIN32_KHR) @@ -229,7 +230,7 @@ CheckExt(VK_EXT_debug_report) #define CheckDeviceExts() \ - CheckExt(VK_LUNARG_DEBUG_MARKER) \ + CheckExt(VK_EXT_debug_marker) \ CheckExt(VK_KHR_swapchain) #define HookInitVulkanInstanceExts() \ @@ -244,10 +245,11 @@ HookInitInstance_PlatformSpecific() #define HookInitVulkanDeviceExts() \ - HookInitExtension(VK_LUNARG_DEBUG_MARKER, CmdDbgMarkerBegin); \ - HookInitExtension(VK_LUNARG_DEBUG_MARKER, CmdDbgMarkerEnd); \ - HookInitExtension(VK_LUNARG_DEBUG_MARKER, DbgSetObjectTag); \ - HookInitExtension(VK_LUNARG_DEBUG_MARKER, DbgSetObjectName); \ + HookInitExtension(VK_EXT_debug_marker, DebugMarkerSetObjectTagEXT); \ + HookInitExtension(VK_EXT_debug_marker, DebugMarkerSetObjectNameEXT); \ + HookInitExtension(VK_EXT_debug_marker, CmdDebugMarkerBeginEXT); \ + HookInitExtension(VK_EXT_debug_marker, CmdDebugMarkerEndEXT); \ + HookInitExtension(VK_EXT_debug_marker, CmdDebugMarkerInsertEXT); \ HookInitExtension(VK_KHR_swapchain, CreateSwapchainKHR); \ HookInitExtension(VK_KHR_swapchain, DestroySwapchainKHR); \ HookInitExtension(VK_KHR_swapchain, GetSwapchainImagesKHR); \ @@ -387,10 +389,11 @@ HookDefine4(VkResult, vkCreateDebugReportCallbackEXT, VkInstance, instance, const VkDebugReportCallbackCreateInfoEXT*, pCreateInfo, const VkAllocationCallbacks*, pAllocator, VkDebugReportCallbackEXT*, pCallback); \ HookDefine3(void, vkDestroyDebugReportCallbackEXT, VkInstance, instance, VkDebugReportCallbackEXT, callback, const VkAllocationCallbacks*, pAllocator); \ HookDefine8(void, vkDebugReportMessageEXT, VkInstance, instance, VkDebugReportFlagsEXT, flags, VkDebugReportObjectTypeEXT, objectType, uint64_t, object, size_t, location, int32_t, messageCode, const char*, pLayerPrefix, const char*, pMessage); \ - HookDefine2(void, vkCmdDbgMarkerBegin, VkCommandBuffer, commandBuffer, const char*, pMarker); \ - HookDefine1(void, vkCmdDbgMarkerEnd, VkCommandBuffer, commandBuffer); \ - HookDefine5(VkResult, vkDbgSetObjectTag, VkDevice, device, VkDebugReportObjectTypeEXT, objType, uint64_t, object, size_t, tagSize, const void*, pTag); \ - HookDefine5(VkResult, vkDbgSetObjectName, VkDevice, device, VkDebugReportObjectTypeEXT, objType, uint64_t, object, size_t, nameSize, const char*, pName); \ + HookDefine2(VkResult, vkDebugMarkerSetObjectTagEXT, VkDevice, device, VkDebugMarkerObjectTagInfoEXT*, pTagInfo); \ + HookDefine2(VkResult, vkDebugMarkerSetObjectNameEXT, VkDevice, device, VkDebugMarkerObjectNameInfoEXT*, pNameInfo); \ + HookDefine2(void, vkCmdDebugMarkerBeginEXT, VkCommandBuffer, commandBuffer, VkDebugMarkerMarkerInfoEXT*, pMarkerInfo); \ + HookDefine1(void, vkCmdDebugMarkerEndEXT, VkCommandBuffer, commandBuffer); \ + HookDefine2(void, vkCmdDebugMarkerInsertEXT, VkCommandBuffer, commandBuffer, VkDebugMarkerMarkerInfoEXT*, pMarkerInfo); \ HookDefine4(VkResult, vkGetPhysicalDeviceSurfaceSupportKHR, VkPhysicalDevice, physicalDevice, uint32_t, queueFamilyIndex, VkSurfaceKHR, surface, VkBool32*, pSupported); \ HookDefine3(VkResult, vkGetPhysicalDeviceSurfaceCapabilitiesKHR, VkPhysicalDevice, physicalDevice, VkSurfaceKHR, surface, VkSurfaceCapabilitiesKHR*, pSurfaceProperties); \ HookDefine4(VkResult, vkGetPhysicalDeviceSurfaceFormatsKHR, VkPhysicalDevice, physicalDevice, VkSurfaceKHR, surface, uint32_t*, pSurfaceFormatCount, VkSurfaceFormatKHR*, pSurfaceFormats); \ @@ -418,9 +421,10 @@ struct VkLayerDispatchTableExtended : VkLayerDispatchTable // even though it won't actually ever get used PFN_vkCreateDevice CreateDevice; - // VK_LUNARG_DEBUG_MARKER - PFN_vkCmdDbgMarkerBegin CmdDbgMarkerBegin; - PFN_vkCmdDbgMarkerEnd CmdDbgMarkerEnd; - PFN_vkDbgSetObjectTag DbgSetObjectTag; - PFN_vkDbgSetObjectName DbgSetObjectName; + // VK_EXT_debug_marker + PFN_vkDebugMarkerSetObjectTagEXT DebugMarkerSetObjectTagEXT; + PFN_vkDebugMarkerSetObjectNameEXT DebugMarkerSetObjectNameEXT; + PFN_vkCmdDebugMarkerBeginEXT CmdDebugMarkerBeginEXT; + PFN_vkCmdDebugMarkerEndEXT CmdDebugMarkerEndEXT; + PFN_vkCmdDebugMarkerInsertEXT CmdDebugMarkerInsertEXT; }; diff --git a/renderdoc/driver/vulkan/vk_info.h b/renderdoc/driver/vulkan/vk_info.h index e5f1bc982..9723cf1f4 100644 --- a/renderdoc/driver/vulkan/vk_info.h +++ b/renderdoc/driver/vulkan/vk_info.h @@ -308,6 +308,8 @@ struct VulkanCreationInfo SPVModule spirv; + string unstrippedPath; + struct Reflection { string entryPoint; diff --git a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp index 6338b18fc..f89d0ed1d 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp @@ -2158,13 +2158,19 @@ void WrappedVulkan::vkCmdResetQueryPool( } } -bool WrappedVulkan::Serialise_vkCmdDbgMarkerBegin( +bool WrappedVulkan::Serialise_vkCmdDebugMarkerBeginEXT( Serialiser* localSerialiser, VkCommandBuffer commandBuffer, - const char* pMarker) + VkDebugMarkerMarkerInfoEXT* pMarker) { SERIALISE_ELEMENT(ResourceId, cmdid, GetResID(commandBuffer)); - SERIALISE_ELEMENT(string, name, pMarker ? string(pMarker) : ""); + SERIALISE_ELEMENT(string, name, pMarker && pMarker->pMarkerName ? string(pMarker->pMarkerName) : ""); + + float color[4] = {}; + if(m_State >= WRITING && pMarker) + memcpy(color, pMarker->color, sizeof(color)); + + localSerialiser->SerialisePODArray<4>("color", color); if(m_State < WRITING) m_LastCmdBufferID = cmdid; @@ -2181,12 +2187,12 @@ bool WrappedVulkan::Serialise_vkCmdDbgMarkerBegin( return true; } -void WrappedVulkan::vkCmdDbgMarkerBegin( +void WrappedVulkan::vkCmdDebugMarkerBeginEXT( VkCommandBuffer commandBuffer, - const char* pMarker) + VkDebugMarkerMarkerInfoEXT* pMarker) { - if(ObjDisp(commandBuffer)->CmdDbgMarkerBegin) - ObjDisp(commandBuffer)->CmdDbgMarkerBegin(Unwrap(commandBuffer), pMarker); + if(ObjDisp(commandBuffer)->CmdDebugMarkerBeginEXT) + ObjDisp(commandBuffer)->CmdDebugMarkerBeginEXT(Unwrap(commandBuffer), pMarker); if(m_State >= WRITING) { @@ -2195,13 +2201,13 @@ void WrappedVulkan::vkCmdDbgMarkerBegin( CACHE_THREAD_SERIALISER(); SCOPED_SERIALISE_CONTEXT(BEGIN_EVENT); - Serialise_vkCmdDbgMarkerBegin(localSerialiser, commandBuffer, pMarker); + Serialise_vkCmdDebugMarkerBeginEXT(localSerialiser, commandBuffer, pMarker); record->AddChunk(scope.Get()); } } -bool WrappedVulkan::Serialise_vkCmdDbgMarkerEnd(Serialiser* localSerialiser, VkCommandBuffer commandBuffer) +bool WrappedVulkan::Serialise_vkCmdDebugMarkerEndEXT(Serialiser* localSerialiser, VkCommandBuffer commandBuffer) { SERIALISE_ELEMENT(ResourceId, cmdid, GetResID(commandBuffer)); @@ -2231,11 +2237,11 @@ bool WrappedVulkan::Serialise_vkCmdDbgMarkerEnd(Serialiser* localSerialiser, VkC return true; } -void WrappedVulkan::vkCmdDbgMarkerEnd( +void WrappedVulkan::vkCmdDebugMarkerEndEXT( VkCommandBuffer commandBuffer) { - if(ObjDisp(commandBuffer)->CmdDbgMarkerEnd) - ObjDisp(commandBuffer)->CmdDbgMarkerEnd(Unwrap(commandBuffer)); + if(ObjDisp(commandBuffer)->CmdDebugMarkerEndEXT) + ObjDisp(commandBuffer)->CmdDebugMarkerEndEXT(Unwrap(commandBuffer)); if(m_State >= WRITING) { @@ -2244,7 +2250,56 @@ void WrappedVulkan::vkCmdDbgMarkerEnd( CACHE_THREAD_SERIALISER(); SCOPED_SERIALISE_CONTEXT(END_EVENT); - Serialise_vkCmdDbgMarkerEnd(localSerialiser, commandBuffer); + Serialise_vkCmdDebugMarkerEndEXT(localSerialiser, commandBuffer); + + record->AddChunk(scope.Get()); + } +} + +bool WrappedVulkan::Serialise_vkCmdDebugMarkerInsertEXT( + Serialiser* localSerialiser, + VkCommandBuffer commandBuffer, + VkDebugMarkerMarkerInfoEXT* pMarker) +{ + SERIALISE_ELEMENT(ResourceId, cmdid, GetResID(commandBuffer)); + SERIALISE_ELEMENT(string, name, pMarker && pMarker->pMarkerName ? string(pMarker->pMarkerName) : ""); + + float color[4] = {}; + if(m_State >= WRITING && pMarker) + memcpy(color, pMarker->color, sizeof(color)); + + localSerialiser->SerialisePODArray<4>("color", color); + + if(m_State < WRITING) + m_LastCmdBufferID = cmdid; + + if(m_State == READING) + { + FetchDrawcall draw; + draw.name = name; + draw.flags |= eDraw_SetMarker; + + AddDrawcall(draw, false); + } + + return true; +} + +void WrappedVulkan::vkCmdDebugMarkerInsertEXT( + VkCommandBuffer commandBuffer, + VkDebugMarkerMarkerInfoEXT* pMarker) +{ + if(ObjDisp(commandBuffer)->CmdDebugMarkerInsertEXT) + ObjDisp(commandBuffer)->CmdDebugMarkerInsertEXT(Unwrap(commandBuffer), pMarker); + + if(m_State >= WRITING) + { + VkResourceRecord *record = GetRecord(commandBuffer); + + CACHE_THREAD_SERIALISER(); + + SCOPED_SERIALISE_CONTEXT(SET_MARKER); + Serialise_vkCmdDebugMarkerInsertEXT(localSerialiser, commandBuffer, pMarker); record->AddChunk(scope.Get()); } diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index 14bd64b40..6559e3a4e 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -543,7 +543,7 @@ bool WrappedVulkan::Serialise_vkCreateDevice( for(uint32_t i=0; i < createInfo.enabledExtensionCount; i++) { // don't include the debug marker extension - if(strcmp(createInfo.ppEnabledExtensionNames[i], DEBUG_MARKER_EXTENSION_NAME)) + if(strcmp(createInfo.ppEnabledExtensionNames[i], VK_EXT_DEBUG_MARKER_EXTENSION_NAME)) Extensions.push_back(createInfo.ppEnabledExtensionNames[i]); } diff --git a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp index 5faa2f974..8a9be89f2 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp @@ -798,21 +798,6 @@ void WrappedVulkan::vkDebugReportMessageEXT( return ObjDisp(instance)->DebugReportMessageEXT(Unwrap(instance), flags, objectType, object, location, messageCode, pLayerPrefix, pMessage); } -VkResult WrappedVulkan::vkDbgSetObjectTag( - VkDevice device, - VkDebugReportObjectTypeEXT objType, - uint64_t object, - size_t tagSize, - const void* pTag) -{ - if(ObjDisp(device)->DbgSetObjectTag) - ObjDisp(device)->DbgSetObjectTag(device, objType, object, tagSize, pTag); - - // don't do anything with the tags - - return VK_SUCCESS; -} - static VkResourceRecord *GetObjRecord(VkDebugReportObjectTypeEXT objType, uint64_t object) { switch(objType) @@ -880,19 +865,63 @@ static VkResourceRecord *GetObjRecord(VkDebugReportObjectTypeEXT objType, uint64 return NULL; } -bool WrappedVulkan::Serialise_vkDbgSetObjectName( +bool WrappedVulkan::Serialise_SetShaderDebugPath( Serialiser *localSerialiser, VkDevice device, - VkDebugReportObjectTypeEXT objType, - uint64_t object, - size_t nameSize, - const char* pName) + VkDebugMarkerObjectTagInfoEXT* pTagInfo) { - SERIALISE_ELEMENT(ResourceId, id, GetObjRecord(objType, object)->GetResourceID()); + SERIALISE_ELEMENT(ResourceId, id, GetObjRecord(pTagInfo->objectType, pTagInfo->object)->GetResourceID()); + + string path; + if(m_State >= WRITING) + { + char *tag = (char *)pTagInfo->pTag; + path = string(tag, tag + pTagInfo->tagSize); + } + + localSerialiser->Serialise("path", path); + + if(m_State == READING) + { + m_CreationInfo.m_ShaderModule[GetResourceManager()->GetLiveID(id)].unstrippedPath = path; + } + + return true; +} + +VkResult WrappedVulkan::vkDebugMarkerSetObjectTagEXT( + VkDevice device, + VkDebugMarkerObjectTagInfoEXT* pTagInfo) +{ + if(pTagInfo && pTagInfo->tagName == RENDERDOC_ShaderDebugMagicValue_truncated && + pTagInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT) + { + VkResourceRecord *record = GetObjRecord(pTagInfo->objectType, pTagInfo->object); + + CACHE_THREAD_SERIALISER(); + + SCOPED_SERIALISE_CONTEXT(SET_SHADER_DEBUG_PATH); + Serialise_SetShaderDebugPath(localSerialiser, device, pTagInfo); + record->AddChunk(scope.Get()); + } + else if(ObjDisp(device)->DebugMarkerSetObjectTagEXT) + { + return ObjDisp(device)->DebugMarkerSetObjectTagEXT(device, pTagInfo); + } + + return VK_SUCCESS; +} + +bool WrappedVulkan::Serialise_vkDebugMarkerSetObjectNameEXT( + Serialiser *localSerialiser, + VkDevice device, + VkDebugMarkerObjectNameInfoEXT* pNameInfo) +{ + SERIALISE_ELEMENT(ResourceId, id, GetObjRecord(pNameInfo->objectType, pNameInfo->object)->GetResourceID()); string name; if(m_State >= WRITING) - name = string(pName, pName+nameSize); + name = pNameInfo->pObjectName; localSerialiser->Serialise("name", name); @@ -902,25 +931,22 @@ bool WrappedVulkan::Serialise_vkDbgSetObjectName( return true; } -VkResult WrappedVulkan::vkDbgSetObjectName( +VkResult WrappedVulkan::vkDebugMarkerSetObjectNameEXT( VkDevice device, - VkDebugReportObjectTypeEXT objType, - uint64_t object, - size_t nameSize, - const char* pName) + VkDebugMarkerObjectNameInfoEXT* pNameInfo) { - if(ObjDisp(device)->DbgSetObjectName) - ObjDisp(device)->DbgSetObjectName(device, objType, object, nameSize, pName); + if(ObjDisp(device)->DebugMarkerSetObjectNameEXT) + ObjDisp(device)->DebugMarkerSetObjectNameEXT(device, pNameInfo); if(m_State >= WRITING) { Chunk *chunk = NULL; - VkResourceRecord *record = GetObjRecord(objType, object); + VkResourceRecord *record = GetObjRecord(pNameInfo->objectType, pNameInfo->object); if(!record) { - RDCERR("Unrecognised object %d %llu", objType, object); + RDCERR("Unrecognised object %d %llu", pNameInfo->objectType, pNameInfo->object); return VK_SUCCESS; } @@ -928,7 +954,7 @@ VkResult WrappedVulkan::vkDbgSetObjectName( CACHE_THREAD_SERIALISER(); SCOPED_SERIALISE_CONTEXT(SET_NAME); - Serialise_vkDbgSetObjectName(localSerialiser, device, objType, object, nameSize, pName); + Serialise_vkDebugMarkerSetObjectNameEXT(localSerialiser, device, pNameInfo); chunk = scope.Get(); }