Browse Source
Merge pull request #3240 from ReinUsesLisp/decomp-cond-code
vk_shader_decompiler: Use Visit instead of reimplementing it
pull/15/merge
Fernando Sahmkow
6 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with
1 additions and
23 deletions
-
src/video_core/renderer_vulkan/vk_shader_decompiler.cpp
|
|
@ -2552,29 +2552,7 @@ public: |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
Id operator()(const ExprCondCode& expr) { |
|
|
Id operator()(const ExprCondCode& expr) { |
|
|
const Node cc = decomp.ir.GetConditionCode(expr.cc); |
|
|
|
|
|
Id target; |
|
|
|
|
|
|
|
|
|
|
|
if (const auto pred = std::get_if<PredicateNode>(&*cc)) { |
|
|
|
|
|
const auto index = pred->GetIndex(); |
|
|
|
|
|
switch (index) { |
|
|
|
|
|
case Tegra::Shader::Pred::NeverExecute: |
|
|
|
|
|
target = decomp.v_false; |
|
|
|
|
|
break; |
|
|
|
|
|
case Tegra::Shader::Pred::UnusedIndex: |
|
|
|
|
|
target = decomp.v_true; |
|
|
|
|
|
break; |
|
|
|
|
|
default: |
|
|
|
|
|
target = decomp.predicates.at(index); |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
} else if (const auto flag = std::get_if<InternalFlagNode>(&*cc)) { |
|
|
|
|
|
target = decomp.internal_flags.at(static_cast<u32>(flag->GetFlag())); |
|
|
|
|
|
} else { |
|
|
|
|
|
UNREACHABLE(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return decomp.OpLoad(decomp.t_bool, target); |
|
|
|
|
|
|
|
|
return decomp.AsBool(decomp.Visit(decomp.ir.GetConditionCode(expr.cc))); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
Id operator()(const ExprVar& expr) { |
|
|
Id operator()(const ExprVar& expr) { |
|
|
|