@@ -1041,10 +1041,13 @@ void vk_memory_logger::log_deallocation(vk_buffer_ref buf_ref) {
10411041struct vk_instance_t {
10421042 vk::Instance instance;
10431043
1044- #ifdef GGML_VULKAN_DEBUG_UTILS
10451044 bool debug_utils_support = false; // VK_EXT_debug_utils enabled
1046- PFN_vkSetDebugUtilsObjectNameEXT pfnSetDebugUtilsObjectNameEXT = {};
1047- #endif
1045+ PFN_vkSetDebugUtilsObjectNameEXT pfn_vkSetDebugUtilsObjectNameEXT = {};
1046+ PFN_vkQueueBeginDebugUtilsLabelEXT pfn_vkQueueBeginDebugUtilsLabelEXT = {};
1047+ PFN_vkQueueEndDebugUtilsLabelEXT pfn_vkQueueEndDebugUtilsLabelEXT = {};
1048+ PFN_vkCmdBeginDebugUtilsLabelEXT pfn_vkCmdBeginDebugUtilsLabelEXT = {};
1049+ PFN_vkCmdEndDebugUtilsLabelEXT pfn_vkCmdEndDebugUtilsLabelEXT = {};
1050+ PFN_vkCmdInsertDebugUtilsLabelEXT pfn_vkCmdInsertDebugUtilsLabelEXT = {};
10481051
10491052 std::vector<size_t> device_indices;
10501053 vk_device devices[GGML_VK_MAX_DEVICES];
@@ -1185,15 +1188,13 @@ static void ggml_vk_create_pipeline_func(vk_device& device, vk_pipeline& pipelin
11851188 }
11861189 pipeline->compiled = true;
11871190
1188- #ifdef GGML_VULKAN_DEBUG_UTILS
11891191 if (vk_instance.debug_utils_support) {
11901192 vk::DebugUtilsObjectNameInfoEXT duoni;
11911193 duoni.objectType = vk::ObjectType::ePipeline;
11921194 duoni.pObjectName = pipeline->name.c_str();
1193- duoni.objectHandle = reinterpret_cast<uint64_t>(pipeline->pipeline.operator VkPipeline_T *( ));
1194- vk_instance.pfnSetDebugUtilsObjectNameEXT (device->device, &static_cast<VkDebugUtilsObjectNameInfoEXT &>(duoni));
1195+ duoni.objectHandle = reinterpret_cast<uint64_t>(static_cast<VkPipeline_T*>( pipeline->pipeline));
1196+ vk_instance.pfn_vkSetDebugUtilsObjectNameEXT (device->device, &static_cast<VkDebugUtilsObjectNameInfoEXT &>(duoni));
11951197 }
1196- #endif
11971198
11981199 {
11991200 std::lock_guard<std::mutex> guard(device->mutex);
@@ -3576,9 +3577,7 @@ static void ggml_vk_print_gpu_info(size_t idx) {
35763577static bool ggml_vk_instance_validation_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions);
35773578static bool ggml_vk_instance_portability_enumeration_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions);
35783579
3579- #ifdef GGML_VULKAN_DEBUG_UTILS
35803580static bool ggml_vk_instance_debug_utils_ext_available(const std::vector<vk::ExtensionProperties> & instance_extensions);
3581- #endif
35823581
35833582static void ggml_vk_instance_init() {
35843583 if (vk_instance_initialized) {
@@ -3600,9 +3599,7 @@ static void ggml_vk_instance_init() {
36003599#ifdef __APPLE__
36013600 const bool portability_enumeration_ext = ggml_vk_instance_portability_enumeration_ext_available(instance_extensions);
36023601#endif
3603- #ifdef GGML_VULKAN_DEBUG_UTILS
3604- const bool debug_utils_ext = ggml_vk_instance_debug_utils_ext_available(instance_extensions);
3605- #endif
3602+ const bool debug_utils_ext = ggml_vk_instance_debug_utils_ext_available(instance_extensions) && getenv("GGML_VK_DEBUG_MARKERS") != nullptr;
36063603 std::vector<const char*> layers;
36073604
36083605 if (validation_ext) {
@@ -3617,11 +3614,9 @@ static void ggml_vk_instance_init() {
36173614 extensions.push_back("VK_KHR_portability_enumeration");
36183615 }
36193616#endif
3620- #ifdef GGML_VULKAN_DEBUG_UTILS
36213617 if (debug_utils_ext) {
36223618 extensions.push_back("VK_EXT_debug_utils");
36233619 }
3624- #endif
36253620 vk::InstanceCreateInfo instance_create_info(vk::InstanceCreateFlags{}, &app_info, layers, extensions);
36263621#ifdef __APPLE__
36273622 if (portability_enumeration_ext) {
@@ -3645,12 +3640,16 @@ static void ggml_vk_instance_init() {
36453640 vk_instance.instance = vk::createInstance(instance_create_info);
36463641 vk_instance_initialized = true;
36473642
3648- #ifdef GGML_VULKAN_DEBUG_UTILS
36493643 if (debug_utils_ext) {
3650- vk_instance.pfnSetDebugUtilsObjectNameEXT = (PFN_vkSetDebugUtilsObjectNameEXT) vkGetInstanceProcAddr(vk_instance.instance, "vkSetDebugUtilsObjectNameEXT");
3651- vk_instance.debug_utils_support = vk_instance.pfnSetDebugUtilsObjectNameEXT != nullptr;
3644+ vk_instance.debug_utils_support = true;
3645+ vk_instance.pfn_vkSetDebugUtilsObjectNameEXT = (PFN_vkSetDebugUtilsObjectNameEXT) vkGetInstanceProcAddr(vk_instance.instance, "vkSetDebugUtilsObjectNameEXT");
3646+ vk_instance.pfn_vkQueueBeginDebugUtilsLabelEXT = (PFN_vkQueueBeginDebugUtilsLabelEXT) vkGetInstanceProcAddr(vk_instance.instance, "vkQueueBeginDebugUtilsLabelEXT");
3647+ vk_instance.pfn_vkQueueEndDebugUtilsLabelEXT = (PFN_vkQueueEndDebugUtilsLabelEXT) vkGetInstanceProcAddr(vk_instance.instance, "vkQueueEndDebugUtilsLabelEXT");
3648+ vk_instance.pfn_vkCmdBeginDebugUtilsLabelEXT = (PFN_vkCmdBeginDebugUtilsLabelEXT) vkGetInstanceProcAddr(vk_instance.instance, "vkCmdBeginDebugUtilsLabelEXT");
3649+ vk_instance.pfn_vkCmdEndDebugUtilsLabelEXT = (PFN_vkCmdEndDebugUtilsLabelEXT) vkGetInstanceProcAddr(vk_instance.instance, "vkCmdEndDebugUtilsLabelEXT");
3650+ vk_instance.pfn_vkCmdInsertDebugUtilsLabelEXT = (PFN_vkCmdInsertDebugUtilsLabelEXT) vkGetInstanceProcAddr(vk_instance.instance, "vkCmdInsertDebugUtilsLabelEXT");
3651+
36523652 }
3653- #endif
36543653
36553654 size_t num_available_devices = vk_instance.instance.enumeratePhysicalDevices().size();
36563655 vk_perf_logger_enabled = getenv("GGML_VK_PERF_LOGGER") != nullptr;
@@ -9684,6 +9683,13 @@ static ggml_status ggml_backend_vk_graph_compute(ggml_backend_t backend, ggml_cg
96849683 VK_LOG_DEBUG("ggml_backend_vk_graph_compute(" << cgraph->n_nodes << " nodes)");
96859684 ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context;
96869685
9686+ if (vk_instance.debug_utils_support) {
9687+ vk::DebugUtilsLabelEXT dul = {};
9688+ dul.pLabelName = "ggml_backend_vk_graph_compute";
9689+ dul.color = std::array<float,4>{1.0f, 1.0f, 1.0f, 1.0f};
9690+ vk_instance.pfn_vkQueueBeginDebugUtilsLabelEXT(ctx->device->compute_queue.queue, reinterpret_cast<VkDebugUtilsLabelEXT*>(&dul));
9691+ }
9692+
96879693 uint64_t total_mat_mul_bytes = 0;
96889694 for (int i = 0; i < cgraph->n_nodes; i++) {
96899695 ggml_vk_build_graph(ctx, cgraph->nodes[i], i, nullptr, 0, true, false, false, false);
@@ -10373,7 +10379,6 @@ static bool ggml_vk_instance_portability_enumeration_ext_available(const std::ve
1037310379 UNUSED(instance_extensions);
1037410380}
1037510381
10376- #ifdef GGML_VULKAN_DEBUG_UTILS
1037710382// Extension availability
1037810383static bool ggml_vk_instance_debug_utils_ext_available(
1037910384 const std::vector<vk::ExtensionProperties> & instance_extensions) {
@@ -10389,7 +10394,6 @@ static bool ggml_vk_instance_debug_utils_ext_available(
1038910394
1039010395 UNUSED(instance_extensions);
1039110396}
10392- #endif
1039310397
1039410398static bool ggml_vk_khr_cooperative_matrix_support(const vk::PhysicalDeviceProperties& props, const vk::PhysicalDeviceDriverProperties& driver_props, vk_device_architecture arch) {
1039510399 switch (props.vendorID) {
0 commit comments