[PATCH 2/2] etnaviv: flush all pending contexts when accessing a resource with the CPU

Christian Gmeiner christian.gmeiner at gmail.com
Wed Mar 27 14:11:24 UTC 2019


Am Mi., 27. März 2019 um 12:23 Uhr schrieb Lucas Stach <l.stach at pengutronix.de>:
>
> When setting up a transfer to a resource, all contexts where the resource
> is pending must be flushed. Otherwise a write transfer might be started
> in the current context before all contexts that access the resource in
> shared (read) mode have been executed.
>
> 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_transfer.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/drivers/etnaviv/etnaviv_transfer.c b/src/gallium/drivers/etnaviv/etnaviv_transfer.c
> index 45cd31207f70..d875803bde26 100644
> --- a/src/gallium/drivers/etnaviv/etnaviv_transfer.c
> +++ b/src/gallium/drivers/etnaviv/etnaviv_transfer.c
> @@ -360,8 +360,14 @@ etna_transfer_map(struct pipe_context *pctx, struct pipe_resource *prsc,
>        if ((trans->rsc && (etna_resource(trans->rsc)->status & ETNA_PENDING_WRITE)) ||
>            (!trans->rsc &&
>             (((usage & PIPE_TRANSFER_READ) && (rsc->status & ETNA_PENDING_WRITE)) ||
> -           ((usage & PIPE_TRANSFER_WRITE) && rsc->status))))
> -         pctx->flush(pctx, NULL, 0);
> +           ((usage & PIPE_TRANSFER_WRITE) && rsc->status)))) {
> +         set_foreach(rsc->pending_ctx, entry) {
> +            struct etna_context *pend_ctx = (struct etna_context *)entry->key;
> +            struct pipe_context *pend_pctx = &pend_ctx->base;
> +
> +            pend_pctx->flush(pend_pctx, NULL, 0);
> +         }
> +      }
>
>        mtx_unlock(&screen->lock);
>
> --
> 2.20.1
>


-- 
greets
--
Christian Gmeiner, MSc

https://christian-gmeiner.info


More information about the etnaviv mailing list