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.
This commit is contained in:
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Reference in New Issue