bool operator<(const ConstantKey &) const;
};
+ Features features;
Stage *stage = 0;
FunctionDeclaration *current_function = 0;
std::vector<const InterfaceLayout *> interface_layouts;
std::map<std::string, Id> imported_extension_ids;
std::map<Node *, Declaration> declared_ids;
std::map<std::string, Id> declared_uniform_ids;
+ std::map<unsigned, Id> declared_spec_ids;
std::map<TypeKey, Id> standard_type_ids;
std::map<Id, Id> image_type_ids;
std::map<TypeKey, Id> array_type_ids;
public:
SpirVGenerator();
- void apply(Module &);
+ void apply(Module &, const Features &);
const std::vector<Word> &get_code() const { return content.code; }
private:
Id get_vector_constant_id(Id, unsigned, Id);
Id get_standard_type_id(BasicTypeDeclaration::Kind, unsigned, bool = true);
bool is_scalar_type(Id, BasicTypeDeclaration::Kind) const;
- Id get_array_type_id(TypeDeclaration &, unsigned);
+ Id get_array_type_id(TypeDeclaration &, Id, bool);
Id get_pointer_type_id(Id, StorageClass);
Id get_variable_type_id(const VariableDeclaration &);
Id get_load_id(VariableDeclaration &);
virtual void visit(Block &);
virtual void visit(Literal &);
virtual void visit(VariableReference &);
- virtual void visit(InterfaceBlockReference &);
void generate_composite_access(TypeDeclaration &);
void visit_composite(Expression &, unsigned, TypeDeclaration &);
void visit_isolated(Expression &);
virtual void visit(ImageTypeDeclaration &);
virtual void visit(StructDeclaration &);
virtual void visit(VariableDeclaration &);
- virtual void visit(InterfaceBlock &);
void visit_entry_point(FunctionDeclaration &, Id);
virtual void visit(FunctionDeclaration &);
virtual void visit(Conditional &);