|
|
@@ -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; |