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 "GrGLTestInterface.h"
9
10namespace {
11    template<typename R, typename... A>
12    GrGLFunction<R(*)(A...)> bind_to_member(GrGLTestInterface* interface,
13                                            R (GrGLTestInterface::*member)(A...)) {
14        return [interface, member] (A... a) -> R { return (interface->*member)(a...); };
15    }
16}  // anonymous namespace
17
18GrGLTestInterface::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.fPolygonMode = bind_to_member(this, &GrGLTestInterface::polygonMode);
123    fFunctions.fPopGroupMarker = bind_to_member(this, &GrGLTestInterface::popGroupMarker);
124    fFunctions.fPushGroupMarker = bind_to_member(this, &GrGLTestInterface::pushGroupMarker);
125    fFunctions.fQueryCounter = bind_to_member(this, &GrGLTestInterface::queryCounter);
126    fFunctions.fRasterSamples = bind_to_member(this, &GrGLTestInterface::rasterSamples);
127    fFunctions.fReadBuffer = bind_to_member(this, &GrGLTestInterface::readBuffer);
128    fFunctions.fReadPixels = bind_to_member(this, &GrGLTestInterface::readPixels);
129    fFunctions.fRenderbufferStorage = bind_to_member(this, &GrGLTestInterface::renderbufferStorage);
130    fFunctions.fRenderbufferStorageMultisample = bind_to_member(this, &GrGLTestInterface::renderbufferStorageMultisample);
131    fFunctions.fResolveMultisampleFramebuffer = bind_to_member(this, &GrGLTestInterface::resolveMultisampleFramebuffer);
132    fFunctions.fScissor = bind_to_member(this, &GrGLTestInterface::scissor);
133    fFunctions.fBindUniformLocation = bind_to_member(this, &GrGLTestInterface::bindUniformLocation);
134    fFunctions.fShaderSource = bind_to_member(this, &GrGLTestInterface::shaderSource);
135    fFunctions.fStencilFunc = bind_to_member(this, &GrGLTestInterface::stencilFunc);
136    fFunctions.fStencilFuncSeparate = bind_to_member(this, &GrGLTestInterface::stencilFuncSeparate);
137    fFunctions.fStencilMask = bind_to_member(this, &GrGLTestInterface::stencilMask);
138    fFunctions.fStencilMaskSeparate = bind_to_member(this, &GrGLTestInterface::stencilMaskSeparate);
139    fFunctions.fStencilOp = bind_to_member(this, &GrGLTestInterface::stencilOp);
140    fFunctions.fStencilOpSeparate = bind_to_member(this, &GrGLTestInterface::stencilOpSeparate);
141    fFunctions.fTexBuffer = bind_to_member(this, &GrGLTestInterface::texBuffer);
142    fFunctions.fTexImage2D = bind_to_member(this, &GrGLTestInterface::texImage2D);
143    fFunctions.fTexParameteri = bind_to_member(this, &GrGLTestInterface::texParameteri);
144    fFunctions.fTexParameteriv = bind_to_member(this, &GrGLTestInterface::texParameteriv);
145    fFunctions.fTexStorage2D = bind_to_member(this, &GrGLTestInterface::texStorage2D);
146    fFunctions.fDiscardFramebuffer = bind_to_member(this, &GrGLTestInterface::discardFramebuffer);
147    fFunctions.fTexSubImage2D = bind_to_member(this, &GrGLTestInterface::texSubImage2D);
148    fFunctions.fTextureBarrier = bind_to_member(this, &GrGLTestInterface::textureBarrier);
149    fFunctions.fUniform1f = bind_to_member(this, &GrGLTestInterface::uniform1f);
150    fFunctions.fUniform1i = bind_to_member(this, &GrGLTestInterface::uniform1i);
151    fFunctions.fUniform1fv = bind_to_member(this, &GrGLTestInterface::uniform1fv);
152    fFunctions.fUniform1iv = bind_to_member(this, &GrGLTestInterface::uniform1iv);
153    fFunctions.fUniform2f = bind_to_member(this, &GrGLTestInterface::uniform2f);
154    fFunctions.fUniform2i = bind_to_member(this, &GrGLTestInterface::uniform2i);
155    fFunctions.fUniform2fv = bind_to_member(this, &GrGLTestInterface::uniform2fv);
156    fFunctions.fUniform2iv = bind_to_member(this, &GrGLTestInterface::uniform2iv);
157    fFunctions.fUniform3f = bind_to_member(this, &GrGLTestInterface::uniform3f);
158    fFunctions.fUniform3i = bind_to_member(this, &GrGLTestInterface::uniform3i);
159    fFunctions.fUniform3fv = bind_to_member(this, &GrGLTestInterface::uniform3fv);
160    fFunctions.fUniform3iv = bind_to_member(this, &GrGLTestInterface::uniform3iv);
161    fFunctions.fUniform4f = bind_to_member(this, &GrGLTestInterface::uniform4f);
162    fFunctions.fUniform4i = bind_to_member(this, &GrGLTestInterface::uniform4i);
163    fFunctions.fUniform4fv = bind_to_member(this, &GrGLTestInterface::uniform4fv);
164    fFunctions.fUniform4iv = bind_to_member(this, &GrGLTestInterface::uniform4iv);
165    fFunctions.fUniformMatrix2fv = bind_to_member(this, &GrGLTestInterface::uniformMatrix2fv);
166    fFunctions.fUniformMatrix3fv = bind_to_member(this, &GrGLTestInterface::uniformMatrix3fv);
167    fFunctions.fUniformMatrix4fv = bind_to_member(this, &GrGLTestInterface::uniformMatrix4fv);
168    fFunctions.fUnmapBuffer = bind_to_member(this, &GrGLTestInterface::unmapBuffer);
169    fFunctions.fUnmapBufferSubData = bind_to_member(this, &GrGLTestInterface::unmapBufferSubData);
170    fFunctions.fUnmapTexSubImage2D = bind_to_member(this, &GrGLTestInterface::unmapTexSubImage2D);
171    fFunctions.fUseProgram = bind_to_member(this, &GrGLTestInterface::useProgram);
172    fFunctions.fVertexAttrib1f = bind_to_member(this, &GrGLTestInterface::vertexAttrib1f);
173    fFunctions.fVertexAttrib2fv = bind_to_member(this, &GrGLTestInterface::vertexAttrib2fv);
174    fFunctions.fVertexAttrib3fv = bind_to_member(this, &GrGLTestInterface::vertexAttrib3fv);
175    fFunctions.fVertexAttrib4fv = bind_to_member(this, &GrGLTestInterface::vertexAttrib4fv);
176    fFunctions.fVertexAttribDivisor = bind_to_member(this, &GrGLTestInterface::vertexAttribDivisor);
177    fFunctions.fVertexAttribIPointer = bind_to_member(this, &GrGLTestInterface::vertexAttribIPointer);
178    fFunctions.fVertexAttribPointer = bind_to_member(this, &GrGLTestInterface::vertexAttribPointer);
179    fFunctions.fViewport = bind_to_member(this, &GrGLTestInterface::viewport);
180    fFunctions.fMatrixLoadf = bind_to_member(this, &GrGLTestInterface::matrixLoadf);
181    fFunctions.fMatrixLoadIdentity = bind_to_member(this, &GrGLTestInterface::matrixLoadIdentity);
182    fFunctions.fPathCommands = bind_to_member(this, &GrGLTestInterface::pathCommands);
183    fFunctions.fPathParameteri = bind_to_member(this, &GrGLTestInterface::pathParameteri);
184    fFunctions.fPathParameterf = bind_to_member(this, &GrGLTestInterface::pathParameterf);
185    fFunctions.fGenPaths = bind_to_member(this, &GrGLTestInterface::genPaths);
186    fFunctions.fDeletePaths = bind_to_member(this, &GrGLTestInterface::deletePaths);
187    fFunctions.fIsPath = bind_to_member(this, &GrGLTestInterface::isPath);
188    fFunctions.fPathStencilFunc = bind_to_member(this, &GrGLTestInterface::pathStencilFunc);
189    fFunctions.fStencilFillPath = bind_to_member(this, &GrGLTestInterface::stencilFillPath);
190    fFunctions.fStencilStrokePath = bind_to_member(this, &GrGLTestInterface::stencilStrokePath);
191    fFunctions.fStencilFillPathInstanced = bind_to_member(this, &GrGLTestInterface::stencilFillPathInstanced);
192    fFunctions.fStencilStrokePathInstanced = bind_to_member(this, &GrGLTestInterface::stencilStrokePathInstanced);
193    fFunctions.fCoverFillPath = bind_to_member(this, &GrGLTestInterface::coverFillPath);
194    fFunctions.fCoverStrokePath = bind_to_member(this, &GrGLTestInterface::coverStrokePath);
195    fFunctions.fCoverFillPathInstanced = bind_to_member(this, &GrGLTestInterface::coverFillPathInstanced);
196    fFunctions.fCoverStrokePathInstanced = bind_to_member(this, &GrGLTestInterface::coverStrokePathInstanced);
197    fFunctions.fStencilThenCoverFillPath = bind_to_member(this, &GrGLTestInterface::stencilThenCoverFillPath);
198    fFunctions.fStencilThenCoverStrokePath = bind_to_member(this, &GrGLTestInterface::stencilThenCoverStrokePath);
199    fFunctions.fStencilThenCoverFillPathInstanced = bind_to_member(this, &GrGLTestInterface::stencilThenCoverFillPathInstanced);
200    fFunctions.fStencilThenCoverStrokePathInstanced = bind_to_member(this, &GrGLTestInterface::stencilThenCoverStrokePathInstanced);
201    fFunctions.fProgramPathFragmentInputGen = bind_to_member(this, &GrGLTestInterface::programPathFragmentInputGen);
202    fFunctions.fBindFragmentInputLocation = bind_to_member(this, &GrGLTestInterface::bindFragmentInputLocation);
203    fFunctions.fGetProgramResourceLocation = bind_to_member(this, &GrGLTestInterface::getProgramResourceLocation);
204    fFunctions.fCoverageModulation = bind_to_member(this, &GrGLTestInterface::coverageModulation);
205    fFunctions.fMultiDrawArraysIndirect = bind_to_member(this, &GrGLTestInterface::multiDrawArraysIndirect);
206    fFunctions.fMultiDrawElementsIndirect = bind_to_member(this, &GrGLTestInterface::multiDrawElementsIndirect);
207    fFunctions.fFenceSync = bind_to_member(this, &GrGLTestInterface::fenceSync);
208    fFunctions.fIsSync = bind_to_member(this, &GrGLTestInterface::isSync);
209    fFunctions.fClientWaitSync = bind_to_member(this, &GrGLTestInterface::clientWaitSync);
210    fFunctions.fWaitSync = bind_to_member(this, &GrGLTestInterface::waitSync);
211    fFunctions.fDeleteSync = bind_to_member(this, &GrGLTestInterface::deleteSync);
212    fFunctions.fDebugMessageControl = bind_to_member(this, &GrGLTestInterface::debugMessageControl);
213    fFunctions.fDebugMessageInsert = bind_to_member(this, &GrGLTestInterface::debugMessageInsert);
214    fFunctions.fDebugMessageCallback = bind_to_member(this, &GrGLTestInterface::debugMessageCallback);
215    fFunctions.fGetDebugMessageLog = bind_to_member(this, &GrGLTestInterface::getDebugMessageLog);
216    fFunctions.fPushDebugGroup = bind_to_member(this, &GrGLTestInterface::pushDebugGroup);
217    fFunctions.fPopDebugGroup = bind_to_member(this, &GrGLTestInterface::popDebugGroup);
218    fFunctions.fObjectLabel = bind_to_member(this, &GrGLTestInterface::objectLabel);
219    fFunctions.fGetInternalformativ = bind_to_member(this, &GrGLTestInterface::getInternalformativ);
220    fFunctions.fProgramBinary = bind_to_member(this, &GrGLTestInterface::programBinary);
221    fFunctions.fGetProgramBinary = bind_to_member(this, &GrGLTestInterface::getProgramBinary);
222    fFunctions.fProgramParameteri = bind_to_member(this, &GrGLTestInterface::programParameteri);
223}
224