From c1070556a0c7f2e78188b0893d541ac6adeb1c9e Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Wed, 9 Mar 2022 15:15:40 -0600 Subject: [PATCH] vulkan/cmd_queue: Add a driver_free_cb hook If a driver sets driver_data but not driver_free_cb, driver_data will get freed along with the command. If a driver sets driver_free_cb, driver_data will not get automatically freed but the callback will get called before the rest of the data structure is freed. Reviewed-by: Boris Brezillon Part-of: --- src/vulkan/util/vk_cmd_queue_gen.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/vulkan/util/vk_cmd_queue_gen.py b/src/vulkan/util/vk_cmd_queue_gen.py index 8e43128..d72f8c7 100644 --- a/src/vulkan/util/vk_cmd_queue_gen.py +++ b/src/vulkan/util/vk_cmd_queue_gen.py @@ -128,6 +128,8 @@ struct vk_cmd_queue_entry { % endfor } u; void *driver_data; + void (*driver_free_cb)(struct vk_cmd_queue *queue, + struct vk_cmd_queue_entry *cmd); }; % for c in commands: @@ -256,7 +258,10 @@ vk_free_queue(struct vk_cmd_queue *queue) #ifdef ${c.guard} % endif case ${to_enum_name(c.name)}: - vk_free(queue->alloc, cmd->driver_data); + if (cmd->driver_free_cb) + cmd->driver_free_cb(queue, cmd); + else + vk_free(queue->alloc, cmd->driver_data); % for p in c.params[1:]: % if p.len: vk_free(queue->alloc, (${remove_suffix(p.decl.replace("const", ""), p.name)})cmd->u.${to_struct_field_name(c.name)}.${to_field_name(p.name)}); -- 2.7.4