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