Browse Source
Merge pull request #3978 from ReinUsesLisp/write-rz
shader_decompiler: Visit source nodes even when they assign to RZ
pull/15/merge
bunnei
6 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with
7 additions and
4 deletions
-
src/video_core/renderer_opengl/gl_shader_decompiler.cpp
-
src/video_core/renderer_vulkan/vk_shader_decompiler.cpp
|
|
|
@ -1538,7 +1538,9 @@ private: |
|
|
|
Expression target; |
|
|
|
if (const auto gpr = std::get_if<GprNode>(&*dest)) { |
|
|
|
if (gpr->GetIndex() == Register::ZeroIndex) { |
|
|
|
// Writing to Register::ZeroIndex is a no op
|
|
|
|
// Writing to Register::ZeroIndex is a no op but we still have to visit the source
|
|
|
|
// as it might have side effects.
|
|
|
|
code.AddLine("{};", Visit(src).GetCode()); |
|
|
|
return {}; |
|
|
|
} |
|
|
|
target = {GetRegister(gpr->GetIndex()), Type::Float}; |
|
|
|
|
|
|
|
@ -1081,8 +1081,7 @@ private: |
|
|
|
|
|
|
|
void VisitBasicBlock(const NodeBlock& bb) { |
|
|
|
for (const auto& node : bb) { |
|
|
|
[[maybe_unused]] const Type type = Visit(node).type; |
|
|
|
ASSERT(type == Type::Void); |
|
|
|
Visit(node); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -1372,7 +1371,9 @@ private: |
|
|
|
Expression target{}; |
|
|
|
if (const auto gpr = std::get_if<GprNode>(&*dest)) { |
|
|
|
if (gpr->GetIndex() == Register::ZeroIndex) { |
|
|
|
// Writing to Register::ZeroIndex is a no op
|
|
|
|
// Writing to Register::ZeroIndex is a no op but we still have to visit its source
|
|
|
|
// because it might have side effects.
|
|
|
|
Visit(src); |
|
|
|
return {}; |
|
|
|
} |
|
|
|
target = {registers.at(gpr->GetIndex()), Type::Float}; |
|
|
|
|