Merge "Merge "DEPTH_STENCIL_OES as tex format requires OES_depth_texture" into nougat...
[platform/upstream/VK-GL-CTS.git] / framework / opengl / simplereference / sglrGLContext.hpp
1 #ifndef _SGLRGLCONTEXT_HPP
2 #define _SGLRGLCONTEXT_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 GL Rendering Context.
24  *//*--------------------------------------------------------------------*/
25
26 #include "tcuDefs.hpp"
27 #include "sglrContext.hpp"
28 #include "tcuTestLog.hpp"
29 #include "tcuVector.hpp"
30 #include "gluRenderContext.hpp"
31 #include "gluShaderProgram.hpp"
32
33 #include <set>
34 #include <vector>
35
36 namespace glu
37 {
38 class CallLogWrapper;
39 }
40
41 namespace sglr
42 {
43
44 enum GLContextLogFlag
45 {
46         GLCONTEXT_LOG_CALLS             = (1 << 0),
47         GLCONTEXT_LOG_PROGRAMS  = (1 << 1)
48 };
49
50 class GLContext : public Context
51 {
52 public:
53                                                                                 GLContext                               (const glu::RenderContext& context, tcu::TestLog& log, deUint32 logFlags, const tcu::IVec4& baseViewport);
54         virtual                                                         ~GLContext                              (void);
55
56         void                                                            enableLogging                   (deUint32 logFlags);
57
58         virtual int                                                     getWidth                                (void) const;
59         virtual int                                                     getHeight                               (void) const;
60
61         virtual void                                            viewport                                (int x, int y, int width, int height);
62         virtual void                                            activeTexture                   (deUint32 texture);
63
64         virtual void                                            bindTexture                             (deUint32 target, deUint32 texture);
65         virtual void                                            genTextures                             (int numTextures, deUint32* textures);
66         virtual void                                            deleteTextures                  (int numTextures, const deUint32* textures);
67
68         virtual void                                            bindFramebuffer                 (deUint32 target, deUint32 framebuffer);
69         virtual void                                            genFramebuffers                 (int numFramebuffers, deUint32* framebuffers);
70         virtual void                                            deleteFramebuffers              (int numFramebuffers, const deUint32* framebuffers);
71
72         virtual void                                            bindRenderbuffer                (deUint32 target, deUint32 renderbuffer);
73         virtual void                                            genRenderbuffers                (int numRenderbuffers, deUint32* renderbuffers);
74         virtual void                                            deleteRenderbuffers             (int numRenderbuffers, const deUint32* renderbuffers);
75
76         virtual void                                            pixelStorei                             (deUint32 pname, int param);
77         virtual void                                            texImage1D                              (deUint32 target, int level, deUint32 internalFormat, int width, int border, deUint32 format, deUint32 type, const void* data);
78         virtual void                                            texImage2D                              (deUint32 target, int level, deUint32 internalFormat, int width, int height, int border, deUint32 format, deUint32 type, const void* data);
79         virtual void                                            texImage3D                              (deUint32 target, int level, deUint32 internalFormat, int width, int height, int depth, int border, deUint32 format, deUint32 type, const void* data);
80         virtual void                                            texSubImage1D                   (deUint32 target, int level, int xoffset, int width, deUint32 format, deUint32 type, const void* data);
81         virtual void                                            texSubImage2D                   (deUint32 target, int level, int xoffset, int yoffset, int width, int height, deUint32 format, deUint32 type, const void* data);
82         virtual void                                            texSubImage3D                   (deUint32 target, int level, int xoffset, int yoffset, int zoffset, int width, int height, int depth, deUint32 format, deUint32 type, const void* data);
83         virtual void                                            copyTexImage1D                  (deUint32 target, int level, deUint32 internalFormat, int x, int y, int width, int border);
84         virtual void                                            copyTexImage2D                  (deUint32 target, int level, deUint32 internalFormat, int x, int y, int width, int height, int border);
85         virtual void                                            copyTexSubImage1D               (deUint32 target, int level, int xoffset, int x, int y, int width);
86         virtual void                                            copyTexSubImage2D               (deUint32 target, int level, int xoffset, int yoffset, int x, int y, int width, int height);
87         virtual void                                            copyTexSubImage3D               (deUint32 target, int level, int xoffset, int yoffset, int zoffset, int x, int y, int width, int height);
88
89         virtual void                                            texStorage2D                    (deUint32 target, int levels, deUint32 internalFormat, int width, int height);
90         virtual void                                            texStorage3D                    (deUint32 target, int levels, deUint32 internalFormat, int width, int height, int depth);
91
92         virtual void                                            texParameteri                   (deUint32 target, deUint32 pname, int value);
93
94         virtual void                                            framebufferTexture2D    (deUint32 target, deUint32 attachment, deUint32 textarget, deUint32 texture, int level);
95         virtual void                                            framebufferTextureLayer (deUint32 target, deUint32 attachment, deUint32 texture, int level, int layer);
96         virtual void                                            framebufferRenderbuffer (deUint32 target, deUint32 attachment, deUint32 renderbuffertarget, deUint32 renderbuffer);
97         virtual deUint32                                        checkFramebufferStatus  (deUint32 target);
98
99         virtual void                                            getFramebufferAttachmentParameteriv     (deUint32 target, deUint32 attachment, deUint32 pname, int* params);
100
101         virtual void                                            renderbufferStorage                             (deUint32 target, deUint32 internalformat, int width, int height);
102         virtual void                                            renderbufferStorageMultisample  (deUint32 target, int samples, deUint32 internalFormat, int width, int height);
103
104         virtual void                                            bindBuffer                              (deUint32 target, deUint32 buffer);
105         virtual void                                            genBuffers                              (int numBuffers, deUint32* buffers);
106         virtual void                                            deleteBuffers                   (int numBuffers, const deUint32* buffers);
107
108         virtual void                                            bufferData                              (deUint32 target, deIntptr size, const void* data, deUint32 usage);
109         virtual void                                            bufferSubData                   (deUint32 target, deIntptr offset, deIntptr size, const void* data);
110
111         virtual void                                            clearColor                              (float red, float green, float blue, float alpha);
112         virtual void                                            clearDepthf                             (float depth);
113         virtual void                                            clearStencil                    (int stencil);
114
115         virtual void                                            clear                                   (deUint32 buffers);
116         virtual void                                            clearBufferiv                   (deUint32 buffer, int drawbuffer, const int* value);
117         virtual void                                            clearBufferfv                   (deUint32 buffer, int drawbuffer, const float* value);
118         virtual void                                            clearBufferuiv                  (deUint32 buffer, int drawbuffer, const deUint32* value);
119         virtual void                                            clearBufferfi                   (deUint32 buffer, int drawbuffer, float depth, int stencil);
120         virtual void                                            scissor                                 (int x, int y, int width, int height);
121
122         virtual void                                            enable                                  (deUint32 cap);
123         virtual void                                            disable                                 (deUint32 cap);
124
125         virtual void                                            stencilFunc                             (deUint32 func, int ref, deUint32 mask);
126         virtual void                                            stencilOp                               (deUint32 sfail, deUint32 dpfail, deUint32 dppass);
127         virtual void                                            stencilFuncSeparate             (deUint32 face, deUint32 func, int ref, deUint32 mask);
128         virtual void                                            stencilOpSeparate               (deUint32 face, deUint32 sfail, deUint32 dpfail, deUint32 dppass);
129
130         virtual void                                            depthFunc                               (deUint32 func);
131         virtual void                                            depthRangef                             (float n, float f);
132         virtual void                                            depthRange                              (double n, double f);
133
134         virtual void                                            polygonOffset                   (float factor, float units);
135         virtual void                                            provokingVertex                 (deUint32 convention);
136         virtual void                                            primitiveRestartIndex   (deUint32 index);
137
138         virtual void                                            blendEquation                   (deUint32 mode);
139         virtual void                                            blendEquationSeparate   (deUint32 modeRGB, deUint32 modeAlpha);
140         virtual void                                            blendFunc                               (deUint32 src, deUint32 dst);
141         virtual void                                            blendFuncSeparate               (deUint32 srcRGB, deUint32 dstRGB, deUint32 srcAlpha, deUint32 dstAlpha);
142         virtual void                                            blendColor                              (float red, float green, float blue, float alpha);
143
144         virtual void                                            colorMask                               (deBool r, deBool g, deBool b, deBool a);
145         virtual void                                            depthMask                               (deBool mask);
146         virtual void                                            stencilMask                             (deUint32 mask);
147         virtual void                                            stencilMaskSeparate             (deUint32 face, deUint32 mask);
148
149         virtual void                                            blitFramebuffer                 (int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, deUint32 mask, deUint32 filter);
150
151         virtual void                                            invalidateSubFramebuffer(deUint32 target, int numAttachments, const deUint32* attachments, int x, int y, int width, int height);
152         virtual void                                            invalidateFramebuffer   (deUint32 target, int numAttachments, const deUint32* attachments);
153
154         virtual void                                            bindVertexArray                 (deUint32 array);
155         virtual void                                            genVertexArrays                 (int numArrays, deUint32* vertexArrays);
156         virtual void                                            deleteVertexArrays              (int numArrays, const deUint32* vertexArrays);
157
158         virtual void                                            vertexAttribPointer             (deUint32 index, int size, deUint32 type, deBool normalized, int stride, const void *pointer);
159         virtual void                                            vertexAttribIPointer    (deUint32 index, int size, deUint32 type, int stride, const void *pointer);
160         virtual void                                            enableVertexAttribArray (deUint32 index);
161         virtual void                                            disableVertexAttribArray(deUint32 index);
162         virtual void                                            vertexAttribDivisor             (deUint32 index, deUint32 divisor);
163
164         virtual void                                            vertexAttrib1f                  (deUint32 index, float);
165         virtual void                                            vertexAttrib2f                  (deUint32 index, float, float);
166         virtual void                                            vertexAttrib3f                  (deUint32 index, float, float, float);
167         virtual void                                            vertexAttrib4f                  (deUint32 index, float, float, float, float);
168         virtual void                                            vertexAttribI4i                 (deUint32 index, deInt32, deInt32, deInt32, deInt32);
169         virtual void                                            vertexAttribI4ui                (deUint32 index, deUint32, deUint32, deUint32, deUint32);
170
171         virtual deInt32                                         getAttribLocation               (deUint32 program, const char *name);
172
173         virtual void                                            uniform1f                               (deInt32 location, float);
174         virtual void                                            uniform1i                               (deInt32 location, deInt32);
175         virtual void                                            uniform1fv                              (deInt32 index, deInt32 count, const float*);
176         virtual void                                            uniform2fv                              (deInt32 index, deInt32 count, const float*);
177         virtual void                                            uniform3fv                              (deInt32 index, deInt32 count, const float*);
178         virtual void                                            uniform4fv                              (deInt32 index, deInt32 count, const float*);
179         virtual void                                            uniform1iv                              (deInt32 index, deInt32 count, const deInt32*);
180         virtual void                                            uniform2iv                              (deInt32 index, deInt32 count, const deInt32*);
181         virtual void                                            uniform3iv                              (deInt32 index, deInt32 count, const deInt32*);
182         virtual void                                            uniform4iv                              (deInt32 index, deInt32 count, const deInt32*);
183         virtual void                                            uniformMatrix3fv                (deInt32 location, deInt32 count, deBool transpose, const float *value);
184         virtual void                                            uniformMatrix4fv                (deInt32 location, deInt32 count, deBool transpose, const float *value);
185         virtual deInt32                                         getUniformLocation              (deUint32 program, const char *name);
186
187         virtual void                                            lineWidth                               (float);
188
189         virtual void                                            drawArrays                              (deUint32 mode, int first, int count);
190         virtual void                                            drawArraysInstanced             (deUint32 mode, int first, int count, int instanceCount);
191         virtual void                                            drawElements                    (deUint32 mode, int count, deUint32 type, const void *indices);
192         virtual void                                            drawElementsInstanced   (deUint32 mode, int count, deUint32 type, const void *indices, int instanceCount);
193         virtual void                                            drawElementsBaseVertex  (deUint32 mode, int count, deUint32 type, const void *indices, int baseVertex);
194         virtual void                                            drawElementsInstancedBaseVertex (deUint32 mode, int count, deUint32 type, const void *indices, int instanceCount, int baseVertex);
195         virtual void                                            drawRangeElements               (deUint32 mode, deUint32 start, deUint32 end, int count, deUint32 type, const void *indices);
196         virtual void                                            drawRangeElementsBaseVertex     (deUint32 mode, deUint32 start, deUint32 end, int count, deUint32 type, const void *indices, int baseVertex);
197         virtual void                                            drawArraysIndirect              (deUint32 mode, const void *indirect);
198         virtual void                                            drawElementsIndirect    (deUint32 mode, deUint32 type, const void *indirect);
199
200         virtual void                                            multiDrawArrays                 (deUint32 mode, const int* first, const int* count, int primCount);
201         virtual void                                            multiDrawElements               (deUint32 mode, const int* count, deUint32 type, const void** indices, int primCount);
202         virtual void                                            multiDrawElementsBaseVertex (deUint32 mode, const int* count, deUint32 type, const void** indices, int primCount, const int* baseVertex);
203
204         virtual deUint32                                        createProgram                   (ShaderProgram*);
205         virtual void                                            deleteProgram                   (deUint32 program);
206         virtual void                                            useProgram                              (deUint32 program);
207
208         virtual void                                            readPixels                              (int x, int y, int width, int height, deUint32 format, deUint32 type, void* data);
209         virtual deUint32                                        getError                                (void);
210         virtual void                                            finish                                  (void);
211
212         virtual void                                            getIntegerv                             (deUint32 pname, int* params);
213         virtual const char*                                     getString                               (deUint32 pname);
214
215         // Expose helpers from Context.
216         using Context::readPixels;
217         using Context::texImage2D;
218         using Context::texSubImage2D;
219
220 private:
221                                                                                 GLContext                               (const GLContext& other);
222         GLContext&                                                      operator=                               (const GLContext& other);
223
224         tcu::IVec2                                                      getReadOffset                   (void) const;
225         tcu::IVec2                                                      getDrawOffset                   (void) const;
226
227         const glu::RenderContext&                       m_context;
228         tcu::TestLog&                                           m_log;
229
230         deUint32                                                        m_logFlags;
231         tcu::IVec4                                                      m_baseViewport;
232         tcu::IVec4                                                      m_curViewport;
233         tcu::IVec4                                                      m_curScissor;
234         deUint32                                                        m_readFramebufferBinding;
235         deUint32                                                        m_drawFramebufferBinding;
236
237         glu::CallLogWrapper*                            m_wrapper;
238
239         // For cleanup
240         std::set<deUint32>                                      m_allocatedTextures;
241         std::set<deUint32>                                      m_allocatedFbos;
242         std::set<deUint32>                                      m_allocatedRbos;
243         std::set<deUint32>                                      m_allocatedBuffers;
244         std::set<deUint32>                                      m_allocatedVaos;
245         std::vector<glu::ShaderProgram*>        m_programs;
246 } DE_WARN_UNUSED_TYPE;
247
248 } // sglr
249
250 #endif // _SGLRGLCONTEXT_HPP