1 #ifndef MSP_GL_SL_COMPATIBILITY_H_
2 #define MSP_GL_SL_COMPATIBILITY_H_
11 class LocationAllocator: private TraversingVisitor
20 Uniform(): location(-1), desc_set(-1), bind_point(-1) { }
23 std::map<std::string, std::set<unsigned> > used_locations;
24 std::map<std::string, Uniform> uniforms;
25 std::map<unsigned, std::set<unsigned> > used_bindings;
26 std::vector<VariableDeclaration *> unplaced_variables;
27 std::vector<VariableDeclaration *> unbound_textures;
28 std::vector<InterfaceBlock *> unbound_blocks;
31 void apply(Module &, const Features &);
35 void allocate_locations(const std::string &);
36 void bind_uniform(RefPtr<Layout> &, const std::string &, unsigned);
37 void add_layout_value(RefPtr<Layout> &, const std::string &, unsigned);
39 virtual void visit(VariableDeclaration &);
40 virtual void visit(InterfaceBlock &);
41 virtual void visit(FunctionDeclaration &) { }
44 /** Generates default precision declarations or removes precision declarations
45 according to the requirements of the target API. */
46 class PrecisionConverter: private TraversingVisitor
50 std::set<std::string> have_default;
51 NodeList<Statement>::iterator insert_point;
52 std::set<Node *> nodes_to_remove;
60 virtual void visit(Block &);
61 virtual void visit(Precision &);
62 virtual void visit(VariableDeclaration &);
65 /** Converts structures of the syntax tree to match a particular set of
67 class LegacyConverter: private TraversingVisitor
72 VariableDeclaration *frag_out;
73 NodeList<Statement>::iterator uniform_insert_point;
74 std::set<Node *> nodes_to_remove;
79 virtual void apply(Stage &, const Features &);
82 void unsupported(const std::string &);
84 virtual void visit(Block &);
85 bool check_version(const Version &) const;
86 bool check_extension(bool Features::*) const;
87 bool supports_stage(Stage::Type) const;
88 bool supports_unified_interface_syntax() const;
89 virtual void visit(VariableReference &);
90 virtual void visit(Assignment &);
91 bool supports_unified_sampling_functions() const;
92 virtual void visit(FunctionCall &);
93 bool supports_interface_layouts() const;
94 bool supports_stage_interface_layouts() const;
95 bool supports_centroid_sampling() const;
96 bool supports_sample_sampling() const;
97 bool supports_uniform_location() const;
98 bool supports_binding() const;
99 virtual void visit(VariableDeclaration &);
100 bool supports_interface_blocks(const std::string &) const;
101 bool supports_interface_block_location() const;
102 virtual void visit(InterfaceBlock &);