OSDN Git Service

mesa: increase the relative address offset limit to 4096 in ARB_vp/fp
authorMarek Olšák <maraeo@gmail.com>
Sat, 31 Jul 2010 18:12:21 +0000 (20:12 +0200)
committerMarek Olšák <maraeo@gmail.com>
Tue, 3 Aug 2010 22:07:28 +0000 (00:07 +0200)
Even though the spec says that the limits should be -64/+63, proprietary
drivers support much larger relative offsets and some applications do
depend on this non-standard behavior.

Also program_parse.tab.c has been regenerated.

This fixes the parser error:

  ARB_vp: error: relative address offset too large

See also: https://bugs.freedesktop.org/show_bug.cgi?id=28628

4096 * sizeof(vec4) is the maximum size of the constant buffer on NV50.
It is not supposed to be a definite hardware limit, it is for the parser
not to get in the way and let the underlying driver decide whether it can
run the shader or not.

src/mesa/program/program_parse.tab.c
src/mesa/program/program_parse.y

index 34e1fdc..31a6096 100644 (file)
@@ -2983,7 +2983,7 @@ yyreduce:
 /* Line 1455 of yacc.c  */
 #line 937 "program_parse.y"
     {
-          if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 63)) {
+          if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 4095)) {
               char s[100];
               _mesa_snprintf(s, sizeof(s),
                              "relative address offset too large (%d)", (yyvsp[(1) - (1)].integer));
@@ -3000,7 +3000,7 @@ yyreduce:
 /* Line 1455 of yacc.c  */
 #line 951 "program_parse.y"
     {
-          if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 64)) {
+          if (((yyvsp[(1) - (1)].integer) < 0) || ((yyvsp[(1) - (1)].integer) > 4096)) {
               char s[100];
               _mesa_snprintf(s, sizeof(s),
                              "relative address offset too large (%d)", (yyvsp[(1) - (1)].integer));
index 7753dd7..fb6ef85 100644 (file)
@@ -935,7 +935,7 @@ addrRegRelOffset:              { $$ = 0; }
 
 addrRegPosOffset: INTEGER
        {
-          if (($1 < 0) || ($1 > 63)) {
+          if (($1 < 0) || ($1 > 4095)) {
               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 > 64)) {
+          if (($1 < 0) || ($1 > 4096)) {
               char s[100];
               _mesa_snprintf(s, sizeof(s),
                              "relative address offset too large (%d)", $1);