intel: Add support for blitting 6 byte-per-pixel formats.
authorEric Anholt <eric@anholt.net>
Wed, 17 Apr 2013 00:21:21 +0000 (17:21 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 15 May 2013 16:43:45 +0000 (09:43 -0700)
The next commit introduces what is apparently our first one, which tripped
over this in glReadPixels.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/intel/intel_blit.c

index 63378b6740a7675b02c8ca719444981a63641f55..f9cba85f1fb4ea1b502709ef953db8a9605f1110 100644 (file)
@@ -151,15 +151,22 @@ intelEmitCopyBlit(struct intel_context *intel,
    if (src_pitch % 4 != 0 || dst_pitch % 4 != 0)
       return false;
 
-   /* For big formats (such as floating point), do the copy using 32bpp and
-    * multiply the coordinates.
+   /* For big formats (such as floating point), do the copy using 16 or 32bpp
+    * and multiply the coordinates.
     */
    if (cpp > 4) {
-      assert(cpp % 4 == 0);
-      dst_x *= cpp / 4;
-      dst_x2 *= cpp / 4;
-      src_x *= cpp / 4;
-      cpp = 4;
+      if (cpp % 4 == 2) {
+         dst_x *= cpp / 2;
+         dst_x2 *= cpp / 2;
+         src_x *= cpp / 2;
+         cpp = 2;
+      } else {
+         assert(cpp % 4 == 0);
+         dst_x *= cpp / 4;
+         dst_x2 *= cpp / 4;
+         src_x *= cpp / 4;
+         cpp = 4;
+      }
    }
 
    BR13 = br13_for_cpp(cpp) | translate_raster_op(logic_op) << 16;