Merge pull request #3317 from ReinUsesLisp/gl-decomp-cc-decomp
gl_shader_decompiler: Fix decompilation of condition codes
This commit is contained in:
		| @@ -2325,7 +2325,7 @@ public: | ||||
|     explicit ExprDecompiler(GLSLDecompiler& decomp) : decomp{decomp} {} | ||||
|  | ||||
|     void operator()(const ExprAnd& expr) { | ||||
|         inner += "( "; | ||||
|         inner += '('; | ||||
|         std::visit(*this, *expr.operand1); | ||||
|         inner += " && "; | ||||
|         std::visit(*this, *expr.operand2); | ||||
| @@ -2333,7 +2333,7 @@ public: | ||||
|     } | ||||
|  | ||||
|     void operator()(const ExprOr& expr) { | ||||
|         inner += "( "; | ||||
|         inner += '('; | ||||
|         std::visit(*this, *expr.operand1); | ||||
|         inner += " || "; | ||||
|         std::visit(*this, *expr.operand2); | ||||
| @@ -2351,28 +2351,7 @@ public: | ||||
|     } | ||||
|  | ||||
|     void operator()(const ExprCondCode& expr) { | ||||
|         const Node cc = decomp.ir.GetConditionCode(expr.cc); | ||||
|         std::string target; | ||||
|  | ||||
|         if (const auto pred = std::get_if<PredicateNode>(&*cc)) { | ||||
|             const auto index = pred->GetIndex(); | ||||
|             switch (index) { | ||||
|             case Tegra::Shader::Pred::NeverExecute: | ||||
|                 target = "false"; | ||||
|                 break; | ||||
|             case Tegra::Shader::Pred::UnusedIndex: | ||||
|                 target = "true"; | ||||
|                 break; | ||||
|             default: | ||||
|                 target = decomp.GetPredicate(index); | ||||
|                 break; | ||||
|             } | ||||
|         } else if (const auto flag = std::get_if<InternalFlagNode>(&*cc)) { | ||||
|             target = decomp.GetInternalFlag(flag->GetFlag()); | ||||
|         } else { | ||||
|             UNREACHABLE(); | ||||
|         } | ||||
|         inner += target; | ||||
|         inner += decomp.Visit(decomp.ir.GetConditionCode(expr.cc)).AsBool(); | ||||
|     } | ||||
|  | ||||
|     void operator()(const ExprVar& expr) { | ||||
| @@ -2384,8 +2363,7 @@ public: | ||||
|     } | ||||
|  | ||||
|     void operator()(VideoCommon::Shader::ExprGprEqual& expr) { | ||||
|         inner += | ||||
|             "( ftou(" + decomp.GetRegister(expr.gpr) + ") == " + std::to_string(expr.value) + ')'; | ||||
|         inner += fmt::format("(ftou({}) == {})", decomp.GetRegister(expr.gpr), expr.value); | ||||
|     } | ||||
|  | ||||
|     const std::string& GetResult() const { | ||||
| @@ -2393,8 +2371,8 @@ public: | ||||
|     } | ||||
|  | ||||
| private: | ||||
|     std::string inner; | ||||
|     GLSLDecompiler& decomp; | ||||
|     std::string inner; | ||||
| }; | ||||
|  | ||||
| class ASTDecompiler { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Fernando Sahmkow
					Fernando Sahmkow