From d6fe5ee8a63ec53f134d06609de2f09449d4a65e Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Thu, 12 Mar 2026 19:48:23 +0100 Subject: [PATCH] vulkan: do not pass vk_instance for debug report messages RADV wants to abstract the compiler from any instance/device/pdev objects. The previous NULL check for instance seems to be useless. Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_shader.c | 5 +-- src/intel/vulkan_hasvk/genX_cmd_buffer.c | 4 ++- src/vulkan/runtime/vk_debug_report.c | 39 ++++++++++++------------ src/vulkan/runtime/vk_debug_report.h | 12 ++++++-- src/vulkan/runtime/vk_instance.h | 6 ++-- src/vulkan/runtime/vk_log.c | 4 +-- 6 files changed, 40 insertions(+), 30 deletions(-) diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index 977e7126b22..86cadb9388b 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -347,7 +347,7 @@ radv_spirv_nir_debug(void *private_data, enum nir_spirv_debug_level level, size_ snprintf(buffer, sizeof(buffer), "SPIR-V offset %lu: %s", (unsigned long)spirv_offset, message); - vk_debug_report(&instance->vk, vk_flags[level], debug_data->object, 0, 0, "radv", buffer); + vk_debug_report(&instance->vk.debug_report, vk_flags[level], debug_data->object, 0, 0, "radv", buffer); } static void @@ -364,7 +364,8 @@ radv_compiler_debug(void *private_data, enum aco_compiler_debug_level level, con /* VK_DEBUG_REPORT_DEBUG_BIT_EXT specifies diagnostic information * from the implementation and layers. */ - vk_debug_report(&instance->vk, vk_flags[level] | VK_DEBUG_REPORT_DEBUG_BIT_EXT, NULL, 0, 0, "radv", message); + vk_debug_report(&instance->vk.debug_report, vk_flags[level] | VK_DEBUG_REPORT_DEBUG_BIT_EXT, NULL, 0, 0, "radv", + message); } static void diff --git a/src/intel/vulkan_hasvk/genX_cmd_buffer.c b/src/intel/vulkan_hasvk/genX_cmd_buffer.c index 1d426b39999..9290782b2f1 100644 --- a/src/intel/vulkan_hasvk/genX_cmd_buffer.c +++ b/src/intel/vulkan_hasvk/genX_cmd_buffer.c @@ -2297,7 +2297,9 @@ emit_binding_table(struct anv_cmd_buffer *cmd_buffer, "descriptor does not have NonReadable " "set and the image does not have a " "corresponding SPIR-V format enum."); - vk_debug_report(&cmd_buffer->device->physical->instance->vk, + struct vk_instance *instance = + &cmd_buffer->device->physical->instance->vk; + vk_debug_report(&instance->debug_report, VK_DEBUG_REPORT_ERROR_BIT_EXT, &desc->image_view->vk.base, __LINE__, 0, "anv", diff --git a/src/vulkan/runtime/vk_debug_report.c b/src/vulkan/runtime/vk_debug_report.c index 6712ba6d1c8..446847941fc 100644 --- a/src/vulkan/runtime/vk_debug_report.c +++ b/src/vulkan/runtime/vk_debug_report.c @@ -94,20 +94,20 @@ vk_common_DestroyDebugReportCallbackEXT(VkInstance _instance, } static void -debug_report(struct vk_instance *instance, - VkDebugReportFlagsEXT flags, - VkDebugReportObjectTypeEXT object_type, - uint64_t handle, - size_t location, - int32_t messageCode, - const char* pLayerPrefix, - const char *pMessage) +debug_report_message(struct vk_debug_report *debug_report, + VkDebugReportFlagsEXT flags, + VkDebugReportObjectTypeEXT object_type, + uint64_t handle, + size_t location, + int32_t messageCode, + const char* pLayerPrefix, + const char *pMessage) { - /* Allow NULL for convinience, return if no callbacks registered. */ - if (!instance || list_is_empty(&instance->debug_report.callbacks)) + /* Return if no callbacks registered. */ + if (list_is_empty(&debug_report->callbacks)) return; - mtx_lock(&instance->debug_report.callbacks_mutex); + mtx_lock(&debug_report->callbacks_mutex); /* Section 33.2 of the Vulkan 1.0.59 spec says: * @@ -117,13 +117,13 @@ debug_report(struct vk_instance *instance, * is active." */ list_for_each_entry(struct vk_debug_report_callback, cb, - &instance->debug_report.callbacks, link) { + &debug_report->callbacks, link) { if (cb->flags & flags) cb->callback(flags, object_type, handle, location, messageCode, pLayerPrefix, pMessage, cb->data); } - mtx_unlock(&instance->debug_report.callbacks_mutex); + mtx_unlock(&debug_report->callbacks_mutex); } VKAPI_ATTR void VKAPI_CALL @@ -137,12 +137,12 @@ vk_common_DebugReportMessageEXT(VkInstance _instance, const char* pMessage) { VK_FROM_HANDLE(vk_instance, instance, _instance); - debug_report(instance, flags, objectType, - object, location, messageCode, pLayerPrefix, pMessage); + debug_report_message(&instance->debug_report, flags, objectType, + object, location, messageCode, pLayerPrefix, pMessage); } void -vk_debug_report(struct vk_instance *instance, +vk_debug_report(struct vk_debug_report *debug_report, VkDebugReportFlagsEXT flags, const struct vk_object_base *object, size_t location, @@ -152,7 +152,8 @@ vk_debug_report(struct vk_instance *instance, { VkObjectType object_type = object ? object->type : VK_OBJECT_TYPE_UNKNOWN; - debug_report(instance, flags, (VkDebugReportObjectTypeEXT)object_type, - (uint64_t)(uintptr_t)object, location, messageCode, - pLayerPrefix, pMessage); + + debug_report_message(debug_report, flags, (VkDebugReportObjectTypeEXT)object_type, + (uint64_t)(uintptr_t)object, location, messageCode, + pLayerPrefix, pMessage); } diff --git a/src/vulkan/runtime/vk_debug_report.h b/src/vulkan/runtime/vk_debug_report.h index ca208bb5f26..11b96b439dc 100644 --- a/src/vulkan/runtime/vk_debug_report.h +++ b/src/vulkan/runtime/vk_debug_report.h @@ -26,14 +26,22 @@ #ifndef VK_DEBUG_REPORT_H #define VK_DEBUG_REPORT_H -#include "vk_instance.h" +#include "vk_object.h" + +#include "util/simple_mtx.h" +#include "util/list.h" #ifdef __cplusplus extern "C" { #endif +struct vk_debug_report { + mtx_t callbacks_mutex; + struct list_head callbacks; +}; + void -vk_debug_report(struct vk_instance *instance, +vk_debug_report(struct vk_debug_report *debug_report, VkDebugReportFlagsEXT flags, const struct vk_object_base *object, size_t location, diff --git a/src/vulkan/runtime/vk_instance.h b/src/vulkan/runtime/vk_instance.h index 067d8cbf375..b7aa289ba7c 100644 --- a/src/vulkan/runtime/vk_instance.h +++ b/src/vulkan/runtime/vk_instance.h @@ -23,6 +23,7 @@ #ifndef VK_INSTANCE_H #define VK_INSTANCE_H +#include "vk_debug_report.h" #include "vk_dispatch_table.h" #include "vk_extensions.h" #include "vk_object.h" @@ -110,10 +111,7 @@ struct vk_instance { struct vk_instance_dispatch_table dispatch_table; /* VK_EXT_debug_report debug callbacks */ - struct { - mtx_t callbacks_mutex; - struct list_head callbacks; - } debug_report; + struct vk_debug_report debug_report; /* VK_EXT_debug_utils */ struct { diff --git a/src/vulkan/runtime/vk_log.c b/src/vulkan/runtime/vk_log.c index 32b5eaf0d19..48f2786c03b 100644 --- a/src/vulkan/runtime/vk_log.c +++ b/src/vulkan/runtime/vk_log.c @@ -259,8 +259,8 @@ __vk_log_impl(VkDebugUtilsMessageSeverityFlagBitsEXT severity, * decreasing order of importance, we're forwarding the first * one. */ - vk_debug_report(instance, flags, object_count ? objects[0] : NULL, 0, - 0, message_idname, message); + vk_debug_report(&instance->debug_report, flags, object_count ? objects[0] : NULL, + 0, 0, message_idname, message); } ralloc_free(message);