From 26602194c7831bb81b42138c4ee1564be9878342 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Mon, 8 Nov 2021 22:18:38 +0200 Subject: [PATCH] Use specially created features when compiling modules from GLSL Set the latest version so all language features are retained, but limit bindings to what the implementation actually supports. --- source/core/module.cpp | 17 +++++++++++++++-- source/core/module.h | 2 ++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/source/core/module.cpp b/source/core/module.cpp index 099e8b7f..89d41894 100644 --- a/source/core/module.cpp +++ b/source/core/module.cpp @@ -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,19 @@ void Module::load_source(IO::Base &io, const string &name) load_source(io, 0, name); } +SL::Features Module::create_features() const +{ + const SL::Features &device_features = DeviceInfo::get_global().glsl_features; + SL::Features latest_features = SL::Features::latest(get_backend_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) { diff --git a/source/core/module.h b/source/core/module.h index a480b613..16e07053 100644 --- a/source/core/module.h +++ b/source/core/module.h @@ -58,6 +58,8 @@ public: private: virtual void compile(SL::Compiler &) = 0; + + SL::Features create_features() const; }; /** -- 2.43.0