3
0
Fork 0
forked from suyu/suyu

Merge pull request #1369 from yuriks/jmpu-inverted

Shader: Implement "invert condition" feature of IFU instruction
This commit is contained in:
bunnei 2016-01-26 09:58:16 -05:00
commit c407b6ce2f
2 changed files with 5 additions and 2 deletions

View file

@ -515,7 +515,8 @@ void RunInterpreter(UnitState<Debug>& state) {
case OpCode::Id::JMPU: case OpCode::Id::JMPU:
Record<DebugDataRecord::COND_BOOL_IN>(state.debug, iteration, uniforms.b[instr.flow_control.bool_uniform_id]); Record<DebugDataRecord::COND_BOOL_IN>(state.debug, iteration, uniforms.b[instr.flow_control.bool_uniform_id]);
if (uniforms.b[instr.flow_control.bool_uniform_id]) {
if (uniforms.b[instr.flow_control.bool_uniform_id] == !(instr.flow_control.num_instructions & 1)) {
state.program_counter = instr.flow_control.dest_offset - 1; state.program_counter = instr.flow_control.dest_offset - 1;
} }
break; break;

View file

@ -710,7 +710,9 @@ void JitCompiler::Compile_JMP(Instruction instr) {
else else
UNREACHABLE(); UNREACHABLE();
FixupBranch b = J_CC(CC_NZ, true); bool inverted_condition = (instr.opcode.Value() == OpCode::Id::JMPU) &&
(instr.flow_control.num_instructions & 1);
FixupBranch b = J_CC(inverted_condition ? CC_Z : CC_NZ, true);
Compile_Block(instr.flow_control.dest_offset); Compile_Block(instr.flow_control.dest_offset);