[PATCH 06/11] etnaviv: also update textures from external resources

Philipp Zabel p.zabel at pengutronix.de
Mon Jun 26 14:11:07 UTC 2017


On Fri, 2017-06-23 at 17:50 +0200, Lucas Stach wrote:
> 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>
> ---
>  src/gallium/drivers/etnaviv/etnaviv_texture.c | 23 +++++++++++++++--------
>  1 file changed, 15 insertions(+), 8 deletions(-)
> 
> diff --git a/src/gallium/drivers/etnaviv/etnaviv_texture.c b/src/gallium/drivers/etnaviv/etnaviv_texture.c
> index df77829078c0..b7e424f89bba 100644
> --- a/src/gallium/drivers/etnaviv/etnaviv_texture.c
> +++ b/src/gallium/drivers/etnaviv/etnaviv_texture.c
> @@ -113,16 +113,23 @@ 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)) {
> +      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;
>     }
>  }
>  

Reviewed-by: Philipp Zabel <p.zabel at pengutronix.de>

regards
Philipp



More information about the etnaviv mailing list