aboutsummaryrefslogtreecommitdiff
path: root/layers/shader_checker.cpp
diff options
context:
space:
mode:
authorCourtney Goeltzenleuchter <courtney@LunarG.com>2015-10-05 15:59:58 -0600
committerCourtney Goeltzenleuchter <courtney@LunarG.com>2015-10-08 16:56:24 -0600
commit2a73c0aa3f32a7156ead44b9001302ae1ace7a20 (patch)
tree032bc3f71c753643cac79aa177a6bd3319c12a26 /layers/shader_checker.cpp
parentd2f240d8fbee3e33beeb922252640ccd87482e2e (diff)
downloadusermoji-2a73c0aa3f32a7156ead44b9001302ae1ace7a20.tar.xz
layers: Add DEBUG_OUTPUT support to shader_checker
Diffstat (limited to 'layers/shader_checker.cpp')
-rw-r--r--layers/shader_checker.cpp20
1 files changed, 14 insertions, 6 deletions
diff --git a/layers/shader_checker.cpp b/layers/shader_checker.cpp
index 9cf7c4f2..94c5fd63 100644
--- a/layers/shader_checker.cpp
+++ b/layers/shader_checker.cpp
@@ -49,11 +49,10 @@
struct layer_data {
debug_report_data *report_data;
// TODO: put instance data here
- VkDbgMsgCallback logging_callback;
+ std::vector<VkDbgMsgCallback> logging_callback;
layer_data() :
- report_data(nullptr),
- logging_callback(nullptr)
+ report_data(nullptr)
{};
};
@@ -261,6 +260,7 @@ init_shader_checker(layer_data *my_data)
uint32_t debug_action = 0;
FILE *log_output = NULL;
const char *option_str;
+ VkDbgMsgCallback callback;
// initialize ShaderChecker options
report_flags = getLayerOptionFlags("ShaderCheckerReportFlags", 0);
getLayerOptionEnum("ShaderCheckerDebugAction", (uint32_t *) &debug_action);
@@ -269,7 +269,13 @@ init_shader_checker(layer_data *my_data)
{
option_str = getLayerOption("ShaderCheckerLogFilename");
log_output = getLayerLogOutput(option_str, "ShaderChecker");
- 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)
@@ -1212,8 +1218,10 @@ VK_LAYER_EXPORT void VKAPI vkDestroyInstance(VkInstance instance)
// Clean up logging callback, if any
layer_data *my_data = get_my_data_ptr(key, layer_data_map);
- 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);