summaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan
diff options
context:
space:
mode:
authorGravatar Fernando Sahmkow2019-09-28 15:16:19 -0400
committerGravatar FernandoS272019-10-04 18:52:57 -0400
commit3c09d9abe6d268ada063fd67c08d09fc0fcad613 (patch)
tree27f1442ec1ee8390850dd5099ed3642f1d3f59db /src/video_core/renderer_vulkan
parentvk_shader_decompiler: Correct Branches inside conditionals. (diff)
downloadyuzu-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.cpp43
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
1647class ExprDecompiler { 1647class ExprDecompiler {
1648public: 1648public:
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
1714private: 1708private:
1715 Id current_id;
1716 SPIRVDecompiler& decomp; 1709 SPIRVDecompiler& decomp;
1717}; 1710};
1718 1711
1719class ASTDecompiler { 1712class ASTDecompiler {
1720public: 1713public:
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
1851private: 1844private:
1852 SPIRVDecompiler& decomp; 1845 SPIRVDecompiler& decomp;
1853 Id current_loop_exit; 1846 Id current_loop_exit{};
1854}; 1847};
1855 1848
1856void SPIRVDecompiler::DecompileAST() { 1849void SPIRVDecompiler::DecompileAST() {