X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fglsl%2Fcompiler.h;h=0db1ca400de7f017b2991e414dd3c0c331bc8a3d;hp=a515a326f2b10b21ce866fd4591e65b38558263d;hb=HEAD;hpb=7335009e18ecbf53ad9f59d64eed2ed5abbe7b8b diff --git a/source/glsl/compiler.h b/source/glsl/compiler.h index a515a326..0db1ca40 100644 --- a/source/glsl/compiler.h +++ b/source/glsl/compiler.h @@ -17,7 +17,8 @@ public: enum Mode { MODULE, - PROGRAM + PROGRAM, + SPIRV }; private: @@ -39,15 +40,13 @@ private: }; Features features; - Module *module; + Module *module = 0; std::vector imported_names; - bool specialized; + bool compiled = false; + bool specialized = false; std::map spec_values; public: - /** Creates a compiler using features from the current OpenGL context. */ - Compiler(); - /** Creates a compiler targeting a specific set of features. */ Compiler(const Features &); @@ -87,6 +86,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). */ @@ -97,13 +100,24 @@ 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; + + unsigned get_n_clip_distances() const; + /** Returns the mapping of source indices to filenames. Can be used to translate error messages. */ const SourceMap &get_source_map() const; /** Returns a textual representation of the syntax tree for a shader stage. Intended for debugging purposes. */ - std::string get_stage_debug(Stage::Type) const; + std::string get_stage_debug(Stage::Type, bool = false) const; /** Returns diagnostics from compilation. The output is intended to be viewed by humans. */ @@ -111,17 +125,17 @@ 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. */ - void generate(Stage &, Mode); + void generate(Stage &); template bool resolve(Stage &, unsigned &, unsigned); @@ -131,9 +145,13 @@ private: aspects as necessary. */ void resolve(Stage &, unsigned = RESOLVE_ALL); - /** Checks the validity of the module. If the return value is false, the - module's diagnostics list will contain additional information of errors. */ - bool validate(Stage &); + /** Runs validators on a stage. Diagnostic messages are recorded in the + stage for later inspection. */ + void validate(Stage &); + + /** Checks a stage's recorded diagnostics for errors. If any are found, + returns true. */ + bool check_errors(Stage &); static bool diagnostic_line_order(const Diagnostic &, const Diagnostic &);