layers: Redo alloc/init of debugreport struct
Change-Id: Ifdbc1aa3dc7c667e2fc1ee70ac631746838769cb
diff --git a/layers/vk_layer_logging.h b/layers/vk_layer_logging.h
index d49e7aa..95e7b62 100644
--- a/layers/vk_layer_logging.h
+++ b/layers/vk_layer_logging.h
@@ -79,41 +79,41 @@
} LoggingLabelData;
typedef struct _debug_report_data {
- VkLayerDbgFunctionNode *debug_callback_list;
- VkLayerDbgFunctionNode *default_debug_callback_list;
- VkDebugUtilsMessageSeverityFlagsEXT active_severities;
- VkDebugUtilsMessageTypeFlagsEXT active_types;
- bool g_DEBUG_REPORT;
- bool g_DEBUG_UTILS;
- std::unordered_map<uint64_t, std::string> *debugObjectNameMap;
- std::unordered_map<uint64_t, std::string> *debugUtilsObjectNameMap;
- std::unordered_map<VkQueue, std::vector<LoggingLabelData>> *debugUtilsQueueLabels;
- bool queueLabelHasInsert;
- std::unordered_map<VkCommandBuffer, std::vector<LoggingLabelData>> *debugUtilsCmdBufLabels;
- bool cmdBufLabelHasInsert;
+ VkLayerDbgFunctionNode *debug_callback_list{nullptr};
+ VkLayerDbgFunctionNode *default_debug_callback_list{nullptr};
+ VkDebugUtilsMessageSeverityFlagsEXT active_severities{0};
+ VkDebugUtilsMessageTypeFlagsEXT active_types{0};
+ bool g_DEBUG_REPORT{false};
+ bool g_DEBUG_UTILS{false};
+ bool queueLabelHasInsert{false};
+ bool cmdBufLabelHasInsert{false};
+ std::unordered_map<uint64_t, std::string> debugObjectNameMap;
+ std::unordered_map<uint64_t, std::string> debugUtilsObjectNameMap;
+ std::unordered_map<VkQueue, std::vector<LoggingLabelData>> debugUtilsQueueLabels;
+ std::unordered_map<VkCommandBuffer, std::vector<LoggingLabelData>> debugUtilsCmdBufLabels;
void DebugReportSetUtilsObjectName(const VkDebugUtilsObjectNameInfoEXT *pNameInfo) {
if (pNameInfo->pObjectName) {
- debugUtilsObjectNameMap->insert(
+ debugUtilsObjectNameMap.insert(
std::make_pair<uint64_t, std::string>((uint64_t &&) pNameInfo->objectHandle, pNameInfo->pObjectName));
} else {
- debugUtilsObjectNameMap->erase(pNameInfo->objectHandle);
+ debugUtilsObjectNameMap.erase(pNameInfo->objectHandle);
}
}
void DebugReportSetMarkerObjectName(const VkDebugMarkerObjectNameInfoEXT *pNameInfo) {
if (pNameInfo->pObjectName) {
- debugObjectNameMap->insert(
+ debugObjectNameMap.insert(
std::make_pair<uint64_t, std::string>((uint64_t &&) pNameInfo->object, pNameInfo->pObjectName));
} else {
- debugObjectNameMap->erase(pNameInfo->object);
+ debugObjectNameMap.erase(pNameInfo->object);
}
}
std::string DebugReportGetUtilsObjectName(const uint64_t object) const {
std::string label = "";
- auto utils_name_iter = debugUtilsObjectNameMap->find(object);
- if (utils_name_iter != debugUtilsObjectNameMap->end()) {
+ auto utils_name_iter = debugUtilsObjectNameMap.find(object);
+ if (utils_name_iter != debugUtilsObjectNameMap.end()) {
label = utils_name_iter->second;
}
return label;
@@ -121,8 +121,8 @@
std::string DebugReportGetMarkerObjectName(const uint64_t object) const {
std::string label = "";
- auto marker_name_iter = debugObjectNameMap->find(object);
- if (marker_name_iter != debugObjectNameMap->end()) {
+ auto marker_name_iter = debugObjectNameMap.find(object);
+ if (marker_name_iter != debugObjectNameMap.end()) {
label = marker_name_iter->second;
}
return label;
@@ -351,8 +351,8 @@
oss << "Object: 0x" << std::hex << src_object;
// If this is a queue, add any queue labels to the callback data.
if (VK_OBJECT_TYPE_QUEUE == object_name_info.objectType) {
- auto label_iter = debug_data->debugUtilsQueueLabels->find(reinterpret_cast<VkQueue>(src_object));
- if (label_iter != debug_data->debugUtilsQueueLabels->end()) {
+ auto label_iter = debug_data->debugUtilsQueueLabels.find(reinterpret_cast<VkQueue>(src_object));
+ if (label_iter != debug_data->debugUtilsQueueLabels.end()) {
queue_labels = new VkDebugUtilsLabelEXT[label_iter->second.size()];
if (nullptr != queue_labels) {
// Record the labels, but record them in reverse order since we want the
@@ -374,8 +374,8 @@
}
// If this is a command buffer, add any command buffer labels to the callback data.
} else if (VK_OBJECT_TYPE_COMMAND_BUFFER == object_name_info.objectType) {
- auto label_iter = debug_data->debugUtilsCmdBufLabels->find(reinterpret_cast<VkCommandBuffer>(src_object));
- if (label_iter != debug_data->debugUtilsCmdBufLabels->end()) {
+ auto label_iter = debug_data->debugUtilsCmdBufLabels.find(reinterpret_cast<VkCommandBuffer>(src_object));
+ if (label_iter != debug_data->debugUtilsCmdBufLabels.end()) {
cmd_buf_labels = new VkDebugUtilsLabelEXT[label_iter->second.size()];
if (nullptr != cmd_buf_labels) {
// Record the labels, but record them in reverse order since we want the
@@ -398,12 +398,12 @@
}
// Look for any debug utils or marker names to use for this object
object_name_info.pObjectName = NULL;
- auto utils_name_iter = debug_data->debugUtilsObjectNameMap->find(src_object);
- if (utils_name_iter != debug_data->debugUtilsObjectNameMap->end()) {
+ auto utils_name_iter = debug_data->debugUtilsObjectNameMap.find(src_object);
+ if (utils_name_iter != debug_data->debugUtilsObjectNameMap.end()) {
object_name_info.pObjectName = utils_name_iter->second.c_str();
} else {
- auto marker_name_iter = debug_data->debugObjectNameMap->find(src_object);
- if (marker_name_iter != debug_data->debugObjectNameMap->end()) {
+ auto marker_name_iter = debug_data->debugObjectNameMap.find(src_object);
+ if (marker_name_iter != debug_data->debugObjectNameMap.end()) {
object_name_info.pObjectName = marker_name_iter->second.c_str();
}
}
@@ -504,8 +504,8 @@
while (layer_dbg_node) {
if (layer_dbg_node->is_messenger && (layer_dbg_node->messenger.messageSeverity & message_severity) &&
(layer_dbg_node->messenger.messageType & message_type)) {
- auto it = debug_data->debugUtilsObjectNameMap->find(object_name_info.objectHandle);
- if (it != debug_data->debugUtilsObjectNameMap->end()) {
+ auto it = debug_data->debugUtilsObjectNameMap.find(object_name_info.objectHandle);
+ if (it != debug_data->debugUtilsObjectNameMap.end()) {
object_name_info.pObjectName = it->second.c_str();
}
if (layer_dbg_node->messenger.pfnUserCallback(message_severity, message_type, callback_data,
@@ -513,9 +513,9 @@
bail = true;
}
} else if (!layer_dbg_node->is_messenger && layer_dbg_node->report.msgFlags & object_flags) {
- auto it = debug_data->debugObjectNameMap->find(callback_data->pObjects[0].objectHandle);
+ auto it = debug_data->debugObjectNameMap.find(callback_data->pObjects[0].objectHandle);
VkDebugReportObjectTypeEXT object_type = convertCoreObjectToDebugReportObject(callback_data->pObjects[0].objectType);
- if (it == debug_data->debugObjectNameMap->end()) {
+ if (it == debug_data->debugObjectNameMap.end()) {
if (layer_dbg_node->report.pfnMsgCallback(object_flags, object_type, callback_data->pObjects[0].objectHandle, 0,
callback_data->messageIdNumber, callback_data->pMessageIdName,
callback_data->pMessage, layer_dbg_node->pUserData)) {
@@ -543,24 +543,14 @@
VkLayerInstanceDispatchTable *table, VkInstance inst, uint32_t extension_count,
const char *const *enabled_extensions) // layer or extension name to be enabled
{
- debug_report_data *debug_data = (debug_report_data *)malloc(sizeof(debug_report_data));
- if (!debug_data) return NULL;
-
- memset(debug_data, 0, sizeof(debug_report_data));
+ debug_report_data *debug_data = new debug_report_data;
for (uint32_t i = 0; i < extension_count; i++) {
- // TODO: Check other property fields
if (strcmp(enabled_extensions[i], VK_EXT_DEBUG_REPORT_EXTENSION_NAME) == 0) {
debug_data->g_DEBUG_REPORT = true;
} else if (strcmp(enabled_extensions[i], VK_EXT_DEBUG_UTILS_EXTENSION_NAME) == 0) {
debug_data->g_DEBUG_UTILS = true;
}
}
- debug_data->debugObjectNameMap = new std::unordered_map<uint64_t, std::string>;
- debug_data->debugUtilsObjectNameMap = new std::unordered_map<uint64_t, std::string>;
- debug_data->debugUtilsQueueLabels = new std::unordered_map<VkQueue, std::vector<LoggingLabelData>>;
- debug_data->debugUtilsCmdBufLabels = new std::unordered_map<VkCommandBuffer, std::vector<LoggingLabelData>>;
- debug_data->queueLabelHasInsert = false;
- debug_data->cmdBufLabelHasInsert = false;
return debug_data;
}
@@ -568,11 +558,7 @@
if (debug_data) {
RemoveAllMessageCallbacks(debug_data, &debug_data->default_debug_callback_list);
RemoveAllMessageCallbacks(debug_data, &debug_data->debug_callback_list);
- delete debug_data->debugObjectNameMap;
- delete debug_data->debugUtilsObjectNameMap;
- delete debug_data->debugUtilsQueueLabels;
- delete debug_data->debugUtilsCmdBufLabels;
- free(debug_data);
+ delete (debug_data);
}
}
@@ -928,6 +914,7 @@
#endif
static inline bool log_msg(const debug_report_data *debug_data, VkFlags msg_flags, VkDebugReportObjectTypeEXT object_type,
uint64_t src_object, std::string vuid_text, const char *format, ...) {
+ if (!debug_data) return false;
VkFlags local_severity = 0;
VkFlags local_type = 0;
DebugReportFlagsToAnnotFlags(msg_flags, true, &local_severity, &local_type);
@@ -1107,11 +1094,11 @@
static inline void BeginQueueDebugUtilsLabel(debug_report_data *report_data, VkQueue queue,
const VkDebugUtilsLabelEXT *label_info) {
if (nullptr != label_info && nullptr != label_info->pLabelName) {
- auto label_iter = report_data->debugUtilsQueueLabels->find(queue);
- if (label_iter == report_data->debugUtilsQueueLabels->end()) {
+ auto label_iter = report_data->debugUtilsQueueLabels.find(queue);
+ if (label_iter == report_data->debugUtilsQueueLabels.end()) {
std::vector<LoggingLabelData> new_queue_labels;
InsertLabelIntoLog(label_info, new_queue_labels);
- report_data->debugUtilsQueueLabels->insert({queue, new_queue_labels});
+ report_data->debugUtilsQueueLabels.insert({queue, new_queue_labels});
} else {
// If the last thing was a label insert, we need to pop it off of the label vector before any
// changes. This is because a label added with "vkQueueInsertDebugUtilsLabelEXT" is only a
@@ -1127,8 +1114,8 @@
}
static inline void EndQueueDebugUtilsLabel(debug_report_data *report_data, VkQueue queue) {
- auto label_iter = report_data->debugUtilsQueueLabels->find(queue);
- if (label_iter != report_data->debugUtilsQueueLabels->end()) {
+ auto label_iter = report_data->debugUtilsQueueLabels.find(queue);
+ if (label_iter != report_data->debugUtilsQueueLabels.end()) {
// If the last thing was a label insert, we need to pop it off of the label vector before any
// changes. This is because a label added with "vkQueueInsertDebugUtilsLabelEXT" is only a
// temporary location that exists until the next operation occurs. In this case, a
@@ -1145,11 +1132,11 @@
static inline void InsertQueueDebugUtilsLabel(debug_report_data *report_data, VkQueue queue,
const VkDebugUtilsLabelEXT *label_info) {
if (nullptr != label_info && nullptr != label_info->pLabelName) {
- auto label_iter = report_data->debugUtilsQueueLabels->find(queue);
- if (label_iter == report_data->debugUtilsQueueLabels->end()) {
+ auto label_iter = report_data->debugUtilsQueueLabels.find(queue);
+ if (label_iter == report_data->debugUtilsQueueLabels.end()) {
std::vector<LoggingLabelData> new_queue_labels;
InsertLabelIntoLog(label_info, new_queue_labels);
- report_data->debugUtilsQueueLabels->insert({queue, new_queue_labels});
+ report_data->debugUtilsQueueLabels.insert({queue, new_queue_labels});
} else {
// If the last thing was a label insert, we need to pop it off of the label vector before any
// changes. This is because a label added with "vkQueueInsertDebugUtilsLabelEXT" is only a
@@ -1169,11 +1156,11 @@
static inline void BeginCmdDebugUtilsLabel(debug_report_data *report_data, VkCommandBuffer command_buffer,
const VkDebugUtilsLabelEXT *label_info) {
if (nullptr != label_info && nullptr != label_info->pLabelName) {
- auto label_iter = report_data->debugUtilsCmdBufLabels->find(command_buffer);
- if (label_iter == report_data->debugUtilsCmdBufLabels->end()) {
+ auto label_iter = report_data->debugUtilsCmdBufLabels.find(command_buffer);
+ if (label_iter == report_data->debugUtilsCmdBufLabels.end()) {
std::vector<LoggingLabelData> new_cmdbuf_labels;
InsertLabelIntoLog(label_info, new_cmdbuf_labels);
- report_data->debugUtilsCmdBufLabels->insert({command_buffer, new_cmdbuf_labels});
+ report_data->debugUtilsCmdBufLabels.insert({command_buffer, new_cmdbuf_labels});
} else {
// If the last thing was a label insert, we need to pop it off of the label vector before any
// changes. This is because a label added with "vkCmdInsertDebugUtilsLabelEXT" is only a
@@ -1189,8 +1176,8 @@
}
static inline void EndCmdDebugUtilsLabel(debug_report_data *report_data, VkCommandBuffer command_buffer) {
- auto label_iter = report_data->debugUtilsCmdBufLabels->find(command_buffer);
- if (label_iter != report_data->debugUtilsCmdBufLabels->end()) {
+ auto label_iter = report_data->debugUtilsCmdBufLabels.find(command_buffer);
+ if (label_iter != report_data->debugUtilsCmdBufLabels.end()) {
// If the last thing was a label insert, we need to pop it off of the label vector before any
// changes. This is because a label added with "vkCmdInsertDebugUtilsLabelEXT" is only a
// temporary location that exists until the next operation occurs. In this case, a
@@ -1210,11 +1197,11 @@
static inline void InsertCmdDebugUtilsLabel(debug_report_data *report_data, VkCommandBuffer command_buffer,
const VkDebugUtilsLabelEXT *label_info) {
if (nullptr != label_info && nullptr != label_info->pLabelName) {
- auto label_iter = report_data->debugUtilsCmdBufLabels->find(command_buffer);
- if (label_iter == report_data->debugUtilsCmdBufLabels->end()) {
+ auto label_iter = report_data->debugUtilsCmdBufLabels.find(command_buffer);
+ if (label_iter == report_data->debugUtilsCmdBufLabels.end()) {
std::vector<LoggingLabelData> new_cmdbuf_labels;
InsertLabelIntoLog(label_info, new_cmdbuf_labels);
- report_data->debugUtilsCmdBufLabels->insert({command_buffer, new_cmdbuf_labels});
+ report_data->debugUtilsCmdBufLabels.insert({command_buffer, new_cmdbuf_labels});
} else {
// If the last thing was a label insert, we need to pop it off of the label vector before any
// changes. This is because a label added with "vkCmdInsertDebugUtilsLabelEXT" is only a