summaryrefslogtreecommitdiff
path: root/src/video_core/shader/node.h
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2019-07-30 00:21:46 -0300
committerGravatar ReinUsesLisp2019-09-05 01:38:37 -0300
commitf17415d431777bb234714a3c6a97072872b2cc71 (patch)
treecb6d6fea921dc9609d2537976a8cbb4c4cb7811c /src/video_core/shader/node.h
parentMerge pull request #2797 from FearlessTobi/port-4877 (diff)
downloadyuzu-f17415d431777bb234714a3c6a97072872b2cc71.tar.gz
yuzu-f17415d431777bb234714a3c6a97072872b2cc71.tar.xz
yuzu-f17415d431777bb234714a3c6a97072872b2cc71.zip
shader_ir: Implement ST_S
This instruction writes to a memory buffer shared with threads within the same work group. It is known as "shared" memory in GLSL.
Diffstat (limited to 'src/video_core/shader/node.h')
-rw-r--r--src/video_core/shader/node.h16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/video_core/shader/node.h b/src/video_core/shader/node.h
index 5db9313c4..e0d1979fa 100644
--- a/src/video_core/shader/node.h
+++ b/src/video_core/shader/node.h
@@ -198,12 +198,13 @@ class PredicateNode;
198class AbufNode; 198class AbufNode;
199class CbufNode; 199class CbufNode;
200class LmemNode; 200class LmemNode;
201class SmemNode;
201class GmemNode; 202class GmemNode;
202class CommentNode; 203class CommentNode;
203 204
204using NodeData = 205using NodeData =
205 std::variant<OperationNode, ConditionalNode, GprNode, ImmediateNode, InternalFlagNode, 206 std::variant<OperationNode, ConditionalNode, GprNode, ImmediateNode, InternalFlagNode,
206 PredicateNode, AbufNode, CbufNode, LmemNode, GmemNode, CommentNode>; 207 PredicateNode, AbufNode, CbufNode, LmemNode, SmemNode, GmemNode, CommentNode>;
207using Node = std::shared_ptr<NodeData>; 208using Node = std::shared_ptr<NodeData>;
208using Node4 = std::array<Node, 4>; 209using Node4 = std::array<Node, 4>;
209using NodeBlock = std::vector<Node>; 210using NodeBlock = std::vector<Node>;
@@ -536,6 +537,19 @@ private:
536 Node address; 537 Node address;
537}; 538};
538 539
540/// Shared memory node
541class SmemNode final {
542public:
543 explicit SmemNode(Node address) : address{std::move(address)} {}
544
545 const Node& GetAddress() const {
546 return address;
547 }
548
549private:
550 Node address;
551};
552
539/// Global memory node 553/// Global memory node
540class GmemNode final { 554class GmemNode final {
541public: 555public: