Add RENDERBUFFER_VALID bit to R8, RG8 definition am: 1d7c8df82e
[platform/upstream/VK-GL-CTS.git] / external / openglcts / modules / gl / gl4cGetTextureSubImageTests.hpp
1 #ifndef _GL4CGETTEXTURESUBIMAGETESTS_HPP
2 #define _GL4CGETTEXTURESUBIMAGETESTS_HPP
3 /*-------------------------------------------------------------------------
4  * OpenGL Conformance Test Suite
5  * -----------------------------
6  *
7  * Copyright (c) 2015-2016 The Khronos Group Inc.
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
24  */ /*-------------------------------------------------------------------*/
25
26 /**
27  */ /*!
28  * \file  gl4cGetTextureSubImageTests.hpp
29  * \brief Get Texture Sub Image Tests Suite Interface
30  */ /*-------------------------------------------------------------------*/
31
32 /* Includes. */
33
34 #include "glcTestCase.hpp"
35 #include "glwDefs.hpp"
36 #include "tcuDefs.hpp"
37
38 #include "glwEnums.hpp"
39 #include "glwFunctions.hpp"
40
41 /* Interface. */
42
43 namespace gl4cts
44 {
45 namespace GetTextureSubImage
46 {
47 /** Tests group for GetTextureSubImage tests.
48  *
49  *  Following tests will be run:
50  *  -   Errors Test
51  *  -   Functional Test
52  */
53 class Tests : public deqp::TestCaseGroup
54 {
55 public:
56         Tests(deqp::Context& context);
57         ~Tests(void);
58         virtual void init(void);
59
60 private:
61         /* Private member functions. */
62         Tests(const Tests& other);
63         Tests& operator=(const Tests& other);
64 };
65 /* Tests class. */
66
67 /** Error Generation Tests
68  *
69  *  The Errors test verifies that functions glGetTextureSubImage and
70  *  glGetCompressedTextureSubImage generate proper error values if used
71  *  improperly. For reference see OpenGL 4.5 Core Specification chapter
72  *  8.11.4.
73
74  *  *   Check that GL_INVALID_VALUE error is generated by
75  *      glGetTextureSubImage if texture is not the name of an existing
76  *      texture object.
77  *
78  *  *   Check that GL_INVALID_VALUE error is generated by
79  *      glGetCompressedTextureSubImage if texture is not the name
80  *      of an existingtexture object.
81  *
82  *  *   Check that GL_INVALID_OPERATION error is generated if texture is the
83  *      name of a buffer or multisample texture.
84  *
85  *  *   Check that GL_INVALID_VALUE is generated if xoffset, yoffset or
86  *      zoffset are negative.
87  *
88  *  *   Check that GL_INVALID_VALUE is generated if xoffset + width is
89  *      greater than the texture's width, yoffset + height is greater than
90  *      the texture's height, or zoffset + depth is greater than the
91  *      texture's depth.
92  *
93  *  *   Check that GL_INVALID_VALUE error is generated if the effective
94  *      target is GL_TEXTURE_1D and either yoffset is not zero, or height
95  *      is not one.
96  *
97  *  *   Check that GL_INVALID_VALUE error is generated if the effective
98  *      target is GL_TEXTURE_1D, GL_TEXTURE_1D_ARRAY, GL_TEXTURE_2D or
99  *      GL_TEXTURE_RECTANGLE and either zoffset is not zero, or depth
100  *      is not one.
101  *
102  *  *   Check that GL_INVALID_OPERATION error is generated if the buffer
103  *      size required to store the requested data is greater than bufSize.
104  */
105 class Errors : public deqp::TestCase
106 {
107 public:
108         Errors(deqp::Context& context);
109         ~Errors(void);
110         IterateResult iterate(void);
111
112 private:
113         /* Private member variables. */
114         deqp::Context& m_context;
115         glw::GLuint     m_texture_1D;
116         glw::GLuint     m_texture_1D_array;
117         glw::GLuint     m_texture_2D;
118         glw::GLuint     m_texture_rectangle;
119         glw::GLuint     m_texture_2D_compressed;
120         glw::GLuint     m_texture_2D_multisampled;
121         glw::GLubyte*  m_destination_buffer;
122
123         /* Get(Compressed)TextureSubImage function pointer and type declarations. */
124         typedef void(GLW_APIENTRY* PFNGLGETTEXTURESUBIMAGEPROC)(glw::GLuint texture, glw::GLint level, glw::GLint xoffset,
125                                                                                                                         glw::GLint yoffset, glw::GLint zoffset, glw::GLsizei width,
126                                                                                                                         glw::GLsizei height, glw::GLsizei depth, glw::GLenum format,
127                                                                                                                         glw::GLenum type, glw::GLsizei bufSize, void* pixels);
128
129         typedef void(GLW_APIENTRY* PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC)(glw::GLuint texture, glw::GLint level,
130                                                                                                                                           glw::GLint xoffset, glw::GLint yoffset,
131                                                                                                                                           glw::GLint zoffset, glw::GLsizei width,
132                                                                                                                                           glw::GLsizei height, glw::GLsizei depth,
133                                                                                                                                           glw::GLsizei bufSize, void* pixels);
134
135         PFNGLGETTEXTURESUBIMAGEPROC                       m_gl_GetTextureSubImage;
136         PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC m_gl_GetCompressedTextureSubImage;
137
138         /* Private member functions. */
139         void prepare();
140
141         bool testExistingTextureObjectError();
142
143         bool testBufferOrMultisampledTargetError();
144
145         bool testNegativeOffsetError();
146
147         bool testBoundsError();
148
149         bool testOneDimmensionalTextureErrors();
150
151         bool testTwoDimmensionalTextureErrors();
152
153         bool testBufferSizeError();
154
155         void clean();
156
157         /* Private static constants. */
158         static const glw::GLubyte s_texture_data[];
159         static const glw::GLuint  s_texture_data_size;
160         static const glw::GLuint  s_texture_data_width;
161         static const glw::GLuint  s_texture_data_height;
162
163         static const glw::GLubyte s_texture_data_compressed[];
164         static const glw::GLuint  s_texture_data_compressed_size;
165         static const glw::GLuint  s_texture_data_compressed_width;
166         static const glw::GLuint  s_texture_data_compressed_height;
167
168         static const glw::GLuint s_destination_buffer_size;
169 };
170 /* Errors class. */
171
172 /** Functional
173  *
174  *  The Functional test verifies that functions glGetTextureSubImage and
175  *  glGetCompressedTextureSubImage works properly. The whole test shall be
176  *  constructed as follows:
177  *
178  *      for each tested function
179  *          for each supported texture target
180  *              prepare and upload texture
181  *              download texture using the function
182  *              compare uploaded texture with downloaded texture
183  *              clean up
184  *
185  *  where:
186  *  *   tested functions are:
187  *      - GetTextureSubImage,
188  *      - GetCompressedTextureSubImage;
189  *  *   supported uncompressed texture targets are:
190  *      - GL_TEXTURE_1D,
191  *      - GL_TEXTURE_1D_ARRAY,
192  *      - GL_TEXTURE_2D,
193  *      - GL_TEXTURE_2D_ARRAY,
194  *      - GL_TEXTURE_3D,
195  *      - GL_TEXTURE_CUBE_MAP,
196  *      - GL_TEXTURE_CUBE_MAP_ARRAY,
197  *      - GL_TEXTURE_RECTANGLE;
198  *  *   supported compressed texture targets are:
199  *      - GL_TEXTURE_2D,
200  *      - GL_TEXTURE_2D_ARRAY,
201  *      - GL_TEXTURE_CUBE_MAP,
202  *      - GL_TEXTURE_CUBE_MAP_ARRAY;
203  *  *   texture internal format shall be GL_RGBA8 and
204  *      GL_COMPRESSED_RGB8_ETC2;
205  *  *   use linear dimmension of texture equal to 8;
206  *  *   use offset of 4 (if dimmension is available);
207  *  *   use width/height/depth of 4 (if dimmension is available).
208  */
209 class Functional : public deqp::TestCase
210 {
211 public:
212         Functional(deqp::Context& context);
213         ~Functional(void);
214         IterateResult iterate(void);
215
216 private:
217         /* Private member variables. */
218         deqp::Context& m_context;
219         glw::GLuint     m_texture;
220
221         /* Private member functions. */
222         void prepare(glw::GLenum target, bool is_compressed);
223         bool check(glw::GLenum target, bool is_compressed);
224         void clean();
225
226         /* Get(Compressed)TextureSubImage function pointer and type declarations. */
227         typedef void(GLW_APIENTRY* PFNGLGETTEXTURESUBIMAGEPROC)(glw::GLuint texture, glw::GLint level, glw::GLint xoffset,
228                                                                                                                         glw::GLint yoffset, glw::GLint zoffset, glw::GLsizei width,
229                                                                                                                         glw::GLsizei height, glw::GLsizei depth, glw::GLenum format,
230                                                                                                                         glw::GLenum type, glw::GLsizei bufSize, void* pixels);
231
232         typedef void(GLW_APIENTRY* PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC)(glw::GLuint texture, glw::GLint level,
233                                                                                                                                           glw::GLint xoffset, glw::GLint yoffset,
234                                                                                                                                           glw::GLint zoffset, glw::GLsizei width,
235                                                                                                                                           glw::GLsizei height, glw::GLsizei depth,
236                                                                                                                                           glw::GLsizei bufSize, void* pixels);
237
238         PFNGLGETTEXTURESUBIMAGEPROC                       m_gl_GetTextureSubImage;
239         PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC m_gl_GetCompressedTextureSubImage;
240
241         /* Static constants. */
242         static const glw::GLubyte s_texture_data[];
243         static const glw::GLsizei s_texture_data_size;
244         static const glw::GLsizei s_texture_data_width;
245         static const glw::GLsizei s_texture_data_height;
246         static const glw::GLsizei s_texture_data_depth;
247
248         static const glw::GLubyte s_texture_data_compressed[];
249         static const glw::GLsizei s_texture_data_compressed_size;
250 };
251
252 /* Functional class */
253 } /* namespace GetTextureSubImage */
254 } /* namespace gl4cts */
255
256 #endif // _GL4CGETTEXTURESUBIMAGETESTS_HPP