class GlobalInterfaceValidator: private Validator
{
private:
- struct Binding
+ struct Uniform
{
Node *node;
TypeDeclaration *type;
std::string name;
+ int location;
+ unsigned loc_count;
+ int desc_set;
+ int bind_point;
- Binding(VariableDeclaration &v): node(&v), type(v.type_declaration), name(v.name) { }
- Binding(InterfaceBlock &i): node(&i), type(i.struct_declaration), name(i.block_name) { }
+ Uniform(): node(0), type(0), location(-1), loc_count(1), desc_set(0), bind_point(-1) { }
};
- std::map<unsigned, std::map<unsigned, Binding> > used_bindings;
+ std::list<Uniform> uniforms;
+ std::map<std::string, const Uniform *> used_names;
+ std::map<unsigned, const Uniform *> used_locations;
+ std::map<unsigned, std::map<unsigned, const Uniform *> > used_bindings;
public:
void apply(Module &);
private:
- void get_binding(const Layout &, unsigned &, int &);
- void check_binding(const Layout &, const Binding &);
+ void check_uniform(const Uniform &);
virtual void visit(VariableDeclaration &);
virtual void visit(InterfaceBlock &);