]> git.tdb.fi Git - libs/gl.git/blobdiff - source/programcompiler.h
Support precision qualifiers in shaders
[libs/gl.git] / source / programcompiler.h
index a84ccb8ac001d9a6fe49d93cab4f47998591ad9d..daf2a5db7904988f9e782e300b25e88ebcc47835 100644 (file)
@@ -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<std::string> 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<typename T>
        static typename T::ResultType apply(ProgramSyntax::Stage &);