xref: /aosp_15_r20/external/skia/include/gpu/ganesh/gl/GrGLInterface.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker  * Copyright 2011 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 GrGLInterface_DEFINED
9*c8dee2aaSAndroid Build Coastguard Worker #define GrGLInterface_DEFINED
10*c8dee2aaSAndroid Build Coastguard Worker 
11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h"
12*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/gl/GrGLExtensions.h"
13*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/gl/GrGLFunctions.h"
14*c8dee2aaSAndroid Build Coastguard Worker 
15*c8dee2aaSAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////////
16*c8dee2aaSAndroid Build Coastguard Worker 
17*c8dee2aaSAndroid Build Coastguard Worker typedef void(*GrGLFuncPtr)();
18*c8dee2aaSAndroid Build Coastguard Worker struct GrGLInterface;
19*c8dee2aaSAndroid Build Coastguard Worker 
20*c8dee2aaSAndroid Build Coastguard Worker 
21*c8dee2aaSAndroid Build Coastguard Worker #if !defined(SK_DISABLE_LEGACY_GL_MAKE_NATIVE_INTERFACE)
22*c8dee2aaSAndroid Build Coastguard Worker /**
23*c8dee2aaSAndroid Build Coastguard Worker  * Rather than depend on platform-specific GL headers and libraries, we require
24*c8dee2aaSAndroid Build Coastguard Worker  * the client to provide a struct of GL function pointers. This struct can be
25*c8dee2aaSAndroid Build Coastguard Worker  * specified per-GrContext as a parameter to GrContext::MakeGL. If no interface is
26*c8dee2aaSAndroid Build Coastguard Worker  * passed to MakeGL then a default GL interface is created using GrGLMakeNativeInterface().
27*c8dee2aaSAndroid Build Coastguard Worker  * If this returns nullptr then GrContext::MakeGL() will fail.
28*c8dee2aaSAndroid Build Coastguard Worker  *
29*c8dee2aaSAndroid Build Coastguard Worker  * The implementation of GrGLMakeNativeInterface is platform-specific. Several
30*c8dee2aaSAndroid Build Coastguard Worker  * implementations have been provided (for GLX, WGL, EGL, etc), along with an
31*c8dee2aaSAndroid Build Coastguard Worker  * implementation that simply returns nullptr. Clients should select the most
32*c8dee2aaSAndroid Build Coastguard Worker  * appropriate one to build.
33*c8dee2aaSAndroid Build Coastguard Worker  */
34*c8dee2aaSAndroid Build Coastguard Worker SK_API sk_sp<const GrGLInterface> GrGLMakeNativeInterface();
35*c8dee2aaSAndroid Build Coastguard Worker #endif
36*c8dee2aaSAndroid Build Coastguard Worker 
37*c8dee2aaSAndroid Build Coastguard Worker /**
38*c8dee2aaSAndroid Build Coastguard Worker  * GrContext uses the following interface to make all calls into OpenGL. When a
39*c8dee2aaSAndroid Build Coastguard Worker  * GrContext is created it is given a GrGLInterface. The interface's function
40*c8dee2aaSAndroid Build Coastguard Worker  * pointers must be valid for the OpenGL context associated with the GrContext.
41*c8dee2aaSAndroid Build Coastguard Worker  * On some platforms, such as Windows, function pointers for OpenGL extensions
42*c8dee2aaSAndroid Build Coastguard Worker  * may vary between OpenGL contexts. So the caller must be careful to use a
43*c8dee2aaSAndroid Build Coastguard Worker  * GrGLInterface initialized for the correct context. All functions that should
44*c8dee2aaSAndroid Build Coastguard Worker  * be available based on the OpenGL's version and extension string must be
45*c8dee2aaSAndroid Build Coastguard Worker  * non-NULL or GrContext creation will fail. This can be tested with the
46*c8dee2aaSAndroid Build Coastguard Worker  * validate() method when the OpenGL context has been made current.
47*c8dee2aaSAndroid Build Coastguard Worker  */
48*c8dee2aaSAndroid Build Coastguard Worker struct SK_API GrGLInterface : public SkRefCnt {
49*c8dee2aaSAndroid Build Coastguard Worker private:
50*c8dee2aaSAndroid Build Coastguard Worker     using INHERITED = SkRefCnt;
51*c8dee2aaSAndroid Build Coastguard Worker 
52*c8dee2aaSAndroid Build Coastguard Worker #if GR_GL_CHECK_ERROR
53*c8dee2aaSAndroid Build Coastguard Worker     // This is here to avoid having our debug code that checks for a GL error after most GL calls
54*c8dee2aaSAndroid Build Coastguard Worker     // accidentally swallow an OOM that should be reported.
55*c8dee2aaSAndroid Build Coastguard Worker     mutable bool fOOMed = false;
56*c8dee2aaSAndroid Build Coastguard Worker     bool fSuppressErrorLogging = false;
57*c8dee2aaSAndroid Build Coastguard Worker #endif
58*c8dee2aaSAndroid Build Coastguard Worker 
59*c8dee2aaSAndroid Build Coastguard Worker public:
60*c8dee2aaSAndroid Build Coastguard Worker     GrGLInterface();
61*c8dee2aaSAndroid Build Coastguard Worker 
62*c8dee2aaSAndroid Build Coastguard Worker     // Validates that the GrGLInterface supports its advertised standard. This means the necessary
63*c8dee2aaSAndroid Build Coastguard Worker     // function pointers have been initialized for both the GL version and any advertised
64*c8dee2aaSAndroid Build Coastguard Worker     // extensions.
65*c8dee2aaSAndroid Build Coastguard Worker     bool validate() const;
66*c8dee2aaSAndroid Build Coastguard Worker 
67*c8dee2aaSAndroid Build Coastguard Worker #if GR_GL_CHECK_ERROR
68*c8dee2aaSAndroid Build Coastguard Worker     GrGLenum checkError(const char* location, const char* call) const;
69*c8dee2aaSAndroid Build Coastguard Worker     bool checkAndResetOOMed() const;
70*c8dee2aaSAndroid Build Coastguard Worker     void suppressErrorLogging();
71*c8dee2aaSAndroid Build Coastguard Worker #endif
72*c8dee2aaSAndroid Build Coastguard Worker 
73*c8dee2aaSAndroid Build Coastguard Worker #if defined(GPU_TEST_UTILS)
GrGLInterfaceGrGLInterface74*c8dee2aaSAndroid Build Coastguard Worker     GrGLInterface(const GrGLInterface& that)
75*c8dee2aaSAndroid Build Coastguard Worker             : fStandard(that.fStandard)
76*c8dee2aaSAndroid Build Coastguard Worker             , fExtensions(that.fExtensions)
77*c8dee2aaSAndroid Build Coastguard Worker             , fFunctions(that.fFunctions) {}
78*c8dee2aaSAndroid Build Coastguard Worker #endif
79*c8dee2aaSAndroid Build Coastguard Worker 
80*c8dee2aaSAndroid Build Coastguard Worker     // Indicates the type of GL implementation
81*c8dee2aaSAndroid Build Coastguard Worker     GrGLStandard fStandard;
82*c8dee2aaSAndroid Build Coastguard Worker     GrGLExtensions fExtensions;
83*c8dee2aaSAndroid Build Coastguard Worker 
hasExtensionGrGLInterface84*c8dee2aaSAndroid Build Coastguard Worker     bool hasExtension(const char ext[]) const { return fExtensions.has(ext); }
85*c8dee2aaSAndroid Build Coastguard Worker 
86*c8dee2aaSAndroid Build Coastguard Worker     /**
87*c8dee2aaSAndroid Build Coastguard Worker      * The function pointers are in a struct so that we can have a compiler generated assignment
88*c8dee2aaSAndroid Build Coastguard Worker      * operator.
89*c8dee2aaSAndroid Build Coastguard Worker      */
90*c8dee2aaSAndroid Build Coastguard Worker     struct Functions {
91*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLActiveTextureFn> fActiveTexture;
92*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLAttachShaderFn> fAttachShader;
93*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLBeginQueryFn> fBeginQuery;
94*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLBindAttribLocationFn> fBindAttribLocation;
95*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLBindBufferFn> fBindBuffer;
96*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLBindFragDataLocationFn> fBindFragDataLocation;
97*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLBindFragDataLocationIndexedFn> fBindFragDataLocationIndexed;
98*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLBindFramebufferFn> fBindFramebuffer;
99*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLBindRenderbufferFn> fBindRenderbuffer;
100*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLBindSamplerFn> fBindSampler;
101*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLBindTextureFn> fBindTexture;
102*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLBindVertexArrayFn> fBindVertexArray;
103*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLBlendBarrierFn> fBlendBarrier;
104*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLBlendColorFn> fBlendColor;
105*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLBlendEquationFn> fBlendEquation;
106*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLBlendFuncFn> fBlendFunc;
107*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLBlitFramebufferFn> fBlitFramebuffer;
108*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLBufferDataFn> fBufferData;
109*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLBufferSubDataFn> fBufferSubData;
110*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLCheckFramebufferStatusFn> fCheckFramebufferStatus;
111*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLClearFn> fClear;
112*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLClearColorFn> fClearColor;
113*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLClearStencilFn> fClearStencil;
114*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLClearTexImageFn> fClearTexImage;
115*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLClearTexSubImageFn> fClearTexSubImage;
116*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLColorMaskFn> fColorMask;
117*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLCompileShaderFn> fCompileShader;
118*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLCompressedTexImage2DFn> fCompressedTexImage2D;
119*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLCompressedTexSubImage2DFn> fCompressedTexSubImage2D;
120*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLCopyBufferSubDataFn> fCopyBufferSubData;
121*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLCopyTexSubImage2DFn> fCopyTexSubImage2D;
122*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLCreateProgramFn> fCreateProgram;
123*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLCreateShaderFn> fCreateShader;
124*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLCullFaceFn> fCullFace;
125*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDeleteBuffersFn> fDeleteBuffers;
126*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDeleteFencesFn> fDeleteFences;
127*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDeleteFramebuffersFn> fDeleteFramebuffers;
128*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDeleteProgramFn> fDeleteProgram;
129*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDeleteQueriesFn> fDeleteQueries;
130*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDeleteRenderbuffersFn> fDeleteRenderbuffers;
131*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDeleteSamplersFn> fDeleteSamplers;
132*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDeleteShaderFn> fDeleteShader;
133*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDeleteTexturesFn> fDeleteTextures;
134*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDeleteVertexArraysFn> fDeleteVertexArrays;
135*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDepthMaskFn> fDepthMask;
136*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDisableFn> fDisable;
137*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDisableVertexAttribArrayFn> fDisableVertexAttribArray;
138*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDrawArraysFn> fDrawArrays;
139*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDrawArraysIndirectFn> fDrawArraysIndirect;
140*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDrawArraysInstancedFn> fDrawArraysInstanced;
141*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDrawBufferFn> fDrawBuffer;
142*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDrawBuffersFn> fDrawBuffers;
143*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDrawElementsFn> fDrawElements;
144*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDrawElementsIndirectFn> fDrawElementsIndirect;
145*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDrawElementsInstancedFn> fDrawElementsInstanced;
146*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDrawRangeElementsFn> fDrawRangeElements;
147*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLEnableFn> fEnable;
148*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLEnableVertexAttribArrayFn> fEnableVertexAttribArray;
149*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLEndQueryFn> fEndQuery;
150*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLFinishFn> fFinish;
151*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLFinishFenceFn> fFinishFence;
152*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLFlushFn> fFlush;
153*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLFlushMappedBufferRangeFn> fFlushMappedBufferRange;
154*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLFramebufferRenderbufferFn> fFramebufferRenderbuffer;
155*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLFramebufferTexture2DFn> fFramebufferTexture2D;
156*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLFramebufferTexture2DMultisampleFn> fFramebufferTexture2DMultisample;
157*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLFrontFaceFn> fFrontFace;
158*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGenBuffersFn> fGenBuffers;
159*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGenFencesFn> fGenFences;
160*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGenFramebuffersFn> fGenFramebuffers;
161*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGenerateMipmapFn> fGenerateMipmap;
162*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGenQueriesFn> fGenQueries;
163*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGenRenderbuffersFn> fGenRenderbuffers;
164*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGenSamplersFn> fGenSamplers;
165*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGenTexturesFn> fGenTextures;
166*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGenVertexArraysFn> fGenVertexArrays;
167*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGetBufferParameterivFn> fGetBufferParameteriv;
168*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGetErrorFn> fGetError;
169*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGetFramebufferAttachmentParameterivFn> fGetFramebufferAttachmentParameteriv;
170*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGetFloatvFn> fGetFloatv;
171*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGetIntegervFn> fGetIntegerv;
172*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGetMultisamplefvFn> fGetMultisamplefv;
173*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGetProgramBinaryFn> fGetProgramBinary;
174*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGetProgramInfoLogFn> fGetProgramInfoLog;
175*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGetProgramivFn> fGetProgramiv;
176*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGetQueryObjecti64vFn> fGetQueryObjecti64v;
177*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGetQueryObjectui64vFn> fGetQueryObjectui64v;
178*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGetQueryObjectuivFn> fGetQueryObjectuiv;
179*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGetQueryivFn> fGetQueryiv;
180*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGetRenderbufferParameterivFn> fGetRenderbufferParameteriv;
181*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGetShaderInfoLogFn> fGetShaderInfoLog;
182*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGetShaderivFn> fGetShaderiv;
183*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGetShaderPrecisionFormatFn> fGetShaderPrecisionFormat;
184*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGetStringFn> fGetString;
185*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGetStringiFn> fGetStringi;
186*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGetTexLevelParameterivFn> fGetTexLevelParameteriv;
187*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGetUniformLocationFn> fGetUniformLocation;
188*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLInsertEventMarkerFn> fInsertEventMarker;
189*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLInvalidateBufferDataFn> fInvalidateBufferData;
190*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLInvalidateBufferSubDataFn> fInvalidateBufferSubData;
191*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLInvalidateFramebufferFn> fInvalidateFramebuffer;
192*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLInvalidateSubFramebufferFn> fInvalidateSubFramebuffer;
193*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLInvalidateTexImageFn> fInvalidateTexImage;
194*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLInvalidateTexSubImageFn> fInvalidateTexSubImage;
195*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLIsTextureFn> fIsTexture;
196*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLLineWidthFn> fLineWidth;
197*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLLinkProgramFn> fLinkProgram;
198*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLProgramBinaryFn> fProgramBinary;
199*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLProgramParameteriFn> fProgramParameteri;
200*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLMapBufferFn> fMapBuffer;
201*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLMapBufferRangeFn> fMapBufferRange;
202*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLMapBufferSubDataFn> fMapBufferSubData;
203*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLMapTexSubImage2DFn> fMapTexSubImage2D;
204*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLMemoryBarrierFn> fMemoryBarrier;
205*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDrawArraysInstancedBaseInstanceFn> fDrawArraysInstancedBaseInstance;
206*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDrawElementsInstancedBaseVertexBaseInstanceFn> fDrawElementsInstancedBaseVertexBaseInstance;
207*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLMultiDrawArraysIndirectFn> fMultiDrawArraysIndirect;
208*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLMultiDrawElementsIndirectFn> fMultiDrawElementsIndirect;
209*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLMultiDrawArraysInstancedBaseInstanceFn> fMultiDrawArraysInstancedBaseInstance;
210*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLMultiDrawElementsInstancedBaseVertexBaseInstanceFn> fMultiDrawElementsInstancedBaseVertexBaseInstance;
211*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLPatchParameteriFn> fPatchParameteri;
212*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLPixelStoreiFn> fPixelStorei;
213*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLPolygonModeFn> fPolygonMode;
214*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLPopGroupMarkerFn> fPopGroupMarker;
215*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLPushGroupMarkerFn> fPushGroupMarker;
216*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLQueryCounterFn> fQueryCounter;
217*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLReadBufferFn> fReadBuffer;
218*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLReadPixelsFn> fReadPixels;
219*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLRenderbufferStorageFn> fRenderbufferStorage;
220*c8dee2aaSAndroid Build Coastguard Worker 
221*c8dee2aaSAndroid Build Coastguard Worker         //  On OpenGL ES there are multiple incompatible extensions that add support for MSAA
222*c8dee2aaSAndroid Build Coastguard Worker         //  and ES3 adds MSAA support to the standard. On an ES3 driver we may still use the
223*c8dee2aaSAndroid Build Coastguard Worker         //  older extensions for performance reasons or due to ES3 driver bugs. We want the function
224*c8dee2aaSAndroid Build Coastguard Worker         //  that creates the GrGLInterface to provide all available functions and internally
225*c8dee2aaSAndroid Build Coastguard Worker         //  we will select among them. They all have a method called glRenderbufferStorageMultisample*.
226*c8dee2aaSAndroid Build Coastguard Worker         //  So we have separate function pointers for GL_IMG/EXT_multisampled_to_texture,
227*c8dee2aaSAndroid Build Coastguard Worker         //  GL_CHROMIUM/ANGLE_framebuffer_multisample/ES3, and GL_APPLE_framebuffer_multisample
228*c8dee2aaSAndroid Build Coastguard Worker         //  variations.
229*c8dee2aaSAndroid Build Coastguard Worker         //
230*c8dee2aaSAndroid Build Coastguard Worker         //  If a driver supports multiple GL_ARB_framebuffer_multisample-style extensions then we will
231*c8dee2aaSAndroid Build Coastguard Worker         //  assume the function pointers for the standard (or equivalent GL_ARB) version have
232*c8dee2aaSAndroid Build Coastguard Worker         //  been preferred over GL_EXT, GL_CHROMIUM, or GL_ANGLE variations that have reduced
233*c8dee2aaSAndroid Build Coastguard Worker         //  functionality.
234*c8dee2aaSAndroid Build Coastguard Worker 
235*c8dee2aaSAndroid Build Coastguard Worker         //  GL_EXT_multisampled_render_to_texture (preferred) or GL_IMG_multisampled_render_to_texture
236*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLRenderbufferStorageMultisampleFn> fRenderbufferStorageMultisampleES2EXT;
237*c8dee2aaSAndroid Build Coastguard Worker         //  GL_APPLE_framebuffer_multisample
238*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLRenderbufferStorageMultisampleFn> fRenderbufferStorageMultisampleES2APPLE;
239*c8dee2aaSAndroid Build Coastguard Worker 
240*c8dee2aaSAndroid Build Coastguard Worker         //  This is used to store the pointer for GL_ARB/EXT/ANGLE/CHROMIUM_framebuffer_multisample or
241*c8dee2aaSAndroid Build Coastguard Worker         //  the standard function in ES3+ or GL 3.0+.
242*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLRenderbufferStorageMultisampleFn> fRenderbufferStorageMultisample;
243*c8dee2aaSAndroid Build Coastguard Worker 
244*c8dee2aaSAndroid Build Coastguard Worker         // Pointer to BindUniformLocationCHROMIUM from the GL_CHROMIUM_bind_uniform_location extension.
245*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLBindUniformLocationFn> fBindUniformLocation;
246*c8dee2aaSAndroid Build Coastguard Worker 
247*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLResolveMultisampleFramebufferFn> fResolveMultisampleFramebuffer;
248*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLSamplerParameterfFn> fSamplerParameterf;
249*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLSamplerParameteriFn> fSamplerParameteri;
250*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLSamplerParameterivFn> fSamplerParameteriv;
251*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLScissorFn> fScissor;
252*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLSetFenceFn> fSetFence;
253*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLShaderSourceFn> fShaderSource;
254*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLStencilFuncFn> fStencilFunc;
255*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLStencilFuncSeparateFn> fStencilFuncSeparate;
256*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLStencilMaskFn> fStencilMask;
257*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLStencilMaskSeparateFn> fStencilMaskSeparate;
258*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLStencilOpFn> fStencilOp;
259*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLStencilOpSeparateFn> fStencilOpSeparate;
260*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLTestFenceFn> fTestFence;
261*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLTexBufferFn> fTexBuffer;
262*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLTexBufferRangeFn> fTexBufferRange;
263*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLTexImage2DFn> fTexImage2D;
264*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLTexParameterfFn> fTexParameterf;
265*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLTexParameterfvFn> fTexParameterfv;
266*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLTexParameteriFn> fTexParameteri;
267*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLTexParameterivFn> fTexParameteriv;
268*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLTexSubImage2DFn> fTexSubImage2D;
269*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLTexStorage2DFn> fTexStorage2D;
270*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLTextureBarrierFn> fTextureBarrier;
271*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDiscardFramebufferFn> fDiscardFramebuffer;
272*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLUniform1fFn> fUniform1f;
273*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLUniform1iFn> fUniform1i;
274*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLUniform1fvFn> fUniform1fv;
275*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLUniform1ivFn> fUniform1iv;
276*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLUniform2fFn> fUniform2f;
277*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLUniform2iFn> fUniform2i;
278*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLUniform2fvFn> fUniform2fv;
279*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLUniform2ivFn> fUniform2iv;
280*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLUniform3fFn> fUniform3f;
281*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLUniform3iFn> fUniform3i;
282*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLUniform3fvFn> fUniform3fv;
283*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLUniform3ivFn> fUniform3iv;
284*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLUniform4fFn> fUniform4f;
285*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLUniform4iFn> fUniform4i;
286*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLUniform4fvFn> fUniform4fv;
287*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLUniform4ivFn> fUniform4iv;
288*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLUniformMatrix2fvFn> fUniformMatrix2fv;
289*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLUniformMatrix3fvFn> fUniformMatrix3fv;
290*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLUniformMatrix4fvFn> fUniformMatrix4fv;
291*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLUnmapBufferFn> fUnmapBuffer;
292*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLUnmapBufferSubDataFn> fUnmapBufferSubData;
293*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLUnmapTexSubImage2DFn> fUnmapTexSubImage2D;
294*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLUseProgramFn> fUseProgram;
295*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLVertexAttrib1fFn> fVertexAttrib1f;
296*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLVertexAttrib2fvFn> fVertexAttrib2fv;
297*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLVertexAttrib3fvFn> fVertexAttrib3fv;
298*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLVertexAttrib4fvFn> fVertexAttrib4fv;
299*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLVertexAttribDivisorFn> fVertexAttribDivisor;
300*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLVertexAttribIPointerFn> fVertexAttribIPointer;
301*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLVertexAttribPointerFn> fVertexAttribPointer;
302*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLViewportFn> fViewport;
303*c8dee2aaSAndroid Build Coastguard Worker 
304*c8dee2aaSAndroid Build Coastguard Worker         /* ARB_sync */
305*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLFenceSyncFn> fFenceSync;
306*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLIsSyncFn> fIsSync;
307*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLClientWaitSyncFn> fClientWaitSync;
308*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLWaitSyncFn> fWaitSync;
309*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDeleteSyncFn> fDeleteSync;
310*c8dee2aaSAndroid Build Coastguard Worker 
311*c8dee2aaSAndroid Build Coastguard Worker         /* ARB_internalforamt_query */
312*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGetInternalformativFn> fGetInternalformativ;
313*c8dee2aaSAndroid Build Coastguard Worker 
314*c8dee2aaSAndroid Build Coastguard Worker         /* KHR_debug */
315*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDebugMessageControlFn> fDebugMessageControl;
316*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDebugMessageInsertFn> fDebugMessageInsert;
317*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLDebugMessageCallbackFn> fDebugMessageCallback;
318*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLGetDebugMessageLogFn> fGetDebugMessageLog;
319*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLPushDebugGroupFn> fPushDebugGroup;
320*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLPopDebugGroupFn> fPopDebugGroup;
321*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLObjectLabelFn> fObjectLabel;
322*c8dee2aaSAndroid Build Coastguard Worker 
323*c8dee2aaSAndroid Build Coastguard Worker         /* EXT_window_rectangles */
324*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLWindowRectanglesFn> fWindowRectangles;
325*c8dee2aaSAndroid Build Coastguard Worker 
326*c8dee2aaSAndroid Build Coastguard Worker         /* GL_QCOM_tiled_rendering */
327*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLStartTilingFn> fStartTiling;
328*c8dee2aaSAndroid Build Coastguard Worker         GrGLFunction<GrGLEndTilingFn> fEndTiling;
329*c8dee2aaSAndroid Build Coastguard Worker     } fFunctions;
330*c8dee2aaSAndroid Build Coastguard Worker 
331*c8dee2aaSAndroid Build Coastguard Worker #if defined(GPU_TEST_UTILS)
332*c8dee2aaSAndroid Build Coastguard Worker     // This exists for internal testing.
333*c8dee2aaSAndroid Build Coastguard Worker     virtual void abandon() const;
334*c8dee2aaSAndroid Build Coastguard Worker #endif
335*c8dee2aaSAndroid Build Coastguard Worker };
336*c8dee2aaSAndroid Build Coastguard Worker 
337*c8dee2aaSAndroid Build Coastguard Worker #endif
338