i965/blorp: Fix integer downsampling on Gen7.
authorPaul Berry <stereotype441@gmail.com>
Sat, 7 Jul 2012 15:28:46 +0000 (08:28 -0700)
committerPaul Berry <stereotype441@gmail.com>
Fri, 20 Jul 2012 16:35:37 +0000 (09:35 -0700)
commite5d983267a98bf9f73f0ea981eaca339b975a8db
tree4d3d76efbd2afc5df94d87142dde462be8b3a88b
parentb961d37e613b8b14927c42e09d16d09d70ebcb77
i965/blorp: Fix integer downsampling on Gen7.

When downsampling an integer-format buffer on Gen7, we need to use the
"avg" instruction rather than the "add" instruction, to ensure that we
don't overflow the range of 32-bit integers.  Also, we need to use the
proper register type (BRW_REGISTER_TYPE_D or BRW_REGISTER_TYPE_UD) for
intermediate color data and for writing to the render target.

Note: this patch causes blorp to use the proper register type for all
operations (downsampling, upsampling, and ordinary blits).  Strictly
speaking, this is only necessary for downsampling, because the other
operations exclusively use MOV instructions on the color data.  But
it's simpler to use the proper register type in all cases.

Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
src/mesa/drivers/dri/i965/brw_blorp.h
src/mesa/drivers/dri/i965/brw_blorp_blit.cpp