summaryrefslogtreecommitdiff
path: root/src/video_core/renderer_opengl
diff options
context:
space:
mode:
authorGravatar Subv2018-07-04 15:25:48 -0500
committerGravatar Subv2018-07-04 15:44:37 -0500
commitb0c92b80b156e75fcc5eedbbb8370fedd18b5ac4 (patch)
tree2fd76c932b7ca4bed70e9a6c1f7b71e9e93090ab /src/video_core/renderer_opengl
parentMerge pull request #618 from Subv/clear_used_buffers (diff)
downloadyuzu-b0c92b80b156e75fcc5eedbbb8370fedd18b5ac4.tar.gz
yuzu-b0c92b80b156e75fcc5eedbbb8370fedd18b5ac4.tar.xz
yuzu-b0c92b80b156e75fcc5eedbbb8370fedd18b5ac4.zip
GPU: Implemented the IMNMX shader instruction.
It's similar to the FMNMX instruction but it works on integers.
Diffstat (limited to 'src/video_core/renderer_opengl')
-rw-r--r--src/video_core/renderer_opengl/gl_shader_decompiler.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
index ec9956edb..9d43d0fb1 100644
--- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
+++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
@@ -1127,6 +1127,20 @@ private:
1127 WriteLogicOperation(instr.gpr0, instr.alu.lop.operation, op_a, op_b); 1127 WriteLogicOperation(instr.gpr0, instr.alu.lop.operation, op_a, op_b);
1128 break; 1128 break;
1129 } 1129 }
1130 case OpCode::Id::IMNMX_C:
1131 case OpCode::Id::IMNMX_R:
1132 case OpCode::Id::IMNMX_IMM: {
1133 ASSERT_MSG(instr.imnmx.exchange == Tegra::Shader::IMinMaxExchange::None,
1134 "Unimplemented");
1135 std::string condition =
1136 GetPredicateCondition(instr.imnmx.pred, instr.imnmx.negate_pred != 0);
1137 std::string parameters = op_a + ',' + op_b;
1138 regs.SetRegisterToInteger(instr.gpr0, instr.imnmx.is_signed, 0,
1139 '(' + condition + ") ? min(" + parameters + ") : max(" +
1140 parameters + ')',
1141 1, 1);
1142 break;
1143 }
1130 default: { 1144 default: {
1131 LOG_CRITICAL(HW_GPU, "Unhandled ArithmeticInteger instruction: {}", 1145 LOG_CRITICAL(HW_GPU, "Unhandled ArithmeticInteger instruction: {}",
1132 opcode->GetName()); 1146 opcode->GetName());