@@ -951,10 +951,13 @@ void vk_memory_logger::log_deallocation(vk_buffer_ref buf_ref) {
951951struct vk_instance_t {
952952 vk::Instance instance;
953953
954- #ifdef GGML_VULKAN_DEBUG_UTILS
955954 bool debug_utils_support = false; // VK_EXT_debug_utils enabled
956- PFN_vkSetDebugUtilsObjectNameEXT pfnSetDebugUtilsObjectNameEXT = {};
957- #endif
955+ PFN_vkSetDebugUtilsObjectNameEXT pfn_vkSetDebugUtilsObjectNameEXT = {};
956+ PFN_vkQueueBeginDebugUtilsLabelEXT pfn_vkQueueBeginDebugUtilsLabelEXT = {};
957+ PFN_vkQueueEndDebugUtilsLabelEXT pfn_vkQueueEndDebugUtilsLabelEXT = {};
958+ PFN_vkCmdBeginDebugUtilsLabelEXT pfn_vkCmdBeginDebugUtilsLabelEXT = {};
959+ PFN_vkCmdEndDebugUtilsLabelEXT pfn_vkCmdEndDebugUtilsLabelEXT = {};
960+ PFN_vkCmdInsertDebugUtilsLabelEXT pfn_vkCmdInsertDebugUtilsLabelEXT = {};
958961
959962 std::vector<size_t> device_indices;
960963 vk_device devices[GGML_VK_MAX_DEVICES];
@@ -1113,15 +1116,13 @@ static void ggml_vk_create_pipeline_func(vk_device& device, vk_pipeline& pipelin
11131116 }
11141117 pipeline->compiled = true;
11151118
1116- #ifdef GGML_VULKAN_DEBUG_UTILS
11171119 if (vk_instance.debug_utils_support) {
11181120 vk::DebugUtilsObjectNameInfoEXT duoni;
11191121 duoni.objectType = vk::ObjectType::ePipeline;
11201122 duoni.pObjectName = pipeline->name.c_str();
1121- duoni.objectHandle = reinterpret_cast<uint64_t>(pipeline->pipeline.operator VkPipeline_T *( ));
1122- vk_instance.pfnSetDebugUtilsObjectNameEXT (device->device, &static_cast<VkDebugUtilsObjectNameInfoEXT &>(duoni));
1123+ duoni.objectHandle = reinterpret_cast<uint64_t>(static_cast<VkPipeline_T*>( pipeline->pipeline));
1124+ vk_instance.pfn_vkSetDebugUtilsObjectNameEXT (device->device, &static_cast<VkDebugUtilsObjectNameInfoEXT &>(duoni));
11231125 }
1124- #endif
11251126
11261127 {
11271128 std::lock_guard<std::mutex> guard(device->mutex);
@@ -3498,9 +3499,7 @@ static void ggml_vk_print_gpu_info(size_t idx) {
34983499static bool ggml_vk_instance_validation_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions);
34993500static bool ggml_vk_instance_portability_enumeration_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions);
35003501
3501- #ifdef GGML_VULKAN_DEBUG_UTILS
35023502static bool ggml_vk_instance_debug_utils_ext_available(const std::vector<vk::ExtensionProperties> & instance_extensions);
3503- #endif
35043503
35053504static void ggml_vk_instance_init() {
35063505 if (vk_instance_initialized) {
@@ -3522,9 +3521,7 @@ static void ggml_vk_instance_init() {
35223521#ifdef __APPLE__
35233522 const bool portability_enumeration_ext = ggml_vk_instance_portability_enumeration_ext_available(instance_extensions);
35243523#endif
3525- #ifdef GGML_VULKAN_DEBUG_UTILS
3526- const bool debug_utils_ext = ggml_vk_instance_debug_utils_ext_available(instance_extensions);
3527- #endif
3524+ const bool debug_utils_ext = ggml_vk_instance_debug_utils_ext_available(instance_extensions) && getenv("GGML_VK_DEBUG_MARKERS") != nullptr;
35283525 std::vector<const char*> layers;
35293526
35303527 if (validation_ext) {
@@ -3539,11 +3536,9 @@ static void ggml_vk_instance_init() {
35393536 extensions.push_back("VK_KHR_portability_enumeration");
35403537 }
35413538#endif
3542- #ifdef GGML_VULKAN_DEBUG_UTILS
35433539 if (debug_utils_ext) {
35443540 extensions.push_back("VK_EXT_debug_utils");
35453541 }
3546- #endif
35473542 vk::InstanceCreateInfo instance_create_info(vk::InstanceCreateFlags{}, &app_info, layers, extensions);
35483543#ifdef __APPLE__
35493544 if (portability_enumeration_ext) {
@@ -3567,12 +3562,16 @@ static void ggml_vk_instance_init() {
35673562 vk_instance.instance = vk::createInstance(instance_create_info);
35683563 vk_instance_initialized = true;
35693564
3570- #ifdef GGML_VULKAN_DEBUG_UTILS
35713565 if (debug_utils_ext) {
3572- vk_instance.pfnSetDebugUtilsObjectNameEXT = (PFN_vkSetDebugUtilsObjectNameEXT) vkGetInstanceProcAddr(vk_instance.instance, "vkSetDebugUtilsObjectNameEXT");
3573- vk_instance.debug_utils_support = vk_instance.pfnSetDebugUtilsObjectNameEXT != nullptr;
3566+ vk_instance.debug_utils_support = true;
3567+ vk_instance.pfn_vkSetDebugUtilsObjectNameEXT = (PFN_vkSetDebugUtilsObjectNameEXT) vkGetInstanceProcAddr(vk_instance.instance, "vkSetDebugUtilsObjectNameEXT");
3568+ vk_instance.pfn_vkQueueBeginDebugUtilsLabelEXT = (PFN_vkQueueBeginDebugUtilsLabelEXT) vkGetInstanceProcAddr(vk_instance.instance, "vkQueueBeginDebugUtilsLabelEXT");
3569+ vk_instance.pfn_vkQueueEndDebugUtilsLabelEXT = (PFN_vkQueueEndDebugUtilsLabelEXT) vkGetInstanceProcAddr(vk_instance.instance, "vkQueueEndDebugUtilsLabelEXT");
3570+ vk_instance.pfn_vkCmdBeginDebugUtilsLabelEXT = (PFN_vkCmdBeginDebugUtilsLabelEXT) vkGetInstanceProcAddr(vk_instance.instance, "vkCmdBeginDebugUtilsLabelEXT");
3571+ vk_instance.pfn_vkCmdEndDebugUtilsLabelEXT = (PFN_vkCmdEndDebugUtilsLabelEXT) vkGetInstanceProcAddr(vk_instance.instance, "vkCmdEndDebugUtilsLabelEXT");
3572+ vk_instance.pfn_vkCmdInsertDebugUtilsLabelEXT = (PFN_vkCmdInsertDebugUtilsLabelEXT) vkGetInstanceProcAddr(vk_instance.instance, "vkCmdInsertDebugUtilsLabelEXT");
3573+
35743574 }
3575- #endif
35763575
35773576 size_t num_available_devices = vk_instance.instance.enumeratePhysicalDevices().size();
35783577
@@ -9473,6 +9472,13 @@ static ggml_status ggml_backend_vk_graph_compute(ggml_backend_t backend, ggml_cg
94739472 VK_LOG_DEBUG("ggml_backend_vk_graph_compute(" << cgraph->n_nodes << " nodes)");
94749473 ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context;
94759474
9475+ if (vk_instance.debug_utils_support) {
9476+ vk::DebugUtilsLabelEXT dul = {};
9477+ dul.pLabelName = "ggml_backend_vk_graph_compute";
9478+ dul.color = std::array<float,4>{1.0f, 1.0f, 1.0f, 1.0f};
9479+ vk_instance.pfn_vkQueueBeginDebugUtilsLabelEXT(ctx->device->compute_queue.queue, reinterpret_cast<VkDebugUtilsLabelEXT*>(&dul));
9480+ }
9481+
94769482 uint64_t total_mat_mul_bytes = 0;
94779483 for (int i = 0; i < cgraph->n_nodes; i++) {
94789484 ggml_vk_build_graph(ctx, cgraph->nodes[i], i, nullptr, 0, true, false, false, false);
@@ -9547,6 +9553,10 @@ static ggml_status ggml_backend_vk_graph_compute(ggml_backend_t backend, ggml_cg
95479553 }
95489554 }
95499555
9556+ if (vk_instance.debug_utils_support) {
9557+ vk_instance.pfn_vkQueueEndDebugUtilsLabelEXT(ctx->device->compute_queue.queue);
9558+ }
9559+
95509560#ifdef GGML_VULKAN_PERF
95519561 ctx->device->perf_logger->print_timings();
95529562#endif
0 commit comments