From 8ad821df0a2d49964141f2ea4ef8179f4edc052f Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Wed, 2 Mar 2011 09:32:45 -0700 Subject: mesa: added gl_program_constants::MaxAddressOffset See https://bugs.freedesktop.org/show_bug.cgi?id=29418 --- src/mesa/main/context.c | 1 + src/mesa/main/mtypes.h | 1 + src/mesa/program/program.c | 3 +++ src/mesa/program/program_parse.y | 4 ++-- 4 files changed, 7 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c index a942314552..5d581c8400 100644 --- a/src/mesa/main/context.c +++ b/src/mesa/main/context.c @@ -487,6 +487,7 @@ init_program_limits(GLenum type, struct gl_program_constants *prog) prog->MaxEnvParams = MAX_PROGRAM_ENV_PARAMS; prog->MaxLocalParams = MAX_PROGRAM_LOCAL_PARAMS; prog->MaxUniformComponents = 4 * MAX_UNIFORMS; + prog->MaxAddressOffset = MAX_PROGRAM_LOCAL_PARAMS; switch (type) { case GL_VERTEX_PROGRAM_ARB: diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index fcb06d49e9..db3eba20c6 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -2573,6 +2573,7 @@ struct gl_program_constants GLuint MaxAttribs; GLuint MaxTemps; GLuint MaxAddressRegs; + GLuint MaxAddressOffset; /**< [-MaxAddressOffset, MaxAddressOffset-1] */ GLuint MaxParameters; GLuint MaxLocalParams; GLuint MaxEnvParams; diff --git a/src/mesa/program/program.c b/src/mesa/program/program.c index 52254e9365..cfdd0da86d 100644 --- a/src/mesa/program/program.c +++ b/src/mesa/program/program.c @@ -71,6 +71,9 @@ _mesa_init_program(struct gl_context *ctx) ASSERT(ctx->Const.VertexProgram.MaxUniformComponents <= 4 * MAX_UNIFORMS); ASSERT(ctx->Const.FragmentProgram.MaxUniformComponents <= 4 * MAX_UNIFORMS); + ASSERT(ctx->Const.VertexProgram.MaxAddressOffset <= (1 << INST_INDEX_BITS)); + ASSERT(ctx->Const.FragmentProgram.MaxAddressOffset <= (1 << INST_INDEX_BITS)); + /* If this fails, increase prog_instruction::TexSrcUnit size */ ASSERT(MAX_TEXTURE_UNITS < (1 << 5)); diff --git a/src/mesa/program/program_parse.y b/src/mesa/program/program_parse.y index 784ea28c17..19aa8ccdb5 100644 --- a/src/mesa/program/program_parse.y +++ b/src/mesa/program/program_parse.y @@ -935,7 +935,7 @@ addrRegRelOffset: { $$ = 0; } addrRegPosOffset: INTEGER { - if (($1 < 0) || ($1 > 4095)) { + if (($1 < 0) || ($1 > (state->limits->MaxAddressOffset - 1))) { char s[100]; _mesa_snprintf(s, sizeof(s), "relative address offset too large (%d)", $1); @@ -949,7 +949,7 @@ addrRegPosOffset: INTEGER addrRegNegOffset: INTEGER { - if (($1 < 0) || ($1 > 4096)) { + if (($1 < 0) || ($1 > state->limits->MaxAddressOffset)) { char s[100]; _mesa_snprintf(s, sizeof(s), "relative address offset too large (%d)", $1); -- cgit v1.2.3