xref: /aosp_15_r20/external/deqp/framework/opengl/simplereference/sglrContextWrapper.hpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1 #ifndef _SGLRCONTEXTWRAPPER_HPP
2 #define _SGLRCONTEXTWRAPPER_HPP
3 /*-------------------------------------------------------------------------
4  * drawElements Quality Program OpenGL ES Utilities
5  * ------------------------------------------------
6  *
7  * Copyright 2014 The Android Open Source Project
8  *
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  *
21  *//*!
22  * \file
23  * \brief Context wrapper that exposes sglr API as GL-compatible API.
24  *//*--------------------------------------------------------------------*/
25 
26 #include "tcuDefs.hpp"
27 #include "tcuVector.hpp"
28 
29 namespace sglr
30 {
31 
32 class Shader;
33 class Context;
34 
35 class ContextWrapper
36 {
37 public:
38     ContextWrapper(void);
39     ~ContextWrapper(void);
40 
41     void setContext(Context *context);
42     Context *getCurrentContext(void) const;
43 
44     int getWidth(void) const;
45     int getHeight(void) const;
46 
47     // GL-compatible API.
48     void glActiveTexture(uint32_t texture);
49     void glAttachShader(uint32_t program, uint32_t shader);
50     void glBindAttribLocation(uint32_t program, uint32_t index, const char *name);
51     void glBindBuffer(uint32_t target, uint32_t buffer);
52     void glBindFramebuffer(uint32_t target, uint32_t framebuffer);
53     void glBindRenderbuffer(uint32_t target, uint32_t renderbuffer);
54     void glBindTexture(uint32_t target, uint32_t texture);
55     void glBlendColor(float red, float green, float blue, float alpha);
56     void glBlendEquation(uint32_t mode);
57     void glBlendEquationSeparate(uint32_t modeRGB, uint32_t modeAlpha);
58     void glBlendFunc(uint32_t sfactor, uint32_t dfactor);
59     void glBlendFuncSeparate(uint32_t srcRGB, uint32_t dstRGB, uint32_t srcAlpha, uint32_t dstAlpha);
60     void glBufferData(uint32_t target, intptr_t size, const void *data, uint32_t usage);
61     void glBufferSubData(uint32_t target, intptr_t offset, intptr_t size, const void *data);
62     uint32_t glCheckFramebufferStatus(uint32_t target);
63     void glClear(uint32_t mask);
64     void glClearColor(float red, float green, float blue, float alpha);
65     void glClearDepthf(float depth);
66     void glClearStencil(int s);
67     void glColorMask(bool red, bool green, bool blue, bool alpha);
68     void glCompileShader(uint32_t shader);
69     void glCompressedTexImage2D(uint32_t target, int level, uint32_t internalformat, int width, int height, int border,
70                                 int imageSize, const void *data);
71     void glCompressedTexSubImage2D(uint32_t target, int level, int xoffset, int yoffset, int width, int height,
72                                    uint32_t format, int imageSize, const void *data);
73     void glCopyTexImage1D(uint32_t target, int level, uint32_t internalformat, int x, int y, int width, int border);
74     void glCopyTexImage2D(uint32_t target, int level, uint32_t internalformat, int x, int y, int width, int height,
75                           int border);
76     void glCopyTexSubImage1D(uint32_t target, int level, int xoffset, int x, int y, int width);
77     void glCopyTexSubImage2D(uint32_t target, int level, int xoffset, int yoffset, int x, int y, int width, int height);
78     uint32_t glCreateProgram();
79     uint32_t glCreateShader(uint32_t type);
80     void glCullFace(uint32_t mode);
81     void glDeleteBuffers(int n, const uint32_t *buffers);
82     void glDeleteFramebuffers(int n, const uint32_t *framebuffers);
83     void glDeleteProgram(uint32_t program);
84     void glDeleteRenderbuffers(int n, const uint32_t *renderbuffers);
85     void glDeleteShader(uint32_t shader);
86     void glDeleteTextures(int n, const uint32_t *textures);
87     void glDepthFunc(uint32_t func);
88     void glDepthMask(bool flag);
89     void glDepthRangef(float n, float f);
90     void glDetachShader(uint32_t program, uint32_t shader);
91     void glDisable(uint32_t cap);
92     void glDisableVertexAttribArray(uint32_t index);
93     void glDrawArrays(uint32_t mode, int first, int count);
94     void glDrawElements(uint32_t mode, int count, uint32_t type, const void *indices);
95     void glEnable(uint32_t cap);
96     void glEnableVertexAttribArray(uint32_t index);
97     void glFinish();
98     void glFlush();
99     void glFramebufferRenderbuffer(uint32_t target, uint32_t attachment, uint32_t renderbuffertarget,
100                                    uint32_t renderbuffer);
101     void glFramebufferTexture2D(uint32_t target, uint32_t attachment, uint32_t textarget, uint32_t texture, int level);
102     void glFrontFace(uint32_t mode);
103     void glGenBuffers(int n, uint32_t *buffers);
104     void glGenerateMipmap(uint32_t target);
105     void glGenFramebuffers(int n, uint32_t *framebuffers);
106     void glGenRenderbuffers(int n, uint32_t *renderbuffers);
107     void glGenTextures(int n, uint32_t *textures);
108     void glGetActiveAttrib(uint32_t program, uint32_t index, int bufsize, int *length, int *size, uint32_t *type,
109                            char *name);
110     void glGetActiveUniform(uint32_t program, uint32_t index, int bufsize, int *length, int *size, uint32_t *type,
111                             char *name);
112     void glGetAttachedShaders(uint32_t program, int maxcount, int *count, uint32_t *shaders);
113     int glGetAttribLocation(uint32_t program, const char *name);
114     void glGetBooleanv(uint32_t pname, bool *params);
115     void glGetBufferParameteriv(uint32_t target, uint32_t pname, int *params);
116     uint32_t glGetError();
117     void glGetFloatv(uint32_t pname, float *params);
118     void glGetFramebufferAttachmentParameteriv(uint32_t target, uint32_t attachment, uint32_t pname, int *params);
119     void glGetIntegerv(uint32_t pname, int *params);
120     void glGetProgramiv(uint32_t program, uint32_t pname, int *params);
121     void glGetProgramInfoLog(uint32_t program, int bufsize, int *length, char *infolog);
122     void glGetRenderbufferParameteriv(uint32_t target, uint32_t pname, int *params);
123     void glGetShaderiv(uint32_t shader, uint32_t pname, int *params);
124     void glGetShaderInfoLog(uint32_t shader, int bufsize, int *length, char *infolog);
125     void glGetShaderPrecisionFormat(uint32_t shadertype, uint32_t precisiontype, int *range, int *precision);
126     void glGetShaderSource(uint32_t shader, int bufsize, int *length, char *source);
127     const uint8_t *glGetString(uint32_t name);
128     void glGetTexParameterfv(uint32_t target, uint32_t pname, float *params);
129     void glGetTexParameteriv(uint32_t target, uint32_t pname, int *params);
130     void glGetUniformfv(uint32_t program, int location, float *params);
131     void glGetUniformiv(uint32_t program, int location, int *params);
132     int glGetUniformLocation(uint32_t program, const char *name);
133     void glGetVertexAttribfv(uint32_t index, uint32_t pname, float *params);
134     void glGetVertexAttribiv(uint32_t index, uint32_t pname, int *params);
135     void glGetVertexAttribPointerv(uint32_t index, uint32_t pname, void **pointer);
136     void glHint(uint32_t target, uint32_t mode);
137     bool glIsBuffer(uint32_t buffer);
138     bool glIsEnabled(uint32_t cap);
139     bool glIsFramebuffer(uint32_t framebuffer);
140     bool glIsProgram(uint32_t program);
141     bool glIsRenderbuffer(uint32_t renderbuffer);
142     bool glIsShader(uint32_t shader);
143     bool glIsTexture(uint32_t texture);
144     void glLineWidth(float width);
145     void glLinkProgram(uint32_t program);
146     void glPixelStorei(uint32_t pname, int param);
147     void glPolygonOffset(float factor, float units);
148     void glReadPixels(int x, int y, int width, int height, uint32_t format, uint32_t type, void *pixels);
149     void glReleaseShaderCompiler();
150     void glRenderbufferStorage(uint32_t target, uint32_t internalformat, int width, int height);
151     void glSampleCoverage(float value, bool invert);
152     void glScissor(int x, int y, int width, int height);
153     void glShaderBinary(int n, const uint32_t *shaders, uint32_t binaryformat, const void *binary, int length);
154     void glShaderSource(uint32_t shader, int count, const char *const *string, const int *length);
155     void glStencilFunc(uint32_t func, int ref, uint32_t mask);
156     void glStencilFuncSeparate(uint32_t face, uint32_t func, int ref, uint32_t mask);
157     void glStencilMask(uint32_t mask);
158     void glStencilMaskSeparate(uint32_t face, uint32_t mask);
159     void glStencilOp(uint32_t fail, uint32_t zfail, uint32_t zpass);
160     void glStencilOpSeparate(uint32_t face, uint32_t fail, uint32_t zfail, uint32_t zpass);
161     void glTexImage1D(uint32_t target, int level, int internalformat, int width, int border, uint32_t format,
162                       uint32_t type, const void *pixels);
163     void glTexImage2D(uint32_t target, int level, int internalformat, int width, int height, int border,
164                       uint32_t format, uint32_t type, const void *pixels);
165     void glTexParameterf(uint32_t target, uint32_t pname, float param);
166     void glTexParameterfv(uint32_t target, uint32_t pname, const float *params);
167     void glTexParameteri(uint32_t target, uint32_t pname, int param);
168     void glTexParameteriv(uint32_t target, uint32_t pname, const int *params);
169     void glTexSubImage1D(uint32_t target, int level, int xoffset, int width, uint32_t format, uint32_t type,
170                          const void *pixels);
171     void glTexSubImage2D(uint32_t target, int level, int xoffset, int yoffset, int width, int height, uint32_t format,
172                          uint32_t type, const void *pixels);
173     void glUniform1f(int location, float x);
174     void glUniform1fv(int location, int count, const float *v);
175     void glUniform1i(int location, int x);
176     void glUniform1iv(int location, int count, const int *v);
177     void glUniform2f(int location, float x, float y);
178     void glUniform2fv(int location, int count, const float *v);
179     void glUniform2i(int location, int x, int y);
180     void glUniform2iv(int location, int count, const int *v);
181     void glUniform3f(int location, float x, float y, float z);
182     void glUniform3fv(int location, int count, const float *v);
183     void glUniform3i(int location, int x, int y, int z);
184     void glUniform3iv(int location, int count, const int *v);
185     void glUniform4f(int location, float x, float y, float z, float w);
186     void glUniform4fv(int location, int count, const float *v);
187     void glUniform4i(int location, int x, int y, int z, int w);
188     void glUniform4iv(int location, int count, const int *v);
189     void glUniformMatrix2fv(int location, int count, bool transpose, const float *value);
190     void glUniformMatrix3fv(int location, int count, bool transpose, const float *value);
191     void glUniformMatrix4fv(int location, int count, bool transpose, const float *value);
192     void glUseProgram(uint32_t program);
193     void glValidateProgram(uint32_t program);
194     void glVertexAttrib1f(uint32_t indx, float x);
195     void glVertexAttrib1fv(uint32_t indx, const float *values);
196     void glVertexAttrib2f(uint32_t indx, float x, float y);
197     void glVertexAttrib2fv(uint32_t indx, const float *values);
198     void glVertexAttrib3f(uint32_t indx, float x, float y, float z);
199     void glVertexAttrib3fv(uint32_t indx, const float *values);
200     void glVertexAttrib4f(uint32_t indx, float x, float y, float z, float w);
201     void glVertexAttrib4fv(uint32_t indx, const float *values);
202     void glVertexAttribPointer(uint32_t indx, int size, uint32_t type, bool normalized, int stride, const void *ptr);
203     void glViewport(int x, int y, int width, int height);
204     void glReadBuffer(uint32_t mode);
205     void glDrawRangeElements(uint32_t mode, uint32_t start, uint32_t end, int count, uint32_t type,
206                              const void *indices);
207     void glTexImage3D(uint32_t target, int level, int internalformat, int width, int height, int depth, int border,
208                       uint32_t format, uint32_t type, const void *pixels);
209     void glTexSubImage3D(uint32_t target, int level, int xoffset, int yoffset, int zoffset, int width, int height,
210                          int depth, uint32_t format, uint32_t type, const void *pixels);
211     void glCopyTexSubImage3D(uint32_t target, int level, int xoffset, int yoffset, int zoffset, int x, int y, int width,
212                              int height);
213     void glCompressedTexImage3D(uint32_t target, int level, uint32_t internalformat, int width, int height, int depth,
214                                 int border, int imageSize, const void *data);
215     void glCompressedTexSubImage3D(uint32_t target, int level, int xoffset, int yoffset, int zoffset, int width,
216                                    int height, int depth, uint32_t format, int imageSize, const void *data);
217     void glGenQueries(int n, uint32_t *ids);
218     void glDeleteQueries(int n, const uint32_t *ids);
219     bool glIsQuery(uint32_t id);
220     void glBeginQuery(uint32_t target, uint32_t id);
221     void glEndQuery(uint32_t target);
222     void glGetQueryiv(uint32_t target, uint32_t pname, int *params);
223     void glGetQueryObjectuiv(uint32_t id, uint32_t pname, uint32_t *params);
224     bool glUnmapBuffer(uint32_t target);
225     void glGetBufferPointerv(uint32_t target, uint32_t pname, void **params);
226     void glDrawBuffers(int n, const uint32_t *bufs);
227     void glUniformMatrix2x3fv(int location, int count, bool transpose, const float *value);
228     void glUniformMatrix3x2fv(int location, int count, bool transpose, const float *value);
229     void glUniformMatrix2x4fv(int location, int count, bool transpose, const float *value);
230     void glUniformMatrix4x2fv(int location, int count, bool transpose, const float *value);
231     void glUniformMatrix3x4fv(int location, int count, bool transpose, const float *value);
232     void glUniformMatrix4x3fv(int location, int count, bool transpose, const float *value);
233     void glBlitFramebuffer(int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1,
234                            uint32_t mask, uint32_t filter);
235     void glRenderbufferStorageMultisample(uint32_t target, int samples, uint32_t internalformat, int width, int height);
236     void glFramebufferTextureLayer(uint32_t target, uint32_t attachment, uint32_t texture, int level, int layer);
237     void *glMapBufferRange(uint32_t target, intptr_t offset, intptr_t length, uint32_t access);
238     void glFlushMappedBufferRange(uint32_t target, intptr_t offset, intptr_t length);
239     void glBindVertexArray(uint32_t array);
240     void glDeleteVertexArrays(int n, const uint32_t *arrays);
241     void glGenVertexArrays(int n, uint32_t *arrays);
242     bool glIsVertexArray(uint32_t array);
243     void glGetIntegeri_v(uint32_t target, uint32_t index, int *data);
244     void glBeginTransformFeedback(uint32_t primitiveMode);
245     void glEndTransformFeedback();
246     void glBindBufferRange(uint32_t target, uint32_t index, uint32_t buffer, intptr_t offset, intptr_t size);
247     void glBindBufferBase(uint32_t target, uint32_t index, uint32_t buffer);
248     void glTransformFeedbackVaryings(uint32_t program, int count, const char *const *varyings, uint32_t bufferMode);
249     void glGetTransformFeedbackVarying(uint32_t program, uint32_t index, int bufSize, int *length, int *size,
250                                        uint32_t *type, char *name);
251     void glVertexAttribIPointer(uint32_t index, int size, uint32_t type, int stride, const void *pointer);
252     void glGetVertexAttribIiv(uint32_t index, uint32_t pname, int *params);
253     void glGetVertexAttribIuiv(uint32_t index, uint32_t pname, uint32_t *params);
254     void glVertexAttribI4i(uint32_t index, int x, int y, int z, int w);
255     void glVertexAttribI4ui(uint32_t index, uint32_t x, uint32_t y, uint32_t z, uint32_t w);
256     void glVertexAttribI4iv(uint32_t index, const int *v);
257     void glVertexAttribI4uiv(uint32_t index, const uint32_t *v);
258     void glGetUniformuiv(uint32_t program, int location, uint32_t *params);
259     int glGetFragDataLocation(uint32_t program, const char *name);
260     void glUniform1ui(int location, uint32_t v0);
261     void glUniform2ui(int location, uint32_t v0, uint32_t v1);
262     void glUniform3ui(int location, uint32_t v0, uint32_t v1, uint32_t v2);
263     void glUniform4ui(int location, uint32_t v0, uint32_t v1, uint32_t v2, uint32_t v3);
264     void glUniform1uiv(int location, int count, const uint32_t *value);
265     void glUniform2uiv(int location, int count, const uint32_t *value);
266     void glUniform3uiv(int location, int count, const uint32_t *value);
267     void glUniform4uiv(int location, int count, const uint32_t *value);
268     void glClearBufferiv(uint32_t buffer, int drawbuffer, const int *value);
269     void glClearBufferuiv(uint32_t buffer, int drawbuffer, const uint32_t *value);
270     void glClearBufferfv(uint32_t buffer, int drawbuffer, const float *value);
271     void glClearBufferfi(uint32_t buffer, int drawbuffer, float depth, int stencil);
272     const uint8_t *glGetStringi(uint32_t name, uint32_t index);
273     void glCopyBufferSubData(uint32_t readTarget, uint32_t writeTarget, intptr_t readOffset, intptr_t writeOffset,
274                              intptr_t size);
275     void glGetUniformIndices(uint32_t program, int uniformCount, const char *const *uniformNames,
276                              uint32_t *uniformIndices);
277     void glGetActiveUniformsiv(uint32_t program, int uniformCount, const uint32_t *uniformIndices, uint32_t pname,
278                                int *params);
279     uint32_t glGetUniformBlockIndex(uint32_t program, const char *uniformBlockName);
280     void glGetActiveUniformBlockiv(uint32_t program, uint32_t uniformBlockIndex, uint32_t pname, int *params);
281     void glGetActiveUniformBlockName(uint32_t program, uint32_t uniformBlockIndex, int bufSize, int *length,
282                                      char *uniformBlockName);
283     void glUniformBlockBinding(uint32_t program, uint32_t uniformBlockIndex, uint32_t uniformBlockBinding);
284     void glDrawArraysInstanced(uint32_t mode, int first, int count, int primcount);
285     void glDrawElementsInstanced(uint32_t mode, int count, uint32_t type, const void *indices, int primcount);
286     void *glFenceSync(uint32_t condition, uint32_t flags);
287     bool glIsSync(void *sync);
288     void glDeleteSync(void *sync);
289     uint32_t glClientWaitSync(void *sync, uint32_t flags, uint64_t timeout);
290     void glWaitSync(void *sync, uint32_t flags, uint64_t timeout);
291     void glGetInteger64v(uint32_t pname, int64_t *params);
292     void glGetSynciv(void *sync, uint32_t pname, int bufSize, int *length, int *values);
293     void glGetInteger64i_v(uint32_t target, uint32_t index, int64_t *data);
294     void glGetBufferParameteri64v(uint32_t target, uint32_t pname, int64_t *params);
295     void glGenSamplers(int count, uint32_t *samplers);
296     void glDeleteSamplers(int count, const uint32_t *samplers);
297     bool glIsSampler(uint32_t sampler);
298     void glBindSampler(uint32_t unit, uint32_t sampler);
299     void glSamplerParameteri(uint32_t sampler, uint32_t pname, int param);
300     void glSamplerParameteriv(uint32_t sampler, uint32_t pname, const int *param);
301     void glSamplerParameterf(uint32_t sampler, uint32_t pname, float param);
302     void glSamplerParameterfv(uint32_t sampler, uint32_t pname, const float *param);
303     void glGetSamplerParameteriv(uint32_t sampler, uint32_t pname, int *params);
304     void glGetSamplerParameterfv(uint32_t sampler, uint32_t pname, float *params);
305     void glVertexAttribDivisor(uint32_t index, uint32_t divisor);
306     void glBindTransformFeedback(uint32_t target, uint32_t id);
307     void glDeleteTransformFeedbacks(int n, const uint32_t *ids);
308     void glGenTransformFeedbacks(int n, uint32_t *ids);
309     bool glIsTransformFeedback(uint32_t id);
310     void glPauseTransformFeedback();
311     void glResumeTransformFeedback();
312     void glGetProgramBinary(uint32_t program, int bufSize, int *length, uint32_t *binaryFormat, void *binary);
313     void glProgramBinary(uint32_t program, uint32_t binaryFormat, const void *binary, int length);
314     void glProgramParameteri(uint32_t program, uint32_t pname, int value);
315     void glInvalidateFramebuffer(uint32_t target, int numAttachments, const uint32_t *attachments);
316     void glInvalidateSubFramebuffer(uint32_t target, int numAttachments, const uint32_t *attachments, int x, int y,
317                                     int width, int height);
318     void glTexStorage2D(uint32_t target, int levels, uint32_t internalformat, int width, int height);
319     void glTexStorage3D(uint32_t target, int levels, uint32_t internalformat, int width, int height, int depth);
320     void glGetInternalformativ(uint32_t target, uint32_t internalformat, uint32_t pname, int bufSize, int *params);
321 
322 private:
323     Context *m_curCtx;
324 };
325 
326 } // namespace sglr
327 
328 #endif // _SGLRCONTEXTWRAPPER_HPP
329