From bf917f9d7132bb025277f14a9ddd18c52ddfe09c Mon Sep 17 00:00:00 2001 From: Courtney Goeltzenleuchter Date: Mon, 5 Oct 2015 15:58:38 -0600 Subject: layers: Add DEBUG_OUTPUT support to draw_state --- layers/draw_state.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'layers/draw_state.cpp') diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp index 01ed2d5a..398393d4 100644 --- a/layers/draw_state.cpp +++ b/layers/draw_state.cpp @@ -56,7 +56,7 @@ struct devExts { struct layer_data { debug_report_data *report_data; // TODO: put instance data here - VkDbgMsgCallback logging_callback; + std::vector 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() @@ -1310,6 +1309,7 @@ static void init_draw_state(layer_data *my_data) uint32_t debug_action = 0; FILE *log_output = NULL; const char *option_str; + VkDbgMsgCallback callback; // initialize DrawState options report_flags = getLayerOptionFlags("DrawStateReportFlags", 0); getLayerOptionEnum("DrawStateDebugAction", (uint32_t *) &debug_action); @@ -1318,7 +1318,13 @@ static void init_draw_state(layer_data *my_data) { option_str = getLayerOption("DrawStateLogFilename"); log_output = getLayerLogOutput(option_str, "DrawState"); - 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) @@ -1357,8 +1363,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); -- cgit v1.2.3