summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar bunnei2020-05-25 21:31:33 -0400
committerGravatar GitHub2020-05-25 21:31:33 -0400
commit86345c126acc80a6019abb9be77359f7e6bb0f27 (patch)
tree5e983c6c1ac295bfcce992efbe623bfc0e25a329 /src
parentMerge pull request #3905 from FernandoS27/vulkan-fix (diff)
parentshader_decompiler: Visit source nodes even when they assign to RZ (diff)
downloadyuzu-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.cpp4
-rw-r--r--src/video_core/renderer_vulkan/vk_shader_decompiler.cpp7
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};