iris: implement copy image
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 26 Jun 2018 07:28:52 +0000 (00:28 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 21 Feb 2019 18:26:07 +0000 (10:26 -0800)
src/gallium/drivers/iris/iris_blit.c
src/gallium/drivers/iris/iris_resource.c

index ea61c253987dab86483da2e4364b78d00f0e6751..79d98792f931b7f2bbc72ad69967e90416d5daf4 100644 (file)
@@ -112,8 +112,36 @@ iris_blit(struct pipe_context *ctx, const struct pipe_blit_info *info)
    blorp_batch_finish(&blorp_batch);
 }
 
+static void
+iris_resource_copy_region(struct pipe_context *ctx,
+                          struct pipe_resource *dst,
+                          unsigned dst_level,
+                          unsigned dstx, unsigned dsty, unsigned dstz,
+                          struct pipe_resource *src,
+                          unsigned src_level,
+                          const struct pipe_box *src_box)
+{
+   struct iris_context *ice = (void *) ctx;
+   struct blorp_surf src_surf, dst_surf;
+   iris_blorp_surf_for_resource(&src_surf, src, ISL_AUX_USAGE_NONE, false);
+   iris_blorp_surf_for_resource(&dst_surf, dst, ISL_AUX_USAGE_NONE, true);
+
+   // XXX: ???
+   unsigned dst_layer = dstz;
+   unsigned src_layer = src_box->z;
+
+   struct blorp_batch blorp_batch;
+   blorp_batch_init(&ice->blorp, &blorp_batch, &ice->render_batch, 0);
+   blorp_copy(&blorp_batch, &src_surf, src_level, src_layer,
+              &dst_surf, dst_level, dst_layer,
+              src_box->x, src_box->y, dstx, dsty,
+              src_box->width, src_box->height);
+   blorp_batch_finish(&blorp_batch);
+}
+
 void
 iris_init_blit_functions(struct pipe_context *ctx)
 {
    ctx->blit = iris_blit;
+   ctx->resource_copy_region = iris_resource_copy_region;
 }
index 67772a3317fbb663f9516acc51025bb7dd1eafa2..924a69199896fa8791209e405ca5d6f06eff4dea 100644 (file)
@@ -585,17 +585,6 @@ iris_transfer_unmap(struct pipe_context *pipe, struct pipe_transfer *xfer)
    free(map);
 }
 
-static void
-iris_resource_copy_region(struct pipe_context *ctx,
-                          struct pipe_resource *dst,
-                          unsigned dst_level,
-                          unsigned dstx, unsigned dsty, unsigned dstz,
-                          struct pipe_resource *src,
-                          unsigned src_level,
-                          const struct pipe_box *src_box)
-{
-}
-
 static void
 iris_flush_resource(struct pipe_context *ctx, struct pipe_resource *resource)
 {
@@ -621,5 +610,4 @@ iris_init_resource_functions(struct pipe_context *ctx)
    ctx->transfer_unmap = iris_transfer_unmap;
    ctx->buffer_subdata = u_default_buffer_subdata;
    ctx->texture_subdata = u_default_texture_subdata;
-   ctx->resource_copy_region = iris_resource_copy_region;
 }