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 257