glsl: Make gl_TexCoord compatibility-only
authorPaul Berry <stereotype441@gmail.com>
Sun, 7 Jul 2013 18:49:22 +0000 (11:49 -0700)
committerPaul Berry <stereotype441@gmail.com>
Sat, 13 Jul 2013 01:18:49 +0000 (18:18 -0700)
gl_TexCoord was deprecated in GLSL 1.30.  In GLSL 1.40 it was marked
as ARB_compatibility-only, and in GLSL 1.50 and above it was marked as
only appearing in the compatibility profile.  It has never appeared in
GLSL ES.

However, Mesa erroneously included it in all desktop versions of GLSL,
even versions 1.40 and 1.50 (which do not currently support the
compatibility profile).  This patch makes gl_TexCoord available in the
compatibility profile (and GLSL versions 1.30 and prior) only.

NOTE: although this is a simple bug fix, it probably isn't sensible to
cherry-pick it to stable release branches, since its only effect is to
cause incorrectly-written shaders to fail to compile.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
src/glsl/builtin_variables.cpp

index 58019c6e45bcd16849c163236f1c73fbeec42e1b..eccd15a7769ec1df51f2e7b282083c31f2835b79 100644 (file)
@@ -748,20 +748,22 @@ generate_110_vs_variables(exec_list *instructions,
    }
    generate_110_uniforms(instructions, state, add_deprecated);
 
-   /* From page 54 (page 60 of the PDF) of the GLSL 1.20 spec:
-    *
-    *     "As with all arrays, indices used to subscript gl_TexCoord must
-    *     either be an integral constant expressions, or this array must be
-    *     re-declared by the shader with a size. The size can be at most
-    *     gl_MaxTextureCoords. Using indexes close to 0 may aid the
-    *     implementation in preserving varying resources."
-    */
-   const glsl_type *const vec4_array_type =
-      glsl_type::get_array_instance(glsl_type::vec4_type, 0);
+   if (add_deprecated) {
+      /* From page 54 (page 60 of the PDF) of the GLSL 1.20 spec:
+       *
+       *     "As with all arrays, indices used to subscript gl_TexCoord must
+       *     either be an integral constant expressions, or this array must be
+       *     re-declared by the shader with a size. The size can be at most
+       *     gl_MaxTextureCoords. Using indexes close to 0 may aid the
+       *     implementation in preserving varying resources."
+       */
+      const glsl_type *const vec4_array_type =
+         glsl_type::get_array_instance(glsl_type::vec4_type, 0);
 
-   add_variable(instructions, state->symbols,
-               "gl_TexCoord", vec4_array_type, ir_var_shader_out,
-                VARYING_SLOT_TEX0);
+      add_variable(instructions, state->symbols,
+                   "gl_TexCoord", vec4_array_type, ir_var_shader_out,
+                   VARYING_SLOT_TEX0);
+   }
 
    generate_ARB_draw_buffers_variables(instructions, state, false,
                                       vertex_shader);
@@ -944,20 +946,22 @@ generate_110_fs_variables(exec_list *instructions,
 
    generate_110_uniforms(instructions, state, add_deprecated);
 
-   /* From page 54 (page 60 of the PDF) of the GLSL 1.20 spec:
-    *
-    *     "As with all arrays, indices used to subscript gl_TexCoord must
-    *     either be an integral constant expressions, or this array must be
-    *     re-declared by the shader with a size. The size can be at most
-    *     gl_MaxTextureCoords. Using indexes close to 0 may aid the
-    *     implementation in preserving varying resources."
-    */
-   const glsl_type *const vec4_array_type =
-      glsl_type::get_array_instance(glsl_type::vec4_type, 0);
+   if (add_deprecated) {
+      /* From page 54 (page 60 of the PDF) of the GLSL 1.20 spec:
+       *
+       *     "As with all arrays, indices used to subscript gl_TexCoord must
+       *     either be an integral constant expressions, or this array must be
+       *     re-declared by the shader with a size. The size can be at most
+       *     gl_MaxTextureCoords. Using indexes close to 0 may aid the
+       *     implementation in preserving varying resources."
+       */
+      const glsl_type *const vec4_array_type =
+         glsl_type::get_array_instance(glsl_type::vec4_type, 0);
 
-   add_variable(instructions, state->symbols,
-               "gl_TexCoord", vec4_array_type, ir_var_shader_in,
-                VARYING_SLOT_TEX0);
+      add_variable(instructions, state->symbols,
+                   "gl_TexCoord", vec4_array_type, ir_var_shader_in,
+                   VARYING_SLOT_TEX0);
+   }
 
    generate_ARB_draw_buffers_variables(instructions, state, false,
                                       fragment_shader);