diff options
-rw-r--r-- | src/gallium/drivers/r300/r300_state_shader.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/gallium/drivers/r300/r300_state_shader.c b/src/gallium/drivers/r300/r300_state_shader.c index 0a4f7c8d7e..564acad83b 100644 --- a/src/gallium/drivers/r300/r300_state_shader.c +++ b/src/gallium/drivers/r300/r300_state_shader.c @@ -398,6 +398,19 @@ static void r500_fs_instruction(struct r500_fragment_shader* fs, &inst->FullDstRegisters[0], inst->Instruction.Opcode, 3, false); break; + case TGSI_OPCODE_ABS: + r500_emit_maths(fs, assembler, inst->FullSrcRegisters, + &inst->FullDstRegisters[0], inst->Instruction.Opcode, 3, + false); + /* Set absolute value modifiers. */ + i = fs->instruction_count - 1; + fs->instructions[i].inst3 |= + R500_ALU_RGB_MOD_A_ABS | + R500_ALU_RGB_MOD_B_ABS; + fs->instructions[i].inst4 |= + R500_ALPHA_MOD_A_ABS | + R500_ALPHA_MOD_B_ABS; + break; case TGSI_OPCODE_MAD: r500_emit_maths(fs, assembler, inst->FullSrcRegisters, &inst->FullDstRegisters[0], inst->Instruction.Opcode, 3, |