xref: /aosp_15_r20/external/skia/include/gpu/ganesh/gl/GrGLFunctions.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker  * Copyright 2012 Google Inc.
3*c8dee2aaSAndroid Build Coastguard Worker  *
4*c8dee2aaSAndroid Build Coastguard Worker  * Use of this source code is governed by a BSD-style license that can be
5*c8dee2aaSAndroid Build Coastguard Worker  * found in the LICENSE file.
6*c8dee2aaSAndroid Build Coastguard Worker  */
7*c8dee2aaSAndroid Build Coastguard Worker 
8*c8dee2aaSAndroid Build Coastguard Worker #ifndef GrGLFunctions_DEFINED
9*c8dee2aaSAndroid Build Coastguard Worker #define GrGLFunctions_DEFINED
10*c8dee2aaSAndroid Build Coastguard Worker 
11*c8dee2aaSAndroid Build Coastguard Worker #include <cstring>
12*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/gl/GrGLTypes.h"
13*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkTLogic.h"
14*c8dee2aaSAndroid Build Coastguard Worker 
15*c8dee2aaSAndroid Build Coastguard Worker 
16*c8dee2aaSAndroid Build Coastguard Worker extern "C" {
17*c8dee2aaSAndroid Build Coastguard Worker 
18*c8dee2aaSAndroid Build Coastguard Worker ///////////////////////////////////////////////////////////////////////////////
19*c8dee2aaSAndroid Build Coastguard Worker 
20*c8dee2aaSAndroid Build Coastguard Worker using GrGLActiveTextureFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum texture);
21*c8dee2aaSAndroid Build Coastguard Worker using GrGLAttachShaderFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program, GrGLuint shader);
22*c8dee2aaSAndroid Build Coastguard Worker using GrGLBeginQueryFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLuint id);
23*c8dee2aaSAndroid Build Coastguard Worker using GrGLBindAttribLocationFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program, GrGLuint index, const char* name);
24*c8dee2aaSAndroid Build Coastguard Worker using GrGLBindBufferFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLuint buffer);
25*c8dee2aaSAndroid Build Coastguard Worker using GrGLBindFramebufferFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLuint framebuffer);
26*c8dee2aaSAndroid Build Coastguard Worker using GrGLBindRenderbufferFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLuint renderbuffer);
27*c8dee2aaSAndroid Build Coastguard Worker using GrGLBindTextureFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLuint texture);
28*c8dee2aaSAndroid Build Coastguard Worker using GrGLBindFragDataLocationFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program, GrGLuint colorNumber, const GrGLchar* name);
29*c8dee2aaSAndroid Build Coastguard Worker using GrGLBindFragDataLocationIndexedFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program, GrGLuint colorNumber, GrGLuint index, const GrGLchar* name);
30*c8dee2aaSAndroid Build Coastguard Worker using GrGLBindSamplerFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint unit, GrGLuint sampler);
31*c8dee2aaSAndroid Build Coastguard Worker using GrGLBindVertexArrayFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint array);
32*c8dee2aaSAndroid Build Coastguard Worker using GrGLBlendBarrierFn = GrGLvoid GR_GL_FUNCTION_TYPE();
33*c8dee2aaSAndroid Build Coastguard Worker using GrGLBlendColorFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLclampf red, GrGLclampf green, GrGLclampf blue, GrGLclampf alpha);
34*c8dee2aaSAndroid Build Coastguard Worker using GrGLBlendEquationFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode);
35*c8dee2aaSAndroid Build Coastguard Worker using GrGLBlendFuncFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum sfactor, GrGLenum dfactor);
36*c8dee2aaSAndroid Build Coastguard Worker using GrGLBlitFramebufferFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint srcX0, GrGLint srcY0, GrGLint srcX1, GrGLint srcY1, GrGLint dstX0, GrGLint dstY0, GrGLint dstX1, GrGLint dstY1, GrGLbitfield mask, GrGLenum filter);
37*c8dee2aaSAndroid Build Coastguard Worker using GrGLBufferDataFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLsizeiptr size, const GrGLvoid* data, GrGLenum usage);
38*c8dee2aaSAndroid Build Coastguard Worker using GrGLBufferSubDataFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLintptr offset, GrGLsizeiptr size, const GrGLvoid* data);
39*c8dee2aaSAndroid Build Coastguard Worker using GrGLCheckFramebufferStatusFn = GrGLenum GR_GL_FUNCTION_TYPE(GrGLenum target);
40*c8dee2aaSAndroid Build Coastguard Worker using GrGLClearFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLbitfield mask);
41*c8dee2aaSAndroid Build Coastguard Worker using GrGLClearColorFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLclampf red, GrGLclampf green, GrGLclampf blue, GrGLclampf alpha);
42*c8dee2aaSAndroid Build Coastguard Worker using GrGLClearStencilFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint s);
43*c8dee2aaSAndroid Build Coastguard Worker using GrGLClearTexImageFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint texture, GrGLint level, GrGLenum format, GrGLenum type, const GrGLvoid* data);
44*c8dee2aaSAndroid Build Coastguard Worker using GrGLClearTexSubImageFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint texture, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLint zoffset, GrGLsizei width, GrGLsizei height, GrGLsizei depth, GrGLenum format, GrGLenum type, const GrGLvoid* data);
45*c8dee2aaSAndroid Build Coastguard Worker using GrGLColorMaskFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLboolean red, GrGLboolean green, GrGLboolean blue, GrGLboolean alpha);
46*c8dee2aaSAndroid Build Coastguard Worker using GrGLCompileShaderFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint shader);
47*c8dee2aaSAndroid Build Coastguard Worker using GrGLCompressedTexImage2DFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLint level, GrGLenum internalformat, GrGLsizei width, GrGLsizei height, GrGLint border, GrGLsizei imageSize, const GrGLvoid* data);
48*c8dee2aaSAndroid Build Coastguard Worker using GrGLCompressedTexSubImage2DFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLsizei width, GrGLsizei height, GrGLenum format, GrGLsizei imageSize, const GrGLvoid* data);
49*c8dee2aaSAndroid Build Coastguard Worker using GrGLCopyBufferSubDataFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum readTargt, GrGLenum writeTarget, GrGLintptr readOffset, GrGLintptr writeOffset, GrGLsizeiptr size);
50*c8dee2aaSAndroid Build Coastguard Worker using GrGLCopyTexSubImage2DFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height);
51*c8dee2aaSAndroid Build Coastguard Worker using GrGLCreateProgramFn = GrGLuint GR_GL_FUNCTION_TYPE();
52*c8dee2aaSAndroid Build Coastguard Worker using GrGLCreateShaderFn = GrGLuint GR_GL_FUNCTION_TYPE(GrGLenum type);
53*c8dee2aaSAndroid Build Coastguard Worker using GrGLCullFaceFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode);
54*c8dee2aaSAndroid Build Coastguard Worker using GrGLDeleteBuffersFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, const GrGLuint* buffers);
55*c8dee2aaSAndroid Build Coastguard Worker using GrGLDeleteFencesFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, const GrGLuint* fences);
56*c8dee2aaSAndroid Build Coastguard Worker using GrGLDeleteFramebuffersFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, const GrGLuint* framebuffers);
57*c8dee2aaSAndroid Build Coastguard Worker using GrGLDeleteProgramFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program);
58*c8dee2aaSAndroid Build Coastguard Worker using GrGLDeleteQueriesFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, const GrGLuint* ids);
59*c8dee2aaSAndroid Build Coastguard Worker using GrGLDeleteRenderbuffersFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, const GrGLuint* renderbuffers);
60*c8dee2aaSAndroid Build Coastguard Worker using GrGLDeleteSamplersFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei count, const GrGLuint* samplers);
61*c8dee2aaSAndroid Build Coastguard Worker using GrGLDeleteShaderFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint shader);
62*c8dee2aaSAndroid Build Coastguard Worker using GrGLDeleteTexturesFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, const GrGLuint* textures);
63*c8dee2aaSAndroid Build Coastguard Worker using GrGLDeleteVertexArraysFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, const GrGLuint* arrays);
64*c8dee2aaSAndroid Build Coastguard Worker using GrGLDepthMaskFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLboolean flag);
65*c8dee2aaSAndroid Build Coastguard Worker using GrGLDisableFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum cap);
66*c8dee2aaSAndroid Build Coastguard Worker using GrGLDisableVertexAttribArrayFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint index);
67*c8dee2aaSAndroid Build Coastguard Worker using GrGLDrawArraysFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, GrGLint first, GrGLsizei count);
68*c8dee2aaSAndroid Build Coastguard Worker using GrGLDrawArraysInstancedFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, GrGLint first, GrGLsizei count, GrGLsizei primcount);
69*c8dee2aaSAndroid Build Coastguard Worker using GrGLDrawArraysIndirectFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, const GrGLvoid* indirect);
70*c8dee2aaSAndroid Build Coastguard Worker using GrGLDrawBufferFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode);
71*c8dee2aaSAndroid Build Coastguard Worker using GrGLDrawBuffersFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, const GrGLenum* bufs);
72*c8dee2aaSAndroid Build Coastguard Worker using GrGLDrawElementsFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, GrGLsizei count, GrGLenum type, const GrGLvoid* indices);
73*c8dee2aaSAndroid Build Coastguard Worker using GrGLDrawElementsInstancedFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, GrGLsizei count, GrGLenum type, const GrGLvoid* indices, GrGLsizei primcount);
74*c8dee2aaSAndroid Build Coastguard Worker using GrGLDrawElementsIndirectFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, GrGLenum type, const GrGLvoid* indirect);
75*c8dee2aaSAndroid Build Coastguard Worker using GrGLDrawRangeElementsFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, GrGLuint start, GrGLuint end, GrGLsizei count, GrGLenum type, const GrGLvoid* indices);
76*c8dee2aaSAndroid Build Coastguard Worker using GrGLEnableFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum cap);
77*c8dee2aaSAndroid Build Coastguard Worker using GrGLEnableVertexAttribArrayFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint index);
78*c8dee2aaSAndroid Build Coastguard Worker using GrGLEndQueryFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target);
79*c8dee2aaSAndroid Build Coastguard Worker using GrGLFinishFn = GrGLvoid GR_GL_FUNCTION_TYPE();
80*c8dee2aaSAndroid Build Coastguard Worker using GrGLFinishFenceFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint fence);
81*c8dee2aaSAndroid Build Coastguard Worker using GrGLFlushFn = GrGLvoid GR_GL_FUNCTION_TYPE();
82*c8dee2aaSAndroid Build Coastguard Worker using GrGLFlushMappedBufferRangeFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLintptr offset, GrGLsizeiptr length);
83*c8dee2aaSAndroid Build Coastguard Worker using GrGLFramebufferRenderbufferFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum attachment, GrGLenum renderbuffertarget, GrGLuint renderbuffer);
84*c8dee2aaSAndroid Build Coastguard Worker using GrGLFramebufferTexture2DFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum attachment, GrGLenum textarget, GrGLuint texture, GrGLint level);
85*c8dee2aaSAndroid Build Coastguard Worker using GrGLFramebufferTexture2DMultisampleFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum attachment, GrGLenum textarget, GrGLuint texture, GrGLint level, GrGLsizei samples);
86*c8dee2aaSAndroid Build Coastguard Worker using GrGLFrontFaceFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode);
87*c8dee2aaSAndroid Build Coastguard Worker using GrGLGenBuffersFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, GrGLuint* buffers);
88*c8dee2aaSAndroid Build Coastguard Worker using GrGLGenFencesFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, GrGLuint* fences);
89*c8dee2aaSAndroid Build Coastguard Worker using GrGLGenFramebuffersFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, GrGLuint* framebuffers);
90*c8dee2aaSAndroid Build Coastguard Worker using GrGLGenerateMipmapFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target);
91*c8dee2aaSAndroid Build Coastguard Worker using GrGLGenQueriesFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, GrGLuint* ids);
92*c8dee2aaSAndroid Build Coastguard Worker using GrGLGenRenderbuffersFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, GrGLuint* renderbuffers);
93*c8dee2aaSAndroid Build Coastguard Worker using GrGLGenSamplersFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei count, GrGLuint* samplers);
94*c8dee2aaSAndroid Build Coastguard Worker using GrGLGenTexturesFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, GrGLuint* textures);
95*c8dee2aaSAndroid Build Coastguard Worker using GrGLGenVertexArraysFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei n, GrGLuint* arrays);
96*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetBufferParameterivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum pname, GrGLint* params);
97*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetErrorFn = GrGLenum GR_GL_FUNCTION_TYPE();
98*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetFramebufferAttachmentParameterivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum attachment, GrGLenum pname, GrGLint* params);
99*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetFloatvFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum pname, GrGLfloat* params);
100*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetIntegervFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum pname, GrGLint* params);
101*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetMultisamplefvFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum pname, GrGLuint index, GrGLfloat* val);
102*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetProgramBinaryFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program, GrGLsizei bufsize, GrGLsizei* length, GrGLenum* binaryFormat, void* binary);
103*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetProgramInfoLogFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program, GrGLsizei bufsize, GrGLsizei* length, char* infolog);
104*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetProgramivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program, GrGLenum pname, GrGLint* params);
105*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetQueryivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum GLtarget, GrGLenum pname, GrGLint* params);
106*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetQueryObjecti64vFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint id, GrGLenum pname, GrGLint64* params);
107*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetQueryObjectui64vFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint id, GrGLenum pname, GrGLuint64* params);
108*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetQueryObjectuivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint id, GrGLenum pname, GrGLuint* params);
109*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetRenderbufferParameterivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum pname, GrGLint* params);
110*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetShaderInfoLogFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint shader, GrGLsizei bufsize, GrGLsizei* length, char* infolog);
111*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetShaderivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint shader, GrGLenum pname, GrGLint* params);
112*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetShaderPrecisionFormatFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum shadertype, GrGLenum precisiontype, GrGLint* range, GrGLint* precision);
113*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetStringFn = const GrGLubyte* GR_GL_FUNCTION_TYPE(GrGLenum name);
114*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetStringiFn = const GrGLubyte* GR_GL_FUNCTION_TYPE(GrGLenum name, GrGLuint index);
115*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetTexLevelParameterivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLint level, GrGLenum pname, GrGLint* params);
116*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetUniformLocationFn = GrGLint GR_GL_FUNCTION_TYPE(GrGLuint program, const char* name);
117*c8dee2aaSAndroid Build Coastguard Worker using GrGLInsertEventMarkerFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei length, const char* marker);
118*c8dee2aaSAndroid Build Coastguard Worker using GrGLInvalidateBufferDataFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint buffer);
119*c8dee2aaSAndroid Build Coastguard Worker using GrGLInvalidateBufferSubDataFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint buffer, GrGLintptr offset, GrGLsizeiptr length);
120*c8dee2aaSAndroid Build Coastguard Worker using GrGLInvalidateFramebufferFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLsizei numAttachments, const GrGLenum* attachments);
121*c8dee2aaSAndroid Build Coastguard Worker using GrGLInvalidateSubFramebufferFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLsizei numAttachments, const GrGLenum* attachments, GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height);
122*c8dee2aaSAndroid Build Coastguard Worker using GrGLInvalidateTexImageFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint texture, GrGLint level);
123*c8dee2aaSAndroid Build Coastguard Worker using GrGLInvalidateTexSubImageFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint texture, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLint zoffset, GrGLsizei width, GrGLsizei height, GrGLsizei depth);
124*c8dee2aaSAndroid Build Coastguard Worker using GrGLIsTextureFn = GrGLboolean GR_GL_FUNCTION_TYPE(GrGLuint texture);
125*c8dee2aaSAndroid Build Coastguard Worker using GrGLLineWidthFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLfloat width);
126*c8dee2aaSAndroid Build Coastguard Worker using GrGLLinkProgramFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program);
127*c8dee2aaSAndroid Build Coastguard Worker using GrGLMapBufferFn = GrGLvoid* GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum access);
128*c8dee2aaSAndroid Build Coastguard Worker using GrGLMapBufferRangeFn = GrGLvoid* GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLintptr offset, GrGLsizeiptr length, GrGLbitfield access);
129*c8dee2aaSAndroid Build Coastguard Worker using GrGLMapBufferSubDataFn = GrGLvoid* GR_GL_FUNCTION_TYPE(GrGLuint target, GrGLintptr offset, GrGLsizeiptr size, GrGLenum access);
130*c8dee2aaSAndroid Build Coastguard Worker using GrGLMapTexSubImage2DFn = GrGLvoid* GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLsizei width, GrGLsizei height, GrGLenum format, GrGLenum type, GrGLenum access);
131*c8dee2aaSAndroid Build Coastguard Worker using GrGLMemoryBarrierFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLbitfield barriers);
132*c8dee2aaSAndroid Build Coastguard Worker using GrGLPatchParameteriFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum pname, GrGLint value);
133*c8dee2aaSAndroid Build Coastguard Worker using GrGLPixelStoreiFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum pname, GrGLint param);
134*c8dee2aaSAndroid Build Coastguard Worker using GrGLPolygonModeFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum face, GrGLenum mode);
135*c8dee2aaSAndroid Build Coastguard Worker using GrGLPopGroupMarkerFn = GrGLvoid GR_GL_FUNCTION_TYPE();
136*c8dee2aaSAndroid Build Coastguard Worker using GrGLProgramBinaryFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program, GrGLenum binaryFormat, void* binary, GrGLsizei length);
137*c8dee2aaSAndroid Build Coastguard Worker using GrGLProgramParameteriFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program, GrGLenum pname, GrGLint value);
138*c8dee2aaSAndroid Build Coastguard Worker using GrGLPushGroupMarkerFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsizei length, const char* marker);
139*c8dee2aaSAndroid Build Coastguard Worker using GrGLQueryCounterFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint id, GrGLenum target);
140*c8dee2aaSAndroid Build Coastguard Worker using GrGLReadBufferFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum src);
141*c8dee2aaSAndroid Build Coastguard Worker using GrGLReadPixelsFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height, GrGLenum format, GrGLenum type, GrGLvoid* pixels);
142*c8dee2aaSAndroid Build Coastguard Worker using GrGLRenderbufferStorageFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum internalformat, GrGLsizei width, GrGLsizei height);
143*c8dee2aaSAndroid Build Coastguard Worker using GrGLRenderbufferStorageMultisampleFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLsizei samples, GrGLenum internalformat, GrGLsizei width, GrGLsizei height);
144*c8dee2aaSAndroid Build Coastguard Worker using GrGLResolveMultisampleFramebufferFn = GrGLvoid GR_GL_FUNCTION_TYPE();
145*c8dee2aaSAndroid Build Coastguard Worker using GrGLSamplerParameterfFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint sampler, GrGLenum pname, GrGLfloat param);
146*c8dee2aaSAndroid Build Coastguard Worker using GrGLSamplerParameteriFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint sampler, GrGLenum pname, GrGLint param);
147*c8dee2aaSAndroid Build Coastguard Worker using GrGLSamplerParameterivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint sampler, GrGLenum pname, const GrGLint* params);
148*c8dee2aaSAndroid Build Coastguard Worker using GrGLScissorFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height);
149*c8dee2aaSAndroid Build Coastguard Worker // GL_CHROMIUM_bind_uniform_location
150*c8dee2aaSAndroid Build Coastguard Worker using GrGLBindUniformLocationFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program, GrGLint location, const char* name);
151*c8dee2aaSAndroid Build Coastguard Worker using GrGLSetFenceFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint fence, GrGLenum condition);
152*c8dee2aaSAndroid Build Coastguard Worker using GrGLShaderSourceFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint shader, GrGLsizei count, const char* const* str, const GrGLint* length);
153*c8dee2aaSAndroid Build Coastguard Worker using GrGLStencilFuncFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum func, GrGLint ref, GrGLuint mask);
154*c8dee2aaSAndroid Build Coastguard Worker using GrGLStencilFuncSeparateFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum face, GrGLenum func, GrGLint ref, GrGLuint mask);
155*c8dee2aaSAndroid Build Coastguard Worker using GrGLStencilMaskFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint mask);
156*c8dee2aaSAndroid Build Coastguard Worker using GrGLStencilMaskSeparateFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum face, GrGLuint mask);
157*c8dee2aaSAndroid Build Coastguard Worker using GrGLStencilOpFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum fail, GrGLenum zfail, GrGLenum zpass);
158*c8dee2aaSAndroid Build Coastguard Worker using GrGLStencilOpSeparateFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum face, GrGLenum fail, GrGLenum zfail, GrGLenum zpass);
159*c8dee2aaSAndroid Build Coastguard Worker using GrGLTexBufferFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum internalformat, GrGLuint buffer);
160*c8dee2aaSAndroid Build Coastguard Worker using GrGLTexBufferRangeFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum internalformat, GrGLuint buffer, GrGLintptr offset, GrGLsizeiptr size);
161*c8dee2aaSAndroid Build Coastguard Worker using GrGLTexImage2DFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLint level, GrGLint internalformat, GrGLsizei width, GrGLsizei height, GrGLint border, GrGLenum format, GrGLenum type, const GrGLvoid* pixels);
162*c8dee2aaSAndroid Build Coastguard Worker using GrGLTexParameterfFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum pname, GrGLfloat param);
163*c8dee2aaSAndroid Build Coastguard Worker using GrGLTexParameterfvFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum pname, const GrGLfloat* params);
164*c8dee2aaSAndroid Build Coastguard Worker using GrGLTexParameteriFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum pname, GrGLint param);
165*c8dee2aaSAndroid Build Coastguard Worker using GrGLTexParameterivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum pname, const GrGLint* params);
166*c8dee2aaSAndroid Build Coastguard Worker using GrGLTexStorage2DFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLsizei levels, GrGLenum internalformat, GrGLsizei width, GrGLsizei height);
167*c8dee2aaSAndroid Build Coastguard Worker using GrGLDiscardFramebufferFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLsizei numAttachments, const GrGLenum* attachments);
168*c8dee2aaSAndroid Build Coastguard Worker using GrGLTestFenceFn = GrGLboolean GR_GL_FUNCTION_TYPE(GrGLuint fence);
169*c8dee2aaSAndroid Build Coastguard Worker using GrGLTexSubImage2DFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLsizei width, GrGLsizei height, GrGLenum format, GrGLenum type, const GrGLvoid* pixels);
170*c8dee2aaSAndroid Build Coastguard Worker using GrGLTextureBarrierFn = GrGLvoid GR_GL_FUNCTION_TYPE();
171*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform1fFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLfloat v0);
172*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform1iFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLint v0);
173*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform1fvFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLsizei count, const GrGLfloat* v);
174*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform1ivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLsizei count, const GrGLint* v);
175*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform2fFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLfloat v0, GrGLfloat v1);
176*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform2iFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLint v0, GrGLint v1);
177*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform2fvFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLsizei count, const GrGLfloat* v);
178*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform2ivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLsizei count, const GrGLint* v);
179*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform3fFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLfloat v0, GrGLfloat v1, GrGLfloat v2);
180*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform3iFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLint v0, GrGLint v1, GrGLint v2);
181*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform3fvFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLsizei count, const GrGLfloat* v);
182*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform3ivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLsizei count, const GrGLint* v);
183*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform4fFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLfloat v0, GrGLfloat v1, GrGLfloat v2, GrGLfloat v3);
184*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform4iFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLint v0, GrGLint v1, GrGLint v2, GrGLint v3);
185*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform4fvFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLsizei count, const GrGLfloat* v);
186*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniform4ivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLsizei count, const GrGLint* v);
187*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniformMatrix2fvFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLsizei count, GrGLboolean transpose, const GrGLfloat* value);
188*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniformMatrix3fvFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLsizei count, GrGLboolean transpose, const GrGLfloat* value);
189*c8dee2aaSAndroid Build Coastguard Worker using GrGLUniformMatrix4fvFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint location, GrGLsizei count, GrGLboolean transpose, const GrGLfloat* value);
190*c8dee2aaSAndroid Build Coastguard Worker using GrGLUnmapBufferFn = GrGLboolean GR_GL_FUNCTION_TYPE(GrGLenum target);
191*c8dee2aaSAndroid Build Coastguard Worker using GrGLUnmapBufferSubDataFn = GrGLvoid GR_GL_FUNCTION_TYPE(const GrGLvoid* mem);
192*c8dee2aaSAndroid Build Coastguard Worker using GrGLUnmapTexSubImage2DFn = GrGLvoid GR_GL_FUNCTION_TYPE(const GrGLvoid* mem);
193*c8dee2aaSAndroid Build Coastguard Worker using GrGLUseProgramFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program);
194*c8dee2aaSAndroid Build Coastguard Worker using GrGLVertexAttrib1fFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint indx, const GrGLfloat value);
195*c8dee2aaSAndroid Build Coastguard Worker using GrGLVertexAttrib2fvFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint indx, const GrGLfloat* values);
196*c8dee2aaSAndroid Build Coastguard Worker using GrGLVertexAttrib3fvFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint indx, const GrGLfloat* values);
197*c8dee2aaSAndroid Build Coastguard Worker using GrGLVertexAttrib4fvFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint indx, const GrGLfloat* values);
198*c8dee2aaSAndroid Build Coastguard Worker using GrGLVertexAttribDivisorFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint index, GrGLuint divisor);
199*c8dee2aaSAndroid Build Coastguard Worker using GrGLVertexAttribIPointerFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint indx, GrGLint size, GrGLenum type, GrGLsizei stride, const GrGLvoid* ptr);
200*c8dee2aaSAndroid Build Coastguard Worker using GrGLVertexAttribPointerFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint indx, GrGLint size, GrGLenum type, GrGLboolean normalized, GrGLsizei stride, const GrGLvoid* ptr);
201*c8dee2aaSAndroid Build Coastguard Worker using GrGLViewportFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height);
202*c8dee2aaSAndroid Build Coastguard Worker 
203*c8dee2aaSAndroid Build Coastguard Worker /* GL_NV_framebuffer_mixed_samples */
204*c8dee2aaSAndroid Build Coastguard Worker using GrGLCoverageModulationFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum components);
205*c8dee2aaSAndroid Build Coastguard Worker 
206*c8dee2aaSAndroid Build Coastguard Worker /* EXT_base_instance */
207*c8dee2aaSAndroid Build Coastguard Worker using GrGLDrawArraysInstancedBaseInstanceFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, GrGLint first, GrGLsizei count, GrGLsizei instancecount, GrGLuint baseinstance);
208*c8dee2aaSAndroid Build Coastguard Worker using GrGLDrawElementsInstancedBaseVertexBaseInstanceFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, GrGLsizei count, GrGLenum type, const void *indices, GrGLsizei instancecount, GrGLint basevertex, GrGLuint baseinstance);
209*c8dee2aaSAndroid Build Coastguard Worker 
210*c8dee2aaSAndroid Build Coastguard Worker /* EXT_multi_draw_indirect */
211*c8dee2aaSAndroid Build Coastguard Worker using GrGLMultiDrawArraysIndirectFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, const GrGLvoid* indirect, GrGLsizei drawcount, GrGLsizei stride);
212*c8dee2aaSAndroid Build Coastguard Worker using GrGLMultiDrawElementsIndirectFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, GrGLenum type, const GrGLvoid* indirect, GrGLsizei drawcount, GrGLsizei stride);
213*c8dee2aaSAndroid Build Coastguard Worker 
214*c8dee2aaSAndroid Build Coastguard Worker /* ANGLE_base_vertex_base_instance */
215*c8dee2aaSAndroid Build Coastguard Worker using GrGLMultiDrawArraysInstancedBaseInstanceFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, const GrGLint* firsts, const GrGLsizei* counts, const GrGLsizei* instanceCounts, const GrGLuint* baseInstances, const GrGLsizei drawcount);
216*c8dee2aaSAndroid Build Coastguard Worker using GrGLMultiDrawElementsInstancedBaseVertexBaseInstanceFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, const GrGLint* counts, GrGLenum type, const GrGLvoid* const* indices, const GrGLsizei* instanceCounts, const GrGLint* baseVertices, const GrGLuint* baseInstances, const GrGLsizei drawcount);
217*c8dee2aaSAndroid Build Coastguard Worker 
218*c8dee2aaSAndroid Build Coastguard Worker /* ARB_sync */
219*c8dee2aaSAndroid Build Coastguard Worker using GrGLFenceSyncFn = GrGLsync GR_GL_FUNCTION_TYPE(GrGLenum condition, GrGLbitfield flags);
220*c8dee2aaSAndroid Build Coastguard Worker using GrGLIsSyncFn = GrGLboolean GR_GL_FUNCTION_TYPE(GrGLsync sync);
221*c8dee2aaSAndroid Build Coastguard Worker #if defined(__EMSCRIPTEN__)
222*c8dee2aaSAndroid Build Coastguard Worker using GrGLClientWaitSyncFn = GrGLenum GR_GL_FUNCTION_TYPE(GrGLsync sync, GrGLbitfield flags, GrGLint timeoutLo, GrGLint timeoutHi);
223*c8dee2aaSAndroid Build Coastguard Worker using GrGLWaitSyncFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsync sync, GrGLbitfield flags, GrGLuint timeoutLo, GrGLuint timeoutHi);
224*c8dee2aaSAndroid Build Coastguard Worker #else
225*c8dee2aaSAndroid Build Coastguard Worker using GrGLClientWaitSyncFn = GrGLenum GR_GL_FUNCTION_TYPE(GrGLsync sync, GrGLbitfield flags, GrGLuint64 timeout);
226*c8dee2aaSAndroid Build Coastguard Worker using GrGLWaitSyncFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsync sync, GrGLbitfield flags, GrGLuint64 timeout);
227*c8dee2aaSAndroid Build Coastguard Worker #endif
228*c8dee2aaSAndroid Build Coastguard Worker using GrGLDeleteSyncFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsync sync);
229*c8dee2aaSAndroid Build Coastguard Worker 
230*c8dee2aaSAndroid Build Coastguard Worker /* ARB_internalformat_query */
231*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetInternalformativFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum internalformat, GrGLenum pname, GrGLsizei bufSize, GrGLint* params);
232*c8dee2aaSAndroid Build Coastguard Worker 
233*c8dee2aaSAndroid Build Coastguard Worker /* KHR_debug */
234*c8dee2aaSAndroid Build Coastguard Worker using GrGLDebugMessageControlFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum source, GrGLenum type, GrGLenum severity, GrGLsizei count, const GrGLuint* ids, GrGLboolean enabled);
235*c8dee2aaSAndroid Build Coastguard Worker using GrGLDebugMessageInsertFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum source, GrGLenum type, GrGLuint id, GrGLenum severity, GrGLsizei length, const GrGLchar* buf);
236*c8dee2aaSAndroid Build Coastguard Worker using GrGLDebugMessageCallbackFn = GrGLvoid GR_GL_FUNCTION_TYPE(GRGLDEBUGPROC callback, const GrGLvoid* userParam);
237*c8dee2aaSAndroid Build Coastguard Worker using GrGLGetDebugMessageLogFn = GrGLuint GR_GL_FUNCTION_TYPE(GrGLuint count, GrGLsizei bufSize, GrGLenum* sources, GrGLenum* types, GrGLuint* ids, GrGLenum* severities, GrGLsizei* lengths, GrGLchar* messageLog);
238*c8dee2aaSAndroid Build Coastguard Worker using GrGLPushDebugGroupFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum source, GrGLuint id, GrGLsizei length, const GrGLchar* message);
239*c8dee2aaSAndroid Build Coastguard Worker using GrGLPopDebugGroupFn = GrGLvoid GR_GL_FUNCTION_TYPE();
240*c8dee2aaSAndroid Build Coastguard Worker using GrGLObjectLabelFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum identifier, GrGLuint name, GrGLsizei length, const GrGLchar* label);
241*c8dee2aaSAndroid Build Coastguard Worker 
242*c8dee2aaSAndroid Build Coastguard Worker /** EXT_window_rectangles */
243*c8dee2aaSAndroid Build Coastguard Worker using GrGLWindowRectanglesFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum mode, GrGLsizei count, const GrGLint box[]);
244*c8dee2aaSAndroid Build Coastguard Worker 
245*c8dee2aaSAndroid Build Coastguard Worker /** GL_QCOM_tiled_rendering */
246*c8dee2aaSAndroid Build Coastguard Worker using GrGLStartTilingFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint x, GrGLuint y, GrGLuint width, GrGLuint height, GrGLbitfield preserveMask);
247*c8dee2aaSAndroid Build Coastguard Worker using GrGLEndTilingFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLbitfield preserveMask);
248*c8dee2aaSAndroid Build Coastguard Worker 
249*c8dee2aaSAndroid Build Coastguard Worker /** EGL functions */
250*c8dee2aaSAndroid Build Coastguard Worker using GrEGLQueryStringFn = const char* GR_GL_FUNCTION_TYPE(GrEGLDisplay dpy, GrEGLint name);
251*c8dee2aaSAndroid Build Coastguard Worker using GrEGLGetCurrentDisplayFn = GrEGLDisplay GR_GL_FUNCTION_TYPE();
252*c8dee2aaSAndroid Build Coastguard Worker using GrEGLCreateImageFn = GrEGLImage GR_GL_FUNCTION_TYPE(GrEGLDisplay dpy, GrEGLContext ctx, GrEGLenum target, GrEGLClientBuffer buffer, const GrEGLint* attrib_list);
253*c8dee2aaSAndroid Build Coastguard Worker using GrEGLDestroyImageFn = GrEGLBoolean GR_GL_FUNCTION_TYPE(GrEGLDisplay dpy, GrEGLImage image);
254*c8dee2aaSAndroid Build Coastguard Worker }  // extern "C"
255*c8dee2aaSAndroid Build Coastguard Worker 
256*c8dee2aaSAndroid Build Coastguard Worker // This is a lighter-weight std::function, trying to reduce code size and compile time
257*c8dee2aaSAndroid Build Coastguard Worker // by only supporting the exact use cases we require.
258*c8dee2aaSAndroid Build Coastguard Worker template <typename T> class GrGLFunction;
259*c8dee2aaSAndroid Build Coastguard Worker 
260*c8dee2aaSAndroid Build Coastguard Worker template <typename R, typename... Args>
261*c8dee2aaSAndroid Build Coastguard Worker class GrGLFunction<R GR_GL_FUNCTION_TYPE(Args...)> {
262*c8dee2aaSAndroid Build Coastguard Worker public:
263*c8dee2aaSAndroid Build Coastguard Worker     using Fn = R GR_GL_FUNCTION_TYPE(Args...);
264*c8dee2aaSAndroid Build Coastguard Worker     // Construct empty.
265*c8dee2aaSAndroid Build Coastguard Worker     GrGLFunction() = default;
GrGLFunction(std::nullptr_t)266*c8dee2aaSAndroid Build Coastguard Worker     GrGLFunction(std::nullptr_t) {}
267*c8dee2aaSAndroid Build Coastguard Worker 
268*c8dee2aaSAndroid Build Coastguard Worker     // Construct from a simple function pointer.
GrGLFunction(Fn * fn_ptr)269*c8dee2aaSAndroid Build Coastguard Worker     GrGLFunction(Fn* fn_ptr) {
270*c8dee2aaSAndroid Build Coastguard Worker         static_assert(sizeof(fn_ptr) <= sizeof(fBuf), "fBuf is too small");
271*c8dee2aaSAndroid Build Coastguard Worker         if (fn_ptr) {
272*c8dee2aaSAndroid Build Coastguard Worker             memcpy(fBuf, &fn_ptr, sizeof(fn_ptr));
273*c8dee2aaSAndroid Build Coastguard Worker             fCall = [](const void* buf, Args... args) {
274*c8dee2aaSAndroid Build Coastguard Worker                 return (*(Fn* const *)buf)(std::forward<Args>(args)...);
275*c8dee2aaSAndroid Build Coastguard Worker             };
276*c8dee2aaSAndroid Build Coastguard Worker         }
277*c8dee2aaSAndroid Build Coastguard Worker     }
278*c8dee2aaSAndroid Build Coastguard Worker 
279*c8dee2aaSAndroid Build Coastguard Worker     // Construct from a small closure.
280*c8dee2aaSAndroid Build Coastguard Worker     template <typename Closure>
GrGLFunction(Closure closure)281*c8dee2aaSAndroid Build Coastguard Worker     GrGLFunction(Closure closure) : GrGLFunction() {
282*c8dee2aaSAndroid Build Coastguard Worker         static_assert(sizeof(Closure) <= sizeof(fBuf), "fBuf is too small");
283*c8dee2aaSAndroid Build Coastguard Worker #if defined(__APPLE__)  // I am having serious trouble getting these to work with all STLs...
284*c8dee2aaSAndroid Build Coastguard Worker         static_assert(std::is_trivially_copyable<Closure>::value, "");
285*c8dee2aaSAndroid Build Coastguard Worker         static_assert(std::is_trivially_destructible<Closure>::value, "");
286*c8dee2aaSAndroid Build Coastguard Worker #endif
287*c8dee2aaSAndroid Build Coastguard Worker 
288*c8dee2aaSAndroid Build Coastguard Worker         memcpy(fBuf, &closure, sizeof(closure));
289*c8dee2aaSAndroid Build Coastguard Worker         fCall = [](const void* buf, Args... args) {
290*c8dee2aaSAndroid Build Coastguard Worker             auto closure = (const Closure*)buf;
291*c8dee2aaSAndroid Build Coastguard Worker             return (*closure)(args...);
292*c8dee2aaSAndroid Build Coastguard Worker         };
293*c8dee2aaSAndroid Build Coastguard Worker     }
294*c8dee2aaSAndroid Build Coastguard Worker 
operator()295*c8dee2aaSAndroid Build Coastguard Worker     R operator()(Args... args) const {
296*c8dee2aaSAndroid Build Coastguard Worker         SkASSERT(fCall);
297*c8dee2aaSAndroid Build Coastguard Worker         return fCall(fBuf, std::forward<Args>(args)...);
298*c8dee2aaSAndroid Build Coastguard Worker     }
299*c8dee2aaSAndroid Build Coastguard Worker 
300*c8dee2aaSAndroid Build Coastguard Worker     explicit operator bool() const { return fCall != nullptr; }
301*c8dee2aaSAndroid Build Coastguard Worker 
reset()302*c8dee2aaSAndroid Build Coastguard Worker     void reset() { fCall = nullptr; }
303*c8dee2aaSAndroid Build Coastguard Worker 
304*c8dee2aaSAndroid Build Coastguard Worker private:
305*c8dee2aaSAndroid Build Coastguard Worker     using Call = R(const void* buf, Args...);
306*c8dee2aaSAndroid Build Coastguard Worker     Call* fCall = nullptr;
307*c8dee2aaSAndroid Build Coastguard Worker     size_t fBuf[4];
308*c8dee2aaSAndroid Build Coastguard Worker };
309*c8dee2aaSAndroid Build Coastguard Worker 
310*c8dee2aaSAndroid Build Coastguard Worker #endif
311