diff options
| author | 2019-09-28 15:16:19 -0400 | |
|---|---|---|
| committer | 2019-10-04 18:52:57 -0400 | |
| commit | 3c09d9abe6d268ada063fd67c08d09fc0fcad613 (patch) | |
| tree | 27f1442ec1ee8390850dd5099ed3642f1d3f59db /src/video_core/renderer_vulkan | |
| parent | vk_shader_decompiler: Correct Branches inside conditionals. (diff) | |
| download | yuzu-3c09d9abe6d268ada063fd67c08d09fc0fcad613.tar.gz yuzu-3c09d9abe6d268ada063fd67c08d09fc0fcad613.tar.xz yuzu-3c09d9abe6d268ada063fd67c08d09fc0fcad613.zip | |
Shader_Ir: Address Feedback and clang format.
Diffstat (limited to 'src/video_core/renderer_vulkan')
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_shader_decompiler.cpp | 43 |
1 files changed, 18 insertions, 25 deletions
diff --git a/src/video_core/renderer_vulkan/vk_shader_decompiler.cpp b/src/video_core/renderer_vulkan/vk_shader_decompiler.cpp index 2b55a3727..8bcd04221 100644 --- a/src/video_core/renderer_vulkan/vk_shader_decompiler.cpp +++ b/src/video_core/renderer_vulkan/vk_shader_decompiler.cpp | |||
| @@ -1646,34 +1646,34 @@ private: | |||
| 1646 | 1646 | ||
| 1647 | class ExprDecompiler { | 1647 | class ExprDecompiler { |
| 1648 | public: | 1648 | public: |
| 1649 | ExprDecompiler(SPIRVDecompiler& decomp) : decomp{decomp} {} | 1649 | explicit ExprDecompiler(SPIRVDecompiler& decomp) : decomp{decomp} {} |
| 1650 | 1650 | ||
| 1651 | void operator()(VideoCommon::Shader::ExprAnd& expr) { | 1651 | Id operator()(VideoCommon::Shader::ExprAnd& expr) { |
| 1652 | const Id type_def = decomp.GetTypeDefinition(Type::Bool); | 1652 | const Id type_def = decomp.GetTypeDefinition(Type::Bool); |
| 1653 | const Id op1 = Visit(expr.operand1); | 1653 | const Id op1 = Visit(expr.operand1); |
| 1654 | const Id op2 = Visit(expr.operand2); | 1654 | const Id op2 = Visit(expr.operand2); |
| 1655 | current_id = decomp.Emit(decomp.OpLogicalAnd(type_def, op1, op2)); | 1655 | return decomp.Emit(decomp.OpLogicalAnd(type_def, op1, op2)); |
| 1656 | } | 1656 | } |
| 1657 | 1657 | ||
| 1658 | void operator()(VideoCommon::Shader::ExprOr& expr) { | 1658 | Id operator()(VideoCommon::Shader::ExprOr& expr) { |
| 1659 | const Id type_def = decomp.GetTypeDefinition(Type::Bool); | 1659 | const Id type_def = decomp.GetTypeDefinition(Type::Bool); |
| 1660 | const Id op1 = Visit(expr.operand1); | 1660 | const Id op1 = Visit(expr.operand1); |
| 1661 | const Id op2 = Visit(expr.operand2); | 1661 | const Id op2 = Visit(expr.operand2); |
| 1662 | current_id = decomp.Emit(decomp.OpLogicalOr(type_def, op1, op2)); | 1662 | return decomp.Emit(decomp.OpLogicalOr(type_def, op1, op2)); |
| 1663 | } | 1663 | } |
| 1664 | 1664 | ||
| 1665 | void operator()(VideoCommon::Shader::ExprNot& expr) { | 1665 | Id operator()(VideoCommon::Shader::ExprNot& expr) { |
| 1666 | const Id type_def = decomp.GetTypeDefinition(Type::Bool); | 1666 | const Id type_def = decomp.GetTypeDefinition(Type::Bool); |
| 1667 | const Id op1 = Visit(expr.operand1); | 1667 | const Id op1 = Visit(expr.operand1); |
| 1668 | current_id = decomp.Emit(decomp.OpLogicalNot(type_def, op1)); | 1668 | return decomp.Emit(decomp.OpLogicalNot(type_def, op1)); |
| 1669 | } | 1669 | } |
| 1670 | 1670 | ||
| 1671 | void operator()(VideoCommon::Shader::ExprPredicate& expr) { | 1671 | Id operator()(VideoCommon::Shader::ExprPredicate& expr) { |
| 1672 | const auto pred = static_cast<Tegra::Shader::Pred>(expr.predicate); | 1672 | const auto pred = static_cast<Tegra::Shader::Pred>(expr.predicate); |
| 1673 | current_id = decomp.Emit(decomp.OpLoad(decomp.t_bool, decomp.predicates.at(pred))); | 1673 | return decomp.Emit(decomp.OpLoad(decomp.t_bool, decomp.predicates.at(pred))); |
| 1674 | } | 1674 | } |
| 1675 | 1675 | ||
| 1676 | void operator()(VideoCommon::Shader::ExprCondCode& expr) { | 1676 | Id operator()(VideoCommon::Shader::ExprCondCode& expr) { |
| 1677 | const Node cc = decomp.ir.GetConditionCode(expr.cc); | 1677 | const Node cc = decomp.ir.GetConditionCode(expr.cc); |
| 1678 | Id target; | 1678 | Id target; |
| 1679 | 1679 | ||
| @@ -1690,35 +1690,28 @@ public: | |||
| 1690 | } else if (const auto flag = std::get_if<InternalFlagNode>(&*cc)) { | 1690 | } else if (const auto flag = std::get_if<InternalFlagNode>(&*cc)) { |
| 1691 | target = decomp.internal_flags.at(static_cast<u32>(flag->GetFlag())); | 1691 | target = decomp.internal_flags.at(static_cast<u32>(flag->GetFlag())); |
| 1692 | } | 1692 | } |
| 1693 | current_id = decomp.Emit(decomp.OpLoad(decomp.t_bool, target)); | 1693 | return decomp.Emit(decomp.OpLoad(decomp.t_bool, target)); |
| 1694 | } | 1694 | } |
| 1695 | 1695 | ||
| 1696 | void operator()(VideoCommon::Shader::ExprVar& expr) { | 1696 | Id operator()(VideoCommon::Shader::ExprVar& expr) { |
| 1697 | current_id = | 1697 | return decomp.Emit(decomp.OpLoad(decomp.t_bool, decomp.flow_variables.at(expr.var_index))); |
| 1698 | decomp.Emit(decomp.OpLoad(decomp.t_bool, decomp.flow_variables.at(expr.var_index))); | ||
| 1699 | } | 1698 | } |
| 1700 | 1699 | ||
| 1701 | void operator()(VideoCommon::Shader::ExprBoolean& expr) { | 1700 | Id operator()(VideoCommon::Shader::ExprBoolean& expr) { |
| 1702 | current_id = expr.value ? decomp.v_true : decomp.v_false; | 1701 | return expr.value ? decomp.v_true : decomp.v_false; |
| 1703 | } | ||
| 1704 | |||
| 1705 | Id GetResult() { | ||
| 1706 | return current_id; | ||
| 1707 | } | 1702 | } |
| 1708 | 1703 | ||
| 1709 | Id Visit(VideoCommon::Shader::Expr& node) { | 1704 | Id Visit(VideoCommon::Shader::Expr& node) { |
| 1710 | std::visit(*this, *node); | 1705 | return std::visit(*this, *node); |
| 1711 | return current_id; | ||
| 1712 | } | 1706 | } |
| 1713 | 1707 | ||
| 1714 | private: | 1708 | private: |
| 1715 | Id current_id; | ||
| 1716 | SPIRVDecompiler& decomp; | 1709 | SPIRVDecompiler& decomp; |
| 1717 | }; | 1710 | }; |
| 1718 | 1711 | ||
| 1719 | class ASTDecompiler { | 1712 | class ASTDecompiler { |
| 1720 | public: | 1713 | public: |
| 1721 | ASTDecompiler(SPIRVDecompiler& decomp) : decomp{decomp} {} | 1714 | explicit ASTDecompiler(SPIRVDecompiler& decomp) : decomp{decomp} {} |
| 1722 | 1715 | ||
| 1723 | void operator()(VideoCommon::Shader::ASTProgram& ast) { | 1716 | void operator()(VideoCommon::Shader::ASTProgram& ast) { |
| 1724 | ASTNode current = ast.nodes.GetFirst(); | 1717 | ASTNode current = ast.nodes.GetFirst(); |
| @@ -1850,7 +1843,7 @@ public: | |||
| 1850 | 1843 | ||
| 1851 | private: | 1844 | private: |
| 1852 | SPIRVDecompiler& decomp; | 1845 | SPIRVDecompiler& decomp; |
| 1853 | Id current_loop_exit; | 1846 | Id current_loop_exit{}; |
| 1854 | }; | 1847 | }; |
| 1855 | 1848 | ||
| 1856 | void SPIRVDecompiler::DecompileAST() { | 1849 | void SPIRVDecompiler::DecompileAST() { |