tgsi: Add support to parse IMM[x] too.
authorJosé Fonseca <jfonseca@vmware.com>
Wed, 17 Oct 2012 14:27:26 +0000 (15:27 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Wed, 17 Oct 2012 14:27:26 +0000 (15:27 +0100)
Thanks to Brian for pointing this out.

src/gallium/auxiliary/tgsi/tgsi_text.c
src/gallium/tests/graw/vertex-shader/vert-rcp.sh

index 68d1478d0d1497ad8bd8201aa4ce32dd961e2eca..1267e79edb77b8d1984c6c1af2640e64f9bd2981 100644 (file)
@@ -242,6 +242,7 @@ struct translate_ctx
    struct tgsi_header *header;
    unsigned processor : 4;
    int implied_array_size : 5;
+   unsigned num_immediates;
 };
 
 static void report_error( struct translate_ctx *ctx, const char *msg )
@@ -1336,6 +1337,31 @@ static boolean parse_immediate( struct translate_ctx *ctx )
    uint advance;
    int type;
 
+   if (*ctx->cur == '[') {
+      uint uindex;
+
+      ++ctx->cur;
+
+      eat_opt_white( &ctx->cur );
+      if (!parse_uint( &ctx->cur, &uindex )) {
+         report_error( ctx, "Expected literal unsigned integer" );
+         return FALSE;
+      }
+
+      if (uindex != ctx->num_immediates) {
+         report_error( ctx, "Immediates must be sorted" );
+         return FALSE;
+      }
+
+      eat_opt_white( &ctx->cur );
+      if (*ctx->cur != ']') {
+         report_error( ctx, "Expected `]'" );
+         return FALSE;
+      }
+
+      ctx->cur++;
+   }
+
    if (!eat_white( &ctx->cur )) {
       report_error( ctx, "Syntax error" );
       return FALSE;
@@ -1363,6 +1389,8 @@ static boolean parse_immediate( struct translate_ctx *ctx )
       return FALSE;
    ctx->tokens_cur += advance;
 
+   ctx->num_immediates++;
+
    return TRUE;
 }
 
index d440e35d9a3d2560faace0f4ccdf19227d8a3a79..8843fe571aed765f29781fe91a33acce114f0078 100644 (file)
@@ -7,8 +7,8 @@ DCL OUT[1], COLOR
 
 DCL TEMP[0]
 
-IMM FLT32 { 1.0, 0.0, 0.0, 0.0 }
-IMM FLT32 { 1.5, 0.0, 0.0, 0.0 }
+IMM[0] FLT32 { 1.0, 0.0, 0.0, 0.0 }
+IMM[1] FLT32 { 1.5, 0.0, 0.0, 0.0 }
 
 ADD TEMP[0], IN[0], IMM[0]
 RCP TEMP[0].x, TEMP[0].xxxx