tgsi: fix some off-by-one errors in shader length, instruction length
authorBrian Paul <brianp@vmware.com>
Mon, 7 Dec 2009 21:12:28 +0000 (14:12 -0700)
committerBrian Paul <brianp@vmware.com>
Tue, 8 Dec 2009 15:14:14 +0000 (08:14 -0700)
The ureg and/or tgsi-simplification work introduced some inconsistencies
between the ureg and traditional TGSI construction code.

Now the tgsi_instruction::NrTokens field is consistant and the
tgsi_header::BodySize field isn't off by one.

Fixes bug 25455.

src/gallium/auxiliary/tgsi/tgsi_build.c
src/gallium/auxiliary/tgsi/tgsi_parse.c
src/gallium/auxiliary/tgsi/tgsi_ureg.c

index d75ab1b3ff91c4233be8e6faba65fcb4d7928cb7..4092f78f4a2abe5f3b42829b6e167223ddfb4943 100644 (file)
@@ -399,7 +399,7 @@ tgsi_default_instruction( void )
    struct tgsi_instruction instruction;
 
    instruction.Type = TGSI_TOKEN_TYPE_INSTRUCTION;
-   instruction.NrTokens = 1;
+   instruction.NrTokens = 0;
    instruction.Opcode = TGSI_OPCODE_MOV;
    instruction.Saturate = TGSI_SAT_NONE;
    instruction.Predicate = 0;
index 356b4473d9657eeb31168b7efaf169d5d35e194f..8f2b6a307d38b56829cdf6fcda2d48f5cd258771 100644 (file)
@@ -60,7 +60,7 @@ tgsi_parse_end_of_tokens(
    struct tgsi_parse_context *ctx )
 {
    return ctx->Position >=
-      1 + ctx->FullHeader.Header.HeaderSize + ctx->FullHeader.Header.BodySize;
+      ctx->FullHeader.Header.HeaderSize + ctx->FullHeader.Header.BodySize;
 }
 
 
@@ -232,8 +232,7 @@ tgsi_num_tokens(const struct tgsi_token *tokens)
    struct tgsi_parse_context ctx;
    if (tgsi_parse_init(&ctx, tokens) == TGSI_PARSE_OK) {
       unsigned len = (ctx.FullHeader.Header.HeaderSize +
-                      ctx.FullHeader.Header.BodySize +
-                      1);
+                      ctx.FullHeader.Header.BodySize);
       return len;
    }
    return 0;
index 8f0b9842ff1b43af7cbda52427116dd63269c50f..3f943845f5b8ab8b3674f4b6ad77d0762355afc9 100644 (file)
@@ -1053,7 +1053,7 @@ fixup_header_size(struct ureg_program *ureg)
 {
    union tgsi_any_token *out = retrieve_token( ureg, DOMAIN_DECL, 0 );
 
-   out->header.BodySize = ureg->domain[DOMAIN_DECL].count - 3;
+   out->header.BodySize = ureg->domain[DOMAIN_DECL].count - 2;
 }