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_INTERFACE
GrGLMakeAssembledGLInterface(void * ctx,GrGLGetProc get)29 sk_sp<const GrGLInterface> GrGLMakeAssembledGLInterface(void *ctx, GrGLGetProc get) {
30 return nullptr;
31 }
32 #else
GrGLMakeAssembledGLInterface(void * ctx,GrGLGetProc get)33 sk_sp<const GrGLInterface> GrGLMakeAssembledGLInterface(void *ctx, GrGLGetProc get) {
34 GET_PROC_LOCAL(GetString);
35 GET_PROC_LOCAL(GetStringi);
36 GET_PROC_LOCAL(GetIntegerv);
37
38 // GetStringi may be nullptr depending on the GL version.
39 if (nullptr == GetString || nullptr == GetIntegerv) {
40 return nullptr;
41 }
42
43 const char* versionString = (const char*) GetString(GR_GL_VERSION);
44 GrGLVersion glVer = GrGLGetVersionFromString(versionString);
45
46 if (glVer < GR_GL_VER(2,0) || GR_GL_INVALID_VER == glVer) {
47 // This is our minimum for non-ES GL.
48 return nullptr;
49 }
50
51 GrEGLQueryStringFn* queryString;
52 GrEGLDisplay display;
53 GrGetEGLQueryAndDisplay(&queryString, &display, ctx, get);
54 GrGLExtensions extensions;
55 if (!extensions.init(kGL_GrGLStandard, GetString, GetStringi, GetIntegerv, queryString,
56 display)) {
57 return nullptr;
58 }
59
60 sk_sp<GrGLInterface> interface(new GrGLInterface());
61 GrGLInterface::Functions* functions = &interface->fFunctions;
62
63 // Autogenerated content follows
64 GET_PROC(ActiveTexture);
65 GET_PROC(AttachShader);
66 GET_PROC(BindAttribLocation);
67 GET_PROC(BindBuffer);
68 GET_PROC(BindTexture);
69 GET_PROC(BlendColor);
70 GET_PROC(BlendEquation);
71 GET_PROC(BlendFunc);
72 GET_PROC(BufferData);
73 GET_PROC(BufferSubData);
74 GET_PROC(Clear);
75 GET_PROC(ClearColor);
76 GET_PROC(ClearStencil);
77 GET_PROC(ColorMask);
78 GET_PROC(CompileShader);
79 GET_PROC(CompressedTexImage2D);
80 GET_PROC(CompressedTexSubImage2D);
81 GET_PROC(CopyTexSubImage2D);
82 GET_PROC(CreateProgram);
83 GET_PROC(CreateShader);
84 GET_PROC(CullFace);
85 GET_PROC(DeleteBuffers);
86 GET_PROC(DeleteProgram);
87 GET_PROC(DeleteShader);
88 GET_PROC(DeleteTextures);
89 GET_PROC(DepthMask);
90 GET_PROC(Disable);
91 GET_PROC(DisableVertexAttribArray);
92 GET_PROC(DrawArrays);
93 GET_PROC(DrawElements);
94 GET_PROC(Enable);
95 GET_PROC(EnableVertexAttribArray);
96 GET_PROC(Finish);
97 GET_PROC(Flush);
98 GET_PROC(FrontFace);
99 GET_PROC(GenBuffers);
100 GET_PROC(GenTextures);
101 GET_PROC(GetBufferParameteriv);
102 GET_PROC(GetError);
103 GET_PROC(GetFloatv);
104 GET_PROC(GetIntegerv);
105 GET_PROC(GetProgramInfoLog);
106 GET_PROC(GetProgramiv);
107 GET_PROC(GetShaderInfoLog);
108 GET_PROC(GetShaderiv);
109 GET_PROC(GetString);
110 GET_PROC(GetUniformLocation);
111 GET_PROC(IsTexture);
112 GET_PROC(LineWidth);
113 GET_PROC(LinkProgram);
114 GET_PROC(PixelStorei);
115 GET_PROC(ReadPixels);
116 GET_PROC(Scissor);
117 GET_PROC(ShaderSource);
118 GET_PROC(StencilFunc);
119 GET_PROC(StencilFuncSeparate);
120 GET_PROC(StencilMask);
121 GET_PROC(StencilMaskSeparate);
122 GET_PROC(StencilOp);
123 GET_PROC(StencilOpSeparate);
124 GET_PROC(TexImage2D);
125 GET_PROC(TexParameterf);
126 GET_PROC(TexParameterfv);
127 GET_PROC(TexParameteri);
128 GET_PROC(TexParameteriv);
129 GET_PROC(TexSubImage2D);
130 GET_PROC(Uniform1f);
131 GET_PROC(Uniform1fv);
132 GET_PROC(Uniform1i);
133 GET_PROC(Uniform1iv);
134 GET_PROC(Uniform2f);
135 GET_PROC(Uniform2fv);
136 GET_PROC(Uniform2i);
137 GET_PROC(Uniform2iv);
138 GET_PROC(Uniform3f);
139 GET_PROC(Uniform3fv);
140 GET_PROC(Uniform3i);
141 GET_PROC(Uniform3iv);
142 GET_PROC(Uniform4f);
143 GET_PROC(Uniform4fv);
144 GET_PROC(Uniform4i);
145 GET_PROC(Uniform4iv);
146 GET_PROC(UniformMatrix2fv);
147 GET_PROC(UniformMatrix3fv);
148 GET_PROC(UniformMatrix4fv);
149 GET_PROC(UseProgram);
150 GET_PROC(VertexAttrib1f);
151 GET_PROC(VertexAttrib2fv);
152 GET_PROC(VertexAttrib3fv);
153 GET_PROC(VertexAttrib4fv);
154 GET_PROC(VertexAttribPointer);
155 GET_PROC(Viewport);
156
157 GET_PROC(DrawBuffer);
158 GET_PROC(PolygonMode);
159
160 if (glVer >= GR_GL_VER(3,0)) {
161 GET_PROC(GetStringi);
162 }
163
164 if (glVer >= GR_GL_VER(4,2)) {
165 GET_PROC(MemoryBarrier);
166 }
167
168 if (glVer >= GR_GL_VER(3,0)) {
169 GET_PROC(BindVertexArray);
170 GET_PROC(DeleteVertexArrays);
171 GET_PROC(GenVertexArrays);
172 } else if (extensions.has("GL_ARB_vertex_array_object")) {
173 GET_PROC(BindVertexArray);
174 GET_PROC(DeleteVertexArrays);
175 GET_PROC(GenVertexArrays);
176 } else if (extensions.has("GL_APPLE_vertex_array_object")) {
177 GET_PROC_SUFFIX(BindVertexArray, APPLE);
178 GET_PROC_SUFFIX(DeleteVertexArrays, APPLE);
179 GET_PROC_SUFFIX(GenVertexArrays, APPLE);
180 }
181
182 if (glVer >= GR_GL_VER(4,0)) {
183 GET_PROC(PatchParameteri);
184 } else if (extensions.has("GL_ARB_tessellation_shader")) {
185 GET_PROC(PatchParameteri);
186 }
187
188 if (glVer >= GR_GL_VER(3,0)) {
189 GET_PROC(BindFragDataLocation);
190 }
191
192 if (glVer >= GR_GL_VER(3,3)) {
193 GET_PROC(BindFragDataLocationIndexed);
194 } else if (extensions.has("GL_ARB_blend_func_extended")) {
195 GET_PROC(BindFragDataLocationIndexed);
196 }
197
198 if (extensions.has("GL_KHR_blend_equation_advanced")) {
199 GET_PROC_SUFFIX(BlendBarrier, KHR);
200 } else if (extensions.has("GL_NV_blend_equation_advanced")) {
201 GET_PROC_SUFFIX(BlendBarrier, NV);
202 }
203
204 if (glVer >= GR_GL_VER(4,4)) {
205 GET_PROC(ClearTexImage);
206 GET_PROC(ClearTexSubImage);
207 } else if (extensions.has("GL_ARB_clear_texture")) {
208 GET_PROC(ClearTexImage);
209 GET_PROC(ClearTexSubImage);
210 }
211
212 if (glVer >= GR_GL_VER(3,1)) {
213 GET_PROC(DrawArraysInstanced);
214 GET_PROC(DrawElementsInstanced);
215 } else if (extensions.has("GL_ARB_draw_instanced")) {
216 GET_PROC(DrawArraysInstanced);
217 GET_PROC(DrawElementsInstanced);
218 } else if (extensions.has("GL_EXT_draw_instanced")) {
219 GET_PROC_SUFFIX(DrawArraysInstanced, EXT);
220 GET_PROC_SUFFIX(DrawElementsInstanced, EXT);
221 }
222
223 if (glVer >= GR_GL_VER(4,2)) {
224 GET_PROC(DrawArraysInstancedBaseInstance);
225 GET_PROC(DrawElementsInstancedBaseVertexBaseInstance);
226 } else if (extensions.has("GL_ARB_base_instance")) {
227 GET_PROC(DrawArraysInstancedBaseInstance);
228 GET_PROC(DrawElementsInstancedBaseVertexBaseInstance);
229 }
230
231 GET_PROC(DrawBuffers);
232 GET_PROC(ReadBuffer);
233
234 if (glVer >= GR_GL_VER(4,0)) {
235 GET_PROC(DrawArraysIndirect);
236 GET_PROC(DrawElementsIndirect);
237 } else if (extensions.has("GL_ARB_draw_indirect")) {
238 GET_PROC(DrawArraysIndirect);
239 GET_PROC(DrawElementsIndirect);
240 }
241
242 GET_PROC(DrawRangeElements);
243
244 if (glVer >= GR_GL_VER(3,2)) {
245 GET_PROC(GetMultisamplefv);
246 } else if (extensions.has("GL_ARB_texture_multisample")) {
247 GET_PROC(GetMultisamplefv);
248 }
249
250 GET_PROC(GetTexLevelParameteriv);
251
252 if (glVer >= GR_GL_VER(4,3)) {
253 GET_PROC(MultiDrawArraysIndirect);
254 GET_PROC(MultiDrawElementsIndirect);
255 } else if (extensions.has("GL_ARB_multi_draw_indirect")) {
256 GET_PROC(MultiDrawArraysIndirect);
257 GET_PROC(MultiDrawElementsIndirect);
258 }
259
260 if (glVer >= GR_GL_VER(3,1)) {
261 GET_PROC(TexBuffer);
262 }
263
264 if (glVer >= GR_GL_VER(4,3)) {
265 GET_PROC(TexBufferRange);
266 }
267
268 if (glVer >= GR_GL_VER(4,2)) {
269 GET_PROC(TexStorage2D);
270 } else if (extensions.has("GL_ARB_texture_storage")) {
271 GET_PROC(TexStorage2D);
272 } else if (extensions.has("GL_EXT_texture_storage")) {
273 GET_PROC_SUFFIX(TexStorage2D, EXT);
274 }
275
276 if (glVer >= GR_GL_VER(4,5)) {
277 GET_PROC(TextureBarrier);
278 } else if (extensions.has("GL_ARB_texture_barrier")) {
279 GET_PROC(TextureBarrier);
280 } else if (extensions.has("GL_NV_texture_barrier")) {
281 GET_PROC_SUFFIX(TextureBarrier, NV);
282 }
283
284 if (glVer >= GR_GL_VER(3,2)) {
285 GET_PROC(VertexAttribDivisor);
286 } else if (extensions.has("GL_ARB_instanced_arrays")) {
287 GET_PROC(VertexAttribDivisor);
288 }
289
290 if (glVer >= GR_GL_VER(3,0)) {
291 GET_PROC(VertexAttribIPointer);
292 }
293
294 if (glVer >= GR_GL_VER(3,0)) {
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 } else if (extensions.has("GL_ARB_framebuffer_object")) {
309 GET_PROC(BindFramebuffer);
310 GET_PROC(BindRenderbuffer);
311 GET_PROC(CheckFramebufferStatus);
312 GET_PROC(DeleteFramebuffers);
313 GET_PROC(DeleteRenderbuffers);
314 GET_PROC(FramebufferRenderbuffer);
315 GET_PROC(FramebufferTexture2D);
316 GET_PROC(GenFramebuffers);
317 GET_PROC(GenRenderbuffers);
318 GET_PROC(GenerateMipmap);
319 GET_PROC(GetFramebufferAttachmentParameteriv);
320 GET_PROC(GetRenderbufferParameteriv);
321 GET_PROC(RenderbufferStorage);
322 } else if (extensions.has("GL_EXT_framebuffer_object")) {
323 GET_PROC_SUFFIX(BindFramebuffer, EXT);
324 GET_PROC_SUFFIX(BindRenderbuffer, EXT);
325 GET_PROC_SUFFIX(CheckFramebufferStatus, EXT);
326 GET_PROC_SUFFIX(DeleteFramebuffers, EXT);
327 GET_PROC_SUFFIX(DeleteRenderbuffers, EXT);
328 GET_PROC_SUFFIX(FramebufferRenderbuffer, EXT);
329 GET_PROC_SUFFIX(FramebufferTexture2D, EXT);
330 GET_PROC_SUFFIX(GenFramebuffers, EXT);
331 GET_PROC_SUFFIX(GenRenderbuffers, EXT);
332 GET_PROC_SUFFIX(GenerateMipmap, EXT);
333 GET_PROC_SUFFIX(GetFramebufferAttachmentParameteriv, EXT);
334 GET_PROC_SUFFIX(GetRenderbufferParameteriv, EXT);
335 GET_PROC_SUFFIX(RenderbufferStorage, EXT);
336 }
337
338 if (glVer >= GR_GL_VER(3,0)) {
339 GET_PROC(BlitFramebuffer);
340 } else if (extensions.has("GL_ARB_framebuffer_object")) {
341 GET_PROC(BlitFramebuffer);
342 } else if (extensions.has("GL_EXT_framebuffer_blit")) {
343 GET_PROC_SUFFIX(BlitFramebuffer, EXT);
344 }
345
346 if (glVer >= GR_GL_VER(3,0)) {
347 GET_PROC(RenderbufferStorageMultisample);
348 } else if (extensions.has("GL_ARB_framebuffer_object")) {
349 GET_PROC(RenderbufferStorageMultisample);
350 } else if (extensions.has("GL_EXT_framebuffer_multisample")) {
351 GET_PROC_SUFFIX(RenderbufferStorageMultisample, EXT);
352 }
353
354 GET_PROC(MapBuffer);
355
356 GET_PROC(UnmapBuffer);
357
358 if (glVer >= GR_GL_VER(3,0)) {
359 GET_PROC(FlushMappedBufferRange);
360 GET_PROC(MapBufferRange);
361 } else if (extensions.has("GL_ARB_map_buffer_range")) {
362 GET_PROC(FlushMappedBufferRange);
363 GET_PROC(MapBufferRange);
364 }
365
366 if (extensions.has("GL_EXT_debug_marker")) {
367 GET_PROC_SUFFIX(InsertEventMarker, EXT);
368 GET_PROC_SUFFIX(PopGroupMarker, EXT);
369 GET_PROC_SUFFIX(PushGroupMarker, EXT);
370 }
371
372 if (glVer >= GR_GL_VER(3,1)) {
373 GET_PROC(CopyBufferSubData);
374 } else if (extensions.has("GL_ARB_copy_buffer")) {
375 GET_PROC(CopyBufferSubData);
376 }
377
378 if (glVer >= GR_GL_VER(4,3)) {
379 GET_PROC(DebugMessageCallback);
380 GET_PROC(DebugMessageControl);
381 GET_PROC(DebugMessageInsert);
382 GET_PROC(GetDebugMessageLog);
383 GET_PROC(ObjectLabel);
384 GET_PROC(PopDebugGroup);
385 GET_PROC(PushDebugGroup);
386 } else if (extensions.has("GL_KHR_debug")) {
387 GET_PROC(DebugMessageCallback);
388 GET_PROC(DebugMessageControl);
389 GET_PROC(DebugMessageInsert);
390 GET_PROC(GetDebugMessageLog);
391 GET_PROC(ObjectLabel);
392 GET_PROC(PopDebugGroup);
393 GET_PROC(PushDebugGroup);
394 }
395
396 if (extensions.has("GL_EXT_window_rectangles")) {
397 GET_PROC_SUFFIX(WindowRectangles, EXT);
398 }
399
400 if (glVer >= GR_GL_VER(3,2)) {
401 GET_PROC(ClientWaitSync);
402 GET_PROC(DeleteSync);
403 GET_PROC(FenceSync);
404 GET_PROC(IsSync);
405 GET_PROC(WaitSync);
406 } else if (extensions.has("GL_ARB_sync")) {
407 GET_PROC(ClientWaitSync);
408 GET_PROC(DeleteSync);
409 GET_PROC(FenceSync);
410 GET_PROC(IsSync);
411 GET_PROC(WaitSync);
412 }
413
414 if (glVer >= GR_GL_VER(4,2)) {
415 GET_PROC(GetInternalformativ);
416 } else if (extensions.has("GL_ARB_internalformat_query")) {
417 GET_PROC(GetInternalformativ);
418 }
419
420 if (glVer >= GR_GL_VER(4,1)) {
421 GET_PROC(GetProgramBinary);
422 GET_PROC(ProgramBinary);
423 }
424
425 if (glVer >= GR_GL_VER(4,1)) {
426 GET_PROC(ProgramParameteri);
427 }
428
429 if (glVer >= GR_GL_VER(3,2)) {
430 GET_PROC(BindSampler);
431 GET_PROC(DeleteSamplers);
432 GET_PROC(GenSamplers);
433 GET_PROC(SamplerParameterf);
434 GET_PROC(SamplerParameteri);
435 GET_PROC(SamplerParameteriv);
436 } else if (extensions.has("GL_ARB_sampler_objects")) {
437 GET_PROC(BindSampler);
438 GET_PROC(DeleteSamplers);
439 GET_PROC(GenSamplers);
440 GET_PROC(SamplerParameterf);
441 GET_PROC(SamplerParameteri);
442 GET_PROC(SamplerParameteriv);
443 }
444
445 GET_PROC(BeginQuery);
446 GET_PROC(DeleteQueries);
447 GET_PROC(EndQuery);
448 GET_PROC(GenQueries);
449 GET_PROC(GetQueryObjectuiv);
450 GET_PROC(GetQueryiv);
451
452 if (glVer >= GR_GL_VER(3,3)) {
453 GET_PROC(QueryCounter);
454 } else if (extensions.has("GL_ARB_timer_query")) {
455 GET_PROC(QueryCounter);
456 }
457
458 if (glVer >= GR_GL_VER(3,3)) {
459 GET_PROC(GetQueryObjecti64v);
460 GET_PROC(GetQueryObjectui64v);
461 } else if (extensions.has("GL_ARB_timer_query")) {
462 GET_PROC(GetQueryObjecti64v);
463 GET_PROC(GetQueryObjectui64v);
464 } else if (extensions.has("GL_EXT_timer_query")) {
465 GET_PROC_SUFFIX(GetQueryObjecti64v, EXT);
466 GET_PROC_SUFFIX(GetQueryObjectui64v, EXT);
467 }
468
469 if (glVer >= GR_GL_VER(4,3)) {
470 GET_PROC(InvalidateBufferData);
471 GET_PROC(InvalidateBufferSubData);
472 GET_PROC(InvalidateTexImage);
473 GET_PROC(InvalidateTexSubImage);
474 } else if (extensions.has("GL_ARB_invalidate_subdata")) {
475 GET_PROC(InvalidateBufferData);
476 GET_PROC(InvalidateBufferSubData);
477 GET_PROC(InvalidateTexImage);
478 GET_PROC(InvalidateTexSubImage);
479 }
480
481 if (glVer >= GR_GL_VER(4,3)) {
482 GET_PROC(InvalidateFramebuffer);
483 GET_PROC(InvalidateSubFramebuffer);
484 } else if (extensions.has("GL_ARB_invalidate_subdata")) {
485 GET_PROC(InvalidateFramebuffer);
486 GET_PROC(InvalidateSubFramebuffer);
487 }
488
489 if (glVer >= GR_GL_VER(4,3)) {
490 GET_PROC(GetShaderPrecisionFormat);
491 } else if (extensions.has("GL_ARB_ES2_compatibility")) {
492 GET_PROC(GetShaderPrecisionFormat);
493 }
494
495 if (extensions.has("GL_NV_fence")) {
496 GET_PROC_SUFFIX(DeleteFences, NV);
497 GET_PROC_SUFFIX(FinishFence, NV);
498 GET_PROC_SUFFIX(GenFences, NV);
499 GET_PROC_SUFFIX(SetFence, NV);
500 GET_PROC_SUFFIX(TestFence, NV);
501 }
502
503
504 // End autogenerated content
505 interface->fStandard = kGL_GrGLStandard;
506 interface->fExtensions.swap(&extensions);
507
508 return interface;
509 }
510 #endif
511