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