X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbackends%2Fopengl%2Fprogram_backend.cpp;h=32c6d6e137c36e4789b47ccb2b381a7823396be2;hb=4b05add0a40cc7503b9dc7ff3b15844b02f51e16;hp=911ce34e69fbf591ccd1950adea30ed91d6fda83;hpb=2e6e6fd559010aad6ae0d44c433e32acb387e8b9;p=libs%2Fgl.git diff --git a/source/backends/opengl/program_backend.cpp b/source/backends/opengl/program_backend.cpp index 911ce34e..32c6d6e1 100644 --- a/source/backends/opengl/program_backend.cpp +++ b/source/backends/opengl/program_backend.cpp @@ -12,6 +12,7 @@ #include #include #include +#include "deviceinfo.h" #include "error.h" #include "program.h" #include "program_backend.h" @@ -89,7 +90,7 @@ unsigned OpenGLProgram::add_stage(Stage type) void OpenGLProgram::add_glsl_stages(const GlslModule &mod, const map &spec_values, TransientData &transient) { - SL::Compiler compiler; + SL::Compiler compiler(DeviceInfo::get_global().glsl_features); compiler.set_source(mod.get_prepared_source(), ""); compiler.specialize(spec_values); compiler.compile(SL::Compiler::PROGRAM); @@ -162,7 +163,7 @@ void OpenGLProgram::compile_glsl_stage(const GlslModule &mod, unsigned stage_id) #endif } -void OpenGLProgram::add_spirv_stages(const SpirVModule &mod, const map &spec_values, TransientData &transient) +void OpenGLProgram::add_spirv_stages(const SpirVModule &mod, const map &spec_values) { static Require _req(ARB_gl_spirv); static Require _req2(ARB_ES2_compatibility); @@ -201,7 +202,6 @@ void OpenGLProgram::add_spirv_stages(const SpirVModule &mod, const mapsecond); - transient.spec_values[c.constant_id] = i->second; } } @@ -493,6 +493,12 @@ void OpenGLProgram::finalize_uniforms() if(func) uniform_calls.push_back(UniformCall(u->location, u->array_size, func)); } + + if(i->data_size<=0) + { + const ReflectData::UniformInfo &last = *i->uniforms.back(); + i->data_size = last.location*16+last.array_size*get_type_size(last.type); + } } }