X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fprogramcompiler.h;h=56bf1d538fc1be3069f1ed816547fbbc20638585;hp=be2afab6fdd4d5746c5605aa8c1e9e1ea9707146;hb=91d3eac06389c0bb0363f643790581403b5fca1b;hpb=6fe1876a3040cc78ba4713194abf6d121f419458 diff --git a/source/programcompiler.h b/source/programcompiler.h index be2afab6..56bf1d53 100644 --- a/source/programcompiler.h +++ b/source/programcompiler.h @@ -29,7 +29,7 @@ private: struct BlockModifier: Visitor { bool remove_node; - std::list > insert_nodes; + std::vector > insert_nodes; BlockModifier(); @@ -81,9 +81,9 @@ private: template struct NodeGatherer: Visitor { - typedef std::list ResultType; + typedef std::vector ResultType; - std::list nodes; + std::vector nodes; const ResultType &get_result() const { return nodes; } using Visitor::visit; @@ -169,17 +169,21 @@ private: FUNCTION }; + unsigned scope_level; DeclarationKind kind; + std::set ordered_funcs; + std::set needed_funcs; DeclarationReorderer(); using Visitor::visit; virtual void visit(ProgramSyntax::Block &); + virtual void visit(ProgramSyntax::FunctionCall &); virtual void visit(ProgramSyntax::InterfaceLayout &) { kind = LAYOUT; } virtual void visit(ProgramSyntax::StructDeclaration &) { kind = STRUCT; } - virtual void visit(ProgramSyntax::VariableDeclaration &) { kind = VARIABLE; } + virtual void visit(ProgramSyntax::VariableDeclaration &); virtual void visit(ProgramSyntax::InterfaceBlock &) { kind = VARIABLE; } - virtual void visit(ProgramSyntax::FunctionDeclaration &) { kind = FUNCTION; } + virtual void visit(ProgramSyntax::FunctionDeclaration &); }; struct InlineableFunctionLocator: Visitor @@ -357,6 +361,8 @@ private: bool supports_unified_sampling_functions() const; virtual void visit(ProgramSyntax::FunctionCall &); bool supports_interface_layouts() const; + bool supports_centroid_sampling() const; + bool supports_sample_sampling() const; virtual void visit(ProgramSyntax::VariableDeclaration &); bool supports_interface_blocks(const std::string &) const; virtual void visit(ProgramSyntax::InterfaceBlock &);