summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/video_core/shader/decode/arithmetic.cpp11
-rw-r--r--src/video_core/shader/decode/arithmetic_half.cpp4
-rw-r--r--src/video_core/shader/decode/arithmetic_half_immediate.cpp8
-rw-r--r--src/video_core/shader/decode/ffma.cpp4
-rw-r--r--src/video_core/shader/decode/half_set.cpp4
-rw-r--r--src/video_core/shader/decode/half_set_predicate.cpp4
-rw-r--r--src/video_core/shader/decode/texture.cpp35
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) {