Mesa (master): util: replace format equality test with compatibility test in blit code

Brian Paul brianp at kemper.freedesktop.org
Wed Feb 29 15:40:45 UTC 2012


Module: Mesa
Branch: master
Commit: 7f9692b97dab498ad47f82394892455d43dcd08b
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=7f9692b97dab498ad47f82394892455d43dcd08b

Author: Brian Paul <brianp at vmware.com>
Date:   Tue Feb 28 07:48:34 2012 -0700

util: replace format equality test with compatibility test in blit code

This lets us use the resource_copy_region() path when blitting from
R8G8B8A8 to R8G8B8x8, for example.

v2: be smarter when src_format==dst_format

Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
Reviewed-by: José Fonseca <jfonseca at vmware.com>

---

 src/gallium/auxiliary/util/u_blit.c |   22 +++++++++++++++++++++-
 1 files changed, 21 insertions(+), 1 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_blit.c b/src/gallium/auxiliary/util/u_blit.c
index a10fd17..1279733 100644
--- a/src/gallium/auxiliary/util/u_blit.c
+++ b/src/gallium/auxiliary/util/u_blit.c
@@ -321,6 +321,26 @@ regions_overlap(int srcX0, int srcY0,
 
 
 /**
+ * Can we blit from src format to dest format with a simple copy?
+ */
+static boolean
+formats_compatible(enum pipe_format src_format,
+                   enum pipe_format dst_format)
+{
+   if (src_format == dst_format) {
+      return TRUE;
+   }
+   else {
+      const struct util_format_description *src_desc =
+         util_format_description(src_format);
+      const struct util_format_description *dst_desc =
+         util_format_description(dst_format);
+      return util_is_format_compatible(src_desc, dst_desc);
+   }
+}
+
+
+/**
  * Copy pixel block from src surface to dst surface.
  * Overlapping regions are acceptable.
  * Flipping and stretching are supported.
@@ -377,7 +397,7 @@ util_blit_pixels_writemask(struct blit_state *ctx,
     * no overlapping.
     * Filter mode should not matter since there's no stretching.
     */
-   if (dst_format == src_format &&
+   if (formats_compatible(src_format, dst_format) &&
        srcX0 < srcX1 &&
        dstX0 < dstX1 &&
        srcY0 < srcY1 &&




More information about the mesa-commit mailing list