aboutsummaryrefslogtreecommitdiff
path: root/layers/device_limits.cpp
diff options
context:
space:
mode:
authorCourtney Goeltzenleuchter <courtney@LunarG.com>2015-10-05 14:51:41 -0600
committerCourtney Goeltzenleuchter <courtney@LunarG.com>2015-10-08 16:55:51 -0600
commit05eba3eb9b6c6ab1c5a8939b99d2f57f263a10eb (patch)
tree35daa3b8ff1f82976c9057379d1f2b789f120bf5 /layers/device_limits.cpp
parent3e077bf28ce67da08250a9a061ad14b38fbf47ec (diff)
downloadusermoji-05eba3eb9b6c6ab1c5a8939b99d2f57f263a10eb.tar.xz
layers: Add DEBUG_OUTPUT support to device_limits
Diffstat (limited to 'layers/device_limits.cpp')
-rw-r--r--layers/device_limits.cpp18
1 files changed, 13 insertions, 5 deletions
diff --git a/layers/device_limits.cpp b/layers/device_limits.cpp
index 12ec4835..3843f378 100644
--- a/layers/device_limits.cpp
+++ b/layers/device_limits.cpp
@@ -58,7 +58,7 @@ struct devExts {
// This struct will be stored in a map hashed by the dispatchable object
struct layer_data {
debug_report_data *report_data;
- VkDbgMsgCallback logging_callback;
+ std::vector<VkDbgMsgCallback> logging_callback;
VkLayerDispatchTable* device_dispatch_table;
VkLayerInstanceDispatchTable* instance_dispatch_table;
devExts device_extensions;
@@ -75,7 +75,6 @@ struct layer_data {
layer_data() :
report_data(nullptr),
- logging_callback(nullptr),
device_dispatch_table(nullptr),
instance_dispatch_table(nullptr),
device_extensions(),
@@ -106,6 +105,7 @@ static void init_device_limits(layer_data *my_data)
uint32_t debug_action = 0;
FILE *log_output = NULL;
const char *option_str;
+ VkDbgMsgCallback callback;
// initialize DeviceLimits options
report_flags = getLayerOptionFlags("DeviceLimitsReportFlags", 0);
getLayerOptionEnum("DeviceLimitsDebugAction", (uint32_t *) &debug_action);
@@ -114,7 +114,13 @@ static void init_device_limits(layer_data *my_data)
{
option_str = getLayerOption("DeviceLimitsLogFilename");
log_output = getLayerLogOutput(option_str, "DeviceLimits");
- layer_create_msg_callback(my_data->report_data, report_flags, log_callback, (void *) log_output, &my_data->logging_callback);
+ layer_create_msg_callback(my_data->report_data, report_flags, log_callback, (void *) log_output, &callback);
+ my_data->logging_callback.push_back(callback);
+ }
+
+ if (debug_action & VK_DBG_LAYER_ACTION_DEBUG_OUTPUT) {
+ layer_create_msg_callback(my_data->report_data, report_flags, win32_debug_output_msg, NULL, &callback);
+ my_data->logging_callback.push_back(callback);
}
if (!globalLockInitialized)
@@ -183,8 +189,10 @@ VK_LAYER_EXPORT void VKAPI vkDestroyInstance(VkInstance instance)
pTable->DestroyInstance(instance);
// Clean up logging callback, if any
- if (my_data->logging_callback) {
- layer_destroy_msg_callback(my_data->report_data, my_data->logging_callback);
+ while (my_data->logging_callback.size() > 0) {
+ VkDbgMsgCallback callback = my_data->logging_callback.back();
+ layer_destroy_msg_callback(my_data->report_data, callback);
+ my_data->logging_callback.pop_back();
}
layer_debug_report_destroy_instance(my_data->report_data);