|
|
@@ -20,6 +20,7 @@
|
|
|
#include "shader_recompiler/frontend/maxwell/decode.h"
|
|
|
#include "shader_recompiler/frontend/maxwell/structured_control_flow.h"
|
|
|
#include "shader_recompiler/frontend/maxwell/translate/translate.h"
|
|
|
+#include "shader_recompiler/host_translate_info.h"
|
|
|
#include "shader_recompiler/object_pool.h"
|
|
|
|
|
|
namespace Shader::Maxwell {
|
|
|
@@ -652,7 +653,7 @@ class TranslatePass {
|
|
|
public:
|
|
|
TranslatePass(ObjectPool<IR::Inst>& inst_pool_, ObjectPool<IR::Block>& block_pool_,
|
|
|
ObjectPool<Statement>& stmt_pool_, Environment& env_, Statement& root_stmt,
|
|
|
- IR::AbstractSyntaxList& syntax_list_)
|
|
|
+ IR::AbstractSyntaxList& syntax_list_, const HostTranslateInfo& host_info)
|
|
|
: stmt_pool{stmt_pool_}, inst_pool{inst_pool_}, block_pool{block_pool_}, env{env_},
|
|
|
syntax_list{syntax_list_} {
|
|
|
Visit(root_stmt, nullptr, nullptr);
|
|
|
@@ -660,7 +661,7 @@ public:
|
|
|
IR::Block& first_block{*syntax_list.front().data.block};
|
|
|
IR::IREmitter ir(first_block, first_block.begin());
|
|
|
ir.Prologue();
|
|
|
- if (uses_demote_to_helper) {
|
|
|
+ if (uses_demote_to_helper && host_info.needs_demote_reorder) {
|
|
|
DemoteCombinationPass();
|
|
|
}
|
|
|
}
|
|
|
@@ -977,12 +978,13 @@ private:
|
|
|
} // Anonymous namespace
|
|
|
|
|
|
IR::AbstractSyntaxList BuildASL(ObjectPool<IR::Inst>& inst_pool, ObjectPool<IR::Block>& block_pool,
|
|
|
- Environment& env, Flow::CFG& cfg) {
|
|
|
+ Environment& env, Flow::CFG& cfg,
|
|
|
+ const HostTranslateInfo& host_info) {
|
|
|
ObjectPool<Statement> stmt_pool{64};
|
|
|
GotoPass goto_pass{cfg, stmt_pool};
|
|
|
Statement& root{goto_pass.RootStatement()};
|
|
|
IR::AbstractSyntaxList syntax_list;
|
|
|
- TranslatePass{inst_pool, block_pool, stmt_pool, env, root, syntax_list};
|
|
|
+ TranslatePass{inst_pool, block_pool, stmt_pool, env, root, syntax_list, host_info};
|
|
|
return syntax_list;
|
|
|
}
|
|
|
|