mesa/meta: Use interpolateAtOffset for 16x MSAA copy blit
authorNeil Roberts <neil@linux.intel.com>
Mon, 28 Sep 2015 17:22:32 +0000 (18:22 +0100)
committerNeil Roberts <neil@linux.intel.com>
Thu, 5 Nov 2015 09:33:16 +0000 (10:33 +0100)
commitaa3f9aaf31e9056a255f9e0472ebdfdaa60abe54
tree216be1f8a3a2225247ef04ae814a9d042cde1eff
parentb080b3d54d99dfb46b5e8a6eb94fdbdeb937f255
mesa/meta: Use interpolateAtOffset for 16x MSAA copy blit

Previously there was a problem in i965 where if 16x MSAA is used then
some of the sample positions are exactly on the 0 x or y axis. When
the MSAA copy blit shader interpolates the texture coordinates at
these sample positions it was possible that it would jump to a
neighboring texel due to rounding errors. It is likely that these
positions would be used on 16x MSAA because that is where they are
defined to be in D3D.

To fix that this patch makes it use interpolateAtOffset in the blit
shader whenever 16x MSAA is used and the GL_ARB_gpu_shader5 extension
is available. This forces it to interpolate the texture coordinates at
the pixel center to avoid these problematic positions.

This fixes ext_framebuffer_multisample-unaligned-blit and
ext_framebuffer_multisample-clip-and-scissor-blit with 16x MSAA on
SKL+.

v2: Use interpolateAtOffset instead of interpolateAtSample
v3: Always try to enable GL_ARB_gpu_shader5 in the shader
    [Ian Romanick]

Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
src/mesa/drivers/common/meta_blit.c