X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fcompiler.h;h=f9e0e3fe2aa554f623b1d9c85f8f284e5808f58f;hb=c4aeeced7b397d46772577775bd3a0d6c4706cba;hp=e30bd709bb2aadef5cd585e114f6fdb6bc7f5ac8;hpb=20a86c5905e1f7527d3c9edc3f56f6b7679c268a;p=libs%2Fgl.git diff --git a/source/glsl/compiler.h b/source/glsl/compiler.h index e30bd709..f9e0e3fe 100644 --- a/source/glsl/compiler.h +++ b/source/glsl/compiler.h @@ -17,7 +17,8 @@ public: enum Mode { MODULE, - PROGRAM + PROGRAM, + SPIRV }; private: @@ -88,6 +89,10 @@ public: GLSL suitable for OpenGL or an external GLSL compiler. */ std::string get_stage_glsl(Stage::Type) const; + /** Returns a combined SPIR-V binary for all shader stages. The result is + suitable for use with OpenGL or Vulkan. */ + std::vector get_combined_spirv() const; + /** Returns a map of vertex attribute locations. If the target GLSL version supports interface layouts, the map is empty (locations are included in the GLSL soucre). */ @@ -98,6 +103,15 @@ public: GLSL soucre). */ const std::map &get_fragment_outputs() const; + /** Returns a map of texture bindings. If the target GLSL version supports + bindings, the map is empty (bindings are included in the GLSL source). */ + const std::map &get_texture_bindings() const; + + /** Returns a map of uniform block bindings. If the target GLSL version + supports bindings, the map is empty (bindings are included in the GLSL + source). */ + const std::map &get_uniform_block_bindings() const; + /** Returns the mapping of source indices to filenames. Can be used to translate error messages. */ const SourceMap &get_source_map() const; @@ -112,13 +126,13 @@ public: private: /** Appends a module to the target, processing any imports found in it. */ - void append_module(Module &, DataFile::Collection *); + void append_module(const Module &, ModuleCache &); /** Appends a single stage to the matching stage of the target. */ - void append_stage(Stage &); + void append_stage(const Stage &); /// Imports a module by name and appends it to the target. */ - void import(DataFile::Collection *, const std::string &); + void import(ModuleCache &, const std::string &); /** Generates any implicitly defines syntactic structures and resolves variables. */