2017-10-30 17:17 GMT+01:00 Wladimir J. van der Laan <[email protected]>: > Need this to efficiently emit texture descriptor invalidations. > > Signed-off-by: Wladimir J. van der Laan <[email protected]>
Reviewed-by: Christian Gmeiner <[email protected]> > --- > src/gallium/drivers/etnaviv/etnaviv_context.c | 1 + > src/gallium/drivers/etnaviv/etnaviv_context.h | 1 + > src/gallium/drivers/etnaviv/etnaviv_emit.c | 1 + > src/gallium/drivers/etnaviv/etnaviv_texture.c | 9 +++++++-- > 4 files changed, 10 insertions(+), 2 deletions(-) > > diff --git a/src/gallium/drivers/etnaviv/etnaviv_context.c > b/src/gallium/drivers/etnaviv/etnaviv_context.c > index 7d54192..3038d21 100644 > --- a/src/gallium/drivers/etnaviv/etnaviv_context.c > +++ b/src/gallium/drivers/etnaviv/etnaviv_context.c > @@ -382,6 +382,7 @@ etna_cmd_stream_reset_notify(struct etna_cmd_stream > *stream, void *priv) > } > > ctx->dirty = ~0L; > + ctx->dirty_sampler_views = ~0L; > > /* go through all the used resources and clear their status flag */ > LIST_FOR_EACH_ENTRY_SAFE(rsc, rsc_tmp, &ctx->used_resources, list) > diff --git a/src/gallium/drivers/etnaviv/etnaviv_context.h > b/src/gallium/drivers/etnaviv/etnaviv_context.h > index 2903e09..1ed38ce 100644 > --- a/src/gallium/drivers/etnaviv/etnaviv_context.h > +++ b/src/gallium/drivers/etnaviv/etnaviv_context.h > @@ -156,6 +156,7 @@ struct etna_context { > struct compiled_viewport_state viewport; > unsigned num_fragment_sampler_views; > uint32_t active_sampler_views; > + uint32_t dirty_sampler_views; > struct pipe_sampler_view *sampler_view[PIPE_MAX_SAMPLERS]; > struct pipe_constant_buffer constant_buffer[PIPE_SHADER_TYPES]; > struct etna_vertexbuf_state vertex_buffer; > diff --git a/src/gallium/drivers/etnaviv/etnaviv_emit.c > b/src/gallium/drivers/etnaviv/etnaviv_emit.c > index 692275a..0990a37 100644 > --- a/src/gallium/drivers/etnaviv/etnaviv_emit.c > +++ b/src/gallium/drivers/etnaviv/etnaviv_emit.c > @@ -970,4 +970,5 @@ etna_emit_state(struct etna_context *ctx) > #undef EMIT_STATE_FIXP > #undef EMIT_STATE_RELOC > ctx->dirty = 0; > + ctx->dirty_sampler_views = 0; > } > diff --git a/src/gallium/drivers/etnaviv/etnaviv_texture.c > b/src/gallium/drivers/etnaviv/etnaviv_texture.c > index 597390a..335a2df 100644 > --- a/src/gallium/drivers/etnaviv/etnaviv_texture.c > +++ b/src/gallium/drivers/etnaviv/etnaviv_texture.c > @@ -276,12 +276,14 @@ set_sampler_views(struct etna_context *ctx, unsigned > start, unsigned end, > { > unsigned i, j; > uint32_t mask = 1 << start; > + uint32_t prev_active_sampler_views = ctx->active_sampler_views; > > for (i = start, j = 0; j < nr; i++, j++, mask <<= 1) { > pipe_sampler_view_reference(&ctx->sampler_view[i], views[j]); > - if (views[j]) > + if (views[j]) { > ctx->active_sampler_views |= mask; > - else > + ctx->dirty_sampler_views |= mask; > + } else > ctx->active_sampler_views &= ~mask; > } > > @@ -289,6 +291,9 @@ set_sampler_views(struct etna_context *ctx, unsigned > start, unsigned end, > pipe_sampler_view_reference(&ctx->sampler_view[i], NULL); > ctx->active_sampler_views &= ~mask; > } > + > + /* sampler views that changed state (even to inactive) are also dirty */ > + ctx->dirty_sampler_views |= ctx->active_sampler_views ^ > prev_active_sampler_views; > } > > static inline void > -- > 2.7.4 > -- greets -- Christian Gmeiner, MSc https://christian-gmeiner.info _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
