diff options
Diffstat (limited to 'src/gallium/drivers/freedreno/freedreno_resource.c')
-rw-r--r-- | src/gallium/drivers/freedreno/freedreno_resource.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/gallium/drivers/freedreno/freedreno_resource.c b/src/gallium/drivers/freedreno/freedreno_resource.c index f19f38add85..14751074ace 100644 --- a/src/gallium/drivers/freedreno/freedreno_resource.c +++ b/src/gallium/drivers/freedreno/freedreno_resource.c @@ -498,7 +498,21 @@ fd_resource_transfer_map(struct pipe_context *pctx, if (usage & PIPE_TRANSFER_READ) { fd_blit_to_staging(ctx, trans); - fd_bo_cpu_prep(rsc->bo, ctx->pipe, DRM_FREEDRENO_PREP_READ); + + struct fd_batch *batch = NULL; + fd_batch_reference(&batch, staging_rsc->write_batch); + + /* we can't fd_bo_cpu_prep() until the blit to staging + * is submitted to kernel.. in that case write_batch + * wouldn't be NULL yet: + */ + if (batch) { + fd_batch_sync(batch); + fd_batch_reference(&batch, NULL); + } + + fd_bo_cpu_prep(staging_rsc->bo, ctx->pipe, + DRM_FREEDRENO_PREP_READ); } buf = fd_bo_map(staging_rsc->bo); |