@@ -951,10 +951,13 @@ void vk_memory_logger::log_deallocation(vk_buffer_ref buf_ref) {
951
951
struct vk_instance_t {
952
952
vk::Instance instance;
953
953
954
- #ifdef GGML_VULKAN_DEBUG_UTILS
955
954
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 = {};
958
961
959
962
std::vector<size_t> device_indices;
960
963
vk_device devices[GGML_VK_MAX_DEVICES];
@@ -1113,15 +1116,13 @@ static void ggml_vk_create_pipeline_func(vk_device& device, vk_pipeline& pipelin
1113
1116
}
1114
1117
pipeline->compiled = true;
1115
1118
1116
- #ifdef GGML_VULKAN_DEBUG_UTILS
1117
1119
if (vk_instance.debug_utils_support) {
1118
1120
vk::DebugUtilsObjectNameInfoEXT duoni;
1119
1121
duoni.objectType = vk::ObjectType::ePipeline;
1120
1122
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));
1123
1125
}
1124
- #endif
1125
1126
1126
1127
{
1127
1128
std::lock_guard<std::mutex> guard(device->mutex);
@@ -3498,9 +3499,7 @@ static void ggml_vk_print_gpu_info(size_t idx) {
3498
3499
static bool ggml_vk_instance_validation_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions);
3499
3500
static bool ggml_vk_instance_portability_enumeration_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions);
3500
3501
3501
- #ifdef GGML_VULKAN_DEBUG_UTILS
3502
3502
static bool ggml_vk_instance_debug_utils_ext_available(const std::vector<vk::ExtensionProperties> & instance_extensions);
3503
- #endif
3504
3503
3505
3504
static void ggml_vk_instance_init() {
3506
3505
if (vk_instance_initialized) {
@@ -3522,9 +3521,7 @@ static void ggml_vk_instance_init() {
3522
3521
#ifdef __APPLE__
3523
3522
const bool portability_enumeration_ext = ggml_vk_instance_portability_enumeration_ext_available(instance_extensions);
3524
3523
#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;
3528
3525
std::vector<const char*> layers;
3529
3526
3530
3527
if (validation_ext) {
@@ -3539,11 +3536,9 @@ static void ggml_vk_instance_init() {
3539
3536
extensions.push_back("VK_KHR_portability_enumeration");
3540
3537
}
3541
3538
#endif
3542
- #ifdef GGML_VULKAN_DEBUG_UTILS
3543
3539
if (debug_utils_ext) {
3544
3540
extensions.push_back("VK_EXT_debug_utils");
3545
3541
}
3546
- #endif
3547
3542
vk::InstanceCreateInfo instance_create_info(vk::InstanceCreateFlags{}, &app_info, layers, extensions);
3548
3543
#ifdef __APPLE__
3549
3544
if (portability_enumeration_ext) {
@@ -3567,12 +3562,16 @@ static void ggml_vk_instance_init() {
3567
3562
vk_instance.instance = vk::createInstance(instance_create_info);
3568
3563
vk_instance_initialized = true;
3569
3564
3570
- #ifdef GGML_VULKAN_DEBUG_UTILS
3571
3565
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
+
3574
3574
}
3575
- #endif
3576
3575
3577
3576
size_t num_available_devices = vk_instance.instance.enumeratePhysicalDevices().size();
3578
3577
@@ -9473,6 +9472,13 @@ static ggml_status ggml_backend_vk_graph_compute(ggml_backend_t backend, ggml_cg
9473
9472
VK_LOG_DEBUG("ggml_backend_vk_graph_compute(" << cgraph->n_nodes << " nodes)");
9474
9473
ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context;
9475
9474
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
+
9476
9482
uint64_t total_mat_mul_bytes = 0;
9477
9483
for (int i = 0; i < cgraph->n_nodes; i++) {
9478
9484
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
9547
9553
}
9548
9554
}
9549
9555
9556
+ if (vk_instance.debug_utils_support) {
9557
+ vk_instance.pfn_vkQueueEndDebugUtilsLabelEXT(ctx->device->compute_queue.queue);
9558
+ }
9559
+
9550
9560
#ifdef GGML_VULKAN_PERF
9551
9561
ctx->device->perf_logger->print_timings();
9552
9562
#endif
0 commit comments