|
|
|
@ -392,8 +392,30 @@ struct MetaImage {
|
|
|
|
|
using Meta =
|
|
|
|
|
std::variant<MetaArithmetic, MetaTexture, MetaImage, MetaStackClass, Tegra::Shader::HalfType>;
|
|
|
|
|
|
|
|
|
|
class AmendNode {
|
|
|
|
|
public:
|
|
|
|
|
std::optional<std::size_t> GetAmendIndex() const {
|
|
|
|
|
if (amend_index == amend_null_index) {
|
|
|
|
|
return std::nullopt;
|
|
|
|
|
}
|
|
|
|
|
return {amend_index};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SetAmendIndex(std::size_t index) {
|
|
|
|
|
amend_index = index;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ClearAmend() {
|
|
|
|
|
amend_index = amend_null_index;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
static constexpr std::size_t amend_null_index = 0xFFFFFFFFFFFFFFFFULL;
|
|
|
|
|
std::size_t amend_index{amend_null_index};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/// Holds any kind of operation that can be done in the IR
|
|
|
|
|
class OperationNode final {
|
|
|
|
|
class OperationNode final : public AmendNode {
|
|
|
|
|
public:
|
|
|
|
|
explicit OperationNode(OperationCode code) : OperationNode(code, Meta{}) {}
|
|
|
|
|
|
|
|
|
@ -433,7 +455,7 @@ private:
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/// Encloses inside any kind of node that returns a boolean conditionally-executed code
|
|
|
|
|
class ConditionalNode final {
|
|
|
|
|
class ConditionalNode final : public AmendNode {
|
|
|
|
|
public:
|
|
|
|
|
explicit ConditionalNode(Node condition, std::vector<Node>&& code)
|
|
|
|
|
: condition{std::move(condition)}, code{std::move(code)} {}
|
|
|
|
|