diff options
| author | Tony Barbour <tony@LunarG.com> | 2017-06-19 16:50:37 -0600 |
|---|---|---|
| committer | Tony-LunarG <tony@lunarg.com> | 2017-06-29 13:03:10 -0600 |
| commit | 4a1572c647e1b063b2d0e06f026d7645c51a486d (patch) | |
| tree | d0271fcd504cf41fd24d6ffcc6fc0e6865161d3c /layers | |
| parent | 845b2c663757a9030ae108dc76602cc57495f1cc (diff) | |
| download | usermoji-4a1572c647e1b063b2d0e06f026d7645c51a486d.tar.xz | |
layers: Add names to objects and print in validation
Change-Id: Ie6587c26c8528ffac5698b8cb3ca2c4cc86b1dfd
layers: Fill out the rest of debug marker calls
Change-Id: I0c4085e36e5c06e11c0c09d1ca126ae6db35526d
Diffstat (limited to 'layers')
| -rw-r--r-- | layers/core_validation.cpp | 40 | ||||
| -rw-r--r-- | layers/linux/VkLayer_core_validation.json | 12 | ||||
| -rw-r--r-- | layers/linux/VkLayer_object_tracker.json | 12 | ||||
| -rw-r--r-- | layers/linux/VkLayer_parameter_validation.json | 12 | ||||
| -rw-r--r-- | layers/object_tracker.cpp | 8 | ||||
| -rw-r--r-- | layers/parameter_validation.cpp | 7 | ||||
| -rw-r--r-- | layers/vk_layer_logging.h | 20 | ||||
| -rw-r--r-- | layers/windows/VkLayer_core_validation.json | 12 | ||||
| -rw-r--r-- | layers/windows/VkLayer_object_tracker.json | 12 | ||||
| -rw-r--r-- | layers/windows/VkLayer_parameter_validation.json | 12 |
10 files changed, 143 insertions, 4 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index 9450278c..9b43035f 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -10135,6 +10135,41 @@ VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneCapabilitiesKHR(VkPhysicalDevice p return result; } +VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectNameEXT(VkDevice device, VkDebugMarkerObjectNameInfoEXT *pNameInfo) { + std::unique_lock<std::mutex> lock(global_lock); + layer_data *device_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map); + if (pNameInfo->pObjectName) { + device_data->report_data->debugObjectNameMap->insert( + std::make_pair<uint64_t, std::string>((uint64_t &&)pNameInfo->object, pNameInfo->pObjectName)); + } else { + device_data->report_data->debugObjectNameMap->erase(pNameInfo->object); + } + lock.unlock(); + VkResult result = device_data->dispatch_table.DebugMarkerSetObjectNameEXT(device, pNameInfo); + return result; +} + +VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectTagEXT(VkDevice device, VkDebugMarkerObjectTagInfoEXT *pTagInfo) { + layer_data *device_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map); + VkResult result = device_data->dispatch_table.DebugMarkerSetObjectTagEXT(device, pTagInfo); + return result; +} + +VKAPI_ATTR void VKAPI_CALL CmdDebugMarkerBeginEXT(VkCommandBuffer commandBuffer, VkDebugMarkerMarkerInfoEXT *pMarkerInfo) { + layer_data *device_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map); + device_data->dispatch_table.CmdDebugMarkerBeginEXT(commandBuffer, pMarkerInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdDebugMarkerEndEXT(VkCommandBuffer commandBuffer) { + layer_data *device_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map); + device_data->dispatch_table.CmdDebugMarkerEndEXT(commandBuffer); +} + +VKAPI_ATTR void VKAPI_CALL CmdDebugMarkerInsertEXT(VkCommandBuffer commandBuffer, VkDebugMarkerMarkerInfoEXT *pMarkerInfo) { + layer_data *device_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map); + device_data->dispatch_table.CmdDebugMarkerInsertEXT(commandBuffer, pMarkerInfo); +} + VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetDeviceProcAddr(VkDevice device, const char *funcName); VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetPhysicalDeviceProcAddr(VkInstance instance, const char *funcName); VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetInstanceProcAddr(VkInstance instance, const char *funcName); @@ -10262,6 +10297,11 @@ static const std::unordered_map<std::string, void*> name_to_funcptr_map = { {"vkCmdNextSubpass", (void*)CmdNextSubpass}, {"vkCmdEndRenderPass", (void*)CmdEndRenderPass}, {"vkCmdExecuteCommands", (void*)CmdExecuteCommands}, + {"vkCmdDebugMarkerBeginEXT", (void*)CmdDebugMarkerBeginEXT}, + {"vkCmdDebugMarkerEndEXT", (void*)CmdDebugMarkerEndEXT}, + {"vkCmdDebugMarkerInsertEXT", (void*)CmdDebugMarkerInsertEXT}, + {"vkDebugMarkerSetObjectNameEXT", (void*)DebugMarkerSetObjectNameEXT}, + {"vkDebugMarkerSetObjectTagEXT", (void*)DebugMarkerSetObjectTagEXT}, {"vkSetEvent", (void*)SetEvent}, {"vkMapMemory", (void*)MapMemory}, {"vkUnmapMemory", (void*)UnmapMemory}, diff --git a/layers/linux/VkLayer_core_validation.json b/layers/linux/VkLayer_core_validation.json index 4c5f7a15..437c41d9 100644 --- a/layers/linux/VkLayer_core_validation.json +++ b/layers/linux/VkLayer_core_validation.json @@ -12,6 +12,18 @@ "name": "VK_EXT_debug_report", "spec_version": "6" } + ], + "device_extensions": [ + { + "name": "VK_EXT_debug_marker", + "spec_version": "4", + "entrypoints": ["vkDebugMarkerSetObjectTagEXT", + "vkDebugMarkerSetObjectNameEXT", + "vkCmdDebugMarkerBeginEXT", + "vkCmdDebugMarkerEndEXT", + "vkCmdDebugMarkerInsertEXT" + ] + } ] } } diff --git a/layers/linux/VkLayer_object_tracker.json b/layers/linux/VkLayer_object_tracker.json index 9c94b76f..68fa9d5a 100644 --- a/layers/linux/VkLayer_object_tracker.json +++ b/layers/linux/VkLayer_object_tracker.json @@ -12,6 +12,18 @@ "name": "VK_EXT_debug_report", "spec_version": "6" } + ], + "device_extensions": [ + { + "name": "VK_EXT_debug_marker", + "spec_version": "4", + "entrypoints": ["vkDebugMarkerSetObjectTagEXT", + "vkDebugMarkerSetObjectNameEXT", + "vkCmdDebugMarkerBeginEXT", + "vkCmdDebugMarkerEndEXT", + "vkCmdDebugMarkerInsertEXT" + ] + } ] } } diff --git a/layers/linux/VkLayer_parameter_validation.json b/layers/linux/VkLayer_parameter_validation.json index 98201237..e10b964d 100644 --- a/layers/linux/VkLayer_parameter_validation.json +++ b/layers/linux/VkLayer_parameter_validation.json @@ -12,6 +12,18 @@ "name": "VK_EXT_debug_report", "spec_version": "6" } + ], + "device_extensions": [ + { + "name": "VK_EXT_debug_marker", + "spec_version": "4", + "entrypoints": ["vkDebugMarkerSetObjectTagEXT", + "vkDebugMarkerSetObjectNameEXT", + "vkCmdDebugMarkerBeginEXT", + "vkCmdDebugMarkerEndEXT", + "vkCmdDebugMarkerInsertEXT" + ] + } ] } } diff --git a/layers/object_tracker.cpp b/layers/object_tracker.cpp index 1265524a..87903173 100644 --- a/layers/object_tracker.cpp +++ b/layers/object_tracker.cpp @@ -4534,12 +4534,18 @@ VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectTagEXT(VkDevice device, VkDeb VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectNameEXT(VkDevice device, VkDebugMarkerObjectNameInfoEXT *pNameInfo) { bool skip = VK_FALSE; std::unique_lock<std::mutex> lock(global_lock); + layer_data *dev_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map); + if (pNameInfo->pObjectName) { + dev_data->report_data->debugObjectNameMap->insert( + std::make_pair<uint64_t, std::string>((uint64_t &&)pNameInfo->object, pNameInfo->pObjectName)); + } else { + dev_data->report_data->debugObjectNameMap->erase(pNameInfo->object); + } skip |= ValidateObject(device, device, kVulkanObjectTypeDevice, false, VALIDATION_ERROR_23605601, VALIDATION_ERROR_UNDEFINED); lock.unlock(); if (skip) { return VK_ERROR_VALIDATION_FAILED_EXT; } - layer_data *dev_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map); VkResult result = dev_data->dispatch_table.DebugMarkerSetObjectNameEXT(device, pNameInfo); return result; } diff --git a/layers/parameter_validation.cpp b/layers/parameter_validation.cpp index 5cb2a5b7..70ffb593 100644 --- a/layers/parameter_validation.cpp +++ b/layers/parameter_validation.cpp @@ -5331,7 +5331,12 @@ VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectNameEXT(VkDevice device, VkDe bool skip = false; auto my_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map); assert(my_data != NULL); - + if (pNameInfo->pObjectName) { + my_data->report_data->debugObjectNameMap->insert( + std::make_pair<uint64_t, std::string>((uint64_t &&)pNameInfo->object, pNameInfo->pObjectName)); + } else { + my_data->report_data->debugObjectNameMap->erase(pNameInfo->object); + } skip |= parameter_validation_vkDebugMarkerSetObjectNameEXT(my_data, pNameInfo); if (!skip) { diff --git a/layers/vk_layer_logging.h b/layers/vk_layer_logging.h index e0beb5e1..7cf113bf 100644 --- a/layers/vk_layer_logging.h +++ b/layers/vk_layer_logging.h @@ -40,6 +40,7 @@ typedef struct _debug_report_data { VkLayerDbgFunctionNode *default_debug_callback_list; VkFlags active_flags; bool g_DEBUG_REPORT; + std::unordered_map<uint64_t, std::string> *debugObjectNameMap; } debug_report_data; template debug_report_data *GetLayerDataPtr<debug_report_data>(void *data_key, @@ -119,8 +120,21 @@ static inline bool debug_report_log_msg(const debug_report_data *debug_data, VkF while (pTrav) { if (pTrav->msgFlags & msgFlags) { - if (pTrav->pfnMsgCallback(msgFlags, objectType, srcObject, location, msgCode, pLayerPrefix, pMsg, pTrav->pUserData)) { - bail = true; + auto it = debug_data->debugObjectNameMap->find(srcObject); + if (it == debug_data->debugObjectNameMap->end()) { + if (pTrav->pfnMsgCallback(msgFlags, objectType, srcObject, location, msgCode, pLayerPrefix, pMsg, + pTrav->pUserData)) { + bail = true; + } + } else { + std::string newMsg = "SrcObject name = "; + newMsg.append(it->second.c_str()); + newMsg.append(" "); + newMsg.append(pMsg); + if (pTrav->pfnMsgCallback(msgFlags, objectType, srcObject, location, msgCode, pLayerPrefix, newMsg.c_str(), + pTrav->pUserData)) { + bail = true; + } } } pTrav = pTrav->pNext; @@ -143,6 +157,7 @@ static inline debug_report_data *debug_report_create_instance( debug_data->g_DEBUG_REPORT = true; } } + debug_data->debugObjectNameMap = new std::unordered_map<uint64_t, std::string>; return debug_data; } @@ -150,6 +165,7 @@ static inline void layer_debug_report_destroy_instance(debug_report_data *debug_ if (debug_data) { RemoveAllMessageCallbacks(debug_data, &debug_data->default_debug_callback_list); RemoveAllMessageCallbacks(debug_data, &debug_data->debug_callback_list); + delete debug_data->debugObjectNameMap; free(debug_data); } } diff --git a/layers/windows/VkLayer_core_validation.json b/layers/windows/VkLayer_core_validation.json index 0f9cbc6e..35b2f092 100644 --- a/layers/windows/VkLayer_core_validation.json +++ b/layers/windows/VkLayer_core_validation.json @@ -12,6 +12,18 @@ "name": "VK_EXT_debug_report", "spec_version": "6" } + ], + "device_extensions": [ + { + "name": "VK_EXT_debug_marker", + "spec_version": "4", + "entrypoints": ["vkDebugMarkerSetObjectTagEXT", + "vkDebugMarkerSetObjectNameEXT", + "vkCmdDebugMarkerBeginEXT", + "vkCmdDebugMarkerEndEXT", + "vkCmdDebugMarkerInsertEXT" + ] + } ] } } diff --git a/layers/windows/VkLayer_object_tracker.json b/layers/windows/VkLayer_object_tracker.json index 2ebecd02..d572edbc 100644 --- a/layers/windows/VkLayer_object_tracker.json +++ b/layers/windows/VkLayer_object_tracker.json @@ -12,6 +12,18 @@ "name": "VK_EXT_debug_report", "spec_version": "6" } + ], + "device_extensions": [ + { + "name": "VK_EXT_debug_marker", + "spec_version": "4", + "entrypoints": ["vkDebugMarkerSetObjectTagEXT", + "vkDebugMarkerSetObjectNameEXT", + "vkCmdDebugMarkerBeginEXT", + "vkCmdDebugMarkerEndEXT", + "vkCmdDebugMarkerInsertEXT" + ] + } ] } } diff --git a/layers/windows/VkLayer_parameter_validation.json b/layers/windows/VkLayer_parameter_validation.json index 0d6c0f5f..5131b43b 100644 --- a/layers/windows/VkLayer_parameter_validation.json +++ b/layers/windows/VkLayer_parameter_validation.json @@ -12,6 +12,18 @@ "name": "VK_EXT_debug_report", "spec_version": "6" } + ], + "device_extensions": [ + { + "name": "VK_EXT_debug_marker", + "spec_version": "4", + "entrypoints": ["vkDebugMarkerSetObjectTagEXT", + "vkDebugMarkerSetObjectNameEXT", + "vkCmdDebugMarkerBeginEXT", + "vkCmdDebugMarkerEndEXT", + "vkCmdDebugMarkerInsertEXT" + ] + } ] } } |
