shader/track: Search inside of conditional nodes
Some games search conditionally use global memory instructions. This allows the heuristic to search inside conditional nodes for the source constant buffer.pull/15/head
parent
42b75e8be8
commit
0d1d755086
|
|
@ -19,6 +19,13 @@ std::pair<Node, s64> FindOperation(const NodeBlock& code, s64 cursor,
|
||||||
if (operation->GetCode() == operation_code)
|
if (operation->GetCode() == operation_code)
|
||||||
return {node, cursor};
|
return {node, cursor};
|
||||||
}
|
}
|
||||||
|
if (const auto conditional = std::get_if<ConditionalNode>(node)) {
|
||||||
|
const auto& code = conditional->GetCode();
|
||||||
|
const auto [found, internal_cursor] =
|
||||||
|
FindOperation(code, static_cast<s64>(code.size() - 1), operation_code);
|
||||||
|
if (found)
|
||||||
|
return {found, cursor};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
@ -50,6 +57,10 @@ Node ShaderIR::TrackCbuf(Node tracked, const NodeBlock& code, s64 cursor) {
|
||||||
}
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
if (const auto conditional = std::get_if<ConditionalNode>(tracked)) {
|
||||||
|
const auto& code = conditional->GetCode();
|
||||||
|
return TrackCbuf(tracked, code, static_cast<s64>(code.size()));
|
||||||
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue