freedreno: try blitter for fd_resource_copy_region()
authorRob Clark <robdclark@gmail.com>
Wed, 2 Jan 2019 16:04:16 +0000 (11:04 -0500)
committerRob Clark <robdclark@gmail.com>
Thu, 3 Jan 2019 13:10:16 +0000 (08:10 -0500)
Signed-off-by: Rob Clark <robdclark@gmail.com>
src/gallium/drivers/freedreno/freedreno_blitter.c

index 5c4807577726993fed5e96972c4610ee5c4c53d3..aaf39f4c4d2c03a7aaf33b4eeb73b648ca3742ee 100644 (file)
@@ -173,6 +173,33 @@ fd_resource_copy_region(struct pipe_context *pctx,
 {
        struct fd_context *ctx = fd_context(pctx);
 
+       if (ctx->blit) {
+               struct pipe_blit_info info;
+
+               memset(&info, 0, sizeof info);
+               info.dst.resource = dst;
+               info.dst.level = dst_level;
+               info.dst.box.x = dstx;
+               info.dst.box.y = dsty;
+               info.dst.box.z = dstz;
+               info.dst.box.width = src_box->width;
+               info.dst.box.height = src_box->height;
+               assert(info.dst.box.width >= 0);
+               assert(info.dst.box.height >= 0);
+               info.dst.box.depth = 1;
+               info.dst.format = dst->format;
+               info.src.resource = src;
+               info.src.level = src_level;
+               info.src.box = *src_box;
+               info.src.format = src->format;
+               info.mask = util_format_get_mask(src->format);
+               info.filter = PIPE_TEX_FILTER_NEAREST;
+               info.scissor_enable = 0;
+
+               if (ctx->blit(ctx, &info))
+                       return;
+       }
+
        /* TODO if we have 2d core, or other DMA engine that could be used
         * for simple copies and reasonably easily synchronized with the 3d
         * core, this is where we'd plug it in..