xref: /aosp_15_r20/external/skia/tools/gpu/gl/interface/interface.json5 (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker// This file specifies which functions should be attached to GrGLInterface
2*c8dee2aaSAndroid Build Coastguard Worker// for a given standard (OpenGL, OpenGL ES, etc). It allows specifing
3*c8dee2aaSAndroid Build Coastguard Worker// how and when to attach them (e.g. only if an extension is present).
4*c8dee2aaSAndroid Build Coastguard Worker// It is used for both the assemble and validate step.
5*c8dee2aaSAndroid Build Coastguard Worker//
6*c8dee2aaSAndroid Build Coastguard Worker// To regenerate the Assemble/Validate code after editing this file, execute:
7*c8dee2aaSAndroid Build Coastguard Worker//
8*c8dee2aaSAndroid Build Coastguard Worker//   make -C tools/gpu/gl/interface generate
9*c8dee2aaSAndroid Build Coastguard Worker//
10*c8dee2aaSAndroid Build Coastguard Worker// Currently it assumes the minimum versions:
11*c8dee2aaSAndroid Build Coastguard Worker//   - GL: 2.0
12*c8dee2aaSAndroid Build Coastguard Worker//   - GLES: 2.0
13*c8dee2aaSAndroid Build Coastguard Worker//   - WebGL: [WIP] 1.0
14*c8dee2aaSAndroid Build Coastguard Worker//
15*c8dee2aaSAndroid Build Coastguard Worker// http://web.eecs.umich.edu/~sugih/courses/eecs487/common/notes/APITables.xml
16*c8dee2aaSAndroid Build Coastguard Worker// is a handy reference comparing GL and GLES API
17*c8dee2aaSAndroid Build Coastguard Worker[
18*c8dee2aaSAndroid Build Coastguard Worker  {
19*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"ext": "<core>"}],
20*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"ext": "<core>"}],
21*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": [{"ext": "<core>"}],
22*c8dee2aaSAndroid Build Coastguard Worker
23*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
24*c8dee2aaSAndroid Build Coastguard Worker      "ActiveTexture", "AttachShader", "BindAttribLocation", "BindBuffer",
25*c8dee2aaSAndroid Build Coastguard Worker      "BindTexture", "BlendColor", "BlendEquation", "BlendFunc",
26*c8dee2aaSAndroid Build Coastguard Worker      "BufferData", "BufferSubData", "Clear", "ClearColor",
27*c8dee2aaSAndroid Build Coastguard Worker      "ClearStencil", "ColorMask", "CompileShader", "CompressedTexImage2D",
28*c8dee2aaSAndroid Build Coastguard Worker      "CompressedTexSubImage2D", "CopyTexSubImage2D", "CreateProgram", "CreateShader",
29*c8dee2aaSAndroid Build Coastguard Worker      "CullFace", "DeleteBuffers", "DeleteProgram",
30*c8dee2aaSAndroid Build Coastguard Worker      "DeleteShader", "DeleteTextures", "DepthMask", "Disable",
31*c8dee2aaSAndroid Build Coastguard Worker      "DisableVertexAttribArray", "DrawArrays", "DrawElements", "Enable",
32*c8dee2aaSAndroid Build Coastguard Worker      "EnableVertexAttribArray", "Finish", "Flush",
33*c8dee2aaSAndroid Build Coastguard Worker      "FrontFace", "GenBuffers",
34*c8dee2aaSAndroid Build Coastguard Worker      "GenTextures", "GetBufferParameteriv", "GetError",
35*c8dee2aaSAndroid Build Coastguard Worker      "GetFloatv", "GetIntegerv", "GetProgramInfoLog",
36*c8dee2aaSAndroid Build Coastguard Worker      "GetProgramiv", "GetShaderInfoLog",
37*c8dee2aaSAndroid Build Coastguard Worker      "GetShaderiv", "GetString",
38*c8dee2aaSAndroid Build Coastguard Worker      "GetUniformLocation", "IsTexture", "LineWidth", "LinkProgram", "PixelStorei",
39*c8dee2aaSAndroid Build Coastguard Worker      "ReadPixels", "Scissor", "ShaderSource", "StencilFunc",
40*c8dee2aaSAndroid Build Coastguard Worker      "StencilFuncSeparate", "StencilMask", "StencilMaskSeparate", "StencilOp",
41*c8dee2aaSAndroid Build Coastguard Worker      "StencilOpSeparate", "TexImage2D", "TexParameterf", "TexParameterfv", "TexParameteri",
42*c8dee2aaSAndroid Build Coastguard Worker      "TexParameteriv", "TexSubImage2D", "Uniform1f", "Uniform1fv", "Uniform1i", "Uniform1iv",
43*c8dee2aaSAndroid Build Coastguard Worker      "Uniform2f", "Uniform2fv", "Uniform2i", "Uniform2iv", "Uniform3f", "Uniform3fv", "Uniform3i",
44*c8dee2aaSAndroid Build Coastguard Worker      "Uniform3iv", "Uniform4f", "Uniform4fv", "Uniform4i", "Uniform4iv", "UniformMatrix2fv",
45*c8dee2aaSAndroid Build Coastguard Worker      "UniformMatrix3fv", "UniformMatrix4fv", "UseProgram", "VertexAttrib1f",
46*c8dee2aaSAndroid Build Coastguard Worker      "VertexAttrib2fv", "VertexAttrib3fv", "VertexAttrib4fv", "VertexAttribPointer",
47*c8dee2aaSAndroid Build Coastguard Worker      "Viewport",
48*c8dee2aaSAndroid Build Coastguard Worker    ],
49*c8dee2aaSAndroid Build Coastguard Worker  },
50*c8dee2aaSAndroid Build Coastguard Worker  { // GL exclusive core functions
51*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"ext": "<core>"}],
52*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  null,
53*c8dee2aaSAndroid Build Coastguard Worker
54*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
55*c8dee2aaSAndroid Build Coastguard Worker      "DrawBuffer", "PolygonMode",
56*c8dee2aaSAndroid Build Coastguard Worker    ],
57*c8dee2aaSAndroid Build Coastguard Worker  },
58*c8dee2aaSAndroid Build Coastguard Worker  {
59*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [3, 0], "ext": "<core>"}],
60*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 0], "ext": "<core>"}],
61*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": [{"min_version": [2, 0], "ext": "<core>"}],
62*c8dee2aaSAndroid Build Coastguard Worker
63*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
64*c8dee2aaSAndroid Build Coastguard Worker      "GetStringi",
65*c8dee2aaSAndroid Build Coastguard Worker    ]
66*c8dee2aaSAndroid Build Coastguard Worker  },
67*c8dee2aaSAndroid Build Coastguard Worker  {
68*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [4, 2], "ext": "<core>"}],
69*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 1], "ext": "<core>"}],
70*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
71*c8dee2aaSAndroid Build Coastguard Worker
72*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
73*c8dee2aaSAndroid Build Coastguard Worker      "MemoryBarrier",
74*c8dee2aaSAndroid Build Coastguard Worker    ],
75*c8dee2aaSAndroid Build Coastguard Worker    // TODO: Remove 'optional' once Chrome sets this function in the interface.
76*c8dee2aaSAndroid Build Coastguard Worker    "optional": [
77*c8dee2aaSAndroid Build Coastguard Worker      "MemoryBarrier",
78*c8dee2aaSAndroid Build Coastguard Worker    ]
79*c8dee2aaSAndroid Build Coastguard Worker  },
80*c8dee2aaSAndroid Build Coastguard Worker
81*c8dee2aaSAndroid Build Coastguard Worker  {
82*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [3, 0], "ext": "<core>"},
83*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ARB_vertex_array_object"},
84*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_APPLE_vertex_array_object"}],
85*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 0], "ext": "<core>"},
86*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_OES_vertex_array_object"}],
87*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": [{"min_version": [2, 0], "ext": "<core>"},
88*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_OES_vertex_array_object"},
89*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "OES_vertex_array_object"}],
90*c8dee2aaSAndroid Build Coastguard Worker
91*c8dee2aaSAndroid Build Coastguard Worker    // WebGL uses createVertexArray instead of genVertexArrays, but Emscripten
92*c8dee2aaSAndroid Build Coastguard Worker    // creates an alias called genVertexArray which papers over this difference.
93*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
94*c8dee2aaSAndroid Build Coastguard Worker      "BindVertexArray", "DeleteVertexArrays", "GenVertexArrays",
95*c8dee2aaSAndroid Build Coastguard Worker    ],
96*c8dee2aaSAndroid Build Coastguard Worker  },
97*c8dee2aaSAndroid Build Coastguard Worker
98*c8dee2aaSAndroid Build Coastguard Worker  {
99*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [4, 0], "ext": "<core>"},
100*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ARB_tessellation_shader"}],
101*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 2], "ext": "<core>"},
102*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_OES_tessellation_shader"}],
103*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
104*c8dee2aaSAndroid Build Coastguard Worker
105*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
106*c8dee2aaSAndroid Build Coastguard Worker      "PatchParameteri",
107*c8dee2aaSAndroid Build Coastguard Worker    ],
108*c8dee2aaSAndroid Build Coastguard Worker  },
109*c8dee2aaSAndroid Build Coastguard Worker
110*c8dee2aaSAndroid Build Coastguard Worker  {
111*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [3, 0], "ext": "<core>"}],
112*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 0], "ext": "GL_EXT_blend_func_extended"}],
113*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
114*c8dee2aaSAndroid Build Coastguard Worker
115*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
116*c8dee2aaSAndroid Build Coastguard Worker      "BindFragDataLocation",
117*c8dee2aaSAndroid Build Coastguard Worker    ],
118*c8dee2aaSAndroid Build Coastguard Worker  },
119*c8dee2aaSAndroid Build Coastguard Worker  {
120*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [3, 3], "ext": "<core>"},
121*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ARB_blend_func_extended"}],
122*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 0], "ext": "GL_EXT_blend_func_extended"}],
123*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
124*c8dee2aaSAndroid Build Coastguard Worker
125*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
126*c8dee2aaSAndroid Build Coastguard Worker      "BindFragDataLocationIndexed",
127*c8dee2aaSAndroid Build Coastguard Worker    ],
128*c8dee2aaSAndroid Build Coastguard Worker  },
129*c8dee2aaSAndroid Build Coastguard Worker
130*c8dee2aaSAndroid Build Coastguard Worker  {
131*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"ext": "GL_KHR_blend_equation_advanced"},
132*c8dee2aaSAndroid Build Coastguard Worker              {"ext": "GL_NV_blend_equation_advanced"}],
133*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"ext": "GL_KHR_blend_equation_advanced"},
134*c8dee2aaSAndroid Build Coastguard Worker              {"ext": "GL_NV_blend_equation_advanced"}],
135*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
136*c8dee2aaSAndroid Build Coastguard Worker
137*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
138*c8dee2aaSAndroid Build Coastguard Worker      "BlendBarrier",
139*c8dee2aaSAndroid Build Coastguard Worker    ],
140*c8dee2aaSAndroid Build Coastguard Worker  },
141*c8dee2aaSAndroid Build Coastguard Worker
142*c8dee2aaSAndroid Build Coastguard Worker  {
143*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [4, 4], "ext": "<core>"},
144*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ARB_clear_texture"}],
145*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"ext": "GL_EXT_clear_texture", "suffix": "EXT"}],
146*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
147*c8dee2aaSAndroid Build Coastguard Worker
148*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
149*c8dee2aaSAndroid Build Coastguard Worker      "ClearTexImage", "ClearTexSubImage",
150*c8dee2aaSAndroid Build Coastguard Worker    ],
151*c8dee2aaSAndroid Build Coastguard Worker    // https://bugs.chromium.org/p/skia/issues/detail?id=8913
152*c8dee2aaSAndroid Build Coastguard Worker    "optional": [
153*c8dee2aaSAndroid Build Coastguard Worker      "ClearTexImage", "ClearTexSubImage",
154*c8dee2aaSAndroid Build Coastguard Worker    ]
155*c8dee2aaSAndroid Build Coastguard Worker  },
156*c8dee2aaSAndroid Build Coastguard Worker
157*c8dee2aaSAndroid Build Coastguard Worker  {
158*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [3, 1], "ext": "<core>"},
159*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ARB_draw_instanced"},
160*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_EXT_draw_instanced"}],
161*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 0], "ext": "<core>"},
162*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_EXT_draw_instanced"},
163*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ANGLE_instanced_arrays"}],
164*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": [{"min_version": [2, 0], "ext": "<core>"}],
165*c8dee2aaSAndroid Build Coastguard Worker
166*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
167*c8dee2aaSAndroid Build Coastguard Worker      "DrawArraysInstanced", "DrawElementsInstanced",
168*c8dee2aaSAndroid Build Coastguard Worker    ]
169*c8dee2aaSAndroid Build Coastguard Worker  },
170*c8dee2aaSAndroid Build Coastguard Worker
171*c8dee2aaSAndroid Build Coastguard Worker  {
172*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [4, 2], "ext": "<core>"},
173*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ARB_base_instance"}],
174*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"ext": "GL_EXT_base_instance"},
175*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ANGLE_base_vertex_base_instance"}],
176*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": [{"ext": "GL_WEBGL_draw_instanced_base_vertex_base_instance"}],
177*c8dee2aaSAndroid Build Coastguard Worker
178*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
179*c8dee2aaSAndroid Build Coastguard Worker      "DrawArraysInstancedBaseInstance", "DrawElementsInstancedBaseVertexBaseInstance"
180*c8dee2aaSAndroid Build Coastguard Worker    ]
181*c8dee2aaSAndroid Build Coastguard Worker  },
182*c8dee2aaSAndroid Build Coastguard Worker
183*c8dee2aaSAndroid Build Coastguard Worker  { // ES 3.0 has glDrawBuffers but not glDrawBuffer
184*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"ext": "<core>"}],
185*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 0], "ext": "<core>"}],
186*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": [{"min_version": [2, 0], "ext": "<core>"}],
187*c8dee2aaSAndroid Build Coastguard Worker
188*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
189*c8dee2aaSAndroid Build Coastguard Worker      "DrawBuffers", "ReadBuffer",
190*c8dee2aaSAndroid Build Coastguard Worker    ]
191*c8dee2aaSAndroid Build Coastguard Worker  },
192*c8dee2aaSAndroid Build Coastguard Worker
193*c8dee2aaSAndroid Build Coastguard Worker  {
194*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [4, 0], "ext": "<core>"},
195*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ARB_draw_indirect"}],
196*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 1], "ext": "<core>"}],
197*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
198*c8dee2aaSAndroid Build Coastguard Worker
199*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
200*c8dee2aaSAndroid Build Coastguard Worker      "DrawArraysIndirect", "DrawElementsIndirect",
201*c8dee2aaSAndroid Build Coastguard Worker    ]
202*c8dee2aaSAndroid Build Coastguard Worker  },
203*c8dee2aaSAndroid Build Coastguard Worker
204*c8dee2aaSAndroid Build Coastguard Worker  {
205*c8dee2aaSAndroid Build Coastguard Worker    "GL":    null,
206*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"ext": "GL_ANGLE_base_vertex_base_instance"}],
207*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": [{"ext": "GL_WEBGL_multi_draw_instanced_base_vertex_base_instance"}],
208*c8dee2aaSAndroid Build Coastguard Worker
209*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
210*c8dee2aaSAndroid Build Coastguard Worker      "MultiDrawArraysInstancedBaseInstance", "MultiDrawElementsInstancedBaseVertexBaseInstance",
211*c8dee2aaSAndroid Build Coastguard Worker    ]
212*c8dee2aaSAndroid Build Coastguard Worker  },
213*c8dee2aaSAndroid Build Coastguard Worker
214*c8dee2aaSAndroid Build Coastguard Worker  { // glDrawRangeElements was added to ES in 3.0.
215*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"ext": "<core>"}],
216*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 0], "ext": "<core>"}],
217*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": [{"min_version": [2, 0], "ext": "<core>"}],
218*c8dee2aaSAndroid Build Coastguard Worker
219*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
220*c8dee2aaSAndroid Build Coastguard Worker      "DrawRangeElements",
221*c8dee2aaSAndroid Build Coastguard Worker    ]
222*c8dee2aaSAndroid Build Coastguard Worker  },
223*c8dee2aaSAndroid Build Coastguard Worker
224*c8dee2aaSAndroid Build Coastguard Worker  {
225*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [3, 2], "ext": "<core>"},
226*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ARB_texture_multisample"}],
227*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 1], "ext": "<core>"}],
228*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
229*c8dee2aaSAndroid Build Coastguard Worker
230*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
231*c8dee2aaSAndroid Build Coastguard Worker      "GetMultisamplefv",
232*c8dee2aaSAndroid Build Coastguard Worker    ]
233*c8dee2aaSAndroid Build Coastguard Worker  },
234*c8dee2aaSAndroid Build Coastguard Worker
235*c8dee2aaSAndroid Build Coastguard Worker  // glGetTexLevelParameteriv was added to ES in 3.1.
236*c8dee2aaSAndroid Build Coastguard Worker  {
237*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"ext": "<core>"}],
238*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 1], "ext": "<core>"}],
239*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
240*c8dee2aaSAndroid Build Coastguard Worker
241*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
242*c8dee2aaSAndroid Build Coastguard Worker      "GetTexLevelParameteriv",
243*c8dee2aaSAndroid Build Coastguard Worker    ]
244*c8dee2aaSAndroid Build Coastguard Worker  },
245*c8dee2aaSAndroid Build Coastguard Worker
246*c8dee2aaSAndroid Build Coastguard Worker  {
247*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [4, 3], "ext": "<core>"},
248*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ARB_multi_draw_indirect"}],
249*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"ext": "GL_EXT_multi_draw_indirect"}],
250*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
251*c8dee2aaSAndroid Build Coastguard Worker
252*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
253*c8dee2aaSAndroid Build Coastguard Worker      "MultiDrawArraysIndirect", "MultiDrawElementsIndirect",
254*c8dee2aaSAndroid Build Coastguard Worker    ]
255*c8dee2aaSAndroid Build Coastguard Worker  },
256*c8dee2aaSAndroid Build Coastguard Worker
257*c8dee2aaSAndroid Build Coastguard Worker  {
258*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [3, 1], "ext": "<core>"}],
259*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 2], "ext": "<core>"},
260*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_OES_texture_buffer"},
261*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_EXT_texture_buffer"}],
262*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
263*c8dee2aaSAndroid Build Coastguard Worker
264*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
265*c8dee2aaSAndroid Build Coastguard Worker      "TexBuffer",
266*c8dee2aaSAndroid Build Coastguard Worker    ]
267*c8dee2aaSAndroid Build Coastguard Worker  },
268*c8dee2aaSAndroid Build Coastguard Worker  {
269*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [4, 3], "ext": "<core>"}],
270*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 2], "ext": "<core>"},
271*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_OES_texture_buffer"},
272*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_EXT_texture_buffer"}],
273*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
274*c8dee2aaSAndroid Build Coastguard Worker
275*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
276*c8dee2aaSAndroid Build Coastguard Worker      "TexBufferRange",
277*c8dee2aaSAndroid Build Coastguard Worker    ]
278*c8dee2aaSAndroid Build Coastguard Worker  },
279*c8dee2aaSAndroid Build Coastguard Worker
280*c8dee2aaSAndroid Build Coastguard Worker    // GL_EXT_texture_storage is part of desktop 4.2
281*c8dee2aaSAndroid Build Coastguard Worker    // There is a desktop ARB extension and an ES+desktop EXT extension
282*c8dee2aaSAndroid Build Coastguard Worker  {
283*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [4, 2], "ext": "<core>"},
284*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ARB_texture_storage"},
285*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_EXT_texture_storage"}],
286*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 0], "ext": "<core>"},
287*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_EXT_texture_storage"}],
288*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": [{"min_version": [2, 0], "ext": "<core>"}],
289*c8dee2aaSAndroid Build Coastguard Worker
290*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
291*c8dee2aaSAndroid Build Coastguard Worker      "TexStorage2D",
292*c8dee2aaSAndroid Build Coastguard Worker    ]
293*c8dee2aaSAndroid Build Coastguard Worker  },
294*c8dee2aaSAndroid Build Coastguard Worker
295*c8dee2aaSAndroid Build Coastguard Worker  // glTextureBarrier is part of desktop 4.5. There are also ARB and NV extensions.
296*c8dee2aaSAndroid Build Coastguard Worker  {
297*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [4, 5], "ext": "<core>"},
298*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ARB_texture_barrier"},
299*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_NV_texture_barrier"}],
300*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"ext": "GL_NV_texture_barrier"}],
301*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
302*c8dee2aaSAndroid Build Coastguard Worker
303*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
304*c8dee2aaSAndroid Build Coastguard Worker      "TextureBarrier",
305*c8dee2aaSAndroid Build Coastguard Worker    ]
306*c8dee2aaSAndroid Build Coastguard Worker  },
307*c8dee2aaSAndroid Build Coastguard Worker
308*c8dee2aaSAndroid Build Coastguard Worker  {
309*c8dee2aaSAndroid Build Coastguard Worker    "GL":    null, // Not supported
310*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"ext": "GL_EXT_discard_framebuffer"}],
311*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
312*c8dee2aaSAndroid Build Coastguard Worker
313*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
314*c8dee2aaSAndroid Build Coastguard Worker      "DiscardFramebuffer",
315*c8dee2aaSAndroid Build Coastguard Worker    ]
316*c8dee2aaSAndroid Build Coastguard Worker  },
317*c8dee2aaSAndroid Build Coastguard Worker
318*c8dee2aaSAndroid Build Coastguard Worker  {
319*c8dee2aaSAndroid Build Coastguard Worker    "GL":    null, // Not supported
320*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"ext": "GL_QCOM_tiled_rendering"}],
321*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
322*c8dee2aaSAndroid Build Coastguard Worker
323*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
324*c8dee2aaSAndroid Build Coastguard Worker      "StartTiling", "EndTiling",
325*c8dee2aaSAndroid Build Coastguard Worker    ],
326*c8dee2aaSAndroid Build Coastguard Worker    // https://github.com/flutter/flutter/issues/47164
327*c8dee2aaSAndroid Build Coastguard Worker    // https://github.com/flutter/flutter/issues/47804
328*c8dee2aaSAndroid Build Coastguard Worker    "optional": [
329*c8dee2aaSAndroid Build Coastguard Worker      "StartTiling", "EndTiling",
330*c8dee2aaSAndroid Build Coastguard Worker    ]
331*c8dee2aaSAndroid Build Coastguard Worker  },
332*c8dee2aaSAndroid Build Coastguard Worker
333*c8dee2aaSAndroid Build Coastguard Worker  {
334*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [3, 2], "ext": "<core>"},
335*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ARB_instanced_arrays"}],
336*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 0], "ext": "<core>"},
337*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_EXT_instanced_arrays"},
338*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ANGLE_instanced_arrays"}],
339*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": [{"min_version": [2, 0], "ext": "<core>"}],
340*c8dee2aaSAndroid Build Coastguard Worker
341*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
342*c8dee2aaSAndroid Build Coastguard Worker      "VertexAttribDivisor",
343*c8dee2aaSAndroid Build Coastguard Worker    ]
344*c8dee2aaSAndroid Build Coastguard Worker  },
345*c8dee2aaSAndroid Build Coastguard Worker  {
346*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [3, 0], "ext": "<core>"}],
347*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 0], "ext": "<core>"}],
348*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": [{"min_version": [2, 0], "ext": "<core>"}],
349*c8dee2aaSAndroid Build Coastguard Worker
350*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
351*c8dee2aaSAndroid Build Coastguard Worker      "VertexAttribIPointer",
352*c8dee2aaSAndroid Build Coastguard Worker    ]
353*c8dee2aaSAndroid Build Coastguard Worker  },
354*c8dee2aaSAndroid Build Coastguard Worker
355*c8dee2aaSAndroid Build Coastguard Worker  // FrameBuffer Object (FBO) related calls
356*c8dee2aaSAndroid Build Coastguard Worker  {
357*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [3, 0], "ext": "<core>"},
358*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ARB_framebuffer_object"},
359*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_EXT_framebuffer_object"}],
360*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"ext": "<core>"}], // These are all in ES 2.0 and above
361*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": [{"ext": "<core>"}],
362*c8dee2aaSAndroid Build Coastguard Worker
363*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
364*c8dee2aaSAndroid Build Coastguard Worker      "BindFramebuffer", "BindRenderbuffer", "CheckFramebufferStatus",
365*c8dee2aaSAndroid Build Coastguard Worker      "DeleteFramebuffers", "DeleteRenderbuffers", "FramebufferRenderbuffer",
366*c8dee2aaSAndroid Build Coastguard Worker      "FramebufferTexture2D", "GenFramebuffers", "GenRenderbuffers", "GenerateMipmap",
367*c8dee2aaSAndroid Build Coastguard Worker      "GetFramebufferAttachmentParameteriv", "GetRenderbufferParameteriv",
368*c8dee2aaSAndroid Build Coastguard Worker      "RenderbufferStorage",
369*c8dee2aaSAndroid Build Coastguard Worker    ],
370*c8dee2aaSAndroid Build Coastguard Worker  },
371*c8dee2aaSAndroid Build Coastguard Worker  {
372*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [3, 0], "ext": "<core>"},
373*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ARB_framebuffer_object"},
374*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_EXT_framebuffer_blit"}],
375*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 0], "ext": "<core>"},
376*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_NV_framebuffer_blit"},
377*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_CHROMIUM_framebuffer_multisample"},
378*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ANGLE_framebuffer_blit"}],
379*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": [{"min_version": [2, 0], "ext": "<core>"}],
380*c8dee2aaSAndroid Build Coastguard Worker
381*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
382*c8dee2aaSAndroid Build Coastguard Worker      "BlitFramebuffer",
383*c8dee2aaSAndroid Build Coastguard Worker    ],
384*c8dee2aaSAndroid Build Coastguard Worker  },
385*c8dee2aaSAndroid Build Coastguard Worker  {
386*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [3, 0], "ext": "<core>"},
387*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ARB_framebuffer_object"},
388*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_EXT_framebuffer_multisample"}],
389*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 0], "ext": "<core>"},
390*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_CHROMIUM_framebuffer_multisample"},
391*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ANGLE_framebuffer_multisample"}],
392*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": [{"min_version": [2, 0], "ext": "<core>"}],
393*c8dee2aaSAndroid Build Coastguard Worker
394*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
395*c8dee2aaSAndroid Build Coastguard Worker      "RenderbufferStorageMultisample",
396*c8dee2aaSAndroid Build Coastguard Worker    ],
397*c8dee2aaSAndroid Build Coastguard Worker  },
398*c8dee2aaSAndroid Build Coastguard Worker
399*c8dee2aaSAndroid Build Coastguard Worker  {
400*c8dee2aaSAndroid Build Coastguard Worker    "GL":    null,
401*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"ext": "GL_CHROMIUM_map_sub"}],
402*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
403*c8dee2aaSAndroid Build Coastguard Worker
404*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
405*c8dee2aaSAndroid Build Coastguard Worker      "MapBufferSubData", "MapTexSubImage2D", "UnmapBufferSubData",
406*c8dee2aaSAndroid Build Coastguard Worker      "UnmapTexSubImage2D"
407*c8dee2aaSAndroid Build Coastguard Worker    ],
408*c8dee2aaSAndroid Build Coastguard Worker  },
409*c8dee2aaSAndroid Build Coastguard Worker
410*c8dee2aaSAndroid Build Coastguard Worker  {
411*c8dee2aaSAndroid Build Coastguard Worker    "GL":    null,
412*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"ext": "GL_EXT_multisampled_render_to_texture"},
413*c8dee2aaSAndroid Build Coastguard Worker              {"ext": "GL_IMG_multisampled_render_to_texture"}],
414*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
415*c8dee2aaSAndroid Build Coastguard Worker
416*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
417*c8dee2aaSAndroid Build Coastguard Worker      "FramebufferTexture2DMultisample",
418*c8dee2aaSAndroid Build Coastguard Worker    ],
419*c8dee2aaSAndroid Build Coastguard Worker  },
420*c8dee2aaSAndroid Build Coastguard Worker  {
421*c8dee2aaSAndroid Build Coastguard Worker    "GL":    null,
422*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"ext": "GL_EXT_multisampled_render_to_texture"}],
423*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
424*c8dee2aaSAndroid Build Coastguard Worker
425*c8dee2aaSAndroid Build Coastguard Worker    "hardcode_functions" : [
426*c8dee2aaSAndroid Build Coastguard Worker      {
427*c8dee2aaSAndroid Build Coastguard Worker        "ptr_name": "fRenderbufferStorageMultisampleES2EXT",
428*c8dee2aaSAndroid Build Coastguard Worker        "cast_name": "GrGLRenderbufferStorageMultisampleFn",
429*c8dee2aaSAndroid Build Coastguard Worker        "get_name": "glRenderbufferStorageMultisampleEXT",
430*c8dee2aaSAndroid Build Coastguard Worker      }
431*c8dee2aaSAndroid Build Coastguard Worker    ]
432*c8dee2aaSAndroid Build Coastguard Worker  },
433*c8dee2aaSAndroid Build Coastguard Worker  {
434*c8dee2aaSAndroid Build Coastguard Worker    "GL":    null,
435*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"ext": "GL_IMG_multisampled_render_to_texture"}],
436*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
437*c8dee2aaSAndroid Build Coastguard Worker
438*c8dee2aaSAndroid Build Coastguard Worker    "hardcode_functions" : [
439*c8dee2aaSAndroid Build Coastguard Worker      {
440*c8dee2aaSAndroid Build Coastguard Worker        "ptr_name": "fRenderbufferStorageMultisampleES2EXT",
441*c8dee2aaSAndroid Build Coastguard Worker        "cast_name": "GrGLRenderbufferStorageMultisampleFn",
442*c8dee2aaSAndroid Build Coastguard Worker        "get_name": "glRenderbufferStorageMultisampleIMG",
443*c8dee2aaSAndroid Build Coastguard Worker      }
444*c8dee2aaSAndroid Build Coastguard Worker    ]
445*c8dee2aaSAndroid Build Coastguard Worker  },
446*c8dee2aaSAndroid Build Coastguard Worker  {
447*c8dee2aaSAndroid Build Coastguard Worker    "GL":    null,
448*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"ext": "GL_APPLE_framebuffer_multisample"}],
449*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
450*c8dee2aaSAndroid Build Coastguard Worker
451*c8dee2aaSAndroid Build Coastguard Worker    "functions" : ["ResolveMultisampleFramebuffer"],
452*c8dee2aaSAndroid Build Coastguard Worker    "hardcode_functions" : [
453*c8dee2aaSAndroid Build Coastguard Worker      {
454*c8dee2aaSAndroid Build Coastguard Worker        "ptr_name": "fRenderbufferStorageMultisampleES2APPLE",
455*c8dee2aaSAndroid Build Coastguard Worker        "cast_name": "GrGLRenderbufferStorageMultisampleFn",
456*c8dee2aaSAndroid Build Coastguard Worker        "get_name": "glRenderbufferStorageMultisampleAPPLE",
457*c8dee2aaSAndroid Build Coastguard Worker      }
458*c8dee2aaSAndroid Build Coastguard Worker    ]
459*c8dee2aaSAndroid Build Coastguard Worker  },
460*c8dee2aaSAndroid Build Coastguard Worker
461*c8dee2aaSAndroid Build Coastguard Worker    // There are several APIs for buffer mapping:
462*c8dee2aaSAndroid Build Coastguard Worker    // ES2 + GL_OES_mapbuffer: MapBufferOES and UnmapBufferOES
463*c8dee2aaSAndroid Build Coastguard Worker    // ES2 + GL_EXT_map_buffer_range: Adds MapBufferRangeEXT and FlushMappedBufferRangeEXT
464*c8dee2aaSAndroid Build Coastguard Worker    // ES3: MapBufferRange, FlushMappedBufferRange, and UnmapBuffer are core (so no suffix).
465*c8dee2aaSAndroid Build Coastguard Worker    //
466*c8dee2aaSAndroid Build Coastguard Worker    // MapBuffer is not part of ES3, but implementations may still report the OES versions of
467*c8dee2aaSAndroid Build Coastguard Worker    // MapBuffer and UnmapBuffer, per the older GL_OES_mapbuffer extension. Some implementations
468*c8dee2aaSAndroid Build Coastguard Worker    // let us mix the newer MapBufferRange with the older UnmapBufferOES, but we've hit others that
469*c8dee2aaSAndroid Build Coastguard Worker    // don't permit it. Note that in GrGLBuffer, we choose which API to use based on version and
470*c8dee2aaSAndroid Build Coastguard Worker    // extensions. This code is written so that we never mix OES and non-OES functions.
471*c8dee2aaSAndroid Build Coastguard Worker  {
472*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"ext": "<core>"}],
473*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"ext": "GL_OES_mapbuffer"}],
474*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
475*c8dee2aaSAndroid Build Coastguard Worker
476*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
477*c8dee2aaSAndroid Build Coastguard Worker      "MapBuffer",
478*c8dee2aaSAndroid Build Coastguard Worker    ],
479*c8dee2aaSAndroid Build Coastguard Worker  },
480*c8dee2aaSAndroid Build Coastguard Worker  {
481*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"ext": "<core>"}],
482*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 0], "ext": "<core>"},
483*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_OES_mapbuffer"}],
484*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null, // explicitly removed https://www.khronos.org/registry/webgl/specs/2.0/#5.14
485*c8dee2aaSAndroid Build Coastguard Worker
486*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
487*c8dee2aaSAndroid Build Coastguard Worker      "UnmapBuffer",
488*c8dee2aaSAndroid Build Coastguard Worker    ],
489*c8dee2aaSAndroid Build Coastguard Worker  },
490*c8dee2aaSAndroid Build Coastguard Worker  {
491*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [3, 0], "ext": "<core>"},
492*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ARB_map_buffer_range"}],
493*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 0], "ext": "<core>"},
494*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_EXT_map_buffer_range"}],
495*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null, // explicitly removed https://www.khronos.org/registry/webgl/specs/2.0/#5.14
496*c8dee2aaSAndroid Build Coastguard Worker
497*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
498*c8dee2aaSAndroid Build Coastguard Worker      // These functions are added to the 3.0 version of both GLES and GL.
499*c8dee2aaSAndroid Build Coastguard Worker      "MapBufferRange", "FlushMappedBufferRange",
500*c8dee2aaSAndroid Build Coastguard Worker    ],
501*c8dee2aaSAndroid Build Coastguard Worker  },
502*c8dee2aaSAndroid Build Coastguard Worker
503*c8dee2aaSAndroid Build Coastguard Worker  {
504*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"ext": "GL_EXT_debug_marker"}],
505*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"ext": "GL_EXT_debug_marker"}],
506*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
507*c8dee2aaSAndroid Build Coastguard Worker
508*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
509*c8dee2aaSAndroid Build Coastguard Worker      "InsertEventMarker", "PushGroupMarker", "PopGroupMarker"
510*c8dee2aaSAndroid Build Coastguard Worker    ],
511*c8dee2aaSAndroid Build Coastguard Worker  },
512*c8dee2aaSAndroid Build Coastguard Worker
513*c8dee2aaSAndroid Build Coastguard Worker  {
514*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [3, 1], "ext": "<core>"},
515*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ARB_copy_buffer"}],
516*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 0], "ext": "<core>"},
517*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_NV_copy_buffer"}],
518*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": [{"min_version": [2, 0], "ext": "<core>"},],
519*c8dee2aaSAndroid Build Coastguard Worker
520*c8dee2aaSAndroid Build Coastguard Worker    "functions": ["CopyBufferSubData",],
521*c8dee2aaSAndroid Build Coastguard Worker  },
522*c8dee2aaSAndroid Build Coastguard Worker
523*c8dee2aaSAndroid Build Coastguard Worker  {
524*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [4, 3], "ext": "<core>"},
525*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_KHR_debug", "suffix": ""}],
526*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"ext": "GL_KHR_debug"}],
527*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
528*c8dee2aaSAndroid Build Coastguard Worker
529*c8dee2aaSAndroid Build Coastguard Worker    // In OpenGL (but not ES), KHR_debug defines these methods to have no suffix.
530*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
531*c8dee2aaSAndroid Build Coastguard Worker      "DebugMessageControl", "DebugMessageInsert", "DebugMessageCallback",
532*c8dee2aaSAndroid Build Coastguard Worker      "GetDebugMessageLog", "PushDebugGroup", "PopDebugGroup", "ObjectLabel",
533*c8dee2aaSAndroid Build Coastguard Worker    ],
534*c8dee2aaSAndroid Build Coastguard Worker  },
535*c8dee2aaSAndroid Build Coastguard Worker
536*c8dee2aaSAndroid Build Coastguard Worker  {
537*c8dee2aaSAndroid Build Coastguard Worker    "GL":    null,
538*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"ext": "GL_CHROMIUM_bind_uniform_location"}],
539*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
540*c8dee2aaSAndroid Build Coastguard Worker
541*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
542*c8dee2aaSAndroid Build Coastguard Worker      "BindUniformLocation",
543*c8dee2aaSAndroid Build Coastguard Worker    ],
544*c8dee2aaSAndroid Build Coastguard Worker  },
545*c8dee2aaSAndroid Build Coastguard Worker
546*c8dee2aaSAndroid Build Coastguard Worker  {
547*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"ext": "GL_EXT_window_rectangles"}],
548*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"ext": "GL_EXT_window_rectangles"}],
549*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
550*c8dee2aaSAndroid Build Coastguard Worker
551*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
552*c8dee2aaSAndroid Build Coastguard Worker      "WindowRectangles",
553*c8dee2aaSAndroid Build Coastguard Worker    ],
554*c8dee2aaSAndroid Build Coastguard Worker  },
555*c8dee2aaSAndroid Build Coastguard Worker
556*c8dee2aaSAndroid Build Coastguard Worker  {
557*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [3, 2], "ext": "<core>"},
558*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ARB_sync"}],
559*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 0], "ext": "<core>"},
560*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_APPLE_sync"}],
561*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": [{"min_version": [2, 0], "ext": "<core>"}],
562*c8dee2aaSAndroid Build Coastguard Worker
563*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
564*c8dee2aaSAndroid Build Coastguard Worker      "ClientWaitSync", "DeleteSync", "FenceSync",
565*c8dee2aaSAndroid Build Coastguard Worker      "IsSync", "WaitSync"
566*c8dee2aaSAndroid Build Coastguard Worker    ],
567*c8dee2aaSAndroid Build Coastguard Worker  },
568*c8dee2aaSAndroid Build Coastguard Worker
569*c8dee2aaSAndroid Build Coastguard Worker  {  // getInternalformativ was added in GL 4.2, ES 3.0, and with
570*c8dee2aaSAndroid Build Coastguard Worker     // extension ARB_internalformat_query
571*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [4, 2], "ext": "<core>"},
572*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ARB_internalformat_query"}],
573*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 0], "ext": "<core>"}],
574*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
575*c8dee2aaSAndroid Build Coastguard Worker
576*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
577*c8dee2aaSAndroid Build Coastguard Worker      "GetInternalformativ"
578*c8dee2aaSAndroid Build Coastguard Worker    ],
579*c8dee2aaSAndroid Build Coastguard Worker  },
580*c8dee2aaSAndroid Build Coastguard Worker
581*c8dee2aaSAndroid Build Coastguard Worker  // GetProgramBinary and ProgramBinary are available with an ES2 extension...
582*c8dee2aaSAndroid Build Coastguard Worker  {
583*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [4, 1], "ext": "<core>"}],
584*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 0], "ext": "<core>"},
585*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_OES_get_program_binary"}],
586*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null, // explicitly not supported in WebGL 2.0
587*c8dee2aaSAndroid Build Coastguard Worker
588*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
589*c8dee2aaSAndroid Build Coastguard Worker      "GetProgramBinary", "ProgramBinary",
590*c8dee2aaSAndroid Build Coastguard Worker    ],
591*c8dee2aaSAndroid Build Coastguard Worker  },
592*c8dee2aaSAndroid Build Coastguard Worker
593*c8dee2aaSAndroid Build Coastguard Worker  // ... but the related ProgramParameteri is only in ES3
594*c8dee2aaSAndroid Build Coastguard Worker  {
595*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [4, 1], "ext": "<core>"}],
596*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 0], "ext": "<core>"}],
597*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null, // explicitly not supported in WebGL 2.0
598*c8dee2aaSAndroid Build Coastguard Worker
599*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
600*c8dee2aaSAndroid Build Coastguard Worker      "ProgramParameteri",
601*c8dee2aaSAndroid Build Coastguard Worker    ],
602*c8dee2aaSAndroid Build Coastguard Worker  },
603*c8dee2aaSAndroid Build Coastguard Worker
604*c8dee2aaSAndroid Build Coastguard Worker  {
605*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [3, 2], "ext": "<core>"},
606*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ARB_sampler_objects"}],
607*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 0], "ext": "<core>"}],
608*c8dee2aaSAndroid Build Coastguard Worker    "WebGL":  [{"min_version": [2, 0], "ext": "<core>"}],
609*c8dee2aaSAndroid Build Coastguard Worker
610*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
611*c8dee2aaSAndroid Build Coastguard Worker      "BindSampler", "DeleteSamplers", "GenSamplers",
612*c8dee2aaSAndroid Build Coastguard Worker      "SamplerParameterf", "SamplerParameteri", "SamplerParameteriv",
613*c8dee2aaSAndroid Build Coastguard Worker    ],
614*c8dee2aaSAndroid Build Coastguard Worker  },
615*c8dee2aaSAndroid Build Coastguard Worker
616*c8dee2aaSAndroid Build Coastguard Worker  {
617*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"ext": "<core>"}],
618*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 0], "ext": "<core>"},
619*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_EXT_disjoint_timer_query"}],
620*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": [{"min_version": [2, 0], "ext": "<core>"},
621*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_EXT_disjoint_timer_query"},
622*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "EXT_disjoint_timer_query"}],
623*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
624*c8dee2aaSAndroid Build Coastguard Worker      "GenQueries", "DeleteQueries", "BeginQuery", "EndQuery",
625*c8dee2aaSAndroid Build Coastguard Worker      "GetQueryObjectuiv", "GetQueryiv",
626*c8dee2aaSAndroid Build Coastguard Worker    ]
627*c8dee2aaSAndroid Build Coastguard Worker  },
628*c8dee2aaSAndroid Build Coastguard Worker  {
629*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [3, 3], "ext": "<core>"},
630*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ARB_timer_query"}],
631*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"ext": "GL_EXT_disjoint_timer_query"}],
632*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": [{"ext": "GL_EXT_disjoint_timer_query"},
633*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "EXT_disjoint_timer_query"},
634*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_EXT_disjoint_timer_query_webgl2"},
635*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "EXT_disjoint_timer_query_webgl2"}],
636*c8dee2aaSAndroid Build Coastguard Worker
637*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
638*c8dee2aaSAndroid Build Coastguard Worker      "QueryCounter",
639*c8dee2aaSAndroid Build Coastguard Worker    ],
640*c8dee2aaSAndroid Build Coastguard Worker  },
641*c8dee2aaSAndroid Build Coastguard Worker
642*c8dee2aaSAndroid Build Coastguard Worker  {
643*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [3, 3], "ext": "<core>"},
644*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ARB_timer_query"},
645*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_EXT_timer_query"}],
646*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"ext": "GL_EXT_disjoint_timer_query"},],
647*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": [{"ext": "GL_EXT_disjoint_timer_query"},
648*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "EXT_disjoint_timer_query"},
649*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_EXT_disjoint_timer_query_webgl2"},
650*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "EXT_disjoint_timer_query_webgl2"}],
651*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
652*c8dee2aaSAndroid Build Coastguard Worker      "GetQueryObjecti64v", "GetQueryObjectui64v",
653*c8dee2aaSAndroid Build Coastguard Worker    ],
654*c8dee2aaSAndroid Build Coastguard Worker  },
655*c8dee2aaSAndroid Build Coastguard Worker
656*c8dee2aaSAndroid Build Coastguard Worker  {
657*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [4, 3], "ext": "<core>"},
658*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ARB_invalidate_subdata"}],
659*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"ext": "GL_ARB_invalidate_subdata"}],
660*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
661*c8dee2aaSAndroid Build Coastguard Worker
662*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
663*c8dee2aaSAndroid Build Coastguard Worker      "InvalidateBufferData", "InvalidateBufferSubData", "InvalidateTexImage",
664*c8dee2aaSAndroid Build Coastguard Worker      "InvalidateTexSubImage",
665*c8dee2aaSAndroid Build Coastguard Worker    ],
666*c8dee2aaSAndroid Build Coastguard Worker  },
667*c8dee2aaSAndroid Build Coastguard Worker  {  // ES 3.0 adds the framebuffer functions but not the others.
668*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [4, 3], "ext": "<core>"},
669*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ARB_invalidate_subdata"}],
670*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"min_version": [3, 0], "ext": "<core>"},
671*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ARB_invalidate_subdata"}],
672*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": [{"min_version": [2, 0], "ext": "<core>"}],
673*c8dee2aaSAndroid Build Coastguard Worker
674*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
675*c8dee2aaSAndroid Build Coastguard Worker      "InvalidateFramebuffer", "InvalidateSubFramebuffer",
676*c8dee2aaSAndroid Build Coastguard Worker    ],
677*c8dee2aaSAndroid Build Coastguard Worker  },
678*c8dee2aaSAndroid Build Coastguard Worker
679*c8dee2aaSAndroid Build Coastguard Worker  {
680*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"min_version": [4, 3], "ext": "<core>"},
681*c8dee2aaSAndroid Build Coastguard Worker              {/*    else if      */  "ext": "GL_ARB_ES2_compatibility"}],
682*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"ext": "<core>"}],
683*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": [{"ext": "<core>"}],
684*c8dee2aaSAndroid Build Coastguard Worker
685*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
686*c8dee2aaSAndroid Build Coastguard Worker      "GetShaderPrecisionFormat",
687*c8dee2aaSAndroid Build Coastguard Worker    ],
688*c8dee2aaSAndroid Build Coastguard Worker  },
689*c8dee2aaSAndroid Build Coastguard Worker
690*c8dee2aaSAndroid Build Coastguard Worker  {
691*c8dee2aaSAndroid Build Coastguard Worker    "GL":    [{"ext": "GL_NV_fence"}],
692*c8dee2aaSAndroid Build Coastguard Worker    "GLES":  [{"ext": "GL_NV_fence"}],
693*c8dee2aaSAndroid Build Coastguard Worker    "WebGL": null,
694*c8dee2aaSAndroid Build Coastguard Worker
695*c8dee2aaSAndroid Build Coastguard Worker    "functions": [
696*c8dee2aaSAndroid Build Coastguard Worker      "DeleteFences", "FinishFence", "GenFences", "SetFence", "TestFence",
697*c8dee2aaSAndroid Build Coastguard Worker    ],
698*c8dee2aaSAndroid Build Coastguard Worker  }
699*c8dee2aaSAndroid Build Coastguard Worker]
700