Browse Source

tgsi: Parse and dump predicates.

undefined
José Fonseca 15 years ago
parent
commit
14a0328d4b
2 changed files with 63 additions and 1 deletions
  1. 24
    0
      src/gallium/auxiliary/tgsi/tgsi_dump.c
  2. 39
    1
      src/gallium/auxiliary/tgsi/tgsi_text.c

+ 24
- 0
src/gallium/auxiliary/tgsi/tgsi_dump.c View File

@@ -493,6 +493,30 @@ iter_instruction(
TXT( " " );
ctx->indent += info->post_indent;
if (inst->Instruction.Predicate) {
CHR( '(' );

if (inst->Predicate.Negate)
CHR( '!' );

TXT( "PRED[" );
SID( inst->Predicate.Index );
CHR( ']' );

if (inst->Predicate.SwizzleX != TGSI_SWIZZLE_X ||
inst->Predicate.SwizzleY != TGSI_SWIZZLE_Y ||
inst->Predicate.SwizzleZ != TGSI_SWIZZLE_Z ||
inst->Predicate.SwizzleW != TGSI_SWIZZLE_W) {
CHR( '.' );
ENM( inst->Predicate.SwizzleX, swizzle_names );
ENM( inst->Predicate.SwizzleY, swizzle_names );
ENM( inst->Predicate.SwizzleZ, swizzle_names );
ENM( inst->Predicate.SwizzleW, swizzle_names );
}

TXT( ") " );
}

TXT( info->mnemonic );

switch (inst->Instruction.Saturate) {

+ 39
- 1
src/gallium/auxiliary/tgsi/tgsi_text.c View File

@@ -815,6 +815,45 @@ parse_instruction(
struct tgsi_full_instruction inst;
uint advance;

inst = tgsi_default_full_instruction();

/* Parse predicate.
*/
eat_opt_white( &ctx->cur );
if (*ctx->cur == '(') {
uint file;
int index;
uint swizzle[4];
boolean parsed_swizzle;

inst.Instruction.Predicate = 1;

ctx->cur++;
if (*ctx->cur == '!') {
ctx->cur++;
inst.Predicate.Negate = 1;
}

if (!parse_register_dst( ctx, &file, &index ))
return FALSE;

if (parse_optional_swizzle( ctx, swizzle, &parsed_swizzle )) {
if (parsed_swizzle) {
inst.Predicate.SwizzleX = swizzle[0];
inst.Predicate.SwizzleY = swizzle[1];
inst.Predicate.SwizzleZ = swizzle[2];
inst.Predicate.SwizzleW = swizzle[3];
}
}

if (*ctx->cur != ')') {
report_error( ctx, "Expected `)'" );
return FALSE;
}

ctx->cur++;
}

/* Parse instruction name.
*/
eat_opt_white( &ctx->cur );
@@ -848,7 +887,6 @@ parse_instruction(
return FALSE;
}

inst = tgsi_default_full_instruction();
inst.Instruction.Opcode = i;
inst.Instruction.Saturate = saturate;
inst.Instruction.NumDstRegs = info->num_dst;

Loading…
Cancel
Save