]> 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 089683323c507b81573b0c908163f9b28337de7d..c502ba47a90f32701bc885e44006ff48a8d93c24 100644 (file)
@@ -5,6 +5,7 @@
 #include <map>
 #include <string>
 #include <vector>
+#include "extension.h"
 
 namespace Msp {
 namespace GL {
@@ -181,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;
@@ -210,6 +219,7 @@ struct VariableDeclaration: Node
        NodePtr<Expression> array_size;
        NodePtr<Expression> init_expression;
        VariableDeclaration *linked_declaration;
+       NodePtr<Layout> layout;
 
        VariableDeclaration();
 
@@ -299,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 &) { }
@@ -318,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 &);
@@ -343,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);
 };