diff options
| author | 2018-12-26 01:49:32 -0300 | |
|---|---|---|
| committer | 2019-01-15 17:54:53 -0300 | |
| commit | d9118d324a7f40ad9227e15408be528273743bee (patch) | |
| tree | 045666fb020028bcd98fb7f19d482a39882cd2ea /src | |
| parent | shader_decode: Implement TEXS.F16 (diff) | |
| download | yuzu-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.cpp | 17 | ||||
| -rw-r--r-- | src/video_core/shader/glsl_decompiler.cpp | 9 | ||||
| -rw-r--r-- | src/video_core/shader/shader_ir.h | 2 |
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; | |||
| 22 | using Tegra::Shader::IpaInterpMode; | 22 | using Tegra::Shader::IpaInterpMode; |
| 23 | using Tegra::Shader::IpaMode; | 23 | using Tegra::Shader::IpaMode; |
| 24 | using Tegra::Shader::IpaSampleMode; | 24 | using Tegra::Shader::IpaSampleMode; |
| 25 | using Tegra::Shader::Register; | ||
| 25 | using namespace VideoCommon::Shader; | 26 | using namespace VideoCommon::Shader; |
| 26 | 27 | ||
| 27 | using Maxwell = Tegra::Engines::Maxwell3D::Regs; | 28 | using 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 | ||
| 42 | constexpr u32 MAX_PROGRAM_LENGTH = 0x1000; | 42 | constexpr u32 MAX_PROGRAM_LENGTH = 0x1000; |
| 43 | 43 | ||
| 44 | constexpr u32 RZ = 0xff; | ||
| 45 | |||
| 46 | enum class OperationCode { | 44 | enum 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 |