1*61046927SAndroid Build Coastguard Worker# Copyright (C) 2015 Intel Corporation 2*61046927SAndroid Build Coastguard Worker# 3*61046927SAndroid Build Coastguard Worker# Permission is hereby granted, free of charge, to any person obtaining a 4*61046927SAndroid Build Coastguard Worker# copy of this software and associated documentation files (the "Software"), 5*61046927SAndroid Build Coastguard Worker# to deal in the Software without restriction, including without limitation 6*61046927SAndroid Build Coastguard Worker# the rights to use, copy, modify, merge, publish, distribute, sublicense, 7*61046927SAndroid Build Coastguard Worker# and/or sell copies of the Software, and to permit persons to whom the 8*61046927SAndroid Build Coastguard Worker# Software is furnished to do so, subject to the following conditions: 9*61046927SAndroid Build Coastguard Worker# 10*61046927SAndroid Build Coastguard Worker# The above copyright notice and this permission notice (including the next 11*61046927SAndroid Build Coastguard Worker# paragraph) shall be included in all copies or substantial portions of the 12*61046927SAndroid Build Coastguard Worker# Software. 13*61046927SAndroid Build Coastguard Worker# 14*61046927SAndroid Build Coastguard Worker# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15*61046927SAndroid Build Coastguard Worker# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16*61046927SAndroid Build Coastguard Worker# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17*61046927SAndroid Build Coastguard Worker# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18*61046927SAndroid Build Coastguard Worker# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19*61046927SAndroid Build Coastguard Worker# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 20*61046927SAndroid Build Coastguard Worker# IN THE SOFTWARE. 21*61046927SAndroid Build Coastguard Worker 22*61046927SAndroid Build Coastguard Workerimport argparse 23*61046927SAndroid Build Coastguard Workerimport gl_XML 24*61046927SAndroid Build Coastguard Worker 25*61046927SAndroid Build Coastguard Workerclass exec_info(): 26*61046927SAndroid Build Coastguard Worker """Information relating GL APIs to a function. 27*61046927SAndroid Build Coastguard Worker 28*61046927SAndroid Build Coastguard Worker Each of the four attributes of this class, compatibility, core, es1, and 29*61046927SAndroid Build Coastguard Worker es2, specify the minimum API version where a function can possibly exist 30*61046927SAndroid Build Coastguard Worker in Mesa. The version is specified as an integer of (real GL version * 31*61046927SAndroid Build Coastguard Worker 10). For example, glCreateProgram was added in OpenGL 2.0, so 32*61046927SAndroid Build Coastguard Worker compatibility=20 and core=31. 33*61046927SAndroid Build Coastguard Worker 34*61046927SAndroid Build Coastguard Worker If the attribute is None, then it cannot be supported by that 35*61046927SAndroid Build Coastguard Worker API. For example, glNewList was removed from core profiles, so 36*61046927SAndroid Build Coastguard Worker compatibility=10 and core=None. 37*61046927SAndroid Build Coastguard Worker 38*61046927SAndroid Build Coastguard Worker Each of the attributes that is not None must have a valid value. The 39*61046927SAndroid Build Coastguard Worker valid ranges are: 40*61046927SAndroid Build Coastguard Worker 41*61046927SAndroid Build Coastguard Worker compatibility: [10, ) 42*61046927SAndroid Build Coastguard Worker core: [31, ) 43*61046927SAndroid Build Coastguard Worker es1: [10, 11] 44*61046927SAndroid Build Coastguard Worker es2: [20, ) 45*61046927SAndroid Build Coastguard Worker 46*61046927SAndroid Build Coastguard Worker These ranges are enforced by the constructor. 47*61046927SAndroid Build Coastguard Worker """ 48*61046927SAndroid Build Coastguard Worker def __init__(self, compatibility=None, core=None, es1=None, es2=None): 49*61046927SAndroid Build Coastguard Worker if compatibility is not None: 50*61046927SAndroid Build Coastguard Worker assert isinstance(compatibility, int) 51*61046927SAndroid Build Coastguard Worker assert compatibility >= 10 52*61046927SAndroid Build Coastguard Worker 53*61046927SAndroid Build Coastguard Worker if core is not None: 54*61046927SAndroid Build Coastguard Worker assert isinstance(core, int) 55*61046927SAndroid Build Coastguard Worker assert core >= 31 56*61046927SAndroid Build Coastguard Worker 57*61046927SAndroid Build Coastguard Worker if es1 is not None: 58*61046927SAndroid Build Coastguard Worker assert isinstance(es1, int) 59*61046927SAndroid Build Coastguard Worker assert es1 == 10 or es1 == 11 60*61046927SAndroid Build Coastguard Worker 61*61046927SAndroid Build Coastguard Worker if es2 is not None: 62*61046927SAndroid Build Coastguard Worker assert isinstance(es2, int) 63*61046927SAndroid Build Coastguard Worker assert es2 >= 20 64*61046927SAndroid Build Coastguard Worker 65*61046927SAndroid Build Coastguard Worker self.compatibility = compatibility 66*61046927SAndroid Build Coastguard Worker self.core = core 67*61046927SAndroid Build Coastguard Worker self.es1 = es1 68*61046927SAndroid Build Coastguard Worker self.es2 = es2 69*61046927SAndroid Build Coastguard Worker 70*61046927SAndroid Build Coastguard Workerfunctions = { 71*61046927SAndroid Build Coastguard Worker # OpenGL 3.1 / GL_ARB_texture_buffer_object. 72*61046927SAndroid Build Coastguard Worker "TexBuffer": exec_info(compatibility=20, core=31, es2=31), 73*61046927SAndroid Build Coastguard Worker 74*61046927SAndroid Build Coastguard Worker # OpenGL 3.2 / GL_OES_geometry_shader. 75*61046927SAndroid Build Coastguard Worker "FramebufferTexture": exec_info(compatibility=32, core=32, es2=31), 76*61046927SAndroid Build Coastguard Worker 77*61046927SAndroid Build Coastguard Worker # OpenGL 4.0 / GL_ARB_shader_subroutines. Mesa only exposes this 78*61046927SAndroid Build Coastguard Worker # extension with core profile. 79*61046927SAndroid Build Coastguard Worker "GetSubroutineUniformLocation": exec_info(compatibility=31, core=31), 80*61046927SAndroid Build Coastguard Worker "GetSubroutineIndex": exec_info(compatibility=31, core=31), 81*61046927SAndroid Build Coastguard Worker "GetActiveSubroutineUniformiv": exec_info(compatibility=31, core=31), 82*61046927SAndroid Build Coastguard Worker "GetActiveSubroutineUniformName": exec_info(compatibility=31, core=31), 83*61046927SAndroid Build Coastguard Worker "GetActiveSubroutineName": exec_info(compatibility=31, core=31), 84*61046927SAndroid Build Coastguard Worker "UniformSubroutinesuiv": exec_info(compatibility=31, core=31), 85*61046927SAndroid Build Coastguard Worker "GetUniformSubroutineuiv": exec_info(compatibility=31, core=31), 86*61046927SAndroid Build Coastguard Worker "GetProgramStageiv": exec_info(compatibility=31, core=31), 87*61046927SAndroid Build Coastguard Worker 88*61046927SAndroid Build Coastguard Worker # OpenGL 4.0 / GL_ARB_gpu_shader_fp64. The extension spec says: 89*61046927SAndroid Build Coastguard Worker # 90*61046927SAndroid Build Coastguard Worker # "OpenGL 3.2 and GLSL 1.50 are required." 91*61046927SAndroid Build Coastguard Worker "Uniform1d": exec_info(compatibility=32, core=32), 92*61046927SAndroid Build Coastguard Worker "Uniform2d": exec_info(compatibility=32, core=32), 93*61046927SAndroid Build Coastguard Worker "Uniform3d": exec_info(compatibility=32, core=32), 94*61046927SAndroid Build Coastguard Worker "Uniform4d": exec_info(compatibility=32, core=32), 95*61046927SAndroid Build Coastguard Worker "Uniform1dv": exec_info(compatibility=32, core=32), 96*61046927SAndroid Build Coastguard Worker "Uniform2dv": exec_info(compatibility=32, core=32), 97*61046927SAndroid Build Coastguard Worker "Uniform3dv": exec_info(compatibility=32, core=32), 98*61046927SAndroid Build Coastguard Worker "Uniform4dv": exec_info(compatibility=32, core=32), 99*61046927SAndroid Build Coastguard Worker "UniformMatrix2dv": exec_info(compatibility=32, core=32), 100*61046927SAndroid Build Coastguard Worker "UniformMatrix3dv": exec_info(compatibility=32, core=32), 101*61046927SAndroid Build Coastguard Worker "UniformMatrix4dv": exec_info(compatibility=32, core=32), 102*61046927SAndroid Build Coastguard Worker "UniformMatrix2x3dv": exec_info(compatibility=32,core=32), 103*61046927SAndroid Build Coastguard Worker "UniformMatrix2x4dv": exec_info(compatibility=32, core=32), 104*61046927SAndroid Build Coastguard Worker "UniformMatrix3x2dv": exec_info(compatibility=32, core=32), 105*61046927SAndroid Build Coastguard Worker "UniformMatrix3x4dv": exec_info(compatibility=32, core=32), 106*61046927SAndroid Build Coastguard Worker "UniformMatrix4x2dv": exec_info(compatibility=32, core=32), 107*61046927SAndroid Build Coastguard Worker "UniformMatrix4x3dv": exec_info(compatibility=32, core=32), 108*61046927SAndroid Build Coastguard Worker "GetUniformdv": exec_info(compatibility=32, core=32), 109*61046927SAndroid Build Coastguard Worker 110*61046927SAndroid Build Coastguard Worker # OpenGL 4.1 / GL_ARB_vertex_attrib_64bit. The extension spec says: 111*61046927SAndroid Build Coastguard Worker # 112*61046927SAndroid Build Coastguard Worker # "OpenGL 3.0 and GLSL 1.30 are required. 113*61046927SAndroid Build Coastguard Worker # 114*61046927SAndroid Build Coastguard Worker # ARB_gpu_shader_fp64 (or equivalent functionality) is required." 115*61046927SAndroid Build Coastguard Worker # 116*61046927SAndroid Build Coastguard Worker # For Mesa this effectively means OpenGL 3.2 is required. It seems 117*61046927SAndroid Build Coastguard Worker # unlikely that Mesa will ever get support for any of the NV extensions 118*61046927SAndroid Build Coastguard Worker # that add "equivalent functionality." 119*61046927SAndroid Build Coastguard Worker "VertexAttribL1d": exec_info(compatibility=32, core=32), 120*61046927SAndroid Build Coastguard Worker "VertexAttribL2d": exec_info(compatibility=32, core=32), 121*61046927SAndroid Build Coastguard Worker "VertexAttribL3d": exec_info(compatibility=32, core=32), 122*61046927SAndroid Build Coastguard Worker "VertexAttribL4d": exec_info(compatibility=32, core=32), 123*61046927SAndroid Build Coastguard Worker "VertexAttribL1dv": exec_info(compatibility=32, core=32), 124*61046927SAndroid Build Coastguard Worker "VertexAttribL2dv": exec_info(compatibility=32, core=32), 125*61046927SAndroid Build Coastguard Worker "VertexAttribL3dv": exec_info(compatibility=32, core=32), 126*61046927SAndroid Build Coastguard Worker "VertexAttribL4dv": exec_info(compatibility=32, core=32), 127*61046927SAndroid Build Coastguard Worker "VertexAttribLPointer": exec_info(compatibility=32, core=32), 128*61046927SAndroid Build Coastguard Worker "GetVertexAttribLdv": exec_info(compatibility=32, core=32), 129*61046927SAndroid Build Coastguard Worker 130*61046927SAndroid Build Coastguard Worker # OpenGL 4.1 / GL_ARB_viewport_array. The extension spec says: 131*61046927SAndroid Build Coastguard Worker # 132*61046927SAndroid Build Coastguard Worker # "OpenGL 3.2 or the EXT_geometry_shader4 or ARB_geometry_shader4 133*61046927SAndroid Build Coastguard Worker # extensions are required." 134*61046927SAndroid Build Coastguard Worker # 135*61046927SAndroid Build Coastguard Worker # Mesa does not support either of the geometry shader extensions, so 136*61046927SAndroid Build Coastguard Worker # OpenGL 3.2 is required. 137*61046927SAndroid Build Coastguard Worker "ViewportArrayv": exec_info(compatibility=32, core=32, es2=31), 138*61046927SAndroid Build Coastguard Worker "ViewportIndexedf": exec_info(compatibility=32, core=32, es2=31), 139*61046927SAndroid Build Coastguard Worker "ViewportIndexedfv": exec_info(compatibility=32, core=32, es2=31), 140*61046927SAndroid Build Coastguard Worker "ScissorArrayv": exec_info(compatibility=32, core=32, es2=31), 141*61046927SAndroid Build Coastguard Worker "ScissorIndexed": exec_info(compatibility=32, core=32, es2=31), 142*61046927SAndroid Build Coastguard Worker "ScissorIndexedv": exec_info(compatibility=32, core=32, es2=31), 143*61046927SAndroid Build Coastguard Worker "DepthRangeArrayv": exec_info(compatibility=32, core=32), 144*61046927SAndroid Build Coastguard Worker "DepthRangeIndexed": exec_info(compatibility=32, core=32), 145*61046927SAndroid Build Coastguard Worker # GetFloati_v also GL_ARB_shader_atomic_counters 146*61046927SAndroid Build Coastguard Worker # GetDoublei_v also GL_ARB_shader_atomic_counters 147*61046927SAndroid Build Coastguard Worker 148*61046927SAndroid Build Coastguard Worker # OpenGL 4.3 / GL_ARB_texture_buffer_range. 149*61046927SAndroid Build Coastguard Worker "TexBufferRange": exec_info(compatibility=20, core=31, es2=31), 150*61046927SAndroid Build Coastguard Worker 151*61046927SAndroid Build Coastguard Worker # OpenGL 4.3 / GL_ARB_framebuffer_no_attachments. Mesa can expose the 152*61046927SAndroid Build Coastguard Worker # extension with OpenGL 3.0. 153*61046927SAndroid Build Coastguard Worker "FramebufferParameteri": exec_info(compatibility=30, core=31, es2=31), 154*61046927SAndroid Build Coastguard Worker "GetFramebufferParameteriv": exec_info(compatibility=30, core=31, es2=31), 155*61046927SAndroid Build Coastguard Worker 156*61046927SAndroid Build Coastguard Worker # OpenGL 4.3 / GL_MESA_framebuffer_flip_y. 157*61046927SAndroid Build Coastguard Worker "FramebufferParameteriMESA": exec_info(core=31, es2=30), 158*61046927SAndroid Build Coastguard Worker "GetFramebufferParameterivMESA": exec_info(core=31, es2=30), 159*61046927SAndroid Build Coastguard Worker 160*61046927SAndroid Build Coastguard Worker # OpenGL 4.5 / GL_ARB_direct_state_access. Mesa can expose the extension 161*61046927SAndroid Build Coastguard Worker # with core profile. 162*61046927SAndroid Build Coastguard Worker "CreateTransformFeedbacks": exec_info(compatibility=31, core=31), 163*61046927SAndroid Build Coastguard Worker "TransformFeedbackBufferBase": exec_info(compatibility=31, core=31), 164*61046927SAndroid Build Coastguard Worker "TransformFeedbackBufferRange": exec_info(compatibility=31, core=31), 165*61046927SAndroid Build Coastguard Worker "GetTransformFeedbackiv": exec_info(compatibility=31, core=31), 166*61046927SAndroid Build Coastguard Worker "GetTransformFeedbacki_v": exec_info(compatibility=31, core=31), 167*61046927SAndroid Build Coastguard Worker "GetTransformFeedbacki64_v": exec_info(compatibility=31, core=31), 168*61046927SAndroid Build Coastguard Worker "CreateBuffers": exec_info(compatibility=31, core=31), 169*61046927SAndroid Build Coastguard Worker "NamedBufferStorage": exec_info(compatibility=31, core=31), 170*61046927SAndroid Build Coastguard Worker "NamedBufferData": exec_info(compatibility=31, core=31), 171*61046927SAndroid Build Coastguard Worker "NamedBufferSubData": exec_info(compatibility=31, core=31), 172*61046927SAndroid Build Coastguard Worker "CopyNamedBufferSubData": exec_info(compatibility=31, core=31), 173*61046927SAndroid Build Coastguard Worker "ClearNamedBufferData": exec_info(compatibility=31, core=31), 174*61046927SAndroid Build Coastguard Worker "ClearNamedBufferSubData": exec_info(compatibility=31, core=31), 175*61046927SAndroid Build Coastguard Worker "MapNamedBuffer": exec_info(compatibility=31, core=31), 176*61046927SAndroid Build Coastguard Worker "MapNamedBufferRange": exec_info(compatibility=31, core=31), 177*61046927SAndroid Build Coastguard Worker "UnmapNamedBuffer": exec_info(compatibility=31, core=31), 178*61046927SAndroid Build Coastguard Worker "FlushMappedNamedBufferRange": exec_info(compatibility=31, core=31), 179*61046927SAndroid Build Coastguard Worker "GetNamedBufferParameteriv": exec_info(compatibility=31, core=31), 180*61046927SAndroid Build Coastguard Worker "GetNamedBufferParameteri64v": exec_info(compatibility=31, core=31), 181*61046927SAndroid Build Coastguard Worker "GetNamedBufferPointerv": exec_info(compatibility=31, core=31), 182*61046927SAndroid Build Coastguard Worker "GetNamedBufferSubData": exec_info(compatibility=31, core=31), 183*61046927SAndroid Build Coastguard Worker "CreateFramebuffers": exec_info(compatibility=31, core=31), 184*61046927SAndroid Build Coastguard Worker "NamedFramebufferRenderbuffer": exec_info(compatibility=31, core=31), 185*61046927SAndroid Build Coastguard Worker "NamedFramebufferParameteri": exec_info(compatibility=31, core=31), 186*61046927SAndroid Build Coastguard Worker "NamedFramebufferTexture": exec_info(compatibility=31, core=31), 187*61046927SAndroid Build Coastguard Worker "NamedFramebufferTextureLayer": exec_info(compatibility=31, core=31), 188*61046927SAndroid Build Coastguard Worker "NamedFramebufferDrawBuffer": exec_info(compatibility=31, core=31), 189*61046927SAndroid Build Coastguard Worker "NamedFramebufferDrawBuffers": exec_info(compatibility=31, core=31), 190*61046927SAndroid Build Coastguard Worker "NamedFramebufferReadBuffer": exec_info(compatibility=31, core=31), 191*61046927SAndroid Build Coastguard Worker "InvalidateNamedFramebufferData": exec_info(compatibility=31, core=31), 192*61046927SAndroid Build Coastguard Worker "InvalidateNamedFramebufferSubData": exec_info(compatibility=31, core=31), 193*61046927SAndroid Build Coastguard Worker "ClearNamedFramebufferiv": exec_info(compatibility=31, core=31), 194*61046927SAndroid Build Coastguard Worker "ClearNamedFramebufferuiv": exec_info(compatibility=31, core=31), 195*61046927SAndroid Build Coastguard Worker "ClearNamedFramebufferfv": exec_info(compatibility=31, core=31), 196*61046927SAndroid Build Coastguard Worker "ClearNamedFramebufferfi": exec_info(compatibility=31, core=31), 197*61046927SAndroid Build Coastguard Worker "BlitNamedFramebuffer": exec_info(compatibility=31, core=31), 198*61046927SAndroid Build Coastguard Worker "CheckNamedFramebufferStatus": exec_info(compatibility=31, core=31), 199*61046927SAndroid Build Coastguard Worker "GetNamedFramebufferParameteriv": exec_info(compatibility=31, core=31), 200*61046927SAndroid Build Coastguard Worker "GetNamedFramebufferAttachmentParameteriv": exec_info(compatibility=31, core=31), 201*61046927SAndroid Build Coastguard Worker "CreateRenderbuffers": exec_info(compatibility=31, core=31), 202*61046927SAndroid Build Coastguard Worker "NamedRenderbufferStorage": exec_info(compatibility=31, core=31), 203*61046927SAndroid Build Coastguard Worker "NamedRenderbufferStorageMultisample": exec_info(compatibility=31, core=31), 204*61046927SAndroid Build Coastguard Worker "GetNamedRenderbufferParameteriv": exec_info(compatibility=31, core=31), 205*61046927SAndroid Build Coastguard Worker "CreateTextures": exec_info(compatibility=31, core=31), 206*61046927SAndroid Build Coastguard Worker "TextureBuffer": exec_info(compatibility=31, core=31), 207*61046927SAndroid Build Coastguard Worker "TextureBufferRange": exec_info(compatibility=31, core=31), 208*61046927SAndroid Build Coastguard Worker "TextureStorage1D": exec_info(compatibility=31, core=31), 209*61046927SAndroid Build Coastguard Worker "TextureStorage2D": exec_info(compatibility=31, core=31), 210*61046927SAndroid Build Coastguard Worker "TextureStorage3D": exec_info(compatibility=31, core=31), 211*61046927SAndroid Build Coastguard Worker "TextureStorage2DMultisample": exec_info(compatibility=31, core=31), 212*61046927SAndroid Build Coastguard Worker "TextureStorage3DMultisample": exec_info(compatibility=31, core=31), 213*61046927SAndroid Build Coastguard Worker "TextureSubImage1D": exec_info(compatibility=31, core=31), 214*61046927SAndroid Build Coastguard Worker "TextureSubImage2D": exec_info(compatibility=31, core=31), 215*61046927SAndroid Build Coastguard Worker "TextureSubImage3D": exec_info(compatibility=31, core=31), 216*61046927SAndroid Build Coastguard Worker "CompressedTextureSubImage1D": exec_info(compatibility=31, core=31), 217*61046927SAndroid Build Coastguard Worker "CompressedTextureSubImage2D": exec_info(compatibility=31, core=31), 218*61046927SAndroid Build Coastguard Worker "CompressedTextureSubImage3D": exec_info(compatibility=31, core=31), 219*61046927SAndroid Build Coastguard Worker "CopyTextureSubImage1D": exec_info(compatibility=31, core=31), 220*61046927SAndroid Build Coastguard Worker "CopyTextureSubImage2D": exec_info(compatibility=31, core=31), 221*61046927SAndroid Build Coastguard Worker "CopyTextureSubImage3D": exec_info(compatibility=31, core=31), 222*61046927SAndroid Build Coastguard Worker "TextureParameterf": exec_info(compatibility=31, core=31), 223*61046927SAndroid Build Coastguard Worker "TextureParameterfv": exec_info(compatibility=31, core=31), 224*61046927SAndroid Build Coastguard Worker "TextureParameteri": exec_info(compatibility=31, core=31), 225*61046927SAndroid Build Coastguard Worker "TextureParameterIiv": exec_info(compatibility=31, core=31), 226*61046927SAndroid Build Coastguard Worker "TextureParameterIuiv": exec_info(compatibility=31, core=31), 227*61046927SAndroid Build Coastguard Worker "TextureParameteriv": exec_info(compatibility=31, core=31), 228*61046927SAndroid Build Coastguard Worker "GenerateTextureMipmap": exec_info(compatibility=31, core=31), 229*61046927SAndroid Build Coastguard Worker "BindTextureUnit": exec_info(compatibility=31, core=31), 230*61046927SAndroid Build Coastguard Worker "GetTextureImage": exec_info(compatibility=31, core=31), 231*61046927SAndroid Build Coastguard Worker "GetCompressedTextureImage": exec_info(compatibility=31, core=31), 232*61046927SAndroid Build Coastguard Worker "GetTextureLevelParameterfv": exec_info(compatibility=31, core=31), 233*61046927SAndroid Build Coastguard Worker "GetTextureLevelParameteriv": exec_info(compatibility=31, core=31), 234*61046927SAndroid Build Coastguard Worker "GetTextureParameterfv": exec_info(compatibility=31, core=31), 235*61046927SAndroid Build Coastguard Worker "GetTextureParameterIiv": exec_info(compatibility=31, core=31), 236*61046927SAndroid Build Coastguard Worker "GetTextureParameterIuiv": exec_info(compatibility=31, core=31), 237*61046927SAndroid Build Coastguard Worker "GetTextureParameteriv": exec_info(compatibility=31, core=31), 238*61046927SAndroid Build Coastguard Worker "CreateVertexArrays": exec_info(compatibility=31, core=31), 239*61046927SAndroid Build Coastguard Worker "DisableVertexArrayAttrib": exec_info(compatibility=31, core=31), 240*61046927SAndroid Build Coastguard Worker "EnableVertexArrayAttrib": exec_info(compatibility=31, core=31), 241*61046927SAndroid Build Coastguard Worker "VertexArrayElementBuffer": exec_info(compatibility=31, core=31), 242*61046927SAndroid Build Coastguard Worker "VertexArrayVertexBuffer": exec_info(compatibility=31, core=31), 243*61046927SAndroid Build Coastguard Worker "VertexArrayVertexBuffers": exec_info(compatibility=31, core=31), 244*61046927SAndroid Build Coastguard Worker "VertexArrayAttribFormat": exec_info(compatibility=31, core=31), 245*61046927SAndroid Build Coastguard Worker "VertexArrayAttribIFormat": exec_info(compatibility=31, core=31), 246*61046927SAndroid Build Coastguard Worker "VertexArrayAttribLFormat": exec_info(compatibility=31, core=31), 247*61046927SAndroid Build Coastguard Worker "VertexArrayAttribBinding": exec_info(compatibility=31, core=31), 248*61046927SAndroid Build Coastguard Worker "VertexArrayBindingDivisor": exec_info(compatibility=31, core=31), 249*61046927SAndroid Build Coastguard Worker "GetVertexArrayiv": exec_info(compatibility=31, core=31), 250*61046927SAndroid Build Coastguard Worker "GetVertexArrayIndexediv": exec_info(compatibility=31, core=31), 251*61046927SAndroid Build Coastguard Worker "GetVertexArrayIndexed64iv": exec_info(compatibility=31, core=31), 252*61046927SAndroid Build Coastguard Worker "CreateSamplers": exec_info(compatibility=31, core=31), 253*61046927SAndroid Build Coastguard Worker "CreateProgramPipelines": exec_info(compatibility=31, core=31), 254*61046927SAndroid Build Coastguard Worker "CreateQueries": exec_info(compatibility=31, core=31), 255*61046927SAndroid Build Coastguard Worker "GetQueryBufferObjectiv": exec_info(compatibility=31, core=31), 256*61046927SAndroid Build Coastguard Worker "GetQueryBufferObjectuiv": exec_info(compatibility=31, core=31), 257*61046927SAndroid Build Coastguard Worker "GetQueryBufferObjecti64v": exec_info(compatibility=31, core=31), 258*61046927SAndroid Build Coastguard Worker "GetQueryBufferObjectui64v": exec_info(compatibility=31, core=31), 259*61046927SAndroid Build Coastguard Worker 260*61046927SAndroid Build Coastguard Worker # GL_ARB_gpu_shader_int64 - nominally requires OpenGL 4.0 261*61046927SAndroid Build Coastguard Worker "Uniform1i64ARB": exec_info(compatibility=40, core=31), 262*61046927SAndroid Build Coastguard Worker "Uniform2i64ARB": exec_info(compatibility=40, core=31), 263*61046927SAndroid Build Coastguard Worker "Uniform3i64ARB": exec_info(compatibility=40, core=31), 264*61046927SAndroid Build Coastguard Worker "Uniform4i64ARB": exec_info(compatibility=40, core=31), 265*61046927SAndroid Build Coastguard Worker "Uniform1i64vARB": exec_info(compatibility=40, core=31), 266*61046927SAndroid Build Coastguard Worker "Uniform2i64vARB": exec_info(compatibility=40, core=31), 267*61046927SAndroid Build Coastguard Worker "Uniform3i64vARB": exec_info(compatibility=40, core=31), 268*61046927SAndroid Build Coastguard Worker "Uniform4i64vARB": exec_info(compatibility=40, core=31), 269*61046927SAndroid Build Coastguard Worker "Uniform1ui64ARB": exec_info(compatibility=40, core=31), 270*61046927SAndroid Build Coastguard Worker "Uniform2ui64ARB": exec_info(compatibility=40, core=31), 271*61046927SAndroid Build Coastguard Worker "Uniform3ui64ARB": exec_info(compatibility=40, core=31), 272*61046927SAndroid Build Coastguard Worker "Uniform4ui64ARB": exec_info(compatibility=40, core=31), 273*61046927SAndroid Build Coastguard Worker "Uniform1ui64vARB": exec_info(compatibility=40, core=31), 274*61046927SAndroid Build Coastguard Worker "Uniform2ui64vARB": exec_info(compatibility=40, core=31), 275*61046927SAndroid Build Coastguard Worker "Uniform3ui64vARB": exec_info(compatibility=40, core=31), 276*61046927SAndroid Build Coastguard Worker "Uniform4ui64vARB": exec_info(compatibility=40, core=31), 277*61046927SAndroid Build Coastguard Worker "GetUniformi64vARB": exec_info(compatibility=40, core=31), 278*61046927SAndroid Build Coastguard Worker "GetUniformui64vARB": exec_info(compatibility=40, core=31), 279*61046927SAndroid Build Coastguard Worker "GetnUniformi64vARB": exec_info(compatibility=40, core=31), 280*61046927SAndroid Build Coastguard Worker "GetnUniformui64vARB": exec_info(compatibility=40, core=31), 281*61046927SAndroid Build Coastguard Worker "ProgramUniform1i64ARB": exec_info(compatibility=40, core=31), 282*61046927SAndroid Build Coastguard Worker "ProgramUniform2i64ARB": exec_info(compatibility=40, core=31), 283*61046927SAndroid Build Coastguard Worker "ProgramUniform3i64ARB": exec_info(compatibility=40, core=31), 284*61046927SAndroid Build Coastguard Worker "ProgramUniform4i64ARB": exec_info(compatibility=40, core=31), 285*61046927SAndroid Build Coastguard Worker "ProgramUniform1i64vARB": exec_info(compatibility=40, core=31), 286*61046927SAndroid Build Coastguard Worker "ProgramUniform2i64vARB": exec_info(compatibility=40, core=31), 287*61046927SAndroid Build Coastguard Worker "ProgramUniform3i64vARB": exec_info(compatibility=40, core=31), 288*61046927SAndroid Build Coastguard Worker "ProgramUniform4i64vARB": exec_info(compatibility=40, core=31), 289*61046927SAndroid Build Coastguard Worker "ProgramUniform1ui64ARB": exec_info(compatibility=40, core=31), 290*61046927SAndroid Build Coastguard Worker "ProgramUniform2ui64ARB": exec_info(compatibility=40, core=31), 291*61046927SAndroid Build Coastguard Worker "ProgramUniform3ui64ARB": exec_info(compatibility=40, core=31), 292*61046927SAndroid Build Coastguard Worker "ProgramUniform4ui64ARB": exec_info(compatibility=40, core=31), 293*61046927SAndroid Build Coastguard Worker "ProgramUniform1ui64vARB": exec_info(compatibility=40, core=31), 294*61046927SAndroid Build Coastguard Worker "ProgramUniform2ui64vARB": exec_info(compatibility=40, core=31), 295*61046927SAndroid Build Coastguard Worker "ProgramUniform3ui64vARB": exec_info(compatibility=40, core=31), 296*61046927SAndroid Build Coastguard Worker "ProgramUniform4ui64vARB": exec_info(compatibility=40, core=31), 297*61046927SAndroid Build Coastguard Worker 298*61046927SAndroid Build Coastguard Worker # GL_ARB_bindless_texture 299*61046927SAndroid Build Coastguard Worker "GetVertexAttribLui64vARB": exec_info(compatibility=30, core=31), 300*61046927SAndroid Build Coastguard Worker} 301*61046927SAndroid Build Coastguard Worker 302*61046927SAndroid Build Coastguard Workerdef get_api_condition(f): 303*61046927SAndroid Build Coastguard Worker condition_parts = [] 304*61046927SAndroid Build Coastguard Worker if f.name in functions: 305*61046927SAndroid Build Coastguard Worker ex = functions[f.name] 306*61046927SAndroid Build Coastguard Worker unconditional_count = 0 307*61046927SAndroid Build Coastguard Worker 308*61046927SAndroid Build Coastguard Worker if ex.compatibility is not None: 309*61046927SAndroid Build Coastguard Worker condition_parts.append('_mesa_is_desktop_gl_compat(ctx)') 310*61046927SAndroid Build Coastguard Worker unconditional_count += 1 311*61046927SAndroid Build Coastguard Worker 312*61046927SAndroid Build Coastguard Worker if ex.core is not None: 313*61046927SAndroid Build Coastguard Worker condition_parts.append('_mesa_is_desktop_gl_core(ctx)') 314*61046927SAndroid Build Coastguard Worker unconditional_count += 1 315*61046927SAndroid Build Coastguard Worker 316*61046927SAndroid Build Coastguard Worker if ex.es1 is not None: 317*61046927SAndroid Build Coastguard Worker condition_parts.append('_mesa_is_gles1(ctx)') 318*61046927SAndroid Build Coastguard Worker unconditional_count += 1 319*61046927SAndroid Build Coastguard Worker 320*61046927SAndroid Build Coastguard Worker if ex.es2 is not None: 321*61046927SAndroid Build Coastguard Worker if ex.es2 > 20: 322*61046927SAndroid Build Coastguard Worker condition_parts.append('(_mesa_is_gles2(ctx) && ctx->Version >= {0})'.format(ex.es2)) 323*61046927SAndroid Build Coastguard Worker else: 324*61046927SAndroid Build Coastguard Worker condition_parts.append('_mesa_is_gles2(ctx)') 325*61046927SAndroid Build Coastguard Worker unconditional_count += 1 326*61046927SAndroid Build Coastguard Worker 327*61046927SAndroid Build Coastguard Worker # If the function is unconditionally available in all four 328*61046927SAndroid Build Coastguard Worker # APIs, then it is always available. Replace the complex 329*61046927SAndroid Build Coastguard Worker # tautology condition with "true" and let GCC do the right 330*61046927SAndroid Build Coastguard Worker # thing. 331*61046927SAndroid Build Coastguard Worker if unconditional_count == 4: 332*61046927SAndroid Build Coastguard Worker condition_parts = ['true'] 333*61046927SAndroid Build Coastguard Worker else: 334*61046927SAndroid Build Coastguard Worker if f.desktop: 335*61046927SAndroid Build Coastguard Worker if f.deprecated: 336*61046927SAndroid Build Coastguard Worker condition_parts.append('_mesa_is_desktop_gl_compat(ctx)') 337*61046927SAndroid Build Coastguard Worker else: 338*61046927SAndroid Build Coastguard Worker condition_parts.append('_mesa_is_desktop_gl(ctx)') 339*61046927SAndroid Build Coastguard Worker if 'es1' in f.api_map: 340*61046927SAndroid Build Coastguard Worker condition_parts.append('_mesa_is_gles1(ctx)') 341*61046927SAndroid Build Coastguard Worker if 'es2' in f.api_map: 342*61046927SAndroid Build Coastguard Worker if f.api_map['es2'] > 2.0: 343*61046927SAndroid Build Coastguard Worker condition_parts.append('(_mesa_is_gles2(ctx) && ctx->Version >= {0})'.format(int(f.api_map['es2'] * 10))) 344*61046927SAndroid Build Coastguard Worker else: 345*61046927SAndroid Build Coastguard Worker condition_parts.append('_mesa_is_gles2(ctx)') 346*61046927SAndroid Build Coastguard Worker 347*61046927SAndroid Build Coastguard Worker if not condition_parts: 348*61046927SAndroid Build Coastguard Worker # This function does not exist in any API. 349*61046927SAndroid Build Coastguard Worker return None 350*61046927SAndroid Build Coastguard Worker return ' || '.join(condition_parts) 351*61046927SAndroid Build Coastguard Worker 352*61046927SAndroid Build Coastguard Workerdef print_glapi_file(printer): 353*61046927SAndroid Build Coastguard Worker parser = argparse.ArgumentParser() 354*61046927SAndroid Build Coastguard Worker parser.add_argument('-f', 355*61046927SAndroid Build Coastguard Worker dest='filename', 356*61046927SAndroid Build Coastguard Worker default='gl_and_es_API.xml', 357*61046927SAndroid Build Coastguard Worker help='an xml file describing an API') 358*61046927SAndroid Build Coastguard Worker args = parser.parse_args() 359*61046927SAndroid Build Coastguard Worker api = gl_XML.parse_GL_API(args.filename) 360*61046927SAndroid Build Coastguard Worker printer.Print(api) 361