From 21b23fcf934d7eb52afaf37456111386d02b0b33 Mon Sep 17 00:00:00 2001 From: AgAmemnno Date: Fri, 5 May 2023 07:04:02 +0900 Subject: [PATCH 1/6] Vulkan: Debugging Tools Add Messenger from the functions of VkDebugUtils. --- source/blender/gpu/vulkan/vk_common.cc | 106 +++++++++ source/blender/gpu/vulkan/vk_common.hh | 1 + source/blender/gpu/vulkan/vk_context.cc | 4 + source/blender/gpu/vulkan/vk_debug.cc | 223 ++++++++++++++++++ source/blender/gpu/vulkan/vk_debug.hh | 58 ++++- .../blender/gpu/vulkan/vk_descriptor_set.cc | 2 +- 6 files changed, 391 insertions(+), 3 deletions(-) diff --git a/source/blender/gpu/vulkan/vk_common.cc b/source/blender/gpu/vulkan/vk_common.cc index ede3abf35da..7a248e28b81 100644 --- a/source/blender/gpu/vulkan/vk_common.cc +++ b/source/blender/gpu/vulkan/vk_common.cc @@ -528,4 +528,110 @@ VkCullModeFlags to_vk_cull_mode_flags(const eGPUFaceCullTest cull_test) return VK_CULL_MODE_NONE; } +const char *to_string(VkObjectType type) +{ +#define __STR_VK_CHECK(s) "" #s + switch (type) { + case VK_OBJECT_TYPE_UNKNOWN: + return __STR_VK_CHECK(VK_OBJECT_TYPE_UNKNOWN); + case VK_OBJECT_TYPE_INSTANCE: + return __STR_VK_CHECK(VK_OBJECT_TYPE_INSTANCE); + case VK_OBJECT_TYPE_PHYSICAL_DEVICE: + return __STR_VK_CHECK(VK_OBJECT_TYPE_PHYSICAL_DEVICE); + case VK_OBJECT_TYPE_DEVICE: + return __STR_VK_CHECK(VK_OBJECT_TYPE_DEVICE); + case VK_OBJECT_TYPE_QUEUE: + return __STR_VK_CHECK(VK_OBJECT_TYPE_QUEUE); + case VK_OBJECT_TYPE_SEMAPHORE: + return __STR_VK_CHECK(VK_OBJECT_TYPE_SEMAPHORE); + case VK_OBJECT_TYPE_COMMAND_BUFFER: + return __STR_VK_CHECK(VK_OBJECT_TYPE_COMMAND_BUFFER); + case VK_OBJECT_TYPE_FENCE: + return __STR_VK_CHECK(VK_OBJECT_TYPE_FENCE); + case VK_OBJECT_TYPE_DEVICE_MEMORY: + return __STR_VK_CHECK(VK_OBJECT_TYPE_DEVICE_MEMORY); + case VK_OBJECT_TYPE_BUFFER: + return __STR_VK_CHECK(VK_OBJECT_TYPE_BUFFER); + case VK_OBJECT_TYPE_IMAGE: + return __STR_VK_CHECK(VK_OBJECT_TYPE_IMAGE); + case VK_OBJECT_TYPE_EVENT: + return __STR_VK_CHECK(VK_OBJECT_TYPE_EVENT); + case VK_OBJECT_TYPE_QUERY_POOL: + return __STR_VK_CHECK(VK_OBJECT_TYPE_QUERY_POOL); + case VK_OBJECT_TYPE_BUFFER_VIEW: + return __STR_VK_CHECK(VK_OBJECT_TYPE_BUFFER_VIEW); + case VK_OBJECT_TYPE_IMAGE_VIEW: + return __STR_VK_CHECK(VK_OBJECT_TYPE_IMAGE_VIEW); + case VK_OBJECT_TYPE_SHADER_MODULE: + return __STR_VK_CHECK(VK_OBJECT_TYPE_SHADER_MODULE); + case VK_OBJECT_TYPE_PIPELINE_CACHE: + return __STR_VK_CHECK(VK_OBJECT_TYPE_PIPELINE_CACHE); + case VK_OBJECT_TYPE_PIPELINE_LAYOUT: + return __STR_VK_CHECK(VK_OBJECT_TYPE_PIPELINE_LAYOUT); + case VK_OBJECT_TYPE_RENDER_PASS: + return __STR_VK_CHECK(VK_OBJECT_TYPE_RENDER_PASS); + case VK_OBJECT_TYPE_PIPELINE: + return __STR_VK_CHECK(VK_OBJECT_TYPE_PIPELINE); + case VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT: + return __STR_VK_CHECK(VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT); + case VK_OBJECT_TYPE_SAMPLER: + return __STR_VK_CHECK(VK_OBJECT_TYPE_SAMPLER); + case VK_OBJECT_TYPE_DESCRIPTOR_POOL: + return __STR_VK_CHECK(VK_OBJECT_TYPE_DESCRIPTOR_POOL); + case VK_OBJECT_TYPE_DESCRIPTOR_SET: + return __STR_VK_CHECK(VK_OBJECT_TYPE_DESCRIPTOR_SET); + case VK_OBJECT_TYPE_FRAMEBUFFER: + return __STR_VK_CHECK(VK_OBJECT_TYPE_FRAMEBUFFER); + case VK_OBJECT_TYPE_COMMAND_POOL: + return __STR_VK_CHECK(VK_OBJECT_TYPE_COMMAND_POOL); + case VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION: + return __STR_VK_CHECK(VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION); + case VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE: + return __STR_VK_CHECK(VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE); + case VK_OBJECT_TYPE_SURFACE_KHR: + return __STR_VK_CHECK(VK_OBJECT_TYPE_SURFACE_KHR); + case VK_OBJECT_TYPE_SWAPCHAIN_KHR: + return __STR_VK_CHECK(VK_OBJECT_TYPE_SWAPCHAIN_KHR); + case VK_OBJECT_TYPE_DISPLAY_KHR: + return __STR_VK_CHECK(VK_OBJECT_TYPE_DISPLAY_KHR); + case VK_OBJECT_TYPE_DISPLAY_MODE_KHR: + return __STR_VK_CHECK(VK_OBJECT_TYPE_DISPLAY_MODE_KHR); + case VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT: + return __STR_VK_CHECK(VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT); +#ifdef VK_ENABLE_BETA_EXTENSIONS + case VK_OBJECT_TYPE_VIDEO_SESSION_KHR: + return __STR_VK_CHECK(VK_OBJECT_TYPE_VIDEO_SESSION_KHR); +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + case VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR: + return __STR_VK_CHECK(VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR); +#endif + case VK_OBJECT_TYPE_CU_MODULE_NVX: + return __STR_VK_CHECK(VK_OBJECT_TYPE_CU_MODULE_NVX); + case VK_OBJECT_TYPE_CU_FUNCTION_NVX: + return __STR_VK_CHECK(VK_OBJECT_TYPE_CU_FUNCTION_NVX); + case VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT: + return __STR_VK_CHECK(VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT); + case VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR: + return __STR_VK_CHECK(VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR); + case VK_OBJECT_TYPE_VALIDATION_CACHE_EXT: + return __STR_VK_CHECK(VK_OBJECT_TYPE_VALIDATION_CACHE_EXT); + case VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV: + return __STR_VK_CHECK(VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV); + case VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL: + return __STR_VK_CHECK(VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL); + case VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR: + return __STR_VK_CHECK(VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR); + case VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV: + return __STR_VK_CHECK(VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV); + case VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT: + return __STR_VK_CHECK(VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT); + case VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA: + return __STR_VK_CHECK(VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA); + default: + BLI_assert_unreachable(); + } + return "NotFound"; +#undef __STR_VK_CHECK +}; } // namespace blender::gpu diff --git a/source/blender/gpu/vulkan/vk_common.hh b/source/blender/gpu/vulkan/vk_common.hh index eebe13bbf55..2cc075baa33 100644 --- a/source/blender/gpu/vulkan/vk_common.hh +++ b/source/blender/gpu/vulkan/vk_common.hh @@ -32,6 +32,7 @@ VkClearColorValue to_vk_clear_color_value(const eGPUDataFormat format, const voi VkIndexType to_vk_index_type(const GPUIndexBufType index_type); VkPrimitiveTopology to_vk_primitive_topology(const GPUPrimType prim_type); VkCullModeFlags to_vk_cull_mode_flags(const eGPUFaceCullTest cull_test); +const char *to_string(VkObjectType type); template VkObjectType to_vk_object_type(T /*vk_obj*/) { diff --git a/source/blender/gpu/vulkan/vk_context.cc b/source/blender/gpu/vulkan/vk_context.cc index f4d15d2078c..feca2abb48d 100644 --- a/source/blender/gpu/vulkan/vk_context.cc +++ b/source/blender/gpu/vulkan/vk_context.cc @@ -59,6 +59,10 @@ void VKContext::activate() back_left = framebuffer; framebuffer->bind(false); } + debug::raise_message(0xB41CA2, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT, + "Vulkan Debug Utils Messenger is enabled. VkContext[0x%llx]", + (uintptr_t)this); } void VKContext::deactivate() {} diff --git a/source/blender/gpu/vulkan/vk_debug.cc b/source/blender/gpu/vulkan/vk_debug.cc index 3a3d505ed35..19608dad922 100644 --- a/source/blender/gpu/vulkan/vk_debug.cc +++ b/source/blender/gpu/vulkan/vk_debug.cc @@ -6,11 +6,14 @@ */ #include "BKE_global.h" +#include "CLG_log.h" #include "vk_backend.hh" #include "vk_context.hh" #include "vk_debug.hh" +static CLG_LogRef LOG = {"gpu.debug.vulkan"}; + namespace blender::gpu { void VKContext::debug_group_begin(const char *name, int) { @@ -69,6 +72,7 @@ void VKDebuggingTools::init(VkInstance vk_instance) { PFN_vkGetInstanceProcAddr instance_proc_addr = vkGetInstanceProcAddr; enabled = false; + vk_debug_utils_messenger = nullptr; vkCmdBeginDebugUtilsLabelEXT_r = (PFN_vkCmdBeginDebugUtilsLabelEXT)instance_proc_addr( vk_instance, "vkCmdBeginDebugUtilsLabelEXT"); vkCmdEndDebugUtilsLabelEXT_r = (PFN_vkCmdEndDebugUtilsLabelEXT)instance_proc_addr( @@ -93,11 +97,16 @@ void VKDebuggingTools::init(VkInstance vk_instance) vk_instance, "vkSubmitDebugUtilsMessageEXT"); if (vkCmdBeginDebugUtilsLabelEXT_r) { enabled = true; + create_messenger(vk_instance); } } void VKDebuggingTools::deinit() { + if (enabled) { + const VkInstance &vk_instance = VKBackend::get().device_get().instance_get(); + destroy_messenger(vk_instance); + } vkCmdBeginDebugUtilsLabelEXT_r = nullptr; vkCmdEndDebugUtilsLabelEXT_r = nullptr; vkCmdInsertDebugUtilsLabelEXT_r = nullptr; @@ -204,3 +213,217 @@ void pop_marker(const VKDevice &device) } } // namespace blender::gpu::debug + +namespace blender::gpu::debug { +VKDebuggingTools::~VKDebuggingTools() +{ + BLI_assert(vk_debug_utils_messenger == nullptr); +}; +void VKDebuggingTools::print_vulkan_version() +{ + uint32_t instanceVersion = VK_API_VERSION_1_0; + vkEnumerateInstanceVersion(&instanceVersion); + uint32_t major = VK_VERSION_MAJOR(instanceVersion); + uint32_t minor = VK_VERSION_MINOR(instanceVersion); + uint32_t patch = VK_VERSION_PATCH(instanceVersion); + + printf("Vulkan Version:%d.%d.%d\n", major, minor, patch); +} +void VKDebuggingTools::print_labels(const VkDebugUtilsMessengerCallbackDataEXT *callback_data, + bool use_color) +{ +#define COLOR_FILE \ + if (use_color) { \ + ss << "\x1b[2m"; \ + } +#define COLOR_RESET \ + if (use_color) { \ + ss << "\x1b[0m"; \ + } + std::stringstream ss; + if (callback_data->objectCount > 0) { + COLOR_FILE + ss << callback_data->objectCount << " Object[s] related \n"; + COLOR_RESET; + + for (uint32_t object = 0; object < callback_data->objectCount; ++object) { + COLOR_FILE + ss << "ObjectType[" << to_string(callback_data->pObjects[object].objectType) << "],"; + ss << "Handle[" << std::hex + << static_cast(callback_data->pObjects[object].objectHandle) << "],"; + ss << "Name[" << callback_data->pObjects[object].pObjectName << "] \n"; + COLOR_RESET; + } + } + if (callback_data->cmdBufLabelCount > 0) { + COLOR_FILE + ss << callback_data->cmdBufLabelCount << " Command Buffer Label[s] \n"; + COLOR_RESET; + for (uint32_t label = 0; label < callback_data->cmdBufLabelCount; ++label) { + COLOR_FILE + ss << "CmdBufLabelName : " << callback_data->pCmdBufLabels[label].pLabelName << "\n"; + COLOR_RESET; + } + } + if (callback_data->queueLabelCount > 0) { + COLOR_FILE + ss << callback_data->queueLabelCount << " Queue Label[s]\n"; + COLOR_RESET; + for (uint32_t label = 0; label < callback_data->queueLabelCount; ++label) { + COLOR_FILE + ss << "QueueLabelName : " << callback_data->pQueueLabels[label].pLabelName << "\n"; + COLOR_RESET; + } + } + printf("%s\n", ss.str().c_str()); + fflush(stdout); + +#undef COLOR_FILE +#undef COLOR_RESET +} +VKAPI_ATTR VkBool32 VKAPI_CALL +messenger_callback(VkDebugUtilsMessageSeverityFlagBitsEXT message_severity, + VkDebugUtilsMessageTypeFlagsEXT /* message_type*/, + const VkDebugUtilsMessengerCallbackDataEXT *callback_data, + void *user_data) +{ +#define CONSOLE_COLOR_YELLOW "\x1b[33m" +#define CONSOLE_COLOR_RED "\x1b[31m" +#define CONSOLE_COLOR_RESET "\x1b[0m" +#define CONSOLE_COLOR_FINE "\x1b[2m" + + VKDebuggingTools &debugging_tools = *reinterpret_cast(user_data); + if (debugging_tools.is_ignore(callback_data->messageIdNumber)) { + return VK_FALSE; + } + const bool use_color = CLG_color_support_get(&LOG); + bool enabled = false; + if ((message_severity == VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT) || + (message_severity == VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT)) + { + + if ((LOG.type->flag & CLG_FLAG_USE) && (LOG.type->level >= CLG_SEVERITY_INFO)) { + const char *format = use_color ? CONSOLE_COLOR_FINE "{0x%x}% s\n %s " CONSOLE_COLOR_RESET : + "{0x%x}% s\n %s "; + CLG_logf(LOG.type, + CLG_SEVERITY_INFO, + "", + "", + format, + callback_data->messageIdNumber, + callback_data->pMessageIdName, + callback_data->pMessage); + enabled = true; + } + } + else { + CLG_Severity clog_severity; + switch (message_severity) { + case VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT: + clog_severity = CLG_SEVERITY_WARN; + break; + case VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT: + clog_severity = CLG_SEVERITY_ERROR; + break; + default: + BLI_assert_unreachable(); + } + enabled = true; + if (clog_severity == CLG_SEVERITY_ERROR) { + + const char *format = use_color ? CONSOLE_COLOR_RED "%s {0x%x}\n" CONSOLE_COLOR_RESET + " %s \n " : + " %s {0x%x}\n %s "; + CLG_logf(LOG.type, + clog_severity, + "", + "", + format, + callback_data->pMessageIdName, + callback_data->messageIdNumber, + callback_data->pMessage); + } + else if (LOG.type->level >= CLG_SEVERITY_WARN) { + const char *format = use_color ? CONSOLE_COLOR_YELLOW "%s {0x%x}\n" CONSOLE_COLOR_RESET + " %s \n " : + " %s {0x%x}\n %s "; + CLG_logf(LOG.type, + clog_severity, + "", + "", + format, + callback_data->pMessageIdName, + callback_data->messageIdNumber, + callback_data->pMessage); + } + } + if ((enabled) && ((callback_data->objectCount > 0) || (callback_data->cmdBufLabelCount > 0) || + (callback_data->queueLabelCount > 0))) + { + debugging_tools.print_labels(callback_data, use_color); + } + +#undef CONSOLE_COLOR_YELLOW +#undef CONSOLE_COLOR_RED +#undef CONSOLE_COLOR_RESET +#undef CONSOLE_COLOR_FINE + return VK_TRUE; +}; + +VkResult VKDebuggingTools::create_messenger(VkInstance vk_instance) +{ + print_vulkan_version(); + vk_message_id_number_ignored.clear(); + BLI_assert(enabled); + + VkDebugUtilsMessengerCreateInfoEXT create_info; + create_info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT; + create_info.pNext = nullptr; + create_info.flags = 0; + create_info.messageSeverity = message_severity; + create_info.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT; + create_info.pfnUserCallback = messenger_callback; + create_info.pUserData = this; + VkResult res = vkCreateDebugUtilsMessengerEXT_r( + vk_instance, &create_info, nullptr, &vk_debug_utils_messenger); + BLI_assert(res == VK_SUCCESS); + return res; +} + +void VKDebuggingTools::destroy_messenger(VkInstance vk_instance) +{ + if (vk_debug_utils_messenger == nullptr) { + return; + } + BLI_assert(enabled); + vkDestroyDebugUtilsMessengerEXT_r(vk_instance, vk_debug_utils_messenger, nullptr); + + vk_message_id_number_ignored.clear(); + vk_debug_utils_messenger = nullptr; + return; +} + +bool VKDebuggingTools::is_ignore(int32_t id_number) +{ + bool found = false; + { + std::scoped_lock lock(ignore_mutex); + found = vk_message_id_number_ignored.contains(id_number); + } + return found; +} + +void VKDebuggingTools::add_group(int32_t id_number) +{ + std::scoped_lock lock(ignore_mutex); + vk_message_id_number_ignored.add(id_number); +}; + +void VKDebuggingTools::remove_group(int32_t id_number) +{ + std::scoped_lock lock(ignore_mutex); + vk_message_id_number_ignored.remove(id_number); +}; +}; // namespace blender::gpu::debug diff --git a/source/blender/gpu/vulkan/vk_debug.hh b/source/blender/gpu/vulkan/vk_debug.hh index 7fe77338c81..8218ef386fd 100644 --- a/source/blender/gpu/vulkan/vk_debug.hh +++ b/source/blender/gpu/vulkan/vk_debug.hh @@ -7,10 +7,12 @@ #pragma once #include "BKE_global.h" +#include "BLI_set.hh" #include "BLI_string.h" #include "vk_common.hh" +#include #include namespace blender::gpu { @@ -18,8 +20,14 @@ class VKContext; class VKDevice; namespace debug { -struct VKDebuggingTools { +class VKDebuggingTools { + public: bool enabled = false; + VkDebugUtilsMessageSeverityFlagsEXT message_severity = + VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT; /* Function pointer definitions. */ PFN_vkCreateDebugUtilsMessengerEXT vkCreateDebugUtilsMessengerEXT_r = nullptr; PFN_vkDestroyDebugUtilsMessengerEXT vkDestroyDebugUtilsMessengerEXT_r = nullptr; @@ -32,9 +40,22 @@ struct VKDebuggingTools { PFN_vkQueueInsertDebugUtilsLabelEXT vkQueueInsertDebugUtilsLabelEXT_r = nullptr; PFN_vkSetDebugUtilsObjectNameEXT vkSetDebugUtilsObjectNameEXT_r = nullptr; PFN_vkSetDebugUtilsObjectTagEXT vkSetDebugUtilsObjectTagEXT_r = nullptr; - + VKDebuggingTools() = default; + ~VKDebuggingTools(); void init(VkInstance vk_instance); void deinit(); + bool is_ignore(int32_t id_number); + VkResult create_messenger(VkInstance vk_instance); + void destroy_messenger(VkInstance vk_instance); + void print_labels(const VkDebugUtilsMessengerCallbackDataEXT *callback_data, bool use_color); + + private: + VkDebugUtilsMessengerEXT vk_debug_utils_messenger = nullptr; + Set vk_message_id_number_ignored; + std::mutex ignore_mutex; + void print_vulkan_version(); + void add_group(int32_t id_number); + void remove_group(int32_t id_number); }; void object_label(VkObjectType vk_object_type, uint64_t object_handle, const char *name); @@ -57,5 +78,38 @@ 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); + +/* how to use : debug::raise_message(-12345,VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT,"This is + * a raise message. %llx", (uintptr_t)vk_object); */ +template +void raise_message(int32_t id_number, + VkDebugUtilsMessageSeverityFlagBitsEXT vk_severity_flag_bits, + const char *fmt, + Args... args) +{ + VKContext *context = VKContext::get(); + if (!context) { + return; + } + const VKDevice &device = VKBackend::get().device_get(); + const VKDebuggingTools &debugging_tools = device.debugging_tools_get(); + if (debugging_tools.enabled) { + char *info = BLI_sprintfN(fmt, args...); + static VkDebugUtilsMessengerCallbackDataEXT vk_call_back_data; + vk_call_back_data.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT; + vk_call_back_data.pNext = VK_NULL_HANDLE; + vk_call_back_data.messageIdNumber = id_number; + vk_call_back_data.pMessageIdName = "VulkanMessenger"; + vk_call_back_data.objectCount = 0; + vk_call_back_data.flags = 0; + vk_call_back_data.pObjects = VK_NULL_HANDLE; + vk_call_back_data.pMessage = info; + debugging_tools.vkSubmitDebugUtilsMessageEXT_r(device.instance_get(), + vk_severity_flag_bits, + VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, + &vk_call_back_data); + MEM_freeN((void *)info); + } +} } // namespace debug } // namespace blender::gpu diff --git a/source/blender/gpu/vulkan/vk_descriptor_set.cc b/source/blender/gpu/vulkan/vk_descriptor_set.cc index edf6d7b54a7..af299028083 100644 --- a/source/blender/gpu/vulkan/vk_descriptor_set.cc +++ b/source/blender/gpu/vulkan/vk_descriptor_set.cc @@ -158,7 +158,7 @@ void VKDescriptorSetTracker::update(VKContext &context) bindings_.clear(); } -std::unique_ptr VKDescriptorSetTracker::create_resource(VKContext &context) +std::unique_ptr VKDescriptorSetTracker::create_resource(VKContext & /*context*/) { VKDevice &device = VKBackend::get().device_; return device.descriptor_pools_get().allocate(layout_); -- 2.30.2 From 07beb066befc746a92daf7872277ee471c77e7fb Mon Sep 17 00:00:00 2001 From: AgAmemnno Date: Sat, 6 May 2023 01:13:07 +0900 Subject: [PATCH 2/6] FIX:Refactoring Vulkan DebugUtils Messenger --- source/blender/gpu/vulkan/vk_common.cc | 97 +++++++++++++------------ source/blender/gpu/vulkan/vk_context.cc | 4 - source/blender/gpu/vulkan/vk_debug.cc | 15 ++-- source/blender/gpu/vulkan/vk_debug.hh | 6 +- source/blender/gpu/vulkan/vk_device.cc | 2 +- 5 files changed, 61 insertions(+), 63 deletions(-) diff --git a/source/blender/gpu/vulkan/vk_common.cc b/source/blender/gpu/vulkan/vk_common.cc index 7a248e28b81..e93d172ea57 100644 --- a/source/blender/gpu/vulkan/vk_common.cc +++ b/source/blender/gpu/vulkan/vk_common.cc @@ -5,6 +5,8 @@ * \ingroup gpu */ +#include "BLI_utildefines.h" + #include "vk_common.hh" namespace blender::gpu { @@ -530,108 +532,107 @@ VkCullModeFlags to_vk_cull_mode_flags(const eGPUFaceCullTest cull_test) const char *to_string(VkObjectType type) { -#define __STR_VK_CHECK(s) "" #s + switch (type) { case VK_OBJECT_TYPE_UNKNOWN: - return __STR_VK_CHECK(VK_OBJECT_TYPE_UNKNOWN); + return STRINGIFY_ARG(VK_OBJECT_TYPE_UNKNOWN); case VK_OBJECT_TYPE_INSTANCE: - return __STR_VK_CHECK(VK_OBJECT_TYPE_INSTANCE); + return STRINGIFY_ARG(VK_OBJECT_TYPE_INSTANCE); case VK_OBJECT_TYPE_PHYSICAL_DEVICE: - return __STR_VK_CHECK(VK_OBJECT_TYPE_PHYSICAL_DEVICE); + return STRINGIFY_ARG(VK_OBJECT_TYPE_PHYSICAL_DEVICE); case VK_OBJECT_TYPE_DEVICE: - return __STR_VK_CHECK(VK_OBJECT_TYPE_DEVICE); + return STRINGIFY_ARG(VK_OBJECT_TYPE_DEVICE); case VK_OBJECT_TYPE_QUEUE: - return __STR_VK_CHECK(VK_OBJECT_TYPE_QUEUE); + return STRINGIFY_ARG(VK_OBJECT_TYPE_QUEUE); case VK_OBJECT_TYPE_SEMAPHORE: - return __STR_VK_CHECK(VK_OBJECT_TYPE_SEMAPHORE); + return STRINGIFY_ARG(VK_OBJECT_TYPE_SEMAPHORE); case VK_OBJECT_TYPE_COMMAND_BUFFER: - return __STR_VK_CHECK(VK_OBJECT_TYPE_COMMAND_BUFFER); + return STRINGIFY_ARG(VK_OBJECT_TYPE_COMMAND_BUFFER); case VK_OBJECT_TYPE_FENCE: - return __STR_VK_CHECK(VK_OBJECT_TYPE_FENCE); + return STRINGIFY_ARG(VK_OBJECT_TYPE_FENCE); case VK_OBJECT_TYPE_DEVICE_MEMORY: - return __STR_VK_CHECK(VK_OBJECT_TYPE_DEVICE_MEMORY); + return STRINGIFY_ARG(VK_OBJECT_TYPE_DEVICE_MEMORY); case VK_OBJECT_TYPE_BUFFER: - return __STR_VK_CHECK(VK_OBJECT_TYPE_BUFFER); + return STRINGIFY_ARG(VK_OBJECT_TYPE_BUFFER); case VK_OBJECT_TYPE_IMAGE: - return __STR_VK_CHECK(VK_OBJECT_TYPE_IMAGE); + return STRINGIFY_ARG(VK_OBJECT_TYPE_IMAGE); case VK_OBJECT_TYPE_EVENT: - return __STR_VK_CHECK(VK_OBJECT_TYPE_EVENT); + return STRINGIFY_ARG(VK_OBJECT_TYPE_EVENT); case VK_OBJECT_TYPE_QUERY_POOL: - return __STR_VK_CHECK(VK_OBJECT_TYPE_QUERY_POOL); + return STRINGIFY_ARG(VK_OBJECT_TYPE_QUERY_POOL); case VK_OBJECT_TYPE_BUFFER_VIEW: - return __STR_VK_CHECK(VK_OBJECT_TYPE_BUFFER_VIEW); + return STRINGIFY_ARG(VK_OBJECT_TYPE_BUFFER_VIEW); case VK_OBJECT_TYPE_IMAGE_VIEW: - return __STR_VK_CHECK(VK_OBJECT_TYPE_IMAGE_VIEW); + return STRINGIFY_ARG(VK_OBJECT_TYPE_IMAGE_VIEW); case VK_OBJECT_TYPE_SHADER_MODULE: - return __STR_VK_CHECK(VK_OBJECT_TYPE_SHADER_MODULE); + return STRINGIFY_ARG(VK_OBJECT_TYPE_SHADER_MODULE); case VK_OBJECT_TYPE_PIPELINE_CACHE: - return __STR_VK_CHECK(VK_OBJECT_TYPE_PIPELINE_CACHE); + return STRINGIFY_ARG(VK_OBJECT_TYPE_PIPELINE_CACHE); case VK_OBJECT_TYPE_PIPELINE_LAYOUT: - return __STR_VK_CHECK(VK_OBJECT_TYPE_PIPELINE_LAYOUT); + return STRINGIFY_ARG(VK_OBJECT_TYPE_PIPELINE_LAYOUT); case VK_OBJECT_TYPE_RENDER_PASS: - return __STR_VK_CHECK(VK_OBJECT_TYPE_RENDER_PASS); + return STRINGIFY_ARG(VK_OBJECT_TYPE_RENDER_PASS); case VK_OBJECT_TYPE_PIPELINE: - return __STR_VK_CHECK(VK_OBJECT_TYPE_PIPELINE); + return STRINGIFY_ARG(VK_OBJECT_TYPE_PIPELINE); case VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT: - return __STR_VK_CHECK(VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT); + return STRINGIFY_ARG(VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT); case VK_OBJECT_TYPE_SAMPLER: - return __STR_VK_CHECK(VK_OBJECT_TYPE_SAMPLER); + return STRINGIFY_ARG(VK_OBJECT_TYPE_SAMPLER); case VK_OBJECT_TYPE_DESCRIPTOR_POOL: - return __STR_VK_CHECK(VK_OBJECT_TYPE_DESCRIPTOR_POOL); + return STRINGIFY_ARG(VK_OBJECT_TYPE_DESCRIPTOR_POOL); case VK_OBJECT_TYPE_DESCRIPTOR_SET: - return __STR_VK_CHECK(VK_OBJECT_TYPE_DESCRIPTOR_SET); + return STRINGIFY_ARG(VK_OBJECT_TYPE_DESCRIPTOR_SET); case VK_OBJECT_TYPE_FRAMEBUFFER: - return __STR_VK_CHECK(VK_OBJECT_TYPE_FRAMEBUFFER); + return STRINGIFY_ARG(VK_OBJECT_TYPE_FRAMEBUFFER); case VK_OBJECT_TYPE_COMMAND_POOL: - return __STR_VK_CHECK(VK_OBJECT_TYPE_COMMAND_POOL); + return STRINGIFY_ARG(VK_OBJECT_TYPE_COMMAND_POOL); case VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION: - return __STR_VK_CHECK(VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION); + return STRINGIFY_ARG(VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION); case VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE: - return __STR_VK_CHECK(VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE); + return STRINGIFY_ARG(VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE); case VK_OBJECT_TYPE_SURFACE_KHR: - return __STR_VK_CHECK(VK_OBJECT_TYPE_SURFACE_KHR); + return STRINGIFY_ARG(VK_OBJECT_TYPE_SURFACE_KHR); case VK_OBJECT_TYPE_SWAPCHAIN_KHR: - return __STR_VK_CHECK(VK_OBJECT_TYPE_SWAPCHAIN_KHR); + return STRINGIFY_ARG(VK_OBJECT_TYPE_SWAPCHAIN_KHR); case VK_OBJECT_TYPE_DISPLAY_KHR: - return __STR_VK_CHECK(VK_OBJECT_TYPE_DISPLAY_KHR); + return STRINGIFY_ARG(VK_OBJECT_TYPE_DISPLAY_KHR); case VK_OBJECT_TYPE_DISPLAY_MODE_KHR: - return __STR_VK_CHECK(VK_OBJECT_TYPE_DISPLAY_MODE_KHR); + return STRINGIFY_ARG(VK_OBJECT_TYPE_DISPLAY_MODE_KHR); case VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT: - return __STR_VK_CHECK(VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT); + return STRINGIFY_ARG(VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT); #ifdef VK_ENABLE_BETA_EXTENSIONS case VK_OBJECT_TYPE_VIDEO_SESSION_KHR: - return __STR_VK_CHECK(VK_OBJECT_TYPE_VIDEO_SESSION_KHR); + return STRINGIFY_ARG(VK_OBJECT_TYPE_VIDEO_SESSION_KHR); #endif #ifdef VK_ENABLE_BETA_EXTENSIONS case VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR: - return __STR_VK_CHECK(VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR); + return STRINGIFY_ARG(VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR); #endif case VK_OBJECT_TYPE_CU_MODULE_NVX: - return __STR_VK_CHECK(VK_OBJECT_TYPE_CU_MODULE_NVX); + return STRINGIFY_ARG(VK_OBJECT_TYPE_CU_MODULE_NVX); case VK_OBJECT_TYPE_CU_FUNCTION_NVX: - return __STR_VK_CHECK(VK_OBJECT_TYPE_CU_FUNCTION_NVX); + return STRINGIFY_ARG(VK_OBJECT_TYPE_CU_FUNCTION_NVX); case VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT: - return __STR_VK_CHECK(VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT); + return STRINGIFY_ARG(VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT); case VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR: - return __STR_VK_CHECK(VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR); + return STRINGIFY_ARG(VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR); case VK_OBJECT_TYPE_VALIDATION_CACHE_EXT: - return __STR_VK_CHECK(VK_OBJECT_TYPE_VALIDATION_CACHE_EXT); + return STRINGIFY_ARG(VK_OBJECT_TYPE_VALIDATION_CACHE_EXT); case VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV: - return __STR_VK_CHECK(VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV); + return STRINGIFY_ARG(VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV); case VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL: - return __STR_VK_CHECK(VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL); + return STRINGIFY_ARG(VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL); case VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR: - return __STR_VK_CHECK(VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR); + return STRINGIFY_ARG(VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR); case VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV: - return __STR_VK_CHECK(VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV); + return STRINGIFY_ARG(VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV); case VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT: - return __STR_VK_CHECK(VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT); + return STRINGIFY_ARG(VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT); case VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA: - return __STR_VK_CHECK(VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA); + return STRINGIFY_ARG(VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA); default: BLI_assert_unreachable(); } return "NotFound"; -#undef __STR_VK_CHECK }; } // namespace blender::gpu diff --git a/source/blender/gpu/vulkan/vk_context.cc b/source/blender/gpu/vulkan/vk_context.cc index feca2abb48d..f4d15d2078c 100644 --- a/source/blender/gpu/vulkan/vk_context.cc +++ b/source/blender/gpu/vulkan/vk_context.cc @@ -59,10 +59,6 @@ void VKContext::activate() back_left = framebuffer; framebuffer->bind(false); } - debug::raise_message(0xB41CA2, - VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT, - "Vulkan Debug Utils Messenger is enabled. VkContext[0x%llx]", - (uintptr_t)this); } void VKContext::deactivate() {} diff --git a/source/blender/gpu/vulkan/vk_debug.cc b/source/blender/gpu/vulkan/vk_debug.cc index 19608dad922..af6790d9751 100644 --- a/source/blender/gpu/vulkan/vk_debug.cc +++ b/source/blender/gpu/vulkan/vk_debug.cc @@ -97,14 +97,13 @@ void VKDebuggingTools::init(VkInstance vk_instance) vk_instance, "vkSubmitDebugUtilsMessageEXT"); if (vkCmdBeginDebugUtilsLabelEXT_r) { enabled = true; - create_messenger(vk_instance); + init_messenger(vk_instance); } } -void VKDebuggingTools::deinit() +void VKDebuggingTools::deinit(VkInstance vk_instance) { if (enabled) { - const VkInstance &vk_instance = VKBackend::get().device_get().instance_get(); destroy_messenger(vk_instance); } vkCmdBeginDebugUtilsLabelEXT_r = nullptr; @@ -229,9 +228,10 @@ void VKDebuggingTools::print_vulkan_version() printf("Vulkan Version:%d.%d.%d\n", major, minor, patch); } -void VKDebuggingTools::print_labels(const VkDebugUtilsMessengerCallbackDataEXT *callback_data, - bool use_color) + +void VKDebuggingTools::print_labels(const VkDebugUtilsMessengerCallbackDataEXT *callback_data) { + const bool use_color = CLG_color_support_get(&LOG); #define COLOR_FILE \ if (use_color) { \ ss << "\x1b[2m"; \ @@ -281,6 +281,7 @@ void VKDebuggingTools::print_labels(const VkDebugUtilsMessengerCallbackDataEXT * #undef COLOR_FILE #undef COLOR_RESET } + VKAPI_ATTR VkBool32 VKAPI_CALL messenger_callback(VkDebugUtilsMessageSeverityFlagBitsEXT message_severity, VkDebugUtilsMessageTypeFlagsEXT /* message_type*/, @@ -360,7 +361,7 @@ messenger_callback(VkDebugUtilsMessageSeverityFlagBitsEXT message_severity, if ((enabled) && ((callback_data->objectCount > 0) || (callback_data->cmdBufLabelCount > 0) || (callback_data->queueLabelCount > 0))) { - debugging_tools.print_labels(callback_data, use_color); + debugging_tools.print_labels(callback_data); } #undef CONSOLE_COLOR_YELLOW @@ -370,7 +371,7 @@ messenger_callback(VkDebugUtilsMessageSeverityFlagBitsEXT message_severity, return VK_TRUE; }; -VkResult VKDebuggingTools::create_messenger(VkInstance vk_instance) +VkResult VKDebuggingTools::init_messenger(VkInstance vk_instance) { print_vulkan_version(); vk_message_id_number_ignored.clear(); diff --git a/source/blender/gpu/vulkan/vk_debug.hh b/source/blender/gpu/vulkan/vk_debug.hh index 8218ef386fd..15614695b19 100644 --- a/source/blender/gpu/vulkan/vk_debug.hh +++ b/source/blender/gpu/vulkan/vk_debug.hh @@ -43,11 +43,11 @@ class VKDebuggingTools { VKDebuggingTools() = default; ~VKDebuggingTools(); void init(VkInstance vk_instance); - void deinit(); + void deinit(VkInstance vk_instance); bool is_ignore(int32_t id_number); - VkResult create_messenger(VkInstance vk_instance); + VkResult init_messenger(VkInstance vk_instance); void destroy_messenger(VkInstance vk_instance); - void print_labels(const VkDebugUtilsMessengerCallbackDataEXT *callback_data, bool use_color); + void print_labels(const VkDebugUtilsMessengerCallbackDataEXT *callback_data); private: VkDebugUtilsMessengerEXT vk_debug_utils_messenger = nullptr; diff --git a/source/blender/gpu/vulkan/vk_device.cc b/source/blender/gpu/vulkan/vk_device.cc index c396f277419..a391708c523 100644 --- a/source/blender/gpu/vulkan/vk_device.cc +++ b/source/blender/gpu/vulkan/vk_device.cc @@ -17,7 +17,7 @@ void VKDevice::deinit() { vmaDestroyAllocator(mem_allocator_); mem_allocator_ = VK_NULL_HANDLE; - debugging_tools_.deinit(); + debugging_tools_.deinit(vk_instance_); vk_instance_ = VK_NULL_HANDLE; vk_physical_device_ = VK_NULL_HANDLE; -- 2.30.2 From b91837098a243b82879251ced299d59f6ccf8bfa Mon Sep 17 00:00:00 2001 From: AgAmemnno Date: Mon, 8 May 2023 17:35:58 +0900 Subject: [PATCH 3/6] FIX:Vulkan: Stop using color --- source/blender/gpu/vulkan/vk_debug.cc | 58 +++++---------------------- 1 file changed, 9 insertions(+), 49 deletions(-) diff --git a/source/blender/gpu/vulkan/vk_debug.cc b/source/blender/gpu/vulkan/vk_debug.cc index af6790d9751..b1e5d93bd2f 100644 --- a/source/blender/gpu/vulkan/vk_debug.cc +++ b/source/blender/gpu/vulkan/vk_debug.cc @@ -231,55 +231,30 @@ void VKDebuggingTools::print_vulkan_version() void VKDebuggingTools::print_labels(const VkDebugUtilsMessengerCallbackDataEXT *callback_data) { - const bool use_color = CLG_color_support_get(&LOG); -#define COLOR_FILE \ - if (use_color) { \ - ss << "\x1b[2m"; \ - } -#define COLOR_RESET \ - if (use_color) { \ - ss << "\x1b[0m"; \ - } std::stringstream ss; if (callback_data->objectCount > 0) { - COLOR_FILE ss << callback_data->objectCount << " Object[s] related \n"; - COLOR_RESET; - for (uint32_t object = 0; object < callback_data->objectCount; ++object) { - COLOR_FILE ss << "ObjectType[" << to_string(callback_data->pObjects[object].objectType) << "],"; ss << "Handle[" << std::hex << static_cast(callback_data->pObjects[object].objectHandle) << "],"; ss << "Name[" << callback_data->pObjects[object].pObjectName << "] \n"; - COLOR_RESET; } } if (callback_data->cmdBufLabelCount > 0) { - COLOR_FILE ss << callback_data->cmdBufLabelCount << " Command Buffer Label[s] \n"; - COLOR_RESET; for (uint32_t label = 0; label < callback_data->cmdBufLabelCount; ++label) { - COLOR_FILE ss << "CmdBufLabelName : " << callback_data->pCmdBufLabels[label].pLabelName << "\n"; - COLOR_RESET; } } if (callback_data->queueLabelCount > 0) { - COLOR_FILE ss << callback_data->queueLabelCount << " Queue Label[s]\n"; - COLOR_RESET; for (uint32_t label = 0; label < callback_data->queueLabelCount; ++label) { - COLOR_FILE ss << "QueueLabelName : " << callback_data->pQueueLabels[label].pLabelName << "\n"; - COLOR_RESET; } } printf("%s\n", ss.str().c_str()); fflush(stdout); - -#undef COLOR_FILE -#undef COLOR_RESET } VKAPI_ATTR VkBool32 VKAPI_CALL @@ -288,24 +263,19 @@ messenger_callback(VkDebugUtilsMessageSeverityFlagBitsEXT message_severity, const VkDebugUtilsMessengerCallbackDataEXT *callback_data, void *user_data) { -#define CONSOLE_COLOR_YELLOW "\x1b[33m" -#define CONSOLE_COLOR_RED "\x1b[31m" -#define CONSOLE_COLOR_RESET "\x1b[0m" -#define CONSOLE_COLOR_FINE "\x1b[2m" - VKDebuggingTools &debugging_tools = *reinterpret_cast(user_data); if (debugging_tools.is_ignore(callback_data->messageIdNumber)) { return VK_FALSE; } - const bool use_color = CLG_color_support_get(&LOG); + bool use_color = CLG_color_support_get(&LOG); + UNUSED_VARS(use_color); bool enabled = false; - if ((message_severity == VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT) || - (message_severity == VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT)) + if ((message_severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT) || + (message_severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT)) { - - if ((LOG.type->flag & CLG_FLAG_USE) && (LOG.type->level >= CLG_SEVERITY_INFO)) { - const char *format = use_color ? CONSOLE_COLOR_FINE "{0x%x}% s\n %s " CONSOLE_COLOR_RESET : - "{0x%x}% s\n %s "; + if ((LOG.type->flag & CLG_FLAG_USE) && (LOG.type->level >= CLG_SEVERITY_INFO)) + { + const char *format = "{0x%x}% s\n %s "; CLG_logf(LOG.type, CLG_SEVERITY_INFO, "", @@ -331,10 +301,7 @@ messenger_callback(VkDebugUtilsMessageSeverityFlagBitsEXT message_severity, } enabled = true; if (clog_severity == CLG_SEVERITY_ERROR) { - - const char *format = use_color ? CONSOLE_COLOR_RED "%s {0x%x}\n" CONSOLE_COLOR_RESET - " %s \n " : - " %s {0x%x}\n %s "; + const char *format = " %s {0x%x}\n %s "; CLG_logf(LOG.type, clog_severity, "", @@ -345,9 +312,7 @@ messenger_callback(VkDebugUtilsMessageSeverityFlagBitsEXT message_severity, callback_data->pMessage); } else if (LOG.type->level >= CLG_SEVERITY_WARN) { - const char *format = use_color ? CONSOLE_COLOR_YELLOW "%s {0x%x}\n" CONSOLE_COLOR_RESET - " %s \n " : - " %s {0x%x}\n %s "; + const char *format = " %s {0x%x}\n %s "; CLG_logf(LOG.type, clog_severity, "", @@ -363,11 +328,6 @@ messenger_callback(VkDebugUtilsMessageSeverityFlagBitsEXT message_severity, { debugging_tools.print_labels(callback_data); } - -#undef CONSOLE_COLOR_YELLOW -#undef CONSOLE_COLOR_RED -#undef CONSOLE_COLOR_RESET -#undef CONSOLE_COLOR_FINE return VK_TRUE; }; -- 2.30.2 From 4f649b15766736b90655a9d15cfa954aecf95a06 Mon Sep 17 00:00:00 2001 From: AgAmemnno Date: Thu, 11 May 2023 23:24:25 +0900 Subject: [PATCH 4/6] FIX:Vulkan DebugUtils: Handling nullptr --- source/blender/gpu/vulkan/vk_debug.cc | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/source/blender/gpu/vulkan/vk_debug.cc b/source/blender/gpu/vulkan/vk_debug.cc index b1e5d93bd2f..450bc04bb7a 100644 --- a/source/blender/gpu/vulkan/vk_debug.cc +++ b/source/blender/gpu/vulkan/vk_debug.cc @@ -233,24 +233,34 @@ void VKDebuggingTools::print_labels(const VkDebugUtilsMessengerCallbackDataEXT * { std::stringstream ss; if (callback_data->objectCount > 0) { + ss << std::endl; ss << callback_data->objectCount << " Object[s] related \n"; for (uint32_t object = 0; object < callback_data->objectCount; ++object) { ss << "ObjectType[" << to_string(callback_data->pObjects[object].objectType) << "],"; - ss << "Handle[" << std::hex - << static_cast(callback_data->pObjects[object].objectHandle) << "],"; - ss << "Name[" << callback_data->pObjects[object].pObjectName << "] \n"; + ss << "Handle[0x" << std::hex + << static_cast(callback_data->pObjects[object].objectHandle) << "]"; + if (callback_data->pObjects[object].pObjectName) { + ss << ",Name[" << callback_data->pObjects[object].pObjectName << "]"; + } + ss << std::endl; } } if (callback_data->cmdBufLabelCount > 0) { - ss << callback_data->cmdBufLabelCount << " Command Buffer Label[s] \n"; + ss << std::endl; + ss << callback_data->cmdBufLabelCount << " Command Buffer Label[s] " << std::endl; for (uint32_t label = 0; label < callback_data->cmdBufLabelCount; ++label) { - ss << "CmdBufLabelName : " << callback_data->pCmdBufLabels[label].pLabelName << "\n"; + if (callback_data->pCmdBufLabels[label].pLabelName) { + ss << "CmdBufLabelName : " << callback_data->pCmdBufLabels[label].pLabelName << std::endl; + } } } if (callback_data->queueLabelCount > 0) { + ss << std::endl; ss << callback_data->queueLabelCount << " Queue Label[s]\n"; for (uint32_t label = 0; label < callback_data->queueLabelCount; ++label) { - ss << "QueueLabelName : " << callback_data->pQueueLabels[label].pLabelName << "\n"; + if (callback_data->pQueueLabels[label].pLabelName) { + ss << "QueueLabelName : " << callback_data->pQueueLabels[label].pLabelName << std::endl; + } } } printf("%s\n", ss.str().c_str()); -- 2.30.2 From 126b85326dbc9dbf3ac492c1ec23cc4275ecaece Mon Sep 17 00:00:00 2001 From: vnapdv Date: Fri, 12 May 2023 01:49:31 +0900 Subject: [PATCH 5/6] FIX:Vulkan: Linux build --- source/blender/gpu/vulkan/vk_debug.cc | 847 ++++++++++++++------------ source/blender/gpu/vulkan/vk_debug.hh | 203 +++--- 2 files changed, 535 insertions(+), 515 deletions(-) diff --git a/source/blender/gpu/vulkan/vk_debug.cc b/source/blender/gpu/vulkan/vk_debug.cc index 450bc04bb7a..5f69f83d961 100644 --- a/source/blender/gpu/vulkan/vk_debug.cc +++ b/source/blender/gpu/vulkan/vk_debug.cc @@ -1,400 +1,447 @@ -/* SPDX-License-Identifier: GPL-2.0-or-later - * Copyright 2023 Blender Foundation. */ - -/** \file - * \ingroup gpu - */ - -#include "BKE_global.h" -#include "CLG_log.h" - -#include "vk_backend.hh" -#include "vk_context.hh" -#include "vk_debug.hh" - -static CLG_LogRef LOG = {"gpu.debug.vulkan"}; - -namespace blender::gpu { -void VKContext::debug_group_begin(const char *name, int) -{ - const VKDevice &device = VKBackend::get().device_get(); - debug::push_marker(device, name); -} - -void VKContext::debug_group_end() -{ - const VKDevice &device = VKBackend::get().device_get(); - debug::pop_marker(device); -} - -bool VKContext::debug_capture_begin() -{ - return VKBackend::get().debug_capture_begin(); -} - -bool VKBackend::debug_capture_begin() -{ -#ifdef WITH_RENDERDOC - return renderdoc_api_.start_frame_capture(device_get().instance_get(), nullptr); -#else - return false; -#endif -} - -void VKContext::debug_capture_end() -{ - VKBackend::get().debug_capture_end(); -} - -void VKBackend::debug_capture_end() -{ -#ifdef WITH_RENDERDOC - renderdoc_api_.end_frame_capture(device_get().instance_get(), nullptr); -#endif -} - -void *VKContext::debug_capture_scope_create(const char * /*name*/) -{ - return nullptr; -} - -bool VKContext::debug_capture_scope_begin(void * /*scope*/) -{ - return false; -} - -void VKContext::debug_capture_scope_end(void * /*scope*/) {} -} // namespace blender::gpu - -namespace blender::gpu::debug { - -void VKDebuggingTools::init(VkInstance vk_instance) -{ - PFN_vkGetInstanceProcAddr instance_proc_addr = vkGetInstanceProcAddr; - enabled = false; - vk_debug_utils_messenger = nullptr; - vkCmdBeginDebugUtilsLabelEXT_r = (PFN_vkCmdBeginDebugUtilsLabelEXT)instance_proc_addr( - vk_instance, "vkCmdBeginDebugUtilsLabelEXT"); - vkCmdEndDebugUtilsLabelEXT_r = (PFN_vkCmdEndDebugUtilsLabelEXT)instance_proc_addr( - vk_instance, "vkCmdEndDebugUtilsLabelEXT"); - vkCmdInsertDebugUtilsLabelEXT_r = (PFN_vkCmdInsertDebugUtilsLabelEXT)instance_proc_addr( - vk_instance, "vkCmdInsertDebugUtilsLabelEXT"); - vkCreateDebugUtilsMessengerEXT_r = (PFN_vkCreateDebugUtilsMessengerEXT)instance_proc_addr( - vk_instance, "vkCreateDebugUtilsMessengerEXT"); - vkDestroyDebugUtilsMessengerEXT_r = (PFN_vkDestroyDebugUtilsMessengerEXT)instance_proc_addr( - vk_instance, "vkDestroyDebugUtilsMessengerEXT"); - vkQueueBeginDebugUtilsLabelEXT_r = (PFN_vkQueueBeginDebugUtilsLabelEXT)instance_proc_addr( - vk_instance, "vkQueueBeginDebugUtilsLabelEXT"); - vkQueueEndDebugUtilsLabelEXT_r = (PFN_vkQueueEndDebugUtilsLabelEXT)instance_proc_addr( - vk_instance, "vkQueueEndDebugUtilsLabelEXT"); - vkQueueInsertDebugUtilsLabelEXT_r = (PFN_vkQueueInsertDebugUtilsLabelEXT)instance_proc_addr( - vk_instance, "vkQueueInsertDebugUtilsLabelEXT"); - vkSetDebugUtilsObjectNameEXT_r = (PFN_vkSetDebugUtilsObjectNameEXT)instance_proc_addr( - vk_instance, "vkSetDebugUtilsObjectNameEXT"); - vkSetDebugUtilsObjectTagEXT_r = (PFN_vkSetDebugUtilsObjectTagEXT)instance_proc_addr( - vk_instance, "vkSetDebugUtilsObjectTagEXT"); - vkSubmitDebugUtilsMessageEXT_r = (PFN_vkSubmitDebugUtilsMessageEXT)instance_proc_addr( - vk_instance, "vkSubmitDebugUtilsMessageEXT"); - if (vkCmdBeginDebugUtilsLabelEXT_r) { - enabled = true; - init_messenger(vk_instance); - } -} - -void VKDebuggingTools::deinit(VkInstance vk_instance) -{ - if (enabled) { - destroy_messenger(vk_instance); - } - vkCmdBeginDebugUtilsLabelEXT_r = nullptr; - vkCmdEndDebugUtilsLabelEXT_r = nullptr; - vkCmdInsertDebugUtilsLabelEXT_r = nullptr; - vkCreateDebugUtilsMessengerEXT_r = nullptr; - vkDestroyDebugUtilsMessengerEXT_r = nullptr; - vkQueueBeginDebugUtilsLabelEXT_r = nullptr; - vkQueueEndDebugUtilsLabelEXT_r = nullptr; - vkQueueInsertDebugUtilsLabelEXT_r = nullptr; - vkSetDebugUtilsObjectNameEXT_r = nullptr; - vkSetDebugUtilsObjectTagEXT_r = nullptr; - vkSubmitDebugUtilsMessageEXT_r = nullptr; - enabled = false; -} - -void object_label(VkObjectType vk_object_type, uint64_t object_handle, const char *name) -{ - if (G.debug & G_DEBUG_GPU) { - const VKDevice &device = VKBackend::get().device_get(); - const VKDebuggingTools &debugging_tools = device.debugging_tools_get(); - if (debugging_tools.enabled) { - VkDebugUtilsObjectNameInfoEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT; - info.objectType = vk_object_type; - info.objectHandle = object_handle; - info.pObjectName = name; - debugging_tools.vkSetDebugUtilsObjectNameEXT_r(device.device_get(), &info); - } - } -} - -void push_marker(VkCommandBuffer vk_command_buffer, const char *name) -{ - if (G.debug & G_DEBUG_GPU) { - const VKDevice &device = VKBackend::get().device_get(); - const VKDebuggingTools &debugging_tools = device.debugging_tools_get(); - if (debugging_tools.enabled) { - VkDebugUtilsLabelEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; - info.pLabelName = name; - debugging_tools.vkCmdBeginDebugUtilsLabelEXT_r(vk_command_buffer, &info); - } - } -} - -void set_marker(VkCommandBuffer vk_command_buffer, const char *name) -{ - if (G.debug & G_DEBUG_GPU) { - const VKDevice &device = VKBackend::get().device_get(); - const VKDebuggingTools &debugging_tools = device.debugging_tools_get(); - if (debugging_tools.enabled) { - VkDebugUtilsLabelEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; - info.pLabelName = name; - debugging_tools.vkCmdInsertDebugUtilsLabelEXT_r(vk_command_buffer, &info); - } - } -} - -void pop_marker(VkCommandBuffer vk_command_buffer) -{ - if (G.debug & G_DEBUG_GPU) { - const VKDevice &device = VKBackend::get().device_get(); - const VKDebuggingTools &debugging_tools = device.debugging_tools_get(); - if (debugging_tools.enabled) { - debugging_tools.vkCmdEndDebugUtilsLabelEXT_r(vk_command_buffer); - } - } -} - -void push_marker(const VKDevice &device, const char *name) -{ - if (G.debug & G_DEBUG_GPU) { - const VKDebuggingTools &debugging_tools = device.debugging_tools_get(); - if (debugging_tools.enabled) { - VkDebugUtilsLabelEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; - info.pLabelName = name; - debugging_tools.vkQueueBeginDebugUtilsLabelEXT_r(device.queue_get(), &info); - } - } -} - -void set_marker(const VKDevice &device, const char *name) -{ - if (G.debug & G_DEBUG_GPU) { - const VKDebuggingTools &debugging_tools = device.debugging_tools_get(); - if (debugging_tools.enabled) { - VkDebugUtilsLabelEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; - info.pLabelName = name; - debugging_tools.vkQueueInsertDebugUtilsLabelEXT_r(device.queue_get(), &info); - } - } -} - -void pop_marker(const VKDevice &device) -{ - if (G.debug & G_DEBUG_GPU) { - const VKDebuggingTools &debugging_tools = device.debugging_tools_get(); - if (debugging_tools.enabled) { - debugging_tools.vkQueueEndDebugUtilsLabelEXT_r(device.queue_get()); - } - } -} - -} // namespace blender::gpu::debug - -namespace blender::gpu::debug { -VKDebuggingTools::~VKDebuggingTools() -{ - BLI_assert(vk_debug_utils_messenger == nullptr); -}; -void VKDebuggingTools::print_vulkan_version() -{ - uint32_t instanceVersion = VK_API_VERSION_1_0; - vkEnumerateInstanceVersion(&instanceVersion); - uint32_t major = VK_VERSION_MAJOR(instanceVersion); - uint32_t minor = VK_VERSION_MINOR(instanceVersion); - uint32_t patch = VK_VERSION_PATCH(instanceVersion); - - printf("Vulkan Version:%d.%d.%d\n", major, minor, patch); -} - -void VKDebuggingTools::print_labels(const VkDebugUtilsMessengerCallbackDataEXT *callback_data) -{ - std::stringstream ss; - if (callback_data->objectCount > 0) { - ss << std::endl; - ss << callback_data->objectCount << " Object[s] related \n"; - for (uint32_t object = 0; object < callback_data->objectCount; ++object) { - ss << "ObjectType[" << to_string(callback_data->pObjects[object].objectType) << "],"; - ss << "Handle[0x" << std::hex - << static_cast(callback_data->pObjects[object].objectHandle) << "]"; - if (callback_data->pObjects[object].pObjectName) { - ss << ",Name[" << callback_data->pObjects[object].pObjectName << "]"; - } - ss << std::endl; - } - } - if (callback_data->cmdBufLabelCount > 0) { - ss << std::endl; - ss << callback_data->cmdBufLabelCount << " Command Buffer Label[s] " << std::endl; - for (uint32_t label = 0; label < callback_data->cmdBufLabelCount; ++label) { - if (callback_data->pCmdBufLabels[label].pLabelName) { - ss << "CmdBufLabelName : " << callback_data->pCmdBufLabels[label].pLabelName << std::endl; - } - } - } - if (callback_data->queueLabelCount > 0) { - ss << std::endl; - ss << callback_data->queueLabelCount << " Queue Label[s]\n"; - for (uint32_t label = 0; label < callback_data->queueLabelCount; ++label) { - if (callback_data->pQueueLabels[label].pLabelName) { - ss << "QueueLabelName : " << callback_data->pQueueLabels[label].pLabelName << std::endl; - } - } - } - printf("%s\n", ss.str().c_str()); - fflush(stdout); -} - -VKAPI_ATTR VkBool32 VKAPI_CALL -messenger_callback(VkDebugUtilsMessageSeverityFlagBitsEXT message_severity, - VkDebugUtilsMessageTypeFlagsEXT /* message_type*/, - const VkDebugUtilsMessengerCallbackDataEXT *callback_data, - void *user_data) -{ - VKDebuggingTools &debugging_tools = *reinterpret_cast(user_data); - if (debugging_tools.is_ignore(callback_data->messageIdNumber)) { - return VK_FALSE; - } - bool use_color = CLG_color_support_get(&LOG); - UNUSED_VARS(use_color); - bool enabled = false; - if ((message_severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT) || - (message_severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT)) - { - if ((LOG.type->flag & CLG_FLAG_USE) && (LOG.type->level >= CLG_SEVERITY_INFO)) - { - const char *format = "{0x%x}% s\n %s "; - CLG_logf(LOG.type, - CLG_SEVERITY_INFO, - "", - "", - format, - callback_data->messageIdNumber, - callback_data->pMessageIdName, - callback_data->pMessage); - enabled = true; - } - } - else { - CLG_Severity clog_severity; - switch (message_severity) { - case VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT: - clog_severity = CLG_SEVERITY_WARN; - break; - case VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT: - clog_severity = CLG_SEVERITY_ERROR; - break; - default: - BLI_assert_unreachable(); - } - enabled = true; - if (clog_severity == CLG_SEVERITY_ERROR) { - const char *format = " %s {0x%x}\n %s "; - CLG_logf(LOG.type, - clog_severity, - "", - "", - format, - callback_data->pMessageIdName, - callback_data->messageIdNumber, - callback_data->pMessage); - } - else if (LOG.type->level >= CLG_SEVERITY_WARN) { - const char *format = " %s {0x%x}\n %s "; - CLG_logf(LOG.type, - clog_severity, - "", - "", - format, - callback_data->pMessageIdName, - callback_data->messageIdNumber, - callback_data->pMessage); - } - } - if ((enabled) && ((callback_data->objectCount > 0) || (callback_data->cmdBufLabelCount > 0) || - (callback_data->queueLabelCount > 0))) - { - debugging_tools.print_labels(callback_data); - } - return VK_TRUE; -}; - -VkResult VKDebuggingTools::init_messenger(VkInstance vk_instance) -{ - print_vulkan_version(); - vk_message_id_number_ignored.clear(); - BLI_assert(enabled); - - VkDebugUtilsMessengerCreateInfoEXT create_info; - create_info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT; - create_info.pNext = nullptr; - create_info.flags = 0; - create_info.messageSeverity = message_severity; - create_info.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | - VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | - VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT; - create_info.pfnUserCallback = messenger_callback; - create_info.pUserData = this; - VkResult res = vkCreateDebugUtilsMessengerEXT_r( - vk_instance, &create_info, nullptr, &vk_debug_utils_messenger); - BLI_assert(res == VK_SUCCESS); - return res; -} - -void VKDebuggingTools::destroy_messenger(VkInstance vk_instance) -{ - if (vk_debug_utils_messenger == nullptr) { - return; - } - BLI_assert(enabled); - vkDestroyDebugUtilsMessengerEXT_r(vk_instance, vk_debug_utils_messenger, nullptr); - - vk_message_id_number_ignored.clear(); - vk_debug_utils_messenger = nullptr; - return; -} - -bool VKDebuggingTools::is_ignore(int32_t id_number) -{ - bool found = false; - { - std::scoped_lock lock(ignore_mutex); - found = vk_message_id_number_ignored.contains(id_number); - } - return found; -} - -void VKDebuggingTools::add_group(int32_t id_number) -{ - std::scoped_lock lock(ignore_mutex); - vk_message_id_number_ignored.add(id_number); -}; - -void VKDebuggingTools::remove_group(int32_t id_number) -{ - std::scoped_lock lock(ignore_mutex); - vk_message_id_number_ignored.remove(id_number); -}; -}; // namespace blender::gpu::debug +/* SPDX-License-Identifier: GPL-2.0-or-later + * Copyright 2023 Blender Foundation. */ + +/** \file + * \ingroup gpu + */ + +#include "BKE_global.h" +#include "BLI_dynstr.h" +#include "CLG_log.h" + +#include "vk_backend.hh" +#include "vk_context.hh" +#include "vk_debug.hh" + +static CLG_LogRef LOG = {"gpu.debug.vulkan"}; + +namespace blender::gpu { +void VKContext::debug_group_begin(const char *name, int) +{ + const VKDevice &device = VKBackend::get().device_get(); + debug::push_marker(device, name); +} + +void VKContext::debug_group_end() +{ + const VKDevice &device = VKBackend::get().device_get(); + debug::pop_marker(device); +} + +bool VKContext::debug_capture_begin() +{ + return VKBackend::get().debug_capture_begin(); +} + +bool VKBackend::debug_capture_begin() +{ +#ifdef WITH_RENDERDOC + return renderdoc_api_.start_frame_capture(device_get().instance_get(), nullptr); +#else + return false; +#endif +} + +void VKContext::debug_capture_end() +{ + VKBackend::get().debug_capture_end(); +} + +void VKBackend::debug_capture_end() +{ +#ifdef WITH_RENDERDOC + renderdoc_api_.end_frame_capture(device_get().instance_get(), nullptr); +#endif +} + +void *VKContext::debug_capture_scope_create(const char * /*name*/) +{ + return nullptr; +} + +bool VKContext::debug_capture_scope_begin(void * /*scope*/) +{ + return false; +} + +void VKContext::debug_capture_scope_end(void * /*scope*/) {} +} // namespace blender::gpu + +namespace blender::gpu::debug { + +void VKDebuggingTools::init(VkInstance vk_instance) +{ + PFN_vkGetInstanceProcAddr instance_proc_addr = vkGetInstanceProcAddr; + enabled = false; + vk_debug_utils_messenger = nullptr; + vkCmdBeginDebugUtilsLabelEXT_r = (PFN_vkCmdBeginDebugUtilsLabelEXT)instance_proc_addr( + vk_instance, "vkCmdBeginDebugUtilsLabelEXT"); + vkCmdEndDebugUtilsLabelEXT_r = (PFN_vkCmdEndDebugUtilsLabelEXT)instance_proc_addr( + vk_instance, "vkCmdEndDebugUtilsLabelEXT"); + vkCmdInsertDebugUtilsLabelEXT_r = (PFN_vkCmdInsertDebugUtilsLabelEXT)instance_proc_addr( + vk_instance, "vkCmdInsertDebugUtilsLabelEXT"); + vkCreateDebugUtilsMessengerEXT_r = (PFN_vkCreateDebugUtilsMessengerEXT)instance_proc_addr( + vk_instance, "vkCreateDebugUtilsMessengerEXT"); + vkDestroyDebugUtilsMessengerEXT_r = (PFN_vkDestroyDebugUtilsMessengerEXT)instance_proc_addr( + vk_instance, "vkDestroyDebugUtilsMessengerEXT"); + vkQueueBeginDebugUtilsLabelEXT_r = (PFN_vkQueueBeginDebugUtilsLabelEXT)instance_proc_addr( + vk_instance, "vkQueueBeginDebugUtilsLabelEXT"); + vkQueueEndDebugUtilsLabelEXT_r = (PFN_vkQueueEndDebugUtilsLabelEXT)instance_proc_addr( + vk_instance, "vkQueueEndDebugUtilsLabelEXT"); + vkQueueInsertDebugUtilsLabelEXT_r = (PFN_vkQueueInsertDebugUtilsLabelEXT)instance_proc_addr( + vk_instance, "vkQueueInsertDebugUtilsLabelEXT"); + vkSetDebugUtilsObjectNameEXT_r = (PFN_vkSetDebugUtilsObjectNameEXT)instance_proc_addr( + vk_instance, "vkSetDebugUtilsObjectNameEXT"); + vkSetDebugUtilsObjectTagEXT_r = (PFN_vkSetDebugUtilsObjectTagEXT)instance_proc_addr( + vk_instance, "vkSetDebugUtilsObjectTagEXT"); + vkSubmitDebugUtilsMessageEXT_r = (PFN_vkSubmitDebugUtilsMessageEXT)instance_proc_addr( + vk_instance, "vkSubmitDebugUtilsMessageEXT"); + if (vkCmdBeginDebugUtilsLabelEXT_r) { + enabled = true; + init_messenger(vk_instance); + } +} + +void VKDebuggingTools::deinit(VkInstance vk_instance) +{ + if (enabled) { + destroy_messenger(vk_instance); + } + vkCmdBeginDebugUtilsLabelEXT_r = nullptr; + vkCmdEndDebugUtilsLabelEXT_r = nullptr; + vkCmdInsertDebugUtilsLabelEXT_r = nullptr; + vkCreateDebugUtilsMessengerEXT_r = nullptr; + vkDestroyDebugUtilsMessengerEXT_r = nullptr; + vkQueueBeginDebugUtilsLabelEXT_r = nullptr; + vkQueueEndDebugUtilsLabelEXT_r = nullptr; + vkQueueInsertDebugUtilsLabelEXT_r = nullptr; + vkSetDebugUtilsObjectNameEXT_r = nullptr; + vkSetDebugUtilsObjectTagEXT_r = nullptr; + vkSubmitDebugUtilsMessageEXT_r = nullptr; + enabled = false; +} + +void object_label(VkObjectType vk_object_type, uint64_t object_handle, const char *name) +{ + if (G.debug & G_DEBUG_GPU) { + const VKDevice &device = VKBackend::get().device_get(); + const VKDebuggingTools &debugging_tools = device.debugging_tools_get(); + if (debugging_tools.enabled) { + VkDebugUtilsObjectNameInfoEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT; + info.objectType = vk_object_type; + info.objectHandle = object_handle; + info.pObjectName = name; + debugging_tools.vkSetDebugUtilsObjectNameEXT_r(device.device_get(), &info); + } + } +} + +void push_marker(VkCommandBuffer vk_command_buffer, const char *name) +{ + if (G.debug & G_DEBUG_GPU) { + const VKDevice &device = VKBackend::get().device_get(); + const VKDebuggingTools &debugging_tools = device.debugging_tools_get(); + if (debugging_tools.enabled) { + VkDebugUtilsLabelEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; + info.pLabelName = name; + debugging_tools.vkCmdBeginDebugUtilsLabelEXT_r(vk_command_buffer, &info); + } + } +} + +void set_marker(VkCommandBuffer vk_command_buffer, const char *name) +{ + if (G.debug & G_DEBUG_GPU) { + const VKDevice &device = VKBackend::get().device_get(); + const VKDebuggingTools &debugging_tools = device.debugging_tools_get(); + if (debugging_tools.enabled) { + VkDebugUtilsLabelEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; + info.pLabelName = name; + debugging_tools.vkCmdInsertDebugUtilsLabelEXT_r(vk_command_buffer, &info); + } + } +} + +void pop_marker(VkCommandBuffer vk_command_buffer) +{ + if (G.debug & G_DEBUG_GPU) { + const VKDevice &device = VKBackend::get().device_get(); + const VKDebuggingTools &debugging_tools = device.debugging_tools_get(); + if (debugging_tools.enabled) { + debugging_tools.vkCmdEndDebugUtilsLabelEXT_r(vk_command_buffer); + } + } +} + +void push_marker(const VKDevice &device, const char *name) +{ + if (G.debug & G_DEBUG_GPU) { + const VKDebuggingTools &debugging_tools = device.debugging_tools_get(); + if (debugging_tools.enabled) { + VkDebugUtilsLabelEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; + info.pLabelName = name; + debugging_tools.vkQueueBeginDebugUtilsLabelEXT_r(device.queue_get(), &info); + } + } +} + +void set_marker(const VKDevice &device, const char *name) +{ + if (G.debug & G_DEBUG_GPU) { + const VKDebuggingTools &debugging_tools = device.debugging_tools_get(); + if (debugging_tools.enabled) { + VkDebugUtilsLabelEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; + info.pLabelName = name; + debugging_tools.vkQueueInsertDebugUtilsLabelEXT_r(device.queue_get(), &info); + } + } +} + +void pop_marker(const VKDevice &device) +{ + if (G.debug & G_DEBUG_GPU) { + const VKDebuggingTools &debugging_tools = device.debugging_tools_get(); + if (debugging_tools.enabled) { + debugging_tools.vkQueueEndDebugUtilsLabelEXT_r(device.queue_get()); + } + } +} + +} // namespace blender::gpu::debug + +namespace blender::gpu::debug { +VKDebuggingTools::~VKDebuggingTools() +{ + BLI_assert(vk_debug_utils_messenger == nullptr); +}; +void VKDebuggingTools::print_vulkan_version() +{ + uint32_t instanceVersion = VK_API_VERSION_1_0; + vkEnumerateInstanceVersion(&instanceVersion); + uint32_t major = VK_VERSION_MAJOR(instanceVersion); + uint32_t minor = VK_VERSION_MINOR(instanceVersion); + uint32_t patch = VK_VERSION_PATCH(instanceVersion); + + printf("Vulkan Version:%u.%u.%u\n", major, minor, patch); +} + +void VKDebuggingTools::print_labels(const VkDebugUtilsMessengerCallbackDataEXT *callback_data) +{ + std::stringstream ss; + if (callback_data->objectCount > 0) { + ss << std::endl; + ss << callback_data->objectCount << " Object[s] related \n"; + for (uint32_t object = 0; object < callback_data->objectCount; ++object) { + ss << "ObjectType[" << to_string(callback_data->pObjects[object].objectType) << "],"; + ss << "Handle[0x" << std::hex + << static_cast(callback_data->pObjects[object].objectHandle) << "]"; + if (callback_data->pObjects[object].pObjectName) { + ss << ",Name[" << callback_data->pObjects[object].pObjectName << "]"; + } + ss << std::endl; + } + } + if (callback_data->cmdBufLabelCount > 0) { + ss << std::endl; + ss << callback_data->cmdBufLabelCount << " Command Buffer Label[s] " << std::endl; + for (uint32_t label = 0; label < callback_data->cmdBufLabelCount; ++label) { + if (callback_data->pCmdBufLabels[label].pLabelName) { + ss << "CmdBufLabelName : " << callback_data->pCmdBufLabels[label].pLabelName << std::endl; + } + } + } + if (callback_data->queueLabelCount > 0) { + ss << std::endl; + ss << callback_data->queueLabelCount << " Queue Label[s]\n"; + for (uint32_t label = 0; label < callback_data->queueLabelCount; ++label) { + if (callback_data->pQueueLabels[label].pLabelName) { + ss << "QueueLabelName : " << callback_data->pQueueLabels[label].pLabelName << std::endl; + } + } + } + printf("%s\n", ss.str().c_str()); + fflush(stdout); +} +VKAPI_ATTR VkBool32 VKAPI_CALL +messenger_callback(VkDebugUtilsMessageSeverityFlagBitsEXT message_severity, + VkDebugUtilsMessageTypeFlagsEXT /* message_type*/, + const VkDebugUtilsMessengerCallbackDataEXT *callback_data, + void *user_data); +VKAPI_ATTR VkBool32 VKAPI_CALL +messenger_callback(VkDebugUtilsMessageSeverityFlagBitsEXT message_severity, + VkDebugUtilsMessageTypeFlagsEXT /* message_type*/, + const VkDebugUtilsMessengerCallbackDataEXT *callback_data, + void *user_data) +{ + VKDebuggingTools &debugging_tools = *reinterpret_cast(user_data); + if (debugging_tools.is_ignore(callback_data->messageIdNumber)) { + return VK_FALSE; + } + bool use_color = CLG_color_support_get(&LOG); + UNUSED_VARS(use_color); + bool enabled = false; + if ((message_severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT) || + (message_severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT)) + { + if ((LOG.type->flag & CLG_FLAG_USE) && (LOG.type->level >= CLG_SEVERITY_INFO)) { + const char *format = "{0x%x}% s\n %s "; + CLG_logf(LOG.type, + CLG_SEVERITY_INFO, + "", + "", + format, + callback_data->messageIdNumber, + callback_data->pMessageIdName, + callback_data->pMessage); + enabled = true; + } + } + else { + CLG_Severity clog_severity; + switch (message_severity) { + case VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT: + clog_severity = CLG_SEVERITY_WARN; + break; + case VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT: + clog_severity = CLG_SEVERITY_ERROR; + break; + default: + BLI_assert_unreachable(); + } + enabled = true; + if (clog_severity == CLG_SEVERITY_ERROR) { + const char *format = " %s {0x%x}\n %s "; + CLG_logf(LOG.type, + clog_severity, + "", + "", + format, + callback_data->pMessageIdName, + callback_data->messageIdNumber, + callback_data->pMessage); + } + else if (LOG.type->level >= CLG_SEVERITY_WARN) { + const char *format = " %s {0x%x}\n %s "; + CLG_logf(LOG.type, + clog_severity, + "", + "", + format, + callback_data->pMessageIdName, + callback_data->messageIdNumber, + callback_data->pMessage); + } + } + if ((enabled) && ((callback_data->objectCount > 0) || (callback_data->cmdBufLabelCount > 0) || + (callback_data->queueLabelCount > 0))) + { + debugging_tools.print_labels(callback_data); + } + return VK_TRUE; +}; + +VkResult VKDebuggingTools::init_messenger(VkInstance vk_instance) +{ + print_vulkan_version(); + vk_message_id_number_ignored.clear(); + BLI_assert(enabled); + + VkDebugUtilsMessengerCreateInfoEXT create_info; + create_info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT; + create_info.pNext = nullptr; + create_info.flags = 0; + create_info.messageSeverity = message_severity; + create_info.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT; + create_info.pfnUserCallback = messenger_callback; + create_info.pUserData = this; + VkResult res = vkCreateDebugUtilsMessengerEXT_r( + vk_instance, &create_info, nullptr, &vk_debug_utils_messenger); + BLI_assert(res == VK_SUCCESS); + return res; +} + +void VKDebuggingTools::destroy_messenger(VkInstance vk_instance) +{ + if (vk_debug_utils_messenger == nullptr) { + return; + } + BLI_assert(enabled); + vkDestroyDebugUtilsMessengerEXT_r(vk_instance, vk_debug_utils_messenger, nullptr); + + vk_message_id_number_ignored.clear(); + vk_debug_utils_messenger = nullptr; + return; +} + +bool VKDebuggingTools::is_ignore(int32_t id_number) +{ + bool found = false; + { + std::scoped_lock lock(ignore_mutex); + found = vk_message_id_number_ignored.contains(id_number); + } + return found; +} + +void VKDebuggingTools::add_group(int32_t id_number) +{ + std::scoped_lock lock(ignore_mutex); + vk_message_id_number_ignored.add(id_number); +}; + +void VKDebuggingTools::remove_group(int32_t id_number) +{ + std::scoped_lock lock(ignore_mutex); + vk_message_id_number_ignored.remove(id_number); +}; + +void raise_message(int32_t id_number, + VkDebugUtilsMessageSeverityFlagBitsEXT vk_severity_flag_bits, + const char *format, + ...) +{ + VKContext *context = VKContext::get(); + if (!context) { + return; + } + const VKDevice &device = VKBackend::get().device_get(); + const VKDebuggingTools &debugging_tools = device.debugging_tools_get(); + if (debugging_tools.enabled) { + DynStr *ds = nullptr; + va_list arg; + char *info = nullptr; + + va_start(arg, format); + + ds = BLI_dynstr_new(); + BLI_dynstr_vappendf(ds, format, arg); + info = BLI_dynstr_get_cstring(ds); + BLI_dynstr_free(ds); + + va_end(arg); + + static VkDebugUtilsMessengerCallbackDataEXT vk_call_back_data; + vk_call_back_data.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT; + vk_call_back_data.pNext = VK_NULL_HANDLE; + vk_call_back_data.messageIdNumber = id_number; + vk_call_back_data.pMessageIdName = "VulkanMessenger"; + vk_call_back_data.objectCount = 0; + vk_call_back_data.flags = 0; + vk_call_back_data.pObjects = VK_NULL_HANDLE; + vk_call_back_data.pMessage = info; + debugging_tools.vkSubmitDebugUtilsMessageEXT_r(device.instance_get(), + vk_severity_flag_bits, + VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, + &vk_call_back_data); + MEM_freeN((void *)info); + } +} + +}; // namespace blender::gpu::debug diff --git a/source/blender/gpu/vulkan/vk_debug.hh b/source/blender/gpu/vulkan/vk_debug.hh index 15614695b19..efe615330a9 100644 --- a/source/blender/gpu/vulkan/vk_debug.hh +++ b/source/blender/gpu/vulkan/vk_debug.hh @@ -1,115 +1,88 @@ -/* 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_set.hh" -#include "BLI_string.h" - -#include "vk_common.hh" - -#include -#include - -namespace blender::gpu { -class VKContext; -class VKDevice; - -namespace debug { -class VKDebuggingTools { - public: - bool enabled = false; - VkDebugUtilsMessageSeverityFlagsEXT message_severity = - VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT | - VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | - VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | - VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT; - /* 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; - VKDebuggingTools() = default; - ~VKDebuggingTools(); - void init(VkInstance vk_instance); - void deinit(VkInstance vk_instance); - bool is_ignore(int32_t id_number); - VkResult init_messenger(VkInstance vk_instance); - void destroy_messenger(VkInstance vk_instance); - void print_labels(const VkDebugUtilsMessengerCallbackDataEXT *callback_data); - - private: - VkDebugUtilsMessengerEXT vk_debug_utils_messenger = nullptr; - Set vk_message_id_number_ignored; - std::mutex ignore_mutex; - void print_vulkan_version(); - void add_group(int32_t id_number); - void remove_group(int32_t id_number); -}; - -void object_label(VkObjectType vk_object_type, uint64_t object_handle, const char *name); -template void object_label(T vk_object_type, const char *name) -{ - 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++); - object_label(to_vk_object_type(vk_object_type), (uint64_t)vk_object_type, (const char *)label); -}; - -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); - -/* how to use : debug::raise_message(-12345,VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT,"This is - * a raise message. %llx", (uintptr_t)vk_object); */ -template -void raise_message(int32_t id_number, - VkDebugUtilsMessageSeverityFlagBitsEXT vk_severity_flag_bits, - const char *fmt, - Args... args) -{ - VKContext *context = VKContext::get(); - if (!context) { - return; - } - const VKDevice &device = VKBackend::get().device_get(); - const VKDebuggingTools &debugging_tools = device.debugging_tools_get(); - if (debugging_tools.enabled) { - char *info = BLI_sprintfN(fmt, args...); - static VkDebugUtilsMessengerCallbackDataEXT vk_call_back_data; - vk_call_back_data.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT; - vk_call_back_data.pNext = VK_NULL_HANDLE; - vk_call_back_data.messageIdNumber = id_number; - vk_call_back_data.pMessageIdName = "VulkanMessenger"; - vk_call_back_data.objectCount = 0; - vk_call_back_data.flags = 0; - vk_call_back_data.pObjects = VK_NULL_HANDLE; - vk_call_back_data.pMessage = info; - debugging_tools.vkSubmitDebugUtilsMessageEXT_r(device.instance_get(), - vk_severity_flag_bits, - VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, - &vk_call_back_data); - MEM_freeN((void *)info); - } -} -} // namespace debug -} // namespace blender::gpu +/* 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_set.hh" +#include "BLI_string.h" + +#include "vk_common.hh" + +#include +#include + +namespace blender::gpu { +class VKContext; +class VKDevice; + +namespace debug { +class VKDebuggingTools { + public: + bool enabled = false; + VkDebugUtilsMessageSeverityFlagsEXT message_severity = + VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT; + /* 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; + VKDebuggingTools() = default; + ~VKDebuggingTools(); + void init(VkInstance vk_instance); + void deinit(VkInstance vk_instance); + bool is_ignore(int32_t id_number); + VkResult init_messenger(VkInstance vk_instance); + void destroy_messenger(VkInstance vk_instance); + void print_labels(const VkDebugUtilsMessengerCallbackDataEXT *callback_data); + + private: + VkDebugUtilsMessengerEXT vk_debug_utils_messenger = nullptr; + Set vk_message_id_number_ignored; + std::mutex ignore_mutex; + void print_vulkan_version(); + void add_group(int32_t id_number); + void remove_group(int32_t id_number); +}; + +void object_label(VkObjectType vk_object_type, uint64_t object_handle, const char *name); +template void object_label(T vk_object_type, const char *name) +{ + 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++); + object_label(to_vk_object_type(vk_object_type), (uint64_t)vk_object_type, (const char *)label); +}; + +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); +/* how to use : debug::raise_message(0xB41ca2,VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT,"This + * is a raise message. %llx", (uintptr_t)vk_object); */ +void raise_message(int32_t id_number, + VkDebugUtilsMessageSeverityFlagBitsEXT vk_severity_flag_bits, + const char *fmt, + ...); +} // namespace debug +} // namespace blender::gpu -- 2.30.2 From fa8248700d7f7b76d3a2762737cbac0d4df3c502 Mon Sep 17 00:00:00 2001 From: AgAmemnno Date: Fri, 12 May 2023 02:12:37 +0900 Subject: [PATCH 6/6] FIX:Vulkan:Remove code --- source/blender/gpu/vulkan/vk_debug.cc | 4 ---- 1 file changed, 4 deletions(-) diff --git a/source/blender/gpu/vulkan/vk_debug.cc b/source/blender/gpu/vulkan/vk_debug.cc index 066e03d6382..a475817f66c 100644 --- a/source/blender/gpu/vulkan/vk_debug.cc +++ b/source/blender/gpu/vulkan/vk_debug.cc @@ -408,10 +408,6 @@ void raise_message(int32_t id_number, const char *format, ...) { - VKContext *context = VKContext::get(); - if (!context) { - return; - } const VKDevice &device = VKBackend::get().device_get(); const VKDebuggingTools &debugging_tools = device.debugging_tools_get(); if (debugging_tools.enabled) { -- 2.30.2