virtual void compile(SL::Compiler &) = 0;
SL::Features create_features() const;
+
+public:
+ virtual void set_debug_name(const std::string &) { }
};
/**
enum Stage
{
VERTEX = 0,
+ TESS_CONTROL = 1,
+ TESS_EVAL = 2,
GEOMETRY = 3,
- FRAGMENT = 4
+ FRAGMENT = 4,
+ COMPUTE = 5
};
enum StorageClass
unsigned id = 0;
Stage stage = VERTEX;
std::vector<const Variable *> globals;
+ LinAl::Vector<unsigned, 3> compute_local_size;
};
struct StructMember
void reflect_name(CodeIterator);
void reflect_member_name(CodeIterator);
void reflect_entry_point(CodeIterator);
+ void reflect_execution_mode(CodeIterator);
void reflect_void_type(CodeIterator);
void reflect_bool_type(CodeIterator);
void reflect_int_type(CodeIterator);
std::vector<Variable> variables;
std::vector<Constant> spec_constants;
std::vector<InstructionBlock> blocks;
+ bool specializable = false;
public:
virtual Format get_format() const { return SPIR_V; }
const std::vector<Variable> &get_variables() const { return variables; }
const std::vector<Constant> &get_spec_constants() const { return spec_constants; }
const std::vector<InstructionBlock> &get_blocks() const { return blocks; }
+ bool is_specializable() const { return specializable; }
/** Creates a new module which is a specialized version of this one. */
SpirVModule *specialize(const std::map<std::string, int> &) const;
private:
std::vector<const InstructionBlock *> collect_visited_blocks(const std::map<unsigned, int> &) const;
void collect_visited_blocks(unsigned, std::vector<std::uint8_t> &) const;
+
+public:
+ void set_debug_name(const std::string &n) { SpirVModuleBackend::set_debug_name(n); }
};
} // namespace GL