2023-04-21 12:32:40 +02:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
|
* Copyright 2023 Blender Foundation. All rights reserved. */
|
|
|
|
|
|
|
|
|
|
/** \file
|
|
|
|
|
* \ingroup gpu
|
|
|
|
|
*/
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "BKE_global.h"
|
|
|
|
|
#include "BLI_string.h"
|
|
|
|
|
|
|
|
|
|
#include "vk_common.hh"
|
|
|
|
|
|
|
|
|
|
#include <typeindex>
|
|
|
|
|
|
|
|
|
|
namespace blender::gpu {
|
|
|
|
|
class VKContext;
|
2023-05-04 10:06:48 +02:00
|
|
|
class VKDevice;
|
|
|
|
|
|
2023-04-21 12:32:40 +02:00
|
|
|
namespace debug {
|
2023-05-04 10:06:48 +02:00
|
|
|
struct VKDebuggingTools {
|
2023-04-21 12:32:40 +02:00
|
|
|
bool enabled = false;
|
|
|
|
|
/* Function pointer definitions. */
|
|
|
|
|
PFN_vkCreateDebugUtilsMessengerEXT vkCreateDebugUtilsMessengerEXT_r = nullptr;
|
|
|
|
|
PFN_vkDestroyDebugUtilsMessengerEXT vkDestroyDebugUtilsMessengerEXT_r = nullptr;
|
|
|
|
|
PFN_vkSubmitDebugUtilsMessageEXT vkSubmitDebugUtilsMessageEXT_r = nullptr;
|
|
|
|
|
PFN_vkCmdBeginDebugUtilsLabelEXT vkCmdBeginDebugUtilsLabelEXT_r = nullptr;
|
|
|
|
|
PFN_vkCmdEndDebugUtilsLabelEXT vkCmdEndDebugUtilsLabelEXT_r = nullptr;
|
|
|
|
|
PFN_vkCmdInsertDebugUtilsLabelEXT vkCmdInsertDebugUtilsLabelEXT_r = nullptr;
|
|
|
|
|
PFN_vkQueueBeginDebugUtilsLabelEXT vkQueueBeginDebugUtilsLabelEXT_r = nullptr;
|
|
|
|
|
PFN_vkQueueEndDebugUtilsLabelEXT vkQueueEndDebugUtilsLabelEXT_r = nullptr;
|
|
|
|
|
PFN_vkQueueInsertDebugUtilsLabelEXT vkQueueInsertDebugUtilsLabelEXT_r = nullptr;
|
|
|
|
|
PFN_vkSetDebugUtilsObjectNameEXT vkSetDebugUtilsObjectNameEXT_r = nullptr;
|
|
|
|
|
PFN_vkSetDebugUtilsObjectTagEXT vkSetDebugUtilsObjectTagEXT_r = nullptr;
|
|
|
|
|
|
2023-05-04 10:06:48 +02:00
|
|
|
void init(VkInstance vk_instance);
|
|
|
|
|
void deinit();
|
|
|
|
|
};
|
2023-04-21 12:32:40 +02:00
|
|
|
|
2023-05-04 10:06:48 +02:00
|
|
|
void object_label(VkObjectType vk_object_type, uint64_t object_handle, const char *name);
|
|
|
|
|
template<typename T> void object_label(T vk_object_type, const char *name)
|
2023-04-21 12:32:40 +02:00
|
|
|
{
|
|
|
|
|
if (!(G.debug & G_DEBUG_GPU)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
const size_t label_size = 64;
|
|
|
|
|
char label[label_size];
|
|
|
|
|
memset(label, 0, label_size);
|
|
|
|
|
static int stats = 0;
|
|
|
|
|
SNPRINTF(label, "%s_%d", name, stats++);
|
2023-05-04 10:06:48 +02:00
|
|
|
object_label(to_vk_object_type(vk_object_type), (uint64_t)vk_object_type, (const char *)label);
|
2023-04-21 12:32:40 +02:00
|
|
|
};
|
|
|
|
|
|
2023-05-04 10:06:48 +02:00
|
|
|
void push_marker(VkCommandBuffer vk_command_buffer, const char *name);
|
|
|
|
|
void set_marker(VkCommandBuffer vk_command_buffer, const char *name);
|
|
|
|
|
void pop_marker(VkCommandBuffer vk_command_buffer);
|
|
|
|
|
void push_marker(const VKDevice &device, const char *name);
|
|
|
|
|
void set_marker(const VKDevice &device, const char *name);
|
|
|
|
|
void pop_marker(const VKDevice &device);
|
2023-04-21 12:32:40 +02:00
|
|
|
} // namespace debug
|
|
|
|
|
} // namespace blender::gpu
|