diff options
| -rw-r--r-- | src/video_core/shader/decode/arithmetic.cpp | 11 | ||||
| -rw-r--r-- | src/video_core/shader/decode/arithmetic_half.cpp | 4 | ||||
| -rw-r--r-- | src/video_core/shader/decode/arithmetic_half_immediate.cpp | 8 | ||||
| -rw-r--r-- | src/video_core/shader/decode/ffma.cpp | 4 | ||||
| -rw-r--r-- | src/video_core/shader/decode/half_set.cpp | 4 | ||||
| -rw-r--r-- | src/video_core/shader/decode/half_set_predicate.cpp | 4 | ||||
| -rw-r--r-- | src/video_core/shader/decode/texture.cpp | 35 |
7 files changed, 19 insertions, 51 deletions
diff --git a/src/video_core/shader/decode/arithmetic.cpp b/src/video_core/shader/decode/arithmetic.cpp index 1473c282a..fcedd2af6 100644 --- a/src/video_core/shader/decode/arithmetic.cpp +++ b/src/video_core/shader/decode/arithmetic.cpp | |||
| @@ -43,12 +43,12 @@ u32 ShaderIR::DecodeArithmetic(NodeBlock& bb, u32 pc) { | |||
| 43 | case OpCode::Id::FMUL_IMM: { | 43 | case OpCode::Id::FMUL_IMM: { |
| 44 | // FMUL does not have 'abs' bits and only the second operand has a 'neg' bit. | 44 | // FMUL does not have 'abs' bits and only the second operand has a 'neg' bit. |
| 45 | if (instr.fmul.tab5cb8_2 != 0) { | 45 | if (instr.fmul.tab5cb8_2 != 0) { |
| 46 | LOG_WARNING(HW_GPU, "FMUL tab5cb8_2({}) is not implemented", | 46 | LOG_DEBUG(HW_GPU, "FMUL tab5cb8_2({}) is not implemented", |
| 47 | instr.fmul.tab5cb8_2.Value()); | 47 | instr.fmul.tab5cb8_2.Value()); |
| 48 | } | 48 | } |
| 49 | if (instr.fmul.tab5c68_0 != 1) { | 49 | if (instr.fmul.tab5c68_0 != 1) { |
| 50 | LOG_WARNING(HW_GPU, "FMUL tab5cb8_0({}) is not implemented", | 50 | LOG_DEBUG(HW_GPU, "FMUL tab5cb8_0({}) is not implemented", |
| 51 | instr.fmul.tab5c68_0.Value()); | 51 | instr.fmul.tab5c68_0.Value()); |
| 52 | } | 52 | } |
| 53 | 53 | ||
| 54 | op_b = GetOperandAbsNegFloat(op_b, false, instr.fmul.negate_b); | 54 | op_b = GetOperandAbsNegFloat(op_b, false, instr.fmul.negate_b); |
| @@ -144,10 +144,11 @@ u32 ShaderIR::DecodeArithmetic(NodeBlock& bb, u32 pc) { | |||
| 144 | case OpCode::Id::RRO_C: | 144 | case OpCode::Id::RRO_C: |
| 145 | case OpCode::Id::RRO_R: | 145 | case OpCode::Id::RRO_R: |
| 146 | case OpCode::Id::RRO_IMM: { | 146 | case OpCode::Id::RRO_IMM: { |
| 147 | LOG_DEBUG(HW_GPU, "(STUBBED) RRO used"); | ||
| 148 | |||
| 147 | // Currently RRO is only implemented as a register move. | 149 | // Currently RRO is only implemented as a register move. |
| 148 | op_b = GetOperandAbsNegFloat(op_b, instr.alu.abs_b, instr.alu.negate_b); | 150 | op_b = GetOperandAbsNegFloat(op_b, instr.alu.abs_b, instr.alu.negate_b); |
| 149 | SetRegister(bb, instr.gpr0, op_b); | 151 | SetRegister(bb, instr.gpr0, op_b); |
| 150 | LOG_WARNING(HW_GPU, "RRO instruction is incomplete"); | ||
| 151 | break; | 152 | break; |
| 152 | } | 153 | } |
| 153 | default: | 154 | default: |
diff --git a/src/video_core/shader/decode/arithmetic_half.cpp b/src/video_core/shader/decode/arithmetic_half.cpp index b06cbe441..ee7d9a29d 100644 --- a/src/video_core/shader/decode/arithmetic_half.cpp +++ b/src/video_core/shader/decode/arithmetic_half.cpp | |||
| @@ -21,8 +21,8 @@ u32 ShaderIR::DecodeArithmeticHalf(NodeBlock& bb, u32 pc) { | |||
| 21 | 21 | ||
| 22 | if (opcode->get().GetId() == OpCode::Id::HADD2_C || | 22 | if (opcode->get().GetId() == OpCode::Id::HADD2_C || |
| 23 | opcode->get().GetId() == OpCode::Id::HADD2_R) { | 23 | opcode->get().GetId() == OpCode::Id::HADD2_R) { |
| 24 | if (instr.alu_half.ftz != 0) { | 24 | if (instr.alu_half.ftz == 0) { |
| 25 | LOG_WARNING(HW_GPU, "{} FTZ not implemented", opcode->get().GetName()); | 25 | LOG_DEBUG(HW_GPU, "{} without FTZ is not implemented", opcode->get().GetName()); |
| 26 | } | 26 | } |
| 27 | } | 27 | } |
| 28 | 28 | ||
diff --git a/src/video_core/shader/decode/arithmetic_half_immediate.cpp b/src/video_core/shader/decode/arithmetic_half_immediate.cpp index 6466fc011..d179b9873 100644 --- a/src/video_core/shader/decode/arithmetic_half_immediate.cpp +++ b/src/video_core/shader/decode/arithmetic_half_immediate.cpp | |||
| @@ -19,12 +19,12 @@ u32 ShaderIR::DecodeArithmeticHalfImmediate(NodeBlock& bb, u32 pc) { | |||
| 19 | const auto opcode = OpCode::Decode(instr); | 19 | const auto opcode = OpCode::Decode(instr); |
| 20 | 20 | ||
| 21 | if (opcode->get().GetId() == OpCode::Id::HADD2_IMM) { | 21 | if (opcode->get().GetId() == OpCode::Id::HADD2_IMM) { |
| 22 | if (instr.alu_half_imm.ftz != 0) { | 22 | if (instr.alu_half_imm.ftz == 0) { |
| 23 | LOG_WARNING(HW_GPU, "{} FTZ not implemented", opcode->get().GetName()); | 23 | LOG_DEBUG(HW_GPU, "{} without FTZ is not implemented", opcode->get().GetName()); |
| 24 | } | 24 | } |
| 25 | } else { | 25 | } else { |
| 26 | if (instr.alu_half_imm.precision != Tegra::Shader::HalfPrecision::None) { | 26 | if (instr.alu_half_imm.precision != Tegra::Shader::HalfPrecision::FTZ) { |
| 27 | LOG_WARNING(HW_GPU, "{} FTZ not implemented", opcode->get().GetName()); | 27 | LOG_DEBUG(HW_GPU, "{} without FTZ is not implemented", opcode->get().GetName()); |
| 28 | } | 28 | } |
| 29 | } | 29 | } |
| 30 | 30 | ||
diff --git a/src/video_core/shader/decode/ffma.cpp b/src/video_core/shader/decode/ffma.cpp index ca2f39e8d..5973588d6 100644 --- a/src/video_core/shader/decode/ffma.cpp +++ b/src/video_core/shader/decode/ffma.cpp | |||
| @@ -19,10 +19,10 @@ u32 ShaderIR::DecodeFfma(NodeBlock& bb, u32 pc) { | |||
| 19 | 19 | ||
| 20 | UNIMPLEMENTED_IF_MSG(instr.ffma.cc != 0, "FFMA cc not implemented"); | 20 | UNIMPLEMENTED_IF_MSG(instr.ffma.cc != 0, "FFMA cc not implemented"); |
| 21 | if (instr.ffma.tab5980_0 != 1) { | 21 | if (instr.ffma.tab5980_0 != 1) { |
| 22 | LOG_WARNING(HW_GPU, "FFMA tab5980_0({}) not implemented", instr.ffma.tab5980_0.Value()); | 22 | LOG_DEBUG(HW_GPU, "FFMA tab5980_0({}) not implemented", instr.ffma.tab5980_0.Value()); |
| 23 | } | 23 | } |
| 24 | if (instr.ffma.tab5980_1 != 0) { | 24 | if (instr.ffma.tab5980_1 != 0) { |
| 25 | LOG_WARNING(HW_GPU, "FFMA tab5980_1({}) not implemented", instr.ffma.tab5980_1.Value()); | 25 | LOG_DEBUG(HW_GPU, "FFMA tab5980_1({}) not implemented", instr.ffma.tab5980_1.Value()); |
| 26 | } | 26 | } |
| 27 | 27 | ||
| 28 | const Node op_a = GetRegister(instr.gpr8); | 28 | const Node op_a = GetRegister(instr.gpr8); |
diff --git a/src/video_core/shader/decode/half_set.cpp b/src/video_core/shader/decode/half_set.cpp index 48ca7a4af..848e46874 100644 --- a/src/video_core/shader/decode/half_set.cpp +++ b/src/video_core/shader/decode/half_set.cpp | |||
| @@ -20,8 +20,8 @@ u32 ShaderIR::DecodeHalfSet(NodeBlock& bb, u32 pc) { | |||
| 20 | const Instruction instr = {program_code[pc]}; | 20 | const Instruction instr = {program_code[pc]}; |
| 21 | const auto opcode = OpCode::Decode(instr); | 21 | const auto opcode = OpCode::Decode(instr); |
| 22 | 22 | ||
| 23 | if (instr.hset2.ftz != 0) { | 23 | if (instr.hset2.ftz == 0) { |
| 24 | LOG_WARNING(HW_GPU, "{} FTZ not implemented", opcode->get().GetName()); | 24 | LOG_DEBUG(HW_GPU, "{} without FTZ is not implemented", opcode->get().GetName()); |
| 25 | } | 25 | } |
| 26 | 26 | ||
| 27 | Node op_a = UnpackHalfFloat(GetRegister(instr.gpr8), instr.hset2.type_a); | 27 | Node op_a = UnpackHalfFloat(GetRegister(instr.gpr8), instr.hset2.type_a); |
diff --git a/src/video_core/shader/decode/half_set_predicate.cpp b/src/video_core/shader/decode/half_set_predicate.cpp index fec8f2dbe..310655619 100644 --- a/src/video_core/shader/decode/half_set_predicate.cpp +++ b/src/video_core/shader/decode/half_set_predicate.cpp | |||
| @@ -19,7 +19,9 @@ u32 ShaderIR::DecodeHalfSetPredicate(NodeBlock& bb, u32 pc) { | |||
| 19 | const Instruction instr = {program_code[pc]}; | 19 | const Instruction instr = {program_code[pc]}; |
| 20 | const auto opcode = OpCode::Decode(instr); | 20 | const auto opcode = OpCode::Decode(instr); |
| 21 | 21 | ||
| 22 | LOG_DEBUG(HW_GPU, "ftz={}", static_cast<u32>(instr.hsetp2.ftz)); | 22 | if (instr.hsetp2.ftz != 0) { |
| 23 | LOG_DEBUG(HW_GPU, "{} without FTZ is not implemented", opcode->get().GetName()); | ||
| 24 | } | ||
| 23 | 25 | ||
| 24 | Node op_a = UnpackHalfFloat(GetRegister(instr.gpr8), instr.hsetp2.type_a); | 26 | Node op_a = UnpackHalfFloat(GetRegister(instr.gpr8), instr.hsetp2.type_a); |
| 25 | op_a = GetOperandAbsNegHalf(op_a, instr.hsetp2.abs_a, instr.hsetp2.negate_a); | 27 | op_a = GetOperandAbsNegHalf(op_a, instr.hsetp2.abs_a, instr.hsetp2.negate_a); |
diff --git a/src/video_core/shader/decode/texture.cpp b/src/video_core/shader/decode/texture.cpp index ca690b58b..bb926a132 100644 --- a/src/video_core/shader/decode/texture.cpp +++ b/src/video_core/shader/decode/texture.cpp | |||
| @@ -44,10 +44,6 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) { | |||
| 44 | bool is_bindless = false; | 44 | bool is_bindless = false; |
| 45 | switch (opcode->get().GetId()) { | 45 | switch (opcode->get().GetId()) { |
| 46 | case OpCode::Id::TEX: { | 46 | case OpCode::Id::TEX: { |
| 47 | if (instr.tex.UsesMiscMode(TextureMiscMode::NODEP)) { | ||
| 48 | LOG_WARNING(HW_GPU, "TEX.NODEP implementation is incomplete"); | ||
| 49 | } | ||
| 50 | |||
| 51 | const TextureType texture_type{instr.tex.texture_type}; | 47 | const TextureType texture_type{instr.tex.texture_type}; |
| 52 | const bool is_array = instr.tex.array != 0; | 48 | const bool is_array = instr.tex.array != 0; |
| 53 | const bool is_aoffi = instr.tex.UsesMiscMode(TextureMiscMode::AOFFI); | 49 | const bool is_aoffi = instr.tex.UsesMiscMode(TextureMiscMode::AOFFI); |
| @@ -62,10 +58,6 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) { | |||
| 62 | UNIMPLEMENTED_IF_MSG(instr.tex.UsesMiscMode(TextureMiscMode::AOFFI), | 58 | UNIMPLEMENTED_IF_MSG(instr.tex.UsesMiscMode(TextureMiscMode::AOFFI), |
| 63 | "AOFFI is not implemented"); | 59 | "AOFFI is not implemented"); |
| 64 | 60 | ||
| 65 | if (instr.tex.UsesMiscMode(TextureMiscMode::NODEP)) { | ||
| 66 | LOG_WARNING(HW_GPU, "TEX.NODEP implementation is incomplete"); | ||
| 67 | } | ||
| 68 | |||
| 69 | const TextureType texture_type{instr.tex_b.texture_type}; | 61 | const TextureType texture_type{instr.tex_b.texture_type}; |
| 70 | const bool is_array = instr.tex_b.array != 0; | 62 | const bool is_array = instr.tex_b.array != 0; |
| 71 | const bool is_aoffi = instr.tex.UsesMiscMode(TextureMiscMode::AOFFI); | 63 | const bool is_aoffi = instr.tex.UsesMiscMode(TextureMiscMode::AOFFI); |
| @@ -82,10 +74,6 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) { | |||
| 82 | const bool depth_compare = instr.texs.UsesMiscMode(TextureMiscMode::DC); | 74 | const bool depth_compare = instr.texs.UsesMiscMode(TextureMiscMode::DC); |
| 83 | const auto process_mode = instr.texs.GetTextureProcessMode(); | 75 | const auto process_mode = instr.texs.GetTextureProcessMode(); |
| 84 | 76 | ||
| 85 | if (instr.texs.UsesMiscMode(TextureMiscMode::NODEP)) { | ||
| 86 | LOG_WARNING(HW_GPU, "TEXS.NODEP implementation is incomplete"); | ||
| 87 | } | ||
| 88 | |||
| 89 | const Node4 components = | 77 | const Node4 components = |
| 90 | GetTexsCode(instr, texture_type, process_mode, depth_compare, is_array); | 78 | GetTexsCode(instr, texture_type, process_mode, depth_compare, is_array); |
| 91 | 79 | ||
| @@ -107,10 +95,6 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) { | |||
| 107 | UNIMPLEMENTED_IF_MSG(instr.tld4.UsesMiscMode(TextureMiscMode::PTP), | 95 | UNIMPLEMENTED_IF_MSG(instr.tld4.UsesMiscMode(TextureMiscMode::PTP), |
| 108 | "PTP is not implemented"); | 96 | "PTP is not implemented"); |
| 109 | 97 | ||
| 110 | if (instr.tld4.UsesMiscMode(TextureMiscMode::NODEP)) { | ||
| 111 | LOG_WARNING(HW_GPU, "TLD4.NODEP implementation is incomplete"); | ||
| 112 | } | ||
| 113 | |||
| 114 | const auto texture_type = instr.tld4.texture_type.Value(); | 98 | const auto texture_type = instr.tld4.texture_type.Value(); |
| 115 | const bool depth_compare = is_bindless ? instr.tld4_b.UsesMiscMode(TextureMiscMode::DC) | 99 | const bool depth_compare = is_bindless ? instr.tld4_b.UsesMiscMode(TextureMiscMode::DC) |
| 116 | : instr.tld4.UsesMiscMode(TextureMiscMode::DC); | 100 | : instr.tld4.UsesMiscMode(TextureMiscMode::DC); |
| @@ -125,9 +109,6 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) { | |||
| 125 | case OpCode::Id::TLD4S: { | 109 | case OpCode::Id::TLD4S: { |
| 126 | UNIMPLEMENTED_IF_MSG(instr.tld4s.UsesMiscMode(TextureMiscMode::AOFFI), | 110 | UNIMPLEMENTED_IF_MSG(instr.tld4s.UsesMiscMode(TextureMiscMode::AOFFI), |
| 127 | "AOFFI is not implemented"); | 111 | "AOFFI is not implemented"); |
| 128 | if (instr.tld4s.UsesMiscMode(TextureMiscMode::NODEP)) { | ||
| 129 | LOG_WARNING(HW_GPU, "TLD4S.NODEP implementation is incomplete"); | ||
| 130 | } | ||
| 131 | 112 | ||
| 132 | const bool depth_compare = instr.tld4s.UsesMiscMode(TextureMiscMode::DC); | 113 | const bool depth_compare = instr.tld4s.UsesMiscMode(TextureMiscMode::DC); |
| 133 | const Node op_a = GetRegister(instr.gpr8); | 114 | const Node op_a = GetRegister(instr.gpr8); |
| @@ -164,10 +145,6 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) { | |||
| 164 | is_bindless = true; | 145 | is_bindless = true; |
| 165 | [[fallthrough]]; | 146 | [[fallthrough]]; |
| 166 | case OpCode::Id::TXQ: { | 147 | case OpCode::Id::TXQ: { |
| 167 | if (instr.txq.UsesMiscMode(TextureMiscMode::NODEP)) { | ||
| 168 | LOG_WARNING(HW_GPU, "TXQ.NODEP implementation is incomplete"); | ||
| 169 | } | ||
| 170 | |||
| 171 | // TODO: The new commits on the texture refactor, change the way samplers work. | 148 | // TODO: The new commits on the texture refactor, change the way samplers work. |
| 172 | // Sadly, not all texture instructions specify the type of texture their sampler | 149 | // Sadly, not all texture instructions specify the type of texture their sampler |
| 173 | // uses. This must be fixed at a later instance. | 150 | // uses. This must be fixed at a later instance. |
| @@ -205,10 +182,6 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) { | |||
| 205 | UNIMPLEMENTED_IF_MSG(instr.tmml.UsesMiscMode(Tegra::Shader::TextureMiscMode::NDV), | 182 | UNIMPLEMENTED_IF_MSG(instr.tmml.UsesMiscMode(Tegra::Shader::TextureMiscMode::NDV), |
| 206 | "NDV is not implemented"); | 183 | "NDV is not implemented"); |
| 207 | 184 | ||
| 208 | if (instr.tmml.UsesMiscMode(TextureMiscMode::NODEP)) { | ||
| 209 | LOG_WARNING(HW_GPU, "TMML.NODEP implementation is incomplete"); | ||
| 210 | } | ||
| 211 | |||
| 212 | auto texture_type = instr.tmml.texture_type.Value(); | 185 | auto texture_type = instr.tmml.texture_type.Value(); |
| 213 | const bool is_array = instr.tmml.array != 0; | 186 | const bool is_array = instr.tmml.array != 0; |
| 214 | const auto& sampler = | 187 | const auto& sampler = |
| @@ -254,10 +227,6 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) { | |||
| 254 | UNIMPLEMENTED_IF_MSG(instr.tld.ms, "MS is not implemented"); | 227 | UNIMPLEMENTED_IF_MSG(instr.tld.ms, "MS is not implemented"); |
| 255 | UNIMPLEMENTED_IF_MSG(instr.tld.cl, "CL is not implemented"); | 228 | UNIMPLEMENTED_IF_MSG(instr.tld.cl, "CL is not implemented"); |
| 256 | 229 | ||
| 257 | if (instr.tld.nodep_flag) { | ||
| 258 | LOG_WARNING(HW_GPU, "TLD.NODEP implementation is incomplete"); | ||
| 259 | } | ||
| 260 | |||
| 261 | WriteTexInstructionFloat(bb, instr, GetTldCode(instr)); | 230 | WriteTexInstructionFloat(bb, instr, GetTldCode(instr)); |
| 262 | break; | 231 | break; |
| 263 | } | 232 | } |
| @@ -269,10 +238,6 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) { | |||
| 269 | "AOFFI is not implemented"); | 238 | "AOFFI is not implemented"); |
| 270 | UNIMPLEMENTED_IF_MSG(instr.tlds.UsesMiscMode(TextureMiscMode::MZ), "MZ is not implemented"); | 239 | UNIMPLEMENTED_IF_MSG(instr.tlds.UsesMiscMode(TextureMiscMode::MZ), "MZ is not implemented"); |
| 271 | 240 | ||
| 272 | if (instr.tlds.UsesMiscMode(TextureMiscMode::NODEP)) { | ||
| 273 | LOG_WARNING(HW_GPU, "TLDS.NODEP implementation is incomplete"); | ||
| 274 | } | ||
| 275 | |||
| 276 | const Node4 components = GetTldsCode(instr, texture_type, is_array); | 241 | const Node4 components = GetTldsCode(instr, texture_type, is_array); |
| 277 | 242 | ||
| 278 | if (instr.tlds.fp32_flag) { | 243 | if (instr.tlds.fp32_flag) { |