[Mesa-dev] [PATCH 01/16] util: new util_try_blit_via_copy_region() function

Brian Paul brianp at vmware.com
Tue Jun 28 23:52:05 UTC 2016


Pulled out of the util_try_blit_via_copy_region() function.  Subsequent
changes build on this.
---
 src/gallium/auxiliary/util/u_surface.c | 44 ++++++++++++++++++++++------------
 src/gallium/auxiliary/util/u_surface.h |  3 +++
 2 files changed, 32 insertions(+), 15 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_surface.c b/src/gallium/auxiliary/util/u_surface.c
index 8408aa8..8d22bcf 100644
--- a/src/gallium/auxiliary/util/u_surface.c
+++ b/src/gallium/auxiliary/util/u_surface.c
@@ -686,18 +686,9 @@ get_sample_count(const struct pipe_resource *res)
    return res->nr_samples ? res->nr_samples : 1;
 }
 
-/**
- * Try to do a blit using resource_copy_region. The function calls
- * resource_copy_region if the blit description is compatible with it.
- *
- * It returns TRUE if the blit was done using resource_copy_region.
- *
- * It returns FALSE otherwise and the caller must fall back to a more generic
- * codepath for the blit operation. (e.g. by using u_blitter)
- */
+
 boolean
-util_try_blit_via_copy_region(struct pipe_context *ctx,
-                              const struct pipe_blit_info *blit)
+util_can_blit_via_copy_region(const struct pipe_blit_info *blit)
 {
    unsigned mask = util_format_get_mask(blit->dst.format);
 
@@ -748,9 +739,32 @@ util_try_blit_via_copy_region(struct pipe_context *ctx,
    if (blit->alpha_blend)
       return FALSE;
 
-   ctx->resource_copy_region(ctx, blit->dst.resource, blit->dst.level,
-                             blit->dst.box.x, blit->dst.box.y, blit->dst.box.z,
-                             blit->src.resource, blit->src.level,
-                             &blit->src.box);
    return TRUE;
 }
+
+
+/**
+ * Try to do a blit using resource_copy_region. The function calls
+ * resource_copy_region if the blit description is compatible with it.
+ *
+ * It returns TRUE if the blit was done using resource_copy_region.
+ *
+ * It returns FALSE otherwise and the caller must fall back to a more generic
+ * codepath for the blit operation. (e.g. by using u_blitter)
+ */
+boolean
+util_try_blit_via_copy_region(struct pipe_context *ctx,
+                              const struct pipe_blit_info *blit)
+{
+   if (util_can_blit_via_copy_region(blit)) {
+      ctx->resource_copy_region(ctx, blit->dst.resource, blit->dst.level,
+                                blit->dst.box.x, blit->dst.box.y,
+                                blit->dst.box.z,
+                                blit->src.resource, blit->src.level,
+                                &blit->src.box);
+      return TRUE;
+   }
+   else {
+      return FALSE;
+   }
+}
diff --git a/src/gallium/auxiliary/util/u_surface.h b/src/gallium/auxiliary/util/u_surface.h
index bfd8f40..bda2e1e 100644
--- a/src/gallium/auxiliary/util/u_surface.h
+++ b/src/gallium/auxiliary/util/u_surface.h
@@ -98,6 +98,9 @@ util_clear_depth_stencil(struct pipe_context *pipe,
                          unsigned dstx, unsigned dsty,
                          unsigned width, unsigned height);
 
+boolean
+util_can_blit_via_copy_region(const struct pipe_blit_info *blit);
+
 extern boolean
 util_try_blit_via_copy_region(struct pipe_context *ctx,
                               const struct pipe_blit_info *blit);
-- 
1.9.1



More information about the mesa-dev mailing list