mirror of
https://git.h3cjp.net/H3cJP/citra.git
synced 2024-12-27 05:36:42 +00:00
shader/shader_ir: Mark tracking functions as const member functions
These don't actually modify instance state, so they can be marked as const member functions
This commit is contained in:
parent
ce04ab38bb
commit
e09ee0ff23
|
@ -811,11 +811,12 @@ private:
|
||||||
void WriteLop3Instruction(NodeBlock& bb, Tegra::Shader::Register dest, Node op_a, Node op_b,
|
void WriteLop3Instruction(NodeBlock& bb, Tegra::Shader::Register dest, Node op_a, Node op_b,
|
||||||
Node op_c, Node imm_lut, bool sets_cc);
|
Node op_c, Node imm_lut, bool sets_cc);
|
||||||
|
|
||||||
Node TrackCbuf(Node tracked, const NodeBlock& code, s64 cursor);
|
Node TrackCbuf(Node tracked, const NodeBlock& code, s64 cursor) const;
|
||||||
|
|
||||||
std::optional<u32> TrackImmediate(Node tracked, const NodeBlock& code, s64 cursor);
|
std::optional<u32> TrackImmediate(Node tracked, const NodeBlock& code, s64 cursor) const;
|
||||||
|
|
||||||
std::pair<Node, s64> TrackRegister(const GprNode* tracked, const NodeBlock& code, s64 cursor);
|
std::pair<Node, s64> TrackRegister(const GprNode* tracked, const NodeBlock& code,
|
||||||
|
s64 cursor) const;
|
||||||
|
|
||||||
std::tuple<Node, Node, GlobalMemoryBase> TrackAndGetGlobalMemory(NodeBlock& bb,
|
std::tuple<Node, Node, GlobalMemoryBase> TrackAndGetGlobalMemory(NodeBlock& bb,
|
||||||
Node addr_register,
|
Node addr_register,
|
||||||
|
|
|
@ -17,22 +17,24 @@ std::pair<Node, s64> FindOperation(const NodeBlock& code, s64 cursor,
|
||||||
for (; cursor >= 0; --cursor) {
|
for (; cursor >= 0; --cursor) {
|
||||||
const Node node = code.at(cursor);
|
const Node node = code.at(cursor);
|
||||||
if (const auto operation = std::get_if<OperationNode>(node)) {
|
if (const auto operation = std::get_if<OperationNode>(node)) {
|
||||||
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)) {
|
if (const auto conditional = std::get_if<ConditionalNode>(node)) {
|
||||||
const auto& conditional_code = conditional->GetCode();
|
const auto& conditional_code = conditional->GetCode();
|
||||||
const auto [found, internal_cursor] = FindOperation(
|
const auto [found, internal_cursor] = FindOperation(
|
||||||
conditional_code, static_cast<s64>(conditional_code.size() - 1), operation_code);
|
conditional_code, static_cast<s64>(conditional_code.size() - 1), operation_code);
|
||||||
if (found)
|
if (found) {
|
||||||
return {found, cursor};
|
return {found, cursor};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
Node ShaderIR::TrackCbuf(Node tracked, const NodeBlock& code, s64 cursor) {
|
Node ShaderIR::TrackCbuf(Node tracked, const NodeBlock& code, s64 cursor) const {
|
||||||
if (const auto cbuf = std::get_if<CbufNode>(tracked)) {
|
if (const auto cbuf = std::get_if<CbufNode>(tracked)) {
|
||||||
// Cbuf found, but it has to be immediate
|
// Cbuf found, but it has to be immediate
|
||||||
return std::holds_alternative<ImmediateNode>(*cbuf->GetOffset()) ? tracked : nullptr;
|
return std::holds_alternative<ImmediateNode>(*cbuf->GetOffset()) ? tracked : nullptr;
|
||||||
|
@ -65,7 +67,7 @@ Node ShaderIR::TrackCbuf(Node tracked, const NodeBlock& code, s64 cursor) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<u32> ShaderIR::TrackImmediate(Node tracked, const NodeBlock& code, s64 cursor) {
|
std::optional<u32> ShaderIR::TrackImmediate(Node tracked, const NodeBlock& code, s64 cursor) const {
|
||||||
// Reduce the cursor in one to avoid infinite loops when the instruction sets the same register
|
// Reduce the cursor in one to avoid infinite loops when the instruction sets the same register
|
||||||
// that it uses as operand
|
// that it uses as operand
|
||||||
const auto [found, found_cursor] =
|
const auto [found, found_cursor] =
|
||||||
|
@ -80,7 +82,7 @@ std::optional<u32> ShaderIR::TrackImmediate(Node tracked, const NodeBlock& code,
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<Node, s64> ShaderIR::TrackRegister(const GprNode* tracked, const NodeBlock& code,
|
std::pair<Node, s64> ShaderIR::TrackRegister(const GprNode* tracked, const NodeBlock& code,
|
||||||
s64 cursor) {
|
s64 cursor) const {
|
||||||
for (; cursor >= 0; --cursor) {
|
for (; cursor >= 0; --cursor) {
|
||||||
const auto [found_node, new_cursor] = FindOperation(code, cursor, OperationCode::Assign);
|
const auto [found_node, new_cursor] = FindOperation(code, cursor, OperationCode::Assign);
|
||||||
if (!found_node) {
|
if (!found_node) {
|
||||||
|
|
Loading…
Reference in a new issue