Mesa (glsl2): glsl2: Add definitions of the builtin constants present in GLSL 1.10.

Eric Anholt anholt at kemper.freedesktop.org
Tue Jul 20 21:04:44 UTC 2010


Module: Mesa
Branch: glsl2
Commit: f8946699ecfa5bc6566821fb855072bbdbd716b2
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=f8946699ecfa5bc6566821fb855072bbdbd716b2

Author: Eric Anholt <eric at anholt.net>
Date:   Tue Jul 20 14:03:35 2010 -0700

glsl2: Add definitions of the builtin constants present in GLSL 1.10.

Fixes:
glsl1-built-in constants

---

 src/glsl/glsl_parser_extras.h  |   15 ++++++++++++++-
 src/glsl/ir_variable.cpp       |   38 ++++++++++++++++++++++++++++++++------
 src/glsl/main.cpp              |   19 ++++++++++++++++++-
 src/mesa/shader/ir_to_mesa.cpp |   14 +++++++++++++-
 4 files changed, 77 insertions(+), 9 deletions(-)

diff --git a/src/glsl/glsl_parser_extras.h b/src/glsl/glsl_parser_extras.h
index 4b28ae1..fed6e8c 100644
--- a/src/glsl/glsl_parser_extras.h
+++ b/src/glsl/glsl_parser_extras.h
@@ -49,8 +49,21 @@ struct _mesa_glsl_parse_state {
     * \sa struct gl_constants (in mtypes.h)
     */
    struct {
-      unsigned MaxDrawBuffers;
+      /* 1.10 */
+      unsigned MaxLights;
+      unsigned MaxClipPlanes;
+      unsigned MaxTextureUnits;
       unsigned MaxTextureCoords;
+      unsigned MaxVertexAttribs;
+      unsigned MaxVertexUniformComponents;
+      unsigned MaxVaryingFloats;
+      unsigned MaxVertexTextureImageUnits;
+      unsigned MaxCombinedTextureImageUnits;
+      unsigned MaxTextureImageUnits;
+      unsigned MaxFragmentUniformComponents;
+
+      /* ARB_draw_buffers */
+      unsigned MaxDrawBuffers;
    } Const;
 
    /**
diff --git a/src/glsl/ir_variable.cpp b/src/glsl/ir_variable.cpp
index a0b66b7..4593c18 100644
--- a/src/glsl/ir_variable.cpp
+++ b/src/glsl/ir_variable.cpp
@@ -93,6 +93,16 @@ add_builtin_variable(const builtin_variable *proto, exec_list *instructions,
 		symtab);
 }
 
+static void
+add_builtin_constant(exec_list *instructions,
+		     struct _mesa_glsl_parse_state *state,
+		     const char *name, int value)
+{
+   ir_variable *const var = add_variable(name, ir_var_auto,
+					 -1, glsl_type::int_type,
+					 instructions, state->symbols);
+   var->constant_value = new(var) ir_constant(value);
+}
 
 static void
 generate_110_uniforms(exec_list *instructions,
@@ -105,12 +115,28 @@ generate_110_uniforms(exec_list *instructions,
 			   instructions, state->symbols);
    }
 
-   ir_variable *const mtc = add_variable("gl_MaxTextureCoords", ir_var_auto,
-					 -1, glsl_type::int_type,
-					 instructions, state->symbols);
-   mtc->constant_value = new(mtc)
-      ir_constant(int(state->Const.MaxTextureCoords));
-
+   add_builtin_constant(instructions, state, "gl_MaxLights",
+			state->Const.MaxLights);
+   add_builtin_constant(instructions, state, "gl_MaxClipPlanes",
+			state->Const.MaxClipPlanes);
+   add_builtin_constant(instructions, state, "gl_MaxTextureUnits",
+			state->Const.MaxTextureUnits);
+   add_builtin_constant(instructions, state, "gl_MaxTextureCoords",
+			state->Const.MaxTextureCoords);
+   add_builtin_constant(instructions, state, "gl_MaxVertexAttribs",
+			state->Const.MaxVertexAttribs);
+   add_builtin_constant(instructions, state, "gl_MaxVertexUniformComponents",
+			state->Const.MaxVertexUniformComponents);
+   add_builtin_constant(instructions, state, "gl_MaxVaryingFloats",
+			state->Const.MaxVaryingFloats);
+   add_builtin_constant(instructions, state, "gl_MaxVertexTextureImageUnits",
+			state->Const.MaxVertexTextureImageUnits);
+   add_builtin_constant(instructions, state, "gl_MaxCombinedTextureImageUnits",
+			state->Const.MaxCombinedTextureImageUnits);
+   add_builtin_constant(instructions, state, "gl_MaxTextureImageUnits",
+			state->Const.MaxTextureImageUnits);
+   add_builtin_constant(instructions, state, "gl_MaxFragmentUniformComponents",
+			state->Const.MaxFragmentUniformComponents);
 
    const glsl_type *const mat4_array_type =
       glsl_type::get_array_instance(state->symbols, glsl_type::mat4_type,
diff --git a/src/glsl/main.cpp b/src/glsl/main.cpp
index 3ae0eeb..6b1a01c 100644
--- a/src/glsl/main.cpp
+++ b/src/glsl/main.cpp
@@ -148,9 +148,26 @@ compile_shader(struct gl_shader *shader)
 
    memset(&ext, 0, sizeof(ext));
    state->extensions = &ext;
-   state->Const.MaxDrawBuffers = 2;
+   /* 1.10 minimums. */
+   state->Const.MaxLights = 8;
+   state->Const.MaxClipPlanes = 8;
+   state->Const.MaxTextureUnits = 2;
+
+   /* More than the 1.10 minimum to appease parser tests taken from
+    * apps that (hopefully) already checked the number of coords.
+    */
    state->Const.MaxTextureCoords = 4;
 
+   state->Const.MaxVertexAttribs = 16;
+   state->Const.MaxVertexUniformComponents = 512;
+   state->Const.MaxVaryingFloats = 32;
+   state->Const.MaxVertexTextureImageUnits = 0;
+   state->Const.MaxCombinedTextureImageUnits = 2;
+   state->Const.MaxTextureImageUnits = 2;
+   state->Const.MaxFragmentUniformComponents = 64;
+
+   state->Const.MaxDrawBuffers = 2;
+
    const char *source = shader->Source;
    state->error = preprocess(state, &source, &state->info_log, &ext);
 
diff --git a/src/mesa/shader/ir_to_mesa.cpp b/src/mesa/shader/ir_to_mesa.cpp
index 848fb0f..5803960 100644
--- a/src/mesa/shader/ir_to_mesa.cpp
+++ b/src/mesa/shader/ir_to_mesa.cpp
@@ -2170,8 +2170,20 @@ _mesa_glsl_compile_shader(GLcontext *ctx, struct gl_shader *shader)
    state->ARB_texture_rectangle_enable = true;
 
    state->extensions = &ctx->Extensions;
-   state->Const.MaxDrawBuffers = ctx->Const.MaxDrawBuffers;
+
+   state->Const.MaxLights = ctx->Const.MaxLights;
+   state->Const.MaxClipPlanes = ctx->Const.MaxClipPlanes;
+   state->Const.MaxTextureUnits = ctx->Const.MaxTextureUnits;
    state->Const.MaxTextureCoords = ctx->Const.MaxTextureCoordUnits;
+   state->Const.MaxVertexAttribs = ctx->Const.VertexProgram.MaxAttribs;
+   state->Const.MaxVertexUniformComponents = ctx->Const.VertexProgram.MaxUniformComponents;
+   state->Const.MaxVaryingFloats = ctx->Const.MaxVarying * 4;
+   state->Const.MaxVertexTextureImageUnits = ctx->Const.MaxVertexTextureImageUnits;
+   state->Const.MaxCombinedTextureImageUnits = ctx->Const.MaxCombinedTextureImageUnits;
+   state->Const.MaxTextureImageUnits = ctx->Const.MaxTextureImageUnits;
+   state->Const.MaxFragmentUniformComponents = ctx->Const.FragmentProgram.MaxUniformComponents;
+
+   state->Const.MaxDrawBuffers = ctx->Const.MaxDrawBuffers;
 
    const char *source = shader->Source;
    state->error = preprocess(state, &source, &state->info_log,




More information about the mesa-commit mailing list