xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/gl/FunctionsGL.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2015 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker 
7*8975f5c5SAndroid Build Coastguard Worker // FunctionsGL.cpp: Implements the FuntionsGL class to contain loaded GL functions
8*8975f5c5SAndroid Build Coastguard Worker 
9*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/gl/FunctionsGL.h"
10*8975f5c5SAndroid Build Coastguard Worker 
11*8975f5c5SAndroid Build Coastguard Worker #include <algorithm>
12*8975f5c5SAndroid Build Coastguard Worker 
13*8975f5c5SAndroid Build Coastguard Worker #include "common/string_utils.h"
14*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/AttributeMap.h"
15*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/gl/renderergl_utils.h"
16*8975f5c5SAndroid Build Coastguard Worker 
17*8975f5c5SAndroid Build Coastguard Worker namespace rx
18*8975f5c5SAndroid Build Coastguard Worker {
19*8975f5c5SAndroid Build Coastguard Worker 
GetGLVersion(PFNGLGETSTRINGPROC getStringFunction,gl::Version * outVersion,StandardGL * outStandard)20*8975f5c5SAndroid Build Coastguard Worker static void GetGLVersion(PFNGLGETSTRINGPROC getStringFunction,
21*8975f5c5SAndroid Build Coastguard Worker                          gl::Version *outVersion,
22*8975f5c5SAndroid Build Coastguard Worker                          StandardGL *outStandard)
23*8975f5c5SAndroid Build Coastguard Worker {
24*8975f5c5SAndroid Build Coastguard Worker     const std::string version = reinterpret_cast<const char *>(getStringFunction(GL_VERSION));
25*8975f5c5SAndroid Build Coastguard Worker     if (version.find("OpenGL ES") == std::string::npos)
26*8975f5c5SAndroid Build Coastguard Worker     {
27*8975f5c5SAndroid Build Coastguard Worker         // OpenGL spec states the GL_VERSION string will be in the following format:
28*8975f5c5SAndroid Build Coastguard Worker         // <version number><space><vendor-specific information>
29*8975f5c5SAndroid Build Coastguard Worker         // The version number is either of the form major number.minor number or major
30*8975f5c5SAndroid Build Coastguard Worker         // number.minor number.release number, where the numbers all have one or more
31*8975f5c5SAndroid Build Coastguard Worker         // digits
32*8975f5c5SAndroid Build Coastguard Worker         *outStandard = STANDARD_GL_DESKTOP;
33*8975f5c5SAndroid Build Coastguard Worker         *outVersion  = gl::Version(version[0] - '0', version[2] - '0');
34*8975f5c5SAndroid Build Coastguard Worker     }
35*8975f5c5SAndroid Build Coastguard Worker     else
36*8975f5c5SAndroid Build Coastguard Worker     {
37*8975f5c5SAndroid Build Coastguard Worker         // ES spec states that the GL_VERSION string will be in the following format:
38*8975f5c5SAndroid Build Coastguard Worker         // "OpenGL ES N.M vendor-specific information"
39*8975f5c5SAndroid Build Coastguard Worker         *outStandard = STANDARD_GL_ES;
40*8975f5c5SAndroid Build Coastguard Worker         *outVersion  = gl::Version(version[10] - '0', version[12] - '0');
41*8975f5c5SAndroid Build Coastguard Worker     }
42*8975f5c5SAndroid Build Coastguard Worker }
43*8975f5c5SAndroid Build Coastguard Worker 
GetIndexedExtensions(PFNGLGETINTEGERVPROC getIntegerFunction,PFNGLGETSTRINGIPROC getStringIFunction)44*8975f5c5SAndroid Build Coastguard Worker static std::vector<std::string> GetIndexedExtensions(PFNGLGETINTEGERVPROC getIntegerFunction,
45*8975f5c5SAndroid Build Coastguard Worker                                                      PFNGLGETSTRINGIPROC getStringIFunction)
46*8975f5c5SAndroid Build Coastguard Worker {
47*8975f5c5SAndroid Build Coastguard Worker     std::vector<std::string> result;
48*8975f5c5SAndroid Build Coastguard Worker 
49*8975f5c5SAndroid Build Coastguard Worker     GLint numExtensions;
50*8975f5c5SAndroid Build Coastguard Worker     getIntegerFunction(GL_NUM_EXTENSIONS, &numExtensions);
51*8975f5c5SAndroid Build Coastguard Worker 
52*8975f5c5SAndroid Build Coastguard Worker     result.reserve(numExtensions);
53*8975f5c5SAndroid Build Coastguard Worker 
54*8975f5c5SAndroid Build Coastguard Worker     for (GLint i = 0; i < numExtensions; i++)
55*8975f5c5SAndroid Build Coastguard Worker     {
56*8975f5c5SAndroid Build Coastguard Worker         result.push_back(reinterpret_cast<const char *>(getStringIFunction(GL_EXTENSIONS, i)));
57*8975f5c5SAndroid Build Coastguard Worker     }
58*8975f5c5SAndroid Build Coastguard Worker 
59*8975f5c5SAndroid Build Coastguard Worker     return result;
60*8975f5c5SAndroid Build Coastguard Worker }
61*8975f5c5SAndroid Build Coastguard Worker 
62*8975f5c5SAndroid Build Coastguard Worker #if defined(ANGLE_ENABLE_OPENGL_NULL)
StubCheckFramebufferStatus(GLenum)63*8975f5c5SAndroid Build Coastguard Worker static GLenum INTERNAL_GL_APIENTRY StubCheckFramebufferStatus(GLenum)
64*8975f5c5SAndroid Build Coastguard Worker {
65*8975f5c5SAndroid Build Coastguard Worker     return GL_FRAMEBUFFER_COMPLETE;
66*8975f5c5SAndroid Build Coastguard Worker }
67*8975f5c5SAndroid Build Coastguard Worker 
StubGetProgramiv(GLuint program,GLenum pname,GLint * params)68*8975f5c5SAndroid Build Coastguard Worker static void INTERNAL_GL_APIENTRY StubGetProgramiv(GLuint program, GLenum pname, GLint *params)
69*8975f5c5SAndroid Build Coastguard Worker {
70*8975f5c5SAndroid Build Coastguard Worker     switch (pname)
71*8975f5c5SAndroid Build Coastguard Worker     {
72*8975f5c5SAndroid Build Coastguard Worker         case GL_LINK_STATUS:
73*8975f5c5SAndroid Build Coastguard Worker             *params = GL_TRUE;
74*8975f5c5SAndroid Build Coastguard Worker             break;
75*8975f5c5SAndroid Build Coastguard Worker         case GL_VALIDATE_STATUS:
76*8975f5c5SAndroid Build Coastguard Worker             *params = GL_TRUE;
77*8975f5c5SAndroid Build Coastguard Worker             break;
78*8975f5c5SAndroid Build Coastguard Worker         default:
79*8975f5c5SAndroid Build Coastguard Worker             break;
80*8975f5c5SAndroid Build Coastguard Worker     }
81*8975f5c5SAndroid Build Coastguard Worker }
82*8975f5c5SAndroid Build Coastguard Worker 
StubGetShaderiv(GLuint program,GLenum pname,GLint * params)83*8975f5c5SAndroid Build Coastguard Worker static void INTERNAL_GL_APIENTRY StubGetShaderiv(GLuint program, GLenum pname, GLint *params)
84*8975f5c5SAndroid Build Coastguard Worker {
85*8975f5c5SAndroid Build Coastguard Worker     switch (pname)
86*8975f5c5SAndroid Build Coastguard Worker     {
87*8975f5c5SAndroid Build Coastguard Worker         case GL_COMPILE_STATUS:
88*8975f5c5SAndroid Build Coastguard Worker             *params = GL_TRUE;
89*8975f5c5SAndroid Build Coastguard Worker             break;
90*8975f5c5SAndroid Build Coastguard Worker         default:
91*8975f5c5SAndroid Build Coastguard Worker             break;
92*8975f5c5SAndroid Build Coastguard Worker     }
93*8975f5c5SAndroid Build Coastguard Worker }
94*8975f5c5SAndroid Build Coastguard Worker #endif  // defined(ANGLE_ENABLE_OPENGL_NULL)
95*8975f5c5SAndroid Build Coastguard Worker 
96*8975f5c5SAndroid Build Coastguard Worker #define ASSIGN(NAME, FP) FP = reinterpret_cast<decltype(FP)>(loadProcAddress(NAME))
97*8975f5c5SAndroid Build Coastguard Worker 
FunctionsGL()98*8975f5c5SAndroid Build Coastguard Worker FunctionsGL::FunctionsGL() : version(), standard(), extensions() {}
99*8975f5c5SAndroid Build Coastguard Worker 
~FunctionsGL()100*8975f5c5SAndroid Build Coastguard Worker FunctionsGL::~FunctionsGL() {}
101*8975f5c5SAndroid Build Coastguard Worker 
initialize(const egl::AttributeMap & displayAttributes)102*8975f5c5SAndroid Build Coastguard Worker void FunctionsGL::initialize(const egl::AttributeMap &displayAttributes)
103*8975f5c5SAndroid Build Coastguard Worker {
104*8975f5c5SAndroid Build Coastguard Worker     // Grab the version number
105*8975f5c5SAndroid Build Coastguard Worker     ASSIGN("glGetString", getString);
106*8975f5c5SAndroid Build Coastguard Worker     ASSIGN("glGetIntegerv", getIntegerv);
107*8975f5c5SAndroid Build Coastguard Worker     GetGLVersion(getString, &version, &standard);
108*8975f5c5SAndroid Build Coastguard Worker 
109*8975f5c5SAndroid Build Coastguard Worker     // Grab the GL extensions
110*8975f5c5SAndroid Build Coastguard Worker     if (isAtLeastGL(gl::Version(3, 0)) || isAtLeastGLES(gl::Version(3, 0)))
111*8975f5c5SAndroid Build Coastguard Worker     {
112*8975f5c5SAndroid Build Coastguard Worker         ASSIGN("glGetStringi", getStringi);
113*8975f5c5SAndroid Build Coastguard Worker         extensions = GetIndexedExtensions(getIntegerv, getStringi);
114*8975f5c5SAndroid Build Coastguard Worker     }
115*8975f5c5SAndroid Build Coastguard Worker     else
116*8975f5c5SAndroid Build Coastguard Worker     {
117*8975f5c5SAndroid Build Coastguard Worker         const char *exts = reinterpret_cast<const char *>(getString(GL_EXTENSIONS));
118*8975f5c5SAndroid Build Coastguard Worker         angle::SplitStringAlongWhitespace(std::string(exts), &extensions);
119*8975f5c5SAndroid Build Coastguard Worker     }
120*8975f5c5SAndroid Build Coastguard Worker 
121*8975f5c5SAndroid Build Coastguard Worker     std::set<std::string> extensionSet;
122*8975f5c5SAndroid Build Coastguard Worker     for (const auto &extension : extensions)
123*8975f5c5SAndroid Build Coastguard Worker     {
124*8975f5c5SAndroid Build Coastguard Worker         extensionSet.insert(extension);
125*8975f5c5SAndroid Build Coastguard Worker     }
126*8975f5c5SAndroid Build Coastguard Worker 
127*8975f5c5SAndroid Build Coastguard Worker     // Note:
128*8975f5c5SAndroid Build Coastguard Worker     // Even though extensions are written against specific versions of GL, many drivers expose the
129*8975f5c5SAndroid Build Coastguard Worker     // extensions in even older versions.  Always try loading the extensions regardless of GL
130*8975f5c5SAndroid Build Coastguard Worker     // version.
131*8975f5c5SAndroid Build Coastguard Worker 
132*8975f5c5SAndroid Build Coastguard Worker     // Load the entry points
133*8975f5c5SAndroid Build Coastguard Worker 
134*8975f5c5SAndroid Build Coastguard Worker #if defined(ANGLE_ENABLE_OPENGL_NULL)
135*8975f5c5SAndroid Build Coastguard Worker     EGLint deviceType =
136*8975f5c5SAndroid Build Coastguard Worker         static_cast<EGLint>(displayAttributes.get(EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE, EGL_NONE));
137*8975f5c5SAndroid Build Coastguard Worker #endif  // defined(ANGLE_ENABLE_GL_NULL)
138*8975f5c5SAndroid Build Coastguard Worker 
139*8975f5c5SAndroid Build Coastguard Worker     switch (standard)
140*8975f5c5SAndroid Build Coastguard Worker     {
141*8975f5c5SAndroid Build Coastguard Worker         case STANDARD_GL_DESKTOP:
142*8975f5c5SAndroid Build Coastguard Worker         {
143*8975f5c5SAndroid Build Coastguard Worker             // Check the context profile
144*8975f5c5SAndroid Build Coastguard Worker             profile = 0;
145*8975f5c5SAndroid Build Coastguard Worker             if (isAtLeastGL(gl::Version(3, 2)))
146*8975f5c5SAndroid Build Coastguard Worker             {
147*8975f5c5SAndroid Build Coastguard Worker                 getIntegerv(GL_CONTEXT_PROFILE_MASK, &profile);
148*8975f5c5SAndroid Build Coastguard Worker             }
149*8975f5c5SAndroid Build Coastguard Worker 
150*8975f5c5SAndroid Build Coastguard Worker #if defined(ANGLE_ENABLE_OPENGL_NULL)
151*8975f5c5SAndroid Build Coastguard Worker             if (deviceType == EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE)
152*8975f5c5SAndroid Build Coastguard Worker             {
153*8975f5c5SAndroid Build Coastguard Worker                 initProcsDesktopGLNULL(version, extensionSet);
154*8975f5c5SAndroid Build Coastguard Worker             }
155*8975f5c5SAndroid Build Coastguard Worker             else
156*8975f5c5SAndroid Build Coastguard Worker #endif  // defined(ANGLE_ENABLE_GL_NULL)
157*8975f5c5SAndroid Build Coastguard Worker             {
158*8975f5c5SAndroid Build Coastguard Worker                 initProcsDesktopGL(version, extensionSet);
159*8975f5c5SAndroid Build Coastguard Worker                 // Test that ANGLE_ENABLE_GL_DESKTOP_BACKEND has been enabled
160*8975f5c5SAndroid Build Coastguard Worker                 // See http://anglebug.com/42266631
161*8975f5c5SAndroid Build Coastguard Worker                 ASSERT(getString != nullptr && getError != nullptr);
162*8975f5c5SAndroid Build Coastguard Worker             }
163*8975f5c5SAndroid Build Coastguard Worker             break;
164*8975f5c5SAndroid Build Coastguard Worker         }
165*8975f5c5SAndroid Build Coastguard Worker 
166*8975f5c5SAndroid Build Coastguard Worker         case STANDARD_GL_ES:
167*8975f5c5SAndroid Build Coastguard Worker         {
168*8975f5c5SAndroid Build Coastguard Worker             // No profiles in GLES
169*8975f5c5SAndroid Build Coastguard Worker             profile = 0;
170*8975f5c5SAndroid Build Coastguard Worker 
171*8975f5c5SAndroid Build Coastguard Worker #if defined(ANGLE_ENABLE_OPENGL_NULL)
172*8975f5c5SAndroid Build Coastguard Worker             if (deviceType == EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE)
173*8975f5c5SAndroid Build Coastguard Worker             {
174*8975f5c5SAndroid Build Coastguard Worker                 initProcsGLESNULL(version, extensionSet);
175*8975f5c5SAndroid Build Coastguard Worker             }
176*8975f5c5SAndroid Build Coastguard Worker             else
177*8975f5c5SAndroid Build Coastguard Worker #endif  // defined(ANGLE_ENABLE_GL_NULL)
178*8975f5c5SAndroid Build Coastguard Worker             {
179*8975f5c5SAndroid Build Coastguard Worker                 initProcsGLES(version, extensionSet);
180*8975f5c5SAndroid Build Coastguard Worker             }
181*8975f5c5SAndroid Build Coastguard Worker             break;
182*8975f5c5SAndroid Build Coastguard Worker         }
183*8975f5c5SAndroid Build Coastguard Worker 
184*8975f5c5SAndroid Build Coastguard Worker         default:
185*8975f5c5SAndroid Build Coastguard Worker             UNREACHABLE();
186*8975f5c5SAndroid Build Coastguard Worker             break;
187*8975f5c5SAndroid Build Coastguard Worker     }
188*8975f5c5SAndroid Build Coastguard Worker 
189*8975f5c5SAndroid Build Coastguard Worker #if defined(ANGLE_ENABLE_OPENGL_NULL)
190*8975f5c5SAndroid Build Coastguard Worker     if (deviceType == EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE)
191*8975f5c5SAndroid Build Coastguard Worker     {
192*8975f5c5SAndroid Build Coastguard Worker         initProcsSharedExtensionsNULL(extensionSet);
193*8975f5c5SAndroid Build Coastguard Worker         initializeStubFunctionsForNULLDriver(extensionSet);
194*8975f5c5SAndroid Build Coastguard Worker     }
195*8975f5c5SAndroid Build Coastguard Worker     else
196*8975f5c5SAndroid Build Coastguard Worker #endif  // defined(ANGLE_ENABLE_OPENGL_NULL)
197*8975f5c5SAndroid Build Coastguard Worker     {
198*8975f5c5SAndroid Build Coastguard Worker         initProcsSharedExtensions(extensionSet);
199*8975f5c5SAndroid Build Coastguard Worker     }
200*8975f5c5SAndroid Build Coastguard Worker }
201*8975f5c5SAndroid Build Coastguard Worker 
isAtLeastGL(const gl::Version & glVersion) const202*8975f5c5SAndroid Build Coastguard Worker bool FunctionsGL::isAtLeastGL(const gl::Version &glVersion) const
203*8975f5c5SAndroid Build Coastguard Worker {
204*8975f5c5SAndroid Build Coastguard Worker     return standard == STANDARD_GL_DESKTOP && version >= glVersion;
205*8975f5c5SAndroid Build Coastguard Worker }
206*8975f5c5SAndroid Build Coastguard Worker 
isAtMostGL(const gl::Version & glVersion) const207*8975f5c5SAndroid Build Coastguard Worker bool FunctionsGL::isAtMostGL(const gl::Version &glVersion) const
208*8975f5c5SAndroid Build Coastguard Worker {
209*8975f5c5SAndroid Build Coastguard Worker     return standard == STANDARD_GL_DESKTOP && glVersion >= version;
210*8975f5c5SAndroid Build Coastguard Worker }
211*8975f5c5SAndroid Build Coastguard Worker 
isAtLeastGLES(const gl::Version & glesVersion) const212*8975f5c5SAndroid Build Coastguard Worker bool FunctionsGL::isAtLeastGLES(const gl::Version &glesVersion) const
213*8975f5c5SAndroid Build Coastguard Worker {
214*8975f5c5SAndroid Build Coastguard Worker     return standard == STANDARD_GL_ES && version >= glesVersion;
215*8975f5c5SAndroid Build Coastguard Worker }
216*8975f5c5SAndroid Build Coastguard Worker 
isAtMostGLES(const gl::Version & glesVersion) const217*8975f5c5SAndroid Build Coastguard Worker bool FunctionsGL::isAtMostGLES(const gl::Version &glesVersion) const
218*8975f5c5SAndroid Build Coastguard Worker {
219*8975f5c5SAndroid Build Coastguard Worker     return standard == STANDARD_GL_ES && glesVersion >= version;
220*8975f5c5SAndroid Build Coastguard Worker }
221*8975f5c5SAndroid Build Coastguard Worker 
hasExtension(const std::string & ext) const222*8975f5c5SAndroid Build Coastguard Worker bool FunctionsGL::hasExtension(const std::string &ext) const
223*8975f5c5SAndroid Build Coastguard Worker {
224*8975f5c5SAndroid Build Coastguard Worker     return std::find(extensions.begin(), extensions.end(), ext) != extensions.end();
225*8975f5c5SAndroid Build Coastguard Worker }
226*8975f5c5SAndroid Build Coastguard Worker 
hasGLExtension(const std::string & ext) const227*8975f5c5SAndroid Build Coastguard Worker bool FunctionsGL::hasGLExtension(const std::string &ext) const
228*8975f5c5SAndroid Build Coastguard Worker {
229*8975f5c5SAndroid Build Coastguard Worker     return standard == STANDARD_GL_DESKTOP && hasExtension(ext);
230*8975f5c5SAndroid Build Coastguard Worker }
231*8975f5c5SAndroid Build Coastguard Worker 
hasGLESExtension(const std::string & ext) const232*8975f5c5SAndroid Build Coastguard Worker bool FunctionsGL::hasGLESExtension(const std::string &ext) const
233*8975f5c5SAndroid Build Coastguard Worker {
234*8975f5c5SAndroid Build Coastguard Worker     return standard == STANDARD_GL_ES && hasExtension(ext);
235*8975f5c5SAndroid Build Coastguard Worker }
236*8975f5c5SAndroid Build Coastguard Worker 
237*8975f5c5SAndroid Build Coastguard Worker #if defined(ANGLE_ENABLE_OPENGL_NULL)
initializeStubFunctionsForNULLDriver(const std::set<std::string> & extensionSet)238*8975f5c5SAndroid Build Coastguard Worker void FunctionsGL::initializeStubFunctionsForNULLDriver(const std::set<std::string> &extensionSet)
239*8975f5c5SAndroid Build Coastguard Worker {
240*8975f5c5SAndroid Build Coastguard Worker     // This is a quick hack to get the NULL driver working, but we might want to implement a true
241*8975f5c5SAndroid Build Coastguard Worker     // NULL/stub driver that never calls into the OS. See Chromium's implementation in
242*8975f5c5SAndroid Build Coastguard Worker     // ui/gl/gl_stub_api.cc. This might be useful for testing things like perf scaling due to
243*8975f5c5SAndroid Build Coastguard Worker     // the caps returned by the drivers (i.e. number of texture units) or a true NULL back-end
244*8975f5c5SAndroid Build Coastguard Worker     // that could be used in a VM for things like fuzzing.
245*8975f5c5SAndroid Build Coastguard Worker     // TODO(jmadill): Implement true no-op/stub back-end.
246*8975f5c5SAndroid Build Coastguard Worker     ASSIGN("glGetString", getString);
247*8975f5c5SAndroid Build Coastguard Worker     ASSIGN("glGetStringi", getStringi);
248*8975f5c5SAndroid Build Coastguard Worker     ASSIGN("glGetIntegerv", getIntegerv);
249*8975f5c5SAndroid Build Coastguard Worker     ASSIGN("glGetIntegeri_v", getIntegeri_v);
250*8975f5c5SAndroid Build Coastguard Worker 
251*8975f5c5SAndroid Build Coastguard Worker     getProgramiv           = &StubGetProgramiv;
252*8975f5c5SAndroid Build Coastguard Worker     getShaderiv            = &StubGetShaderiv;
253*8975f5c5SAndroid Build Coastguard Worker     checkFramebufferStatus = &StubCheckFramebufferStatus;
254*8975f5c5SAndroid Build Coastguard Worker 
255*8975f5c5SAndroid Build Coastguard Worker     if (isAtLeastGLES(gl::Version(3, 0)) || isAtLeastGL(gl::Version(4, 2)) ||
256*8975f5c5SAndroid Build Coastguard Worker         extensionSet.count("GL_ARB_internalformat_query") > 0)
257*8975f5c5SAndroid Build Coastguard Worker     {
258*8975f5c5SAndroid Build Coastguard Worker         ASSIGN("glGetInternalformativ", getInternalformativ);
259*8975f5c5SAndroid Build Coastguard Worker     }
260*8975f5c5SAndroid Build Coastguard Worker 
261*8975f5c5SAndroid Build Coastguard Worker     if (isAtLeastGL(gl::Version(4, 3)))
262*8975f5c5SAndroid Build Coastguard Worker     {
263*8975f5c5SAndroid Build Coastguard Worker         ASSIGN("glGetInternalformati64v", getInternalformati64v);
264*8975f5c5SAndroid Build Coastguard Worker     }
265*8975f5c5SAndroid Build Coastguard Worker 
266*8975f5c5SAndroid Build Coastguard Worker     if (extensionSet.count("GL_NV_internalformat_sample_query") > 0)
267*8975f5c5SAndroid Build Coastguard Worker     {
268*8975f5c5SAndroid Build Coastguard Worker         ASSIGN("glGetInternalformatSampleivNV", getInternalformatSampleivNV);
269*8975f5c5SAndroid Build Coastguard Worker     }
270*8975f5c5SAndroid Build Coastguard Worker }
271*8975f5c5SAndroid Build Coastguard Worker #endif  // defined(ANGLE_ENABLE_OPENGL_NULL)
272*8975f5c5SAndroid Build Coastguard Worker 
273*8975f5c5SAndroid Build Coastguard Worker }  // namespace rx
274