]> git.tdb.fi Git - libs/gl.git/blobdiff - source/programsyntax.h
Use layout declarations to set attribute and fragment data locations
[libs/gl.git] / source / programsyntax.h
index 9545760c47b31bd8cfa98f61ee59ef626d2d851c..c502ba47a90f32701bc885e44006ff48a8d93c24 100644 (file)
@@ -5,6 +5,7 @@
 #include <map>
 #include <string>
 #include <vector>
+#include "extension.h"
 
 namespace Msp {
 namespace GL {
@@ -52,6 +53,7 @@ public:
 
 struct StructDeclaration;
 struct VariableDeclaration;
+struct FunctionDeclaration;
 
 struct Block: Node
 {
@@ -145,6 +147,7 @@ struct Assignment: BinaryExpression
 struct FunctionCall: Expression
 {
        std::string name;
+       FunctionDeclaration *declaration;
        bool constructor;
        std::vector<NodePtr<Expression> > arguments;
 
@@ -179,12 +182,20 @@ struct Layout: Node
        };
 
        std::vector<Qualifier> qualifiers;
-       std::string interface;
 
        virtual Layout *clone() const { return new Layout(*this); }
        virtual void visit(NodeVisitor &);
 };
 
+struct InterfaceLayout: Node
+{
+       std::string interface;
+       Layout layout;
+
+       virtual InterfaceLayout *clone() const { return new InterfaceLayout(*this); }
+       virtual void visit(NodeVisitor &);
+};
+
 struct StructDeclaration: Node
 {
        std::string name;
@@ -208,6 +219,7 @@ struct VariableDeclaration: Node
        NodePtr<Expression> array_size;
        NodePtr<Expression> init_expression;
        VariableDeclaration *linked_declaration;
+       NodePtr<Layout> layout;
 
        VariableDeclaration();
 
@@ -297,6 +309,7 @@ struct NodeVisitor
        virtual void visit(ExpressionStatement &) { }
        virtual void visit(Import &) { }
        virtual void visit(Layout &) { }
+       virtual void visit(InterfaceLayout &) { }
        virtual void visit(StructDeclaration &) { }
        virtual void visit(VariableDeclaration &) { }
        virtual void visit(InterfaceBlock &) { }
@@ -316,6 +329,7 @@ struct TraversingVisitor: NodeVisitor
        virtual void visit(BinaryExpression &);
        virtual void visit(FunctionCall &);
        virtual void visit(ExpressionStatement &);
+       virtual void visit(InterfaceLayout &);
        virtual void visit(StructDeclaration &);
        virtual void visit(VariableDeclaration &);
        virtual void visit(InterfaceBlock &);
@@ -341,6 +355,8 @@ struct Stage
        ProgramSyntax::Block content;
        std::map<std::string, VariableDeclaration *> in_variables;
        std::map<std::string, VariableDeclaration *> out_variables;
+       std::map<std::string, unsigned> locations;
+       Version required_version;
 
        Stage(StageType);
 };