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 &);
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;
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 &);