[PATCH 1/2] etnaviv: don't flush own context when updating resource use
Guido Günther
agx at sigxcpu.org
Fri Mar 29 12:46:01 UTC 2019
Hi,
On Wed, Mar 27, 2019 at 12:22:57PM +0100, Lucas Stach wrote:
> 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>
> ---
> 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;
Reviewed-By: Guido Günther <agx at sigxcpu.org>
More information about the etnaviv
mailing list