This is not necessarily a full re-initialization of the object but is
whatever is necessary/expedient for the client to see it as a new object
and not the one it has seen before. For vk_base_object, this removes
any private data and resets the object name to NULL.
Reviewed-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18324>
vk_free(&base->device->alloc, base->object_name);
}
+void
+vk_object_base_recycle(struct vk_object_base *base)
+{
+ struct vk_device *device = base->device;
+ VkObjectType obj_type = base->type;
+ vk_object_base_finish(base);
+ vk_object_base_init(device, base, obj_type);
+}
+
void *
vk_object_alloc(struct vk_device *device,
const VkAllocationCallbacks *alloc,
*/
void vk_object_base_finish(struct vk_object_base *base);
+/** Recycles a vk_object_base
+ *
+ * This should be called when an object is recycled and handed back to the
+ * client as if it were a new object. When it's called is not important as
+ * long as it's called between when the client thinks the object was destroyed
+ * and when the client sees it again as a supposedly new object.
+ *
+ * @param[inout] base The vk_object_base being recycled
+ */
+void vk_object_base_recycle(struct vk_object_base *base);
+
static inline void
vk_object_base_assert_valid(ASSERTED struct vk_object_base *base,
ASSERTED VkObjectType obj_type)