From ca39949a27dcd4d9715afbb616a9896ce2e8b388 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Thu, 28 Jan 2021 16:45:29 -0600 Subject: [PATCH] vulkan: Make vk_debug_report_callback derive from vk_object_base Fixes: 51c6bc13ce3a "anv,vulkan: Implement VK_EXT_private_data" Reviewed-by: Bas Nieuwenhuizen Part-of: (cherry picked from commit bd1705a4808f61513f5ff818679efd5c5f105f8a) --- .pick_status.json | 2 +- src/vulkan/util/vk_debug_report.c | 15 +++++++++------ src/vulkan/util/vk_debug_report.h | 7 +++++++ 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 72af645697d..737a81da4e3 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -3991,7 +3991,7 @@ "description": "vulkan: Make vk_debug_report_callback derive from vk_object_base", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": "51c6bc13ce3a70b1948ce5c4edbc1d29c5460986" }, diff --git a/src/vulkan/util/vk_debug_report.c b/src/vulkan/util/vk_debug_report.c index 4673e9a3342..2fc19ea3f26 100644 --- a/src/vulkan/util/vk_debug_report.c +++ b/src/vulkan/util/vk_debug_report.c @@ -58,6 +58,9 @@ vk_create_debug_report_callback(struct vk_debug_report_instance *instance, if (!cb) return VK_ERROR_OUT_OF_HOST_MEMORY; + vk_object_base_init(NULL, &cb->base, + VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT); + cb->flags = pCreateInfo->flags; cb->callback = pCreateInfo->pfnCallback; cb->data = pCreateInfo->pUserData; @@ -66,7 +69,7 @@ vk_create_debug_report_callback(struct vk_debug_report_instance *instance, list_addtail(&cb->link, &instance->callbacks); mtx_unlock(&instance->callbacks_mutex); - *pCallback = (VkDebugReportCallbackEXT)(uintptr_t)cb; + *pCallback = vk_debug_report_callback_to_handle(cb); return VK_SUCCESS; } @@ -77,19 +80,19 @@ vk_destroy_debug_report_callback(struct vk_debug_report_instance *instance, const VkAllocationCallbacks* pAllocator, const VkAllocationCallbacks* instance_allocator) { - if (_callback == VK_NULL_HANDLE) - return; + VK_FROM_HANDLE(vk_debug_report_callback, callback, _callback); - struct vk_debug_report_callback *callback = - (struct vk_debug_report_callback *)(uintptr_t)_callback; + if (callback == NULL) + return; /* Remove from list and destroy given callback. */ mtx_lock(&instance->callbacks_mutex); list_del(&callback->link); vk_free2(instance_allocator, pAllocator, callback); mtx_unlock(&instance->callbacks_mutex); -} + vk_object_base_finish(&callback->base); +} void vk_debug_report(struct vk_debug_report_instance *instance, diff --git a/src/vulkan/util/vk_debug_report.h b/src/vulkan/util/vk_debug_report.h index 8cd09418795..e6ee06967d8 100644 --- a/src/vulkan/util/vk_debug_report.h +++ b/src/vulkan/util/vk_debug_report.h @@ -26,11 +26,15 @@ #ifndef VK_DEBUG_REPORT_H #define VK_DEBUG_REPORT_H +#include "vk_object.h" + #include "c11/threads.h" #include "util/list.h" #include struct vk_debug_report_callback { + struct vk_object_base base; + /* Link in the 'callbacks' list in anv_instance struct. */ struct list_head link; VkDebugReportFlagsEXT flags; @@ -38,6 +42,9 @@ struct vk_debug_report_callback { void * data; }; +VK_DEFINE_HANDLE_CASTS(vk_debug_report_callback, base, VkDebugReportCallbackEXT, + VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT) + struct vk_debug_report_instance { /* VK_EXT_debug_report debug callbacks */ mtx_t callbacks_mutex;