i965/blorp: Add bilinear filtering of samples for multisample scaled blits
authorAnuj Phogat <anuj.phogat@gmail.com>
Fri, 31 May 2013 17:59:50 +0000 (10:59 -0700)
committerAnuj Phogat <anuj.phogat@gmail.com>
Mon, 1 Jul 2013 22:21:25 +0000 (15:21 -0700)
commit6fc3da2da0cce869d807211fdd5e96bba9f003f7
tree2d5f336df7efb4ccaa63b16b94ee21f418cd5945
parent27f2df2507a591eaf8ff6c2953fd39e60ad85482
i965/blorp: Add bilinear filtering of samples for multisample scaled blits

Current implementation of ext_framebuffer_multisample_blit_scaled in
i965/blorp uses nearest filtering for multisample scaled blits. Using
nearest filtering produces blocky artifacts and negates the benefits
of MSAA. That is the reason why extension was not enabled on i965.

This patch implements the bilinear filtering of samples in blorp engine.
Images generated with this patch are free from blocky artifacts and show
big improvement in visual quality.

Observed no piglit and gles3 regressions.

V3:
- Algorithm used for filtering assumes a rectangular grid of samples
  roughly corresponding to sample locations.
- Test the boundary conditions on the edges of texture.

V4:
- Clip texcoords and use conditional MOVs.
- Send texture dimensions as push constants.
- Remove the optimization in case of scaled multisample blits.

V5:
- Move mcs_fetch() inside the 'for' loop after computing pixel coordinates.

Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Acked-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
src/mesa/drivers/dri/i965/brw_blorp.h
src/mesa/drivers/dri/i965/brw_blorp_blit.cpp