From b3371ed09e6866e235141119f9eecc2bb962dc8d Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Mon, 30 Dec 2019 13:54:53 -0400 Subject: Shader_IR: add the ability to amend code in the shader ir. This commit introduces a mechanism by which shader IR code can be amended and extended. This useful for track algorithms where certain information can derived from before the track such as indexes to array samplers. --- src/video_core/shader/node.h | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) (limited to 'src/video_core/shader/node.h') diff --git a/src/video_core/shader/node.h b/src/video_core/shader/node.h index 4d2f4d6a8..42e82ab74 100644 --- a/src/video_core/shader/node.h +++ b/src/video_core/shader/node.h @@ -392,8 +392,30 @@ struct MetaImage { using Meta = std::variant; +class AmendNode { +public: + std::optional GetAmendIndex() const { + if (amend_index == amend_null_index) { + return std::nullopt; + } + return {amend_index}; + } + + void SetAmendIndex(u32 index) { + amend_index = index; + } + + void ClearAmend() { + amend_index = amend_null_index; + } + +private: + static constexpr u32 amend_null_index = 0xFFFFFFFF; + u32 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&& code) : condition{std::move(condition)}, code{std::move(code)} {} @@ -630,7 +652,7 @@ private: }; /// Commentary, can be dropped -class CommentNode final { +class CommentNode final : public AmendNode { public: explicit CommentNode(std::string text) : text{std::move(text)} {} -- cgit v1.2.3