]> git.tdb.fi Git - libs/gl.git/commitdiff
Better way to request features for different GLSL versions
authorMikko Rasa <tdb@tdb.fi>
Sat, 3 Apr 2021 16:53:55 +0000 (19:53 +0300)
committerMikko Rasa <tdb@tdb.fi>
Sat, 3 Apr 2021 18:30:10 +0000 (21:30 +0300)
source/glsl/features.cpp
source/glsl/features.h
tests/glsl/glslcompiler.cpp
tools/glslcompiler.cpp

index 73c95b0fd3cf9248c1499c4e9c129382eb4b9912..0b5b438b6b1acffc21649742eed47b9f22e57ce7 100644 (file)
@@ -46,22 +46,31 @@ Features Features::from_context()
        return features;
 }
 
-Features Features::all()
+Features Features::from_version(const Version &ver)
 {
        Features features;
        features.gl_api = OPENGL;
-       features.glsl_version = Version(4, 60);
-       features.arb_enhanced_layouts = true;
-       features.arb_explicit_attrib_location = true;
-       features.arb_explicit_uniform_location = true;
-       features.arb_gpu_shader5 = true;
-       features.arb_separate_shader_objects = true;
-       features.arb_uniform_buffer_object = true;
-       features.ext_gpu_shader4 = true;
-       features.ext_texture_array = true;
+       features.glsl_version = ver;
+       features.arb_enhanced_layouts = (ver>=Version(4, 40));
+       features.arb_explicit_attrib_location = (ver>=Version(1, 30));
+       features.arb_explicit_uniform_location = (ver>=Version(4, 30));
+       features.arb_gpu_shader5 = (ver>=Version(4, 0));
+       features.arb_separate_shader_objects = (ver>=Version(4, 10));
+       features.arb_uniform_buffer_object = (ver>=Version(1, 50));
+       features.ext_gpu_shader4 = (ver>=Version(1, 20));
+       features.ext_texture_array = (ver>=Version(1, 30));
+       features.uniform_binding_range = (ver>=Version(4, 30) ? 84 : ver>=Version(4, 0) ? 60 :
+               ver>=Version(3, 30) ? 36 : 24);
+       features.texture_binding_range = (ver>=Version(4, 30) ? 96 : ver>=Version(4, 0) ? 80 :
+               ver>=Version(1, 50) ? 48 : ver>=Version(1, 40) ? 32 : 16);
        return features;
 }
 
+Features Features::latest()
+{
+       return from_version(Version(4, 60));
+}
+
 } // namespace SL
 } // namespace GL
 } // namespace Msp
index 31825c028e47f7400cba36b7c1a9eb19690c9215..f8be0131462d1aded0bc16dc29b857e9a6131d92 100644 (file)
@@ -26,7 +26,8 @@ struct Features
        Features();
 
        static Features from_context();
-       static Features all();
+       static Features from_version(const Version &);
+       static Features latest();
 };
 
 } // namespace SL
index 371df6cc48f0fd1d738681627b4b7399e996c2ba..8d3fe532c2eb818a6e0123c8505e0a0545064c8f 100644 (file)
@@ -228,7 +228,7 @@ GlslCompilerTest::GlslCompilerTest()
 
 void GlslCompilerTest::run_test_case(const TestCase *test_case)
 {
-       GL::SL::Compiler compiler(GL::SL::Features::all());
+       GL::SL::Compiler compiler(GL::SL::Features::latest());
        try
        {
                compiler.set_source(test_case->source, "<test>");
@@ -283,13 +283,13 @@ GlslCompilerIdempotence::GlslCompilerIdempotence()
 
 void GlslCompilerIdempotence::run_test_case(const TestCase *test_case)
 {
-       GL::SL::Compiler compiler(GL::SL::Features::all());
+       GL::SL::Compiler compiler(GL::SL::Features::latest());
        compiler.set_source(test_case->source, "<test>");
        if(test_case->compile_mode==GL::SL::Compiler::PROGRAM)
                compiler.specialize(test_case->spec_values);
        compiler.compile(test_case->compile_mode);
 
-       GL::SL::Compiler compiler2(GL::SL::Features::all());
+       GL::SL::Compiler compiler2(GL::SL::Features::latest());
        compiler2.set_source(compiler.get_combined_glsl(), "<loopback>");
        compiler2.compile(test_case->compile_mode);
 
index 5d8362d4289a6f9f1bdd5c78eb2b64c3704a64db..c6fe8bcd6673032424cc2c93e80f7b777be557bc 100644 (file)
@@ -83,7 +83,7 @@ GlslCompiler::GlslCompiler(int argc, char **argv):
 
 int GlslCompiler::main()
 {
-       GL::SL::Compiler compiler(GL::SL::Features::all());
+       GL::SL::Compiler compiler(GL::SL::Features::latest());
        IO::File file(source_fn);
        compiler.load_source(file, source_fn);
        if(compile_mode==GL::SL::Compiler::PROGRAM)