X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fcore%2Fmodule.cpp;h=15bd750cf0b299bd7ea8440ed6d0be5adc3788d1;hp=b542f77e9c6ebcee0638b69fd76c94aff9ad3998;hb=d16d28d2ccf7c6255204f02975834f713ff1df08;hpb=959efbf61663efd7879070ce0447e02c8a447ce0 diff --git a/source/core/module.cpp b/source/core/module.cpp index b542f77e..15bd750c 100644 --- a/source/core/module.cpp +++ b/source/core/module.cpp @@ -1,5 +1,6 @@ #include #include +#include "device.h" #include "module.h" #include "resources.h" @@ -49,14 +50,14 @@ namespace GL { void Module::set_source(const string &src) { - SL::Compiler compiler; + SL::Compiler compiler(create_features()); compiler.set_source(src); compile(compiler); } void Module::load_source(IO::Base &io, Resources *res, const string &name) { - SL::Compiler compiler; + SL::Compiler compiler(create_features()); compiler.load_source(io, res, name); compile(compiler); } @@ -66,6 +67,20 @@ void Module::load_source(IO::Base &io, const string &name) load_source(io, 0, name); } +SL::Features Module::create_features() const +{ + const DeviceInfo &dev_info = Device::get_current().get_info(); + const SL::Features &device_features = dev_info.glsl_features; + SL::Features latest_features = SL::Features::latest(dev_info.api); + SL::Features features; + features.target_api = latest_features.target_api; + features.glsl_version = latest_features.glsl_version; + features.constant_id_range = device_features.constant_id_range; + features.uniform_binding_range = device_features.uniform_binding_range; + features.texture_binding_range = device_features.texture_binding_range; + return features; +} + void GlslModule::compile(SL::Compiler &compiler) { @@ -191,7 +206,10 @@ void SpirVModule::reflect() last_member = lm; } - s.size = last_offset+get_type_size(last_member->type); + unsigned last_size = get_type_size(last_member->type); + if(last_member->array_size) + last_size += last_member->array_stride*(last_member->array_size-1); + s.size = last_offset+last_size; s.size = (s.size+15)&~15; }