diff --git a/src/gallium/drivers/etnaviv/etnaviv_resource.c b/src/gallium/drivers/etnaviv/etnaviv_resource.c index ab40414fbe2..c7eedab7418 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;