Shaders: Implemented predicate condition 3 (LessEqual) in the fset and fsetp instructions.
This commit is contained in:
parent
6c464a2a4a
commit
da32c648bf
|
@ -882,6 +882,9 @@ private:
|
||||||
case PredCondition::Equal:
|
case PredCondition::Equal:
|
||||||
SetPredicate(instr.fsetp.pred3, '(' + op_a + ") == (" + op_b + ')');
|
SetPredicate(instr.fsetp.pred3, '(' + op_a + ") == (" + op_b + ')');
|
||||||
break;
|
break;
|
||||||
|
case PredCondition::LessEqual:
|
||||||
|
SetPredicate(instr.fsetp.pred3, '(' + op_a + ") <= (" + op_b + ')');
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
NGLOG_CRITICAL(HW_GPU, "Unhandled predicate condition: {} (a: {}, b: {})",
|
NGLOG_CRITICAL(HW_GPU, "Unhandled predicate condition: {} (a: {}, b: {})",
|
||||||
static_cast<unsigned>(instr.fsetp.cond.Value()), op_a, op_b);
|
static_cast<unsigned>(instr.fsetp.cond.Value()), op_a, op_b);
|
||||||
|
@ -933,6 +936,10 @@ private:
|
||||||
regs.SetRegisterToFloat(instr.gpr0, 0,
|
regs.SetRegisterToFloat(instr.gpr0, 0,
|
||||||
"((" + op_a + ") == (" + op_b + ")) ? 1.0 : 0", 1, 1);
|
"((" + op_a + ") == (" + op_b + ")) ? 1.0 : 0", 1, 1);
|
||||||
break;
|
break;
|
||||||
|
case PredCondition::LessEqual:
|
||||||
|
regs.SetRegisterToFloat(instr.gpr0, 0,
|
||||||
|
"((" + op_a + ") <= (" + op_b + ")) ? 1.0 : 0", 1, 1);
|
||||||
|
break;
|
||||||
case PredCondition::GreaterThan:
|
case PredCondition::GreaterThan:
|
||||||
regs.SetRegisterToFloat(instr.gpr0, 0,
|
regs.SetRegisterToFloat(instr.gpr0, 0,
|
||||||
"((" + op_a + ") > (" + op_b + ")) ? 1.0 : 0", 1, 1);
|
"((" + op_a + ") > (" + op_b + ")) ? 1.0 : 0", 1, 1);
|
||||||
|
|
Reference in New Issue