|
|
|
@ -25,27 +25,44 @@ struct Condition { |
|
|
|
bool IsUnconditional() const { |
|
|
|
return predicate == Pred::UnusedIndex && cc == ConditionCode::T; |
|
|
|
} |
|
|
|
|
|
|
|
bool operator==(const Condition& other) const { |
|
|
|
return std::tie(predicate, cc) == std::tie(other.predicate, other.cc); |
|
|
|
} |
|
|
|
|
|
|
|
bool operator!=(const Condition& other) const { |
|
|
|
return !operator==(other); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
struct ShaderBlock { |
|
|
|
u32 start{}; |
|
|
|
u32 end{}; |
|
|
|
bool ignore_branch{}; |
|
|
|
struct Branch { |
|
|
|
Condition cond{}; |
|
|
|
bool kills{}; |
|
|
|
s32 address{}; |
|
|
|
|
|
|
|
bool operator==(const Branch& b) const { |
|
|
|
return std::tie(cond, kills, address) == std::tie(b.cond, b.kills, b.address); |
|
|
|
} |
|
|
|
} branch{}; |
|
|
|
|
|
|
|
bool operator!=(const Branch& b) const { |
|
|
|
return !operator==(b); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
u32 start{}; |
|
|
|
u32 end{}; |
|
|
|
bool ignore_branch{}; |
|
|
|
Branch branch{}; |
|
|
|
|
|
|
|
bool operator==(const ShaderBlock& sb) const { |
|
|
|
return std::tie(start, end, ignore_branch, branch) == |
|
|
|
std::tie(sb.start, sb.end, sb.ignore_branch, sb.branch); |
|
|
|
} |
|
|
|
|
|
|
|
bool operator!=(const ShaderBlock& sb) const { |
|
|
|
return !operator==(sb); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
struct ShaderCharacteristics { |
|
|
|
|