summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2018-12-26 01:49:32 -0300
committerGravatar ReinUsesLisp2019-01-15 17:54:53 -0300
commitd9118d324a7f40ad9227e15408be528273743bee (patch)
tree045666fb020028bcd98fb7f19d482a39882cd2ea /src
parentshader_decode: Implement TEXS.F16 (diff)
downloadyuzu-d9118d324a7f40ad9227e15408be528273743bee.tar.gz
yuzu-d9118d324a7f40ad9227e15408be528273743bee.tar.xz
yuzu-d9118d324a7f40ad9227e15408be528273743bee.zip
shader_ir: Remove RZ and use Register::ZeroIndex instead
Diffstat (limited to 'src')
-rw-r--r--src/video_core/shader/decode/memory.cpp17
-rw-r--r--src/video_core/shader/glsl_decompiler.cpp9
-rw-r--r--src/video_core/shader/shader_ir.h2
3 files changed, 16 insertions, 12 deletions
diff --git a/src/video_core/shader/decode/memory.cpp b/src/video_core/shader/decode/memory.cpp
index 679e7f01b..60bdd9b73 100644
--- a/src/video_core/shader/decode/memory.cpp
+++ b/src/video_core/shader/decode/memory.cpp
@@ -91,12 +91,14 @@ u32 ShaderIR::DecodeMemory(BasicBlock& bb, u32 pc) {
91 GetConstBufferIndirect(instr.cbuf36.index, instr.cbuf36.offset + 4, index); 91 GetConstBufferIndirect(instr.cbuf36.index, instr.cbuf36.offset + 4, index);
92 92
93 const Node composite = 93 const Node composite =
94 Operation(OperationCode::Composite, op_a, op_b, GetRegister(RZ), GetRegister(RZ)); 94 Operation(OperationCode::Composite, op_a, op_b, GetRegister(Register::ZeroIndex),
95 GetRegister(Register::ZeroIndex));
95 96
96 MetaComponents meta{{0, 1, 2, 3}}; 97 MetaComponents meta{{0, 1, 2, 3}};
97 bb.push_back(Operation(OperationCode::AssignComposite, meta, composite, 98 bb.push_back(Operation(OperationCode::AssignComposite, meta, composite,
98 GetRegister(instr.gpr0), GetRegister(instr.gpr0.Value() + 1), 99 GetRegister(instr.gpr0), GetRegister(instr.gpr0.Value() + 1),
99 GetRegister(RZ), GetRegister(RZ))); 100 GetRegister(Register::ZeroIndex),
101 GetRegister(Register::ZeroIndex)));
100 break; 102 break;
101 } 103 }
102 default: 104 default:
@@ -197,7 +199,8 @@ u32 ShaderIR::DecodeMemory(BasicBlock& bb, u32 pc) {
197 199
198 ++dest_elem; 200 ++dest_elem;
199 } 201 }
200 std::generate(dest.begin() + dest_elem, dest.end(), [&]() { return GetRegister(RZ); }); 202 std::generate(dest.begin() + dest_elem, dest.end(),
203 [&]() { return GetRegister(Register::ZeroIndex); });
201 204
202 bb.push_back(Operation(OperationCode::AssignComposite, std::move(meta), texture, dest[0], 205 bb.push_back(Operation(OperationCode::AssignComposite, std::move(meta), texture, dest[0],
203 dest[1], dest[2], dest[3])); 206 dest[1], dest[2], dest[3]));
@@ -255,7 +258,8 @@ u32 ShaderIR::DecodeMemory(BasicBlock& bb, u32 pc) {
255 258
256 ++dest_elem; 259 ++dest_elem;
257 } 260 }
258 std::generate(dest.begin() + dest_elem, dest.end(), [&]() { return GetRegister(RZ); }); 261 std::generate(dest.begin() + dest_elem, dest.end(),
262 [&]() { return GetRegister(Register::ZeroIndex); });
259 263
260 bb.push_back(Operation(OperationCode::AssignComposite, std::move(meta_components), texture, 264 bb.push_back(Operation(OperationCode::AssignComposite, std::move(meta_components), texture,
261 dest[0], dest[1], dest[2], dest[3])); 265 dest[0], dest[1], dest[2], dest[3]));
@@ -369,7 +373,7 @@ u32 ShaderIR::DecodeMemory(BasicBlock& bb, u32 pc) {
369 const MetaComponents meta_composite{{0, 1, 2, 3}}; 373 const MetaComponents meta_composite{{0, 1, 2, 3}};
370 bb.push_back(Operation(OperationCode::AssignComposite, meta_composite, texture, 374 bb.push_back(Operation(OperationCode::AssignComposite, meta_composite, texture,
371 GetRegister(instr.gpr0), GetRegister(instr.gpr0.Value() + 1), 375 GetRegister(instr.gpr0), GetRegister(instr.gpr0.Value() + 1),
372 GetRegister(RZ), GetRegister(RZ))); 376 GetRegister(Register::ZeroIndex), GetRegister(Register::ZeroIndex)));
373 break; 377 break;
374 } 378 }
375 case OpCode::Id::TLDS: { 379 case OpCode::Id::TLDS: {
@@ -438,7 +442,8 @@ void ShaderIR::WriteTexsInstructionFloat(BasicBlock& bb, Instruction instr, Node
438 ++meta.count; 442 ++meta.count;
439 } 443 }
440 444
441 std::generate(dest.begin() + meta.count, dest.end(), [&]() { return GetRegister(RZ); }); 445 std::generate(dest.begin() + meta.count, dest.end(),
446 [&]() { return GetRegister(Register::ZeroIndex); });
442 447
443 bb.push_back(Operation(OperationCode::AssignComposite, meta, texture, dest[0], dest[1], dest[2], 448 bb.push_back(Operation(OperationCode::AssignComposite, meta, texture, dest[0], dest[1], dest[2],
444 dest[3])); 449 dest[3]));
diff --git a/src/video_core/shader/glsl_decompiler.cpp b/src/video_core/shader/glsl_decompiler.cpp
index 5aa7966b9..27f1e0dde 100644
--- a/src/video_core/shader/glsl_decompiler.cpp
+++ b/src/video_core/shader/glsl_decompiler.cpp
@@ -22,6 +22,7 @@ using Tegra::Shader::Header;
22using Tegra::Shader::IpaInterpMode; 22using Tegra::Shader::IpaInterpMode;
23using Tegra::Shader::IpaMode; 23using Tegra::Shader::IpaMode;
24using Tegra::Shader::IpaSampleMode; 24using Tegra::Shader::IpaSampleMode;
25using Tegra::Shader::Register;
25using namespace VideoCommon::Shader; 26using namespace VideoCommon::Shader;
26 27
27using Maxwell = Tegra::Engines::Maxwell3D::Regs; 28using Maxwell = Tegra::Engines::Maxwell3D::Regs;
@@ -419,7 +420,7 @@ private:
419 420
420 } else if (const auto gpr = std::get_if<GprNode>(node)) { 421 } else if (const auto gpr = std::get_if<GprNode>(node)) {
421 const u32 index = gpr->GetIndex(); 422 const u32 index = gpr->GetIndex();
422 if (index == RZ) { 423 if (index == Register::ZeroIndex) {
423 return "0"; 424 return "0";
424 } 425 }
425 return GetRegister(index); 426 return GetRegister(index);
@@ -728,8 +729,8 @@ private:
728 729
729 std::string target; 730 std::string target;
730 if (const auto gpr = std::get_if<GprNode>(dest)) { 731 if (const auto gpr = std::get_if<GprNode>(dest)) {
731 if (gpr->GetIndex() == RZ) { 732 if (gpr->GetIndex() == Register::ZeroIndex) {
732 // Writing to RZ is a no op 733 // Writing to Register::ZeroIndex is a no op
733 return {}; 734 return {};
734 } 735 }
735 target = GetRegister(gpr->GetIndex()); 736 target = GetRegister(gpr->GetIndex());
@@ -776,7 +777,7 @@ private:
776 constexpr u32 composite_size = 4; 777 constexpr u32 composite_size = 4;
777 for (u32 i = 0; i < composite_size; ++i) { 778 for (u32 i = 0; i < composite_size; ++i) {
778 const auto gpr = std::get<GprNode>(*operation[i + 1]).GetIndex(); 779 const auto gpr = std::get<GprNode>(*operation[i + 1]).GetIndex();
779 if (gpr == RZ) { 780 if (gpr == Register::ZeroIndex) {
780 continue; 781 continue;
781 } 782 }
782 code.AddLine(GetRegister(gpr) + " = " + composite + 783 code.AddLine(GetRegister(gpr) + " = " + composite +
diff --git a/src/video_core/shader/shader_ir.h b/src/video_core/shader/shader_ir.h
index 7f11599bf..6d036d200 100644
--- a/src/video_core/shader/shader_ir.h
+++ b/src/video_core/shader/shader_ir.h
@@ -41,8 +41,6 @@ using BasicBlock = std::vector<Node>;
41 41
42constexpr u32 MAX_PROGRAM_LENGTH = 0x1000; 42constexpr u32 MAX_PROGRAM_LENGTH = 0x1000;
43 43
44constexpr u32 RZ = 0xff;
45
46enum class OperationCode { 44enum class OperationCode {
47 Assign, /// (float& dest, float src) -> void 45 Assign, /// (float& dest, float src) -> void
48 AssignComposite, /// (MetaComponents, float4 src, float&[4] dst) -> void 46 AssignComposite, /// (MetaComponents, float4 src, float&[4] dst) -> void