Commit 0ac5acae authored by Rob Clark's avatar Rob Clark 💬
Browse files

freedreno/a6xx: fix resource_copy_region()



pctx->resource_copy_region() needs to fall back to sw copy for
non-renderable formats.  But previously for things that we could
not use the blitter for, would fall back to 3d.  Which won't work
if 3d can't render to the dst format either.

Instead rework things to fallback to fd_resource_copy_region(),
which will try 3d core and then fall back to memcpy().

Fixes (for example) dEQP-GLES3.functional.texture.format.sized.2d.rgb9_e5_pot
Signed-off-by: Rob Clark's avatarRob Clark <robdclark@gmail.com>
parent 4ec2f612
...@@ -512,18 +512,11 @@ emit_blit_texture(struct fd_ringbuffer *ring, const struct pipe_blit_info *info) ...@@ -512,18 +512,11 @@ emit_blit_texture(struct fd_ringbuffer *ring, const struct pipe_blit_info *info)
} }
static void static void
fd6_blit(struct pipe_context *pctx, const struct pipe_blit_info *info) emit_blit(struct pipe_context *pctx, const struct pipe_blit_info *info)
{ {
struct fd_context *ctx = fd_context(pctx); struct fd_context *ctx = fd_context(pctx);
struct fd_batch *batch; struct fd_batch *batch;
if (!can_do_blit(info)) {
fd_blitter_pipe_begin(ctx, info->render_condition_enable, false, FD_STAGE_BLIT);
fd_blitter_blit(ctx, info);
fd_blitter_pipe_end(ctx);
return;
}
fd_fence_ref(pctx->screen, &ctx->last_fence, NULL); fd_fence_ref(pctx->screen, &ctx->last_fence, NULL);
batch = fd_bc_alloc_batch(&ctx->screen->batch_cache, ctx, true); batch = fd_bc_alloc_batch(&ctx->screen->batch_cache, ctx, true);
...@@ -563,6 +556,21 @@ fd6_blit(struct pipe_context *pctx, const struct pipe_blit_info *info) ...@@ -563,6 +556,21 @@ fd6_blit(struct pipe_context *pctx, const struct pipe_blit_info *info)
fd_batch_reference(&batch, NULL); fd_batch_reference(&batch, NULL);
} }
static void
fd6_blit(struct pipe_context *pctx, const struct pipe_blit_info *info)
{
struct fd_context *ctx = fd_context(pctx);
if (!can_do_blit(info)) {
fd_blitter_pipe_begin(ctx, info->render_condition_enable, false, FD_STAGE_BLIT);
fd_blitter_blit(ctx, info);
fd_blitter_pipe_end(ctx);
return;
}
emit_blit(pctx, info);
}
static void static void
fd6_resource_copy_region(struct pipe_context *pctx, fd6_resource_copy_region(struct pipe_context *pctx,
struct pipe_resource *dst, struct pipe_resource *dst,
...@@ -596,7 +604,14 @@ fd6_resource_copy_region(struct pipe_context *pctx, ...@@ -596,7 +604,14 @@ fd6_resource_copy_region(struct pipe_context *pctx,
info.filter = PIPE_TEX_FILTER_NEAREST; info.filter = PIPE_TEX_FILTER_NEAREST;
info.scissor_enable = 0; info.scissor_enable = 0;
fd6_blit(pctx, &info); if (!can_do_blit(&info)) {
fd_resource_copy_region(pctx,
dst, dst_level, dstx, dsty, dstz,
src, src_level, src_box);
return;
}
emit_blit(pctx, &info);
} }
void void
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment