diff options
author | Jason Ekstrand <[email protected]> | 2019-02-12 15:19:57 -0600 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2019-03-05 10:06:50 -0600 |
commit | 5c30fffeec1732c21d600c036f95f8cdb1bb5487 (patch) | |
tree | bba58e4766214ec701aff6b60dd54ac2c9d3d814 /src/intel/vulkan/anv_cmd_buffer.c | |
parent | 8ab95b849e66f3221d80a67eef2ec6e3730901a8 (diff) |
anv: Take references to push descriptor set layouts
Technically, descriptor set layouts aren't required to survive past the
function they're passed into so we need to reference them.
Cc: "19.0" <[email protected]>
Reviewed-by: Lionel Landwerlin <[email protected]>
Diffstat (limited to 'src/intel/vulkan/anv_cmd_buffer.c')
-rw-r--r-- | src/intel/vulkan/anv_cmd_buffer.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/intel/vulkan/anv_cmd_buffer.c b/src/intel/vulkan/anv_cmd_buffer.c index d8107f86996..adb8b3ddffe 100644 --- a/src/intel/vulkan/anv_cmd_buffer.c +++ b/src/intel/vulkan/anv_cmd_buffer.c @@ -128,8 +128,13 @@ static void anv_cmd_pipeline_state_finish(struct anv_cmd_buffer *cmd_buffer, struct anv_cmd_pipeline_state *pipe_state) { - for (uint32_t i = 0; i < ARRAY_SIZE(pipe_state->push_descriptors); i++) - vk_free(&cmd_buffer->pool->alloc, pipe_state->push_descriptors[i]); + for (uint32_t i = 0; i < ARRAY_SIZE(pipe_state->push_descriptors); i++) { + if (pipe_state->push_descriptors[i]) { + anv_descriptor_set_layout_unref(cmd_buffer->device, + pipe_state->push_descriptors[i]->set.layout); + vk_free(&cmd_buffer->pool->alloc, pipe_state->push_descriptors[i]); + } + } } static void @@ -975,9 +980,9 @@ anv_cmd_buffer_push_descriptor_set(struct anv_cmd_buffer *cmd_buffer, &pipe_state->push_descriptors[_set]; if (*push_set == NULL) { - *push_set = vk_alloc(&cmd_buffer->pool->alloc, - sizeof(struct anv_push_descriptor_set), 8, - VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); + *push_set = vk_zalloc(&cmd_buffer->pool->alloc, + sizeof(struct anv_push_descriptor_set), 8, + VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); if (*push_set == NULL) { anv_batch_set_error(&cmd_buffer->batch, VK_ERROR_OUT_OF_HOST_MEMORY); return NULL; @@ -986,7 +991,12 @@ anv_cmd_buffer_push_descriptor_set(struct anv_cmd_buffer *cmd_buffer, struct anv_descriptor_set *set = &(*push_set)->set; - set->layout = layout; + if (set->layout != layout) { + if (set->layout) + anv_descriptor_set_layout_unref(cmd_buffer->device, set->layout); + anv_descriptor_set_layout_ref(layout); + set->layout = layout; + } set->size = anv_descriptor_set_layout_size(layout); set->buffer_view_count = layout->buffer_view_count; set->buffer_views = (*push_set)->buffer_views; |