From bb7d1f0422099fcafa1913f68c65392688a6c245 Mon Sep 17 00:00:00 2001 From: AgAmemnno Date: Wed, 22 Mar 2023 05:46:21 +0900 Subject: [PATCH 01/21] Fix:Implementing Vulkan Object Labels --- intern/ghost/intern/GHOST_ContextVK.cpp | 11 +++-- source/blender/gpu/CMakeLists.txt | 3 ++ source/blender/gpu/vulkan/vk_common.hh | 64 +++++++++++++++++++++++++ source/blender/gpu/vulkan/vk_context.cc | 7 ++- source/blender/gpu/vulkan/vk_context.hh | 17 +++++-- 5 files changed, 94 insertions(+), 8 deletions(-) diff --git a/intern/ghost/intern/GHOST_ContextVK.cpp b/intern/ghost/intern/GHOST_ContextVK.cpp index 5ac0e4727e8..e4ae847faf1 100644 --- a/intern/ghost/intern/GHOST_ContextVK.cpp +++ b/intern/ghost/intern/GHOST_ContextVK.cpp @@ -863,13 +863,16 @@ GHOST_TSuccess GHOST_ContextVK::initializeDrawingContext() auto extensions_available = getExtensionsAvailable(); vector layers_enabled; - if (m_debug) { - enableLayer(layers_available, layers_enabled, "VK_LAYER_KHRONOS_validation", m_debug); - } - vector extensions_device; vector extensions_enabled; + if (m_debug) { + enableLayer(layers_available, layers_enabled, "VK_LAYER_KHRONOS_validation", m_debug); + requireExtension(extensions_available, extensions_enabled, VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + } + + + if (use_window_surface) { const char *native_surface_extension_name = getPlatformSpecificSurfaceExtension(); diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt index 329cb211c3f..efc899e43b4 100644 --- a/source/blender/gpu/CMakeLists.txt +++ b/source/blender/gpu/CMakeLists.txt @@ -215,6 +215,7 @@ set(VULKAN_SRC vulkan/vk_texture.cc vulkan/vk_uniform_buffer.cc vulkan/vk_vertex_buffer.cc + vulkan/vk_debug.cc vulkan/vk_backend.hh vulkan/vk_batch.hh @@ -242,6 +243,8 @@ set(VULKAN_SRC vulkan/vk_texture.hh vulkan/vk_uniform_buffer.hh vulkan/vk_vertex_buffer.hh + vulkan/vk_debug.hh + ) set(METAL_SRC diff --git a/source/blender/gpu/vulkan/vk_common.hh b/source/blender/gpu/vulkan/vk_common.hh index af661342e57..da24ab30703 100644 --- a/source/blender/gpu/vulkan/vk_common.hh +++ b/source/blender/gpu/vulkan/vk_common.hh @@ -24,5 +24,69 @@ VkFormat to_vk_format(const eGPUTextureFormat format); VkComponentMapping to_vk_component_mapping(const eGPUTextureFormat format); VkImageViewType to_vk_image_view_type(const eGPUTextureType type); VkImageType to_vk_image_type(const eGPUTextureType type); +#ifdef __cplusplus +template VkObjectType to_vk_object_type(T vk_obj) +{ + const type_info &tid = typeid(T); +#define VK_EQ_TYPEID(name, name2) \ + if (tid == typeid(name##)) { \ + return VK_OBJECT_TYPE_##name2; \ + } + VK_EQ_TYPEID(VkInstance, INSTANCE); + VK_EQ_TYPEID(VkPhysicalDevice, PHYSICAL_DEVICE); + VK_EQ_TYPEID(VkDevice, DEVICE); + VK_EQ_TYPEID(VkQueue, QUEUE); + VK_EQ_TYPEID(VkSemaphore, SEMAPHORE); + VK_EQ_TYPEID(VkCommandBuffer, COMMAND_BUFFER); + VK_EQ_TYPEID(VkFence, FENCE); + VK_EQ_TYPEID(VkDeviceMemory, DEVICE_MEMORY); + VK_EQ_TYPEID(VkBuffer, BUFFER); + VK_EQ_TYPEID(VkImage, IMAGE); + + VK_EQ_TYPEID(VkImage, IMAGE); + VK_EQ_TYPEID(VkEvent, EVENT); + VK_EQ_TYPEID(VkQueryPool, QUERY_POOL); + VK_EQ_TYPEID(VkBufferView, BUFFER_VIEW); + VK_EQ_TYPEID(VkImageView, IMAGE_VIEW); + VK_EQ_TYPEID(VkShaderModule, SHADER_MODULE); + VK_EQ_TYPEID(VkPipelineCache, PIPELINE_CACHE); + VK_EQ_TYPEID(VkPipelineLayout, PIPELINE_LAYOUT); + VK_EQ_TYPEID(VkRenderPass, RENDER_PASS); + VK_EQ_TYPEID(VkPipeline, PIPELINE); + VK_EQ_TYPEID(VkDescriptorSetLayout, DESCRIPTOR_SET_LAYOUT); + VK_EQ_TYPEID(VkSampler, SAMPLER); + VK_EQ_TYPEID(VkDescriptorPool, DESCRIPTOR_POOL); + VK_EQ_TYPEID(VkDescriptorSet, DESCRIPTOR_SET); + VK_EQ_TYPEID(VkFramebuffer, FRAMEBUFFER); + VK_EQ_TYPEID(VkCommandPool, COMMAND_POOL); + VK_EQ_TYPEID(VkSamplerYcbcrConversion, SAMPLER_YCBCR_CONVERSION); + VK_EQ_TYPEID(VkDescriptorUpdateTemplate, DESCRIPTOR_UPDATE_TEMPLATE); + VK_EQ_TYPEID(VkSurfaceKHR, SURFACE_KHR); + VK_EQ_TYPEID(VkSwapchainKHR, SWAPCHAIN_KHR); + VK_EQ_TYPEID(VkDisplayKHR, DISPLAY_KHR); + VK_EQ_TYPEID(VkDisplayModeKHR, DISPLAY_MODE_KHR); + VK_EQ_TYPEID(VkDebugReportCallbackEXT,DEBUG_REPORT_CALLBACK_EXT); +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_EQ_TYPEID(VkVideoSessionKHR, VIDEO_SESSION_KHR); +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_EQ_TYPEID(VkVideoSessionParametersKHR, VIDEO_SESSION_PARAMETERS_KHR); +#endif + VK_EQ_TYPEID(VkCuModuleNVX, CU_MODULE_NVX); + VK_EQ_TYPEID(VkCuFunctionNVX, CU_FUNCTION_NVX); + VK_EQ_TYPEID(VkDebugUtilsMessengerEXT, DEBUG_UTILS_MESSENGER_EXT); + VK_EQ_TYPEID(VkAccelerationStructureKHR, ACCELERATION_STRUCTURE_KHR); + VK_EQ_TYPEID(VkValidationCacheEXT, VALIDATION_CACHE_EXT); + VK_EQ_TYPEID(VkAccelerationStructureNV, ACCELERATION_STRUCTURE_NV); + VK_EQ_TYPEID(VkPerformanceConfigurationINTEL, PERFORMANCE_CONFIGURATION_INTEL); + VK_EQ_TYPEID(VkDeferredOperationKHR, DEFERRED_OPERATION_KHR); + VK_EQ_TYPEID(VkIndirectCommandsLayoutNV, INDIRECT_COMMANDS_LAYOUT_NV); + VK_EQ_TYPEID(VkPrivateDataSlotEXT, PRIVATE_DATA_SLOT_EXT); + + BLI_assert_unreachable(); +#undef VK_EQ_TYPEID + return VK_OBJECT_TYPE_UNKNOWN; +} // namespace blender::gpu +#endif } // namespace blender::gpu diff --git a/source/blender/gpu/vulkan/vk_context.cc b/source/blender/gpu/vulkan/vk_context.cc index 42b8d9fbd9a..90c1ab07bbc 100644 --- a/source/blender/gpu/vulkan/vk_context.cc +++ b/source/blender/gpu/vulkan/vk_context.cc @@ -5,6 +5,7 @@ * \ingroup gpu */ +#include "vk_debug.hh" #include "vk_context.hh" #include "vk_backend.hh" @@ -31,8 +32,11 @@ VKContext::VKContext(void *ghost_window, void *ghost_context) &vk_device_, &vk_queue_family_, &vk_queue_); - init_physical_device_limits(); + debug::init_vk_callbacks(this, vkGetInstanceProcAddr); + init_physical_device_limits(); + debug::object_vk_label(this, vk_device_, "LogicalDevice"); + debug::object_vk_label(this, vk_queue_, "GraphicsQueue"); /* Initialize the memory allocator. */ VmaAllocatorCreateInfo info = {}; /* Should use same vulkan version as GHOST (1.2), but set to 1.0 as 1.2 requires @@ -57,6 +61,7 @@ VKContext::VKContext(void *ghost_window, void *ghost_context) VKContext::~VKContext() { vmaDestroyAllocator(mem_allocator_); + debug::destroy_vk_callbacks(this); } void VKContext::init_physical_device_limits() diff --git a/source/blender/gpu/vulkan/vk_context.hh b/source/blender/gpu/vulkan/vk_context.hh index b646492faec..9ac8b82d426 100644 --- a/source/blender/gpu/vulkan/vk_context.hh +++ b/source/blender/gpu/vulkan/vk_context.hh @@ -8,9 +8,10 @@ #pragma once #include "gpu_context_private.hh" - +#include "vk_common.hh" #include "vk_command_buffer.hh" #include "vk_descriptor_pools.hh" +#include "vk_debug.hh" namespace blender::gpu { @@ -30,7 +31,7 @@ class VKContext : public Context { /** Limits of the device linked to this context. */ VkPhysicalDeviceLimits vk_physical_device_limits_; - + debug::VKDebuggingTools vk_debugging_tools; void *ghost_context_; public: @@ -70,6 +71,11 @@ class VKContext : public Context { return vk_physical_device_limits_; } + VkInstance instance_get() const + { + return vk_instance_; + }; + VkDevice device_get() const { return vk_device_; @@ -100,7 +106,12 @@ class VKContext : public Context { return mem_allocator_; } - private: + debug::VKDebuggingTools& debuggingtools_get() + { + return vk_debugging_tools; + } + +private: void init_physical_device_limits(); }; -- 2.30.2 From 2053c4ceae5221cb616c03aaa1a61811b7c3625c Mon Sep 17 00:00:00 2001 From: AgAmemnno Date: Tue, 21 Mar 2023 20:57:33 +0900 Subject: [PATCH 02/21] Add:vk_debug --- source/blender/gpu/vulkan/vk_debug.cc | 254 ++++++++++++++++++++++++++ source/blender/gpu/vulkan/vk_debug.hh | 55 ++++++ 2 files changed, 309 insertions(+) create mode 100644 source/blender/gpu/vulkan/vk_debug.cc create mode 100644 source/blender/gpu/vulkan/vk_debug.hh diff --git a/source/blender/gpu/vulkan/vk_debug.cc b/source/blender/gpu/vulkan/vk_debug.cc new file mode 100644 index 00000000000..430e74659e3 --- /dev/null +++ b/source/blender/gpu/vulkan/vk_debug.cc @@ -0,0 +1,254 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later + * Copyright 2023 Blender Foundation. All rights reserved. */ + + /** \file + * \ingroup gpu + * + * Debug features of Vulkan. + */ + +#include "BLI_set.hh" +#include "BLI_system.h" +#include "BKE_global.h" +#include "CLG_log.h" +#include "GPU_debug.h" +#include "GPU_platform.h" + +#include "vk_common.hh" +#include "vk_debug.hh" +#include "vk_context.hh" + +static CLG_LogRef LOG = { "gpu.debug.vulkan" }; + +namespace blender { + namespace gpu { + + + namespace debug { + + static void vulkan_dynamic_debug_functions(VKContext* ctx, + PFN_vkGetInstanceProcAddr instload) + { + VKDebuggingTools &tools = ctx->debuggingtools_get(); + VkInstance instance = ctx->instance_get(); + + if (instload) { + + tools.enabled = false; + tools.vkCmdBeginDebugUtilsLabelEXT_r = (PFN_vkCmdBeginDebugUtilsLabelEXT)instload( + instance, "vkCmdBeginDebugUtilsLabelEXT"); + tools.vkCmdEndDebugUtilsLabelEXT_r = (PFN_vkCmdEndDebugUtilsLabelEXT)instload( + instance, "vkCmdEndDebugUtilsLabelEXT"); + tools.vkCmdInsertDebugUtilsLabelEXT_r = (PFN_vkCmdInsertDebugUtilsLabelEXT)instload( + instance, "vkCmdInsertDebugUtilsLabelEXT"); + tools.vkCreateDebugUtilsMessengerEXT_r = (PFN_vkCreateDebugUtilsMessengerEXT)instload( + instance, "vkCreateDebugUtilsMessengerEXT"); + tools.vkDestroyDebugUtilsMessengerEXT_r = (PFN_vkDestroyDebugUtilsMessengerEXT)instload( + instance, "vkDestroyDebugUtilsMessengerEXT"); + tools.vkQueueBeginDebugUtilsLabelEXT_r = (PFN_vkQueueBeginDebugUtilsLabelEXT)instload( + instance, "vkQueueBeginDebugUtilsLabelEXT"); + tools.vkQueueEndDebugUtilsLabelEXT_r = (PFN_vkQueueEndDebugUtilsLabelEXT)instload( + instance, "vkQueueEndDebugUtilsLabelEXT"); + tools.vkQueueInsertDebugUtilsLabelEXT_r = (PFN_vkQueueInsertDebugUtilsLabelEXT)instload( + instance, "vkQueueInsertDebugUtilsLabelEXT"); + tools.vkSetDebugUtilsObjectNameEXT_r = (PFN_vkSetDebugUtilsObjectNameEXT)instload( + instance, "vkSetDebugUtilsObjectNameEXT"); + tools.vkSetDebugUtilsObjectTagEXT_r = (PFN_vkSetDebugUtilsObjectTagEXT)instload( + instance, "vkSetDebugUtilsObjectTagEXT"); + tools.vkSubmitDebugUtilsMessageEXT_r = (PFN_vkSubmitDebugUtilsMessageEXT)instload( + instance, "vkSubmitDebugUtilsMessageEXT"); + if (tools.vkCmdBeginDebugUtilsLabelEXT_r) { + tools.enabled = true; + } + } + else { + tools.vkCmdBeginDebugUtilsLabelEXT_r = nullptr; + tools.vkCmdEndDebugUtilsLabelEXT_r = nullptr; + tools.vkCmdInsertDebugUtilsLabelEXT_r = nullptr; + tools.vkCreateDebugUtilsMessengerEXT_r = nullptr; + tools.vkDestroyDebugUtilsMessengerEXT_r = nullptr; + tools.vkQueueBeginDebugUtilsLabelEXT_r = nullptr; + tools.vkQueueEndDebugUtilsLabelEXT_r = nullptr; + tools.vkQueueInsertDebugUtilsLabelEXT_r = nullptr; + tools.vkSetDebugUtilsObjectNameEXT_r = nullptr; + tools.vkSetDebugUtilsObjectTagEXT_r = nullptr; + tools.vkSubmitDebugUtilsMessageEXT_r = nullptr; + tools.enabled = false; + } + } + + bool init_vk_callbacks(VKContext* ctx, PFN_vkGetInstanceProcAddr instload) + { + CLOG_ENSURE(&LOG); + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (instload ) { + vulkan_dynamic_debug_functions(ctx, instload); + return true; + }; + return false; + } + + void destroy_vk_callbacks(VKContext* ctx) + { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + vulkan_dynamic_debug_functions(ctx, nullptr); + } + } + + void object_vk_label(blender::gpu::VKContext* ctx, VkObjectType objType, uint64_t obj, const char* name) + { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + VkDebugUtilsObjectNameInfoEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT; + info.objectType = objType; + info.objectHandle = obj; + info.pObjectName = name; + tools.vkSetDebugUtilsObjectNameEXT_r(ctx->device_get(), &info); + } + } +#if 0 + template<> void object_vk_label(blender::gpu::VKContext* ctx, VkInstance obj, const char* name) + { + char label[64]; + ENUMERATE_NAME(label); + object_vk_label(ctx, VK_OBJECT_TYPE_INSTANCE, (uint64_t)obj, label); + } + template<> void object_vk_label(blender::gpu::VKContext* ctx, VkDevice obj, const char* name) + { + char label[64]; + ENUMERATE_NAME(label); + object_vk_label(ctx, VK_OBJECT_TYPE_DEVICE, (uint64_t)obj, label); + } + template<> void object_vk_label(blender::gpu::VKContext* ctx, VkPipeline obj, const char* name) + { + char label[64]; + ENUMERATE_NAME(label); + object_vk_label(ctx, VK_OBJECT_TYPE_PIPELINE, (uint64_t)obj, label); + } + template<> void object_vk_label(blender::gpu::VKContext* ctx, VkFramebuffer obj, const char* name) + { + char label[64]; + ENUMERATE_NAME(label); + object_vk_label(ctx, VK_OBJECT_TYPE_FRAMEBUFFER, (uint64_t)obj, label); + } + template<> void object_vk_label(blender::gpu::VKContext* ctx, VkImage obj, const char* name) + { + char label[64]; + ENUMERATE_NAME(label); + object_vk_label(ctx, VK_OBJECT_TYPE_IMAGE, (uint64_t)obj, label); + } + template<> void object_vk_label(blender::gpu::VKContext* ctx, VkSampler obj, const char* name) + { + char label[64]; + ENUMERATE_NAME(label); + object_vk_label(ctx, VK_OBJECT_TYPE_SAMPLER, (uint64_t)obj, label); + } + template<> void object_vk_label(blender::gpu::VKContext* ctx, VkBuffer obj, const char* name) + { + char label[64]; + ENUMERATE_NAME(label); + object_vk_label(ctx, VK_OBJECT_TYPE_BUFFER, (uint64_t)obj, label); + } + template<> void object_vk_label(blender::gpu::VKContext* ctx, VkSemaphore obj, const char* name) + { + char label[64]; + ENUMERATE_NAME(label); + object_vk_label(ctx, VK_OBJECT_TYPE_SEMAPHORE, (uint64_t)obj, label); + } + template<> void object_vk_label(blender::gpu::VKContext* ctx, VkRenderPass obj, const char* name) + { + char label[64]; + ENUMERATE_NAME(label); + object_vk_label(ctx, VK_OBJECT_TYPE_RENDER_PASS, (uint64_t)obj, label); + } + template<> void object_vk_label(blender::gpu::VKContext* ctx, VkFence obj, const char* name) + { + char label[64]; + ENUMERATE_NAME(label); + object_vk_label(ctx, VK_OBJECT_TYPE_FENCE, (uint64_t)obj, label); + } + template<> void object_vk_label(blender::gpu::VKContext* ctx, VkDescriptorSet obj, const char* name) + { + char label[64]; + ENUMERATE_NAME(label); + object_vk_label(ctx, VK_OBJECT_TYPE_DESCRIPTOR_SET, (uint64_t)obj, label); + } + template<> void object_vk_label(blender::gpu::VKContext* ctx, VkDescriptorSetLayout obj, const char* name) + { + char label[64]; + ENUMERATE_NAME(label); + object_vk_label(ctx, VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT, (uint64_t)obj, label); + } + template<> void object_vk_label(blender::gpu::VKContext* ctx, VkShaderModule obj, const char* name) + { + char label[64]; + ENUMERATE_NAME(label); + object_vk_label(ctx, VK_OBJECT_TYPE_SHADER_MODULE, (uint64_t)obj, label); + } + template<> void object_vk_label(blender::gpu::VKContext* ctx, VkQueue obj, const char* name) + { + char label[64]; + ENUMERATE_NAME(label); + object_vk_label(ctx, VK_OBJECT_TYPE_QUEUE, (uint64_t)obj, label); + } + template<> void object_vk_label(blender::gpu::VKContext* ctx, VkDescriptorPool obj, const char* name) + { + char label[64]; + ENUMERATE_NAME(label); + object_vk_label(ctx, VK_OBJECT_TYPE_DESCRIPTOR_POOL, (uint64_t)obj, label); + } + + void pushMarker(VkCommandBuffer cmd, const char* name) + { + if (tools.enabled) { + VkDebugUtilsLabelEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; + info.pLabelName = name.c_str(); + tools.vkCmdBeginDebugUtilsLabelEXT_r(cmd, &info); + } + } + void setMarker(VkCommandBuffer cmd, const char* name) + { + if (tools.enabled) { + VkDebugUtilsLabelEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; + info.pLabelName = name.c_str(); + tools.vkCmdInsertDebugUtilsLabelEXT_r(cmd, &info); + } + } + void popMarker(VkCommandBuffer cmd) + { + if (tools.enabled) { + tools.vkCmdEndDebugUtilsLabelEXT_r(cmd); + } + } + void pushMarker(VkQueue q, const char* name) + { + if (tools.enabled) { + VkDebugUtilsLabelEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; + info.pLabelName = name.c_str(); + tools.vkQueueBeginDebugUtilsLabelEXT_r(q, &info); + } + } + void setMarker(VkQueue q, const char* name) + { + if (tools.enabled) { + VkDebugUtilsLabelEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; + info.pLabelName = name.c_str(); + tools.vkQueueInsertDebugUtilsLabelEXT_r(q, &info); + } + } + void popMarker(VkQueue q) + { + if (tools.enabled) { + tools.vkQueueEndDebugUtilsLabelEXT_r(q); + } + } +#endif + } + } +} diff --git a/source/blender/gpu/vulkan/vk_debug.hh b/source/blender/gpu/vulkan/vk_debug.hh new file mode 100644 index 00000000000..720ffb1132e --- /dev/null +++ b/source/blender/gpu/vulkan/vk_debug.hh @@ -0,0 +1,55 @@ +/* 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 +#include + +namespace blender { + namespace gpu { + class VKContext; + namespace debug { + typedef struct VKDebuggingTools { + 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; + + }VKDebuggingTools; + bool init_vk_callbacks(VKContext* ctx, PFN_vkGetInstanceProcAddr instload); + void destroy_vk_callbacks(VKContext* ctx); + template void object_vk_label(VKContext* ctx, T obj, const char* name) { + if (!(G.debug & G_DEBUG_GPU)) { + return; + } + char label[64]; + static int stats = 0; + SNPRINTF(label, "%s_%d", name, stats++); + object_vk_label(ctx, to_vk_object_type(obj), (uint64_t)obj, label); + }; + void object_vk_label(VKContext* ctx, VkObjectType objType, uint64_t obj, const char* name); + void pushMarker(VkCommandBuffer cmd, const char* name); + void setMarker(VkCommandBuffer cmd, const char* name); + void popMarker(VkCommandBuffer cmd); + void pushMarker(VkQueue q, const char* name); + void setMarker(VkQueue q, const char* name); + void popMarker(VkQueue q); + } + } +} -- 2.30.2 From a40f26b433ef60552f6289de7ae9237220af613e Mon Sep 17 00:00:00 2001 From: AgAmemnno Date: Tue, 21 Mar 2023 21:01:12 +0900 Subject: [PATCH 03/21] Fix:vk_debug.cc --- source/blender/gpu/vulkan/vk_debug.cc | 140 -------------------------- 1 file changed, 140 deletions(-) diff --git a/source/blender/gpu/vulkan/vk_debug.cc b/source/blender/gpu/vulkan/vk_debug.cc index 430e74659e3..b527ebbfa58 100644 --- a/source/blender/gpu/vulkan/vk_debug.cc +++ b/source/blender/gpu/vulkan/vk_debug.cc @@ -108,147 +108,7 @@ namespace blender { tools.vkSetDebugUtilsObjectNameEXT_r(ctx->device_get(), &info); } } -#if 0 - template<> void object_vk_label(blender::gpu::VKContext* ctx, VkInstance obj, const char* name) - { - char label[64]; - ENUMERATE_NAME(label); - object_vk_label(ctx, VK_OBJECT_TYPE_INSTANCE, (uint64_t)obj, label); - } - template<> void object_vk_label(blender::gpu::VKContext* ctx, VkDevice obj, const char* name) - { - char label[64]; - ENUMERATE_NAME(label); - object_vk_label(ctx, VK_OBJECT_TYPE_DEVICE, (uint64_t)obj, label); - } - template<> void object_vk_label(blender::gpu::VKContext* ctx, VkPipeline obj, const char* name) - { - char label[64]; - ENUMERATE_NAME(label); - object_vk_label(ctx, VK_OBJECT_TYPE_PIPELINE, (uint64_t)obj, label); - } - template<> void object_vk_label(blender::gpu::VKContext* ctx, VkFramebuffer obj, const char* name) - { - char label[64]; - ENUMERATE_NAME(label); - object_vk_label(ctx, VK_OBJECT_TYPE_FRAMEBUFFER, (uint64_t)obj, label); - } - template<> void object_vk_label(blender::gpu::VKContext* ctx, VkImage obj, const char* name) - { - char label[64]; - ENUMERATE_NAME(label); - object_vk_label(ctx, VK_OBJECT_TYPE_IMAGE, (uint64_t)obj, label); - } - template<> void object_vk_label(blender::gpu::VKContext* ctx, VkSampler obj, const char* name) - { - char label[64]; - ENUMERATE_NAME(label); - object_vk_label(ctx, VK_OBJECT_TYPE_SAMPLER, (uint64_t)obj, label); - } - template<> void object_vk_label(blender::gpu::VKContext* ctx, VkBuffer obj, const char* name) - { - char label[64]; - ENUMERATE_NAME(label); - object_vk_label(ctx, VK_OBJECT_TYPE_BUFFER, (uint64_t)obj, label); - } - template<> void object_vk_label(blender::gpu::VKContext* ctx, VkSemaphore obj, const char* name) - { - char label[64]; - ENUMERATE_NAME(label); - object_vk_label(ctx, VK_OBJECT_TYPE_SEMAPHORE, (uint64_t)obj, label); - } - template<> void object_vk_label(blender::gpu::VKContext* ctx, VkRenderPass obj, const char* name) - { - char label[64]; - ENUMERATE_NAME(label); - object_vk_label(ctx, VK_OBJECT_TYPE_RENDER_PASS, (uint64_t)obj, label); - } - template<> void object_vk_label(blender::gpu::VKContext* ctx, VkFence obj, const char* name) - { - char label[64]; - ENUMERATE_NAME(label); - object_vk_label(ctx, VK_OBJECT_TYPE_FENCE, (uint64_t)obj, label); - } - template<> void object_vk_label(blender::gpu::VKContext* ctx, VkDescriptorSet obj, const char* name) - { - char label[64]; - ENUMERATE_NAME(label); - object_vk_label(ctx, VK_OBJECT_TYPE_DESCRIPTOR_SET, (uint64_t)obj, label); - } - template<> void object_vk_label(blender::gpu::VKContext* ctx, VkDescriptorSetLayout obj, const char* name) - { - char label[64]; - ENUMERATE_NAME(label); - object_vk_label(ctx, VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT, (uint64_t)obj, label); - } - template<> void object_vk_label(blender::gpu::VKContext* ctx, VkShaderModule obj, const char* name) - { - char label[64]; - ENUMERATE_NAME(label); - object_vk_label(ctx, VK_OBJECT_TYPE_SHADER_MODULE, (uint64_t)obj, label); - } - template<> void object_vk_label(blender::gpu::VKContext* ctx, VkQueue obj, const char* name) - { - char label[64]; - ENUMERATE_NAME(label); - object_vk_label(ctx, VK_OBJECT_TYPE_QUEUE, (uint64_t)obj, label); - } - template<> void object_vk_label(blender::gpu::VKContext* ctx, VkDescriptorPool obj, const char* name) - { - char label[64]; - ENUMERATE_NAME(label); - object_vk_label(ctx, VK_OBJECT_TYPE_DESCRIPTOR_POOL, (uint64_t)obj, label); - } - void pushMarker(VkCommandBuffer cmd, const char* name) - { - if (tools.enabled) { - VkDebugUtilsLabelEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; - info.pLabelName = name.c_str(); - tools.vkCmdBeginDebugUtilsLabelEXT_r(cmd, &info); - } - } - void setMarker(VkCommandBuffer cmd, const char* name) - { - if (tools.enabled) { - VkDebugUtilsLabelEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; - info.pLabelName = name.c_str(); - tools.vkCmdInsertDebugUtilsLabelEXT_r(cmd, &info); - } - } - void popMarker(VkCommandBuffer cmd) - { - if (tools.enabled) { - tools.vkCmdEndDebugUtilsLabelEXT_r(cmd); - } - } - void pushMarker(VkQueue q, const char* name) - { - if (tools.enabled) { - VkDebugUtilsLabelEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; - info.pLabelName = name.c_str(); - tools.vkQueueBeginDebugUtilsLabelEXT_r(q, &info); - } - } - void setMarker(VkQueue q, const char* name) - { - if (tools.enabled) { - VkDebugUtilsLabelEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; - info.pLabelName = name.c_str(); - tools.vkQueueInsertDebugUtilsLabelEXT_r(q, &info); - } - } - void popMarker(VkQueue q) - { - if (tools.enabled) { - tools.vkQueueEndDebugUtilsLabelEXT_r(q); - } - } -#endif } } } -- 2.30.2 From fad7e72e513c93c78cbc94015e3b3b2b026ba7c9 Mon Sep 17 00:00:00 2001 From: AgAmemnno Date: Tue, 21 Mar 2023 21:09:20 +0900 Subject: [PATCH 04/21] Fix:Added markerFunctions to vk_debug --- source/blender/gpu/vulkan/vk_debug.cc | 57 +++++++++++++++++++++++++-- source/blender/gpu/vulkan/vk_debug.hh | 12 +++--- 2 files changed, 60 insertions(+), 9 deletions(-) diff --git a/source/blender/gpu/vulkan/vk_debug.cc b/source/blender/gpu/vulkan/vk_debug.cc index b527ebbfa58..621f8cdac90 100644 --- a/source/blender/gpu/vulkan/vk_debug.cc +++ b/source/blender/gpu/vulkan/vk_debug.cc @@ -76,7 +76,6 @@ namespace blender { tools.enabled = false; } } - bool init_vk_callbacks(VKContext* ctx, PFN_vkGetInstanceProcAddr instload) { CLOG_ENSURE(&LOG); @@ -87,7 +86,6 @@ namespace blender { }; return false; } - void destroy_vk_callbacks(VKContext* ctx) { VKDebuggingTools tools = ctx->debuggingtools_get(); @@ -95,7 +93,6 @@ namespace blender { vulkan_dynamic_debug_functions(ctx, nullptr); } } - void object_vk_label(blender::gpu::VKContext* ctx, VkObjectType objType, uint64_t obj, const char* name) { VKDebuggingTools tools = ctx->debuggingtools_get(); @@ -108,6 +105,60 @@ namespace blender { tools.vkSetDebugUtilsObjectNameEXT_r(ctx->device_get(), &info); } } + void pushMarker(blender::gpu::VKContext *ctx, VkCommandBuffer cmd, const char *name) + { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + VkDebugUtilsLabelEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; + info.pLabelName = name; + tools.vkCmdBeginDebugUtilsLabelEXT_r(cmd, &info); + } + } + void setMarker(blender::gpu::VKContext *ctx, VkCommandBuffer cmd, const char *name) + { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + VkDebugUtilsLabelEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; + info.pLabelName = name; + tools.vkCmdInsertDebugUtilsLabelEXT_r(cmd, &info); + } + } + void popMarker(blender::gpu::VKContext *ctx, VkCommandBuffer cmd) + { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + tools.vkCmdEndDebugUtilsLabelEXT_r(cmd); + } + } + void pushMarker(blender::gpu::VKContext *ctx, VkQueue q, const char *name) + { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + VkDebugUtilsLabelEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; + info.pLabelName = name; + tools.vkQueueBeginDebugUtilsLabelEXT_r(q, &info); + } + } + void setMarker(blender::gpu::VKContext *ctx, VkQueue q, const char *name) + { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + VkDebugUtilsLabelEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; + info.pLabelName = name; + tools.vkQueueInsertDebugUtilsLabelEXT_r(q, &info); + } + } + void popMarker(blender::gpu::VKContext *ctx, VkQueue q) + { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + tools.vkQueueEndDebugUtilsLabelEXT_r(q); + } + } } } diff --git a/source/blender/gpu/vulkan/vk_debug.hh b/source/blender/gpu/vulkan/vk_debug.hh index 720ffb1132e..02d8b0afb27 100644 --- a/source/blender/gpu/vulkan/vk_debug.hh +++ b/source/blender/gpu/vulkan/vk_debug.hh @@ -44,12 +44,12 @@ namespace blender { object_vk_label(ctx, to_vk_object_type(obj), (uint64_t)obj, label); }; void object_vk_label(VKContext* ctx, VkObjectType objType, uint64_t obj, const char* name); - void pushMarker(VkCommandBuffer cmd, const char* name); - void setMarker(VkCommandBuffer cmd, const char* name); - void popMarker(VkCommandBuffer cmd); - void pushMarker(VkQueue q, const char* name); - void setMarker(VkQueue q, const char* name); - void popMarker(VkQueue q); + void pushMarker(VKContext *ctx, VkCommandBuffer cmd, const char *name); + void setMarker(VKContext *ctx, VkCommandBuffer cmd, const char *name); + void popMarker(VKContext *ctx, VkCommandBuffer cmd); + void pushMarker(VKContext *ctx, VkQueue q, const char *name); + void setMarker(VKContext *ctx, VkQueue q, const char *name); + void popMarker(VKContext *ctx, VkQueue q); } } } -- 2.30.2 From 6b6283b22bd3c5f9899a76de18b8b9c3462de60d Mon Sep 17 00:00:00 2001 From: AgAmemnno Date: Tue, 21 Mar 2023 21:13:16 +0900 Subject: [PATCH 05/21] Fix:Added runtime mode to markerFunctions --- source/blender/gpu/vulkan/vk_debug.cc | 72 ++++++++++++++++----------- 1 file changed, 42 insertions(+), 30 deletions(-) diff --git a/source/blender/gpu/vulkan/vk_debug.cc b/source/blender/gpu/vulkan/vk_debug.cc index 621f8cdac90..5b5071cf83d 100644 --- a/source/blender/gpu/vulkan/vk_debug.cc +++ b/source/blender/gpu/vulkan/vk_debug.cc @@ -107,56 +107,68 @@ namespace blender { } void pushMarker(blender::gpu::VKContext *ctx, VkCommandBuffer cmd, const char *name) { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - VkDebugUtilsLabelEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; - info.pLabelName = name; - tools.vkCmdBeginDebugUtilsLabelEXT_r(cmd, &info); + if (G.debug & G_DEBUG_GPU) { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + VkDebugUtilsLabelEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; + info.pLabelName = name; + tools.vkCmdBeginDebugUtilsLabelEXT_r(cmd, &info); + } } } void setMarker(blender::gpu::VKContext *ctx, VkCommandBuffer cmd, const char *name) { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - VkDebugUtilsLabelEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; - info.pLabelName = name; - tools.vkCmdInsertDebugUtilsLabelEXT_r(cmd, &info); + if (G.debug & G_DEBUG_GPU) { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + VkDebugUtilsLabelEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; + info.pLabelName = name; + tools.vkCmdInsertDebugUtilsLabelEXT_r(cmd, &info); + } } } void popMarker(blender::gpu::VKContext *ctx, VkCommandBuffer cmd) { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - tools.vkCmdEndDebugUtilsLabelEXT_r(cmd); + if (G.debug & G_DEBUG_GPU) { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + tools.vkCmdEndDebugUtilsLabelEXT_r(cmd); + } } } void pushMarker(blender::gpu::VKContext *ctx, VkQueue q, const char *name) { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - VkDebugUtilsLabelEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; - info.pLabelName = name; - tools.vkQueueBeginDebugUtilsLabelEXT_r(q, &info); + if (G.debug & G_DEBUG_GPU) { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + VkDebugUtilsLabelEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; + info.pLabelName = name; + tools.vkQueueBeginDebugUtilsLabelEXT_r(q, &info); + } } } void setMarker(blender::gpu::VKContext *ctx, VkQueue q, const char *name) { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - VkDebugUtilsLabelEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; - info.pLabelName = name; - tools.vkQueueInsertDebugUtilsLabelEXT_r(q, &info); + if (G.debug & G_DEBUG_GPU) { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + VkDebugUtilsLabelEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; + info.pLabelName = name; + tools.vkQueueInsertDebugUtilsLabelEXT_r(q, &info); + } } } void popMarker(blender::gpu::VKContext *ctx, VkQueue q) { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - tools.vkQueueEndDebugUtilsLabelEXT_r(q); + if (G.debug & G_DEBUG_GPU) { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + tools.vkQueueEndDebugUtilsLabelEXT_r(q); + } } } -- 2.30.2 From e76a52c66d1c17606dc57555eb3b8e9acf60c0e8 Mon Sep 17 00:00:00 2001 From: vnapdv Date: Wed, 22 Mar 2023 07:44:55 +0900 Subject: [PATCH 06/21] FIX:For linux build --- source/blender/gpu/vulkan/vk_common.hh | 7 ++++--- source/blender/gpu/vulkan/vk_debug.cc | 1 - source/blender/gpu/vulkan/vk_debug.hh | 11 +++++++---- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/source/blender/gpu/vulkan/vk_common.hh b/source/blender/gpu/vulkan/vk_common.hh index da24ab30703..f1c9e300179 100644 --- a/source/blender/gpu/vulkan/vk_common.hh +++ b/source/blender/gpu/vulkan/vk_common.hh @@ -16,6 +16,7 @@ #include "vk_mem_alloc.h" #include "gpu_texture_private.hh" +#include namespace blender::gpu { @@ -25,11 +26,11 @@ VkComponentMapping to_vk_component_mapping(const eGPUTextureFormat format); VkImageViewType to_vk_image_view_type(const eGPUTextureType type); VkImageType to_vk_image_type(const eGPUTextureType type); #ifdef __cplusplus -template VkObjectType to_vk_object_type(T vk_obj) +template VkObjectType to_vk_object_type(T /*vk_obj*/) { - const type_info &tid = typeid(T); + const std::type_info &tid = typeid(T); #define VK_EQ_TYPEID(name, name2) \ - if (tid == typeid(name##)) { \ + if (tid == typeid(name)) { \ return VK_OBJECT_TYPE_##name2; \ } diff --git a/source/blender/gpu/vulkan/vk_debug.cc b/source/blender/gpu/vulkan/vk_debug.cc index 5b5071cf83d..062bb1fb1b2 100644 --- a/source/blender/gpu/vulkan/vk_debug.cc +++ b/source/blender/gpu/vulkan/vk_debug.cc @@ -79,7 +79,6 @@ namespace blender { bool init_vk_callbacks(VKContext* ctx, PFN_vkGetInstanceProcAddr instload) { CLOG_ENSURE(&LOG); - VKDebuggingTools tools = ctx->debuggingtools_get(); if (instload ) { vulkan_dynamic_debug_functions(ctx, instload); return true; diff --git a/source/blender/gpu/vulkan/vk_debug.hh b/source/blender/gpu/vulkan/vk_debug.hh index 02d8b0afb27..9d9020dc2bb 100644 --- a/source/blender/gpu/vulkan/vk_debug.hh +++ b/source/blender/gpu/vulkan/vk_debug.hh @@ -34,16 +34,19 @@ namespace blender { }VKDebuggingTools; bool init_vk_callbacks(VKContext* ctx, PFN_vkGetInstanceProcAddr instload); void destroy_vk_callbacks(VKContext* ctx); + void object_vk_label(VKContext* ctx, VkObjectType objType, uint64_t obj, const char* name); template void object_vk_label(VKContext* ctx, T obj, const char* name) { if (!(G.debug & G_DEBUG_GPU)) { - return; + //return; } - char label[64]; + 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_vk_label(ctx, to_vk_object_type(obj), (uint64_t)obj, label); + object_vk_label(ctx, to_vk_object_type(obj), (uint64_t)obj, (const char*)label); }; - void object_vk_label(VKContext* ctx, VkObjectType objType, uint64_t obj, const char* name); + void pushMarker(VKContext *ctx, VkCommandBuffer cmd, const char *name); void setMarker(VKContext *ctx, VkCommandBuffer cmd, const char *name); void popMarker(VKContext *ctx, VkCommandBuffer cmd); -- 2.30.2 From c8f675f2775a3ce98576b6ec5c025874da6e78a0 Mon Sep 17 00:00:00 2001 From: AgAmemnno Date: Fri, 24 Mar 2023 09:16:50 +0900 Subject: [PATCH 07/21] Resolve Process: vk_debug,vk_context --- source/blender/gpu/vulkan/vk_debug.cc | 227 +++++++------------------- 1 file changed, 56 insertions(+), 171 deletions(-) diff --git a/source/blender/gpu/vulkan/vk_debug.cc b/source/blender/gpu/vulkan/vk_debug.cc index 5b5071cf83d..bb0807a1c81 100644 --- a/source/blender/gpu/vulkan/vk_debug.cc +++ b/source/blender/gpu/vulkan/vk_debug.cc @@ -1,177 +1,62 @@ /* SPDX-License-Identifier: GPL-2.0-or-later * Copyright 2023 Blender Foundation. All rights reserved. */ - /** \file - * \ingroup gpu - * - * Debug features of Vulkan. - */ +/** \file + * \ingroup gpu + */ -#include "BLI_set.hh" -#include "BLI_system.h" -#include "BKE_global.h" -#include "CLG_log.h" -#include "GPU_debug.h" -#include "GPU_platform.h" +#include "vk_backend.hh" +#include "vk_context.hh" -#include "vk_common.hh" -#include "vk_debug.hh" -#include "vk_context.hh" - -static CLG_LogRef LOG = { "gpu.debug.vulkan" }; - -namespace blender { - namespace gpu { - - - namespace debug { - - static void vulkan_dynamic_debug_functions(VKContext* ctx, - PFN_vkGetInstanceProcAddr instload) - { - VKDebuggingTools &tools = ctx->debuggingtools_get(); - VkInstance instance = ctx->instance_get(); - - if (instload) { - - tools.enabled = false; - tools.vkCmdBeginDebugUtilsLabelEXT_r = (PFN_vkCmdBeginDebugUtilsLabelEXT)instload( - instance, "vkCmdBeginDebugUtilsLabelEXT"); - tools.vkCmdEndDebugUtilsLabelEXT_r = (PFN_vkCmdEndDebugUtilsLabelEXT)instload( - instance, "vkCmdEndDebugUtilsLabelEXT"); - tools.vkCmdInsertDebugUtilsLabelEXT_r = (PFN_vkCmdInsertDebugUtilsLabelEXT)instload( - instance, "vkCmdInsertDebugUtilsLabelEXT"); - tools.vkCreateDebugUtilsMessengerEXT_r = (PFN_vkCreateDebugUtilsMessengerEXT)instload( - instance, "vkCreateDebugUtilsMessengerEXT"); - tools.vkDestroyDebugUtilsMessengerEXT_r = (PFN_vkDestroyDebugUtilsMessengerEXT)instload( - instance, "vkDestroyDebugUtilsMessengerEXT"); - tools.vkQueueBeginDebugUtilsLabelEXT_r = (PFN_vkQueueBeginDebugUtilsLabelEXT)instload( - instance, "vkQueueBeginDebugUtilsLabelEXT"); - tools.vkQueueEndDebugUtilsLabelEXT_r = (PFN_vkQueueEndDebugUtilsLabelEXT)instload( - instance, "vkQueueEndDebugUtilsLabelEXT"); - tools.vkQueueInsertDebugUtilsLabelEXT_r = (PFN_vkQueueInsertDebugUtilsLabelEXT)instload( - instance, "vkQueueInsertDebugUtilsLabelEXT"); - tools.vkSetDebugUtilsObjectNameEXT_r = (PFN_vkSetDebugUtilsObjectNameEXT)instload( - instance, "vkSetDebugUtilsObjectNameEXT"); - tools.vkSetDebugUtilsObjectTagEXT_r = (PFN_vkSetDebugUtilsObjectTagEXT)instload( - instance, "vkSetDebugUtilsObjectTagEXT"); - tools.vkSubmitDebugUtilsMessageEXT_r = (PFN_vkSubmitDebugUtilsMessageEXT)instload( - instance, "vkSubmitDebugUtilsMessageEXT"); - if (tools.vkCmdBeginDebugUtilsLabelEXT_r) { - tools.enabled = true; - } - } - else { - tools.vkCmdBeginDebugUtilsLabelEXT_r = nullptr; - tools.vkCmdEndDebugUtilsLabelEXT_r = nullptr; - tools.vkCmdInsertDebugUtilsLabelEXT_r = nullptr; - tools.vkCreateDebugUtilsMessengerEXT_r = nullptr; - tools.vkDestroyDebugUtilsMessengerEXT_r = nullptr; - tools.vkQueueBeginDebugUtilsLabelEXT_r = nullptr; - tools.vkQueueEndDebugUtilsLabelEXT_r = nullptr; - tools.vkQueueInsertDebugUtilsLabelEXT_r = nullptr; - tools.vkSetDebugUtilsObjectNameEXT_r = nullptr; - tools.vkSetDebugUtilsObjectTagEXT_r = nullptr; - tools.vkSubmitDebugUtilsMessageEXT_r = nullptr; - tools.enabled = false; - } - } - bool init_vk_callbacks(VKContext* ctx, PFN_vkGetInstanceProcAddr instload) - { - CLOG_ENSURE(&LOG); - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (instload ) { - vulkan_dynamic_debug_functions(ctx, instload); - return true; - }; - return false; - } - void destroy_vk_callbacks(VKContext* ctx) - { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - vulkan_dynamic_debug_functions(ctx, nullptr); - } - } - void object_vk_label(blender::gpu::VKContext* ctx, VkObjectType objType, uint64_t obj, const char* name) - { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - VkDebugUtilsObjectNameInfoEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT; - info.objectType = objType; - info.objectHandle = obj; - info.pObjectName = name; - tools.vkSetDebugUtilsObjectNameEXT_r(ctx->device_get(), &info); - } - } - void pushMarker(blender::gpu::VKContext *ctx, VkCommandBuffer cmd, const char *name) - { - if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - VkDebugUtilsLabelEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; - info.pLabelName = name; - tools.vkCmdBeginDebugUtilsLabelEXT_r(cmd, &info); - } - } - } - void setMarker(blender::gpu::VKContext *ctx, VkCommandBuffer cmd, const char *name) - { - if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - VkDebugUtilsLabelEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; - info.pLabelName = name; - tools.vkCmdInsertDebugUtilsLabelEXT_r(cmd, &info); - } - } - } - void popMarker(blender::gpu::VKContext *ctx, VkCommandBuffer cmd) - { - if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - tools.vkCmdEndDebugUtilsLabelEXT_r(cmd); - } - } - } - void pushMarker(blender::gpu::VKContext *ctx, VkQueue q, const char *name) - { - if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - VkDebugUtilsLabelEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; - info.pLabelName = name; - tools.vkQueueBeginDebugUtilsLabelEXT_r(q, &info); - } - } - } - void setMarker(blender::gpu::VKContext *ctx, VkQueue q, const char *name) - { - if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - VkDebugUtilsLabelEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; - info.pLabelName = name; - tools.vkQueueInsertDebugUtilsLabelEXT_r(q, &info); - } - } - } - void popMarker(blender::gpu::VKContext *ctx, VkQueue q) - { - if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - tools.vkQueueEndDebugUtilsLabelEXT_r(q); - } - } - } - - } - } +namespace blender::gpu { +void VKContext::debug_group_begin(const char *, int) +{ } + +void VKContext::debug_group_end() +{ +} + +bool VKContext::debug_capture_begin() +{ + return VKBackend::get().debug_capture_begin(vk_instance_); +} + +bool VKBackend::debug_capture_begin(VkInstance vk_instance) +{ +#ifdef WITH_RENDERDOC + return renderdoc_api_.start_frame_capture(vk_instance, nullptr); +#else + UNUSED_VARS(vk_instance); + return false; +#endif +} + +void VKContext::debug_capture_end() +{ + VKBackend::get().debug_capture_end(vk_instance_); +} + +void VKBackend::debug_capture_end(VkInstance vk_instance) +{ +#ifdef WITH_RENDERDOC + renderdoc_api_.end_frame_capture(vk_instance, nullptr); +#else + UNUSED_VARS(vk_instance); +#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 \ No newline at end of file -- 2.30.2 From a10da2cae58d03b52a96fe4609f8bb5bf9001510 Mon Sep 17 00:00:00 2001 From: AgAmemnno Date: Fri, 24 Mar 2023 09:34:52 +0900 Subject: [PATCH 08/21] Resolve:vk_debug.cc --- source/blender/gpu/vulkan/vk_debug.cc | 211 ++++++-------------------- 1 file changed, 49 insertions(+), 162 deletions(-) diff --git a/source/blender/gpu/vulkan/vk_debug.cc b/source/blender/gpu/vulkan/vk_debug.cc index 23f359fc444..bb0807a1c81 100644 --- a/source/blender/gpu/vulkan/vk_debug.cc +++ b/source/blender/gpu/vulkan/vk_debug.cc @@ -1,175 +1,62 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later + * Copyright 2023 Blender Foundation. All rights reserved. */ - /** \file - * \ingroup gpu - * - * Debug features of Vulkan. - */ +/** \file + * \ingroup gpu + */ -#include "BLI_set.hh" -#include "BLI_system.h" -#include "BKE_global.h" -#include "CLG_log.h" -#include "GPU_debug.h" -#include "GPU_platform.h" +#include "vk_backend.hh" +#include "vk_context.hh" -#include "vk_common.hh" -#include "vk_debug.hh" -#include "vk_context.hh" +namespace blender::gpu { +void VKContext::debug_group_begin(const char *, int) +{ +} -static CLG_LogRef LOG = { "gpu.debug.vulkan" }; +void VKContext::debug_group_end() +{ +} -namespace blender { - namespace gpu { +bool VKContext::debug_capture_begin() +{ + return VKBackend::get().debug_capture_begin(vk_instance_); +} +bool VKBackend::debug_capture_begin(VkInstance vk_instance) +{ +#ifdef WITH_RENDERDOC + return renderdoc_api_.start_frame_capture(vk_instance, nullptr); +#else + UNUSED_VARS(vk_instance); + return false; +#endif +} - namespace debug { +void VKContext::debug_capture_end() +{ + VKBackend::get().debug_capture_end(vk_instance_); +} - static void vulkan_dynamic_debug_functions(VKContext* ctx, - PFN_vkGetInstanceProcAddr instload) - { - VKDebuggingTools &tools = ctx->debuggingtools_get(); - VkInstance instance = ctx->instance_get(); +void VKBackend::debug_capture_end(VkInstance vk_instance) +{ +#ifdef WITH_RENDERDOC + renderdoc_api_.end_frame_capture(vk_instance, nullptr); +#else + UNUSED_VARS(vk_instance); +#endif +} - if (instload) { +void *VKContext::debug_capture_scope_create(const char * /*name*/) +{ + return nullptr; +} - tools.enabled = false; - tools.vkCmdBeginDebugUtilsLabelEXT_r = (PFN_vkCmdBeginDebugUtilsLabelEXT)instload( - instance, "vkCmdBeginDebugUtilsLabelEXT"); - tools.vkCmdEndDebugUtilsLabelEXT_r = (PFN_vkCmdEndDebugUtilsLabelEXT)instload( - instance, "vkCmdEndDebugUtilsLabelEXT"); - tools.vkCmdInsertDebugUtilsLabelEXT_r = (PFN_vkCmdInsertDebugUtilsLabelEXT)instload( - instance, "vkCmdInsertDebugUtilsLabelEXT"); - tools.vkCreateDebugUtilsMessengerEXT_r = (PFN_vkCreateDebugUtilsMessengerEXT)instload( - instance, "vkCreateDebugUtilsMessengerEXT"); - tools.vkDestroyDebugUtilsMessengerEXT_r = (PFN_vkDestroyDebugUtilsMessengerEXT)instload( - instance, "vkDestroyDebugUtilsMessengerEXT"); - tools.vkQueueBeginDebugUtilsLabelEXT_r = (PFN_vkQueueBeginDebugUtilsLabelEXT)instload( - instance, "vkQueueBeginDebugUtilsLabelEXT"); - tools.vkQueueEndDebugUtilsLabelEXT_r = (PFN_vkQueueEndDebugUtilsLabelEXT)instload( - instance, "vkQueueEndDebugUtilsLabelEXT"); - tools.vkQueueInsertDebugUtilsLabelEXT_r = (PFN_vkQueueInsertDebugUtilsLabelEXT)instload( - instance, "vkQueueInsertDebugUtilsLabelEXT"); - tools.vkSetDebugUtilsObjectNameEXT_r = (PFN_vkSetDebugUtilsObjectNameEXT)instload( - instance, "vkSetDebugUtilsObjectNameEXT"); - tools.vkSetDebugUtilsObjectTagEXT_r = (PFN_vkSetDebugUtilsObjectTagEXT)instload( - instance, "vkSetDebugUtilsObjectTagEXT"); - tools.vkSubmitDebugUtilsMessageEXT_r = (PFN_vkSubmitDebugUtilsMessageEXT)instload( - instance, "vkSubmitDebugUtilsMessageEXT"); - if (tools.vkCmdBeginDebugUtilsLabelEXT_r) { - tools.enabled = true; - } - } - else { - tools.vkCmdBeginDebugUtilsLabelEXT_r = nullptr; - tools.vkCmdEndDebugUtilsLabelEXT_r = nullptr; - tools.vkCmdInsertDebugUtilsLabelEXT_r = nullptr; - tools.vkCreateDebugUtilsMessengerEXT_r = nullptr; - tools.vkDestroyDebugUtilsMessengerEXT_r = nullptr; - tools.vkQueueBeginDebugUtilsLabelEXT_r = nullptr; - tools.vkQueueEndDebugUtilsLabelEXT_r = nullptr; - tools.vkQueueInsertDebugUtilsLabelEXT_r = nullptr; - tools.vkSetDebugUtilsObjectNameEXT_r = nullptr; - tools.vkSetDebugUtilsObjectTagEXT_r = nullptr; - tools.vkSubmitDebugUtilsMessageEXT_r = nullptr; - tools.enabled = false; - } - } - bool init_vk_callbacks(VKContext* ctx, PFN_vkGetInstanceProcAddr instload) - { - CLOG_ENSURE(&LOG); - if (instload ) { - vulkan_dynamic_debug_functions(ctx, instload); - return true; - }; - return false; - } - void destroy_vk_callbacks(VKContext* ctx) - { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - vulkan_dynamic_debug_functions(ctx, nullptr); - } - } - void object_vk_label(blender::gpu::VKContext* ctx, VkObjectType objType, uint64_t obj, const char* name) - { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - VkDebugUtilsObjectNameInfoEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT; - info.objectType = objType; - info.objectHandle = obj; - info.pObjectName = name; - tools.vkSetDebugUtilsObjectNameEXT_r(ctx->device_get(), &info); - } - } - void pushMarker(blender::gpu::VKContext *ctx, VkCommandBuffer cmd, const char *name) - { - if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - VkDebugUtilsLabelEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; - info.pLabelName = name; - tools.vkCmdBeginDebugUtilsLabelEXT_r(cmd, &info); - } - } - } - void setMarker(blender::gpu::VKContext *ctx, VkCommandBuffer cmd, const char *name) - { - if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - VkDebugUtilsLabelEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; - info.pLabelName = name; - tools.vkCmdInsertDebugUtilsLabelEXT_r(cmd, &info); - } - } - } - void popMarker(blender::gpu::VKContext *ctx, VkCommandBuffer cmd) - { - if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - tools.vkCmdEndDebugUtilsLabelEXT_r(cmd); - } - } - } - void pushMarker(blender::gpu::VKContext *ctx, VkQueue q, const char *name) - { - if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - VkDebugUtilsLabelEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; - info.pLabelName = name; - tools.vkQueueBeginDebugUtilsLabelEXT_r(q, &info); - } - } - } - void setMarker(blender::gpu::VKContext *ctx, VkQueue q, const char *name) - { - if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - VkDebugUtilsLabelEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; - info.pLabelName = name; - tools.vkQueueInsertDebugUtilsLabelEXT_r(q, &info); - } - } - } - void popMarker(blender::gpu::VKContext *ctx, VkQueue q) - { - if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - tools.vkQueueEndDebugUtilsLabelEXT_r(q); - } - } - } +bool VKContext::debug_capture_scope_begin(void * /*scope*/) +{ + return false; +} - } - } +void VKContext::debug_capture_scope_end(void * /*scope*/) +{ } } // namespace blender::gpu \ No newline at end of file -- 2.30.2 From d497fa2a601eeb4c8d678e871ce0da1f106dd306 Mon Sep 17 00:00:00 2001 From: AgAmemnno Date: Fri, 24 Mar 2023 19:11:43 +0900 Subject: [PATCH 09/21] Add:Extensions for using Vulkan's debugUtils --- source/blender/gpu/CMakeLists.txt | 1 - source/blender/gpu/vulkan/vk_context.cc | 8 +- source/blender/gpu/vulkan/vk_debug.cc | 162 +++++++++++++++++++++++- source/blender/gpu/vulkan/vk_debug.hh | 2 +- 4 files changed, 165 insertions(+), 8 deletions(-) diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt index 96c987b6b9b..90edf2fa644 100644 --- a/source/blender/gpu/CMakeLists.txt +++ b/source/blender/gpu/CMakeLists.txt @@ -227,7 +227,6 @@ set(VULKAN_SRC vulkan/vk_texture.cc vulkan/vk_uniform_buffer.cc vulkan/vk_vertex_buffer.cc - vulkan/vk_debug.cc vulkan/vk_backend.hh vulkan/vk_batch.hh diff --git a/source/blender/gpu/vulkan/vk_context.cc b/source/blender/gpu/vulkan/vk_context.cc index 7b5d651f4aa..03241cbf93e 100644 --- a/source/blender/gpu/vulkan/vk_context.cc +++ b/source/blender/gpu/vulkan/vk_context.cc @@ -4,7 +4,6 @@ /** \file * \ingroup gpu */ - #include "vk_debug.hh" #include "vk_context.hh" @@ -32,11 +31,12 @@ VKContext::VKContext(void *ghost_window, void *ghost_context) &vk_device_, &vk_queue_family_, &vk_queue_); - debug::init_vk_callbacks(this, vkGetInstanceProcAddr); init_physical_device_limits(); - debug::object_vk_label(this, vk_device_, "LogicalDevice"); - debug::object_vk_label(this, vk_queue_, "GraphicsQueue"); + + debug::object_vk_label(this, vk_device_, "VkLogicalDevice"); + debug::object_vk_label(this, vk_queue_, "VkGraphicsQueue"); + /* Initialize the memory allocator. */ VmaAllocatorCreateInfo info = {}; /* Should use same vulkan version as GHOST (1.2), but set to 1.0 as 1.2 requires diff --git a/source/blender/gpu/vulkan/vk_debug.cc b/source/blender/gpu/vulkan/vk_debug.cc index bb0807a1c81..8023336051f 100644 --- a/source/blender/gpu/vulkan/vk_debug.cc +++ b/source/blender/gpu/vulkan/vk_debug.cc @@ -4,9 +4,13 @@ /** \file * \ingroup gpu */ - +#include "BKE_global.h" +#include "CLG_log.h" +#include "vk_common.hh" +#include "vk_debug.hh" #include "vk_backend.hh" #include "vk_context.hh" +static CLG_LogRef LOG = { "gpu.debug.vulkan" }; namespace blender::gpu { void VKContext::debug_group_begin(const char *, int) @@ -59,4 +63,158 @@ bool VKContext::debug_capture_scope_begin(void * /*scope*/) void VKContext::debug_capture_scope_end(void * /*scope*/) { } -} // namespace blender::gpu \ No newline at end of file + +} // namespace blender::gpu + +namespace blender::gpu::debug{ + + static void vulkan_dynamic_debug_functions(VKContext* ctx, + PFN_vkGetInstanceProcAddr instload) + { + VKDebuggingTools &tools = ctx->debuggingtools_get(); + VkInstance instance = ctx->instance_get(); + + if (instload) { + + tools.enabled = false; + tools.vkCmdBeginDebugUtilsLabelEXT_r = (PFN_vkCmdBeginDebugUtilsLabelEXT)instload( + instance, "vkCmdBeginDebugUtilsLabelEXT"); + tools.vkCmdEndDebugUtilsLabelEXT_r = (PFN_vkCmdEndDebugUtilsLabelEXT)instload( + instance, "vkCmdEndDebugUtilsLabelEXT"); + tools.vkCmdInsertDebugUtilsLabelEXT_r = (PFN_vkCmdInsertDebugUtilsLabelEXT)instload( + instance, "vkCmdInsertDebugUtilsLabelEXT"); + tools.vkCreateDebugUtilsMessengerEXT_r = (PFN_vkCreateDebugUtilsMessengerEXT)instload( + instance, "vkCreateDebugUtilsMessengerEXT"); + tools.vkDestroyDebugUtilsMessengerEXT_r = (PFN_vkDestroyDebugUtilsMessengerEXT)instload( + instance, "vkDestroyDebugUtilsMessengerEXT"); + tools.vkQueueBeginDebugUtilsLabelEXT_r = (PFN_vkQueueBeginDebugUtilsLabelEXT)instload( + instance, "vkQueueBeginDebugUtilsLabelEXT"); + tools.vkQueueEndDebugUtilsLabelEXT_r = (PFN_vkQueueEndDebugUtilsLabelEXT)instload( + instance, "vkQueueEndDebugUtilsLabelEXT"); + tools.vkQueueInsertDebugUtilsLabelEXT_r = (PFN_vkQueueInsertDebugUtilsLabelEXT)instload( + instance, "vkQueueInsertDebugUtilsLabelEXT"); + tools.vkSetDebugUtilsObjectNameEXT_r = (PFN_vkSetDebugUtilsObjectNameEXT)instload( + instance, "vkSetDebugUtilsObjectNameEXT"); + tools.vkSetDebugUtilsObjectTagEXT_r = (PFN_vkSetDebugUtilsObjectTagEXT)instload( + instance, "vkSetDebugUtilsObjectTagEXT"); + tools.vkSubmitDebugUtilsMessageEXT_r = (PFN_vkSubmitDebugUtilsMessageEXT)instload( + instance, "vkSubmitDebugUtilsMessageEXT"); + if (tools.vkCmdBeginDebugUtilsLabelEXT_r) { + tools.enabled = true; + } + } + else { + tools.vkCmdBeginDebugUtilsLabelEXT_r = nullptr; + tools.vkCmdEndDebugUtilsLabelEXT_r = nullptr; + tools.vkCmdInsertDebugUtilsLabelEXT_r = nullptr; + tools.vkCreateDebugUtilsMessengerEXT_r = nullptr; + tools.vkDestroyDebugUtilsMessengerEXT_r = nullptr; + tools.vkQueueBeginDebugUtilsLabelEXT_r = nullptr; + tools.vkQueueEndDebugUtilsLabelEXT_r = nullptr; + tools.vkQueueInsertDebugUtilsLabelEXT_r = nullptr; + tools.vkSetDebugUtilsObjectNameEXT_r = nullptr; + tools.vkSetDebugUtilsObjectTagEXT_r = nullptr; + tools.vkSubmitDebugUtilsMessageEXT_r = nullptr; + tools.enabled = false; + } + } + + bool init_vk_callbacks(VKContext* ctx, PFN_vkGetInstanceProcAddr instload) + { + CLOG_ENSURE(&LOG); + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (instload ) { + vulkan_dynamic_debug_functions(ctx, instload); + return true; + }; + return false; + } + void destroy_vk_callbacks(VKContext* ctx) + { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + vulkan_dynamic_debug_functions(ctx, nullptr); + } + } + void object_vk_label(blender::gpu::VKContext* ctx, VkObjectType objType, uint64_t obj, const char* name) + { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + VkDebugUtilsObjectNameInfoEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT; + info.objectType = objType; + info.objectHandle = obj; + info.pObjectName = name; + tools.vkSetDebugUtilsObjectNameEXT_r(ctx->device_get(), &info); + } + } + void pushMarker(blender::gpu::VKContext *ctx, VkCommandBuffer cmd, const char *name) + { + if (G.debug & G_DEBUG_GPU) { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + VkDebugUtilsLabelEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; + info.pLabelName = name; + tools.vkCmdBeginDebugUtilsLabelEXT_r(cmd, &info); + } + } + } + void setMarker(blender::gpu::VKContext *ctx, VkCommandBuffer cmd, const char *name) + { + if (G.debug & G_DEBUG_GPU) { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + VkDebugUtilsLabelEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; + info.pLabelName = name; + tools.vkCmdInsertDebugUtilsLabelEXT_r(cmd, &info); + } + } + } + void popMarker(blender::gpu::VKContext *ctx, VkCommandBuffer cmd) + { + if (G.debug & G_DEBUG_GPU) { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + tools.vkCmdEndDebugUtilsLabelEXT_r(cmd); + } + } + } + void pushMarker(blender::gpu::VKContext *ctx, VkQueue q, const char *name) + { + if (G.debug & G_DEBUG_GPU) { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + VkDebugUtilsLabelEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; + info.pLabelName = name; + tools.vkQueueBeginDebugUtilsLabelEXT_r(q, &info); + } + } + } + void setMarker(blender::gpu::VKContext *ctx, VkQueue q, const char *name) + { + if (G.debug & G_DEBUG_GPU) { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + VkDebugUtilsLabelEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; + info.pLabelName = name; + tools.vkQueueInsertDebugUtilsLabelEXT_r(q, &info); + } + } + } + void popMarker(blender::gpu::VKContext *ctx, VkQueue q) + { + if (G.debug & G_DEBUG_GPU) { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + tools.vkQueueEndDebugUtilsLabelEXT_r(q); + } + } + } + + +} + diff --git a/source/blender/gpu/vulkan/vk_debug.hh b/source/blender/gpu/vulkan/vk_debug.hh index 9d9020dc2bb..8df8f7920e6 100644 --- a/source/blender/gpu/vulkan/vk_debug.hh +++ b/source/blender/gpu/vulkan/vk_debug.hh @@ -37,7 +37,7 @@ namespace blender { void object_vk_label(VKContext* ctx, VkObjectType objType, uint64_t obj, const char* name); template void object_vk_label(VKContext* ctx, T obj, const char* name) { if (!(G.debug & G_DEBUG_GPU)) { - //return; + return; } const size_t label_size = 64; char label[label_size]; -- 2.30.2 From a50ad4c497461e37b070a56027c1eb69ee3ecd02 Mon Sep 17 00:00:00 2001 From: AgAmemnno Date: Sat, 25 Mar 2023 00:58:56 +0900 Subject: [PATCH 10/21] FIX:Refactoring related to foramat --- intern/ghost/intern/GHOST_ContextVK.cpp | 2 - source/blender/gpu/CMakeLists.txt | 3 +- source/blender/gpu/vulkan/vk_common.hh | 25 +- source/blender/gpu/vulkan/vk_context.cc | 2 +- source/blender/gpu/vulkan/vk_context.hh | 4 +- source/blender/gpu/vulkan/vk_debug.cc | 312 ++++++++++++------------ source/blender/gpu/vulkan/vk_debug.hh | 96 ++++---- 7 files changed, 229 insertions(+), 215 deletions(-) diff --git a/intern/ghost/intern/GHOST_ContextVK.cpp b/intern/ghost/intern/GHOST_ContextVK.cpp index e4ae847faf1..e5b6d8a4bcc 100644 --- a/intern/ghost/intern/GHOST_ContextVK.cpp +++ b/intern/ghost/intern/GHOST_ContextVK.cpp @@ -871,8 +871,6 @@ GHOST_TSuccess GHOST_ContextVK::initializeDrawingContext() requireExtension(extensions_available, extensions_enabled, VK_EXT_DEBUG_UTILS_EXTENSION_NAME); } - - if (use_window_surface) { const char *native_surface_extension_name = getPlatformSpecificSurfaceExtension(); diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt index 90edf2fa644..642c8273c6a 100644 --- a/source/blender/gpu/CMakeLists.txt +++ b/source/blender/gpu/CMakeLists.txt @@ -235,6 +235,7 @@ set(VULKAN_SRC vulkan/vk_common.hh vulkan/vk_context.hh vulkan/vk_data_conversion.hh + vulkan/vk_debug.hh vulkan/vk_descriptor_pools.hh vulkan/vk_descriptor_set.hh vulkan/vk_drawlist.hh @@ -256,7 +257,7 @@ set(VULKAN_SRC vulkan/vk_texture.hh vulkan/vk_uniform_buffer.hh vulkan/vk_vertex_buffer.hh - vulkan/vk_debug.hh + ) diff --git a/source/blender/gpu/vulkan/vk_common.hh b/source/blender/gpu/vulkan/vk_common.hh index f1c9e300179..c8926b28b65 100644 --- a/source/blender/gpu/vulkan/vk_common.hh +++ b/source/blender/gpu/vulkan/vk_common.hh @@ -7,6 +7,8 @@ #pragma once +#include + #ifdef __APPLE__ # include #else @@ -16,7 +18,6 @@ #include "vk_mem_alloc.h" #include "gpu_texture_private.hh" -#include namespace blender::gpu { @@ -29,10 +30,10 @@ VkImageType to_vk_image_type(const eGPUTextureType type); template VkObjectType to_vk_object_type(T /*vk_obj*/) { const std::type_info &tid = typeid(T); -#define VK_EQ_TYPEID(name, name2) \ - if (tid == typeid(name)) { \ - return VK_OBJECT_TYPE_##name2; \ - } +# define VK_EQ_TYPEID(name, name2) \ + if (tid == typeid(name)) { \ + return VK_OBJECT_TYPE_##name2; \ + } VK_EQ_TYPEID(VkInstance, INSTANCE); VK_EQ_TYPEID(VkPhysicalDevice, PHYSICAL_DEVICE); @@ -67,13 +68,13 @@ template VkObjectType to_vk_object_type(T /*vk_obj*/) VK_EQ_TYPEID(VkSwapchainKHR, SWAPCHAIN_KHR); VK_EQ_TYPEID(VkDisplayKHR, DISPLAY_KHR); VK_EQ_TYPEID(VkDisplayModeKHR, DISPLAY_MODE_KHR); - VK_EQ_TYPEID(VkDebugReportCallbackEXT,DEBUG_REPORT_CALLBACK_EXT); -#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_EQ_TYPEID(VkDebugReportCallbackEXT, DEBUG_REPORT_CALLBACK_EXT); +# ifdef VK_ENABLE_BETA_EXTENSIONS VK_EQ_TYPEID(VkVideoSessionKHR, VIDEO_SESSION_KHR); -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS +# endif +# ifdef VK_ENABLE_BETA_EXTENSIONS VK_EQ_TYPEID(VkVideoSessionParametersKHR, VIDEO_SESSION_PARAMETERS_KHR); -#endif +# endif VK_EQ_TYPEID(VkCuModuleNVX, CU_MODULE_NVX); VK_EQ_TYPEID(VkCuFunctionNVX, CU_FUNCTION_NVX); VK_EQ_TYPEID(VkDebugUtilsMessengerEXT, DEBUG_UTILS_MESSENGER_EXT); @@ -86,8 +87,8 @@ template VkObjectType to_vk_object_type(T /*vk_obj*/) VK_EQ_TYPEID(VkPrivateDataSlotEXT, PRIVATE_DATA_SLOT_EXT); BLI_assert_unreachable(); -#undef VK_EQ_TYPEID +# undef VK_EQ_TYPEID return VK_OBJECT_TYPE_UNKNOWN; -} // namespace blender::gpu +} #endif } // namespace blender::gpu diff --git a/source/blender/gpu/vulkan/vk_context.cc b/source/blender/gpu/vulkan/vk_context.cc index 03241cbf93e..11007067b33 100644 --- a/source/blender/gpu/vulkan/vk_context.cc +++ b/source/blender/gpu/vulkan/vk_context.cc @@ -4,8 +4,8 @@ /** \file * \ingroup gpu */ -#include "vk_debug.hh" #include "vk_context.hh" +#include "vk_debug.hh" #include "vk_backend.hh" #include "vk_framebuffer.hh" diff --git a/source/blender/gpu/vulkan/vk_context.hh b/source/blender/gpu/vulkan/vk_context.hh index 9ac8b82d426..120d0720236 100644 --- a/source/blender/gpu/vulkan/vk_context.hh +++ b/source/blender/gpu/vulkan/vk_context.hh @@ -8,10 +8,10 @@ #pragma once #include "gpu_context_private.hh" -#include "vk_common.hh" #include "vk_command_buffer.hh" -#include "vk_descriptor_pools.hh" +#include "vk_common.hh" #include "vk_debug.hh" +#include "vk_descriptor_pools.hh" namespace blender::gpu { diff --git a/source/blender/gpu/vulkan/vk_debug.cc b/source/blender/gpu/vulkan/vk_debug.cc index 8023336051f..bd715d6880e 100644 --- a/source/blender/gpu/vulkan/vk_debug.cc +++ b/source/blender/gpu/vulkan/vk_debug.cc @@ -4,13 +4,16 @@ /** \file * \ingroup gpu */ -#include "BKE_global.h" -#include "CLG_log.h" -#include "vk_common.hh" + +#include "BKE_global.h" +#include "CLG_log.h" + #include "vk_debug.hh" #include "vk_backend.hh" +#include "vk_common.hh" #include "vk_context.hh" -static CLG_LogRef LOG = { "gpu.debug.vulkan" }; + +static CLG_LogRef LOG = {"gpu.debug.vulkan"}; namespace blender::gpu { void VKContext::debug_group_begin(const char *, int) @@ -66,155 +69,162 @@ void VKContext::debug_capture_scope_end(void * /*scope*/) } // namespace blender::gpu -namespace blender::gpu::debug{ +namespace blender::gpu::debug { - static void vulkan_dynamic_debug_functions(VKContext* ctx, - PFN_vkGetInstanceProcAddr instload) - { - VKDebuggingTools &tools = ctx->debuggingtools_get(); - VkInstance instance = ctx->instance_get(); - - if (instload) { - - tools.enabled = false; - tools.vkCmdBeginDebugUtilsLabelEXT_r = (PFN_vkCmdBeginDebugUtilsLabelEXT)instload( - instance, "vkCmdBeginDebugUtilsLabelEXT"); - tools.vkCmdEndDebugUtilsLabelEXT_r = (PFN_vkCmdEndDebugUtilsLabelEXT)instload( - instance, "vkCmdEndDebugUtilsLabelEXT"); - tools.vkCmdInsertDebugUtilsLabelEXT_r = (PFN_vkCmdInsertDebugUtilsLabelEXT)instload( - instance, "vkCmdInsertDebugUtilsLabelEXT"); - tools.vkCreateDebugUtilsMessengerEXT_r = (PFN_vkCreateDebugUtilsMessengerEXT)instload( - instance, "vkCreateDebugUtilsMessengerEXT"); - tools.vkDestroyDebugUtilsMessengerEXT_r = (PFN_vkDestroyDebugUtilsMessengerEXT)instload( - instance, "vkDestroyDebugUtilsMessengerEXT"); - tools.vkQueueBeginDebugUtilsLabelEXT_r = (PFN_vkQueueBeginDebugUtilsLabelEXT)instload( - instance, "vkQueueBeginDebugUtilsLabelEXT"); - tools.vkQueueEndDebugUtilsLabelEXT_r = (PFN_vkQueueEndDebugUtilsLabelEXT)instload( - instance, "vkQueueEndDebugUtilsLabelEXT"); - tools.vkQueueInsertDebugUtilsLabelEXT_r = (PFN_vkQueueInsertDebugUtilsLabelEXT)instload( - instance, "vkQueueInsertDebugUtilsLabelEXT"); - tools.vkSetDebugUtilsObjectNameEXT_r = (PFN_vkSetDebugUtilsObjectNameEXT)instload( - instance, "vkSetDebugUtilsObjectNameEXT"); - tools.vkSetDebugUtilsObjectTagEXT_r = (PFN_vkSetDebugUtilsObjectTagEXT)instload( - instance, "vkSetDebugUtilsObjectTagEXT"); - tools.vkSubmitDebugUtilsMessageEXT_r = (PFN_vkSubmitDebugUtilsMessageEXT)instload( - instance, "vkSubmitDebugUtilsMessageEXT"); - if (tools.vkCmdBeginDebugUtilsLabelEXT_r) { - tools.enabled = true; - } - } - else { - tools.vkCmdBeginDebugUtilsLabelEXT_r = nullptr; - tools.vkCmdEndDebugUtilsLabelEXT_r = nullptr; - tools.vkCmdInsertDebugUtilsLabelEXT_r = nullptr; - tools.vkCreateDebugUtilsMessengerEXT_r = nullptr; - tools.vkDestroyDebugUtilsMessengerEXT_r = nullptr; - tools.vkQueueBeginDebugUtilsLabelEXT_r = nullptr; - tools.vkQueueEndDebugUtilsLabelEXT_r = nullptr; - tools.vkQueueInsertDebugUtilsLabelEXT_r = nullptr; - tools.vkSetDebugUtilsObjectNameEXT_r = nullptr; - tools.vkSetDebugUtilsObjectTagEXT_r = nullptr; - tools.vkSubmitDebugUtilsMessageEXT_r = nullptr; - tools.enabled = false; - } - } - - bool init_vk_callbacks(VKContext* ctx, PFN_vkGetInstanceProcAddr instload) - { - CLOG_ENSURE(&LOG); - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (instload ) { - vulkan_dynamic_debug_functions(ctx, instload); - return true; - }; - return false; - } - void destroy_vk_callbacks(VKContext* ctx) - { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - vulkan_dynamic_debug_functions(ctx, nullptr); - } - } - void object_vk_label(blender::gpu::VKContext* ctx, VkObjectType objType, uint64_t obj, const char* name) - { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - VkDebugUtilsObjectNameInfoEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT; - info.objectType = objType; - info.objectHandle = obj; - info.pObjectName = name; - tools.vkSetDebugUtilsObjectNameEXT_r(ctx->device_get(), &info); - } - } - void pushMarker(blender::gpu::VKContext *ctx, VkCommandBuffer cmd, const char *name) - { - if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - VkDebugUtilsLabelEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; - info.pLabelName = name; - tools.vkCmdBeginDebugUtilsLabelEXT_r(cmd, &info); - } - } - } - void setMarker(blender::gpu::VKContext *ctx, VkCommandBuffer cmd, const char *name) - { - if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - VkDebugUtilsLabelEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; - info.pLabelName = name; - tools.vkCmdInsertDebugUtilsLabelEXT_r(cmd, &info); - } - } - } - void popMarker(blender::gpu::VKContext *ctx, VkCommandBuffer cmd) - { - if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - tools.vkCmdEndDebugUtilsLabelEXT_r(cmd); - } - } - } - void pushMarker(blender::gpu::VKContext *ctx, VkQueue q, const char *name) - { - if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - VkDebugUtilsLabelEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; - info.pLabelName = name; - tools.vkQueueBeginDebugUtilsLabelEXT_r(q, &info); - } - } - } - void setMarker(blender::gpu::VKContext *ctx, VkQueue q, const char *name) - { - if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - VkDebugUtilsLabelEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; - info.pLabelName = name; - tools.vkQueueInsertDebugUtilsLabelEXT_r(q, &info); - } - } - } - void popMarker(blender::gpu::VKContext *ctx, VkQueue q) - { - if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - tools.vkQueueEndDebugUtilsLabelEXT_r(q); - } - } - } +static void vulkan_dynamic_debug_functions(VKContext *ctx, PFN_vkGetInstanceProcAddr instload) +{ + VKDebuggingTools &tools = ctx->debuggingtools_get(); + VkInstance instance = ctx->instance_get(); + if (instload) { + tools.enabled = false; + tools.vkCmdBeginDebugUtilsLabelEXT_r = (PFN_vkCmdBeginDebugUtilsLabelEXT)instload( + instance, "vkCmdBeginDebugUtilsLabelEXT"); + tools.vkCmdEndDebugUtilsLabelEXT_r = (PFN_vkCmdEndDebugUtilsLabelEXT)instload( + instance, "vkCmdEndDebugUtilsLabelEXT"); + tools.vkCmdInsertDebugUtilsLabelEXT_r = (PFN_vkCmdInsertDebugUtilsLabelEXT)instload( + instance, "vkCmdInsertDebugUtilsLabelEXT"); + tools.vkCreateDebugUtilsMessengerEXT_r = (PFN_vkCreateDebugUtilsMessengerEXT)instload( + instance, "vkCreateDebugUtilsMessengerEXT"); + tools.vkDestroyDebugUtilsMessengerEXT_r = (PFN_vkDestroyDebugUtilsMessengerEXT)instload( + instance, "vkDestroyDebugUtilsMessengerEXT"); + tools.vkQueueBeginDebugUtilsLabelEXT_r = (PFN_vkQueueBeginDebugUtilsLabelEXT)instload( + instance, "vkQueueBeginDebugUtilsLabelEXT"); + tools.vkQueueEndDebugUtilsLabelEXT_r = (PFN_vkQueueEndDebugUtilsLabelEXT)instload( + instance, "vkQueueEndDebugUtilsLabelEXT"); + tools.vkQueueInsertDebugUtilsLabelEXT_r = (PFN_vkQueueInsertDebugUtilsLabelEXT)instload( + instance, "vkQueueInsertDebugUtilsLabelEXT"); + tools.vkSetDebugUtilsObjectNameEXT_r = (PFN_vkSetDebugUtilsObjectNameEXT)instload( + instance, "vkSetDebugUtilsObjectNameEXT"); + tools.vkSetDebugUtilsObjectTagEXT_r = (PFN_vkSetDebugUtilsObjectTagEXT)instload( + instance, "vkSetDebugUtilsObjectTagEXT"); + tools.vkSubmitDebugUtilsMessageEXT_r = (PFN_vkSubmitDebugUtilsMessageEXT)instload( + instance, "vkSubmitDebugUtilsMessageEXT"); + if (tools.vkCmdBeginDebugUtilsLabelEXT_r) { + tools.enabled = true; + } + } + else { + tools.vkCmdBeginDebugUtilsLabelEXT_r = nullptr; + tools.vkCmdEndDebugUtilsLabelEXT_r = nullptr; + tools.vkCmdInsertDebugUtilsLabelEXT_r = nullptr; + tools.vkCreateDebugUtilsMessengerEXT_r = nullptr; + tools.vkDestroyDebugUtilsMessengerEXT_r = nullptr; + tools.vkQueueBeginDebugUtilsLabelEXT_r = nullptr; + tools.vkQueueEndDebugUtilsLabelEXT_r = nullptr; + tools.vkQueueInsertDebugUtilsLabelEXT_r = nullptr; + tools.vkSetDebugUtilsObjectNameEXT_r = nullptr; + tools.vkSetDebugUtilsObjectTagEXT_r = nullptr; + tools.vkSubmitDebugUtilsMessageEXT_r = nullptr; + tools.enabled = false; + } } +bool init_vk_callbacks(VKContext *ctx, PFN_vkGetInstanceProcAddr instload) +{ + CLOG_ENSURE(&LOG); + if (instload) { + vulkan_dynamic_debug_functions(ctx, instload); + return true; + }; + return false; +} + +void destroy_vk_callbacks(VKContext *ctx) +{ + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + vulkan_dynamic_debug_functions(ctx, nullptr); + } +} + +void object_vk_label(blender::gpu::VKContext *ctx, + VkObjectType objType, + uint64_t obj, + const char *name) +{ + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + VkDebugUtilsObjectNameInfoEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT; + info.objectType = objType; + info.objectHandle = obj; + info.pObjectName = name; + tools.vkSetDebugUtilsObjectNameEXT_r(ctx->device_get(), &info); + } +} + +void pushMarker(blender::gpu::VKContext *ctx, VkCommandBuffer cmd, const char *name) +{ + if (G.debug & G_DEBUG_GPU) { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + VkDebugUtilsLabelEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; + info.pLabelName = name; + tools.vkCmdBeginDebugUtilsLabelEXT_r(cmd, &info); + } + } +} + +void setMarker(blender::gpu::VKContext *ctx, VkCommandBuffer cmd, const char *name) +{ + if (G.debug & G_DEBUG_GPU) { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + VkDebugUtilsLabelEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; + info.pLabelName = name; + tools.vkCmdInsertDebugUtilsLabelEXT_r(cmd, &info); + } + } +} + +void popMarker(blender::gpu::VKContext *ctx, VkCommandBuffer cmd) +{ + if (G.debug & G_DEBUG_GPU) { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + tools.vkCmdEndDebugUtilsLabelEXT_r(cmd); + } + } +} + +void pushMarker(blender::gpu::VKContext *ctx, VkQueue q, const char *name) +{ + if (G.debug & G_DEBUG_GPU) { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + VkDebugUtilsLabelEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; + info.pLabelName = name; + tools.vkQueueBeginDebugUtilsLabelEXT_r(q, &info); + } + } +} + +void setMarker(blender::gpu::VKContext *ctx, VkQueue q, const char *name) +{ + if (G.debug & G_DEBUG_GPU) { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + VkDebugUtilsLabelEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; + info.pLabelName = name; + tools.vkQueueInsertDebugUtilsLabelEXT_r(q, &info); + } + } +} + +void popMarker(blender::gpu::VKContext *ctx, VkQueue q) +{ + if (G.debug & G_DEBUG_GPU) { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + tools.vkQueueEndDebugUtilsLabelEXT_r(q); + } + } +} + +} // namespace blender::gpu::debug diff --git a/source/blender/gpu/vulkan/vk_debug.hh b/source/blender/gpu/vulkan/vk_debug.hh index 8df8f7920e6..d6dfabb70f2 100644 --- a/source/blender/gpu/vulkan/vk_debug.hh +++ b/source/blender/gpu/vulkan/vk_debug.hh @@ -1,58 +1,62 @@ /* SPDX-License-Identifier: GPL-2.0-or-later * Copyright 2023 Blender Foundation. All rights reserved. */ - /** \file - * \ingroup gpu - */ +/** \file + * \ingroup gpu + */ #pragma once #include "BKE_global.h" #include "BLI_string.h" + #include "vk_common.hh" -#include + #include namespace blender { - namespace gpu { - class VKContext; - namespace debug { - typedef struct VKDebuggingTools { - 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; +namespace gpu { +class VKContext; +namespace debug { +typedef struct VKDebuggingTools { + 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; - }VKDebuggingTools; - bool init_vk_callbacks(VKContext* ctx, PFN_vkGetInstanceProcAddr instload); - void destroy_vk_callbacks(VKContext* ctx); - void object_vk_label(VKContext* ctx, VkObjectType objType, uint64_t obj, const char* name); - template void object_vk_label(VKContext* ctx, T obj, 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_vk_label(ctx, to_vk_object_type(obj), (uint64_t)obj, (const char*)label); - }; - - void pushMarker(VKContext *ctx, VkCommandBuffer cmd, const char *name); - void setMarker(VKContext *ctx, VkCommandBuffer cmd, const char *name); - void popMarker(VKContext *ctx, VkCommandBuffer cmd); - void pushMarker(VKContext *ctx, VkQueue q, const char *name); - void setMarker(VKContext *ctx, VkQueue q, const char *name); - void popMarker(VKContext *ctx, VkQueue q); - } - } -} +} VKDebuggingTools; +bool init_vk_callbacks(VKContext *ctx, PFN_vkGetInstanceProcAddr instload); +void destroy_vk_callbacks(VKContext *ctx); +void object_vk_label(VKContext *ctx, VkObjectType objType, uint64_t obj, const char *name); + +template void object_vk_label(VKContext *ctx, T obj, 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_vk_label(ctx, to_vk_object_type(obj), (uint64_t)obj, (const char *)label); +}; + +void pushMarker(VKContext *ctx, VkCommandBuffer cmd, const char *name); +void setMarker(VKContext *ctx, VkCommandBuffer cmd, const char *name); +void popMarker(VKContext *ctx, VkCommandBuffer cmd); +void pushMarker(VKContext *ctx, VkQueue q, const char *name); +void setMarker(VKContext *ctx, VkQueue q, const char *name); +void popMarker(VKContext *ctx, VkQueue q); + +} // namespace debug +} // namespace gpu +} // namespace blender -- 2.30.2 From 0c2ac3fbeb337aa2279998b29fde60d1a9922703 Mon Sep 17 00:00:00 2001 From: AgAmemnno Date: Wed, 29 Mar 2023 05:49:47 +0900 Subject: [PATCH 11/21] FIX:vk_debug refactoring Added check for DebugFlag. --- source/blender/gpu/vulkan/vk_debug.cc | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/source/blender/gpu/vulkan/vk_debug.cc b/source/blender/gpu/vulkan/vk_debug.cc index bd715d6880e..ba9e5bfe1fa 100644 --- a/source/blender/gpu/vulkan/vk_debug.cc +++ b/source/blender/gpu/vulkan/vk_debug.cc @@ -144,14 +144,16 @@ void object_vk_label(blender::gpu::VKContext *ctx, uint64_t obj, const char *name) { - VKDebuggingTools tools = ctx->debuggingtools_get(); - if (tools.enabled) { - VkDebugUtilsObjectNameInfoEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT; - info.objectType = objType; - info.objectHandle = obj; - info.pObjectName = name; - tools.vkSetDebugUtilsObjectNameEXT_r(ctx->device_get(), &info); + if (G.debug & G_DEBUG_GPU) { + VKDebuggingTools tools = ctx->debuggingtools_get(); + if (tools.enabled) { + VkDebugUtilsObjectNameInfoEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT; + info.objectType = objType; + info.objectHandle = obj; + info.pObjectName = name; + tools.vkSetDebugUtilsObjectNameEXT_r(ctx->device_get(), &info); + } } } -- 2.30.2 From d81a9f8961404f7a9fd31ce1e4c9055b72ba73ea Mon Sep 17 00:00:00 2001 From: AgAmemnno Date: Wed, 29 Mar 2023 06:51:01 +0900 Subject: [PATCH 12/21] FIX:Refactoring ObjectLabeling About format and resolution of conflict. --- source/blender/gpu/vulkan/vk_context.hh | 11 +++++++---- source/blender/gpu/vulkan/vk_debug.cc | 6 ------ source/blender/gpu/vulkan/vk_debug.hh | 6 ++---- 3 files changed, 9 insertions(+), 14 deletions(-) diff --git a/source/blender/gpu/vulkan/vk_context.hh b/source/blender/gpu/vulkan/vk_context.hh index f851bf8f72d..e93570b7bc2 100644 --- a/source/blender/gpu/vulkan/vk_context.hh +++ b/source/blender/gpu/vulkan/vk_context.hh @@ -32,7 +32,10 @@ class VKContext : public Context { /** Limits of the device linked to this context. */ VkPhysicalDeviceLimits vk_physical_device_limits_; - debug::VKDebuggingTools vk_debugging_tools; + + /** Functions of vk_ext_debugutils to use in this context. */ + debug::VKDebuggingTools vk_debugging_tools_; + void *ghost_context_; public: @@ -110,12 +113,12 @@ class VKContext : public Context { return mem_allocator_; } - debug::VKDebuggingTools& debuggingtools_get() + debug::VKDebuggingTools &debuggingtools_get() { - return vk_debugging_tools; + return vk_debugging_tools_; } -private: + private: void init_physical_device_limits(); bool has_active_framebuffer() const; diff --git a/source/blender/gpu/vulkan/vk_debug.cc b/source/blender/gpu/vulkan/vk_debug.cc index ba9e5bfe1fa..337acbff79c 100644 --- a/source/blender/gpu/vulkan/vk_debug.cc +++ b/source/blender/gpu/vulkan/vk_debug.cc @@ -6,15 +6,11 @@ */ #include "BKE_global.h" -#include "CLG_log.h" #include "vk_debug.hh" #include "vk_backend.hh" -#include "vk_common.hh" #include "vk_context.hh" -static CLG_LogRef LOG = {"gpu.debug.vulkan"}; - namespace blender::gpu { void VKContext::debug_group_begin(const char *, int) { @@ -66,7 +62,6 @@ bool VKContext::debug_capture_scope_begin(void * /*scope*/) void VKContext::debug_capture_scope_end(void * /*scope*/) { } - } // namespace blender::gpu namespace blender::gpu::debug { @@ -123,7 +118,6 @@ static void vulkan_dynamic_debug_functions(VKContext *ctx, PFN_vkGetInstanceProc bool init_vk_callbacks(VKContext *ctx, PFN_vkGetInstanceProcAddr instload) { - CLOG_ENSURE(&LOG); if (instload) { vulkan_dynamic_debug_functions(ctx, instload); return true; diff --git a/source/blender/gpu/vulkan/vk_debug.hh b/source/blender/gpu/vulkan/vk_debug.hh index d6dfabb70f2..dc78dc71135 100644 --- a/source/blender/gpu/vulkan/vk_debug.hh +++ b/source/blender/gpu/vulkan/vk_debug.hh @@ -13,8 +13,7 @@ #include -namespace blender { -namespace gpu { +namespace blender::gpu { class VKContext; namespace debug { typedef struct VKDebuggingTools { @@ -58,5 +57,4 @@ void setMarker(VKContext *ctx, VkQueue q, const char *name); void popMarker(VKContext *ctx, VkQueue q); } // namespace debug -} // namespace gpu -} // namespace blender +} // namespace blender::gpu -- 2.30.2 From 1328bb0774f99b821a4a5cc8f6ceaf2001460bc0 Mon Sep 17 00:00:00 2001 From: AgAmemnno Date: Mon, 3 Apr 2023 22:34:15 +0900 Subject: [PATCH 13/21] FIX:Vector compile error for windows --- source/blender/gpu/vulkan/vk_framebuffer.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/gpu/vulkan/vk_framebuffer.cc b/source/blender/gpu/vulkan/vk_framebuffer.cc index b6d7518e776..d58b585dfcb 100644 --- a/source/blender/gpu/vulkan/vk_framebuffer.cc +++ b/source/blender/gpu/vulkan/vk_framebuffer.cc @@ -330,7 +330,7 @@ void VKFrameBuffer::render_pass_create() VkSubpassDescription subpass = {}; subpass.pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS; subpass.colorAttachmentCount = color_attachment_len; - subpass.pColorAttachments = attachment_references.begin(); + subpass.pColorAttachments = attachment_references.data(); if (has_depth_attachment) { subpass.pDepthStencilAttachment = &attachment_references[depth_location]; } @@ -351,7 +351,7 @@ void VKFrameBuffer::render_pass_create() framebuffer_create_info.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO; framebuffer_create_info.renderPass = vk_render_pass_; framebuffer_create_info.attachmentCount = attachment_len; - framebuffer_create_info.pAttachments = image_views.begin(); + framebuffer_create_info.pAttachments = image_views.data(); framebuffer_create_info.width = width_; framebuffer_create_info.height = height_; framebuffer_create_info.layers = 1; -- 2.30.2 From 35bfe856b629b91c842246f62a8cb5d2ea512eb9 Mon Sep 17 00:00:00 2001 From: AgAmemnno Date: Mon, 3 Apr 2023 22:56:29 +0900 Subject: [PATCH 14/21] FIX:Refactoring Support VulkanObjectLabel,etc Added naming convention for vulkan objects. --- source/blender/gpu/vulkan/vk_context.cc | 8 ++-- source/blender/gpu/vulkan/vk_debug.cc | 50 ++++++++++++------------- source/blender/gpu/vulkan/vk_debug.hh | 22 +++++------ 3 files changed, 40 insertions(+), 40 deletions(-) diff --git a/source/blender/gpu/vulkan/vk_context.cc b/source/blender/gpu/vulkan/vk_context.cc index 20418969283..a71910ee71a 100644 --- a/source/blender/gpu/vulkan/vk_context.cc +++ b/source/blender/gpu/vulkan/vk_context.cc @@ -31,11 +31,11 @@ VKContext::VKContext(void *ghost_window, void *ghost_context) &vk_device_, &vk_queue_family_, &vk_queue_); - debug::init_vk_callbacks(this, vkGetInstanceProcAddr); + debug::init_callbacks(this, vkGetInstanceProcAddr); init_physical_device_limits(); - debug::object_vk_label(this, vk_device_, "VkLogicalDevice"); - debug::object_vk_label(this, vk_queue_, "VkGraphicsQueue"); + debug::object_label(this, vk_device_, "LogicalDevice"); + debug::object_label(this, vk_queue_, "GenericQueue"); /* Initialize the memory allocator. */ VmaAllocatorCreateInfo info = {}; @@ -61,7 +61,7 @@ VKContext::VKContext(void *ghost_window, void *ghost_context) VKContext::~VKContext() { vmaDestroyAllocator(mem_allocator_); - debug::destroy_vk_callbacks(this); + debug::destroy_callbacks(this); } void VKContext::init_physical_device_limits() diff --git a/source/blender/gpu/vulkan/vk_debug.cc b/source/blender/gpu/vulkan/vk_debug.cc index d2f1f89aa53..36941a8642a 100644 --- a/source/blender/gpu/vulkan/vk_debug.cc +++ b/source/blender/gpu/vulkan/vk_debug.cc @@ -60,10 +60,10 @@ void VKContext::debug_capture_scope_end(void * /*scope*/) {} namespace blender::gpu::debug { -static void vulkan_dynamic_debug_functions(VKContext *ctx, PFN_vkGetInstanceProcAddr instload) +static void vulkan_dynamic_debug_functions(VKContext *context, PFN_vkGetInstanceProcAddr instload) { - VKDebuggingTools &tools = ctx->debuggingtools_get(); - VkInstance instance = ctx->instance_get(); + VKDebuggingTools &tools = context->debuggingtools_get(); + VkInstance instance = context->instance_get(); if (instload) { @@ -110,7 +110,7 @@ static void vulkan_dynamic_debug_functions(VKContext *ctx, PFN_vkGetInstanceProc } } -bool init_vk_callbacks(VKContext *ctx, PFN_vkGetInstanceProcAddr instload) +bool init_callbacks(VKContext *ctx, PFN_vkGetInstanceProcAddr instload) { if (instload) { vulkan_dynamic_debug_functions(ctx, instload); @@ -119,36 +119,36 @@ bool init_vk_callbacks(VKContext *ctx, PFN_vkGetInstanceProcAddr instload) return false; } -void destroy_vk_callbacks(VKContext *ctx) +void destroy_callbacks(VKContext *context) { - VKDebuggingTools tools = ctx->debuggingtools_get(); + VKDebuggingTools tools = context->debuggingtools_get(); if (tools.enabled) { - vulkan_dynamic_debug_functions(ctx, nullptr); + vulkan_dynamic_debug_functions(context, nullptr); } } -void object_vk_label(blender::gpu::VKContext *ctx, +void object_label(VKContext *context, VkObjectType objType, uint64_t obj, const char *name) { if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = ctx->debuggingtools_get(); + VKDebuggingTools tools = context->debuggingtools_get(); if (tools.enabled) { VkDebugUtilsObjectNameInfoEXT info = {}; info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT; info.objectType = objType; info.objectHandle = obj; info.pObjectName = name; - tools.vkSetDebugUtilsObjectNameEXT_r(ctx->device_get(), &info); + tools.vkSetDebugUtilsObjectNameEXT_r(context->device_get(), &info); } } } -void pushMarker(blender::gpu::VKContext *ctx, VkCommandBuffer cmd, const char *name) +void push_marker(VKContext *context, VkCommandBuffer cmd, const char *name) { if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = ctx->debuggingtools_get(); + VKDebuggingTools tools = context->debuggingtools_get(); if (tools.enabled) { VkDebugUtilsLabelEXT info = {}; info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; @@ -158,10 +158,10 @@ void pushMarker(blender::gpu::VKContext *ctx, VkCommandBuffer cmd, const char *n } } -void setMarker(blender::gpu::VKContext *ctx, VkCommandBuffer cmd, const char *name) +void set_marker(VKContext *context, VkCommandBuffer cmd, const char *name) { if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = ctx->debuggingtools_get(); + VKDebuggingTools tools = context->debuggingtools_get(); if (tools.enabled) { VkDebugUtilsLabelEXT info = {}; info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; @@ -171,48 +171,48 @@ void setMarker(blender::gpu::VKContext *ctx, VkCommandBuffer cmd, const char *na } } -void popMarker(blender::gpu::VKContext *ctx, VkCommandBuffer cmd) +void pop_marker(VKContext *context, VkCommandBuffer cmd) { if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = ctx->debuggingtools_get(); + VKDebuggingTools tools = context->debuggingtools_get(); if (tools.enabled) { tools.vkCmdEndDebugUtilsLabelEXT_r(cmd); } } } -void pushMarker(blender::gpu::VKContext *ctx, VkQueue q, const char *name) +void push_marker(VKContext *context, VkQueue queue, const char *name) { if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = ctx->debuggingtools_get(); + VKDebuggingTools tools = context->debuggingtools_get(); if (tools.enabled) { VkDebugUtilsLabelEXT info = {}; info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; info.pLabelName = name; - tools.vkQueueBeginDebugUtilsLabelEXT_r(q, &info); + tools.vkQueueBeginDebugUtilsLabelEXT_r(queue, &info); } } } -void setMarker(blender::gpu::VKContext *ctx, VkQueue q, const char *name) +void set_marker(VKContext *context, VkQueue queue, const char *name) { if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = ctx->debuggingtools_get(); + VKDebuggingTools tools = context->debuggingtools_get(); if (tools.enabled) { VkDebugUtilsLabelEXT info = {}; info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; info.pLabelName = name; - tools.vkQueueInsertDebugUtilsLabelEXT_r(q, &info); + tools.vkQueueInsertDebugUtilsLabelEXT_r(queue, &info); } } } -void popMarker(blender::gpu::VKContext *ctx, VkQueue q) +void pop_marker(VKContext *context, VkQueue queue) { if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = ctx->debuggingtools_get(); + VKDebuggingTools tools = context->debuggingtools_get(); if (tools.enabled) { - tools.vkQueueEndDebugUtilsLabelEXT_r(q); + tools.vkQueueEndDebugUtilsLabelEXT_r(queue); } } } diff --git a/source/blender/gpu/vulkan/vk_debug.hh b/source/blender/gpu/vulkan/vk_debug.hh index dc78dc71135..80786c34031 100644 --- a/source/blender/gpu/vulkan/vk_debug.hh +++ b/source/blender/gpu/vulkan/vk_debug.hh @@ -32,11 +32,11 @@ typedef struct VKDebuggingTools { PFN_vkSetDebugUtilsObjectTagEXT vkSetDebugUtilsObjectTagEXT_r = nullptr; } VKDebuggingTools; -bool init_vk_callbacks(VKContext *ctx, PFN_vkGetInstanceProcAddr instload); -void destroy_vk_callbacks(VKContext *ctx); -void object_vk_label(VKContext *ctx, VkObjectType objType, uint64_t obj, const char *name); +bool init_callbacks(VKContext *context, PFN_vkGetInstanceProcAddr instload); +void destroy_callbacks(VKContext *context); +void object_label(VKContext *context, VkObjectType objType, uint64_t obj, const char *name); -template void object_vk_label(VKContext *ctx, T obj, const char *name) +template void object_label(VKContext *context, T obj, const char *name) { if (!(G.debug & G_DEBUG_GPU)) { return; @@ -46,15 +46,15 @@ template void object_vk_label(VKContext *ctx, T obj, const char *nam memset(label, 0, label_size); static int stats = 0; SNPRINTF(label, "%s_%d", name, stats++); - object_vk_label(ctx, to_vk_object_type(obj), (uint64_t)obj, (const char *)label); + object_label(context, to_vk_object_type(obj), (uint64_t)obj, (const char *)label); }; -void pushMarker(VKContext *ctx, VkCommandBuffer cmd, const char *name); -void setMarker(VKContext *ctx, VkCommandBuffer cmd, const char *name); -void popMarker(VKContext *ctx, VkCommandBuffer cmd); -void pushMarker(VKContext *ctx, VkQueue q, const char *name); -void setMarker(VKContext *ctx, VkQueue q, const char *name); -void popMarker(VKContext *ctx, VkQueue q); +void push_marker(VKContext *context, VkCommandBuffer cmd, const char *name); +void set_marker(VKContext *context, VkCommandBuffer cmd, const char *name); +void pop_marker(VKContext *context, VkCommandBuffer cmd); +void push_marker(VKContext *context, VkQueue queue, const char *name); +void set_marker(VKContext *context, VkQueue queue, const char *name); +void pop_marker(VKContext *context, VkQueue queue); } // namespace debug } // namespace blender::gpu -- 2.30.2 From f1646a6a056b5b9f94b5070b618e9236b0d5499d Mon Sep 17 00:00:00 2001 From: AgAmemnno Date: Mon, 3 Apr 2023 23:01:21 +0900 Subject: [PATCH 15/21] FIX:Format CMakeLists.txt --- source/blender/gpu/CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt index f7b238c4f0a..ca5482ac04d 100644 --- a/source/blender/gpu/CMakeLists.txt +++ b/source/blender/gpu/CMakeLists.txt @@ -257,8 +257,6 @@ set(VULKAN_SRC vulkan/vk_texture.hh vulkan/vk_uniform_buffer.hh vulkan/vk_vertex_buffer.hh - - ) set(METAL_SRC -- 2.30.2 From 38c4349f1b392914214242197a826e1a7eaf871b Mon Sep 17 00:00:00 2001 From: AgAmemnno Date: Mon, 3 Apr 2023 23:07:06 +0900 Subject: [PATCH 16/21] FIX:Refactoring Support VulkanObjectLabel,etc Added naming convention for vulkan objects. --- source/blender/gpu/vulkan/vk_debug.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/gpu/vulkan/vk_debug.cc b/source/blender/gpu/vulkan/vk_debug.cc index 36941a8642a..9e0fc6fc347 100644 --- a/source/blender/gpu/vulkan/vk_debug.cc +++ b/source/blender/gpu/vulkan/vk_debug.cc @@ -110,10 +110,10 @@ static void vulkan_dynamic_debug_functions(VKContext *context, PFN_vkGetInstance } } -bool init_callbacks(VKContext *ctx, PFN_vkGetInstanceProcAddr instload) +bool init_callbacks(VKContext *contex, PFN_vkGetInstanceProcAddr instload) { if (instload) { - vulkan_dynamic_debug_functions(ctx, instload); + vulkan_dynamic_debug_functions(contex, instload); return true; }; return false; -- 2.30.2 From 60f47e80dc891965581be871675bece8b9eca932 Mon Sep 17 00:00:00 2001 From: AgAmemnno Date: Mon, 3 Apr 2023 23:08:40 +0900 Subject: [PATCH 17/21] FIX:Refactoring Support VulkanObjectLabel,etc Added naming convention for vulkan objects. --- source/blender/gpu/vulkan/vk_debug.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/gpu/vulkan/vk_debug.cc b/source/blender/gpu/vulkan/vk_debug.cc index 9e0fc6fc347..2865c1f2205 100644 --- a/source/blender/gpu/vulkan/vk_debug.cc +++ b/source/blender/gpu/vulkan/vk_debug.cc @@ -110,10 +110,10 @@ static void vulkan_dynamic_debug_functions(VKContext *context, PFN_vkGetInstance } } -bool init_callbacks(VKContext *contex, PFN_vkGetInstanceProcAddr instload) +bool init_callbacks(VKContext *context, PFN_vkGetInstanceProcAddr instload) { if (instload) { - vulkan_dynamic_debug_functions(contex, instload); + vulkan_dynamic_debug_functions(context, instload); return true; }; return false; -- 2.30.2 From 995d327954fc09f081da43a1d1d172537ed03628 Mon Sep 17 00:00:00 2001 From: AgAmemnno Date: Mon, 3 Apr 2023 23:14:54 +0900 Subject: [PATCH 18/21] FIX:Refactoring Support VulkanObjectLabel,etc Added naming convention(VKNameSUFFIX->name_suffix) for vulkan objects. --- source/blender/gpu/vulkan/vk_context.hh | 6 +++--- source/blender/gpu/vulkan/vk_debug.cc | 18 +++++++++--------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/source/blender/gpu/vulkan/vk_context.hh b/source/blender/gpu/vulkan/vk_context.hh index 79719a854fb..c9b573d4865 100644 --- a/source/blender/gpu/vulkan/vk_context.hh +++ b/source/blender/gpu/vulkan/vk_context.hh @@ -34,7 +34,7 @@ class VKContext : public Context { VkPhysicalDeviceLimits vk_physical_device_limits_; /** Functions of vk_ext_debugutils to use in this context. */ - debug::VKDebuggingTools vk_debugging_tools_; + debug::VKDebuggingTools debugging_tools_; void *ghost_context_; @@ -113,9 +113,9 @@ class VKContext : public Context { return mem_allocator_; } - debug::VKDebuggingTools &debuggingtools_get() + debug::VKDebuggingTools &debugging_tools_get() { - return vk_debugging_tools_; + return debugging_tools_; } private: diff --git a/source/blender/gpu/vulkan/vk_debug.cc b/source/blender/gpu/vulkan/vk_debug.cc index 2865c1f2205..b826309847f 100644 --- a/source/blender/gpu/vulkan/vk_debug.cc +++ b/source/blender/gpu/vulkan/vk_debug.cc @@ -62,7 +62,7 @@ namespace blender::gpu::debug { static void vulkan_dynamic_debug_functions(VKContext *context, PFN_vkGetInstanceProcAddr instload) { - VKDebuggingTools &tools = context->debuggingtools_get(); + VKDebuggingTools &tools = context->debugging_tools_get(); VkInstance instance = context->instance_get(); if (instload) { @@ -121,7 +121,7 @@ bool init_callbacks(VKContext *context, PFN_vkGetInstanceProcAddr instload) void destroy_callbacks(VKContext *context) { - VKDebuggingTools tools = context->debuggingtools_get(); + VKDebuggingTools tools = context->debugging_tools_get(); if (tools.enabled) { vulkan_dynamic_debug_functions(context, nullptr); } @@ -133,7 +133,7 @@ void object_label(VKContext *context, const char *name) { if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = context->debuggingtools_get(); + VKDebuggingTools tools = context->debugging_tools_get(); if (tools.enabled) { VkDebugUtilsObjectNameInfoEXT info = {}; info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT; @@ -148,7 +148,7 @@ void object_label(VKContext *context, void push_marker(VKContext *context, VkCommandBuffer cmd, const char *name) { if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = context->debuggingtools_get(); + VKDebuggingTools tools = context->debugging_tools_get(); if (tools.enabled) { VkDebugUtilsLabelEXT info = {}; info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; @@ -161,7 +161,7 @@ void push_marker(VKContext *context, VkCommandBuffer cmd, const char *name) void set_marker(VKContext *context, VkCommandBuffer cmd, const char *name) { if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = context->debuggingtools_get(); + VKDebuggingTools tools = context->debugging_tools_get(); if (tools.enabled) { VkDebugUtilsLabelEXT info = {}; info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; @@ -174,7 +174,7 @@ void set_marker(VKContext *context, VkCommandBuffer cmd, const char *name) void pop_marker(VKContext *context, VkCommandBuffer cmd) { if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = context->debuggingtools_get(); + VKDebuggingTools tools = context->debugging_tools_get(); if (tools.enabled) { tools.vkCmdEndDebugUtilsLabelEXT_r(cmd); } @@ -184,7 +184,7 @@ void pop_marker(VKContext *context, VkCommandBuffer cmd) void push_marker(VKContext *context, VkQueue queue, const char *name) { if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = context->debuggingtools_get(); + VKDebuggingTools tools = context->debugging_tools_get(); if (tools.enabled) { VkDebugUtilsLabelEXT info = {}; info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; @@ -197,7 +197,7 @@ void push_marker(VKContext *context, VkQueue queue, const char *name) void set_marker(VKContext *context, VkQueue queue, const char *name) { if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = context->debuggingtools_get(); + VKDebuggingTools tools = context->debugging_tools_get(); if (tools.enabled) { VkDebugUtilsLabelEXT info = {}; info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; @@ -210,7 +210,7 @@ void set_marker(VKContext *context, VkQueue queue, const char *name) void pop_marker(VKContext *context, VkQueue queue) { if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = context->debuggingtools_get(); + VKDebuggingTools tools = context->debugging_tools_get(); if (tools.enabled) { tools.vkQueueEndDebugUtilsLabelEXT_r(queue); } -- 2.30.2 From bf8e9db521bba137e190f9228f1df7448eab7503 Mon Sep 17 00:00:00 2001 From: AgAmemnno Date: Wed, 12 Apr 2023 21:00:23 +0900 Subject: [PATCH 19/21] Vulkan:DebugUtils:Add const qualifier Access other than initialization and destruction should be const. --- source/blender/gpu/vulkan/vk_context.hh | 5 +++++ .../blender/gpu/vulkan/vk_data_conversion.cc | 4 +++- source/blender/gpu/vulkan/vk_debug.cc | 21 ++++++++----------- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/source/blender/gpu/vulkan/vk_context.hh b/source/blender/gpu/vulkan/vk_context.hh index c9b573d4865..b65fa13edd7 100644 --- a/source/blender/gpu/vulkan/vk_context.hh +++ b/source/blender/gpu/vulkan/vk_context.hh @@ -118,6 +118,11 @@ class VKContext : public Context { return debugging_tools_; } + const debug::VKDebuggingTools &debugging_tools_get() const + { + return debugging_tools_; + } + private: void init_physical_device_limits(); diff --git a/source/blender/gpu/vulkan/vk_data_conversion.cc b/source/blender/gpu/vulkan/vk_data_conversion.cc index 9a0f67c5697..16c6a34577a 100644 --- a/source/blender/gpu/vulkan/vk_data_conversion.cc +++ b/source/blender/gpu/vulkan/vk_data_conversion.cc @@ -6,7 +6,9 @@ */ #include "vk_data_conversion.hh" - +#ifdef _WIN32 +# define IMATH_DLL +#endif #include "Imath/half.h" namespace blender::gpu { diff --git a/source/blender/gpu/vulkan/vk_debug.cc b/source/blender/gpu/vulkan/vk_debug.cc index b826309847f..e2d8640e66f 100644 --- a/source/blender/gpu/vulkan/vk_debug.cc +++ b/source/blender/gpu/vulkan/vk_debug.cc @@ -7,9 +7,9 @@ #include "BKE_global.h" -#include "vk_debug.hh" #include "vk_backend.hh" #include "vk_context.hh" +#include "vk_debug.hh" namespace blender::gpu { void VKContext::debug_group_begin(const char *, int) {} @@ -121,19 +121,16 @@ bool init_callbacks(VKContext *context, PFN_vkGetInstanceProcAddr instload) void destroy_callbacks(VKContext *context) { - VKDebuggingTools tools = context->debugging_tools_get(); + VKDebuggingTools &tools = context->debugging_tools_get(); if (tools.enabled) { vulkan_dynamic_debug_functions(context, nullptr); } } -void object_label(VKContext *context, - VkObjectType objType, - uint64_t obj, - const char *name) +void object_label(VKContext *context, VkObjectType objType, uint64_t obj, const char *name) { if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = context->debugging_tools_get(); + const VKDebuggingTools &tools = context->debugging_tools_get(); if (tools.enabled) { VkDebugUtilsObjectNameInfoEXT info = {}; info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT; @@ -148,7 +145,7 @@ void object_label(VKContext *context, void push_marker(VKContext *context, VkCommandBuffer cmd, const char *name) { if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = context->debugging_tools_get(); + const VKDebuggingTools &tools = context->debugging_tools_get(); if (tools.enabled) { VkDebugUtilsLabelEXT info = {}; info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; @@ -161,7 +158,7 @@ void push_marker(VKContext *context, VkCommandBuffer cmd, const char *name) void set_marker(VKContext *context, VkCommandBuffer cmd, const char *name) { if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = context->debugging_tools_get(); + const VKDebuggingTools &tools = context->debugging_tools_get(); if (tools.enabled) { VkDebugUtilsLabelEXT info = {}; info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; @@ -174,7 +171,7 @@ void set_marker(VKContext *context, VkCommandBuffer cmd, const char *name) void pop_marker(VKContext *context, VkCommandBuffer cmd) { if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = context->debugging_tools_get(); + const VKDebuggingTools &tools = context->debugging_tools_get(); if (tools.enabled) { tools.vkCmdEndDebugUtilsLabelEXT_r(cmd); } @@ -197,7 +194,7 @@ void push_marker(VKContext *context, VkQueue queue, const char *name) void set_marker(VKContext *context, VkQueue queue, const char *name) { if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = context->debugging_tools_get(); + const VKDebuggingTools &tools = context->debugging_tools_get(); if (tools.enabled) { VkDebugUtilsLabelEXT info = {}; info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; @@ -210,7 +207,7 @@ void set_marker(VKContext *context, VkQueue queue, const char *name) void pop_marker(VKContext *context, VkQueue queue) { if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = context->debugging_tools_get(); + const VKDebuggingTools &tools = context->debugging_tools_get(); if (tools.enabled) { tools.vkQueueEndDebugUtilsLabelEXT_r(queue); } -- 2.30.2 From a7896343d4dd7a359b6a0a13cbafc901f265d06d Mon Sep 17 00:00:00 2001 From: AgAmemnno Date: Tue, 18 Apr 2023 12:33:03 +0900 Subject: [PATCH 20/21] Vulkan:Refactor:fix name schema --- source/blender/gpu/tests/shader_test.cc | 2 +- source/blender/gpu/vulkan/vk_debug.cc | 61 +++++++++++++------------ 2 files changed, 33 insertions(+), 30 deletions(-) diff --git a/source/blender/gpu/tests/shader_test.cc b/source/blender/gpu/tests/shader_test.cc index 26536dd221f..c6911314210 100644 --- a/source/blender/gpu/tests/shader_test.cc +++ b/source/blender/gpu/tests/shader_test.cc @@ -145,7 +145,7 @@ static void test_shader_compute_vbo() GPU_shader_bind(shader); /* Construct VBO. */ - static GPUVertFormat format = {0}; + GPUVertFormat format = {0}; GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 4, GPU_FETCH_FLOAT); GPUVertBuf *vbo = GPU_vertbuf_create_with_format_ex(&format, GPU_USAGE_DEVICE_ONLY); GPU_vertbuf_data_alloc(vbo, SIZE); diff --git a/source/blender/gpu/vulkan/vk_debug.cc b/source/blender/gpu/vulkan/vk_debug.cc index e2d8640e66f..138aafc58d8 100644 --- a/source/blender/gpu/vulkan/vk_debug.cc +++ b/source/blender/gpu/vulkan/vk_debug.cc @@ -60,7 +60,7 @@ void VKContext::debug_capture_scope_end(void * /*scope*/) {} namespace blender::gpu::debug { -static void vulkan_dynamic_debug_functions(VKContext *context, PFN_vkGetInstanceProcAddr instload) +static void load_dynamic_functions(VKContext *context, PFN_vkGetInstanceProcAddr instload) { VKDebuggingTools &tools = context->debugging_tools_get(); VkInstance instance = context->instance_get(); @@ -113,7 +113,7 @@ static void vulkan_dynamic_debug_functions(VKContext *context, PFN_vkGetInstance bool init_callbacks(VKContext *context, PFN_vkGetInstanceProcAddr instload) { if (instload) { - vulkan_dynamic_debug_functions(context, instload); + load_dynamic_functions(context, instload); return true; }; return false; @@ -123,26 +123,29 @@ void destroy_callbacks(VKContext *context) { VKDebuggingTools &tools = context->debugging_tools_get(); if (tools.enabled) { - vulkan_dynamic_debug_functions(context, nullptr); + load_dynamic_functions(context, nullptr); } } -void object_label(VKContext *context, VkObjectType objType, uint64_t obj, const char *name) +void object_label(VKContext *context, + VkObjectType vk_object_type, + uint64_t object_handle, + const char *name) { if (G.debug & G_DEBUG_GPU) { const VKDebuggingTools &tools = context->debugging_tools_get(); if (tools.enabled) { VkDebugUtilsObjectNameInfoEXT info = {}; info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT; - info.objectType = objType; - info.objectHandle = obj; + info.objectType = vk_object_type; + info.objectHandle = object_handle; info.pObjectName = name; tools.vkSetDebugUtilsObjectNameEXT_r(context->device_get(), &info); } } } -void push_marker(VKContext *context, VkCommandBuffer cmd, const char *name) +void push_marker(VKContext *context, VkCommandBuffer vk_command_buffer, const char *name) { if (G.debug & G_DEBUG_GPU) { const VKDebuggingTools &tools = context->debugging_tools_get(); @@ -150,12 +153,12 @@ void push_marker(VKContext *context, VkCommandBuffer cmd, const char *name) VkDebugUtilsLabelEXT info = {}; info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; info.pLabelName = name; - tools.vkCmdBeginDebugUtilsLabelEXT_r(cmd, &info); + tools.vkCmdBeginDebugUtilsLabelEXT_r(vk_command_buffer, &info); } } } -void set_marker(VKContext *context, VkCommandBuffer cmd, const char *name) +void set_marker(VKContext *context, VkCommandBuffer vk_command_buffer, const char *name) { if (G.debug & G_DEBUG_GPU) { const VKDebuggingTools &tools = context->debugging_tools_get(); @@ -163,35 +166,22 @@ void set_marker(VKContext *context, VkCommandBuffer cmd, const char *name) VkDebugUtilsLabelEXT info = {}; info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; info.pLabelName = name; - tools.vkCmdInsertDebugUtilsLabelEXT_r(cmd, &info); + tools.vkCmdInsertDebugUtilsLabelEXT_r(vk_command_buffer, &info); } } } -void pop_marker(VKContext *context, VkCommandBuffer cmd) +void pop_marker(VKContext *context, VkCommandBuffer vk_command_buffer) { if (G.debug & G_DEBUG_GPU) { const VKDebuggingTools &tools = context->debugging_tools_get(); if (tools.enabled) { - tools.vkCmdEndDebugUtilsLabelEXT_r(cmd); + tools.vkCmdEndDebugUtilsLabelEXT_r(vk_command_buffer); } } } -void push_marker(VKContext *context, VkQueue queue, const char *name) -{ - if (G.debug & G_DEBUG_GPU) { - VKDebuggingTools tools = context->debugging_tools_get(); - if (tools.enabled) { - VkDebugUtilsLabelEXT info = {}; - info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; - info.pLabelName = name; - tools.vkQueueBeginDebugUtilsLabelEXT_r(queue, &info); - } - } -} - -void set_marker(VKContext *context, VkQueue queue, const char *name) +void push_marker(VKContext *context, VkQueue vk_queue, const char *name) { if (G.debug & G_DEBUG_GPU) { const VKDebuggingTools &tools = context->debugging_tools_get(); @@ -199,17 +189,30 @@ void set_marker(VKContext *context, VkQueue queue, const char *name) VkDebugUtilsLabelEXT info = {}; info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; info.pLabelName = name; - tools.vkQueueInsertDebugUtilsLabelEXT_r(queue, &info); + tools.vkQueueBeginDebugUtilsLabelEXT_r(vk_queue, &info); } } } -void pop_marker(VKContext *context, VkQueue queue) +void set_marker(VKContext *context, VkQueue vk_queue, const char *name) { if (G.debug & G_DEBUG_GPU) { const VKDebuggingTools &tools = context->debugging_tools_get(); if (tools.enabled) { - tools.vkQueueEndDebugUtilsLabelEXT_r(queue); + VkDebugUtilsLabelEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; + info.pLabelName = name; + tools.vkQueueInsertDebugUtilsLabelEXT_r(vk_queue, &info); + } + } +} + +void pop_marker(VKContext *context, VkQueue vk_queue) +{ + if (G.debug & G_DEBUG_GPU) { + const VKDebuggingTools &tools = context->debugging_tools_get(); + if (tools.enabled) { + tools.vkQueueEndDebugUtilsLabelEXT_r(vk_queue); } } } -- 2.30.2 From 61d8eeed9ba08fcd8f79dba5d001434ed0e8f1aa Mon Sep 17 00:00:00 2001 From: AgAmemnno Date: Fri, 21 Apr 2023 18:40:38 +0900 Subject: [PATCH 21/21] FIX:Vulkan: For vulkan gpu name schema --- .../blender/gpu/vulkan/vk_data_conversion.cc | 4 +- source/blender/gpu/vulkan/vk_debug.cc | 135 +++++++++--------- source/blender/gpu/vulkan/vk_debug.hh | 26 ++-- 3 files changed, 81 insertions(+), 84 deletions(-) diff --git a/source/blender/gpu/vulkan/vk_data_conversion.cc b/source/blender/gpu/vulkan/vk_data_conversion.cc index add394ec323..5522e79c45b 100644 --- a/source/blender/gpu/vulkan/vk_data_conversion.cc +++ b/source/blender/gpu/vulkan/vk_data_conversion.cc @@ -6,9 +6,7 @@ */ #include "vk_data_conversion.hh" -#ifdef _WIN32 -# define IMATH_DLL -#endif + #include "Imath/half.h" namespace blender::gpu { diff --git a/source/blender/gpu/vulkan/vk_debug.cc b/source/blender/gpu/vulkan/vk_debug.cc index 138aafc58d8..32fc70e37bf 100644 --- a/source/blender/gpu/vulkan/vk_debug.cc +++ b/source/blender/gpu/vulkan/vk_debug.cc @@ -60,60 +60,60 @@ void VKContext::debug_capture_scope_end(void * /*scope*/) {} namespace blender::gpu::debug { -static void load_dynamic_functions(VKContext *context, PFN_vkGetInstanceProcAddr instload) +static void load_dynamic_functions(VKContext *context, PFN_vkGetInstanceProcAddr instance_proc_addr) { - VKDebuggingTools &tools = context->debugging_tools_get(); - VkInstance instance = context->instance_get(); + VKDebuggingTools &debugging_tools = context->debugging_tools_get(); + VkInstance vk_instance = context->instance_get(); - if (instload) { + if (instance_proc_addr) { - tools.enabled = false; - tools.vkCmdBeginDebugUtilsLabelEXT_r = (PFN_vkCmdBeginDebugUtilsLabelEXT)instload( - instance, "vkCmdBeginDebugUtilsLabelEXT"); - tools.vkCmdEndDebugUtilsLabelEXT_r = (PFN_vkCmdEndDebugUtilsLabelEXT)instload( - instance, "vkCmdEndDebugUtilsLabelEXT"); - tools.vkCmdInsertDebugUtilsLabelEXT_r = (PFN_vkCmdInsertDebugUtilsLabelEXT)instload( - instance, "vkCmdInsertDebugUtilsLabelEXT"); - tools.vkCreateDebugUtilsMessengerEXT_r = (PFN_vkCreateDebugUtilsMessengerEXT)instload( - instance, "vkCreateDebugUtilsMessengerEXT"); - tools.vkDestroyDebugUtilsMessengerEXT_r = (PFN_vkDestroyDebugUtilsMessengerEXT)instload( - instance, "vkDestroyDebugUtilsMessengerEXT"); - tools.vkQueueBeginDebugUtilsLabelEXT_r = (PFN_vkQueueBeginDebugUtilsLabelEXT)instload( - instance, "vkQueueBeginDebugUtilsLabelEXT"); - tools.vkQueueEndDebugUtilsLabelEXT_r = (PFN_vkQueueEndDebugUtilsLabelEXT)instload( - instance, "vkQueueEndDebugUtilsLabelEXT"); - tools.vkQueueInsertDebugUtilsLabelEXT_r = (PFN_vkQueueInsertDebugUtilsLabelEXT)instload( - instance, "vkQueueInsertDebugUtilsLabelEXT"); - tools.vkSetDebugUtilsObjectNameEXT_r = (PFN_vkSetDebugUtilsObjectNameEXT)instload( - instance, "vkSetDebugUtilsObjectNameEXT"); - tools.vkSetDebugUtilsObjectTagEXT_r = (PFN_vkSetDebugUtilsObjectTagEXT)instload( - instance, "vkSetDebugUtilsObjectTagEXT"); - tools.vkSubmitDebugUtilsMessageEXT_r = (PFN_vkSubmitDebugUtilsMessageEXT)instload( - instance, "vkSubmitDebugUtilsMessageEXT"); - if (tools.vkCmdBeginDebugUtilsLabelEXT_r) { - tools.enabled = true; + debugging_tools.enabled = false; + debugging_tools.vkCmdBeginDebugUtilsLabelEXT_r = (PFN_vkCmdBeginDebugUtilsLabelEXT)instance_proc_addr( + vk_instance, "vkCmdBeginDebugUtilsLabelEXT"); + debugging_tools.vkCmdEndDebugUtilsLabelEXT_r = (PFN_vkCmdEndDebugUtilsLabelEXT)instance_proc_addr( + vk_instance, "vkCmdEndDebugUtilsLabelEXT"); + debugging_tools.vkCmdInsertDebugUtilsLabelEXT_r = (PFN_vkCmdInsertDebugUtilsLabelEXT)instance_proc_addr( + vk_instance, "vkCmdInsertDebugUtilsLabelEXT"); + debugging_tools.vkCreateDebugUtilsMessengerEXT_r = (PFN_vkCreateDebugUtilsMessengerEXT)instance_proc_addr( + vk_instance, "vkCreateDebugUtilsMessengerEXT"); + debugging_tools.vkDestroyDebugUtilsMessengerEXT_r = (PFN_vkDestroyDebugUtilsMessengerEXT)instance_proc_addr( + vk_instance, "vkDestroyDebugUtilsMessengerEXT"); + debugging_tools.vkQueueBeginDebugUtilsLabelEXT_r = (PFN_vkQueueBeginDebugUtilsLabelEXT)instance_proc_addr( + vk_instance, "vkQueueBeginDebugUtilsLabelEXT"); + debugging_tools.vkQueueEndDebugUtilsLabelEXT_r = (PFN_vkQueueEndDebugUtilsLabelEXT)instance_proc_addr( + vk_instance, "vkQueueEndDebugUtilsLabelEXT"); + debugging_tools.vkQueueInsertDebugUtilsLabelEXT_r = (PFN_vkQueueInsertDebugUtilsLabelEXT)instance_proc_addr( + vk_instance, "vkQueueInsertDebugUtilsLabelEXT"); + debugging_tools.vkSetDebugUtilsObjectNameEXT_r = (PFN_vkSetDebugUtilsObjectNameEXT)instance_proc_addr( + vk_instance, "vkSetDebugUtilsObjectNameEXT"); + debugging_tools.vkSetDebugUtilsObjectTagEXT_r = (PFN_vkSetDebugUtilsObjectTagEXT)instance_proc_addr( + vk_instance, "vkSetDebugUtilsObjectTagEXT"); + debugging_tools.vkSubmitDebugUtilsMessageEXT_r = (PFN_vkSubmitDebugUtilsMessageEXT)instance_proc_addr( + vk_instance, "vkSubmitDebugUtilsMessageEXT"); + if (debugging_tools.vkCmdBeginDebugUtilsLabelEXT_r) { + debugging_tools.enabled = true; } } else { - tools.vkCmdBeginDebugUtilsLabelEXT_r = nullptr; - tools.vkCmdEndDebugUtilsLabelEXT_r = nullptr; - tools.vkCmdInsertDebugUtilsLabelEXT_r = nullptr; - tools.vkCreateDebugUtilsMessengerEXT_r = nullptr; - tools.vkDestroyDebugUtilsMessengerEXT_r = nullptr; - tools.vkQueueBeginDebugUtilsLabelEXT_r = nullptr; - tools.vkQueueEndDebugUtilsLabelEXT_r = nullptr; - tools.vkQueueInsertDebugUtilsLabelEXT_r = nullptr; - tools.vkSetDebugUtilsObjectNameEXT_r = nullptr; - tools.vkSetDebugUtilsObjectTagEXT_r = nullptr; - tools.vkSubmitDebugUtilsMessageEXT_r = nullptr; - tools.enabled = false; + debugging_tools.vkCmdBeginDebugUtilsLabelEXT_r = nullptr; + debugging_tools.vkCmdEndDebugUtilsLabelEXT_r = nullptr; + debugging_tools.vkCmdInsertDebugUtilsLabelEXT_r = nullptr; + debugging_tools.vkCreateDebugUtilsMessengerEXT_r = nullptr; + debugging_tools.vkDestroyDebugUtilsMessengerEXT_r = nullptr; + debugging_tools.vkQueueBeginDebugUtilsLabelEXT_r = nullptr; + debugging_tools.vkQueueEndDebugUtilsLabelEXT_r = nullptr; + debugging_tools.vkQueueInsertDebugUtilsLabelEXT_r = nullptr; + debugging_tools.vkSetDebugUtilsObjectNameEXT_r = nullptr; + debugging_tools.vkSetDebugUtilsObjectTagEXT_r = nullptr; + debugging_tools.vkSubmitDebugUtilsMessageEXT_r = nullptr; + debugging_tools.enabled = false; } } -bool init_callbacks(VKContext *context, PFN_vkGetInstanceProcAddr instload) +bool init_callbacks(VKContext *context, PFN_vkGetInstanceProcAddr instance_proc_addr) { - if (instload) { - load_dynamic_functions(context, instload); + if (instance_proc_addr) { + load_dynamic_functions(context, instance_proc_addr); return true; }; return false; @@ -121,8 +121,8 @@ bool init_callbacks(VKContext *context, PFN_vkGetInstanceProcAddr instload) void destroy_callbacks(VKContext *context) { - VKDebuggingTools &tools = context->debugging_tools_get(); - if (tools.enabled) { + VKDebuggingTools &debugging_tools = context->debugging_tools_get(); + if (debugging_tools.enabled) { load_dynamic_functions(context, nullptr); } } @@ -133,14 +133,14 @@ void object_label(VKContext *context, const char *name) { if (G.debug & G_DEBUG_GPU) { - const VKDebuggingTools &tools = context->debugging_tools_get(); - if (tools.enabled) { + const VKDebuggingTools &debugging_tools = context->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; - tools.vkSetDebugUtilsObjectNameEXT_r(context->device_get(), &info); + debugging_tools.vkSetDebugUtilsObjectNameEXT_r(context->device_get(), &info); } } } @@ -148,12 +148,12 @@ void object_label(VKContext *context, void push_marker(VKContext *context, VkCommandBuffer vk_command_buffer, const char *name) { if (G.debug & G_DEBUG_GPU) { - const VKDebuggingTools &tools = context->debugging_tools_get(); - if (tools.enabled) { + const VKDebuggingTools &debugging_tools = context->debugging_tools_get(); + if (debugging_tools.enabled) { VkDebugUtilsLabelEXT info = {}; info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; info.pLabelName = name; - tools.vkCmdBeginDebugUtilsLabelEXT_r(vk_command_buffer, &info); + debugging_tools.vkCmdBeginDebugUtilsLabelEXT_r(vk_command_buffer, &info); } } } @@ -161,12 +161,12 @@ void push_marker(VKContext *context, VkCommandBuffer vk_command_buffer, const ch void set_marker(VKContext *context, VkCommandBuffer vk_command_buffer, const char *name) { if (G.debug & G_DEBUG_GPU) { - const VKDebuggingTools &tools = context->debugging_tools_get(); - if (tools.enabled) { + const VKDebuggingTools &debugging_tools = context->debugging_tools_get(); + if (debugging_tools.enabled) { VkDebugUtilsLabelEXT info = {}; info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; info.pLabelName = name; - tools.vkCmdInsertDebugUtilsLabelEXT_r(vk_command_buffer, &info); + debugging_tools.vkCmdInsertDebugUtilsLabelEXT_r(vk_command_buffer, &info); } } } @@ -174,9 +174,9 @@ void set_marker(VKContext *context, VkCommandBuffer vk_command_buffer, const cha void pop_marker(VKContext *context, VkCommandBuffer vk_command_buffer) { if (G.debug & G_DEBUG_GPU) { - const VKDebuggingTools &tools = context->debugging_tools_get(); - if (tools.enabled) { - tools.vkCmdEndDebugUtilsLabelEXT_r(vk_command_buffer); + const VKDebuggingTools &debugging_tools = context->debugging_tools_get(); + if (debugging_tools.enabled) { + debugging_tools.vkCmdEndDebugUtilsLabelEXT_r(vk_command_buffer); } } } @@ -184,12 +184,12 @@ void pop_marker(VKContext *context, VkCommandBuffer vk_command_buffer) void push_marker(VKContext *context, VkQueue vk_queue, const char *name) { if (G.debug & G_DEBUG_GPU) { - const VKDebuggingTools &tools = context->debugging_tools_get(); - if (tools.enabled) { + const VKDebuggingTools &debugging_tools = context->debugging_tools_get(); + if (debugging_tools.enabled) { VkDebugUtilsLabelEXT info = {}; info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; info.pLabelName = name; - tools.vkQueueBeginDebugUtilsLabelEXT_r(vk_queue, &info); + debugging_tools.vkQueueBeginDebugUtilsLabelEXT_r(vk_queue, &info); } } } @@ -197,12 +197,12 @@ void push_marker(VKContext *context, VkQueue vk_queue, const char *name) void set_marker(VKContext *context, VkQueue vk_queue, const char *name) { if (G.debug & G_DEBUG_GPU) { - const VKDebuggingTools &tools = context->debugging_tools_get(); - if (tools.enabled) { + const VKDebuggingTools &debugging_tools = context->debugging_tools_get(); + if (debugging_tools.enabled) { VkDebugUtilsLabelEXT info = {}; info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; info.pLabelName = name; - tools.vkQueueInsertDebugUtilsLabelEXT_r(vk_queue, &info); + debugging_tools.vkQueueInsertDebugUtilsLabelEXT_r(vk_queue, &info); } } } @@ -210,11 +210,10 @@ void set_marker(VKContext *context, VkQueue vk_queue, const char *name) void pop_marker(VKContext *context, VkQueue vk_queue) { if (G.debug & G_DEBUG_GPU) { - const VKDebuggingTools &tools = context->debugging_tools_get(); - if (tools.enabled) { - tools.vkQueueEndDebugUtilsLabelEXT_r(vk_queue); + const VKDebuggingTools &debugging_tools = context->debugging_tools_get(); + if (debugging_tools.enabled) { + debugging_tools.vkQueueEndDebugUtilsLabelEXT_r(vk_queue); } } } - } // namespace blender::gpu::debug diff --git a/source/blender/gpu/vulkan/vk_debug.hh b/source/blender/gpu/vulkan/vk_debug.hh index 80786c34031..590a97c1fef 100644 --- a/source/blender/gpu/vulkan/vk_debug.hh +++ b/source/blender/gpu/vulkan/vk_debug.hh @@ -18,7 +18,7 @@ class VKContext; namespace debug { typedef struct VKDebuggingTools { bool enabled = false; - /* Function pointer definitions .*/ + /* Function pointer definitions. */ PFN_vkCreateDebugUtilsMessengerEXT vkCreateDebugUtilsMessengerEXT_r = nullptr; PFN_vkDestroyDebugUtilsMessengerEXT vkDestroyDebugUtilsMessengerEXT_r = nullptr; PFN_vkSubmitDebugUtilsMessageEXT vkSubmitDebugUtilsMessageEXT_r = nullptr; @@ -32,11 +32,12 @@ typedef struct VKDebuggingTools { PFN_vkSetDebugUtilsObjectTagEXT vkSetDebugUtilsObjectTagEXT_r = nullptr; } VKDebuggingTools; -bool init_callbacks(VKContext *context, PFN_vkGetInstanceProcAddr instload); -void destroy_callbacks(VKContext *context); -void object_label(VKContext *context, VkObjectType objType, uint64_t obj, const char *name); -template void object_label(VKContext *context, T obj, const char *name) +bool init_callbacks(VKContext *context, PFN_vkGetInstanceProcAddr instance_proc_addr); +void destroy_callbacks(VKContext *context); +void object_label(VKContext *context, VkObjectType vk_object_type, uint64_t object_handle, const char *name); + +template void object_label(VKContext *context, T vk_object_type, const char *name) { if (!(G.debug & G_DEBUG_GPU)) { return; @@ -46,15 +47,14 @@ template void object_label(VKContext *context, T obj, const char *na memset(label, 0, label_size); static int stats = 0; SNPRINTF(label, "%s_%d", name, stats++); - object_label(context, to_vk_object_type(obj), (uint64_t)obj, (const char *)label); + object_label(context, to_vk_object_type(vk_object_type), (uint64_t)vk_object_type, (const char *)label); }; -void push_marker(VKContext *context, VkCommandBuffer cmd, const char *name); -void set_marker(VKContext *context, VkCommandBuffer cmd, const char *name); -void pop_marker(VKContext *context, VkCommandBuffer cmd); -void push_marker(VKContext *context, VkQueue queue, const char *name); -void set_marker(VKContext *context, VkQueue queue, const char *name); -void pop_marker(VKContext *context, VkQueue queue); - +void push_marker(VKContext *context, VkCommandBuffer vk_command_buffer, const char *name); +void set_marker(VKContext *context, VkCommandBuffer vk_command_buffer, const char *name); +void pop_marker(VKContext *context, VkCommandBuffer vk_command_buffer); +void push_marker(VKContext *context, VkQueue vk_queue, const char *name); +void set_marker(VKContext *context, VkQueue vk_queue, const char *name); +void pop_marker(VKContext *context, VkQueue vk_queue); } // namespace debug } // namespace blender::gpu -- 2.30.2