gallium: increase TGSI interpreter's number of temp registers to 64
authorBrian Paul <brian.paul@tungstengraphics.com>
Thu, 3 Jul 2008 18:56:33 +0000 (12:56 -0600)
committerBrian Paul <brian.paul@tungstengraphics.com>
Thu, 3 Jul 2008 23:21:22 +0000 (17:21 -0600)
Also, clean up the definitions of the misc/extra temp regs.
A few new assertions too.

src/gallium/auxiliary/tgsi/exec/tgsi_exec.c
src/gallium/auxiliary/tgsi/exec/tgsi_exec.h

index 9649396c9b1e0a4fbf3be63af25eac66c8ea5748..46949661aff53c9141976afd9855b5867ff05950 100644 (file)
@@ -262,7 +262,7 @@ tgsi_exec_machine_init(
    uint i;
 
    mach->Temps = (struct tgsi_exec_vector *) tgsi_align_128bit( mach->_Temps);
-   mach->Addrs = &mach->Temps[TGSI_EXEC_NUM_TEMPS];
+   mach->Addrs = &mach->Temps[TGSI_EXEC_TEMP_ADDR];
 
    /* Setup constants. */
    for( i = 0; i < 4; i++ ) {
@@ -941,6 +941,7 @@ fetch_src_file_channel(
          break;
 
       case TGSI_FILE_TEMPORARY:
+         assert(index->i[0] < TGSI_EXEC_NUM_TEMPS);
          chan->u[0] = mach->Temps[index->i[0]].xyzw[swizzle].u[0];
          chan->u[1] = mach->Temps[index->i[1]].xyzw[swizzle].u[1];
          chan->u[2] = mach->Temps[index->i[2]].xyzw[swizzle].u[2];
@@ -1127,6 +1128,7 @@ store_dest(
       break;
 
    case TGSI_FILE_TEMPORARY:
+      assert(reg->DstRegister.Index < TGSI_EXEC_NUM_TEMPS);
       dst = &mach->Temps[reg->DstRegister.Index].xyzw[chan_index];
       break;
 
index c89dfcb167bd56faaf49af00fa832ea4435e3177..18abdd9ac0048849dd76d30a19c4929c704a8036 100644 (file)
@@ -99,53 +99,57 @@ struct tgsi_exec_labels
    unsigned count;
 };
 
+
+#define TGSI_EXEC_NUM_TEMPS        64
+#define TGSI_EXEC_NUM_TEMP_EXTRAS   6
+#define TGSI_EXEC_NUM_IMMEDIATES  256
+
 /*
  * Locations of various utility registers (_I = Index, _C = Channel)
  */
-#define TGSI_EXEC_TEMP_00000000_I   32
+#define TGSI_EXEC_TEMP_00000000_I   (TGSI_EXEC_NUM_TEMPS + 0)
 #define TGSI_EXEC_TEMP_00000000_C   0
 
-#define TGSI_EXEC_TEMP_7FFFFFFF_I   32
+#define TGSI_EXEC_TEMP_7FFFFFFF_I   (TGSI_EXEC_NUM_TEMPS + 0)
 #define TGSI_EXEC_TEMP_7FFFFFFF_C   1
 
-#define TGSI_EXEC_TEMP_80000000_I   32
+#define TGSI_EXEC_TEMP_80000000_I   (TGSI_EXEC_NUM_TEMPS + 0)
 #define TGSI_EXEC_TEMP_80000000_C   2
 
-#define TGSI_EXEC_TEMP_FFFFFFFF_I   32
+#define TGSI_EXEC_TEMP_FFFFFFFF_I   (TGSI_EXEC_NUM_TEMPS + 0)
 #define TGSI_EXEC_TEMP_FFFFFFFF_C   3
 
-#define TGSI_EXEC_TEMP_ONE_I        33
+#define TGSI_EXEC_TEMP_ONE_I        (TGSI_EXEC_NUM_TEMPS + 1)
 #define TGSI_EXEC_TEMP_ONE_C        0
 
-#define TGSI_EXEC_TEMP_TWO_I        33
+#define TGSI_EXEC_TEMP_TWO_I        (TGSI_EXEC_NUM_TEMPS + 1)
 #define TGSI_EXEC_TEMP_TWO_C        1
 
-#define TGSI_EXEC_TEMP_128_I        33
+#define TGSI_EXEC_TEMP_128_I        (TGSI_EXEC_NUM_TEMPS + 1)
 #define TGSI_EXEC_TEMP_128_C        2
 
-#define TGSI_EXEC_TEMP_MINUS_128_I  33
+#define TGSI_EXEC_TEMP_MINUS_128_I  (TGSI_EXEC_NUM_TEMPS + 1)
 #define TGSI_EXEC_TEMP_MINUS_128_C  3
 
-#define TGSI_EXEC_TEMP_KILMASK_I    34
+#define TGSI_EXEC_TEMP_KILMASK_I    (TGSI_EXEC_NUM_TEMPS + 2)
 #define TGSI_EXEC_TEMP_KILMASK_C    0
 
-#define TGSI_EXEC_TEMP_OUTPUT_I     34
+#define TGSI_EXEC_TEMP_OUTPUT_I     (TGSI_EXEC_NUM_TEMPS + 2)
 #define TGSI_EXEC_TEMP_OUTPUT_C     1
 
-#define TGSI_EXEC_TEMP_PRIMITIVE_I  34
+#define TGSI_EXEC_TEMP_PRIMITIVE_I  (TGSI_EXEC_NUM_TEMPS + 2)
 #define TGSI_EXEC_TEMP_PRIMITIVE_C  2
 
-#define TGSI_EXEC_TEMP_THREE_I      34
+#define TGSI_EXEC_TEMP_THREE_I      (TGSI_EXEC_NUM_TEMPS + 2)
 #define TGSI_EXEC_TEMP_THREE_C      3
 
-#define TGSI_EXEC_TEMP_HALF_I       35
+#define TGSI_EXEC_TEMP_HALF_I       (TGSI_EXEC_NUM_TEMPS + 3)
 #define TGSI_EXEC_TEMP_HALF_C       0
 
-#define TGSI_EXEC_TEMP_R0           36
+#define TGSI_EXEC_TEMP_R0           (TGSI_EXEC_NUM_TEMPS + 4)
+
+#define TGSI_EXEC_TEMP_ADDR         (TGSI_EXEC_NUM_TEMPS + 5)
 
-#define TGSI_EXEC_NUM_TEMPS   (32 + 5)
-#define TGSI_EXEC_NUM_ADDRS   1
-#define TGSI_EXEC_NUM_IMMEDIATES  256
 
 #define TGSI_EXEC_MAX_COND_NESTING  20
 #define TGSI_EXEC_MAX_LOOP_NESTING  20
@@ -156,13 +160,11 @@ struct tgsi_exec_labels
  */
 struct tgsi_exec_machine
 {
-   /*
-    * 32 program temporaries
-    * 4  internal temporaries
-    * 1  address
-    * 1  temporary of padding to align to 16 bytes
+   /* Total = program temporaries + internal temporaries
+    *         + 1 padding to align to 16 bytes
     */
-   struct tgsi_exec_vector       _Temps[TGSI_EXEC_NUM_TEMPS + TGSI_EXEC_NUM_ADDRS + 1];
+   struct tgsi_exec_vector       _Temps[TGSI_EXEC_NUM_TEMPS +
+                                        TGSI_EXEC_NUM_TEMP_EXTRAS + 1];
 
    /*
     * This will point to _Temps after aligning to 16B boundary.