summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2013-04-16 17:21:21 -0700
committerKenneth Graunke <[email protected]>2013-05-15 09:43:45 -0700
commit645b610b6228a00bdcef0748fdb5fcbd2f1fadb8 (patch)
tree0f2ebcc2d9edcbfa6670502e20fc613396d0f98d
parent028c11e8e3a8bc24938b665264fddcb566f59d18 (diff)
intel: Add support for blitting 6 byte-per-pixel formats.
The next commit introduces what is apparently our first one, which tripped over this in glReadPixels. Reviewed-by: Kenneth Graunke <[email protected]>
-rw-r--r--src/mesa/drivers/dri/intel/intel_blit.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/mesa/drivers/dri/intel/intel_blit.c b/src/mesa/drivers/dri/intel/intel_blit.c
index 63378b6740a..f9cba85f1fb 100644
--- a/src/mesa/drivers/dri/intel/intel_blit.c
+++ b/src/mesa/drivers/dri/intel/intel_blit.c
@@ -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;