layers: Move layer debug action initialization into layer_utils
Also removed dead code from the layer generation script.
Change-Id: I64fdcaaf1aed8152de62079568c8e247333d8c61
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp
index c0a4dfd..cf0d5ee 100644
--- a/layers/core_validation.cpp
+++ b/layers/core_validation.cpp
@@ -4528,38 +4528,8 @@
}
static void init_core_validation(layer_data *my_data, const VkAllocationCallbacks *pAllocator) {
- uint32_t report_flags = 0;
- uint32_t debug_action = 0;
- FILE *log_output = NULL;
- const char *option_str;
- VkDebugReportCallbackEXT callback;
- // initialize draw_state options
- report_flags = getLayerOptionFlags("lunarg_core_validation.report_flags", 0);
- getLayerOptionEnum("lunarg_core_validation.debug_action", (uint32_t *)&debug_action);
- if (debug_action & VK_DBG_LAYER_ACTION_LOG_MSG) {
- option_str = getLayerOption("lunarg_core_validation.log_filename");
- log_output = getLayerLogOutput(option_str, "lunarg_core_validation");
- VkDebugReportCallbackCreateInfoEXT dbgInfo;
- memset(&dbgInfo, 0, sizeof(dbgInfo));
- dbgInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
- dbgInfo.pfnCallback = log_callback;
- dbgInfo.pUserData = log_output;
- dbgInfo.flags = report_flags;
- layer_create_msg_callback(my_data->report_data, &dbgInfo, pAllocator, &callback);
- my_data->logging_callback.push_back(callback);
- }
-
- if (debug_action & VK_DBG_LAYER_ACTION_DEBUG_OUTPUT) {
- VkDebugReportCallbackCreateInfoEXT dbgInfo;
- memset(&dbgInfo, 0, sizeof(dbgInfo));
- dbgInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
- dbgInfo.pfnCallback = win32_debug_output_msg;
- dbgInfo.pUserData = log_output;
- dbgInfo.flags = report_flags;
- layer_create_msg_callback(my_data->report_data, &dbgInfo, pAllocator, &callback);
- my_data->logging_callback.push_back(callback);
- }
+ layer_debug_actions(my_data->report_data, my_data->logging_callback, pAllocator, "lunarg_core_validation");
if (!globalLockInitialized) {
loader_platform_thread_create_mutex(&globalLock);
diff --git a/layers/device_limits.cpp b/layers/device_limits.cpp
index 75422bc..cda1ae7 100644
--- a/layers/device_limits.cpp
+++ b/layers/device_limits.cpp
@@ -84,38 +84,8 @@
template layer_data *get_my_data_ptr<layer_data>(void *data_key, std::unordered_map<void *, layer_data *> &data_map);
static void init_device_limits(layer_data *my_data, const VkAllocationCallbacks *pAllocator) {
- uint32_t report_flags = 0;
- uint32_t debug_action = 0;
- FILE *log_output = NULL;
- const char *option_str;
- VkDebugReportCallbackEXT callback;
- // initialize device_limits options
- report_flags = getLayerOptionFlags("lunarg_device_limits.report_flags", 0);
- getLayerOptionEnum("lunarg_device_limits.debug_action", (uint32_t *)&debug_action);
- if (debug_action & VK_DBG_LAYER_ACTION_LOG_MSG) {
- option_str = getLayerOption("lunarg_device_limits.log_filename");
- log_output = getLayerLogOutput(option_str, "lunarg_device_limits");
- VkDebugReportCallbackCreateInfoEXT dbgCreateInfo;
- memset(&dbgCreateInfo, 0, sizeof(dbgCreateInfo));
- dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
- dbgCreateInfo.flags = report_flags;
- dbgCreateInfo.pfnCallback = log_callback;
- dbgCreateInfo.pUserData = (void *)log_output;
- layer_create_msg_callback(my_data->report_data, &dbgCreateInfo, pAllocator, &callback);
- my_data->logging_callback.push_back(callback);
- }
-
- if (debug_action & VK_DBG_LAYER_ACTION_DEBUG_OUTPUT) {
- VkDebugReportCallbackCreateInfoEXT dbgCreateInfo;
- memset(&dbgCreateInfo, 0, sizeof(dbgCreateInfo));
- dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
- dbgCreateInfo.flags = report_flags;
- dbgCreateInfo.pfnCallback = win32_debug_output_msg;
- dbgCreateInfo.pUserData = NULL;
- layer_create_msg_callback(my_data->report_data, &dbgCreateInfo, pAllocator, &callback);
- my_data->logging_callback.push_back(callback);
- }
+ layer_debug_actions(my_data->report_data, my_data->logging_callback, pAllocator, "lunarg_device_limits");
if (!globalLockInitialized) {
// TODO/TBD: Need to delete this mutex sometime. How??? One
diff --git a/layers/image.cpp b/layers/image.cpp
index ca7f223..9d7f6cd 100644
--- a/layers/image.cpp
+++ b/layers/image.cpp
@@ -70,35 +70,9 @@
static unordered_map<void *, layer_data *> layer_data_map;
-static void InitImage(layer_data *data, const VkAllocationCallbacks *pAllocator) {
- VkDebugReportCallbackEXT callback;
- uint32_t report_flags = getLayerOptionFlags("lunarg_image.report_flags", 0);
+static void init_image(layer_data *my_data, const VkAllocationCallbacks *pAllocator) {
- uint32_t debug_action = 0;
- getLayerOptionEnum("lunarg_image.debug_action", (uint32_t *)&debug_action);
- if (debug_action & VK_DBG_LAYER_ACTION_LOG_MSG) {
- FILE *log_output = NULL;
- const char *option_str = getLayerOption("lunarg_image.log_filename");
- log_output = getLayerLogOutput(option_str, "lunarg_image");
- VkDebugReportCallbackCreateInfoEXT dbgInfo;
- memset(&dbgInfo, 0, sizeof(dbgInfo));
- dbgInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
- dbgInfo.pfnCallback = log_callback;
- dbgInfo.pUserData = log_output;
- dbgInfo.flags = report_flags;
- layer_create_msg_callback(data->report_data, &dbgInfo, pAllocator, &callback);
- data->logging_callback.push_back(callback);
- }
-
- if (debug_action & VK_DBG_LAYER_ACTION_DEBUG_OUTPUT) {
- VkDebugReportCallbackCreateInfoEXT dbgInfo;
- memset(&dbgInfo, 0, sizeof(dbgInfo));
- dbgInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
- dbgInfo.pfnCallback = win32_debug_output_msg;
- dbgInfo.flags = report_flags;
- layer_create_msg_callback(data->report_data, &dbgInfo, pAllocator, &callback);
- data->logging_callback.push_back(callback);
- }
+ layer_debug_actions(my_data->report_data, my_data->logging_callback, pAllocator, "lunarg_image");
}
VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
@@ -153,7 +127,7 @@
my_data->report_data = debug_report_create_instance(my_data->instance_dispatch_table, *pInstance,
pCreateInfo->enabledExtensionCount, pCreateInfo->ppEnabledExtensionNames);
- InitImage(my_data, pAllocator);
+ init_image(my_data, pAllocator);
return result;
}
diff --git a/layers/object_tracker.h b/layers/object_tracker.h
index 2c4b9e7..664bf61 100644
--- a/layers/object_tracker.h
+++ b/layers/object_tracker.h
@@ -31,6 +31,7 @@
#include "vk_layer_extension_utils.h"
#include "vk_enum_string_helper.h"
#include "vk_layer_table.h"
+#include "vk_layer_utils.h"
// Object Tracker ERROR codes
typedef enum _OBJECT_TRACK_ERROR {
@@ -77,11 +78,11 @@
struct layer_data {
debug_report_data *report_data;
// TODO: put instance data here
- VkDebugReportCallbackEXT logging_callback;
+ std::vector<VkDebugReportCallbackEXT> logging_callback;
bool wsi_enabled;
bool objtrack_extensions_enabled;
- layer_data() : report_data(nullptr), logging_callback(VK_NULL_HANDLE), wsi_enabled(false), objtrack_extensions_enabled(false){};
+ layer_data() : report_data(nullptr), wsi_enabled(false), objtrack_extensions_enabled(false){};
};
struct instExts {
@@ -325,26 +326,10 @@
#endif
#include "vk_dispatch_table_helper.h"
-static void initObjectTracker(layer_data *my_data, const VkAllocationCallbacks *pAllocator) {
- uint32_t report_flags = 0;
- uint32_t debug_action = 0;
- FILE *log_output = NULL;
- const char *option_str;
- // initialize object_tracker options
- report_flags = getLayerOptionFlags("lunarg_object_tracker.report_flags", 0);
- getLayerOptionEnum("lunarg_object_tracker.debug_action", (uint32_t *)&debug_action);
- if (debug_action & VK_DBG_LAYER_ACTION_LOG_MSG) {
- option_str = getLayerOption("lunarg_object_tracker.log_filename");
- log_output = getLayerLogOutput(option_str, "lunarg_object_tracker");
- VkDebugReportCallbackCreateInfoEXT dbgInfo;
- memset(&dbgInfo, 0, sizeof(dbgInfo));
- dbgInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
- dbgInfo.pfnCallback = log_callback;
- dbgInfo.pUserData = log_output;
- dbgInfo.flags = report_flags;
- layer_create_msg_callback(my_data->report_data, &dbgInfo, pAllocator, &my_data->logging_callback);
- }
+static void init_object_tracker(layer_data *my_data, const VkAllocationCallbacks *pAllocator) {
+
+ layer_debug_actions(my_data->report_data, my_data->logging_callback, pAllocator, "lunarg_object_tracker");
if (!objLockInitialized) {
// TODO/TBD: Need to delete this mutex sometime. How??? One
@@ -651,7 +636,7 @@
my_data->report_data = debug_report_create_instance(pInstanceTable, *pInstance, pCreateInfo->enabledExtensionCount,
pCreateInfo->ppEnabledExtensionNames);
- initObjectTracker(my_data, pAllocator);
+ init_object_tracker(my_data, pAllocator);
createInstanceRegisterExtensions(pCreateInfo, *pInstance);
create_instance(*pInstance, *pInstance, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT);
diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp
index dd4d572..77c266f 100644
--- a/layers/param_checker.cpp
+++ b/layers/param_checker.cpp
@@ -92,38 +92,9 @@
return data->report_data;
}
-static void InitParamChecker(layer_data *data, const VkAllocationCallbacks *pAllocator) {
- VkDebugReportCallbackEXT callback;
- uint32_t report_flags = getLayerOptionFlags("lunarg_param_checker.report_flags", 0);
+static void init_param_checker(layer_data *my_data, const VkAllocationCallbacks *pAllocator) {
- uint32_t debug_action = 0;
- getLayerOptionEnum("lunarg_param_checker.debug_action", (uint32_t *)&debug_action);
- if (debug_action & VK_DBG_LAYER_ACTION_LOG_MSG) {
- FILE *log_output = NULL;
- const char *option_str = getLayerOption("lunarg_param_checker.log_filename");
- log_output = getLayerLogOutput(option_str, "lunarg_param_checker");
- VkDebugReportCallbackCreateInfoEXT dbgCreateInfo;
- memset(&dbgCreateInfo, 0, sizeof(dbgCreateInfo));
- dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
- dbgCreateInfo.flags = report_flags;
- dbgCreateInfo.pfnCallback = log_callback;
- dbgCreateInfo.pUserData = log_output;
-
- layer_create_msg_callback(data->report_data, &dbgCreateInfo, pAllocator, &callback);
- data->logging_callback.push_back(callback);
- }
-
- if (debug_action & VK_DBG_LAYER_ACTION_DEBUG_OUTPUT) {
- VkDebugReportCallbackCreateInfoEXT dbgCreateInfo;
- memset(&dbgCreateInfo, 0, sizeof(dbgCreateInfo));
- dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
- dbgCreateInfo.flags = report_flags;
- dbgCreateInfo.pfnCallback = win32_debug_output_msg;
- dbgCreateInfo.pUserData = NULL;
-
- layer_create_msg_callback(data->report_data, &dbgCreateInfo, pAllocator, &callback);
- data->logging_callback.push_back(callback);
- }
+ layer_debug_actions(my_data->report_data, my_data->logging_callback, pAllocator, "lunarg_param_checker");
}
VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
@@ -1380,7 +1351,7 @@
my_data->report_data =
debug_report_create_instance(pTable, *pInstance, pCreateInfo->enabledExtensionCount, pCreateInfo->ppEnabledExtensionNames);
- InitParamChecker(my_data, pAllocator);
+ init_param_checker(my_data, pAllocator);
// Ordinarily we'd check these before calling down the chain, but none of the layer
// support is in place until now, if we survive we can report the issue now.
diff --git a/layers/swapchain.cpp b/layers/swapchain.cpp
index 41622b4..c2fb1b4 100644
--- a/layers/swapchain.cpp
+++ b/layers/swapchain.cpp
@@ -33,6 +33,7 @@
#include "swapchain.h"
#include "vk_layer_extension_utils.h"
#include "vk_enum_string_helper.h"
+#include "vk_layer_utils.h"
static int globalLockInitialized = 0;
static loader_platform_thread_mutex globalLock;
@@ -230,40 +231,10 @@
}
#include "vk_dispatch_table_helper.h"
-static void initSwapchain(layer_data *my_data, const VkAllocationCallbacks *pAllocator) {
- uint32_t report_flags = 0;
- uint32_t debug_action = 0;
- FILE *log_output = NULL;
- const char *option_str;
- VkDebugReportCallbackEXT callback;
+static void init_swapchain(layer_data *my_data, const VkAllocationCallbacks *pAllocator) {
- // Initialize swapchain options:
- report_flags = getLayerOptionFlags("lunarg_swapchain.report_flags", 0);
- getLayerOptionEnum("lunarg_swapchain.debug_action", (uint32_t *)&debug_action);
+ layer_debug_actions(my_data->report_data, my_data->logging_callback, pAllocator, "lunarg_swapchain");
- if (debug_action & VK_DBG_LAYER_ACTION_LOG_MSG) {
- // Turn on logging, since it was requested:
- option_str = getLayerOption("lunarg_swapchain.log_filename");
- log_output = getLayerLogOutput(option_str, "lunarg_swapchain");
- VkDebugReportCallbackCreateInfoEXT dbgInfo;
- memset(&dbgInfo, 0, sizeof(dbgInfo));
- dbgInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
- dbgInfo.pfnCallback = log_callback;
- dbgInfo.pUserData = log_output;
- dbgInfo.flags = report_flags;
- layer_create_msg_callback(my_data->report_data, &dbgInfo, pAllocator, &callback);
- my_data->logging_callback.push_back(callback);
- }
- if (debug_action & VK_DBG_LAYER_ACTION_DEBUG_OUTPUT) {
- VkDebugReportCallbackCreateInfoEXT dbgInfo;
- memset(&dbgInfo, 0, sizeof(dbgInfo));
- dbgInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
- dbgInfo.pfnCallback = win32_debug_output_msg;
- dbgInfo.pUserData = log_output;
- dbgInfo.flags = report_flags;
- layer_create_msg_callback(my_data->report_data, &dbgInfo, pAllocator, &callback);
- my_data->logging_callback.push_back(callback);
- }
if (!globalLockInitialized) {
loader_platform_thread_create_mutex(&globalLock);
globalLockInitialized = 1;
@@ -318,7 +289,7 @@
// Call the following function after my_data is initialized:
createInstanceRegisterExtensions(pCreateInfo, *pInstance);
- initSwapchain(my_data, pAllocator);
+ init_swapchain(my_data, pAllocator);
return result;
}
diff --git a/layers/threading.cpp b/layers/threading.cpp
index f715014..e7c4b39 100644
--- a/layers/threading.cpp
+++ b/layers/threading.cpp
@@ -38,47 +38,16 @@
#include "vk_layer_table.h"
#include "vk_layer_logging.h"
#include "threading.h"
-
#include "vk_dispatch_table_helper.h"
#include "vk_struct_string_helper_cpp.h"
#include "vk_layer_data.h"
+#include "vk_layer_utils.h"
#include "thread_check.h"
static void initThreading(layer_data *my_data, const VkAllocationCallbacks *pAllocator) {
- uint32_t report_flags = 0;
- uint32_t debug_action = 0;
- FILE *log_output = NULL;
- const char *strOpt;
- VkDebugReportCallbackEXT callback;
- // initialize threading options
- report_flags = getLayerOptionFlags("google_threading.report_flags", 0);
- getLayerOptionEnum("google_threading.debug_action", (uint32_t *)&debug_action);
-
- if (debug_action & VK_DBG_LAYER_ACTION_LOG_MSG) {
- strOpt = getLayerOption("google_threading.log_filename");
- log_output = getLayerLogOutput(strOpt, "google_threading");
- VkDebugReportCallbackCreateInfoEXT dbgCreateInfo;
- memset(&dbgCreateInfo, 0, sizeof(dbgCreateInfo));
- dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
- dbgCreateInfo.flags = report_flags;
- dbgCreateInfo.pfnCallback = log_callback;
- dbgCreateInfo.pUserData = (void *)log_output;
- layer_create_msg_callback(my_data->report_data, &dbgCreateInfo, pAllocator, &callback);
- my_data->logging_callback.push_back(callback);
- }
-
- if (debug_action & VK_DBG_LAYER_ACTION_DEBUG_OUTPUT) {
- VkDebugReportCallbackCreateInfoEXT dbgCreateInfo;
- memset(&dbgCreateInfo, 0, sizeof(dbgCreateInfo));
- dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
- dbgCreateInfo.flags = report_flags;
- dbgCreateInfo.pfnCallback = win32_debug_output_msg;
- dbgCreateInfo.pUserData = NULL;
- layer_create_msg_callback(my_data->report_data, &dbgCreateInfo, pAllocator, &callback);
- my_data->logging_callback.push_back(callback);
- }
+ layer_debug_actions(my_data->report_data, my_data->logging_callback, pAllocator, "google_threading");
if (!threadingLockInitialized) {
loader_platform_thread_create_mutex(&threadingLock);
diff --git a/layers/vk_layer_utils.cpp b/layers/vk_layer_utils.cpp
index 9fea389..43ddc8d 100644
--- a/layers/vk_layer_utils.cpp
+++ b/layers/vk_layer_utils.cpp
@@ -27,7 +27,9 @@
#include <string.h>
#include <string>
+#include <vector>
#include "vulkan/vulkan.h"
+#include "vk_layer_config.h"
#include "vk_layer_utils.h"
typedef struct _VULKAN_FORMAT_INFO {
@@ -608,3 +610,46 @@
}
return result;
}
+
+void layer_debug_actions(debug_report_data *report_data, std::vector<VkDebugReportCallbackEXT> logging_callback,
+ const VkAllocationCallbacks *pAllocator, const char *layer_identifier) {
+
+ uint32_t report_flags = 0;
+ uint32_t debug_action = 0;
+ FILE *log_output = NULL;
+ const char *option_str;
+ VkDebugReportCallbackEXT callback;
+
+ std::string option_flags = layer_identifier;
+ std::string log_filename = layer_identifier;
+ option_flags.append(".report_flags");
+ log_filename.append(".log_filename");
+
+ // initialize layer options
+ report_flags = getLayerOptionFlags(option_flags.c_str(), 0);
+ getLayerOptionEnum(log_filename.c_str(), (uint32_t *)&debug_action);
+
+ if (debug_action & VK_DBG_LAYER_ACTION_LOG_MSG) {
+ option_str = getLayerOption(log_filename.c_str());
+ log_output = getLayerLogOutput(option_str, layer_identifier);
+ VkDebugReportCallbackCreateInfoEXT dbgCreateInfo;
+ memset(&dbgCreateInfo, 0, sizeof(dbgCreateInfo));
+ dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
+ dbgCreateInfo.flags = report_flags;
+ dbgCreateInfo.pfnCallback = log_callback;
+ dbgCreateInfo.pUserData = (void *)log_output;
+ layer_create_msg_callback(report_data, &dbgCreateInfo, pAllocator, &callback);
+ logging_callback.push_back(callback);
+ }
+
+ if (debug_action & VK_DBG_LAYER_ACTION_DEBUG_OUTPUT) {
+ VkDebugReportCallbackCreateInfoEXT dbgCreateInfo;
+ memset(&dbgCreateInfo, 0, sizeof(dbgCreateInfo));
+ dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
+ dbgCreateInfo.flags = report_flags;
+ dbgCreateInfo.pfnCallback = win32_debug_output_msg;
+ dbgCreateInfo.pUserData = NULL;
+ layer_create_msg_callback(report_data, &dbgCreateInfo, pAllocator, &callback);
+ logging_callback.push_back(callback);
+ }
+}
diff --git a/layers/vk_layer_utils.h b/layers/vk_layer_utils.h
index 1b69e9c..464c248 100644
--- a/layers/vk_layer_utils.h
+++ b/layers/vk_layer_utils.h
@@ -27,6 +27,9 @@
#pragma once
#include <stdbool.h>
+#include <vector>
+#include "vk_layer_logging.h"
+
#ifndef WIN32
#include <strings.h> /* for ffs() */
#else
@@ -93,6 +96,9 @@
} VkStringErrorFlagBits;
typedef VkFlags VkStringErrorFlags;
+void layer_debug_actions(debug_report_data* report_data, std::vector<VkDebugReportCallbackEXT> logging_callback,
+ const VkAllocationCallbacks *pAllocator, const char* layer_identifier);
+
static inline bool vk_format_is_undef(VkFormat format) { return (format == VK_FORMAT_UNDEFINED); }
bool vk_format_is_depth_or_stencil(VkFormat format);