mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-20 05:50:27 +01:00
glsl2: Add definitions of the builtin constants present in GLSL 1.10.
Fixes: glsl1-built-in constants
This commit is contained in:
parent
1245babe0c
commit
f8946699ec
4 changed files with 77 additions and 9 deletions
|
|
@ -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;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue