diff options
Diffstat (limited to 'src/gallium/drivers/panfrost')
-rw-r--r-- | src/gallium/drivers/panfrost/ci/expected-failures.txt | 4 | ||||
-rw-r--r-- | src/gallium/drivers/panfrost/pan_resource.c | 27 |
2 files changed, 12 insertions, 19 deletions
diff --git a/src/gallium/drivers/panfrost/ci/expected-failures.txt b/src/gallium/drivers/panfrost/ci/expected-failures.txt index 0cadaa20cdb..7e7dbd62307 100644 --- a/src/gallium/drivers/panfrost/ci/expected-failures.txt +++ b/src/gallium/drivers/panfrost/ci/expected-failures.txt @@ -51,10 +51,6 @@ dEQP-GLES2.functional.fbo.render.shared_colorbuffer.tex2d_rgb_depth_component16 dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb565_depth_component16 Fail dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgba_depth_component16 Fail dEQP-GLES2.functional.fbo.render.shared_depthbuffer.tex2d_rgb_depth_component16 Fail -dEQP-GLES2.functional.fbo.render.texsubimage.after_render_tex2d_rgba Fail -dEQP-GLES2.functional.fbo.render.texsubimage.after_render_tex2d_rgb Fail -dEQP-GLES2.functional.fbo.render.texsubimage.between_render_tex2d_rgba Fail -dEQP-GLES2.functional.fbo.render.texsubimage.between_render_tex2d_rgb Fail dEQP-GLES2.functional.fragment_ops.depth_stencil.random.0 Fail dEQP-GLES2.functional.fragment_ops.depth_stencil.random.10 Fail dEQP-GLES2.functional.fragment_ops.depth_stencil.random.11 Fail diff --git a/src/gallium/drivers/panfrost/pan_resource.c b/src/gallium/drivers/panfrost/pan_resource.c index 1f7605adcd5..49088618ae4 100644 --- a/src/gallium/drivers/panfrost/pan_resource.c +++ b/src/gallium/drivers/panfrost/pan_resource.c @@ -578,10 +578,8 @@ panfrost_transfer_map(struct pipe_context *pctx, is_bound |= fb->cbufs[c]->texture == resource; } - if (is_bound && (usage & PIPE_TRANSFER_READ)) { - assert(level == 0); - panfrost_flush_all_batches(ctx, true); - } + if (is_bound && (usage & PIPE_TRANSFER_READ)) + assert(level == 0); /* TODO: Respect usage flags */ @@ -594,11 +592,11 @@ panfrost_transfer_map(struct pipe_context *pctx, /* No flush for writes to uninitialized */ } else if (!(usage & PIPE_TRANSFER_UNSYNCHRONIZED)) { if (usage & PIPE_TRANSFER_WRITE) { - /* STUB: flush reading */ - //printf("debug: missed reading flush %d\n", resource->target); + panfrost_flush_batches_accessing_bo(ctx, bo, PAN_BO_ACCESS_RW); + panfrost_bo_wait(bo, INT64_MAX, PAN_BO_ACCESS_RW); } else if (usage & PIPE_TRANSFER_READ) { - /* STUB: flush writing */ - //printf("debug: missed writing flush %d (%d-%d)\n", resource->target, box->x, box->x + box->width); + panfrost_flush_batches_accessing_bo(ctx, bo, PAN_BO_ACCESS_WRITE); + panfrost_bo_wait(bo, INT64_MAX, PAN_BO_ACCESS_WRITE); } else { /* Why are you even mapping?! */ } @@ -748,11 +746,8 @@ panfrost_generate_mipmap( * reorder-type optimizations in place. But for now prioritize * correctness. */ - struct panfrost_batch *batch = panfrost_get_batch_for_fbo(ctx); - bool has_draws = batch->last_job.gpu; - - if (has_draws) - panfrost_flush_all_batches(ctx, true); + panfrost_flush_batches_accessing_bo(ctx, rsrc->bo, PAN_BO_ACCESS_RW); + panfrost_bo_wait(rsrc->bo, INT64_MAX, PAN_BO_ACCESS_RW); /* We've flushed the original buffer if needed, now trigger a blit */ @@ -765,8 +760,10 @@ panfrost_generate_mipmap( /* If the blit was successful, flush once more. If it wasn't, well, let * the state tracker deal with it. */ - if (blit_res) - panfrost_flush_all_batches(ctx, true); + if (blit_res) { + panfrost_flush_batches_accessing_bo(ctx, rsrc->bo, PAN_BO_ACCESS_WRITE); + panfrost_bo_wait(rsrc->bo, INT64_MAX, PAN_BO_ACCESS_WRITE); + } return blit_res; } |