X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fspirvwriter.h;fp=source%2Fglsl%2Fspirvwriter.h;h=94f44e8883971299e73bc0649791f0a52ef6f3a5;hb=cc5483cc709fdf7b6966a3e69dabfcafebaaffa0;hp=0000000000000000000000000000000000000000;hpb=577a93f39f9b4d0f5101cd2f539fc774e7b06825;p=libs%2Fgl.git diff --git a/source/glsl/spirvwriter.h b/source/glsl/spirvwriter.h new file mode 100644 index 00000000..94f44e88 --- /dev/null +++ b/source/glsl/spirvwriter.h @@ -0,0 +1,74 @@ +#ifndef MSP_GL_SL_SPIRVWRITER_H_ +#define MSP_GL_SL_SPIRVWRITER_H_ + +#include +#include +#include +#include "spirvconstants.h" + +namespace Msp { +namespace GL { +namespace SL { + +struct SpirVContent +{ + typedef UInt32 Word; + + std::vector code; + std::vector capabilities; + std::vector extensions; + std::vector entry_points; + std::vector exec_modes; + std::vector names; + std::vector decorations; + std::vector globals; + std::vector functions; + std::vector locals; + std::vector function_body; +}; + +class SpirVWriter +{ +public: + typedef SpirVOpcode Opcode; + typedef SpirVDecoration Decoration; + typedef SpirVContent::Word Word; + typedef Word Id; + +private: + SpirVContent &content; + std::vector *op_target; + unsigned op_head_pos; + Id current_block_id; + +public: + SpirVWriter(SpirVContent &); + + void append(std::vector &, const std::vector &); + void write(Word); + void write_float(float); + void write_string(const std::string &); + void begin_op(std::vector &, Opcode, unsigned = 0); + void end_op(SpirVOpcode); + void write_op(std::vector &, Opcode); + void write_op(std::vector &, Opcode, Word); + void write_op(std::vector &, Opcode, Word, Word); + void write_op(std::vector &, Opcode, Word, Word, Word); + void write_op_name(Id, const std::string &); + void write_op_member_name(Id, unsigned, const std::string &); + void write_op_decorate(Id, Decoration); + void write_op_decorate(Id, Decoration, Word); + void write_op_member_decorate(Id, unsigned, Decoration); + void write_op_member_decorate(Id, unsigned, Decoration, Word); + void write_op_label(Id); + bool has_current_block() const { return current_block_id; } + void begin_function_body(Id); + void end_function_body(); + void finalize(Id); +}; + +} // namespace SL +} // namespace GL +} // namespace Msp + +#endif