diff options
| author | Jon Ashburn <jon@lunarg.com> | 2015-06-01 09:37:38 -0600 |
|---|---|---|
| committer | Courtney Goeltzenleuchter <courtney@LunarG.com> | 2015-06-18 10:18:20 -0600 |
| commit | cf99decc751668b995be63f15b0c29a677a6f494 (patch) | |
| tree | a06cf12cc275c6a122aee1f0b5952e8db5884894 /layers/param_checker.cpp | |
| parent | 87e0fa040fad2093a7ae96943bca64b47cbadb62 (diff) | |
| download | usermoji-cf99decc751668b995be63f15b0c29a677a6f494.tar.xz | |
layers: Fix DrawState and ParamChecker to only use debug_marker if enabled
Diffstat (limited to 'layers/param_checker.cpp')
| -rw-r--r-- | layers/param_checker.cpp | 89 |
1 files changed, 47 insertions, 42 deletions
diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp index 15056f5a..771054e1 100644 --- a/layers/param_checker.cpp +++ b/layers/param_checker.cpp @@ -41,12 +41,15 @@ #include "loader_platform.h" #include "layers_msg.h" +#include "layers_debug_marker_table.h" static LOADER_PLATFORM_THREAD_ONCE_DECLARATION(initOnce); - +struct devExts { + bool debug_marker_enabled; +}; static std::unordered_map<void *, VkLayerDispatchTable *> tableMap; -static std::unordered_map<void *, VkLayerDebugMarkerDispatchTable *> tableDebugMarkerMap; static std::unordered_map<void *, VkLayerInstanceDispatchTable *> tableInstanceMap; +static std::unordered_map<void *, struct devExts> deviceExtMap; static inline VkLayerDispatchTable *device_dispatch_table(VkObject object) { VkLayerDispatchTable *pDisp = *(VkLayerDispatchTable **) object; @@ -66,7 +69,6 @@ static inline VkLayerInstanceDispatchTable *instance_dispatch_table(VkObject obj static VkLayerDispatchTable * initDeviceTable(const VkBaseLayerObject *devw) { VkLayerDispatchTable *pTable; - VkLayerDebugMarkerDispatchTable *pDebugMarkerTable; assert(devw); VkLayerDispatchTable **ppDisp = (VkLayerDispatchTable **) (devw->baseObject); @@ -76,8 +78,6 @@ static VkLayerDispatchTable * initDeviceTable(const VkBaseLayerObject *devw) { pTable = new VkLayerDispatchTable; tableMap[(void *) *ppDisp] = pTable; - pDebugMarkerTable = new VkLayerDebugMarkerDispatchTable; - tableDebugMarkerMap[(void *) *ppDisp] = pDebugMarkerTable; } else { return it->second; @@ -85,13 +85,6 @@ static VkLayerDispatchTable * initDeviceTable(const VkBaseLayerObject *devw) layer_initialize_dispatch_table(pTable, devw); - VkDevice device = (VkDevice) devw->baseObject; - pDebugMarkerTable->CmdDbgMarkerBegin = (PFN_vkCmdDbgMarkerBegin) devw->pGPA(device, "vkCmdDbgMarkerBegin"); - pDebugMarkerTable->CmdDbgMarkerEnd = (PFN_vkCmdDbgMarkerEnd) devw->pGPA(device, "vkCmdDbgMarkerEnd"); - pDebugMarkerTable->DbgSetObjectTag = (PFN_vkDbgSetObjectTag) devw->pGPA(device, "vkDbgSetObjectTag"); - pDebugMarkerTable->DbgSetObjectName = (PFN_vkDbgSetObjectName) devw->pGPA(device, "vkDbgSetObjectName"); - pDebugMarkerTable->ext_enabled = false; - return pTable; } @@ -285,13 +278,14 @@ void PreCreateDevice(VkPhysicalDevice gpu, const VkDeviceCreateInfo* pCreateInfo static void createDeviceRegisterExtensions(const VkDeviceCreateInfo* pCreateInfo, VkDevice device) { uint32_t i, ext_idx; - VkLayerDebugMarkerDispatchTable *pDisp = *(VkLayerDebugMarkerDispatchTable **) device; - VkLayerDebugMarkerDispatchTable *pTable = tableDebugMarkerMap[pDisp]; - + VkLayerDispatchTable *pDisp = *(VkLayerDispatchTable **) device; + deviceExtMap[pDisp].debug_marker_enabled = false; for (i = 0; i < pCreateInfo->extensionCount; i++) { if (strcmp(pCreateInfo->pEnabledExtensions[i].name, DEBUG_MARKER_EXTENSION_NAME) == 0) { - /* Found a matching extension name, mark it enabled */ - pTable->ext_enabled = true; + /* Found a matching extension name, mark it enabled and init dispatch table*/ + initDebugMarkerTable(device); + deviceExtMap[pDisp].debug_marker_enabled = true; + } } @@ -307,15 +301,15 @@ void PostCreateDevice(VkResult result, const VkDeviceCreateInfo *pCreateInfo, Vk return; } - enable_debug_report(pCreateInfo->extensionCount, pCreateInfo->pEnabledExtensions); - createDeviceRegisterExtensions(pCreateInfo, *pDevice); - if(pDevice == nullptr) { char const str[] = "vkCreateDevice parameter, VkDevice* pDevice, is nullptr (postcondition)."; layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); return; } + VkLayerDispatchTable *pDisp = *(VkLayerDispatchTable **) *pDevice; + enable_debug_report(pCreateInfo->extensionCount, pCreateInfo->pEnabledExtensions); + createDeviceRegisterExtensions(pCreateInfo, *pDevice); } VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(VkPhysicalDevice gpu, const VkDeviceCreateInfo* pCreateInfo, VkDevice* pDevice) @@ -332,6 +326,8 @@ VK_LAYER_EXPORT VkResult VKAPI vkDestroyDevice(VkDevice device) VkLayerDispatchTable *pTable = tableMap[pDisp]; VkResult result = pTable->DestroyDevice(device); tableMap.erase(pDisp); + tableDebugMarkerMap.erase(pDisp); + deviceExtMap.erase(pDisp); return result; } @@ -393,6 +389,7 @@ VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceExtensionInfo( size_t* pDataSize, void* pData) { + //TODO add debug_marker /* This entrypoint is NOT going to init it's own dispatch table since loader calls here early */ uint32_t *count; @@ -1946,47 +1943,46 @@ VK_LAYER_EXPORT VkResult VKAPI vkDbgDestroyMsgCallback( VK_LAYER_EXPORT void VKAPI vkCmdDbgMarkerBegin(VkCmdBuffer cmdBuffer, const char* pMarker) { - VkLayerDebugMarkerDispatchTable *pDisp = *(VkLayerDebugMarkerDispatchTable **) cmdBuffer; - VkLayerDebugMarkerDispatchTable *pTable = tableDebugMarkerMap[pDisp]; - if (!pTable->ext_enabled) { + VkLayerDispatchTable *pDisp = *(VkLayerDispatchTable **) cmdBuffer; + if (!deviceExtMap[pDisp].debug_marker_enabled) { char const str[] = "Attempt to use CmdDbgMarkerBegin but extension disabled!"; layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + return; } - pTable->CmdDbgMarkerBegin(cmdBuffer, pMarker); + debug_marker_dispatch_table(cmdBuffer)->CmdDbgMarkerBegin(cmdBuffer, pMarker); } VK_LAYER_EXPORT void VKAPI vkCmdDbgMarkerEnd(VkCmdBuffer cmdBuffer) { - VkLayerDebugMarkerDispatchTable *pDisp = *(VkLayerDebugMarkerDispatchTable **) cmdBuffer; - VkLayerDebugMarkerDispatchTable *pTable = tableDebugMarkerMap[pDisp]; - if (!pTable->ext_enabled) { + VkLayerDispatchTable *pDisp = *(VkLayerDispatchTable **) cmdBuffer; + if (!deviceExtMap[pDisp].debug_marker_enabled) { char const str[] = "Attempt to use CmdDbgMarkerEnd but extension disabled!"; layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + return; } - pTable->CmdDbgMarkerEnd(cmdBuffer); + debug_marker_dispatch_table(cmdBuffer)->CmdDbgMarkerEnd(cmdBuffer); } VkResult VKAPI vkDbgSetObjectTag(VkDevice device, VkObjectType objType, VkObject object, size_t tagSize, const void* pTag) { - VkLayerDebugMarkerDispatchTable *pDisp = *(VkLayerDebugMarkerDispatchTable **) device; - VkLayerDebugMarkerDispatchTable *pTable = tableDebugMarkerMap[pDisp]; - if (!pTable->ext_enabled) { + VkLayerDispatchTable *pDisp = *(VkLayerDispatchTable **) device; + if (!deviceExtMap[pDisp].debug_marker_enabled) { char const str[] = "Attempt to use DbgSetObjectTag but extension disabled!"; layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + return VK_ERROR_UNAVAILABLE; } - pTable->DbgSetObjectTag(device, objType, object, tagSize, pTag); + debug_marker_dispatch_table(device)->DbgSetObjectTag(device, objType, object, tagSize, pTag); } VkResult VKAPI vkDbgSetObjectName(VkDevice device, VkObjectType objType, VkObject object, size_t nameSize, const char* pName) { - VkLayerDebugMarkerDispatchTable *pDisp = *(VkLayerDebugMarkerDispatchTable **) device; - VkLayerDebugMarkerDispatchTable *pTable = tableDebugMarkerMap[pDisp]; - - if (!pTable->ext_enabled) { + VkLayerDispatchTable *pDisp = *(VkLayerDispatchTable **) device; + if (!deviceExtMap[pDisp].debug_marker_enabled) { char const str[] = "Attempt to use DbgSetObjectName but extension disabled!"; layerCbMsg(VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); + return VK_ERROR_UNAVAILABLE; } - pTable->DbgSetObjectName(device, objType, object, nameSize, pName); + debug_marker_dispatch_table(device)->DbgSetObjectName(device, objType, object, nameSize, pName); } VK_LAYER_EXPORT VkResult VKAPI vkGetDisplayInfoWSI(VkDisplayWSI display, VkDisplayInfoTypeWSI infoType, size_t* pDataSize, void* pData) @@ -2223,10 +2219,6 @@ static inline void* layer_intercept_proc(const char *name) return (void*) vkCmdBeginRenderPass; if (!strcmp(name, "CmdEndRenderPass")) return (void*) vkCmdEndRenderPass; - if (!strcmp(name, "CmdDbgMarkerBegin")) - return (void*) vkCmdDbgMarkerBegin; - if (!strcmp(name, "CmdDbgMarkerEnd")) - return (void*) vkCmdDbgMarkerEnd; if (!strcmp(name, "GetDisplayInfoWSI")) return (void*) vkGetDisplayInfoWSI; if (!strcmp(name, "CreateSwapChainWSI")) @@ -2284,7 +2276,20 @@ VK_LAYER_EXPORT void* VKAPI vkGetDeviceProcAddr(VkDevice device, const char* fun if (addr) { return addr; } - else { + + VkLayerDispatchTable *pDisp = *(VkLayerDispatchTable **) device; + if (!deviceExtMap[pDisp].debug_marker_enabled) + { + if (!strcmp(funcName, "CmdDbgMarkerBegin")) + return (void*) vkCmdDbgMarkerBegin; + if (!strcmp(funcName, "CmdDbgMarkerEnd")) + return (void*) vkCmdDbgMarkerEnd; + if (!strcmp(funcName, "DbgSetObjectTag")) + return (void*) vkDbgSetObjectTag; + if (!strcmp(funcName, "DbgSetObjectName")) + return (void*) vkDbgSetObjectName; + } + { VkLayerDispatchTable **ppDisp = (VkLayerDispatchTable **) device; VkLayerDispatchTable* pTable = tableMap[*ppDisp]; if (pTable->GetDeviceProcAddr == NULL) |
