X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fsyntax.h;h=f7e778b89ef65d417afd1f44751930311c5e94ed;hb=bd8816692056230c36504dcccd76c6946dff47b1;hp=549e5e895add03fb41f8b62b3c038a1be01326cb;hpb=696a97bd7411d69953c1a9e4b5f3dfb4c1d848f1;p=libs%2Fgl.git diff --git a/source/glsl/syntax.h b/source/glsl/syntax.h index 549e5e89..f7e778b8 100644 --- a/source/glsl/syntax.h +++ b/source/glsl/syntax.h @@ -3,11 +3,12 @@ #include #include +#include #include #include #include -#include "extension.h" -#include "uniform.h" +#include "features.h" +#include "sourcemap.h" #pragma push_macro("interface") #undef interface @@ -90,6 +91,7 @@ class NodeArray: public NodeContainer > > struct StructDeclaration; struct VariableDeclaration; +struct InterfaceBlock; struct FunctionDeclaration; struct Statement: Node @@ -108,8 +110,11 @@ struct Block: Node bool use_braces; std::map types; std::map variables; + std::map interfaces; + Block *parent; Block(); + Block(const Block &); virtual Block *clone() const { return new Block(*this); } virtual void visit(NodeVisitor &); @@ -142,17 +147,33 @@ struct VariableReference: Expression VariableDeclaration *declaration; VariableReference(); + VariableReference(const VariableReference &); virtual VariableReference *clone() const { return new VariableReference(*this); } virtual void visit(NodeVisitor &); }; +struct InterfaceBlockReference: Expression +{ + std::string name; + InterfaceBlock *declaration; + + InterfaceBlockReference(); + InterfaceBlockReference(const InterfaceBlockReference &); + + virtual InterfaceBlockReference *clone() const { return new InterfaceBlockReference(*this); } + virtual void visit(NodeVisitor &); +}; + struct MemberAccess: Expression { NodePtr left; std::string member; VariableDeclaration *declaration; + MemberAccess(); + MemberAccess(const MemberAccess &); + virtual MemberAccess *clone() const { return new MemberAccess(*this); } virtual void visit(NodeVisitor &); }; @@ -186,6 +207,7 @@ struct Assignment: BinaryExpression VariableDeclaration *target_declaration; Assignment(); + Assignment(const Assignment &); virtual Assignment *clone() const { return new Assignment(*this); } virtual void visit(NodeVisitor &); @@ -199,6 +221,7 @@ struct FunctionCall: Expression NodeArray arguments; FunctionCall(); + FunctionCall(const FunctionCall &); virtual FunctionCall *clone() const { return new FunctionCall(*this); } virtual void visit(NodeVisitor &); @@ -233,9 +256,9 @@ struct Layout: Node { struct Qualifier { - // TODO the standard calls this name, not identifier - std::string identifier; - std::string value; + std::string name; + bool has_value; + int value; }; std::vector qualifiers; @@ -281,6 +304,7 @@ struct VariableDeclaration: Statement NodePtr layout; VariableDeclaration(); + VariableDeclaration(const VariableDeclaration &); virtual VariableDeclaration *clone() const { return new VariableDeclaration(*this); } virtual void visit(NodeVisitor &); @@ -293,8 +317,10 @@ struct InterfaceBlock: Statement Block members; std::string instance_name; bool array; + InterfaceBlock *linked_block; InterfaceBlock(); + InterfaceBlock(const InterfaceBlock &); virtual InterfaceBlock *clone() const { return new InterfaceBlock(*this); } virtual void visit(NodeVisitor &); @@ -360,30 +386,30 @@ struct Jump: Statement virtual void visit(NodeVisitor &); }; -enum StageType -{ - SHARED, - VERTEX, - GEOMETRY, - FRAGMENT -}; - struct Stage { - StageType type; + enum Type + { + SHARED, + VERTEX, + GEOMETRY, + FRAGMENT + }; + + Type type; Stage *previous; Block content; - std::map in_variables; - std::map out_variables; std::map locations; - Version required_version; - std::vector required_extensions; + Features required_features; + + Stage(Type); - Stage(StageType); + static const char *get_stage_name(Type); }; struct Module { + SourceMap source_map; Stage shared; std::list stages;