gallium: don't range check tgsi register index for indirect accesses
authorBrian <brian.paul@tungstengraphics.com>
Thu, 6 Nov 2008 02:26:20 +0000 (19:26 -0700)
committerBrian <brian.paul@tungstengraphics.com>
Thu, 6 Nov 2008 02:27:27 +0000 (19:27 -0700)
Fixes progs/vp/arl.txt test.

src/gallium/auxiliary/tgsi/tgsi_sanity.c

index 11659247c0c3cd898ac0dc01b0a038e135e975cb..bc7b941b7853901ee7dd6ef5d37009b07c9e977a 100644 (file)
@@ -153,17 +153,21 @@ check_register_usage(
    if (!check_file_name( ctx, file ))
       return FALSE;
 
-   if (index < 0 || index > MAX_REGISTERS) {
-      report_error( ctx, "%s[%i]: Invalid index %s", file_names[file], index, name );
-      return FALSE;
-   }
-
    if (indirect_access) {
+      /* Note that 'index' is an offset relative to the value of the
+       * address register.  No range checking done here.
+       */
       if (!is_any_register_declared( ctx, file ))
          report_error( ctx, "%s: Undeclared %s register", file_names[file], name );
       ctx->regs_ind_used[file] = TRUE;
    }
    else {
+      if (index < 0 || index > MAX_REGISTERS) {
+         report_error( ctx, "%s[%i]: Invalid index %s",
+                       file_names[file], index, name );
+         return FALSE;
+      }
+
       if (!is_register_declared( ctx, file, index ))
          report_error( ctx, "%s[%d]: Undeclared %s register", file_names[file], index, name );
       ctx->regs_used[file][index / BITS_IN_REG_FLAG] |= (1 << (index % BITS_IN_REG_FLAG));