Merge pull request #1369 from yuriks/jmpu-inverted
Shader: Implement "invert condition" feature of IFU instruction
This commit is contained in:
		| @@ -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; | ||||||
|   | |||||||
| @@ -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); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user