2017-07-04 17:45 GMT+02:00 Lucas Stach <l.st...@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.st...@pengutronix.de> > Reviewed-by: Wladimir J. van der Laan <laa...@gmail.com>
Reviewed-by: Christian Gmeiner <christian.gmei...@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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev