summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/glsl/glsl_parser_extras.h15
-rw-r--r--src/glsl/ir_variable.cpp38
-rw-r--r--src/glsl/main.cpp19
-rw-r--r--src/mesa/shader/ir_to_mesa.cpp14
4 files changed, 77 insertions, 9 deletions
diff --git a/src/glsl/glsl_parser_extras.h b/src/glsl/glsl_parser_extras.h
index 4b28ae118d..fed6e8c823 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 a0b66b7770..4593c18112 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 3ae0eebab3..6b1a01c704 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 848fb0fb6c..5803960d44 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,