i965: Add a driconf option to disable GL_ARB_blend_func_extended.
authorKenneth Graunke <kenneth@whitecape.org>
Wed, 18 Jul 2012 07:07:17 +0000 (00:07 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 19 Jul 2012 08:22:34 +0000 (01:22 -0700)
commit040894391a2cf85035c6ad85f3f85c6efb23324b
tree1b7008f68569c2fadc7b4e1186866b43014ff83d
parent768be75c44a5ce2d11306ad5eb838f0e6a614c19
i965: Add a driconf option to disable GL_ARB_blend_func_extended.

Unigine Heaven (at least) has a bug where it incorrectly uses the
GL_ARB_blend_func_extended extension.

Dual source blending allows two color outputs per render target;
individual shader outputs can be assigned to be either the first or
second blending input by setting the 'index' via one of two methods:

- An API call: glBindFragDataLocationIndexed()
- The GLSL 'layout' qualifier provided by GL_ARB_explicit_attrib_location

Both of these only work on user defined fragment shader outputs; it's an
error to use either on built-in outputs like gl_FragData.

Unigine uses gl_FragData and gl_FragColor exclusively, and doesn't even
attempt to use either method to set index == 1.  However, it does set
the blending function to SRC1 enums, which requires a fragment shader
output with index == 1 or else rendering is undefined.

In other words, enabling ARB_blend_func_extended causes Unigine to
render incorrectly, resulting in an apparent regression, even though our
driver code (as far as I can tell) is perfectly fine.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=50291
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Chad Versace <chad.versace@linux.intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
src/mesa/drivers/dri/common/drirc
src/mesa/drivers/dri/common/xmlpool/options.h
src/mesa/drivers/dri/intel/intel_extensions.c
src/mesa/drivers/dri/intel/intel_screen.c