]> git.tdb.fi Git - libs/gl.git/blob - source/glsl/features.cpp
Remove Vulkan checks from feature converters
[libs/gl.git] / source / glsl / features.cpp
1 #include <stdexcept>
2 #include "features.h"
3
4 using namespace std;
5
6 namespace Msp {
7 namespace GL {
8 namespace SL {
9
10 Features Features::from_api_version(GraphicsApi api, const Version &ver)
11 {
12         Features features;
13         features.target_api = api;
14         features.glsl_version = ver;
15         switch(api)
16         {
17         case OPENGL:
18                 if(ver.major==2)
19                         features.glsl_version = Version(1, (ver.minor+1)*10);
20                 else if(ver.major==3 && ver.minor<3)
21                         features.glsl_version = Version(1, (ver.minor+3)*10);
22                 else
23                         features.glsl_version = Version(ver.major, ver.minor*10);
24
25                 features.arb_enhanced_layouts = (ver>=Version(4, 4));
26                 features.arb_explicit_attrib_location = (ver>=Version(3, 3));
27                 features.arb_explicit_uniform_location = (ver>=Version(4, 3));
28                 features.arb_gpu_shader5 = (ver>=Version(4, 0));
29                 features.arb_separate_shader_objects = (ver>=Version(4, 1));
30                 features.arb_uniform_buffer_object = (ver>=Version(3, 2));
31                 features.ext_gpu_shader4 = (ver>=Version(2, 1));
32                 features.ext_texture_array = (ver>=Version(3, 0));
33                 features.uniform_binding_range = (ver>=Version(4, 3) ? 84 : ver>=Version(4, 0) ? 60 :
34                         ver>=Version(3, 3) ? 36 : 24);
35                 features.texture_binding_range = (ver>=Version(4, 3) ? 96 : ver>=Version(4, 0) ? 80 :
36                         ver>=Version(3, 2) ? 48 : ver>=Version(1, 4) ? 32 : 16);
37                 break;
38         case OPENGL_ES:
39                 if(ver.major==2)
40                         features.glsl_version = Version(1, 0);
41                 else
42                         features.glsl_version = Version(ver.major, ver.minor*10);
43
44                 features.arb_enhanced_layouts = (ver>=Version(3, 2));
45                 features.arb_explicit_attrib_location = (ver>=Version(3, 0));
46                 features.arb_explicit_uniform_location = (ver>=Version(3, 1));
47                 features.arb_gpu_shader5 = (ver>=Version(3, 2));
48                 features.arb_separate_shader_objects = (ver>=Version(3, 1));
49                 features.arb_uniform_buffer_object = (ver>=Version(3, 0));
50                 features.ext_gpu_shader4 = (ver>=Version(3, 0));
51                 features.ext_texture_array = (ver>=Version(3, 0));
52                 features.uniform_binding_range = (ver>=Version(3, 2) ? 72 : ver>=Version(3, 1) ? 36 : 24);
53                 features.texture_binding_range = (ver>=Version(3, 2) ? 96 : ver>=Version(3, 1) ? 48 :
54                         ver>=Version(3, 0) ? 32 : 8);
55                 break;
56         case VULKAN:
57                 features.glsl_version = Version(4, 60);
58                 features.uniform_binding_range = 72;
59                 features.texture_binding_range = 96;
60                 break;
61         default:
62                 throw invalid_argument("Features::from_api_version");
63         }
64         return features;
65 }
66
67 Features Features::latest(GraphicsApi api)
68 {
69         switch(api)
70         {
71         case OPENGL:
72                 return from_api_version(api, Version(4, 6));
73         case OPENGL_ES:
74                 return from_api_version(api, Version(3, 2));
75         case VULKAN:
76                 return from_api_version(api, Version(1, 2));
77         default:
78                 throw invalid_argument("Features::latest");
79         }
80 }
81
82 } // namespace SL
83 } // namespace GL
84 } // namespace Msp