[PATCH 1/2] etnaviv: don't flush own context when updating resource use

Christian Gmeiner christian.gmeiner at gmail.com
Wed Mar 27 14:10:33 UTC 2019


Am Mi., 27. März 2019 um 12:23 Uhr schrieb Lucas Stach <l.stach at pengutronix.de>:
>
> The context is self synchronizing at the GPU side, as commands are
> executed in order. We must not flush our own context when updating the
> resource use, as that leads to excessive flushing on effectively every
> draw call, causing huge CPU overhead.
>
> Fixes: 64813541d575 (etnaviv: fix resource usage tracking across
> different pipe_context's)
> Signed-off-by: Lucas Stach <l.stach at pengutronix.de>

Reviewed-by: Christian Gmeiner <christian.gmeiner at gmail.com>

> ---
>  src/gallium/drivers/etnaviv/etnaviv_resource.c | 11 ++++++++++-
>  1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/src/gallium/drivers/etnaviv/etnaviv_resource.c b/src/gallium/drivers/etnaviv/etnaviv_resource.c
> index ab40414fbe2c..c7eedab74187 100644
> --- a/src/gallium/drivers/etnaviv/etnaviv_resource.c
> +++ b/src/gallium/drivers/etnaviv/etnaviv_resource.c
> @@ -666,9 +666,18 @@ etna_resource_used(struct etna_context *ctx, struct pipe_resource *prsc,
>           struct etna_context *extctx = (struct etna_context *)entry->key;
>           struct pipe_context *pctx = &extctx->base;
>
> +         if (extctx == ctx)
> +            continue;
> +
>           pctx->flush(pctx, NULL, 0);
> +         /* It's safe to clear the status here. If we need to flush it means
> +          * either another context had the resource in exclusive (write) use,
> +          * or we transition the resource to exclusive use in our context.
> +          * In both cases the new status accurately reflects the resource use
> +          * after the flush.
> +          */
> +         rsc->status = 0;
>        }
> -      rsc->status = 0;
>     }
>
>     rsc->status |= status;
> --
> 2.20.1
>


-- 
greets
--
Christian Gmeiner, MSc

https://christian-gmeiner.info


More information about the etnaviv mailing list