summaryrefslogtreecommitdiffstats
path: root/src/mesa/main
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2017-01-07 15:36:45 +0100
committerMarek Olšák <[email protected]>2017-01-10 01:03:32 +0100
commit230b756f865e2d6ae17ff9568c8dcb718840c7b2 (patch)
treecfa901e503668247eedb2cd9cf6f19ce62d264ac /src/mesa/main
parent8bc39e251bf9793b30388aeb468d9cbe8eeeacab (diff)
mesa: set GLSL 1.20 for the fixed-function fragment shader
This fixes broken depth texturing after: commit 22639a6e19f95902aef23474ad672bf489231ea7 Author: Timothy Arceri <[email protected]> Date: Mon Nov 21 00:29:29 2016 +1100 st/mesa: get Version from gl_program rather than gl_shader_program Reviewed-by: Roland Scheidegger <[email protected]>
Diffstat (limited to 'src/mesa/main')
-rw-r--r--src/mesa/main/ff_fragment_shader.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/mesa/main/ff_fragment_shader.cpp b/src/mesa/main/ff_fragment_shader.cpp
index 48b84e8fd73..6261b9cacc5 100644
--- a/src/mesa/main/ff_fragment_shader.cpp
+++ b/src/mesa/main/ff_fragment_shader.cpp
@@ -1222,7 +1222,19 @@ create_new_program(struct gl_context *ctx, struct state_key *key)
*/
p.shader_program->SeparateShader = GL_TRUE;
- state->language_version = 130;
+ /* The legacy GLSL shadow functions follow the depth texture
+ * mode and return vec4. The GLSL 1.30 shadow functions return float and
+ * ignore the depth texture mode. That's a shader and state dependency
+ * that's difficult to deal with. st/mesa uses a simple but not
+ * completely correct solution: if the shader declares GLSL >= 1.30 and
+ * the depth texture mode is GL_ALPHA (000X), it sets the XXXX swizzle
+ * instead. Thus, the GLSL 1.30 shadow function will get the result in .x
+ * and legacy shadow functions will get it in .w as expected.
+ * For the fixed-function fragment shader, use 120 to get correct behavior
+ * for GL_ALPHA.
+ */
+ state->language_version = 120;
+
state->es_shader = false;
if (_mesa_is_gles(ctx) && ctx->Extensions.OES_EGL_image_external)
state->OES_EGL_image_external_enable = true;