summaryrefslogtreecommitdiff
path: root/src/video_core/shader/decode
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_core/shader/decode')
-rw-r--r--src/video_core/shader/decode/arithmetic.cpp3
-rw-r--r--src/video_core/shader/decode/arithmetic_integer.cpp2
-rw-r--r--src/video_core/shader/decode/arithmetic_integer_immediate.cpp5
-rw-r--r--src/video_core/shader/decode/conversion.cpp4
-rw-r--r--src/video_core/shader/decode/memory.cpp25
-rw-r--r--src/video_core/shader/decode/other.cpp34
-rw-r--r--src/video_core/shader/decode/shift.cpp2
-rw-r--r--src/video_core/shader/decode/texture.cpp9
-rw-r--r--src/video_core/shader/decode/warp.cpp2
9 files changed, 38 insertions, 48 deletions
diff --git a/src/video_core/shader/decode/arithmetic.cpp b/src/video_core/shader/decode/arithmetic.cpp
index afef5948d..15eb700e7 100644
--- a/src/video_core/shader/decode/arithmetic.cpp
+++ b/src/video_core/shader/decode/arithmetic.cpp
@@ -110,8 +110,7 @@ u32 ShaderIR::DecodeArithmetic(NodeBlock& bb, u32 pc) {
110 case SubOp::Sqrt: 110 case SubOp::Sqrt:
111 return Operation(OperationCode::FSqrt, PRECISE, op_a); 111 return Operation(OperationCode::FSqrt, PRECISE, op_a);
112 default: 112 default:
113 UNIMPLEMENTED_MSG("Unhandled MUFU sub op={0:x}", 113 UNIMPLEMENTED_MSG("Unhandled MUFU sub op={0:x}", instr.sub_op.Value());
114 static_cast<unsigned>(instr.sub_op.Value()));
115 return Immediate(0); 114 return Immediate(0);
116 } 115 }
117 }(); 116 }();
diff --git a/src/video_core/shader/decode/arithmetic_integer.cpp b/src/video_core/shader/decode/arithmetic_integer.cpp
index f32c3134b..7b5bb7003 100644
--- a/src/video_core/shader/decode/arithmetic_integer.cpp
+++ b/src/video_core/shader/decode/arithmetic_integer.cpp
@@ -83,7 +83,7 @@ u32 ShaderIR::DecodeArithmeticInteger(NodeBlock& bb, u32 pc) {
83 case IAdd3Height::UpperHalfWord: 83 case IAdd3Height::UpperHalfWord:
84 return BitfieldExtract(value, 16, 16); 84 return BitfieldExtract(value, 16, 16);
85 default: 85 default:
86 UNIMPLEMENTED_MSG("Unhandled IADD3 height: {}", static_cast<u32>(height)); 86 UNIMPLEMENTED_MSG("Unhandled IADD3 height: {}", height);
87 return Immediate(0); 87 return Immediate(0);
88 } 88 }
89 }; 89 };
diff --git a/src/video_core/shader/decode/arithmetic_integer_immediate.cpp b/src/video_core/shader/decode/arithmetic_integer_immediate.cpp
index 2a30aab2b..73580277a 100644
--- a/src/video_core/shader/decode/arithmetic_integer_immediate.cpp
+++ b/src/video_core/shader/decode/arithmetic_integer_immediate.cpp
@@ -72,7 +72,7 @@ void ShaderIR::WriteLogicOperation(NodeBlock& bb, Register dest, LogicOperation
72 case LogicOperation::PassB: 72 case LogicOperation::PassB:
73 return op_b; 73 return op_b;
74 default: 74 default:
75 UNIMPLEMENTED_MSG("Unimplemented logic operation={}", static_cast<u32>(logic_op)); 75 UNIMPLEMENTED_MSG("Unimplemented logic operation={}", logic_op);
76 return Immediate(0); 76 return Immediate(0);
77 } 77 }
78 }(); 78 }();
@@ -92,8 +92,7 @@ void ShaderIR::WriteLogicOperation(NodeBlock& bb, Register dest, LogicOperation
92 break; 92 break;
93 } 93 }
94 default: 94 default:
95 UNIMPLEMENTED_MSG("Unimplemented predicate result mode: {}", 95 UNIMPLEMENTED_MSG("Unimplemented predicate result mode: {}", predicate_mode);
96 static_cast<u32>(predicate_mode));
97 } 96 }
98} 97}
99 98
diff --git a/src/video_core/shader/decode/conversion.cpp b/src/video_core/shader/decode/conversion.cpp
index b9989c88c..fea7a54df 100644
--- a/src/video_core/shader/decode/conversion.cpp
+++ b/src/video_core/shader/decode/conversion.cpp
@@ -244,7 +244,7 @@ u32 ShaderIR::DecodeConversion(NodeBlock& bb, u32 pc) {
244 return Operation(OperationCode::FTrunc, value); 244 return Operation(OperationCode::FTrunc, value);
245 default: 245 default:
246 UNIMPLEMENTED_MSG("Unimplemented F2F rounding mode {}", 246 UNIMPLEMENTED_MSG("Unimplemented F2F rounding mode {}",
247 static_cast<u32>(instr.conversion.f2f.rounding.Value())); 247 instr.conversion.f2f.rounding.Value());
248 return value; 248 return value;
249 } 249 }
250 }(); 250 }();
@@ -300,7 +300,7 @@ u32 ShaderIR::DecodeConversion(NodeBlock& bb, u32 pc) {
300 return Operation(OperationCode::FTrunc, PRECISE, value); 300 return Operation(OperationCode::FTrunc, PRECISE, value);
301 default: 301 default:
302 UNIMPLEMENTED_MSG("Unimplemented F2I rounding mode {}", 302 UNIMPLEMENTED_MSG("Unimplemented F2I rounding mode {}",
303 static_cast<u32>(instr.conversion.f2i.rounding.Value())); 303 instr.conversion.f2i.rounding.Value());
304 return Immediate(0); 304 return Immediate(0);
305 } 305 }
306 }(); 306 }();
diff --git a/src/video_core/shader/decode/memory.cpp b/src/video_core/shader/decode/memory.cpp
index e2bba88dd..50f4e7d35 100644
--- a/src/video_core/shader/decode/memory.cpp
+++ b/src/video_core/shader/decode/memory.cpp
@@ -47,7 +47,7 @@ OperationCode GetAtomOperation(AtomicOp op) {
47 case AtomicOp::Exch: 47 case AtomicOp::Exch:
48 return OperationCode::AtomicIExchange; 48 return OperationCode::AtomicIExchange;
49 default: 49 default:
50 UNIMPLEMENTED_MSG("op={}", static_cast<int>(op)); 50 UNIMPLEMENTED_MSG("op={}", op);
51 return OperationCode::AtomicIAdd; 51 return OperationCode::AtomicIAdd;
52 } 52 }
53} 53}
@@ -83,7 +83,7 @@ u32 GetMemorySize(Tegra::Shader::UniformType uniform_type) {
83 case Tegra::Shader::UniformType::UnsignedQuad: 83 case Tegra::Shader::UniformType::UnsignedQuad:
84 return 128; 84 return 128;
85 default: 85 default:
86 UNIMPLEMENTED_MSG("Unimplemented size={}!", static_cast<u32>(uniform_type)); 86 UNIMPLEMENTED_MSG("Unimplemented size={}!", uniform_type);
87 return 32; 87 return 32;
88 } 88 }
89} 89}
@@ -175,12 +175,12 @@ u32 ShaderIR::DecodeMemory(NodeBlock& bb, u32 pc) {
175 break; 175 break;
176 } 176 }
177 default: 177 default:
178 UNIMPLEMENTED_MSG("Unhandled type: {}", static_cast<unsigned>(instr.ld_c.type.Value())); 178 UNIMPLEMENTED_MSG("Unhandled type: {}", instr.ld_c.type.Value());
179 } 179 }
180 break; 180 break;
181 } 181 }
182 case OpCode::Id::LD_L: 182 case OpCode::Id::LD_L:
183 LOG_DEBUG(HW_GPU, "LD_L cache management mode: {}", static_cast<u64>(instr.ld_l.unknown)); 183 LOG_DEBUG(HW_GPU, "LD_L cache management mode: {}", instr.ld_l.unknown);
184 [[fallthrough]]; 184 [[fallthrough]];
185 case OpCode::Id::LD_S: { 185 case OpCode::Id::LD_S: {
186 const auto GetAddress = [&](s32 offset) { 186 const auto GetAddress = [&](s32 offset) {
@@ -224,7 +224,7 @@ u32 ShaderIR::DecodeMemory(NodeBlock& bb, u32 pc) {
224 } 224 }
225 default: 225 default:
226 UNIMPLEMENTED_MSG("{} Unhandled type: {}", opcode->get().GetName(), 226 UNIMPLEMENTED_MSG("{} Unhandled type: {}", opcode->get().GetName(),
227 static_cast<u32>(instr.ldst_sl.type.Value())); 227 instr.ldst_sl.type.Value());
228 } 228 }
229 break; 229 break;
230 } 230 }
@@ -306,8 +306,7 @@ u32 ShaderIR::DecodeMemory(NodeBlock& bb, u32 pc) {
306 break; 306 break;
307 } 307 }
308 case OpCode::Id::ST_L: 308 case OpCode::Id::ST_L:
309 LOG_DEBUG(HW_GPU, "ST_L cache management mode: {}", 309 LOG_DEBUG(HW_GPU, "ST_L cache management mode: {}", instr.st_l.cache_management.Value());
310 static_cast<u64>(instr.st_l.cache_management.Value()));
311 [[fallthrough]]; 310 [[fallthrough]];
312 case OpCode::Id::ST_S: { 311 case OpCode::Id::ST_S: {
313 const auto GetAddress = [&](s32 offset) { 312 const auto GetAddress = [&](s32 offset) {
@@ -340,7 +339,7 @@ u32 ShaderIR::DecodeMemory(NodeBlock& bb, u32 pc) {
340 } 339 }
341 default: 340 default:
342 UNIMPLEMENTED_MSG("{} unhandled type: {}", opcode->get().GetName(), 341 UNIMPLEMENTED_MSG("{} unhandled type: {}", opcode->get().GetName(),
343 static_cast<u32>(instr.ldst_sl.type.Value())); 342 instr.ldst_sl.type.Value());
344 } 343 }
345 break; 344 break;
346 } 345 }
@@ -387,7 +386,7 @@ u32 ShaderIR::DecodeMemory(NodeBlock& bb, u32 pc) {
387 } 386 }
388 case OpCode::Id::RED: { 387 case OpCode::Id::RED: {
389 UNIMPLEMENTED_IF_MSG(instr.red.type != GlobalAtomicType::U32, "type={}", 388 UNIMPLEMENTED_IF_MSG(instr.red.type != GlobalAtomicType::U32, "type={}",
390 static_cast<int>(instr.red.type.Value())); 389 instr.red.type.Value());
391 const auto [real_address, base_address, descriptor] = 390 const auto [real_address, base_address, descriptor] =
392 TrackGlobalMemory(bb, instr, true, true); 391 TrackGlobalMemory(bb, instr, true, true);
393 if (!real_address || !base_address) { 392 if (!real_address || !base_address) {
@@ -403,12 +402,12 @@ u32 ShaderIR::DecodeMemory(NodeBlock& bb, u32 pc) {
403 UNIMPLEMENTED_IF_MSG(instr.atom.operation == AtomicOp::Inc || 402 UNIMPLEMENTED_IF_MSG(instr.atom.operation == AtomicOp::Inc ||
404 instr.atom.operation == AtomicOp::Dec || 403 instr.atom.operation == AtomicOp::Dec ||
405 instr.atom.operation == AtomicOp::SafeAdd, 404 instr.atom.operation == AtomicOp::SafeAdd,
406 "operation={}", static_cast<int>(instr.atom.operation.Value())); 405 "operation={}", instr.atom.operation.Value());
407 UNIMPLEMENTED_IF_MSG(instr.atom.type == GlobalAtomicType::S64 || 406 UNIMPLEMENTED_IF_MSG(instr.atom.type == GlobalAtomicType::S64 ||
408 instr.atom.type == GlobalAtomicType::U64 || 407 instr.atom.type == GlobalAtomicType::U64 ||
409 instr.atom.type == GlobalAtomicType::F16x2_FTZ_RN || 408 instr.atom.type == GlobalAtomicType::F16x2_FTZ_RN ||
410 instr.atom.type == GlobalAtomicType::F32_FTZ_RN, 409 instr.atom.type == GlobalAtomicType::F32_FTZ_RN,
411 "type={}", static_cast<int>(instr.atom.type.Value())); 410 "type={}", instr.atom.type.Value());
412 411
413 const auto [real_address, base_address, descriptor] = 412 const auto [real_address, base_address, descriptor] =
414 TrackGlobalMemory(bb, instr, true, true); 413 TrackGlobalMemory(bb, instr, true, true);
@@ -428,10 +427,10 @@ u32 ShaderIR::DecodeMemory(NodeBlock& bb, u32 pc) {
428 case OpCode::Id::ATOMS: { 427 case OpCode::Id::ATOMS: {
429 UNIMPLEMENTED_IF_MSG(instr.atoms.operation == AtomicOp::Inc || 428 UNIMPLEMENTED_IF_MSG(instr.atoms.operation == AtomicOp::Inc ||
430 instr.atoms.operation == AtomicOp::Dec, 429 instr.atoms.operation == AtomicOp::Dec,
431 "operation={}", static_cast<int>(instr.atoms.operation.Value())); 430 "operation={}", instr.atoms.operation.Value());
432 UNIMPLEMENTED_IF_MSG(instr.atoms.type == AtomicType::S64 || 431 UNIMPLEMENTED_IF_MSG(instr.atoms.type == AtomicType::S64 ||
433 instr.atoms.type == AtomicType::U64, 432 instr.atoms.type == AtomicType::U64,
434 "type={}", static_cast<int>(instr.atoms.type.Value())); 433 "type={}", instr.atoms.type.Value());
435 const bool is_signed = 434 const bool is_signed =
436 instr.atoms.type == AtomicType::S32 || instr.atoms.type == AtomicType::S64; 435 instr.atoms.type == AtomicType::S32 || instr.atoms.type == AtomicType::S64;
437 const s32 offset = instr.atoms.GetImmediateOffset(); 436 const s32 offset = instr.atoms.GetImmediateOffset();
diff --git a/src/video_core/shader/decode/other.cpp b/src/video_core/shader/decode/other.cpp
index 1db500bc4..d3ea07aac 100644
--- a/src/video_core/shader/decode/other.cpp
+++ b/src/video_core/shader/decode/other.cpp
@@ -34,14 +34,13 @@ u32 ShaderIR::DecodeOther(NodeBlock& bb, u32 pc) {
34 break; 34 break;
35 } 35 }
36 case OpCode::Id::EXIT: { 36 case OpCode::Id::EXIT: {
37 const Tegra::Shader::ConditionCode cc = instr.flow_condition_code; 37 const ConditionCode cc = instr.flow_condition_code;
38 UNIMPLEMENTED_IF_MSG(cc != Tegra::Shader::ConditionCode::T, "EXIT condition code used: {}", 38 UNIMPLEMENTED_IF_MSG(cc != ConditionCode::T, "EXIT condition code used: {}", cc);
39 static_cast<u32>(cc));
40 39
41 switch (instr.flow.cond) { 40 switch (instr.flow.cond) {
42 case Tegra::Shader::FlowCondition::Always: 41 case Tegra::Shader::FlowCondition::Always:
43 bb.push_back(Operation(OperationCode::Exit)); 42 bb.push_back(Operation(OperationCode::Exit));
44 if (instr.pred.pred_index == static_cast<u64>(Tegra::Shader::Pred::UnusedIndex)) { 43 if (instr.pred.pred_index == static_cast<u64>(Pred::UnusedIndex)) {
45 // If this is an unconditional exit then just end processing here, 44 // If this is an unconditional exit then just end processing here,
46 // otherwise we have to account for the possibility of the condition 45 // otherwise we have to account for the possibility of the condition
47 // not being met, so continue processing the next instruction. 46 // not being met, so continue processing the next instruction.
@@ -56,17 +55,15 @@ u32 ShaderIR::DecodeOther(NodeBlock& bb, u32 pc) {
56 break; 55 break;
57 56
58 default: 57 default:
59 UNIMPLEMENTED_MSG("Unhandled flow condition: {}", 58 UNIMPLEMENTED_MSG("Unhandled flow condition: {}", instr.flow.cond.Value());
60 static_cast<u32>(instr.flow.cond.Value()));
61 } 59 }
62 break; 60 break;
63 } 61 }
64 case OpCode::Id::KIL: { 62 case OpCode::Id::KIL: {
65 UNIMPLEMENTED_IF(instr.flow.cond != Tegra::Shader::FlowCondition::Always); 63 UNIMPLEMENTED_IF(instr.flow.cond != Tegra::Shader::FlowCondition::Always);
66 64
67 const Tegra::Shader::ConditionCode cc = instr.flow_condition_code; 65 const ConditionCode cc = instr.flow_condition_code;
68 UNIMPLEMENTED_IF_MSG(cc != Tegra::Shader::ConditionCode::T, "KIL condition code used: {}", 66 UNIMPLEMENTED_IF_MSG(cc != ConditionCode::T, "KIL condition code used: {}", cc);
69 static_cast<u32>(cc));
70 67
71 bb.push_back(Operation(OperationCode::Discard)); 68 bb.push_back(Operation(OperationCode::Discard));
72 break; 69 break;
@@ -130,8 +127,7 @@ u32 ShaderIR::DecodeOther(NodeBlock& bb, u32 pc) {
130 return Immediate(0u); 127 return Immediate(0u);
131 } 128 }
132 default: 129 default:
133 UNIMPLEMENTED_MSG("Unhandled system move: {}", 130 UNIMPLEMENTED_MSG("Unhandled system move: {}", instr.sys20.Value());
134 static_cast<u32>(instr.sys20.Value()));
135 return Immediate(0u); 131 return Immediate(0u);
136 } 132 }
137 }(); 133 }();
@@ -181,8 +177,8 @@ u32 ShaderIR::DecodeOther(NodeBlock& bb, u32 pc) {
181 } 177 }
182 const Node branch = Operation(OperationCode::BranchIndirect, operand); 178 const Node branch = Operation(OperationCode::BranchIndirect, operand);
183 179
184 const Tegra::Shader::ConditionCode cc = instr.flow_condition_code; 180 const ConditionCode cc = instr.flow_condition_code;
185 if (cc != Tegra::Shader::ConditionCode::T) { 181 if (cc != ConditionCode::T) {
186 bb.push_back(Conditional(GetConditionCode(cc), {branch})); 182 bb.push_back(Conditional(GetConditionCode(cc), {branch}));
187 } else { 183 } else {
188 bb.push_back(branch); 184 bb.push_back(branch);
@@ -218,9 +214,8 @@ u32 ShaderIR::DecodeOther(NodeBlock& bb, u32 pc) {
218 break; 214 break;
219 } 215 }
220 case OpCode::Id::SYNC: { 216 case OpCode::Id::SYNC: {
221 const Tegra::Shader::ConditionCode cc = instr.flow_condition_code; 217 const ConditionCode cc = instr.flow_condition_code;
222 UNIMPLEMENTED_IF_MSG(cc != Tegra::Shader::ConditionCode::T, "SYNC condition code used: {}", 218 UNIMPLEMENTED_IF_MSG(cc != ConditionCode::T, "SYNC condition code used: {}", cc);
223 static_cast<u32>(cc));
224 219
225 if (decompiled) { 220 if (decompiled) {
226 break; 221 break;
@@ -231,9 +226,8 @@ u32 ShaderIR::DecodeOther(NodeBlock& bb, u32 pc) {
231 break; 226 break;
232 } 227 }
233 case OpCode::Id::BRK: { 228 case OpCode::Id::BRK: {
234 const Tegra::Shader::ConditionCode cc = instr.flow_condition_code; 229 const ConditionCode cc = instr.flow_condition_code;
235 UNIMPLEMENTED_IF_MSG(cc != Tegra::Shader::ConditionCode::T, "BRK condition code used: {}", 230 UNIMPLEMENTED_IF_MSG(cc != ConditionCode::T, "BRK condition code used: {}", cc);
236 static_cast<u32>(cc));
237 if (decompiled) { 231 if (decompiled) {
238 break; 232 break;
239 } 233 }
@@ -306,7 +300,7 @@ u32 ShaderIR::DecodeOther(NodeBlock& bb, u32 pc) {
306 case Tegra::Shader::MembarType::GL: 300 case Tegra::Shader::MembarType::GL:
307 return OperationCode::MemoryBarrierGlobal; 301 return OperationCode::MemoryBarrierGlobal;
308 default: 302 default:
309 UNIMPLEMENTED_MSG("MEMBAR type={}", static_cast<int>(instr.membar.type.Value())); 303 UNIMPLEMENTED_MSG("MEMBAR type={}", instr.membar.type.Value());
310 return OperationCode::MemoryBarrierGlobal; 304 return OperationCode::MemoryBarrierGlobal;
311 } 305 }
312 }(); 306 }();
diff --git a/src/video_core/shader/decode/shift.cpp b/src/video_core/shader/decode/shift.cpp
index d4ffa8014..a53819c15 100644
--- a/src/video_core/shader/decode/shift.cpp
+++ b/src/video_core/shader/decode/shift.cpp
@@ -125,7 +125,7 @@ u32 ShaderIR::DecodeShift(NodeBlock& bb, u32 pc) {
125 case OpCode::Id::SHF_LEFT_IMM: { 125 case OpCode::Id::SHF_LEFT_IMM: {
126 UNIMPLEMENTED_IF(instr.generates_cc); 126 UNIMPLEMENTED_IF(instr.generates_cc);
127 UNIMPLEMENTED_IF_MSG(instr.shf.xmode != ShfXmode::None, "xmode={}", 127 UNIMPLEMENTED_IF_MSG(instr.shf.xmode != ShfXmode::None, "xmode={}",
128 static_cast<int>(instr.shf.xmode.Value())); 128 instr.shf.xmode.Value());
129 129
130 if (instr.is_b_imm) { 130 if (instr.is_b_imm) {
131 op_b = Immediate(static_cast<u32>(instr.shf.immediate)); 131 op_b = Immediate(static_cast<u32>(instr.shf.immediate));
diff --git a/src/video_core/shader/decode/texture.cpp b/src/video_core/shader/decode/texture.cpp
index 02fdccd86..fb18f631f 100644
--- a/src/video_core/shader/decode/texture.cpp
+++ b/src/video_core/shader/decode/texture.cpp
@@ -34,7 +34,7 @@ static std::size_t GetCoordCount(TextureType texture_type) {
34 case TextureType::TextureCube: 34 case TextureType::TextureCube:
35 return 3; 35 return 3;
36 default: 36 default:
37 UNIMPLEMENTED_MSG("Unhandled texture type: {}", static_cast<u32>(texture_type)); 37 UNIMPLEMENTED_MSG("Unhandled texture type: {}", texture_type);
38 return 0; 38 return 0;
39 } 39 }
40} 40}
@@ -255,8 +255,7 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) {
255 break; 255 break;
256 } 256 }
257 default: 257 default:
258 UNIMPLEMENTED_MSG("Unhandled texture query type: {}", 258 UNIMPLEMENTED_MSG("Unhandled texture query type: {}", instr.txq.query_type.Value());
259 static_cast<u32>(instr.txq.query_type.Value()));
260 } 259 }
261 break; 260 break;
262 } 261 }
@@ -302,7 +301,7 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) {
302 case TextureType::TextureCube: 301 case TextureType::TextureCube:
303 return 3; 302 return 3;
304 default: 303 default:
305 UNIMPLEMENTED_MSG("Unhandled texture type {}", static_cast<int>(texture_type)); 304 UNIMPLEMENTED_MSG("Unhandled texture type {}", texture_type);
306 return 2; 305 return 2;
307 } 306 }
308 }(); 307 }();
@@ -595,7 +594,7 @@ Node4 ShaderIR::GetTextureCode(Instruction instr, TextureType texture_type,
595 lod = GetRegister(instr.gpr20.Value() + bias_offset); 594 lod = GetRegister(instr.gpr20.Value() + bias_offset);
596 break; 595 break;
597 default: 596 default:
598 UNIMPLEMENTED_MSG("Unimplemented process mode={}", static_cast<u32>(process_mode)); 597 UNIMPLEMENTED_MSG("Unimplemented process mode={}", process_mode);
599 break; 598 break;
600 } 599 }
601 600
diff --git a/src/video_core/shader/decode/warp.cpp b/src/video_core/shader/decode/warp.cpp
index 11b77f795..37433d783 100644
--- a/src/video_core/shader/decode/warp.cpp
+++ b/src/video_core/shader/decode/warp.cpp
@@ -27,7 +27,7 @@ OperationCode GetOperationCode(VoteOperation vote_op) {
27 case VoteOperation::Eq: 27 case VoteOperation::Eq:
28 return OperationCode::VoteEqual; 28 return OperationCode::VoteEqual;
29 default: 29 default:
30 UNREACHABLE_MSG("Invalid vote operation={}", static_cast<u64>(vote_op)); 30 UNREACHABLE_MSG("Invalid vote operation={}", vote_op);
31 return OperationCode::VoteAll; 31 return OperationCode::VoteAll;
32 } 32 }
33} 33}