[PATCH v2 05/10] etnaviv: also update textures from external resources
Christian Gmeiner
christian.gmeiner at gmail.com
Sun Jul 9 13:58:06 UTC 2017
2017-07-04 17:45 GMT+02:00 Lucas Stach <l.stach at pengutronix.de>:
> This reworks the logic in etna_update_sampler_source to select the
> newest resource view for updating the texture view. This should make
> the logic easier to follow and fixes texture updates from imported
> dma-bufs.
>
> Signed-off-by: Lucas Stach <l.stach at pengutronix.de>
> Reviewed-by: Wladimir J. van der Laan <laanwj at gmail.com>
Reviewed-by: Christian Gmeiner <christian.gmeiner at gmail.com>
> ---
> src/gallium/drivers/etnaviv/etnaviv_texture.c | 24 ++++++++++++++++--------
> 1 file changed, 16 insertions(+), 8 deletions(-)
>
> diff --git a/src/gallium/drivers/etnaviv/etnaviv_texture.c b/src/gallium/drivers/etnaviv/etnaviv_texture.c
> index 05fc7da58f86..954daea7ba57 100644
> --- a/src/gallium/drivers/etnaviv/etnaviv_texture.c
> +++ b/src/gallium/drivers/etnaviv/etnaviv_texture.c
> @@ -113,16 +113,24 @@ etna_delete_sampler_state(struct pipe_context *pctx, void *ss)
> static void
> etna_update_sampler_source(struct pipe_sampler_view *view)
> {
> - struct etna_resource *res = etna_resource(view->texture);
> + struct etna_resource *base = etna_resource(view->texture);
> + struct etna_resource *to = base, *from = base;
>
> - if (res->texture && etna_resource_older(etna_resource(res->texture), res)) {
> - /* Texture is older than render buffer, copy the texture using RS */
> - etna_copy_resource(view->context, res->texture, view->texture, 0,
> + if (base->external && etna_resource_newer(etna_resource(base->external), base))
> + from = etna_resource(base->external);
> +
> + if (base->texture)
> + to = etna_resource(base->texture);
> +
> + if ((to != from) && etna_resource_older(to, from)) {
> + etna_copy_resource(view->context, &to->base, &from->base, 0,
> + view->texture->last_level);
> + to->seqno = from->seqno;
> + } else if ((to == from) && etna_resource_needs_flush(to)) {
> + /* Resolve TS if needed, remove when adding sampler TS */
> + etna_copy_resource(view->context, &to->base, &from->base, 0,
> view->texture->last_level);
> - etna_resource(res->texture)->seqno = res->seqno;
> - } else if (etna_resource_needs_flush(res)) {
> - etna_copy_resource(view->context, view->texture, view->texture, 0, 0);
> - res->flush_seqno = res->seqno;
> + to->flush_seqno = from->seqno;
> }
> }
>
> --
> 2.11.0
>
greets
--
Christian Gmeiner, MSc
https://christian-gmeiner.info
More information about the etnaviv
mailing list