diff options
Diffstat (limited to 'src/video_core/shader')
| -rw-r--r-- | src/video_core/shader/decode.cpp | 4 | ||||
| -rw-r--r-- | src/video_core/shader/decode/conversion.cpp | 7 | ||||
| -rw-r--r-- | src/video_core/shader/decode/xmad.cpp | 5 | ||||
| -rw-r--r-- | src/video_core/shader/shader_ir.cpp | 9 |
4 files changed, 16 insertions, 9 deletions
diff --git a/src/video_core/shader/decode.cpp b/src/video_core/shader/decode.cpp index e4c438792..2da595c0d 100644 --- a/src/video_core/shader/decode.cpp +++ b/src/video_core/shader/decode.cpp | |||
| @@ -116,6 +116,8 @@ ExitMethod ShaderIR::Scan(u32 begin, u32 end, std::set<u32>& labels) { | |||
| 116 | // Continue scanning for an exit method. | 116 | // Continue scanning for an exit method. |
| 117 | break; | 117 | break; |
| 118 | } | 118 | } |
| 119 | default: | ||
| 120 | break; | ||
| 119 | } | 121 | } |
| 120 | } | 122 | } |
| 121 | return exit_method = ExitMethod::AlwaysReturn; | 123 | return exit_method = ExitMethod::AlwaysReturn; |
| @@ -206,4 +208,4 @@ u32 ShaderIR::DecodeInstr(NodeBlock& bb, u32 pc) { | |||
| 206 | return pc + 1; | 208 | return pc + 1; |
| 207 | } | 209 | } |
| 208 | 210 | ||
| 209 | } // namespace VideoCommon::Shader \ No newline at end of file | 211 | } // namespace VideoCommon::Shader |
diff --git a/src/video_core/shader/decode/conversion.cpp b/src/video_core/shader/decode/conversion.cpp index ba15b1115..b5ec9a6f5 100644 --- a/src/video_core/shader/decode/conversion.cpp +++ b/src/video_core/shader/decode/conversion.cpp | |||
| @@ -120,10 +120,11 @@ u32 ShaderIR::DecodeConversion(NodeBlock& bb, u32 pc) { | |||
| 120 | return Operation(OperationCode::FCeil, PRECISE, value); | 120 | return Operation(OperationCode::FCeil, PRECISE, value); |
| 121 | case Tegra::Shader::F2fRoundingOp::Trunc: | 121 | case Tegra::Shader::F2fRoundingOp::Trunc: |
| 122 | return Operation(OperationCode::FTrunc, PRECISE, value); | 122 | return Operation(OperationCode::FTrunc, PRECISE, value); |
| 123 | default: | ||
| 124 | UNIMPLEMENTED_MSG("Unimplemented F2F rounding mode {}", | ||
| 125 | static_cast<u32>(instr.conversion.f2f.rounding.Value())); | ||
| 126 | return Immediate(0); | ||
| 123 | } | 127 | } |
| 124 | UNIMPLEMENTED_MSG("Unimplemented F2F rounding mode {}", | ||
| 125 | static_cast<u32>(instr.conversion.f2f.rounding.Value())); | ||
| 126 | return Immediate(0); | ||
| 127 | }(); | 128 | }(); |
| 128 | value = GetSaturatedFloat(value, instr.alu.saturate_d); | 129 | value = GetSaturatedFloat(value, instr.alu.saturate_d); |
| 129 | 130 | ||
diff --git a/src/video_core/shader/decode/xmad.cpp b/src/video_core/shader/decode/xmad.cpp index db15c0718..04a776398 100644 --- a/src/video_core/shader/decode/xmad.cpp +++ b/src/video_core/shader/decode/xmad.cpp | |||
| @@ -56,9 +56,10 @@ u32 ShaderIR::DecodeXmad(NodeBlock& bb, u32 pc) { | |||
| 56 | instr.xmad.mode, | 56 | instr.xmad.mode, |
| 57 | Immediate(static_cast<u32>(instr.xmad.imm20_16)), | 57 | Immediate(static_cast<u32>(instr.xmad.imm20_16)), |
| 58 | GetRegister(instr.gpr39)}; | 58 | GetRegister(instr.gpr39)}; |
| 59 | default: | ||
| 60 | UNIMPLEMENTED_MSG("Unhandled XMAD instruction: {}", opcode->get().GetName()); | ||
| 61 | return {false, false, false, Tegra::Shader::XmadMode::None, Immediate(0), Immediate(0)}; | ||
| 59 | } | 62 | } |
| 60 | UNIMPLEMENTED_MSG("Unhandled XMAD instruction: {}", opcode->get().GetName()); | ||
| 61 | return {false, false, false, Tegra::Shader::XmadMode::None, Immediate(0), Immediate(0)}; | ||
| 62 | }(); | 63 | }(); |
| 63 | 64 | ||
| 64 | op_a = BitfieldExtract(op_a, instr.xmad.high_a ? 16 : 0, 16); | 65 | op_a = BitfieldExtract(op_a, instr.xmad.high_a ? 16 : 0, 16); |
diff --git a/src/video_core/shader/shader_ir.cpp b/src/video_core/shader/shader_ir.cpp index 17f2f711c..e4eb0dfd9 100644 --- a/src/video_core/shader/shader_ir.cpp +++ b/src/video_core/shader/shader_ir.cpp | |||
| @@ -439,11 +439,14 @@ Node ShaderIR::BitfieldExtract(Node value, u32 offset, u32 bits) { | |||
| 439 | return OperationCode::LogicalUGreaterEqual; | 439 | return OperationCode::LogicalUGreaterEqual; |
| 440 | case OperationCode::INegate: | 440 | case OperationCode::INegate: |
| 441 | UNREACHABLE_MSG("Can't negate an unsigned integer"); | 441 | UNREACHABLE_MSG("Can't negate an unsigned integer"); |
| 442 | return {}; | ||
| 442 | case OperationCode::IAbsolute: | 443 | case OperationCode::IAbsolute: |
| 443 | UNREACHABLE_MSG("Can't apply absolute to an unsigned integer"); | 444 | UNREACHABLE_MSG("Can't apply absolute to an unsigned integer"); |
| 445 | return {}; | ||
| 446 | default: | ||
| 447 | UNREACHABLE_MSG("Unknown signed operation with code={}", static_cast<u32>(operation_code)); | ||
| 448 | return {}; | ||
| 444 | } | 449 | } |
| 445 | UNREACHABLE_MSG("Unknown signed operation with code={}", static_cast<u32>(operation_code)); | ||
| 446 | return {}; | ||
| 447 | } | 450 | } |
| 448 | 451 | ||
| 449 | } // namespace VideoCommon::Shader \ No newline at end of file | 452 | } // namespace VideoCommon::Shader |