X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Fmodule.cpp;h=4eefc0347494ecadb077e8b0bc8a984688b08464;hb=5cbd8664a7300d0c0076862572adeda9955b1c97;hp=099e8b7fa988c427def61bddaf77ae08f5916978;hpb=4b05add0a40cc7503b9dc7ff3b15844b02f51e16;p=libs%2Fgl.git diff --git a/source/core/module.cpp b/source/core/module.cpp index 099e8b7f..4eefc034 100644 --- a/source/core/module.cpp +++ b/source/core/module.cpp @@ -1,6 +1,6 @@ #include #include -#include "deviceinfo.h" +#include "device.h" #include "module.h" #include "resources.h" @@ -50,14 +50,14 @@ namespace GL { void Module::set_source(const string &src) { - SL::Compiler compiler(DeviceInfo::get_global().glsl_features); + 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(DeviceInfo::get_global().glsl_features); + SL::Compiler compiler(create_features()); compiler.load_source(io, res, name); compile(compiler); } @@ -67,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) { @@ -82,41 +96,6 @@ void GlslModule::compile(SL::Compiler &compiler) } -SpirVModule::SpirVModule(const SpirVModule &other): - code(other.code), - entry_points(other.entry_points), - structs(other.structs), - variables(other.variables) -{ - remap_pointers_from(other); -} - -SpirVModule &SpirVModule::operator=(const SpirVModule &other) -{ - code = other.code; - entry_points = other.entry_points; - structs = other.structs; - variables = other.variables; - remap_pointers_from(other); - return *this; -} - -void SpirVModule::remap_pointers_from(const SpirVModule &other) -{ - for(EntryPoint &e: entry_points) - for(const Variable *&v: e.globals) - v = &variables[v-&other.variables.front()]; - - for(Variable &v: variables) - if(v.struct_type) - v.struct_type = &structs[v.struct_type-&other.structs.front()]; - - for(Structure &s: structs) - for(StructMember &m: s.members) - if(m.struct_type) - m.struct_type = &structs[m.struct_type-&other.structs.front()]; -} - void SpirVModule::load_code(IO::Base &io) { uint32_t buffer[1024];