mirror of
https://gitee.com/openharmony/third_party_mesa3d
synced 2024-11-30 11:00:40 +00:00
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" <mesa-stable@lists.freedesktop.org> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
This commit is contained in:
parent
8ab95b849e
commit
5c30fffeec
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user