xref: /aosp_15_r20/external/skia/src/gpu/ganesh/gl/GrGLAssembleGLESInterfaceAutogen.cpp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2019 Google LLC
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  *
7  * THIS FILE IS AUTOGENERATED
8  * Make edits to tools/gpu/gl/interface/templates.go or they will
9  * be overwritten.
10  */
11 
12 #include "include/core/SkRefCnt.h"
13 #include "include/gpu/ganesh/gl/GrGLAssembleHelpers.h"
14 #include "include/gpu/ganesh/gl/GrGLAssembleInterface.h"
15 #include "include/gpu/ganesh/gl/GrGLExtensions.h"
16 #include "include/gpu/ganesh/gl/GrGLFunctions.h"
17 #include "include/gpu/ganesh/gl/GrGLInterface.h"
18 #include "include/gpu/ganesh/gl/GrGLTypes.h"
19 #include "src/gpu/ganesh/gl/GrGLDefines.h"
20 #include "src/gpu/ganesh/gl/GrGLUtil.h"
21 
22 #define GET_PROC(F) functions->f##F = (GrGL##F##Fn*)get(ctx, "gl" #F)
23 #define GET_PROC_SUFFIX(F, S) functions->f##F = (GrGL##F##Fn*)get(ctx, "gl" #F #S)
24 #define GET_PROC_LOCAL(F) GrGL##F##Fn* F = (GrGL##F##Fn*)get(ctx, "gl" #F)
25 
26 #define GET_EGL_PROC_SUFFIX(F, S) functions->fEGL##F = (GrEGL##F##Fn*)get(ctx, "egl" #F #S)
27 
28 #if SK_DISABLE_GL_ES_INTERFACE
GrGLMakeAssembledGLESInterface(void * ctx,GrGLGetProc get)29 sk_sp<const GrGLInterface> GrGLMakeAssembledGLESInterface(void *ctx, GrGLGetProc get) {
30     return nullptr;
31 }
32 #else
GrGLMakeAssembledGLESInterface(void * ctx,GrGLGetProc get)33 sk_sp<const GrGLInterface> GrGLMakeAssembledGLESInterface(void *ctx, GrGLGetProc get) {
34     GET_PROC_LOCAL(GetString);
35     if (nullptr == GetString) {
36         return nullptr;
37     }
38 
39     const char* verStr = reinterpret_cast<const char*>(GetString(GR_GL_VERSION));
40     GrGLVersion glVer = GrGLGetVersionFromString(verStr);
41 
42     if (glVer < GR_GL_VER(2,0)) {
43         return nullptr;
44     }
45 
46     GET_PROC_LOCAL(GetIntegerv);
47     GET_PROC_LOCAL(GetStringi);
48     GrEGLQueryStringFn* queryString;
49     GrEGLDisplay display;
50     GrGetEGLQueryAndDisplay(&queryString, &display, ctx, get);
51     GrGLExtensions extensions;
52     if (!extensions.init(kGLES_GrGLStandard, GetString, GetStringi, GetIntegerv, queryString,
53                          display)) {
54         return nullptr;
55     }
56 
57     sk_sp<GrGLInterface> interface(new GrGLInterface);
58     GrGLInterface::Functions* functions = &interface->fFunctions;
59 
60     // Autogenerated content follows
61     GET_PROC(ActiveTexture);
62     GET_PROC(AttachShader);
63     GET_PROC(BindAttribLocation);
64     GET_PROC(BindBuffer);
65     GET_PROC(BindTexture);
66     GET_PROC(BlendColor);
67     GET_PROC(BlendEquation);
68     GET_PROC(BlendFunc);
69     GET_PROC(BufferData);
70     GET_PROC(BufferSubData);
71     GET_PROC(Clear);
72     GET_PROC(ClearColor);
73     GET_PROC(ClearStencil);
74     GET_PROC(ColorMask);
75     GET_PROC(CompileShader);
76     GET_PROC(CompressedTexImage2D);
77     GET_PROC(CompressedTexSubImage2D);
78     GET_PROC(CopyTexSubImage2D);
79     GET_PROC(CreateProgram);
80     GET_PROC(CreateShader);
81     GET_PROC(CullFace);
82     GET_PROC(DeleteBuffers);
83     GET_PROC(DeleteProgram);
84     GET_PROC(DeleteShader);
85     GET_PROC(DeleteTextures);
86     GET_PROC(DepthMask);
87     GET_PROC(Disable);
88     GET_PROC(DisableVertexAttribArray);
89     GET_PROC(DrawArrays);
90     GET_PROC(DrawElements);
91     GET_PROC(Enable);
92     GET_PROC(EnableVertexAttribArray);
93     GET_PROC(Finish);
94     GET_PROC(Flush);
95     GET_PROC(FrontFace);
96     GET_PROC(GenBuffers);
97     GET_PROC(GenTextures);
98     GET_PROC(GetBufferParameteriv);
99     GET_PROC(GetError);
100     GET_PROC(GetFloatv);
101     GET_PROC(GetIntegerv);
102     GET_PROC(GetProgramInfoLog);
103     GET_PROC(GetProgramiv);
104     GET_PROC(GetShaderInfoLog);
105     GET_PROC(GetShaderiv);
106     GET_PROC(GetString);
107     GET_PROC(GetUniformLocation);
108     GET_PROC(IsTexture);
109     GET_PROC(LineWidth);
110     GET_PROC(LinkProgram);
111     GET_PROC(PixelStorei);
112     GET_PROC(ReadPixels);
113     GET_PROC(Scissor);
114     GET_PROC(ShaderSource);
115     GET_PROC(StencilFunc);
116     GET_PROC(StencilFuncSeparate);
117     GET_PROC(StencilMask);
118     GET_PROC(StencilMaskSeparate);
119     GET_PROC(StencilOp);
120     GET_PROC(StencilOpSeparate);
121     GET_PROC(TexImage2D);
122     GET_PROC(TexParameterf);
123     GET_PROC(TexParameterfv);
124     GET_PROC(TexParameteri);
125     GET_PROC(TexParameteriv);
126     GET_PROC(TexSubImage2D);
127     GET_PROC(Uniform1f);
128     GET_PROC(Uniform1fv);
129     GET_PROC(Uniform1i);
130     GET_PROC(Uniform1iv);
131     GET_PROC(Uniform2f);
132     GET_PROC(Uniform2fv);
133     GET_PROC(Uniform2i);
134     GET_PROC(Uniform2iv);
135     GET_PROC(Uniform3f);
136     GET_PROC(Uniform3fv);
137     GET_PROC(Uniform3i);
138     GET_PROC(Uniform3iv);
139     GET_PROC(Uniform4f);
140     GET_PROC(Uniform4fv);
141     GET_PROC(Uniform4i);
142     GET_PROC(Uniform4iv);
143     GET_PROC(UniformMatrix2fv);
144     GET_PROC(UniformMatrix3fv);
145     GET_PROC(UniformMatrix4fv);
146     GET_PROC(UseProgram);
147     GET_PROC(VertexAttrib1f);
148     GET_PROC(VertexAttrib2fv);
149     GET_PROC(VertexAttrib3fv);
150     GET_PROC(VertexAttrib4fv);
151     GET_PROC(VertexAttribPointer);
152     GET_PROC(Viewport);
153 
154     if (glVer >= GR_GL_VER(3,0)) {
155         GET_PROC(GetStringi);
156     }
157 
158     if (glVer >= GR_GL_VER(3,1)) {
159         GET_PROC(MemoryBarrier);
160     }
161 
162     if (glVer >= GR_GL_VER(3,0)) {
163         GET_PROC(BindVertexArray);
164         GET_PROC(DeleteVertexArrays);
165         GET_PROC(GenVertexArrays);
166     } else if (extensions.has("GL_OES_vertex_array_object")) {
167         GET_PROC_SUFFIX(BindVertexArray, OES);
168         GET_PROC_SUFFIX(DeleteVertexArrays, OES);
169         GET_PROC_SUFFIX(GenVertexArrays, OES);
170     }
171 
172     if (glVer >= GR_GL_VER(3,2)) {
173         GET_PROC(PatchParameteri);
174     } else if (extensions.has("GL_OES_tessellation_shader")) {
175         GET_PROC_SUFFIX(PatchParameteri, OES);
176     }
177 
178     if (glVer >= GR_GL_VER(3,0) && extensions.has("GL_EXT_blend_func_extended")) {
179         GET_PROC_SUFFIX(BindFragDataLocation, EXT);
180     }
181 
182     if (glVer >= GR_GL_VER(3,0) && extensions.has("GL_EXT_blend_func_extended")) {
183         GET_PROC_SUFFIX(BindFragDataLocationIndexed, EXT);
184     }
185 
186     if (extensions.has("GL_KHR_blend_equation_advanced")) {
187         GET_PROC_SUFFIX(BlendBarrier, KHR);
188     } else if (extensions.has("GL_NV_blend_equation_advanced")) {
189         GET_PROC_SUFFIX(BlendBarrier, NV);
190     }
191 
192     if (extensions.has("GL_EXT_clear_texture")) {
193         GET_PROC_SUFFIX(ClearTexImage, EXT);
194         GET_PROC_SUFFIX(ClearTexSubImage, EXT);
195     }
196 
197     if (glVer >= GR_GL_VER(3,0)) {
198         GET_PROC(DrawArraysInstanced);
199         GET_PROC(DrawElementsInstanced);
200     } else if (extensions.has("GL_EXT_draw_instanced")) {
201         GET_PROC_SUFFIX(DrawArraysInstanced, EXT);
202         GET_PROC_SUFFIX(DrawElementsInstanced, EXT);
203     } else if (extensions.has("GL_ANGLE_instanced_arrays")) {
204         GET_PROC_SUFFIX(DrawArraysInstanced, ANGLE);
205         GET_PROC_SUFFIX(DrawElementsInstanced, ANGLE);
206     }
207 
208     if (extensions.has("GL_EXT_base_instance")) {
209         GET_PROC_SUFFIX(DrawArraysInstancedBaseInstance, EXT);
210         GET_PROC_SUFFIX(DrawElementsInstancedBaseVertexBaseInstance, EXT);
211     } else if (extensions.has("GL_ANGLE_base_vertex_base_instance")) {
212         GET_PROC_SUFFIX(DrawArraysInstancedBaseInstance, ANGLE);
213         GET_PROC_SUFFIX(DrawElementsInstancedBaseVertexBaseInstance, ANGLE);
214     }
215 
216     if (glVer >= GR_GL_VER(3,0)) {
217         GET_PROC(DrawBuffers);
218         GET_PROC(ReadBuffer);
219     }
220 
221     if (glVer >= GR_GL_VER(3,1)) {
222         GET_PROC(DrawArraysIndirect);
223         GET_PROC(DrawElementsIndirect);
224     }
225 
226     if (extensions.has("GL_ANGLE_base_vertex_base_instance")) {
227         GET_PROC_SUFFIX(MultiDrawArraysInstancedBaseInstance, ANGLE);
228         GET_PROC_SUFFIX(MultiDrawElementsInstancedBaseVertexBaseInstance, ANGLE);
229     }
230 
231     if (glVer >= GR_GL_VER(3,0)) {
232         GET_PROC(DrawRangeElements);
233     }
234 
235     if (glVer >= GR_GL_VER(3,1)) {
236         GET_PROC(GetMultisamplefv);
237     }
238 
239     if (glVer >= GR_GL_VER(3,1)) {
240         GET_PROC(GetTexLevelParameteriv);
241     }
242 
243     if (extensions.has("GL_EXT_multi_draw_indirect")) {
244         GET_PROC_SUFFIX(MultiDrawArraysIndirect, EXT);
245         GET_PROC_SUFFIX(MultiDrawElementsIndirect, EXT);
246     }
247 
248     if (glVer >= GR_GL_VER(3,2)) {
249         GET_PROC(TexBuffer);
250     } else if (extensions.has("GL_OES_texture_buffer")) {
251         GET_PROC_SUFFIX(TexBuffer, OES);
252     } else if (extensions.has("GL_EXT_texture_buffer")) {
253         GET_PROC_SUFFIX(TexBuffer, EXT);
254     }
255 
256     if (glVer >= GR_GL_VER(3,2)) {
257         GET_PROC(TexBufferRange);
258     } else if (extensions.has("GL_OES_texture_buffer")) {
259         GET_PROC_SUFFIX(TexBufferRange, OES);
260     } else if (extensions.has("GL_EXT_texture_buffer")) {
261         GET_PROC_SUFFIX(TexBufferRange, EXT);
262     }
263 
264     if (glVer >= GR_GL_VER(3,0)) {
265         GET_PROC(TexStorage2D);
266     } else if (extensions.has("GL_EXT_texture_storage")) {
267         GET_PROC_SUFFIX(TexStorage2D, EXT);
268     }
269 
270     if (extensions.has("GL_NV_texture_barrier")) {
271         GET_PROC_SUFFIX(TextureBarrier, NV);
272     }
273 
274     if (extensions.has("GL_EXT_discard_framebuffer")) {
275         GET_PROC_SUFFIX(DiscardFramebuffer, EXT);
276     }
277 
278     if (extensions.has("GL_QCOM_tiled_rendering")) {
279         GET_PROC_SUFFIX(EndTiling, QCOM);
280         GET_PROC_SUFFIX(StartTiling, QCOM);
281     }
282 
283     if (glVer >= GR_GL_VER(3,0)) {
284         GET_PROC(VertexAttribDivisor);
285     } else if (extensions.has("GL_EXT_instanced_arrays")) {
286         GET_PROC_SUFFIX(VertexAttribDivisor, EXT);
287     } else if (extensions.has("GL_ANGLE_instanced_arrays")) {
288         GET_PROC_SUFFIX(VertexAttribDivisor, ANGLE);
289     }
290 
291     if (glVer >= GR_GL_VER(3,0)) {
292         GET_PROC(VertexAttribIPointer);
293     }
294 
295     GET_PROC(BindFramebuffer);
296     GET_PROC(BindRenderbuffer);
297     GET_PROC(CheckFramebufferStatus);
298     GET_PROC(DeleteFramebuffers);
299     GET_PROC(DeleteRenderbuffers);
300     GET_PROC(FramebufferRenderbuffer);
301     GET_PROC(FramebufferTexture2D);
302     GET_PROC(GenFramebuffers);
303     GET_PROC(GenRenderbuffers);
304     GET_PROC(GenerateMipmap);
305     GET_PROC(GetFramebufferAttachmentParameteriv);
306     GET_PROC(GetRenderbufferParameteriv);
307     GET_PROC(RenderbufferStorage);
308 
309     if (glVer >= GR_GL_VER(3,0)) {
310         GET_PROC(BlitFramebuffer);
311     } else if (extensions.has("GL_NV_framebuffer_blit")) {
312         GET_PROC_SUFFIX(BlitFramebuffer, NV);
313     } else if (extensions.has("GL_CHROMIUM_framebuffer_multisample")) {
314         GET_PROC_SUFFIX(BlitFramebuffer, CHROMIUM);
315     } else if (extensions.has("GL_ANGLE_framebuffer_blit")) {
316         GET_PROC_SUFFIX(BlitFramebuffer, ANGLE);
317     }
318 
319     if (glVer >= GR_GL_VER(3,0)) {
320         GET_PROC(RenderbufferStorageMultisample);
321     } else if (extensions.has("GL_CHROMIUM_framebuffer_multisample")) {
322         GET_PROC_SUFFIX(RenderbufferStorageMultisample, CHROMIUM);
323     } else if (extensions.has("GL_ANGLE_framebuffer_multisample")) {
324         GET_PROC_SUFFIX(RenderbufferStorageMultisample, ANGLE);
325     }
326 
327     if (extensions.has("GL_CHROMIUM_map_sub")) {
328         GET_PROC_SUFFIX(MapBufferSubData, CHROMIUM);
329         GET_PROC_SUFFIX(MapTexSubImage2D, CHROMIUM);
330         GET_PROC_SUFFIX(UnmapBufferSubData, CHROMIUM);
331         GET_PROC_SUFFIX(UnmapTexSubImage2D, CHROMIUM);
332     }
333 
334     if (extensions.has("GL_EXT_multisampled_render_to_texture")) {
335         GET_PROC_SUFFIX(FramebufferTexture2DMultisample, EXT);
336     } else if (extensions.has("GL_IMG_multisampled_render_to_texture")) {
337         GET_PROC_SUFFIX(FramebufferTexture2DMultisample, IMG);
338     }
339 
340     if (extensions.has("GL_EXT_multisampled_render_to_texture")) {
341         functions->fRenderbufferStorageMultisampleES2EXT =(GrGLRenderbufferStorageMultisampleFn*)get(ctx, "glRenderbufferStorageMultisampleEXT");
342     }
343 
344     if (extensions.has("GL_IMG_multisampled_render_to_texture")) {
345         functions->fRenderbufferStorageMultisampleES2EXT =(GrGLRenderbufferStorageMultisampleFn*)get(ctx, "glRenderbufferStorageMultisampleIMG");
346     }
347 
348     if (extensions.has("GL_APPLE_framebuffer_multisample")) {
349         GET_PROC_SUFFIX(ResolveMultisampleFramebuffer, APPLE);
350         functions->fRenderbufferStorageMultisampleES2APPLE =(GrGLRenderbufferStorageMultisampleFn*)get(ctx, "glRenderbufferStorageMultisampleAPPLE");
351     }
352 
353     if (extensions.has("GL_OES_mapbuffer")) {
354         GET_PROC_SUFFIX(MapBuffer, OES);
355     }
356 
357     if (glVer >= GR_GL_VER(3,0)) {
358         GET_PROC(UnmapBuffer);
359     } else if (extensions.has("GL_OES_mapbuffer")) {
360         GET_PROC_SUFFIX(UnmapBuffer, OES);
361     }
362 
363     if (glVer >= GR_GL_VER(3,0)) {
364         GET_PROC(FlushMappedBufferRange);
365         GET_PROC(MapBufferRange);
366     } else if (extensions.has("GL_EXT_map_buffer_range")) {
367         GET_PROC_SUFFIX(FlushMappedBufferRange, EXT);
368         GET_PROC_SUFFIX(MapBufferRange, EXT);
369     }
370 
371     if (extensions.has("GL_EXT_debug_marker")) {
372         GET_PROC_SUFFIX(InsertEventMarker, EXT);
373         GET_PROC_SUFFIX(PopGroupMarker, EXT);
374         GET_PROC_SUFFIX(PushGroupMarker, EXT);
375     }
376 
377     if (glVer >= GR_GL_VER(3,0)) {
378         GET_PROC(CopyBufferSubData);
379     } else if (extensions.has("GL_NV_copy_buffer")) {
380         GET_PROC_SUFFIX(CopyBufferSubData, NV);
381     }
382 
383     if (extensions.has("GL_KHR_debug")) {
384         GET_PROC_SUFFIX(DebugMessageCallback, KHR);
385         GET_PROC_SUFFIX(DebugMessageControl, KHR);
386         GET_PROC_SUFFIX(DebugMessageInsert, KHR);
387         GET_PROC_SUFFIX(GetDebugMessageLog, KHR);
388         GET_PROC_SUFFIX(ObjectLabel, KHR);
389         GET_PROC_SUFFIX(PopDebugGroup, KHR);
390         GET_PROC_SUFFIX(PushDebugGroup, KHR);
391     }
392 
393     if (extensions.has("GL_CHROMIUM_bind_uniform_location")) {
394         GET_PROC_SUFFIX(BindUniformLocation, CHROMIUM);
395     }
396 
397     if (extensions.has("GL_EXT_window_rectangles")) {
398         GET_PROC_SUFFIX(WindowRectangles, EXT);
399     }
400 
401     if (glVer >= GR_GL_VER(3,0)) {
402         GET_PROC(ClientWaitSync);
403         GET_PROC(DeleteSync);
404         GET_PROC(FenceSync);
405         GET_PROC(IsSync);
406         GET_PROC(WaitSync);
407     } else if (extensions.has("GL_APPLE_sync")) {
408         GET_PROC_SUFFIX(ClientWaitSync, APPLE);
409         GET_PROC_SUFFIX(DeleteSync, APPLE);
410         GET_PROC_SUFFIX(FenceSync, APPLE);
411         GET_PROC_SUFFIX(IsSync, APPLE);
412         GET_PROC_SUFFIX(WaitSync, APPLE);
413     }
414 
415     if (glVer >= GR_GL_VER(3,0)) {
416         GET_PROC(GetInternalformativ);
417     }
418 
419     if (glVer >= GR_GL_VER(3,0)) {
420         GET_PROC(GetProgramBinary);
421         GET_PROC(ProgramBinary);
422     } else if (extensions.has("GL_OES_get_program_binary")) {
423         GET_PROC_SUFFIX(GetProgramBinary, OES);
424         GET_PROC_SUFFIX(ProgramBinary, OES);
425     }
426 
427     if (glVer >= GR_GL_VER(3,0)) {
428         GET_PROC(ProgramParameteri);
429     }
430 
431     if (glVer >= GR_GL_VER(3,0)) {
432         GET_PROC(BindSampler);
433         GET_PROC(DeleteSamplers);
434         GET_PROC(GenSamplers);
435         GET_PROC(SamplerParameterf);
436         GET_PROC(SamplerParameteri);
437         GET_PROC(SamplerParameteriv);
438     }
439 
440     if (glVer >= GR_GL_VER(3,0)) {
441         GET_PROC(BeginQuery);
442         GET_PROC(DeleteQueries);
443         GET_PROC(EndQuery);
444         GET_PROC(GenQueries);
445         GET_PROC(GetQueryObjectuiv);
446         GET_PROC(GetQueryiv);
447     } else if (extensions.has("GL_EXT_disjoint_timer_query")) {
448         GET_PROC_SUFFIX(BeginQuery, EXT);
449         GET_PROC_SUFFIX(DeleteQueries, EXT);
450         GET_PROC_SUFFIX(EndQuery, EXT);
451         GET_PROC_SUFFIX(GenQueries, EXT);
452         GET_PROC_SUFFIX(GetQueryObjectuiv, EXT);
453         GET_PROC_SUFFIX(GetQueryiv, EXT);
454     }
455 
456     if (extensions.has("GL_EXT_disjoint_timer_query")) {
457         GET_PROC_SUFFIX(QueryCounter, EXT);
458     }
459 
460     if (extensions.has("GL_EXT_disjoint_timer_query")) {
461         GET_PROC_SUFFIX(GetQueryObjecti64v, EXT);
462         GET_PROC_SUFFIX(GetQueryObjectui64v, EXT);
463     }
464 
465     if (extensions.has("GL_ARB_invalidate_subdata")) {
466         GET_PROC(InvalidateBufferData);
467         GET_PROC(InvalidateBufferSubData);
468         GET_PROC(InvalidateTexImage);
469         GET_PROC(InvalidateTexSubImage);
470     }
471 
472     if (glVer >= GR_GL_VER(3,0)) {
473         GET_PROC(InvalidateFramebuffer);
474         GET_PROC(InvalidateSubFramebuffer);
475     } else if (extensions.has("GL_ARB_invalidate_subdata")) {
476         GET_PROC(InvalidateFramebuffer);
477         GET_PROC(InvalidateSubFramebuffer);
478     }
479 
480     GET_PROC(GetShaderPrecisionFormat);
481 
482     if (extensions.has("GL_NV_fence")) {
483         GET_PROC_SUFFIX(DeleteFences, NV);
484         GET_PROC_SUFFIX(FinishFence, NV);
485         GET_PROC_SUFFIX(GenFences, NV);
486         GET_PROC_SUFFIX(SetFence, NV);
487         GET_PROC_SUFFIX(TestFence, NV);
488     }
489 
490 
491     // End autogenerated content
492     // TODO(kjlubick): Do we want a feature that removes the extension if it doesn't have
493     // the function? This is common on some low-end GPUs.
494 
495     if (extensions.has("GL_KHR_debug")) {
496         // In general we have a policy against removing extension strings when the driver does
497         // not provide function pointers for an advertised extension. However, because there is a
498         // known device that advertises GL_KHR_debug but fails to provide the functions and this is
499         // a debugging- only extension we've made an exception. This also can happen when using
500         // APITRACE.
501         if (!interface->fFunctions.fDebugMessageControl) {
502             extensions.remove("GL_KHR_debug");
503         }
504     }
505     interface->fStandard = kGLES_GrGLStandard;
506     interface->fExtensions.swap(&extensions);
507 
508     return interface;
509 }
510 #endif
511