]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/compiler.cpp
Add a SPIR-V backend to the GLSL compiler
[libs/gl.git] / source / glsl / compiler.cpp
index b2c4f9ba2cbed88dee8b4e70f00d8a6c4afb5739..74eec856d86a154561669ab9a1745793236e945e 100644 (file)
@@ -12,6 +12,7 @@
 #include "output.h"
 #include "resolve.h"
 #include "resources.h"
+#include "spirv.h"
 #include "validate.h"
 
 #undef interface
@@ -156,6 +157,15 @@ string Compiler::get_stage_glsl(Stage::Type stage_type) const
        throw key_error(Stage::get_stage_name(stage_type));
 }
 
+vector<UInt32> Compiler::get_combined_spirv() const
+{
+       if(!compiled)
+               throw invalid_operation("Compiler::get_combined_spirv");
+       SpirVGenerator gen;
+       gen.apply(*module);
+       return gen.get_code();
+}
+
 const map<string, unsigned> &Compiler::get_vertex_attributes() const
 {
        if(!compiled)
@@ -392,6 +402,8 @@ void Compiler::finalize(Stage &stage, Mode mode)
                resolve(stage, RESOLVE_VARIABLES|RESOLVE_FUNCTIONS);
                PrecisionConverter().apply(stage);
        }
+       else if(mode==SPIRV)
+               StructOrganizer().apply(stage);
 
        // Collect bindings from all stages into the shared stage's maps
        module->shared.texture_bindings.insert(stage.texture_bindings.begin(), stage.texture_bindings.end());