Mesa (master): mesa: added gl_program_constants::MaxAddressOffset

Brian Paul brianp at kemper.freedesktop.org
Wed Mar 2 16:33:18 UTC 2011


Module: Mesa
Branch: master
Commit: 8ad821df0a2d49964141f2ea4ef8179f4edc052f
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=8ad821df0a2d49964141f2ea4ef8179f4edc052f

Author: Brian Paul <brianp at vmware.com>
Date:   Wed Mar  2 09:32:45 2011 -0700

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(-)

diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index a942314..5d581c8 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 fcb06d4..db3eba2 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 52254e9..cfdd0da 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 784ea28..19aa8cc 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);




More information about the mesa-commit mailing list