From 304851422a4610170e870a5315fefaa5ec42917f Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Mon, 27 Sep 2021 20:24:38 -0400 Subject: [PATCH] panfrost: Fix set_sampler_views for big GL Roughly use the freedreno logic to handle all the extra things that will come up in our Piglit sooner than later. Signed-off-by: Alyssa Rosenzweig Cc: mesa-stable Part-of: --- src/gallium/drivers/panfrost/pan_context.c | 33 ++++++++++++++++-------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c index 769f327..5228f9a 100644 --- a/src/gallium/drivers/panfrost/pan_context.c +++ b/src/gallium/drivers/panfrost/pan_context.c @@ -627,32 +627,35 @@ panfrost_set_sampler_views( struct panfrost_context *ctx = pan_context(pctx); ctx->dirty_shader[shader] |= PAN_DIRTY_STAGE_TEXTURE; - unsigned new_nr = 0; unsigned i; - assert(start_slot == 0); - - if (!views) - num_views = 0; - for (i = 0; i < num_views; ++i) { - if (views[i]) - new_nr = i + 1; + struct pipe_sampler_view *view = views ? views[i] : NULL; + unsigned p = i + start_slot; + if (take_ownership) { - pipe_sampler_view_reference((struct pipe_sampler_view **)&ctx->sampler_views[shader][i], + pipe_sampler_view_reference((struct pipe_sampler_view **)&ctx->sampler_views[shader][p], NULL); - ctx->sampler_views[shader][i] = (struct panfrost_sampler_view *)views[i]; + ctx->sampler_views[shader][i] = (struct panfrost_sampler_view *)view; } else { - pipe_sampler_view_reference((struct pipe_sampler_view **)&ctx->sampler_views[shader][i], - views[i]); + pipe_sampler_view_reference((struct pipe_sampler_view **)&ctx->sampler_views[shader][p], + view); } } - for (; i < ctx->sampler_view_count[shader]; i++) { - pipe_sampler_view_reference((struct pipe_sampler_view **)&ctx->sampler_views[shader][i], + for (; i < num_views + unbind_num_trailing_slots; i++) { + unsigned p = i + start_slot; + pipe_sampler_view_reference((struct pipe_sampler_view **)&ctx->sampler_views[shader][p], NULL); } - ctx->sampler_view_count[shader] = new_nr; + + /* Recalculate sampler view count */ + ctx->sampler_view_count[shader] = 0; + + for (i = 0; i < ARRAY_SIZE(ctx->sampler_views[shader]); ++i) { + if (ctx->sampler_views[shader][i]) + ctx->sampler_view_count[shader] = i + 1; + } } static void -- 2.7.4