101e04c3fSmrg# Copyright (C) 2015 Intel Corporation
201e04c3fSmrg#
301e04c3fSmrg# Permission is hereby granted, free of charge, to any person obtaining a
401e04c3fSmrg# copy of this software and associated documentation files (the "Software"),
501e04c3fSmrg# to deal in the Software without restriction, including without limitation
601e04c3fSmrg# the rights to use, copy, modify, merge, publish, distribute, sublicense,
701e04c3fSmrg# and/or sell copies of the Software, and to permit persons to whom the
801e04c3fSmrg# Software is furnished to do so, subject to the following conditions:
901e04c3fSmrg#
1001e04c3fSmrg# The above copyright notice and this permission notice (including the next
1101e04c3fSmrg# paragraph) shall be included in all copies or substantial portions of the
1201e04c3fSmrg# Software.
1301e04c3fSmrg#
1401e04c3fSmrg# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1501e04c3fSmrg# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1601e04c3fSmrg# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
1701e04c3fSmrg# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1801e04c3fSmrg# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
1901e04c3fSmrg# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
2001e04c3fSmrg# IN THE SOFTWARE.
2101e04c3fSmrg
2201e04c3fSmrgclass exec_info():
2301e04c3fSmrg    """Information relating GL APIs to a function.
2401e04c3fSmrg
2501e04c3fSmrg    Each of the four attributes of this class, compatibility, core, es1, and
2601e04c3fSmrg    es2, specify the minimum API version where a function can possibly exist
2701e04c3fSmrg    in Mesa.  The version is specified as an integer of (real GL version *
2801e04c3fSmrg    10).  For example, glCreateProgram was added in OpenGL 2.0, so
2901e04c3fSmrg    compatibility=20 and core=31.
3001e04c3fSmrg
3101e04c3fSmrg    If the attribute is None, then it cannot be supported by that
3201e04c3fSmrg    API.  For example, glNewList was removed from core profiles, so
3301e04c3fSmrg    compatibility=10 and core=None.
3401e04c3fSmrg
3501e04c3fSmrg    Each of the attributes that is not None must have a valid value.  The
3601e04c3fSmrg    valid ranges are:
3701e04c3fSmrg
3801e04c3fSmrg        compatibility: [10, )
3901e04c3fSmrg        core: [31, )
4001e04c3fSmrg        es1: [10, 11]
4101e04c3fSmrg        es2: [20, )
4201e04c3fSmrg
4301e04c3fSmrg    These ranges are enforced by the constructor.
4401e04c3fSmrg    """
4501e04c3fSmrg    def __init__(self, compatibility=None, core=None, es1=None, es2=None):
4601e04c3fSmrg        if compatibility is not None:
4701e04c3fSmrg            assert isinstance(compatibility, int)
4801e04c3fSmrg            assert compatibility >= 10
4901e04c3fSmrg
5001e04c3fSmrg        if core is not None:
5101e04c3fSmrg            assert isinstance(core, int)
5201e04c3fSmrg            assert core >= 31
5301e04c3fSmrg
5401e04c3fSmrg        if es1 is not None:
5501e04c3fSmrg            assert isinstance(es1, int)
5601e04c3fSmrg            assert es1 == 10 or es1 == 11
5701e04c3fSmrg
5801e04c3fSmrg        if es2 is not None:
5901e04c3fSmrg            assert isinstance(es2, int)
6001e04c3fSmrg            assert es2 >= 20
6101e04c3fSmrg
6201e04c3fSmrg        self.compatibility = compatibility
6301e04c3fSmrg        self.core = core
6401e04c3fSmrg        self.es1 = es1
6501e04c3fSmrg        self.es2 = es2
6601e04c3fSmrg
6701e04c3fSmrgfunctions = {
6801e04c3fSmrg    # OpenGL 3.1 / GL_ARB_texture_buffer_object.
6901e04c3fSmrg    "TexBuffer": exec_info(compatibility=20, core=31, es2=31),
7001e04c3fSmrg
7101e04c3fSmrg    # OpenGL 3.2 / GL_OES_geometry_shader.
7201e04c3fSmrg    "FramebufferTexture": exec_info(compatibility=32, core=32, es2=31),
7301e04c3fSmrg
7401e04c3fSmrg    # OpenGL 4.0 / GL_ARB_shader_subroutines. Mesa only exposes this
7501e04c3fSmrg    # extension with core profile.
7601e04c3fSmrg    "GetSubroutineUniformLocation": exec_info(compatibility=31, core=31),
7701e04c3fSmrg    "GetSubroutineIndex": exec_info(compatibility=31, core=31),
7801e04c3fSmrg    "GetActiveSubroutineUniformiv": exec_info(compatibility=31, core=31),
7901e04c3fSmrg    "GetActiveSubroutineUniformName": exec_info(compatibility=31, core=31),
8001e04c3fSmrg    "GetActiveSubroutineName": exec_info(compatibility=31, core=31),
8101e04c3fSmrg    "UniformSubroutinesuiv": exec_info(compatibility=31, core=31),
8201e04c3fSmrg    "GetUniformSubroutineuiv": exec_info(compatibility=31, core=31),
8301e04c3fSmrg    "GetProgramStageiv": exec_info(compatibility=31, core=31),
8401e04c3fSmrg
8501e04c3fSmrg    # OpenGL 4.0 / GL_ARB_gpu_shader_fp64.  The extension spec says:
8601e04c3fSmrg    #
8701e04c3fSmrg    #     "OpenGL 3.2 and GLSL 1.50 are required."
8801e04c3fSmrg    "Uniform1d": exec_info(compatibility=32, core=32),
8901e04c3fSmrg    "Uniform2d": exec_info(compatibility=32, core=32),
9001e04c3fSmrg    "Uniform3d": exec_info(compatibility=32, core=32),
9101e04c3fSmrg    "Uniform4d": exec_info(compatibility=32, core=32),
9201e04c3fSmrg    "Uniform1dv": exec_info(compatibility=32, core=32),
9301e04c3fSmrg    "Uniform2dv": exec_info(compatibility=32, core=32),
9401e04c3fSmrg    "Uniform3dv": exec_info(compatibility=32, core=32),
9501e04c3fSmrg    "Uniform4dv": exec_info(compatibility=32, core=32),
9601e04c3fSmrg    "UniformMatrix2dv": exec_info(compatibility=32, core=32),
9701e04c3fSmrg    "UniformMatrix3dv": exec_info(compatibility=32, core=32),
9801e04c3fSmrg    "UniformMatrix4dv": exec_info(compatibility=32, core=32),
9901e04c3fSmrg    "UniformMatrix2x3dv": exec_info(compatibility=32,core=32),
10001e04c3fSmrg    "UniformMatrix2x4dv": exec_info(compatibility=32, core=32),
10101e04c3fSmrg    "UniformMatrix3x2dv": exec_info(compatibility=32, core=32),
10201e04c3fSmrg    "UniformMatrix3x4dv": exec_info(compatibility=32, core=32),
10301e04c3fSmrg    "UniformMatrix4x2dv": exec_info(compatibility=32, core=32),
10401e04c3fSmrg    "UniformMatrix4x3dv": exec_info(compatibility=32, core=32),
10501e04c3fSmrg    "GetUniformdv": exec_info(compatibility=32, core=32),
10601e04c3fSmrg
10701e04c3fSmrg    # OpenGL 4.1 / GL_ARB_vertex_attrib_64bit.  The extension spec says:
10801e04c3fSmrg    #
10901e04c3fSmrg    #     "OpenGL 3.0 and GLSL 1.30 are required.
11001e04c3fSmrg    #
11101e04c3fSmrg    #     ARB_gpu_shader_fp64 (or equivalent functionality) is required."
11201e04c3fSmrg    #
11301e04c3fSmrg    # For Mesa this effectively means OpenGL 3.2 is required.  It seems
11401e04c3fSmrg    # unlikely that Mesa will ever get support for any of the NV extensions
11501e04c3fSmrg    # that add "equivalent functionality."
11601e04c3fSmrg    "VertexAttribL1d": exec_info(compatibility=32, core=32),
11701e04c3fSmrg    "VertexAttribL2d": exec_info(compatibility=32, core=32),
11801e04c3fSmrg    "VertexAttribL3d": exec_info(compatibility=32, core=32),
11901e04c3fSmrg    "VertexAttribL4d": exec_info(compatibility=32, core=32),
12001e04c3fSmrg    "VertexAttribL1dv": exec_info(compatibility=32, core=32),
12101e04c3fSmrg    "VertexAttribL2dv": exec_info(compatibility=32, core=32),
12201e04c3fSmrg    "VertexAttribL3dv": exec_info(compatibility=32, core=32),
12301e04c3fSmrg    "VertexAttribL4dv": exec_info(compatibility=32, core=32),
12401e04c3fSmrg    "VertexAttribLPointer": exec_info(compatibility=32, core=32),
12501e04c3fSmrg    "GetVertexAttribLdv": exec_info(compatibility=32, core=32),
12601e04c3fSmrg
12701e04c3fSmrg    # OpenGL 4.1 / GL_ARB_viewport_array.  The extension spec says:
12801e04c3fSmrg    #
12901e04c3fSmrg    #     "OpenGL 3.2 or the EXT_geometry_shader4 or ARB_geometry_shader4
13001e04c3fSmrg    #     extensions are required."
13101e04c3fSmrg    #
13201e04c3fSmrg    # Mesa does not support either of the geometry shader extensions, so
13301e04c3fSmrg    # OpenGL 3.2 is required.
13401e04c3fSmrg    "ViewportArrayv": exec_info(compatibility=32, core=32, es2=31),
13501e04c3fSmrg    "ViewportIndexedf": exec_info(compatibility=32, core=32, es2=31),
13601e04c3fSmrg    "ViewportIndexedfv": exec_info(compatibility=32, core=32, es2=31),
13701e04c3fSmrg    "ScissorArrayv": exec_info(compatibility=32, core=32, es2=31),
13801e04c3fSmrg    "ScissorIndexed": exec_info(compatibility=32, core=32, es2=31),
13901e04c3fSmrg    "ScissorIndexedv": exec_info(compatibility=32, core=32, es2=31),
14001e04c3fSmrg    "DepthRangeArrayv": exec_info(compatibility=32, core=32),
14101e04c3fSmrg    "DepthRangeIndexed": exec_info(compatibility=32, core=32),
14201e04c3fSmrg    # GetFloati_v also GL_ARB_shader_atomic_counters
14301e04c3fSmrg    # GetDoublei_v also GL_ARB_shader_atomic_counters
14401e04c3fSmrg
14501e04c3fSmrg    # OpenGL 4.3 / GL_ARB_texture_buffer_range.
14601e04c3fSmrg    "TexBufferRange": exec_info(compatibility=20, core=31, es2=31),
14701e04c3fSmrg
14801e04c3fSmrg    # OpenGL 4.3 / GL_ARB_framebuffer_no_attachments.  Mesa can expose the
14901e04c3fSmrg    # extension with OpenGL 3.0.
15001e04c3fSmrg    "FramebufferParameteri": exec_info(compatibility=30, core=31, es2=31),
1517ec681f3Smrg    "GetFramebufferParameteriv": exec_info(compatibility=30, core=31, es2=31),
1527ec681f3Smrg
1537ec681f3Smrg    # OpenGL 4.3 / GL_MESA_framebuffer_flip_y.
1547ec681f3Smrg    "FramebufferParameteriMESA": exec_info(core=31, es2=30),
1557ec681f3Smrg    "GetFramebufferParameterivMESA": exec_info(core=31, es2=30),
15601e04c3fSmrg
15701e04c3fSmrg    # OpenGL 4.5 / GL_ARB_direct_state_access.   Mesa can expose the extension
15801e04c3fSmrg    # with core profile.
15901e04c3fSmrg    "CreateTransformFeedbacks": exec_info(compatibility=31, core=31),
16001e04c3fSmrg    "TransformFeedbackBufferBase": exec_info(compatibility=31, core=31),
16101e04c3fSmrg    "TransformFeedbackBufferRange": exec_info(compatibility=31, core=31),
16201e04c3fSmrg    "GetTransformFeedbackiv": exec_info(compatibility=31, core=31),
16301e04c3fSmrg    "GetTransformFeedbacki_v": exec_info(compatibility=31, core=31),
16401e04c3fSmrg    "GetTransformFeedbacki64_v": exec_info(compatibility=31, core=31),
16501e04c3fSmrg    "CreateBuffers": exec_info(compatibility=31, core=31),
16601e04c3fSmrg    "NamedBufferStorage": exec_info(compatibility=31, core=31),
16701e04c3fSmrg    "NamedBufferData": exec_info(compatibility=31, core=31),
16801e04c3fSmrg    "NamedBufferSubData": exec_info(compatibility=31, core=31),
16901e04c3fSmrg    "CopyNamedBufferSubData": exec_info(compatibility=31, core=31),
17001e04c3fSmrg    "ClearNamedBufferData": exec_info(compatibility=31, core=31),
17101e04c3fSmrg    "ClearNamedBufferSubData": exec_info(compatibility=31, core=31),
17201e04c3fSmrg    "MapNamedBuffer": exec_info(compatibility=31, core=31),
17301e04c3fSmrg    "MapNamedBufferRange": exec_info(compatibility=31, core=31),
17401e04c3fSmrg    "UnmapNamedBuffer": exec_info(compatibility=31, core=31),
17501e04c3fSmrg    "FlushMappedNamedBufferRange": exec_info(compatibility=31, core=31),
17601e04c3fSmrg    "GetNamedBufferParameteriv": exec_info(compatibility=31, core=31),
17701e04c3fSmrg    "GetNamedBufferParameteri64v": exec_info(compatibility=31, core=31),
17801e04c3fSmrg    "GetNamedBufferPointerv": exec_info(compatibility=31, core=31),
17901e04c3fSmrg    "GetNamedBufferSubData": exec_info(compatibility=31, core=31),
18001e04c3fSmrg    "CreateFramebuffers": exec_info(compatibility=31, core=31),
18101e04c3fSmrg    "NamedFramebufferRenderbuffer": exec_info(compatibility=31, core=31),
18201e04c3fSmrg    "NamedFramebufferParameteri": exec_info(compatibility=31, core=31),
18301e04c3fSmrg    "NamedFramebufferTexture": exec_info(compatibility=31, core=31),
18401e04c3fSmrg    "NamedFramebufferTextureLayer": exec_info(compatibility=31, core=31),
18501e04c3fSmrg    "NamedFramebufferDrawBuffer": exec_info(compatibility=31, core=31),
18601e04c3fSmrg    "NamedFramebufferDrawBuffers": exec_info(compatibility=31, core=31),
18701e04c3fSmrg    "NamedFramebufferReadBuffer": exec_info(compatibility=31, core=31),
18801e04c3fSmrg    "InvalidateNamedFramebufferData": exec_info(compatibility=31, core=31),
18901e04c3fSmrg    "InvalidateNamedFramebufferSubData": exec_info(compatibility=31, core=31),
19001e04c3fSmrg    "ClearNamedFramebufferiv": exec_info(compatibility=31, core=31),
19101e04c3fSmrg    "ClearNamedFramebufferuiv": exec_info(compatibility=31, core=31),
19201e04c3fSmrg    "ClearNamedFramebufferfv": exec_info(compatibility=31, core=31),
19301e04c3fSmrg    "ClearNamedFramebufferfi": exec_info(compatibility=31, core=31),
19401e04c3fSmrg    "BlitNamedFramebuffer": exec_info(compatibility=31, core=31),
19501e04c3fSmrg    "CheckNamedFramebufferStatus": exec_info(compatibility=31, core=31),
19601e04c3fSmrg    "GetNamedFramebufferParameteriv": exec_info(compatibility=31, core=31),
19701e04c3fSmrg    "GetNamedFramebufferAttachmentParameteriv": exec_info(compatibility=31, core=31),
19801e04c3fSmrg    "CreateRenderbuffers": exec_info(compatibility=31, core=31),
19901e04c3fSmrg    "NamedRenderbufferStorage": exec_info(compatibility=31, core=31),
20001e04c3fSmrg    "NamedRenderbufferStorageMultisample": exec_info(compatibility=31, core=31),
20101e04c3fSmrg    "GetNamedRenderbufferParameteriv": exec_info(compatibility=31, core=31),
20201e04c3fSmrg    "CreateTextures": exec_info(compatibility=31, core=31),
20301e04c3fSmrg    "TextureBuffer": exec_info(compatibility=31, core=31),
20401e04c3fSmrg    "TextureBufferRange": exec_info(compatibility=31, core=31),
20501e04c3fSmrg    "TextureStorage1D": exec_info(compatibility=31, core=31),
20601e04c3fSmrg    "TextureStorage2D": exec_info(compatibility=31, core=31),
20701e04c3fSmrg    "TextureStorage3D": exec_info(compatibility=31, core=31),
20801e04c3fSmrg    "TextureStorage2DMultisample": exec_info(compatibility=31, core=31),
20901e04c3fSmrg    "TextureStorage3DMultisample": exec_info(compatibility=31, core=31),
21001e04c3fSmrg    "TextureSubImage1D": exec_info(compatibility=31, core=31),
21101e04c3fSmrg    "TextureSubImage2D": exec_info(compatibility=31, core=31),
21201e04c3fSmrg    "TextureSubImage3D": exec_info(compatibility=31, core=31),
21301e04c3fSmrg    "CompressedTextureSubImage1D": exec_info(compatibility=31, core=31),
21401e04c3fSmrg    "CompressedTextureSubImage2D": exec_info(compatibility=31, core=31),
21501e04c3fSmrg    "CompressedTextureSubImage3D": exec_info(compatibility=31, core=31),
21601e04c3fSmrg    "CopyTextureSubImage1D": exec_info(compatibility=31, core=31),
21701e04c3fSmrg    "CopyTextureSubImage2D": exec_info(compatibility=31, core=31),
21801e04c3fSmrg    "CopyTextureSubImage3D": exec_info(compatibility=31, core=31),
21901e04c3fSmrg    "TextureParameterf": exec_info(compatibility=31, core=31),
22001e04c3fSmrg    "TextureParameterfv": exec_info(compatibility=31, core=31),
22101e04c3fSmrg    "TextureParameteri": exec_info(compatibility=31, core=31),
22201e04c3fSmrg    "TextureParameterIiv": exec_info(compatibility=31, core=31),
22301e04c3fSmrg    "TextureParameterIuiv": exec_info(compatibility=31, core=31),
22401e04c3fSmrg    "TextureParameteriv": exec_info(compatibility=31, core=31),
22501e04c3fSmrg    "GenerateTextureMipmap": exec_info(compatibility=31, core=31),
22601e04c3fSmrg    "BindTextureUnit": exec_info(compatibility=31, core=31),
22701e04c3fSmrg    "GetTextureImage": exec_info(compatibility=31, core=31),
22801e04c3fSmrg    "GetCompressedTextureImage": exec_info(compatibility=31, core=31),
22901e04c3fSmrg    "GetTextureLevelParameterfv": exec_info(compatibility=31, core=31),
23001e04c3fSmrg    "GetTextureLevelParameteriv": exec_info(compatibility=31, core=31),
23101e04c3fSmrg    "GetTextureParameterfv": exec_info(compatibility=31, core=31),
23201e04c3fSmrg    "GetTextureParameterIiv": exec_info(compatibility=31, core=31),
23301e04c3fSmrg    "GetTextureParameterIuiv": exec_info(compatibility=31, core=31),
23401e04c3fSmrg    "GetTextureParameteriv": exec_info(compatibility=31, core=31),
23501e04c3fSmrg    "CreateVertexArrays": exec_info(compatibility=31, core=31),
23601e04c3fSmrg    "DisableVertexArrayAttrib": exec_info(compatibility=31, core=31),
23701e04c3fSmrg    "EnableVertexArrayAttrib": exec_info(compatibility=31, core=31),
23801e04c3fSmrg    "VertexArrayElementBuffer": exec_info(compatibility=31, core=31),
23901e04c3fSmrg    "VertexArrayVertexBuffer": exec_info(compatibility=31, core=31),
24001e04c3fSmrg    "VertexArrayVertexBuffers": exec_info(compatibility=31, core=31),
24101e04c3fSmrg    "VertexArrayAttribFormat": exec_info(compatibility=31, core=31),
24201e04c3fSmrg    "VertexArrayAttribIFormat": exec_info(compatibility=31, core=31),
24301e04c3fSmrg    "VertexArrayAttribLFormat": exec_info(compatibility=31, core=31),
24401e04c3fSmrg    "VertexArrayAttribBinding": exec_info(compatibility=31, core=31),
24501e04c3fSmrg    "VertexArrayBindingDivisor": exec_info(compatibility=31, core=31),
24601e04c3fSmrg    "GetVertexArrayiv": exec_info(compatibility=31, core=31),
24701e04c3fSmrg    "GetVertexArrayIndexediv": exec_info(compatibility=31, core=31),
24801e04c3fSmrg    "GetVertexArrayIndexed64iv": exec_info(compatibility=31, core=31),
24901e04c3fSmrg    "CreateSamplers": exec_info(compatibility=31, core=31),
25001e04c3fSmrg    "CreateProgramPipelines": exec_info(compatibility=31, core=31),
25101e04c3fSmrg    "CreateQueries": exec_info(compatibility=31, core=31),
25201e04c3fSmrg    "GetQueryBufferObjectiv": exec_info(compatibility=31, core=31),
25301e04c3fSmrg    "GetQueryBufferObjectuiv": exec_info(compatibility=31, core=31),
25401e04c3fSmrg    "GetQueryBufferObjecti64v": exec_info(compatibility=31, core=31),
25501e04c3fSmrg    "GetQueryBufferObjectui64v": exec_info(compatibility=31, core=31),
25601e04c3fSmrg
2577ec681f3Smrg    # GL_ARB_gpu_shader_int64 - nominally requires OpenGL 4.0
2587ec681f3Smrg    "Uniform1i64ARB": exec_info(compatibility=40, core=31),
2597ec681f3Smrg    "Uniform2i64ARB": exec_info(compatibility=40, core=31),
2607ec681f3Smrg    "Uniform3i64ARB": exec_info(compatibility=40, core=31),
2617ec681f3Smrg    "Uniform4i64ARB": exec_info(compatibility=40, core=31),
2627ec681f3Smrg    "Uniform1i64vARB": exec_info(compatibility=40, core=31),
2637ec681f3Smrg    "Uniform2i64vARB": exec_info(compatibility=40, core=31),
2647ec681f3Smrg    "Uniform3i64vARB": exec_info(compatibility=40, core=31),
2657ec681f3Smrg    "Uniform4i64vARB": exec_info(compatibility=40, core=31),
2667ec681f3Smrg    "Uniform1ui64ARB": exec_info(compatibility=40, core=31),
2677ec681f3Smrg    "Uniform2ui64ARB": exec_info(compatibility=40, core=31),
2687ec681f3Smrg    "Uniform3ui64ARB": exec_info(compatibility=40, core=31),
2697ec681f3Smrg    "Uniform4ui64ARB": exec_info(compatibility=40, core=31),
2707ec681f3Smrg    "Uniform1ui64vARB": exec_info(compatibility=40, core=31),
2717ec681f3Smrg    "Uniform2ui64vARB": exec_info(compatibility=40, core=31),
2727ec681f3Smrg    "Uniform3ui64vARB": exec_info(compatibility=40, core=31),
2737ec681f3Smrg    "Uniform4ui64vARB": exec_info(compatibility=40, core=31),
2747ec681f3Smrg    "GetUniformi64vARB": exec_info(compatibility=40, core=31),
2757ec681f3Smrg    "GetUniformui64vARB": exec_info(compatibility=40, core=31),
2767ec681f3Smrg    "GetnUniformi64vARB": exec_info(compatibility=40, core=31),
2777ec681f3Smrg    "GetnUniformui64vARB": exec_info(compatibility=40, core=31),
2787ec681f3Smrg    "ProgramUniform1i64ARB": exec_info(compatibility=40, core=31),
2797ec681f3Smrg    "ProgramUniform2i64ARB": exec_info(compatibility=40, core=31),
2807ec681f3Smrg    "ProgramUniform3i64ARB": exec_info(compatibility=40, core=31),
2817ec681f3Smrg    "ProgramUniform4i64ARB": exec_info(compatibility=40, core=31),
2827ec681f3Smrg    "ProgramUniform1i64vARB": exec_info(compatibility=40, core=31),
2837ec681f3Smrg    "ProgramUniform2i64vARB": exec_info(compatibility=40, core=31),
2847ec681f3Smrg    "ProgramUniform3i64vARB": exec_info(compatibility=40, core=31),
2857ec681f3Smrg    "ProgramUniform4i64vARB": exec_info(compatibility=40, core=31),
2867ec681f3Smrg    "ProgramUniform1ui64ARB": exec_info(compatibility=40, core=31),
2877ec681f3Smrg    "ProgramUniform2ui64ARB": exec_info(compatibility=40, core=31),
2887ec681f3Smrg    "ProgramUniform3ui64ARB": exec_info(compatibility=40, core=31),
2897ec681f3Smrg    "ProgramUniform4ui64ARB": exec_info(compatibility=40, core=31),
2907ec681f3Smrg    "ProgramUniform1ui64vARB": exec_info(compatibility=40, core=31),
2917ec681f3Smrg    "ProgramUniform2ui64vARB": exec_info(compatibility=40, core=31),
2927ec681f3Smrg    "ProgramUniform3ui64vARB": exec_info(compatibility=40, core=31),
2937ec681f3Smrg    "ProgramUniform4ui64vARB": exec_info(compatibility=40, core=31),
29401e04c3fSmrg
29501e04c3fSmrg    # GL_ARB_bindless_texture
29601e04c3fSmrg    "GetVertexAttribLui64vARB": exec_info(compatibility=30, core=31),
29701e04c3fSmrg}
298