]> git.tdb.fi Git - libs/gl.git/commitdiff
Always show shader compiler diagnostics in debug builds
authorMikko Rasa <tdb@tdb.fi>
Tue, 16 Mar 2021 18:00:51 +0000 (20:00 +0200)
committerMikko Rasa <tdb@tdb.fi>
Tue, 16 Mar 2021 18:00:51 +0000 (20:00 +0200)
source/core/module.cpp
source/core/module.h
source/core/program.cpp
tools/glslcompiler.cpp

index 406b4739d1c765f981ddd992081411f5203b4123..009733a977041458a2f0602e4e05353ba6d84515 100644 (file)
@@ -1,6 +1,6 @@
+#include <msp/io/print.h>
 #include "module.h"
 #include "resources.h"
-#include "glsl/compiler.h"
 
 using namespace std;
 
@@ -14,18 +14,14 @@ void Module::set_source(const string &src)
 {
        SL::Compiler compiler;
        compiler.set_source(src);
-       compiler.compile(SL::Compiler::MODULE);
-       prepared_source = compiler.get_combined_glsl();
-       source_map = compiler.get_source_map();
+       compile(compiler);
 }
 
 void Module::load_source(IO::Base &io, Resources *res, const string &name)
 {
        SL::Compiler compiler;
        compiler.load_source(io, res, name);
-       compiler.compile(SL::Compiler::MODULE);
-       prepared_source = compiler.get_combined_glsl();
-       source_map = compiler.get_source_map();
+       compile(compiler);
 }
 
 void Module::load_source(IO::Base &io, const string &name)
@@ -33,5 +29,17 @@ void Module::load_source(IO::Base &io, const string &name)
        load_source(io, 0, name);
 }
 
+void Module::compile(SL::Compiler &compiler)
+{
+       compiler.compile(SL::Compiler::MODULE);
+       prepared_source = compiler.get_combined_glsl();
+       source_map = compiler.get_source_map();
+#ifdef DEBUG
+       string diagnostics = compiler.get_diagnostics();
+       if(!diagnostics.empty())
+               IO::print("Module diagnostics:\n%s\n", diagnostics);
+#endif
+}
+
 } // namespace GL
 } // namespace Msp
index b1c0f8abebda67ac56742507277bae9ccb92af22..f65f739aeb1e2de9a6a8a640b473a9312655dc3d 100644 (file)
@@ -3,6 +3,7 @@
 
 #include <string>
 #include <msp/io/base.h>
+#include "glsl/compiler.h"
 #include "glsl/sourcemap.h"
 
 namespace Msp {
@@ -22,7 +23,10 @@ public:
        void set_source(const std::string &);
        void load_source(IO::Base &, Resources *, const std::string &);
        void load_source(IO::Base &, const std::string &);
+private:
+       void compile(SL::Compiler &);
 
+public:
        const std::string &get_prepared_source() const { return prepared_source; }
        const SL::SourceMap &get_source_map() const { return source_map; }
 };
index 9ef5d6d7eebbf4eef2173b0b33abaec28379c37e..fa9a5dede737654e68ec006dd30a2d41667f4e78 100644 (file)
@@ -86,6 +86,11 @@ void Program::add_stages(const Module &mod, const map<string, int> &spec_values)
        compiler.set_source(module->get_prepared_source(), "<module>");
        compiler.specialize(spec_values);
        compiler.compile(SL::Compiler::PROGRAM);
+#ifdef DEBUG
+       string diagnostics = compiler.get_diagnostics();
+       if(!diagnostics.empty())
+               IO::print("Program diagnostics:\n%s\n", diagnostics);
+#endif
 
        vector<SL::Stage::Type> stages = compiler.get_stages();
        for(vector<SL::Stage::Type>::const_iterator i=stages.begin(); i!=stages.end(); ++i)
index 4a166ba6d640d0fad01eb8b51c6eff19b2e12a57..24df1f2bbc28f48721542843a321ee814340dd16 100644 (file)
@@ -85,6 +85,9 @@ int GlslCompiler::main()
                try
                {
                        compiler.compile(GL::SL::Compiler::PROGRAM);
+                       string diag = compiler.get_diagnostics();
+                       if(!diag.empty())
+                               IO::print("Diagnostic messages from compiler:\n%s\n", diag);
                }
                catch(const GL::SL::invalid_shader_source &exc)
                {