diff options
author | Eric Anholt <[email protected]> | 2013-04-16 17:21:21 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2013-05-15 09:43:45 -0700 |
commit | 645b610b6228a00bdcef0748fdb5fcbd2f1fadb8 (patch) | |
tree | 0f2ebcc2d9edcbfa6670502e20fc613396d0f98d /src | |
parent | 028c11e8e3a8bc24938b665264fddcb566f59d18 (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]>
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/drivers/dri/intel/intel_blit.c | 21 |
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; |