glapi: Store exec table version info outside the XML
[mesa.git] / src / mapi / glapi / gen / apiexec.py
1 # Copyright (C) 2015 Intel Corporation
2 #
3 # Permission is hereby granted, free of charge, to any person obtaining a
4 # copy of this software and associated documentation files (the "Software"),
5 # to deal in the Software without restriction, including without limitation
6 # the rights to use, copy, modify, merge, publish, distribute, sublicense,
7 # and/or sell copies of the Software, and to permit persons to whom the
8 # Software is furnished to do so, subject to the following conditions:
9 #
10 # The above copyright notice and this permission notice (including the next
11 # paragraph) shall be included in all copies or substantial portions of the
12 # Software.
13 #
14 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19 # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
20 # IN THE SOFTWARE.
21
22 class exec_info():
23 """Information relating GL APIs to a function.
24
25 Each of the four attributes of this class, compatibility, core, es1, and
26 es2, specify the minimum API version where a function can possibly exist
27 in Mesa. The version is specified as an integer of (real GL version *
28 10). For example, glCreateProgram was added in OpenGL 2.0, so
29 compatibility=20 and core=31.
30
31 If the attribute is None, then it cannot be supported by that
32 API. For example, glNewList was removed from core profiles, so
33 compatibility=10 and core=None.
34
35 Each of the attributes that is not None must have a valid value. The
36 valid ranges are:
37
38 compatiblity: [10, 30]
39 core: [31, )
40 es1: [10, 11]
41 es2: [20, )
42
43 These ranges are enforced by the constructor.
44 """
45 def __init__(self, compatibility=None, core=None, es1=None, es2=None):
46 if compatibility is not None:
47 assert isinstance(compatibility, int)
48 assert compatibility >= 10
49 assert compatibility <= 30
50
51 if core is not None:
52 assert isinstance(core, int)
53 assert core >= 31
54
55 if es1 is not None:
56 assert isinstance(es1, int)
57 assert es1 == 10 or es1 == 11
58
59 if es2 is not None:
60 assert isinstance(es2, int)
61 assert es2 >= 20
62
63 self.compatibility = compatibility
64 self.core = core
65 self.es1 = es1
66 self.es2 = es2
67
68 functions = {
69 # OpenGL 3.1 / GL_ARB_texture_buffer_object. Mesa only exposes this
70 # extension with core profile.
71 "TexBuffer": exec_info(core=31),
72
73 # OpenGL 3.2 / GL_ARB_geometry_shader4. Mesa does not support
74 # GL_ARB_geometry_shader4, so OpenGL 3.2 is required.
75 "FramebufferTexture": exec_info(core=32),
76
77 # OpenGL 4.0 / GL_ARB_gpu_shader_fp64. The extension spec says:
78 #
79 # "OpenGL 3.2 and GLSL 1.50 are required."
80 "Uniform1d": exec_info(core=32),
81 "Uniform2d": exec_info(core=32),
82 "Uniform3d": exec_info(core=32),
83 "Uniform4d": exec_info(core=32),
84 "Uniform1dv": exec_info(core=32),
85 "Uniform2dv": exec_info(core=32),
86 "Uniform3dv": exec_info(core=32),
87 "Uniform4dv": exec_info(core=32),
88 "UniformMatrix2dv": exec_info(core=32),
89 "UniformMatrix3dv": exec_info(core=32),
90 "UniformMatrix4dv": exec_info(core=32),
91 "UniformMatrix2x3dv": exec_info(core=32),
92 "UniformMatrix2x4dv": exec_info(core=32),
93 "UniformMatrix3x2dv": exec_info(core=32),
94 "UniformMatrix3x4dv": exec_info(core=32),
95 "UniformMatrix4x2dv": exec_info(core=32),
96 "UniformMatrix4x3dv": exec_info(core=32),
97 "GetUniformdv": exec_info(core=32),
98
99 # OpenGL 4.1 / GL_ARB_vertex_attrib_64bit. The extension spec says:
100 #
101 # "OpenGL 3.0 and GLSL 1.30 are required.
102 #
103 # ARB_gpu_shader_fp64 (or equivalent functionality) is required."
104 #
105 # For Mesa this effectively means OpenGL 3.2 is required. It seems
106 # unlikely that Mesa will ever get support for any of the NV extensions
107 # that add "equivalent functionality."
108 "VertexAttribL1d": exec_info(core=32),
109 "VertexAttribL2d": exec_info(core=32),
110 "VertexAttribL3d": exec_info(core=32),
111 "VertexAttribL4d": exec_info(core=32),
112 "VertexAttribL1dv": exec_info(core=32),
113 "VertexAttribL2dv": exec_info(core=32),
114 "VertexAttribL3dv": exec_info(core=32),
115 "VertexAttribL4dv": exec_info(core=32),
116 "VertexAttribLPointer": exec_info(core=32),
117 "GetVertexAttribLdv": exec_info(core=32),
118
119 # OpenGL 4.1 / GL_ARB_viewport_array. The extension spec says:
120 #
121 # "OpenGL 3.2 or the EXT_geometry_shader4 or ARB_geometry_shader4
122 # extensions are required."
123 #
124 # Mesa does not support either of the geometry shader extensions, so
125 # OpenGL 3.2 is required.
126 "ViewportArrayv": exec_info(core=32),
127 "ViewportIndexedf": exec_info(core=32),
128 "ViewportIndexedfv": exec_info(core=32),
129 "ScissorArrayv": exec_info(core=32),
130 "ScissorIndexed": exec_info(core=32),
131 "ScissorIndexedv": exec_info(core=32),
132 "DepthRangeArrayv": exec_info(core=32),
133 "DepthRangeIndexed": exec_info(core=32),
134 # GetFloati_v also GL_ARB_shader_atomic_counters
135 # GetDoublei_v also GL_ARB_shader_atomic_counters
136
137 # OpenGL 4.3 / GL_ARB_texture_buffer_range. Mesa can expose the extension
138 # with OpenGL 3.1.
139 "TexBufferRange": exec_info(core=31),
140 }