summaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan
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/video_core/renderer_vulkan
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/video_core/renderer_vulkan')
-rw-r--r--src/video_core/renderer_vulkan/vk_shader_decompiler.cpp4
1 files changed, 3 insertions, 1 deletions
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};