i965/msaa: Implement GL_SAMPLE_ALPHA_TO_{COVERAGE,ONE}.
authorPaul Berry <stereotype441@gmail.com>
Sat, 23 Jun 2012 03:27:18 +0000 (20:27 -0700)
committerPaul Berry <stereotype441@gmail.com>
Tue, 26 Jun 2012 14:45:54 +0000 (07:45 -0700)
commitbc53e14d98de11593788d302c0bb198e3a2097a4
tree026c5011395bc36423ca206fbd8619910eb95949
parent9ea60ce58f8494e0b79771f93227f4b8181731de
i965/msaa: Implement GL_SAMPLE_ALPHA_TO_{COVERAGE,ONE}.

This patch enables the multisampling parameters
GL_SAMPLE_ALPHA_TO_COVERAGE and GL_SAMPLE_ALPHA_TO_ONE, which allow
the fragment shader's alpha output to be converted into a sample
coverage mask and ignored for blending.  i965 supports these
parameters through the BLEND_STATE structure.

The GL spec allows, but does not require, the implementation to dither
the conversion from alpha to a sample coverage mask, so that alpha
values that aren't a multiple of 1/num_samples result in the correct
proportion of samples being lit.  A bit exists in the BLEND_STATE
structure to enable this functionality, but according to the hardware
docs it must be disabled on Sandy Bridge (see the Sandy Bridge PRM,
Vol2, Part1, p379: AlphaToCoverage Dither Enable).  So it is enabled
for Gen7 only.

Fixes piglit tests
"EXT_framebuffer_multisample/sample-alpha-to-{coverage,one} {2,4}".

Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
src/mesa/drivers/dri/i965/gen6_cc.c