1 /*
2  * Copyright 2016 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #include <functional>
9 #include "GrGLTestInterface.h"
10 
11 namespace {
12 template<typename R, typename... A>
bind_to_member(GrGLTestInterface * interface,R (GrGLTestInterface::* member)(A...))13 std::function<R(A...)> bind_to_member(GrGLTestInterface* interface, R (GrGLTestInterface::*member)(A...)) {
14     return [interface, member] (A... a) -> R { return (interface->*member)(a...); };
15 }
16 }  // anonymous namespace
17 
GrGLTestInterface()18 GrGLTestInterface::GrGLTestInterface() {
19     fFunctions.fActiveTexture = bind_to_member(this, &GrGLTestInterface::activeTexture);
20     fFunctions.fAttachShader = bind_to_member(this, &GrGLTestInterface::attachShader);
21     fFunctions.fBeginQuery = bind_to_member(this, &GrGLTestInterface::beginQuery);
22     fFunctions.fBindAttribLocation = bind_to_member(this, &GrGLTestInterface::bindAttribLocation);
23     fFunctions.fBindBuffer = bind_to_member(this, &GrGLTestInterface::bindBuffer);
24     fFunctions.fBindFramebuffer = bind_to_member(this, &GrGLTestInterface::bindFramebuffer);
25     fFunctions.fBindRenderbuffer = bind_to_member(this, &GrGLTestInterface::bindRenderbuffer);
26     fFunctions.fBindTexture = bind_to_member(this, &GrGLTestInterface::bindTexture);
27     fFunctions.fBindFragDataLocation = bind_to_member(this, &GrGLTestInterface::bindFragDataLocation);
28     fFunctions.fBindFragDataLocationIndexed = bind_to_member(this, &GrGLTestInterface::bindFragDataLocationIndexed);
29     fFunctions.fBindVertexArray = bind_to_member(this, &GrGLTestInterface::bindVertexArray);
30     fFunctions.fBlendBarrier = bind_to_member(this, &GrGLTestInterface::blendBarrier);
31     fFunctions.fBlendColor = bind_to_member(this, &GrGLTestInterface::blendColor);
32     fFunctions.fBlendEquation = bind_to_member(this, &GrGLTestInterface::blendEquation);
33     fFunctions.fBlendFunc = bind_to_member(this, &GrGLTestInterface::blendFunc);
34     fFunctions.fBlitFramebuffer = bind_to_member(this, &GrGLTestInterface::blitFramebuffer);
35     fFunctions.fBufferData = bind_to_member(this, &GrGLTestInterface::bufferData);
36     fFunctions.fBufferSubData = bind_to_member(this, &GrGLTestInterface::bufferSubData);
37     fFunctions.fCheckFramebufferStatus = bind_to_member(this, &GrGLTestInterface::checkFramebufferStatus);
38     fFunctions.fClear = bind_to_member(this, &GrGLTestInterface::clear);
39     fFunctions.fClearColor = bind_to_member(this, &GrGLTestInterface::clearColor);
40     fFunctions.fClearStencil = bind_to_member(this, &GrGLTestInterface::clearStencil);
41     fFunctions.fColorMask = bind_to_member(this, &GrGLTestInterface::colorMask);
42     fFunctions.fCompileShader = bind_to_member(this, &GrGLTestInterface::compileShader);
43     fFunctions.fCompressedTexImage2D = bind_to_member(this, &GrGLTestInterface::compressedTexImage2D);
44     fFunctions.fCompressedTexSubImage2D = bind_to_member(this, &GrGLTestInterface::compressedTexSubImage2D);
45     fFunctions.fCopyTexSubImage2D = bind_to_member(this, &GrGLTestInterface::copyTexSubImage2D);
46     fFunctions.fCreateProgram = bind_to_member(this, &GrGLTestInterface::createProgram);
47     fFunctions.fCreateShader = bind_to_member(this, &GrGLTestInterface::createShader);
48     fFunctions.fCullFace = bind_to_member(this, &GrGLTestInterface::cullFace);
49     fFunctions.fDeleteBuffers = bind_to_member(this, &GrGLTestInterface::deleteBuffers);
50     fFunctions.fDeleteFramebuffers = bind_to_member(this, &GrGLTestInterface::deleteFramebuffers);
51     fFunctions.fDeleteProgram = bind_to_member(this, &GrGLTestInterface::deleteProgram);
52     fFunctions.fDeleteQueries = bind_to_member(this, &GrGLTestInterface::deleteQueries);
53     fFunctions.fDeleteRenderbuffers = bind_to_member(this, &GrGLTestInterface::deleteRenderbuffers);
54     fFunctions.fDeleteShader = bind_to_member(this, &GrGLTestInterface::deleteShader);
55     fFunctions.fDeleteTextures = bind_to_member(this, &GrGLTestInterface::deleteTextures);
56     fFunctions.fDeleteVertexArrays = bind_to_member(this, &GrGLTestInterface::deleteVertexArrays);
57     fFunctions.fDepthMask = bind_to_member(this, &GrGLTestInterface::depthMask);
58     fFunctions.fDisable = bind_to_member(this, &GrGLTestInterface::disable);
59     fFunctions.fDisableVertexAttribArray = bind_to_member(this, &GrGLTestInterface::disableVertexAttribArray);
60     fFunctions.fDrawArrays = bind_to_member(this, &GrGLTestInterface::drawArrays);
61     fFunctions.fDrawArraysInstanced = bind_to_member(this, &GrGLTestInterface::drawArraysInstanced);
62     fFunctions.fDrawArraysIndirect = bind_to_member(this, &GrGLTestInterface::drawArraysIndirect);
63     fFunctions.fDrawBuffer = bind_to_member(this, &GrGLTestInterface::drawBuffer);
64     fFunctions.fDrawBuffers = bind_to_member(this, &GrGLTestInterface::drawBuffers);
65     fFunctions.fDrawElements = bind_to_member(this, &GrGLTestInterface::drawElements);
66     fFunctions.fDrawElementsInstanced = bind_to_member(this, &GrGLTestInterface::drawElementsInstanced);
67     fFunctions.fDrawElementsIndirect = bind_to_member(this, &GrGLTestInterface::drawElementsIndirect);
68     fFunctions.fDrawRangeElements = bind_to_member(this, &GrGLTestInterface::drawRangeElements);
69     fFunctions.fEnable = bind_to_member(this, &GrGLTestInterface::enable);
70     fFunctions.fEnableVertexAttribArray = bind_to_member(this, &GrGLTestInterface::enableVertexAttribArray);
71     fFunctions.fEndQuery = bind_to_member(this, &GrGLTestInterface::endQuery);
72     fFunctions.fFinish = bind_to_member(this, &GrGLTestInterface::finish);
73     fFunctions.fFlush = bind_to_member(this, &GrGLTestInterface::flush);
74     fFunctions.fFlushMappedBufferRange = bind_to_member(this, &GrGLTestInterface::flushMappedBufferRange);
75     fFunctions.fFramebufferRenderbuffer = bind_to_member(this, &GrGLTestInterface::framebufferRenderbuffer);
76     fFunctions.fFramebufferTexture2D = bind_to_member(this, &GrGLTestInterface::framebufferTexture2D);
77     fFunctions.fFramebufferTexture2DMultisample = bind_to_member(this, &GrGLTestInterface::framebufferTexture2DMultisample);
78     fFunctions.fFrontFace = bind_to_member(this, &GrGLTestInterface::frontFace);
79     fFunctions.fGenBuffers = bind_to_member(this, &GrGLTestInterface::genBuffers);
80     fFunctions.fGenFramebuffers = bind_to_member(this, &GrGLTestInterface::genFramebuffers);
81     fFunctions.fGenerateMipmap = bind_to_member(this, &GrGLTestInterface::generateMipmap);
82     fFunctions.fGenQueries = bind_to_member(this, &GrGLTestInterface::genQueries);
83     fFunctions.fGenRenderbuffers = bind_to_member(this, &GrGLTestInterface::genRenderbuffers);
84     fFunctions.fGenTextures = bind_to_member(this, &GrGLTestInterface::genTextures);
85     fFunctions.fGenVertexArrays = bind_to_member(this, &GrGLTestInterface::genVertexArrays);
86     fFunctions.fGetBufferParameteriv = bind_to_member(this, &GrGLTestInterface::getBufferParameteriv);
87     fFunctions.fGetError = bind_to_member(this, &GrGLTestInterface::getError);
88     fFunctions.fGetFramebufferAttachmentParameteriv = bind_to_member(this, &GrGLTestInterface::getFramebufferAttachmentParameteriv);
89     fFunctions.fGetIntegerv = bind_to_member(this, &GrGLTestInterface::getIntegerv);
90     fFunctions.fGetMultisamplefv = bind_to_member(this, &GrGLTestInterface::getMultisamplefv);
91     fFunctions.fGetProgramInfoLog = bind_to_member(this, &GrGLTestInterface::getProgramInfoLog);
92     fFunctions.fGetProgramiv = bind_to_member(this, &GrGLTestInterface::getProgramiv);
93     fFunctions.fGetQueryiv = bind_to_member(this, &GrGLTestInterface::getQueryiv);
94     fFunctions.fGetQueryObjecti64v = bind_to_member(this, &GrGLTestInterface::getQueryObjecti64v);
95     fFunctions.fGetQueryObjectiv = bind_to_member(this, &GrGLTestInterface::getQueryObjectiv);
96     fFunctions.fGetQueryObjectui64v = bind_to_member(this, &GrGLTestInterface::getQueryObjectui64v);
97     fFunctions.fGetQueryObjectuiv = bind_to_member(this, &GrGLTestInterface::getQueryObjectuiv);
98     fFunctions.fGetRenderbufferParameteriv = bind_to_member(this, &GrGLTestInterface::getRenderbufferParameteriv);
99     fFunctions.fGetShaderInfoLog = bind_to_member(this, &GrGLTestInterface::getShaderInfoLog);
100     fFunctions.fGetShaderiv = bind_to_member(this, &GrGLTestInterface::getShaderiv);
101     fFunctions.fGetShaderPrecisionFormat = bind_to_member(this, &GrGLTestInterface::getShaderPrecisionFormat);
102     fFunctions.fGetString = bind_to_member(this, &GrGLTestInterface::getString);
103     fFunctions.fGetStringi = bind_to_member(this, &GrGLTestInterface::getStringi);
104     fFunctions.fGetTexLevelParameteriv = bind_to_member(this, &GrGLTestInterface::getTexLevelParameteriv);
105     fFunctions.fGetUniformLocation = bind_to_member(this, &GrGLTestInterface::getUniformLocation);
106     fFunctions.fInsertEventMarker = bind_to_member(this, &GrGLTestInterface::insertEventMarker);
107     fFunctions.fInvalidateBufferData = bind_to_member(this, &GrGLTestInterface::invalidateBufferData);
108     fFunctions.fInvalidateBufferSubData = bind_to_member(this, &GrGLTestInterface::invalidateBufferSubData);
109     fFunctions.fInvalidateFramebuffer = bind_to_member(this, &GrGLTestInterface::invalidateFramebuffer);
110     fFunctions.fInvalidateSubFramebuffer = bind_to_member(this, &GrGLTestInterface::invalidateSubFramebuffer);
111     fFunctions.fInvalidateTexImage = bind_to_member(this, &GrGLTestInterface::invalidateTexImage);
112     fFunctions.fInvalidateTexSubImage = bind_to_member(this, &GrGLTestInterface::invalidateTexSubImage);
113     fFunctions.fIsTexture = bind_to_member(this, &GrGLTestInterface::isTexture);
114     fFunctions.fLineWidth = bind_to_member(this, &GrGLTestInterface::lineWidth);
115     fFunctions.fLinkProgram = bind_to_member(this, &GrGLTestInterface::linkProgram);
116     fFunctions.fMapBuffer = bind_to_member(this, &GrGLTestInterface::mapBuffer);
117     fFunctions.fMapBufferRange = bind_to_member(this, &GrGLTestInterface::mapBufferRange);
118     fFunctions.fMapBufferSubData = bind_to_member(this, &GrGLTestInterface::mapBufferSubData);
119     fFunctions.fMapTexSubImage2D = bind_to_member(this, &GrGLTestInterface::mapTexSubImage2D);
120     fFunctions.fMinSampleShading = bind_to_member(this, &GrGLTestInterface::minSampleShading);
121     fFunctions.fPixelStorei = bind_to_member(this, &GrGLTestInterface::pixelStorei);
122     fFunctions.fPopGroupMarker = bind_to_member(this, &GrGLTestInterface::popGroupMarker);
123     fFunctions.fPushGroupMarker = bind_to_member(this, &GrGLTestInterface::pushGroupMarker);
124     fFunctions.fQueryCounter = bind_to_member(this, &GrGLTestInterface::queryCounter);
125     fFunctions.fRasterSamples = bind_to_member(this, &GrGLTestInterface::rasterSamples);
126     fFunctions.fReadBuffer = bind_to_member(this, &GrGLTestInterface::readBuffer);
127     fFunctions.fReadPixels = bind_to_member(this, &GrGLTestInterface::readPixels);
128     fFunctions.fRenderbufferStorage = bind_to_member(this, &GrGLTestInterface::renderbufferStorage);
129     fFunctions.fRenderbufferStorageMultisample = bind_to_member(this, &GrGLTestInterface::renderbufferStorageMultisample);
130     fFunctions.fResolveMultisampleFramebuffer = bind_to_member(this, &GrGLTestInterface::resolveMultisampleFramebuffer);
131     fFunctions.fScissor = bind_to_member(this, &GrGLTestInterface::scissor);
132     fFunctions.fBindUniformLocation = bind_to_member(this, &GrGLTestInterface::bindUniformLocation);
133     fFunctions.fShaderSource = bind_to_member(this, &GrGLTestInterface::shaderSource);
134     fFunctions.fStencilFunc = bind_to_member(this, &GrGLTestInterface::stencilFunc);
135     fFunctions.fStencilFuncSeparate = bind_to_member(this, &GrGLTestInterface::stencilFuncSeparate);
136     fFunctions.fStencilMask = bind_to_member(this, &GrGLTestInterface::stencilMask);
137     fFunctions.fStencilMaskSeparate = bind_to_member(this, &GrGLTestInterface::stencilMaskSeparate);
138     fFunctions.fStencilOp = bind_to_member(this, &GrGLTestInterface::stencilOp);
139     fFunctions.fStencilOpSeparate = bind_to_member(this, &GrGLTestInterface::stencilOpSeparate);
140     fFunctions.fTexBuffer = bind_to_member(this, &GrGLTestInterface::texBuffer);
141     fFunctions.fTexImage2D = bind_to_member(this, &GrGLTestInterface::texImage2D);
142     fFunctions.fTexParameteri = bind_to_member(this, &GrGLTestInterface::texParameteri);
143     fFunctions.fTexParameteriv = bind_to_member(this, &GrGLTestInterface::texParameteriv);
144     fFunctions.fTexStorage2D = bind_to_member(this, &GrGLTestInterface::texStorage2D);
145     fFunctions.fDiscardFramebuffer = bind_to_member(this, &GrGLTestInterface::discardFramebuffer);
146     fFunctions.fTexSubImage2D = bind_to_member(this, &GrGLTestInterface::texSubImage2D);
147     fFunctions.fTextureBarrier = bind_to_member(this, &GrGLTestInterface::textureBarrier);
148     fFunctions.fUniform1f = bind_to_member(this, &GrGLTestInterface::uniform1f);
149     fFunctions.fUniform1i = bind_to_member(this, &GrGLTestInterface::uniform1i);
150     fFunctions.fUniform1fv = bind_to_member(this, &GrGLTestInterface::uniform1fv);
151     fFunctions.fUniform1iv = bind_to_member(this, &GrGLTestInterface::uniform1iv);
152     fFunctions.fUniform2f = bind_to_member(this, &GrGLTestInterface::uniform2f);
153     fFunctions.fUniform2i = bind_to_member(this, &GrGLTestInterface::uniform2i);
154     fFunctions.fUniform2fv = bind_to_member(this, &GrGLTestInterface::uniform2fv);
155     fFunctions.fUniform2iv = bind_to_member(this, &GrGLTestInterface::uniform2iv);
156     fFunctions.fUniform3f = bind_to_member(this, &GrGLTestInterface::uniform3f);
157     fFunctions.fUniform3i = bind_to_member(this, &GrGLTestInterface::uniform3i);
158     fFunctions.fUniform3fv = bind_to_member(this, &GrGLTestInterface::uniform3fv);
159     fFunctions.fUniform3iv = bind_to_member(this, &GrGLTestInterface::uniform3iv);
160     fFunctions.fUniform4f = bind_to_member(this, &GrGLTestInterface::uniform4f);
161     fFunctions.fUniform4i = bind_to_member(this, &GrGLTestInterface::uniform4i);
162     fFunctions.fUniform4fv = bind_to_member(this, &GrGLTestInterface::uniform4fv);
163     fFunctions.fUniform4iv = bind_to_member(this, &GrGLTestInterface::uniform4iv);
164     fFunctions.fUniformMatrix2fv = bind_to_member(this, &GrGLTestInterface::uniformMatrix2fv);
165     fFunctions.fUniformMatrix3fv = bind_to_member(this, &GrGLTestInterface::uniformMatrix3fv);
166     fFunctions.fUniformMatrix4fv = bind_to_member(this, &GrGLTestInterface::uniformMatrix4fv);
167     fFunctions.fUnmapBuffer = bind_to_member(this, &GrGLTestInterface::unmapBuffer);
168     fFunctions.fUnmapBufferSubData = bind_to_member(this, &GrGLTestInterface::unmapBufferSubData);
169     fFunctions.fUnmapTexSubImage2D = bind_to_member(this, &GrGLTestInterface::unmapTexSubImage2D);
170     fFunctions.fUseProgram = bind_to_member(this, &GrGLTestInterface::useProgram);
171     fFunctions.fVertexAttrib1f = bind_to_member(this, &GrGLTestInterface::vertexAttrib1f);
172     fFunctions.fVertexAttrib2fv = bind_to_member(this, &GrGLTestInterface::vertexAttrib2fv);
173     fFunctions.fVertexAttrib3fv = bind_to_member(this, &GrGLTestInterface::vertexAttrib3fv);
174     fFunctions.fVertexAttrib4fv = bind_to_member(this, &GrGLTestInterface::vertexAttrib4fv);
175     fFunctions.fVertexAttribDivisor = bind_to_member(this, &GrGLTestInterface::vertexAttribDivisor);
176     fFunctions.fVertexAttribIPointer = bind_to_member(this, &GrGLTestInterface::vertexAttribIPointer);
177     fFunctions.fVertexAttribPointer = bind_to_member(this, &GrGLTestInterface::vertexAttribPointer);
178     fFunctions.fViewport = bind_to_member(this, &GrGLTestInterface::viewport);
179     fFunctions.fMatrixLoadf = bind_to_member(this, &GrGLTestInterface::matrixLoadf);
180     fFunctions.fMatrixLoadIdentity = bind_to_member(this, &GrGLTestInterface::matrixLoadIdentity);
181     fFunctions.fPathCommands = bind_to_member(this, &GrGLTestInterface::pathCommands);
182     fFunctions.fPathParameteri = bind_to_member(this, &GrGLTestInterface::pathParameteri);
183     fFunctions.fPathParameterf = bind_to_member(this, &GrGLTestInterface::pathParameterf);
184     fFunctions.fGenPaths = bind_to_member(this, &GrGLTestInterface::genPaths);
185     fFunctions.fDeletePaths = bind_to_member(this, &GrGLTestInterface::deletePaths);
186     fFunctions.fIsPath = bind_to_member(this, &GrGLTestInterface::isPath);
187     fFunctions.fPathStencilFunc = bind_to_member(this, &GrGLTestInterface::pathStencilFunc);
188     fFunctions.fStencilFillPath = bind_to_member(this, &GrGLTestInterface::stencilFillPath);
189     fFunctions.fStencilStrokePath = bind_to_member(this, &GrGLTestInterface::stencilStrokePath);
190     fFunctions.fStencilFillPathInstanced = bind_to_member(this, &GrGLTestInterface::stencilFillPathInstanced);
191     fFunctions.fStencilStrokePathInstanced = bind_to_member(this, &GrGLTestInterface::stencilStrokePathInstanced);
192     fFunctions.fCoverFillPath = bind_to_member(this, &GrGLTestInterface::coverFillPath);
193     fFunctions.fCoverStrokePath = bind_to_member(this, &GrGLTestInterface::coverStrokePath);
194     fFunctions.fCoverFillPathInstanced = bind_to_member(this, &GrGLTestInterface::coverFillPathInstanced);
195     fFunctions.fCoverStrokePathInstanced = bind_to_member(this, &GrGLTestInterface::coverStrokePathInstanced);
196     fFunctions.fStencilThenCoverFillPath = bind_to_member(this, &GrGLTestInterface::stencilThenCoverFillPath);
197     fFunctions.fStencilThenCoverStrokePath = bind_to_member(this, &GrGLTestInterface::stencilThenCoverStrokePath);
198     fFunctions.fStencilThenCoverFillPathInstanced = bind_to_member(this, &GrGLTestInterface::stencilThenCoverFillPathInstanced);
199     fFunctions.fStencilThenCoverStrokePathInstanced = bind_to_member(this, &GrGLTestInterface::stencilThenCoverStrokePathInstanced);
200     fFunctions.fProgramPathFragmentInputGen = bind_to_member(this, &GrGLTestInterface::programPathFragmentInputGen);
201     fFunctions.fBindFragmentInputLocation = bind_to_member(this, &GrGLTestInterface::bindFragmentInputLocation);
202     fFunctions.fGetProgramResourceLocation = bind_to_member(this, &GrGLTestInterface::getProgramResourceLocation);
203     fFunctions.fCoverageModulation = bind_to_member(this, &GrGLTestInterface::coverageModulation);
204     fFunctions.fMultiDrawArraysIndirect = bind_to_member(this, &GrGLTestInterface::multiDrawArraysIndirect);
205     fFunctions.fMultiDrawElementsIndirect = bind_to_member(this, &GrGLTestInterface::multiDrawElementsIndirect);
206     fFunctions.fGetTextureHandle = bind_to_member(this, &GrGLTestInterface::getTextureHandle);
207     fFunctions.fGetTextureSamplerHandle = bind_to_member(this, &GrGLTestInterface::getTextureSamplerHandle);
208     fFunctions.fMakeTextureHandleResident = bind_to_member(this, &GrGLTestInterface::makeTextureHandleResident);
209     fFunctions.fMakeTextureHandleNonResident = bind_to_member(this, &GrGLTestInterface::makeTextureHandleNonResident);
210     fFunctions.fGetImageHandle = bind_to_member(this, &GrGLTestInterface::getImageHandle);
211     fFunctions.fMakeImageHandleResident = bind_to_member(this, &GrGLTestInterface::makeImageHandleResident);
212     fFunctions.fMakeImageHandleNonResident = bind_to_member(this, &GrGLTestInterface::makeImageHandleNonResident);
213     fFunctions.fIsTextureHandleResident = bind_to_member(this, &GrGLTestInterface::isTextureHandleResident);
214     fFunctions.fIsImageHandleResident = bind_to_member(this, &GrGLTestInterface::isImageHandleResident);
215     fFunctions.fUniformHandleui64 = bind_to_member(this, &GrGLTestInterface::uniformHandleui64);
216     fFunctions.fUniformHandleui64v = bind_to_member(this, &GrGLTestInterface::uniformHandleui64v);
217     fFunctions.fProgramUniformHandleui64 = bind_to_member(this, &GrGLTestInterface::programUniformHandleui64);
218     fFunctions.fProgramUniformHandleui64v = bind_to_member(this, &GrGLTestInterface::programUniformHandleui64v);
219     fFunctions.fTextureParameteri = bind_to_member(this, &GrGLTestInterface::textureParameteri);
220     fFunctions.fTextureParameteriv = bind_to_member(this, &GrGLTestInterface::textureParameteriv);
221     fFunctions.fTextureParameterf = bind_to_member(this, &GrGLTestInterface::textureParameterf);
222     fFunctions.fTextureParameterfv = bind_to_member(this, &GrGLTestInterface::textureParameterfv);
223     fFunctions.fTextureImage1D = bind_to_member(this, &GrGLTestInterface::textureImage1D);
224     fFunctions.fTextureImage2D = bind_to_member(this, &GrGLTestInterface::textureImage2D);
225     fFunctions.fTextureSubImage1D = bind_to_member(this, &GrGLTestInterface::textureSubImage1D);
226     fFunctions.fTextureSubImage2D = bind_to_member(this, &GrGLTestInterface::textureSubImage2D);
227     fFunctions.fCopyTextureImage1D = bind_to_member(this, &GrGLTestInterface::copyTextureImage1D);
228     fFunctions.fCopyTextureImage2D = bind_to_member(this, &GrGLTestInterface::copyTextureImage2D);
229     fFunctions.fCopyTextureSubImage1D = bind_to_member(this, &GrGLTestInterface::copyTextureSubImage1D);
230     fFunctions.fCopyTextureSubImage2D = bind_to_member(this, &GrGLTestInterface::copyTextureSubImage2D);
231     fFunctions.fGetTextureImage = bind_to_member(this, &GrGLTestInterface::getTextureImage);
232     fFunctions.fGetTextureParameterfv = bind_to_member(this, &GrGLTestInterface::getTextureParameterfv);
233     fFunctions.fGetTextureParameteriv = bind_to_member(this, &GrGLTestInterface::getTextureParameteriv);
234     fFunctions.fGetTextureLevelParameterfv = bind_to_member(this, &GrGLTestInterface::getTextureLevelParameterfv);
235     fFunctions.fGetTextureLevelParameteriv = bind_to_member(this, &GrGLTestInterface::getTextureLevelParameteriv);
236     fFunctions.fTextureImage3D = bind_to_member(this, &GrGLTestInterface::textureImage3D);
237     fFunctions.fTextureSubImage3D = bind_to_member(this, &GrGLTestInterface::textureSubImage3D);
238     fFunctions.fCopyTextureSubImage3D = bind_to_member(this, &GrGLTestInterface::copyTextureSubImage3D);
239     fFunctions.fCompressedTextureImage3D = bind_to_member(this, &GrGLTestInterface::compressedTextureImage3D);
240     fFunctions.fCompressedTextureImage2D = bind_to_member(this, &GrGLTestInterface::compressedTextureImage2D);
241     fFunctions.fCompressedTextureImage1D = bind_to_member(this, &GrGLTestInterface::compressedTextureImage1D);
242     fFunctions.fCompressedTextureSubImage3D = bind_to_member(this, &GrGLTestInterface::compressedTextureSubImage3D);
243     fFunctions.fCompressedTextureSubImage2D = bind_to_member(this, &GrGLTestInterface::compressedTextureSubImage2D);
244     fFunctions.fCompressedTextureSubImage1D = bind_to_member(this, &GrGLTestInterface::compressedTextureSubImage1D);
245     fFunctions.fGetCompressedTextureImage = bind_to_member(this, &GrGLTestInterface::getCompressedTextureImage);
246     fFunctions.fNamedBufferData = bind_to_member(this, &GrGLTestInterface::namedBufferData);
247     fFunctions.fNamedBufferSubData = bind_to_member(this, &GrGLTestInterface::namedBufferSubData);
248     fFunctions.fMapNamedBuffer = bind_to_member(this, &GrGLTestInterface::mapNamedBuffer);
249     fFunctions.fUnmapNamedBuffer = bind_to_member(this, &GrGLTestInterface::unmapNamedBuffer);
250     fFunctions.fGetNamedBufferParameteriv = bind_to_member(this, &GrGLTestInterface::getNamedBufferParameteriv);
251     fFunctions.fGetNamedBufferPointerv = bind_to_member(this, &GrGLTestInterface::getNamedBufferPointerv);
252     fFunctions.fGetNamedBufferSubData = bind_to_member(this, &GrGLTestInterface::getNamedBufferSubData);
253     fFunctions.fProgramUniform1f = bind_to_member(this, &GrGLTestInterface::programUniform1f);
254     fFunctions.fProgramUniform2f = bind_to_member(this, &GrGLTestInterface::programUniform2f);
255     fFunctions.fProgramUniform3f = bind_to_member(this, &GrGLTestInterface::programUniform3f);
256     fFunctions.fProgramUniform4f = bind_to_member(this, &GrGLTestInterface::programUniform4f);
257     fFunctions.fProgramUniform1i = bind_to_member(this, &GrGLTestInterface::programUniform1i);
258     fFunctions.fProgramUniform2i = bind_to_member(this, &GrGLTestInterface::programUniform2i);
259     fFunctions.fProgramUniform3i = bind_to_member(this, &GrGLTestInterface::programUniform3i);
260     fFunctions.fProgramUniform4i = bind_to_member(this, &GrGLTestInterface::programUniform4i);
261     fFunctions.fProgramUniform1fv = bind_to_member(this, &GrGLTestInterface::programUniform1fv);
262     fFunctions.fProgramUniform2fv = bind_to_member(this, &GrGLTestInterface::programUniform2fv);
263     fFunctions.fProgramUniform3fv = bind_to_member(this, &GrGLTestInterface::programUniform3fv);
264     fFunctions.fProgramUniform4fv = bind_to_member(this, &GrGLTestInterface::programUniform4fv);
265     fFunctions.fProgramUniform1iv = bind_to_member(this, &GrGLTestInterface::programUniform1iv);
266     fFunctions.fProgramUniform2iv = bind_to_member(this, &GrGLTestInterface::programUniform2iv);
267     fFunctions.fProgramUniform3iv = bind_to_member(this, &GrGLTestInterface::programUniform3iv);
268     fFunctions.fProgramUniform4iv = bind_to_member(this, &GrGLTestInterface::programUniform4iv);
269     fFunctions.fProgramUniformMatrix2fv = bind_to_member(this, &GrGLTestInterface::programUniformMatrix2fv);
270     fFunctions.fProgramUniformMatrix3fv = bind_to_member(this, &GrGLTestInterface::programUniformMatrix3fv);
271     fFunctions.fProgramUniformMatrix4fv = bind_to_member(this, &GrGLTestInterface::programUniformMatrix4fv);
272     fFunctions.fProgramUniformMatrix2x3fv = bind_to_member(this, &GrGLTestInterface::programUniformMatrix2x3fv);
273     fFunctions.fProgramUniformMatrix3x2fv = bind_to_member(this, &GrGLTestInterface::programUniformMatrix3x2fv);
274     fFunctions.fProgramUniformMatrix2x4fv = bind_to_member(this, &GrGLTestInterface::programUniformMatrix2x4fv);
275     fFunctions.fProgramUniformMatrix4x2fv = bind_to_member(this, &GrGLTestInterface::programUniformMatrix4x2fv);
276     fFunctions.fProgramUniformMatrix3x4fv = bind_to_member(this, &GrGLTestInterface::programUniformMatrix3x4fv);
277     fFunctions.fProgramUniformMatrix4x3fv = bind_to_member(this, &GrGLTestInterface::programUniformMatrix4x3fv);
278     fFunctions.fNamedRenderbufferStorage = bind_to_member(this, &GrGLTestInterface::namedRenderbufferStorage);
279     fFunctions.fGetNamedRenderbufferParameteriv = bind_to_member(this, &GrGLTestInterface::getNamedRenderbufferParameteriv);
280     fFunctions.fNamedRenderbufferStorageMultisample = bind_to_member(this, &GrGLTestInterface::namedRenderbufferStorageMultisample);
281     fFunctions.fCheckNamedFramebufferStatus = bind_to_member(this, &GrGLTestInterface::checkNamedFramebufferStatus);
282     fFunctions.fNamedFramebufferTexture1D = bind_to_member(this, &GrGLTestInterface::namedFramebufferTexture1D);
283     fFunctions.fNamedFramebufferTexture2D = bind_to_member(this, &GrGLTestInterface::namedFramebufferTexture2D);
284     fFunctions.fNamedFramebufferTexture3D = bind_to_member(this, &GrGLTestInterface::namedFramebufferTexture3D);
285     fFunctions.fNamedFramebufferRenderbuffer = bind_to_member(this, &GrGLTestInterface::namedFramebufferRenderbuffer);
286     fFunctions.fGetNamedFramebufferAttachmentParameteriv = bind_to_member(this, &GrGLTestInterface::getNamedFramebufferAttachmentParameteriv);
287     fFunctions.fGenerateTextureMipmap = bind_to_member(this, &GrGLTestInterface::generateTextureMipmap);
288     fFunctions.fFramebufferDrawBuffer = bind_to_member(this, &GrGLTestInterface::framebufferDrawBuffer);
289     fFunctions.fFramebufferDrawBuffers = bind_to_member(this, &GrGLTestInterface::framebufferDrawBuffers);
290     fFunctions.fFramebufferReadBuffer = bind_to_member(this, &GrGLTestInterface::framebufferReadBuffer);
291     fFunctions.fGetFramebufferParameteriv = bind_to_member(this, &GrGLTestInterface::getFramebufferParameteriv);
292     fFunctions.fNamedCopyBufferSubData = bind_to_member(this, &GrGLTestInterface::namedCopyBufferSubData);
293     fFunctions.fVertexArrayVertexOffset = bind_to_member(this, &GrGLTestInterface::vertexArrayVertexOffset);
294     fFunctions.fVertexArrayColorOffset = bind_to_member(this, &GrGLTestInterface::vertexArrayColorOffset);
295     fFunctions.fVertexArrayEdgeFlagOffset = bind_to_member(this, &GrGLTestInterface::vertexArrayEdgeFlagOffset);
296     fFunctions.fVertexArrayIndexOffset = bind_to_member(this, &GrGLTestInterface::vertexArrayIndexOffset);
297     fFunctions.fVertexArrayNormalOffset = bind_to_member(this, &GrGLTestInterface::vertexArrayNormalOffset);
298     fFunctions.fVertexArrayTexCoordOffset = bind_to_member(this, &GrGLTestInterface::vertexArrayTexCoordOffset);
299     fFunctions.fVertexArrayMultiTexCoordOffset = bind_to_member(this, &GrGLTestInterface::vertexArrayMultiTexCoordOffset);
300     fFunctions.fVertexArrayFogCoordOffset = bind_to_member(this, &GrGLTestInterface::vertexArrayFogCoordOffset);
301     fFunctions.fVertexArraySecondaryColorOffset = bind_to_member(this, &GrGLTestInterface::vertexArraySecondaryColorOffset);
302     fFunctions.fVertexArrayVertexAttribOffset = bind_to_member(this, &GrGLTestInterface::vertexArrayVertexAttribOffset);
303     fFunctions.fVertexArrayVertexAttribIOffset = bind_to_member(this, &GrGLTestInterface::vertexArrayVertexAttribIOffset);
304     fFunctions.fEnableVertexArray = bind_to_member(this, &GrGLTestInterface::enableVertexArray);
305     fFunctions.fDisableVertexArray = bind_to_member(this, &GrGLTestInterface::disableVertexArray);
306     fFunctions.fEnableVertexArrayAttrib = bind_to_member(this, &GrGLTestInterface::enableVertexArrayAttrib);
307     fFunctions.fDisableVertexArrayAttrib = bind_to_member(this, &GrGLTestInterface::disableVertexArrayAttrib);
308     fFunctions.fGetVertexArrayIntegerv = bind_to_member(this, &GrGLTestInterface::getVertexArrayIntegerv);
309     fFunctions.fGetVertexArrayPointerv = bind_to_member(this, &GrGLTestInterface::getVertexArrayPointerv);
310     fFunctions.fGetVertexArrayIntegeri_v = bind_to_member(this, &GrGLTestInterface::getVertexArrayIntegeri_v);
311     fFunctions.fGetVertexArrayPointeri_v = bind_to_member(this, &GrGLTestInterface::getVertexArrayPointeri_v);
312     fFunctions.fMapNamedBufferRange = bind_to_member(this, &GrGLTestInterface::mapNamedBufferRange);
313     fFunctions.fFlushMappedNamedBufferRange = bind_to_member(this, &GrGLTestInterface::flushMappedNamedBufferRange);
314     fFunctions.fTextureBuffer = bind_to_member(this, &GrGLTestInterface::textureBuffer);
315     fFunctions.fFenceSync = bind_to_member(this, &GrGLTestInterface::fenceSync);
316     fFunctions.fClientWaitSync = bind_to_member(this, &GrGLTestInterface::clientWaitSync);
317     fFunctions.fDeleteSync = bind_to_member(this, &GrGLTestInterface::deleteSync);
318     fFunctions.fDebugMessageControl = bind_to_member(this, &GrGLTestInterface::debugMessageControl);
319     fFunctions.fDebugMessageInsert = bind_to_member(this, &GrGLTestInterface::debugMessageInsert);
320     fFunctions.fDebugMessageCallback = bind_to_member(this, &GrGLTestInterface::debugMessageCallback);
321     fFunctions.fGetDebugMessageLog = bind_to_member(this, &GrGLTestInterface::getDebugMessageLog);
322     fFunctions.fPushDebugGroup = bind_to_member(this, &GrGLTestInterface::pushDebugGroup);
323     fFunctions.fPopDebugGroup = bind_to_member(this, &GrGLTestInterface::popDebugGroup);
324     fFunctions.fObjectLabel = bind_to_member(this, &GrGLTestInterface::objectLabel);
325 }
326