]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/program.cpp
Build the list of glUniform* calls even for SPIR-V modules
[libs/gl.git] / source / core / program.cpp
index 4707f4c0416e2be185441efebe847e65ed49fd7a..9193cd7be155b54a4f8b1fc8a87de974cc3d72b4 100644 (file)
@@ -17,6 +17,8 @@ void Program::add_stages(const Module &mod, const map<string, int> &spec_values)
        if(has_stages())
                throw invalid_operation("Program::add_stages");
 
+       reflect_data = ReflectData();
+
        TransientData transient;
        switch(mod.get_format())
        {
@@ -30,22 +32,16 @@ void Program::add_stages(const Module &mod, const map<string, int> &spec_values)
                throw invalid_argument("Program::add_stages");
        }
 
-       reflect_data = ReflectData();
-
-       finalize(mod);
+       finalize(mod, transient);
 
-       if(mod.get_format()==Module::GLSL)
-       {
-               query_uniforms();
-               query_attributes();
-               apply_bindings(transient);
-       }
-       else if(mod.get_format()==Module::SPIR_V)
+       if(mod.get_format()==Module::SPIR_V)
        {
                collect_uniforms(static_cast<const SpirVModule &>(mod), transient.spec_values);
                collect_attributes(static_cast<const SpirVModule &>(mod));
        }
 
+       finalize_uniforms();
+
        for(ReflectData::UniformBlockInfo &b: reflect_data.uniform_blocks)
                if(!b.data_size && !b.uniforms.empty())
                {