zink: track active use counts for descriptor layouts

Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11404>
This commit is contained in:
Mike Blumenkrantz 2021-05-09 13:59:06 -04:00 committed by Marge Bot
parent 43dace32a0
commit 95fe2f7b82
2 changed files with 6 additions and 0 deletions

View file

@ -86,6 +86,7 @@ struct zink_descriptor_state_key {
struct zink_descriptor_layout_key {
unsigned num_descriptors;
VkDescriptorSetLayoutBinding *bindings;
unsigned use_count;
};
struct zink_descriptor_layout {

View file

@ -214,6 +214,7 @@ zink_descriptor_program_init_lazy(struct zink_context *ctx, struct zink_program
}
}
pg->dd->layouts[pg->num_dsl] = zink_descriptor_util_layout_get(ctx, type, bindings[type], num_bindings[type], &pg->dd->layout_key[type]);
pg->dd->layout_key[type]->use_count++;
pg->dsl[pg->num_dsl] = pg->dd->layouts[pg->num_dsl]->layout;
pg->num_dsl++;
}
@ -276,6 +277,10 @@ zink_descriptor_program_init_lazy(struct zink_context *ctx, struct zink_program
void
zink_descriptor_program_deinit_lazy(struct zink_screen *screen, struct zink_program *pg)
{
for (unsigned i = 0; pg->num_dsl && i < ZINK_DESCRIPTOR_TYPES; i++) {
if (pg->dd->layout_key[i])
pg->dd->layout_key[i]->use_count--;
}
if (pg->dd && pg->dd->push_template)
screen->vk.DestroyDescriptorUpdateTemplate(screen->dev, pg->dd->push_template, NULL);
ralloc_free(pg->dd);