mesa: added gl_program_constants::MaxAddressOffset
authorBrian Paul <brianp@vmware.com>
Wed, 2 Mar 2011 16:32:45 +0000 (09:32 -0700)
committerBrian Paul <brianp@vmware.com>
Wed, 2 Mar 2011 16:32:47 +0000 (09:32 -0700)
See https://bugs.freedesktop.org/show_bug.cgi?id=29418

src/mesa/main/context.c
src/mesa/main/mtypes.h
src/mesa/program/program.c
src/mesa/program/program_parse.y

index a942314552e07b1ab48d3dbb321b57fd1feb522b..5d581c84002383334699ae9ea3ffea3b6791c35e 100644 (file)
@@ -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:
index fcb06d49e9e2d0fc1a50f03d09ac322c4089c418..db3eba20c68a831e8634c67210915c4284e000e7 100644 (file)
@@ -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;
index 52254e9365f9bb249303e4b857e2d3d957a509ea..cfdd0da86d8200548a3693b5cf9aa6ca537270fb 100644 (file)
@@ -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));
 
index 784ea28c17a7275d8e6ceef28cd16154ce38e68d..19aa8ccdb534126a076eaa9d13967a531d55c070 100644 (file)
@@ -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);