glsl: Add new GLSL 1.50 constants.

This patch populates the following built-in GLSL 1.50 variables based
on constants stored in ctx->Const:

- gl_MaxVertexOutputComponents
- gl_MaxGeometryInputComponents
- gl_MaxGeometryOutputComponents
- gl_MaxFragmentInputComponents
- gl_MaxGeometryTextureImageUnits
- gl_MaxGeometryOutputVertices
- gl_MaxGeometryTotalOutputComponents
- gl_MaxGeometryUniformComponents
- gl_MaxGeometryVaryingComponents

On i965/gen7, fixes all Piglit tests in "spec/glsl-1.50/built-in
constants/*" except for gl_MaxCombinedTextureImageUnits and
gl_MaxGeometryUniformComponents.

Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
Paul Berry 2013-07-26 11:55:52 -07:00
parent 705a90e304
commit 2910a82eb4
3 changed files with 51 additions and 0 deletions

View file

@ -583,6 +583,37 @@ builtin_variable_generator::generate_constants()
add_const("gl_MaxVaryingComponents", state->ctx->Const.MaxVarying * 4);
}
if (state->is_version(150, 0)) {
add_const("gl_MaxVertexOutputComponents",
state->Const.MaxVertexOutputComponents);
add_const("gl_MaxGeometryInputComponents",
state->Const.MaxGeometryInputComponents);
add_const("gl_MaxGeometryOutputComponents",
state->Const.MaxGeometryOutputComponents);
add_const("gl_MaxFragmentInputComponents",
state->Const.MaxFragmentInputComponents);
add_const("gl_MaxGeometryTextureImageUnits",
state->Const.MaxGeometryTextureImageUnits);
add_const("gl_MaxGeometryOutputVertices",
state->Const.MaxGeometryOutputVertices);
add_const("gl_MaxGeometryTotalOutputComponents",
state->Const.MaxGeometryTotalOutputComponents);
add_const("gl_MaxGeometryUniformComponents",
state->Const.MaxGeometryUniformComponents);
/* Note: the GLSL 1.50-4.40 specs require
* gl_MaxGeometryVaryingComponents to be present, and to be at least 64.
* But they do not define what it means (and there does not appear to be
* any corresponding constant in the GL specs). However,
* ARB_geometry_shader4 defines MAX_GEOMETRY_VARYING_COMPONENTS_ARB to
* be the maximum number of components available for use as geometry
* outputs. So we assume this is a synonym for
* gl_MaxGeometryOutputComponents.
*/
add_const("gl_MaxGeometryVaryingComponents",
state->Const.MaxGeometryOutputComponents);
}
if (compatibility) {
/* Note: gl_MaxLights stopped being listed as an explicit constant in
* GLSL 1.30, however it continues to be referred to (as a minimum size

View file

@ -108,6 +108,16 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *_ctx,
this->Const.MaxDrawBuffers = ctx->Const.MaxDrawBuffers;
/* 1.50 constants */
this->Const.MaxVertexOutputComponents = ctx->Const.VertexProgram.MaxOutputComponents;
this->Const.MaxGeometryInputComponents = ctx->Const.GeometryProgram.MaxInputComponents;
this->Const.MaxGeometryOutputComponents = ctx->Const.GeometryProgram.MaxOutputComponents;
this->Const.MaxFragmentInputComponents = ctx->Const.FragmentProgram.MaxInputComponents;
this->Const.MaxGeometryTextureImageUnits = ctx->Const.GeometryProgram.MaxTextureImageUnits;
this->Const.MaxGeometryOutputVertices = ctx->Const.MaxGeometryOutputVertices;
this->Const.MaxGeometryTotalOutputComponents = ctx->Const.MaxGeometryTotalOutputComponents;
this->Const.MaxGeometryUniformComponents = ctx->Const.GeometryProgram.MaxUniformComponents;
this->current_function = NULL;
this->toplevel_ir = NULL;
this->found_return = false;

View file

@ -219,6 +219,16 @@ struct _mesa_glsl_parse_state {
/* 3.00 ES */
int MinProgramTexelOffset;
int MaxProgramTexelOffset;
/* 1.50 */
unsigned MaxVertexOutputComponents;
unsigned MaxGeometryInputComponents;
unsigned MaxGeometryOutputComponents;
unsigned MaxFragmentInputComponents;
unsigned MaxGeometryTextureImageUnits;
unsigned MaxGeometryOutputVertices;
unsigned MaxGeometryTotalOutputComponents;
unsigned MaxGeometryUniformComponents;
} Const;
/**