mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 15:38:09 +02:00
tgsi: Parse and dump predicates.
This commit is contained in:
parent
d288698a76
commit
14a0328d4b
2 changed files with 63 additions and 1 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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…
Add table
Reference in a new issue