summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2020-05-14 21:26:37 -0300
committerGravatar ReinUsesLisp2020-05-21 23:16:03 -0300
commited4e3249917c5991fd515ff846ae4b52b99153fb (patch)
tree5dc5a4240c1be246f8b68b830ab33cd0e29d9c94 /src
parentvk_shader_decompiler: Don't assert for void returns (diff)
downloadyuzu-ed4e3249917c5991fd515ff846ae4b52b99153fb.tar.gz
yuzu-ed4e3249917c5991fd515ff846ae4b52b99153fb.tar.xz
yuzu-ed4e3249917c5991fd515ff846ae4b52b99153fb.zip
shader_decompiler: Visit source nodes even when they assign to RZ
Some operations like atomicMin were ignored because they returned were being stored to RZ. This operations have a side effect and it was being ignored.
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.cpp4
2 files changed, 6 insertions, 2 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
index 960ebf1a1..f695ee1db 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 808a265e5..1749e068e 100644
--- a/src/video_core/renderer_vulkan/vk_shader_decompiler.cpp
+++ b/src/video_core/renderer_vulkan/vk_shader_decompiler.cpp
@@ -1361,7 +1361,9 @@ private:
1361 Expression target{}; 1361 Expression target{};
1362 if (const auto gpr = std::get_if<GprNode>(&*dest)) { 1362 if (const auto gpr = std::get_if<GprNode>(&*dest)) {
1363 if (gpr->GetIndex() == Register::ZeroIndex) { 1363 if (gpr->GetIndex() == Register::ZeroIndex) {
1364 // Writing to Register::ZeroIndex is a no op 1364 // Writing to Register::ZeroIndex is a no op but we still have to visit its source
1365 // because it might have side effects.
1366 Visit(src);
1365 return {}; 1367 return {};
1366 } 1368 }
1367 target = {registers.at(gpr->GetIndex()), Type::Float}; 1369 target = {registers.at(gpr->GetIndex()), Type::Float};