aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCourtney Goeltzenleuchter <courtney@LunarG.com>2015-10-08 17:07:25 -0600
committerCourtney Goeltzenleuchter <courtney@LunarG.com>2015-10-08 17:07:25 -0600
commite37e32e23b87151013dfea403c3475390ca89d26 (patch)
treec4da2cfc35a7426999e492cdad039c0ea5f4f0ef
parent2a73c0aa3f32a7156ead44b9001302ae1ace7a20 (diff)
downloadusermoji-e37e32e23b87151013dfea403c3475390ca89d26.tar.xz
layers: Add DEBUG_OUTPUT support to swapchain
-rw-r--r--layers/swapchain.cpp14
-rw-r--r--layers/swapchain.h7
2 files changed, 15 insertions, 6 deletions
diff --git a/layers/swapchain.cpp b/layers/swapchain.cpp
index 3143741b..304f96b4 100644
--- a/layers/swapchain.cpp
+++ b/layers/swapchain.cpp
@@ -130,6 +130,7 @@ static void initSwapchain(layer_data *my_data)
uint32_t debug_action = 0;
FILE *log_output = NULL;
const char *option_str;
+ VkDbgMsgCallback callback;
// Initialize Swapchain options:
report_flags = getLayerOptionFlags("SwapchainReportFlags", 0);
@@ -142,7 +143,12 @@ static void initSwapchain(layer_data *my_data)
log_output = getLayerLogOutput(option_str, "Swapchain");
layer_create_msg_callback(my_data->report_data, report_flags,
log_callback, (void *) log_output,
- &my_data->logging_callback);
+ &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);
}
}
@@ -244,8 +250,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);
layer_data_map.erase(key);
diff --git a/layers/swapchain.h b/layers/swapchain.h
index 80a6ea46..21a2fe60 100644
--- a/layers/swapchain.h
+++ b/layers/swapchain.h
@@ -28,6 +28,8 @@
#ifndef SWAPCHAIN_H
#define SWAPCHAIN_H
+#include <vector>
+
static const VkLayerProperties globalLayerProps[] = {
{
"Swapchain",
@@ -77,11 +79,10 @@ typedef enum _SWAPCHAIN_ERROR
// The following is for logging error messages:
struct layer_data {
debug_report_data *report_data;
- VkDbgMsgCallback logging_callback;
+ std::vector<VkDbgMsgCallback> logging_callback;
layer_data() :
- report_data(nullptr),
- logging_callback(nullptr)
+ report_data(nullptr)
{};
};