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
22class 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
68functions = {
69    # OpenGL 3.1 / GL_ARB_texture_buffer_object.  Mesa only exposes this
70    # extension with core profile.
71    "TexBuffer": exec_info(core=31, es2=31),
72
73    # OpenGL 3.2 / GL_OES_geometry_shader.
74    "FramebufferTexture": exec_info(core=32, es2=31),
75
76    # OpenGL 4.0 / GL_ARB_shader_subroutines. Mesa only exposes this
77    # extension with core profile.
78    "GetSubroutineUniformLocation": exec_info(core=31),
79    "GetSubroutineIndex": exec_info(core=31),
80    "GetActiveSubroutineUniformiv": exec_info(core=31),
81    "GetActiveSubroutineUniformName": exec_info(core=31),
82    "GetActiveSubroutineName": exec_info(core=31),
83    "UniformSubroutinesuiv": exec_info(core=31),
84    "GetUniformSubroutineuiv": exec_info(core=31),
85    "GetProgramStageiv": exec_info(core=31),
86
87    # OpenGL 4.0 / GL_ARB_gpu_shader_fp64.  The extension spec says:
88    #
89    #     "OpenGL 3.2 and GLSL 1.50 are required."
90    "Uniform1d": exec_info(core=32),
91    "Uniform2d": exec_info(core=32),
92    "Uniform3d": exec_info(core=32),
93    "Uniform4d": exec_info(core=32),
94    "Uniform1dv": exec_info(core=32),
95    "Uniform2dv": exec_info(core=32),
96    "Uniform3dv": exec_info(core=32),
97    "Uniform4dv": exec_info(core=32),
98    "UniformMatrix2dv": exec_info(core=32),
99    "UniformMatrix3dv": exec_info(core=32),
100    "UniformMatrix4dv": exec_info(core=32),
101    "UniformMatrix2x3dv": exec_info(core=32),
102    "UniformMatrix2x4dv": exec_info(core=32),
103    "UniformMatrix3x2dv": exec_info(core=32),
104    "UniformMatrix3x4dv": exec_info(core=32),
105    "UniformMatrix4x2dv": exec_info(core=32),
106    "UniformMatrix4x3dv": exec_info(core=32),
107    "GetUniformdv": exec_info(core=32),
108
109    # OpenGL 4.1 / GL_ARB_vertex_attrib_64bit.  The extension spec says:
110    #
111    #     "OpenGL 3.0 and GLSL 1.30 are required.
112    #
113    #     ARB_gpu_shader_fp64 (or equivalent functionality) is required."
114    #
115    # For Mesa this effectively means OpenGL 3.2 is required.  It seems
116    # unlikely that Mesa will ever get support for any of the NV extensions
117    # that add "equivalent functionality."
118    "VertexAttribL1d": exec_info(core=32),
119    "VertexAttribL2d": exec_info(core=32),
120    "VertexAttribL3d": exec_info(core=32),
121    "VertexAttribL4d": exec_info(core=32),
122    "VertexAttribL1dv": exec_info(core=32),
123    "VertexAttribL2dv": exec_info(core=32),
124    "VertexAttribL3dv": exec_info(core=32),
125    "VertexAttribL4dv": exec_info(core=32),
126    "VertexAttribLPointer": exec_info(core=32),
127    "GetVertexAttribLdv": exec_info(core=32),
128
129    # OpenGL 4.1 / GL_ARB_viewport_array.  The extension spec says:
130    #
131    #     "OpenGL 3.2 or the EXT_geometry_shader4 or ARB_geometry_shader4
132    #     extensions are required."
133    #
134    # Mesa does not support either of the geometry shader extensions, so
135    # OpenGL 3.2 is required.
136    "ViewportArrayv": exec_info(core=32, es2=31),
137    "ViewportIndexedf": exec_info(core=32, es2=31),
138    "ViewportIndexedfv": exec_info(core=32, es2=31),
139    "ScissorArrayv": exec_info(core=32, es2=31),
140    "ScissorIndexed": exec_info(core=32, es2=31),
141    "ScissorIndexedv": exec_info(core=32, es2=31),
142    "DepthRangeArrayv": exec_info(core=32),
143    "DepthRangeIndexed": exec_info(core=32),
144    # GetFloati_v also GL_ARB_shader_atomic_counters
145    # GetDoublei_v also GL_ARB_shader_atomic_counters
146
147    # OpenGL 4.3 / GL_ARB_texture_buffer_range.  Mesa can expose the extension
148    # with OpenGL 3.1.
149    "TexBufferRange": exec_info(core=31, es2=31),
150
151    # OpenGL 4.3 / GL_ARB_framebuffer_no_attachments.  Mesa can expose the
152    # extension with OpenGL 3.0.
153    "FramebufferParameteri": exec_info(compatibility=30, core=31, es2=31),
154    "GetFramebufferParameteri": exec_info(compatibility=30, core=31, es2=31),
155
156    # OpenGL 4.5 / GL_ARB_direct_state_access.   Mesa can expose the extension
157    # with core profile.
158    "CreateTransformFeedbacks": exec_info(core=31),
159    "TransformFeedbackBufferBase": exec_info(core=31),
160    "TransformFeedbackBufferRange": exec_info(core=31),
161    "GetTransformFeedbackiv": exec_info(core=31),
162    "GetTransformFeedbacki_v": exec_info(core=31),
163    "GetTransformFeedbacki64_v": exec_info(core=31),
164    "CreateBuffers": exec_info(core=31),
165    "NamedBufferStorage": exec_info(core=31),
166    "NamedBufferData": exec_info(core=31),
167    "NamedBufferSubData": exec_info(core=31),
168    "CopyNamedBufferSubData": exec_info(core=31),
169    "ClearNamedBufferData": exec_info(core=31),
170    "ClearNamedBufferSubData": exec_info(core=31),
171    "MapNamedBuffer": exec_info(core=31),
172    "MapNamedBufferRange": exec_info(core=31),
173    "UnmapNamedBuffer": exec_info(core=31),
174    "FlushMappedNamedBufferRange": exec_info(core=31),
175    "GetNamedBufferParameteriv": exec_info(core=31),
176    "GetNamedBufferParameteri64v": exec_info(core=31),
177    "GetNamedBufferPointerv": exec_info(core=31),
178    "GetNamedBufferSubData": exec_info(core=31),
179    "CreateFramebuffers": exec_info(core=31),
180    "NamedFramebufferRenderbuffer": exec_info(core=31),
181    "NamedFramebufferParameteri": exec_info(core=31),
182    "NamedFramebufferTexture": exec_info(core=31),
183    "NamedFramebufferTextureLayer": exec_info(core=31),
184    "NamedFramebufferDrawBuffer": exec_info(core=31),
185    "NamedFramebufferDrawBuffers": exec_info(core=31),
186    "NamedFramebufferReadBuffer": exec_info(core=31),
187    "InvalidateNamedFramebufferData": exec_info(core=31),
188    "InvalidateNamedFramebufferSubData": exec_info(core=31),
189    "ClearNamedFramebufferiv": exec_info(core=31),
190    "ClearNamedFramebufferuiv": exec_info(core=31),
191    "ClearNamedFramebufferfv": exec_info(core=31),
192    "ClearNamedFramebufferfi": exec_info(core=31),
193    "BlitNamedFramebuffer": exec_info(core=31),
194    "CheckNamedFramebufferStatus": exec_info(core=31),
195    "GetNamedFramebufferParameteriv": exec_info(core=31),
196    "GetNamedFramebufferAttachmentParameteriv": exec_info(core=31),
197    "CreateRenderbuffers": exec_info(core=31),
198    "NamedRenderbufferStorage": exec_info(core=31),
199    "NamedRenderbufferStorageMultisample": exec_info(core=31),
200    "GetNamedRenderbufferParameteriv": exec_info(core=31),
201    "CreateTextures": exec_info(core=31),
202    "TextureBuffer": exec_info(core=31),
203    "TextureBufferRange": exec_info(core=31),
204    "TextureStorage1D": exec_info(core=31),
205    "TextureStorage2D": exec_info(core=31),
206    "TextureStorage3D": exec_info(core=31),
207    "TextureStorage2DMultisample": exec_info(core=31),
208    "TextureStorage3DMultisample": exec_info(core=31),
209    "TextureSubImage1D": exec_info(core=31),
210    "TextureSubImage2D": exec_info(core=31),
211    "TextureSubImage3D": exec_info(core=31),
212    "CompressedTextureSubImage1D": exec_info(core=31),
213    "CompressedTextureSubImage2D": exec_info(core=31),
214    "CompressedTextureSubImage3D": exec_info(core=31),
215    "CopyTextureSubImage1D": exec_info(core=31),
216    "CopyTextureSubImage2D": exec_info(core=31),
217    "CopyTextureSubImage3D": exec_info(core=31),
218    "TextureParameterf": exec_info(core=31),
219    "TextureParameterfv": exec_info(core=31),
220    "TextureParameteri": exec_info(core=31),
221    "TextureParameterIiv": exec_info(core=31),
222    "TextureParameterIuiv": exec_info(core=31),
223    "TextureParameteriv": exec_info(core=31),
224    "GenerateTextureMipmap": exec_info(core=31),
225    "BindTextureUnit": exec_info(core=31),
226    "GetTextureImage": exec_info(core=31),
227    "GetCompressedTextureImage": exec_info(core=31),
228    "GetTextureLevelParameterfv": exec_info(core=31),
229    "GetTextureLevelParameteriv": exec_info(core=31),
230    "GetTextureParameterfv": exec_info(core=31),
231    "GetTextureParameterIiv": exec_info(core=31),
232    "GetTextureParameterIuiv": exec_info(core=31),
233    "GetTextureParameteriv": exec_info(core=31),
234    "CreateVertexArrays": exec_info(core=31),
235    "DisableVertexArrayAttrib": exec_info(core=31),
236    "EnableVertexArrayAttrib": exec_info(core=31),
237    "VertexArrayElementBuffer": exec_info(core=31),
238    "VertexArrayVertexBuffer": exec_info(core=31),
239    "VertexArrayVertexBuffers": exec_info(core=31),
240    "VertexArrayAttribFormat": exec_info(core=31),
241    "VertexArrayAttribIFormat": exec_info(core=31),
242    "VertexArrayAttribLFormat": exec_info(core=31),
243    "VertexArrayAttribBinding": exec_info(core=31),
244    "VertexArrayBindingDivisor": exec_info(core=31),
245    "GetVertexArrayiv": exec_info(core=31),
246    "GetVertexArrayIndexediv": exec_info(core=31),
247    "GetVertexArrayIndexed64iv": exec_info(core=31),
248    "CreateSamplers": exec_info(core=31),
249    "CreateProgramPipelines": exec_info(core=31),
250    "CreateQueries": exec_info(core=31),
251    "GetQueryBufferObjectiv": exec_info(core=31),
252    "GetQueryBufferObjectuiv": exec_info(core=31),
253    "GetQueryBufferObjecti64v": exec_info(core=31),
254    "GetQueryBufferObjectui64v": exec_info(core=31),
255}
256