diff --git a/src/vulkan/runtime/vk_instance.h b/src/vulkan/runtime/vk_instance.h index b7aa289ba7c..6c0f21b14fd 100644 --- a/src/vulkan/runtime/vk_instance.h +++ b/src/vulkan/runtime/vk_instance.h @@ -110,6 +110,14 @@ struct vk_instance { /** Instance-level dispatch table */ struct vk_instance_dispatch_table dispatch_table; + /** Driver-set flag to enable debug logging in release builds + * + * When set to true, vk_log messages will not be skipped in non-debug + * builds even when no debug_utils or debug_report callbacks are registered. + * Drivers should set this based on their own debug environment variables. + */ + bool enable_debug_logging; + /* VK_EXT_debug_report debug callbacks */ struct vk_debug_report debug_report; diff --git a/src/vulkan/runtime/vk_log.c b/src/vulkan/runtime/vk_log.c index 48f2786c03b..24422192fd2 100644 --- a/src/vulkan/runtime/vk_log.c +++ b/src/vulkan/runtime/vk_log.c @@ -113,7 +113,8 @@ __vk_log_impl(VkDebugUtilsMessageSeverityFlagBitsEXT severity, #if !MESA_DEBUG if (unlikely(!instance) || - (likely(list_is_empty(&instance->debug_utils.callbacks)) && + (likely(!instance->enable_debug_logging) && + likely(list_is_empty(&instance->debug_utils.callbacks)) && likely(list_is_empty(&instance->debug_report.callbacks)))) return; #endif @@ -127,26 +128,30 @@ __vk_log_impl(VkDebugUtilsMessageSeverityFlagBitsEXT severity, char *message_idname = ralloc_asprintf(NULL, "%s:%d", file, line); -#if MESA_VK_LOG - switch (severity) { - case VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT: - mesa_logd("%s: %s", message_idname, message); - break; - case VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT: - mesa_logi("%s: %s", message_idname, message); - break; - case VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT: - if (types & VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT) - mesa_logw("%s: PERF: %s", message_idname, message); - else - mesa_logw("%s: %s", message_idname, message); - break; - case VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT: - mesa_loge("%s: %s", message_idname, message); - break; - default: - UNREACHABLE("Invalid debug message severity"); - break; + const bool do_log = MESA_VK_LOG || + (instance && instance->enable_debug_logging); + + if (do_log) { + switch (severity) { + case VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT: + mesa_logd("%s: %s", message_idname, message); + break; + case VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT: + mesa_logi("%s: %s", message_idname, message); + break; + case VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT: + if (types & VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT) + mesa_logw("%s: PERF: %s", message_idname, message); + else + mesa_logw("%s: %s", message_idname, message); + break; + case VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT: + mesa_loge("%s: %s", message_idname, message); + break; + default: + UNREACHABLE("Invalid debug message severity"); + break; + } } if (!instance) { @@ -154,7 +159,6 @@ __vk_log_impl(VkDebugUtilsMessageSeverityFlagBitsEXT severity, ralloc_free(message_idname); return; } -#endif if (!instance->base.client_visible) { vk_debug_message_instance(instance, severity, types,