diff --git a/src/vulkan/util/vk_object.c b/src/vulkan/util/vk_object.c index 9aaee976adc..52dbeaedda6 100644 --- a/src/vulkan/util/vk_object.c +++ b/src/vulkan/util/vk_object.c @@ -38,6 +38,7 @@ vk_object_base_init(struct vk_device *device, base->_loader_data.loaderMagic = ICD_LOADER_MAGIC; base->type = obj_type; base->device = device; + base->client_visible = false; base->object_name = NULL; util_sparse_array_init(&base->private_data, sizeof(uint64_t), 8); } diff --git a/src/vulkan/util/vk_object.h b/src/vulkan/util/vk_object.h index 35404aa85f4..5b968d90f58 100644 --- a/src/vulkan/util/vk_object.h +++ b/src/vulkan/util/vk_object.h @@ -44,6 +44,9 @@ struct vk_object_base { struct vk_device *device; + /* True if this object is fully constructed and visible to the client */ + bool client_visible; + /* For VK_EXT_private_data */ struct util_sparse_array private_data; @@ -85,6 +88,8 @@ vk_object_base_from_u64_handle(uint64_t handle, VkObjectType obj_type) __driver_type ## _to_handle(struct __driver_type *_obj) \ { \ vk_object_base_assert_valid(&_obj->__base, __VK_TYPE); \ + if (_obj != NULL) \ + _obj->__base.client_visible = true; \ return (__VkType) _obj; \ } @@ -103,6 +108,8 @@ vk_object_base_from_u64_handle(uint64_t handle, VkObjectType obj_type) __driver_type ## _to_handle(struct __driver_type *_obj) \ { \ vk_object_base_assert_valid(&_obj->__base, __VK_TYPE); \ + if (_obj != NULL) \ + _obj->__base.client_visible = true; \ return (__VkType)(uintptr_t) _obj; \ }