diff --git a/src/nouveau/vulkan/nvk_cmd_buffer.c b/src/nouveau/vulkan/nvk_cmd_buffer.c index 8d4f6001892..d9b3486b536 100644 --- a/src/nouveau/vulkan/nvk_cmd_buffer.c +++ b/src/nouveau/vulkan/nvk_cmd_buffer.c @@ -28,6 +28,18 @@ #include "nvk_cla0c0.h" #include "nvk_clc597.h" +static void +nvk_descriptor_state_fini(struct nvk_cmd_buffer *cmd, + struct nvk_descriptor_state *desc) +{ + struct nvk_cmd_pool *pool = nvk_cmd_buffer_pool(cmd); + + for (unsigned i = 0; i < NVK_MAX_SETS; i++) { + vk_free(&pool->vk.alloc, desc->push[i]); + desc->push[i] = NULL; + } +} + static void nvk_destroy_cmd_buffer(struct vk_command_buffer *vk_cmd_buffer) { @@ -35,6 +47,9 @@ nvk_destroy_cmd_buffer(struct vk_command_buffer *vk_cmd_buffer) container_of(vk_cmd_buffer, struct nvk_cmd_buffer, vk); struct nvk_cmd_pool *pool = nvk_cmd_buffer_pool(cmd); + nvk_descriptor_state_fini(cmd, &cmd->state.gfx.descriptors); + nvk_descriptor_state_fini(cmd, &cmd->state.cs.descriptors); + nvk_cmd_pool_free_bo_list(pool, &cmd->bos); nvk_cmd_pool_free_bo_list(pool, &cmd->gart_bos); util_dynarray_fini(&cmd->pushes); @@ -86,6 +101,9 @@ nvk_reset_cmd_buffer(struct vk_command_buffer *vk_cmd_buffer, vk_command_buffer_reset(&cmd->vk); + nvk_descriptor_state_fini(cmd, &cmd->state.gfx.descriptors); + nvk_descriptor_state_fini(cmd, &cmd->state.cs.descriptors); + nvk_cmd_pool_free_bo_list(pool, &cmd->bos); nvk_cmd_pool_free_gart_bo_list(pool, &cmd->gart_bos); cmd->upload_bo = NULL;