Needed for updating all resident texture descriptors when dirty_tex_counter changes.
Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com> --- src/gallium/drivers/radeonsi/si_descriptors.c | 12 +++++++----- src/gallium/drivers/radeonsi/si_pipe.h | 1 + 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c b/src/gallium/drivers/radeonsi/si_descriptors.c index cb9c47c0d83..fda9637409e 100644 --- a/src/gallium/drivers/radeonsi/si_descriptors.c +++ b/src/gallium/drivers/radeonsi/si_descriptors.c @@ -2279,7 +2279,6 @@ static uint64_t si_create_texture_handle(struct pipe_context *ctx, struct si_sampler_view *sview = (struct si_sampler_view *)view; struct si_context *sctx = (struct si_context *)ctx; struct si_texture_handle *tex_handle; - struct si_sampler_state *sstate; uint32_t desc_list[16]; uint64_t handle; @@ -2290,18 +2289,19 @@ static uint64_t si_create_texture_handle(struct pipe_context *ctx, memset(desc_list, 0, sizeof(desc_list)); si_init_descriptor_list(&desc_list[0], 16, 1, null_texture_descriptor); - sstate = ctx->create_sampler_state(ctx, state); - if (!sstate) { + tex_handle->sstate = ctx->create_sampler_state(ctx, state); + if (!tex_handle->sstate) { FREE(tex_handle); return 0; } - si_set_sampler_view_desc(sctx, sview, sstate, &desc_list[0]); - ctx->delete_sampler_state(ctx, sstate); + si_set_sampler_view_desc(sctx, sview, tex_handle->sstate, + &desc_list[0]); tex_handle->desc = si_create_bindless_descriptor(sctx, desc_list, sizeof(desc_list)); if (!tex_handle->desc) { + ctx->delete_sampler_state(ctx, tex_handle->sstate); FREE(tex_handle); return 0; } @@ -2313,6 +2313,7 @@ static uint64_t si_create_texture_handle(struct pipe_context *ctx, tex_handle)) { pb_slab_free(&sctx->bindless_descriptor_slabs, &tex_handle->desc->entry); + ctx->delete_sampler_state(ctx, tex_handle->sstate); FREE(tex_handle); return 0; } @@ -2336,6 +2337,7 @@ static void si_delete_texture_handle(struct pipe_context *ctx, uint64_t handle) tex_handle = (struct si_texture_handle *)entry->data; + ctx->delete_sampler_state(ctx, tex_handle->sstate); pipe_sampler_view_reference(&tex_handle->view, NULL); _mesa_hash_table_remove(sctx->tex_handles, entry); pb_slab_free(&sctx->bindless_descriptor_slabs, diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h index afe68a3d35d..1a607a4429d 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.h +++ b/src/gallium/drivers/radeonsi/si_pipe.h @@ -243,6 +243,7 @@ struct si_texture_handle { struct si_bindless_descriptor *desc; struct pipe_sampler_view *view; + struct si_sampler_state *sstate; }; struct si_image_handle -- 2.13.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev