X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fprogramcompiler.h;h=0bff354a50571128a0fa31bed3dbe8c935a0b1dc;hp=3b63c5e906bd257bdd568a6d89527e5fd2e01fb1;hb=HEAD;hpb=b3e71de19f35773c22391151ebb02062d6894bc9 diff --git a/source/programcompiler.h b/source/programcompiler.h deleted file mode 100644 index 3b63c5e9..00000000 --- a/source/programcompiler.h +++ /dev/null @@ -1,152 +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 -{ -private: - struct Visitor: ProgramSyntax::TraversingVisitor - { - ProgramSyntax::Stage *stage; - - Visitor(); - - virtual void apply(ProgramSyntax::Stage &); - }; - - struct Formatter: Visitor - { - 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 &); - }; - - struct VariableResolver: Visitor - { - 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: Visitor - { - 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::StageType); - virtual void apply(ProgramSyntax::Stage &); - 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: Visitor - { - virtual void visit(ProgramSyntax::VariableReference &); - virtual void visit(ProgramSyntax::VariableDeclaration &); - }; - - struct UnusedVariableLocator: Visitor - { - std::set unused_nodes; - std::map assignments; - bool assignment; - ProgramSyntax::VariableDeclaration *assignment_target; - - UnusedVariableLocator(); - - 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: Visitor - { - std::set to_remove; - unsigned n_removed; - bool immutable_block; - bool remove_block; - - NodeRemover(); - - 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::Stage &); - void optimize(ProgramSyntax::Stage &); - static void inject_block(ProgramSyntax::Block &, const ProgramSyntax::Block &); - template - static void apply(ProgramSyntax::Stage &); - std::string create_source(ProgramSyntax::Stage &); -}; - -} // namespace GL -} // namespace Msp - -#endif