X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fglsl%2Fresolve.h;h=36af54578da987b53fafcdabaffc3d6130b57a55;hp=fdbebfe8e3a8e8249407545d5abfef5ca291dda0;hb=HEAD;hpb=f661973abaa7d189a61d76708d0c90cfcdb4b440 diff --git a/source/glsl/resolve.h b/source/glsl/resolve.h index fdbebfe8..d592e4ef 100644 --- a/source/glsl/resolve.h +++ b/source/glsl/resolve.h @@ -30,9 +30,11 @@ class TypeResolver: private TraversingVisitor private: Stage *stage = 0; std::map alias_map; - std::map array_types; + std::map, TypeDeclaration *> array_types; + std::map, ImageTypeDeclaration *> image_types; NodeList::iterator type_insert_point; - InterfaceBlock *iface_block = 0; + NodeList::iterator block_member_type_ins_pt; + VariableDeclaration *iface_block = 0; bool r_any_resolved = false; public: @@ -40,18 +42,17 @@ public: private: TypeDeclaration *get_or_create_array_type(TypeDeclaration &); - void resolve_type(TypeDeclaration *&, const std::string &, bool); + TypeDeclaration *get_or_create_image_type(ImageTypeDeclaration &, const std::string &); + void resolve_type(TypeDeclaration *&, const std::string &, bool, const Layout * = 0); virtual void visit(Block &); virtual void visit(BasicTypeDeclaration &); virtual void visit(ImageTypeDeclaration &); virtual void visit(StructDeclaration &); virtual void visit(VariableDeclaration &); - virtual void visit(InterfaceBlock &); virtual void visit(FunctionDeclaration &); }; -/** Resolves variable references. Variable references which match the name -of an interface block are turned into interface block references. */ +/** Resolves variable references. */ class VariableResolver: private TraversingVisitor { private: @@ -70,9 +71,8 @@ public: private: virtual void enter(Block &); virtual void visit(RefPtr &); - void check_assignment_target(Statement *); + void check_assignment_target(VariableDeclaration *); virtual void visit(VariableReference &); - virtual void visit(InterfaceBlockReference &); virtual void visit(MemberAccess &); virtual void visit(Swizzle &); virtual void visit(BinaryExpression &); @@ -80,7 +80,6 @@ private: void merge_layouts(Layout &, const Layout &); void redeclare_builtin(VariableDeclaration &, VariableDeclaration &); virtual void visit(VariableDeclaration &); - virtual void visit(InterfaceBlock &); }; /** Resolves types and lvalueness of expressions. */ @@ -122,7 +121,6 @@ private: virtual void visit(Block &); virtual void visit(Literal &); virtual void visit(VariableReference &); - virtual void visit(InterfaceBlockReference &); virtual void visit(MemberAccess &); virtual void visit(Swizzle &); virtual void visit(UnaryExpression &);