meta: Make BlitFramebuffer() do sRGB encoding in ES 3.x.
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 8 Mar 2016 08:34:14 +0000 (00:34 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 21 Mar 2016 20:53:44 +0000 (13:53 -0700)
commiteee8a53906f72635423931430e667159c88613bb
treeb3da188b723cff25085c1d0905ec35ba7bda0a33
parentb74784638df4c6b1d25aa04044946e380ee61c28
meta: Make BlitFramebuffer() do sRGB encoding in ES 3.x.

According to the ES 3.0 and GL 4.4 specifications, glBlitFramebuffer
is supposed to perform sRGB decoding and encoding whenever sRGB formats
are in use.  The ES 3.0 specification is completely clear, and has
always stated this.

However, the GL specification has changed behavior in 4.1, 4.2, and
4.4.  The original behavior stated that no sRGB encoding should occur.
The 4.4 behavior matches ES 3.0's wording.  However, implementing the
new behavior appears to break applications such as Left 4 Dead 2.

This patch changes Meta to apply the ES 3.x rules in ES 3.x, but
leaves OpenGL alone for now, to avoid breaking applications.

Meta implements several other functions in terms of BlitFramebuffer,
and many of those explicitly do not perform sRGB encoding.  So, this
patch explicitly disables sRGB encoding in those other functions,
preserving the existing (correct) behavior.

If you're from the future and are reading this, hi!  Welcome to
the "fun" of debugging sRGB problems!  Best of luck!

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
src/mesa/drivers/common/meta_blit.c
src/mesa/drivers/common/meta_copy_image.c
src/mesa/drivers/common/meta_tex_subimage.c