On 06/19/2017 10:13 PM, Marek Olšák wrote:
On Mon, Jun 19, 2017 at 10:06 PM, Marek Olšák <mar...@gmail.com> wrote:
On Mon, Jun 19, 2017 at 7:29 PM, Samuel Pitoiset
<samuel.pitoi...@gmail.com> wrote:
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;

Can you declare the sampler state directly (without the pointer)? I.e.:

         struct si_sampler_state         sstate;

If you make that change, the series is:

Changed locally, thanks.

Samuel.


Reviewed-by: Marek Olšák <marek.ol...@amd.com>

Marek

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to