X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fprogramcompiler.h;h=0bff354a50571128a0fa31bed3dbe8c935a0b1dc;hp=6bac5386828d928ba2d9379366d48b8efb9ae020;hb=HEAD;hpb=009918a51aa309eeceb6c02ecaebe45e8d357033 diff --git a/source/programcompiler.h b/source/programcompiler.h deleted file mode 100644 index 6bac5386..00000000 --- a/source/programcompiler.h +++ /dev/null @@ -1,148 +0,0 @@ -#ifndef MSP_GL_PROGRAMCOMPILER_H_ -#define MSP_GL_PROGRAMCOMPILER_H_ - -#include -#include "programparser.h" -#include "programsyntax.h" - -namespace Msp { -namespace GL { - -class Program; - -class ProgramCompiler -{ -public: - struct Formatter: ProgramSyntax::NodeVisitor - { - std::string formatted; - unsigned indent; - bool parameter_list; - bool else_if; - - Formatter(); - - virtual void visit(ProgramSyntax::Block &); - virtual void visit(ProgramSyntax::Literal &); - virtual void visit(ProgramSyntax::ParenthesizedExpression &); - virtual void visit(ProgramSyntax::VariableReference &); - virtual void visit(ProgramSyntax::MemberAccess &); - virtual void visit(ProgramSyntax::UnaryExpression &); - virtual void visit(ProgramSyntax::BinaryExpression &); - virtual void visit(ProgramSyntax::FunctionCall &); - virtual void visit(ProgramSyntax::ExpressionStatement &); - virtual void visit(ProgramSyntax::Layout &); - virtual void visit(ProgramSyntax::StructDeclaration &); - virtual void visit(ProgramSyntax::VariableDeclaration &); - virtual void visit(ProgramSyntax::InterfaceBlock &); - virtual void visit(ProgramSyntax::FunctionDeclaration &); - virtual void visit(ProgramSyntax::Conditional &); - virtual void visit(ProgramSyntax::Iteration &); - virtual void visit(ProgramSyntax::Return &); - }; - -private: - struct VariableResolver: ProgramSyntax::TraversingVisitor - { - std::vector blocks; - ProgramSyntax::StructDeclaration *type; - bool anonymous; - - VariableResolver(); - - virtual void visit(ProgramSyntax::Block &); - virtual void visit(ProgramSyntax::VariableReference &); - virtual void visit(ProgramSyntax::MemberAccess &); - virtual void visit(ProgramSyntax::BinaryExpression &); - virtual void visit(ProgramSyntax::StructDeclaration &); - virtual void visit(ProgramSyntax::VariableDeclaration &); - virtual void visit(ProgramSyntax::InterfaceBlock &); - }; - - struct InterfaceGenerator: ProgramSyntax::TraversingVisitor - { - ProgramSyntax::Context *context; - std::string in_prefix; - std::string out_prefix; - unsigned scope_level; - std::map > iface_declarations; - bool remove_node; - std::list > insert_nodes; - - InterfaceGenerator(); - - static std::string get_out_prefix(ProgramSyntax::ContextType); - void visit(ProgramSyntax::Context &); - virtual void visit(ProgramSyntax::Block &); - std::string change_prefix(const std::string &, const std::string &) const; - bool generate_interface(ProgramSyntax::VariableDeclaration &, const std::string &, const std::string &); - void insert_assignment(const std::string &, ProgramSyntax::Expression *); - virtual void visit(ProgramSyntax::VariableReference &); - virtual void visit(ProgramSyntax::VariableDeclaration &); - virtual void visit(ProgramSyntax::Passthrough &); - }; - - struct VariableRenamer: ProgramSyntax::TraversingVisitor - { - virtual void visit(ProgramSyntax::VariableReference &); - virtual void visit(ProgramSyntax::VariableDeclaration &); - }; - - struct UnusedVariableLocator: ProgramSyntax::TraversingVisitor - { - ProgramSyntax::Context *context; - std::set unused_nodes; - std::map assignments; - bool assignment; - ProgramSyntax::VariableDeclaration *assignment_target; - - UnusedVariableLocator(); - - void visit(ProgramSyntax::Context &); - virtual void visit(ProgramSyntax::VariableReference &); - virtual void visit(ProgramSyntax::MemberAccess &); - virtual void visit(ProgramSyntax::BinaryExpression &); - virtual void visit(ProgramSyntax::ExpressionStatement &); - virtual void visit(ProgramSyntax::VariableDeclaration &); - }; - - struct NodeRemover: ProgramSyntax::TraversingVisitor - { - ProgramSyntax::Context *context; - std::set to_remove; - unsigned n_removed; - bool immutable_block; - bool remove_block; - - NodeRemover(); - - void visit(ProgramSyntax::Context &); - virtual void visit(ProgramSyntax::Block &); - virtual void visit(ProgramSyntax::StructDeclaration &); - virtual void visit(ProgramSyntax::VariableDeclaration &); - virtual void visit(ProgramSyntax::InterfaceBlock &); - }; - - ProgramParser parser; - ProgramSyntax::Module *module; - -public: - ProgramCompiler(); - - void compile(const std::string &); - void compile(IO::Base &); - void add_shaders(Program &); - -private: - void process(); - void generate(ProgramSyntax::Context &); - void optimize(ProgramSyntax::Context &); - static void inject_block(ProgramSyntax::Block &, const ProgramSyntax::Block &); - static void resolve_variables(ProgramSyntax::Context &); - std::string format_context(ProgramSyntax::Context &); -}; - -} // namespace GL -} // namespace Msp - -#endif