X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fprogramcompiler.h;h=daf2a5db7904988f9e782e300b25e88ebcc47835;hp=a84ccb8ac001d9a6fe49d93cab4f47998591ad9d;hb=a5772e203cc30ce3b449614d03a293fd5b5985ad;hpb=0ebc82fb851d01a6d7f1fc74a4be6612bc575bb4 diff --git a/source/programcompiler.h b/source/programcompiler.h index a84ccb8a..daf2a5db 100644 --- a/source/programcompiler.h +++ b/source/programcompiler.h @@ -52,6 +52,7 @@ private: virtual void visit(ProgramSyntax::FunctionCall &); virtual void visit(ProgramSyntax::ExpressionStatement &); virtual void visit(ProgramSyntax::Import &); + virtual void visit(ProgramSyntax::Precision &); virtual void visit(ProgramSyntax::Layout &); virtual void visit(ProgramSyntax::InterfaceLayout &); virtual void visit(ProgramSyntax::StructDeclaration &); @@ -326,6 +327,26 @@ private: virtual void visit(ProgramSyntax::VariableDeclaration &); }; + struct PrecisionRemover: BlockModifier + { + using Visitor::visit; + virtual void visit(ProgramSyntax::Precision &); + virtual void visit(ProgramSyntax::VariableDeclaration &); + }; + + struct DefaultPrecisionGenerator: BlockModifier + { + bool toplevel; + std::set have_default; + + DefaultPrecisionGenerator(); + + using Visitor::visit; + virtual void visit(ProgramSyntax::Block &); + virtual void visit(ProgramSyntax::Precision &); + virtual void visit(ProgramSyntax::VariableDeclaration &); + }; + struct LegacyConverter: BlockModifier { GLApi target_api; @@ -368,6 +389,7 @@ private: void import(const std::string &); void generate(ProgramSyntax::Stage &); bool optimize(ProgramSyntax::Stage &); + void finalize(ProgramSyntax::Stage &); static void inject_block(ProgramSyntax::Block &, const ProgramSyntax::Block &); template static typename T::ResultType apply(ProgramSyntax::Stage &);