Am Mi., 27. März 2019 um 12:23 Uhr schrieb Lucas Stach <l.st...@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.st...@pengutronix.de>
Reviewed-by: Christian Gmeiner <christian.gmei...@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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev