diff --git a/src/venus/vkr_command_buffer.c b/src/venus/vkr_command_buffer.c index 668f928..d860cea 100644 --- a/src/venus/vkr_command_buffer.c +++ b/src/venus/vkr_command_buffer.c @@ -32,9 +32,7 @@ vkr_dispatch_vkDestroyCommandPool(struct vn_dispatch_context *dispatch, DESTROY_OBJECT(pool, command_pool, COMMAND_POOL, vkDestroyCommandPool, commandPool); - struct vkr_command_buffer *cmd, *tmp; - LIST_FOR_EACH_ENTRY_SAFE (cmd, tmp, &pool->command_buffers, base.track_head) - util_hash_table_remove_u64(ctx->object_table, cmd->base.id); + RELEASE_TRACKED_OBJECTS(&pool->command_buffers); util_hash_table_remove_u64(ctx->object_table, pool->base.id); } diff --git a/src/venus/vkr_common.h b/src/venus/vkr_common.h index ea42b6b..ff07868 100644 --- a/src/venus/vkr_common.h +++ b/src/venus/vkr_common.h @@ -134,6 +134,13 @@ object_array_fini(&arr); \ } while (0) +#define RELEASE_TRACKED_OBJECTS(track_list) \ + do { \ + struct vkr_object *obj, *tmp; \ + LIST_FOR_EACH_ENTRY_SAFE (obj, tmp, track_list, track_head) \ + util_hash_table_remove_u64(ctx->object_table, obj->id); \ + } while (0) + #define FREE_OBJECT_ARRAY(obj, vkr_type, vk_type, vk_cmd, arg_obj, arg_count, arg_pool) \ do { \ struct list_head free_list; \ @@ -155,9 +162,7 @@ vn_replace_##vk_cmd##_args_handle(args); \ vk_cmd(args->device, args->arg_pool, args->arg_count, args->arg_obj); \ \ - struct vkr_##vkr_type *obj, *tmp; \ - LIST_FOR_EACH_ENTRY_SAFE (obj, tmp, &free_list, base.track_head) \ - util_hash_table_remove_u64(ctx->object_table, obj->base.id); \ + RELEASE_TRACKED_OBJECTS(&free_list); \ } while (0) #define CREATE_PIPELINE_ARRAY(vk_cmd) \ diff --git a/src/venus/vkr_descriptor_set.c b/src/venus/vkr_descriptor_set.c index ed06238..2b02655 100644 --- a/src/venus/vkr_descriptor_set.c +++ b/src/venus/vkr_descriptor_set.c @@ -71,9 +71,7 @@ vkr_dispatch_vkDestroyDescriptorPool(struct vn_dispatch_context *dispatch, DESTROY_OBJECT(pool, descriptor_pool, DESCRIPTOR_POOL, vkDestroyDescriptorPool, descriptorPool); - struct vkr_descriptor_set *set, *tmp; - LIST_FOR_EACH_ENTRY_SAFE (set, tmp, &pool->descriptor_sets, base.track_head) - util_hash_table_remove_u64(ctx->object_table, set->base.id); + RELEASE_TRACKED_OBJECTS(&pool->descriptor_sets); util_hash_table_remove_u64(ctx->object_table, pool->base.id); } @@ -94,9 +92,8 @@ vkr_dispatch_vkResetDescriptorPool(struct vn_dispatch_context *dispatch, vn_replace_vkResetDescriptorPool_args_handle(args); args->ret = vkResetDescriptorPool(args->device, args->descriptorPool, args->flags); - struct vkr_descriptor_set *set, *tmp; - LIST_FOR_EACH_ENTRY_SAFE (set, tmp, &pool->descriptor_sets, base.track_head) - util_hash_table_remove_u64(ctx->object_table, set->base.id); + RELEASE_TRACKED_OBJECTS(&pool->descriptor_sets); + list_inithead(&pool->descriptor_sets); } diff --git a/src/venus/vkr_device.c b/src/venus/vkr_device.c index 7410478..ae53026 100644 --- a/src/venus/vkr_device.c +++ b/src/venus/vkr_device.c @@ -241,11 +241,7 @@ vkr_device_object_destroy(struct vkr_context *ctx, */ vkDestroyDescriptorPool(device, obj->handle.descriptor_pool, NULL); - struct vkr_descriptor_set *set, *tmp; - LIST_FOR_EACH_ENTRY_SAFE ( - set, tmp, &((struct vkr_descriptor_pool *)obj)->descriptor_sets, base.track_head) - util_hash_table_remove_u64(ctx->object_table, set->base.id); - + RELEASE_TRACKED_OBJECTS(&((struct vkr_descriptor_pool *)obj)->descriptor_sets); break; } case VK_OBJECT_TYPE_FRAMEBUFFER: @@ -257,11 +253,7 @@ vkr_device_object_destroy(struct vkr_context *ctx, */ vkDestroyCommandPool(device, obj->handle.command_pool, NULL); - struct vkr_command_buffer *buf, *tmp; - LIST_FOR_EACH_ENTRY_SAFE ( - buf, tmp, &((struct vkr_command_pool *)obj)->command_buffers, base.track_head) - util_hash_table_remove_u64(ctx->object_table, buf->base.id); - + RELEASE_TRACKED_OBJECTS(&((struct vkr_command_pool *)obj)->command_buffers); break; } case VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION: