diff options
| author | 2020-05-25 21:31:33 -0400 | |
|---|---|---|
| committer | 2020-05-25 21:31:33 -0400 | |
| commit | 86345c126acc80a6019abb9be77359f7e6bb0f27 (patch) | |
| tree | 5e983c6c1ac295bfcce992efbe623bfc0e25a329 /src | |
| parent | Merge pull request #3905 from FernandoS27/vulkan-fix (diff) | |
| parent | shader_decompiler: Visit source nodes even when they assign to RZ (diff) | |
| download | yuzu-86345c126acc80a6019abb9be77359f7e6bb0f27.tar.gz yuzu-86345c126acc80a6019abb9be77359f7e6bb0f27.tar.xz yuzu-86345c126acc80a6019abb9be77359f7e6bb0f27.zip | |
Merge pull request #3978 from ReinUsesLisp/write-rz
shader_decompiler: Visit source nodes even when they assign to RZ
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_shader_decompiler.cpp | 4 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_shader_decompiler.cpp | 7 |
2 files changed, 7 insertions, 4 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp index c83a08d42..84ca830f4 100644 --- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp +++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp | |||
| @@ -1538,7 +1538,9 @@ private: | |||
| 1538 | Expression target; | 1538 | Expression target; |
| 1539 | if (const auto gpr = std::get_if<GprNode>(&*dest)) { | 1539 | if (const auto gpr = std::get_if<GprNode>(&*dest)) { |
| 1540 | if (gpr->GetIndex() == Register::ZeroIndex) { | 1540 | if (gpr->GetIndex() == Register::ZeroIndex) { |
| 1541 | // Writing to Register::ZeroIndex is a no op | 1541 | // Writing to Register::ZeroIndex is a no op but we still have to visit the source |
| 1542 | // as it might have side effects. | ||
| 1543 | code.AddLine("{};", Visit(src).GetCode()); | ||
| 1542 | return {}; | 1544 | return {}; |
| 1543 | } | 1545 | } |
| 1544 | target = {GetRegister(gpr->GetIndex()), Type::Float}; | 1546 | target = {GetRegister(gpr->GetIndex()), Type::Float}; |
diff --git a/src/video_core/renderer_vulkan/vk_shader_decompiler.cpp b/src/video_core/renderer_vulkan/vk_shader_decompiler.cpp index f4ccc9848..b8169d832 100644 --- a/src/video_core/renderer_vulkan/vk_shader_decompiler.cpp +++ b/src/video_core/renderer_vulkan/vk_shader_decompiler.cpp | |||
| @@ -1081,8 +1081,7 @@ private: | |||
| 1081 | 1081 | ||
| 1082 | void VisitBasicBlock(const NodeBlock& bb) { | 1082 | void VisitBasicBlock(const NodeBlock& bb) { |
| 1083 | for (const auto& node : bb) { | 1083 | for (const auto& node : bb) { |
| 1084 | [[maybe_unused]] const Type type = Visit(node).type; | 1084 | Visit(node); |
| 1085 | ASSERT(type == Type::Void); | ||
| 1086 | } | 1085 | } |
| 1087 | } | 1086 | } |
| 1088 | 1087 | ||
| @@ -1372,7 +1371,9 @@ private: | |||
| 1372 | Expression target{}; | 1371 | Expression target{}; |
| 1373 | if (const auto gpr = std::get_if<GprNode>(&*dest)) { | 1372 | if (const auto gpr = std::get_if<GprNode>(&*dest)) { |
| 1374 | if (gpr->GetIndex() == Register::ZeroIndex) { | 1373 | if (gpr->GetIndex() == Register::ZeroIndex) { |
| 1375 | // Writing to Register::ZeroIndex is a no op | 1374 | // Writing to Register::ZeroIndex is a no op but we still have to visit its source |
| 1375 | // because it might have side effects. | ||
| 1376 | Visit(src); | ||
| 1376 | return {}; | 1377 | return {}; |
| 1377 | } | 1378 | } |
| 1378 | target = {registers.at(gpr->GetIndex()), Type::Float}; | 1379 | target = {registers.at(gpr->GetIndex()), Type::Float}; |