[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