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 <alyssa@collabora.com>
Cc: mesa-stable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13203>
This commit is contained in:
Alyssa Rosenzweig 2021-09-27 20:24:38 -04:00 committed by Marge Bot
parent 4b2769493e
commit 304851422a

View file

@ -627,32 +627,35 @@ panfrost_set_sampler_views(
struct panfrost_context *ctx = pan_context(pctx); struct panfrost_context *ctx = pan_context(pctx);
ctx->dirty_shader[shader] |= PAN_DIRTY_STAGE_TEXTURE; ctx->dirty_shader[shader] |= PAN_DIRTY_STAGE_TEXTURE;
unsigned new_nr = 0;
unsigned i; unsigned i;
assert(start_slot == 0);
if (!views)
num_views = 0;
for (i = 0; i < num_views; ++i) { for (i = 0; i < num_views; ++i) {
if (views[i]) struct pipe_sampler_view *view = views ? views[i] : NULL;
new_nr = i + 1; unsigned p = i + start_slot;
if (take_ownership) { 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); NULL);
ctx->sampler_views[shader][i] = (struct panfrost_sampler_view *)views[i]; ctx->sampler_views[shader][i] = (struct panfrost_sampler_view *)view;
} else { } else {
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],
views[i]); view);
} }
} }
for (; i < ctx->sampler_view_count[shader]; i++) { for (; i < num_views + unbind_num_trailing_slots; i++) {
pipe_sampler_view_reference((struct pipe_sampler_view **)&ctx->sampler_views[shader][i], unsigned p = i + start_slot;
pipe_sampler_view_reference((struct pipe_sampler_view **)&ctx->sampler_views[shader][p],
NULL); 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 static void