1*35238bceSAndroid Build Coastguard Worker #ifndef _GL4CCOPYIMAGETESTS_HPP 2*35238bceSAndroid Build Coastguard Worker #define _GL4CCOPYIMAGETESTS_HPP 3*35238bceSAndroid Build Coastguard Worker /*------------------------------------------------------------------------- 4*35238bceSAndroid Build Coastguard Worker * OpenGL Conformance Test Suite 5*35238bceSAndroid Build Coastguard Worker * ----------------------------- 6*35238bceSAndroid Build Coastguard Worker * 7*35238bceSAndroid Build Coastguard Worker * Copyright (c) 2015-2016 The Khronos Group Inc. 8*35238bceSAndroid Build Coastguard Worker * 9*35238bceSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 10*35238bceSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 11*35238bceSAndroid Build Coastguard Worker * You may obtain a copy of the License at 12*35238bceSAndroid Build Coastguard Worker * 13*35238bceSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 14*35238bceSAndroid Build Coastguard Worker * 15*35238bceSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 16*35238bceSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 17*35238bceSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18*35238bceSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 19*35238bceSAndroid Build Coastguard Worker * limitations under the License. 20*35238bceSAndroid Build Coastguard Worker * 21*35238bceSAndroid Build Coastguard Worker */ /*! 22*35238bceSAndroid Build Coastguard Worker * \file gl4cCopyImageTests.hpp 23*35238bceSAndroid Build Coastguard Worker * \brief CopyImageSubData functional tests. 24*35238bceSAndroid Build Coastguard Worker */ /*-------------------------------------------------------------------*/ 25*35238bceSAndroid Build Coastguard Worker 26*35238bceSAndroid Build Coastguard Worker #include "glcTestCase.hpp" 27*35238bceSAndroid Build Coastguard Worker #include "glwDefs.hpp" 28*35238bceSAndroid Build Coastguard Worker 29*35238bceSAndroid Build Coastguard Worker namespace gl4cts 30*35238bceSAndroid Build Coastguard Worker { 31*35238bceSAndroid Build Coastguard Worker namespace CopyImage 32*35238bceSAndroid Build Coastguard Worker { 33*35238bceSAndroid Build Coastguard Worker /** Implements functional test. Description follows: 34*35238bceSAndroid Build Coastguard Worker * 35*35238bceSAndroid Build Coastguard Worker * This test verifies that CopyImageSubData function works as expected. 36*35238bceSAndroid Build Coastguard Worker * 37*35238bceSAndroid Build Coastguard Worker * Steps: 38*35238bceSAndroid Build Coastguard Worker * - create source and destination image objects; 39*35238bceSAndroid Build Coastguard Worker * - fill both image objects with different content, also each pixel should 40*35238bceSAndroid Build Coastguard Worker * be unique; 41*35238bceSAndroid Build Coastguard Worker * - execute CopyImageSubData on both image objects, to copy region from 42*35238bceSAndroid Build Coastguard Worker * source image to a region in destination image; 43*35238bceSAndroid Build Coastguard Worker * - inspect content of both image objects; 44*35238bceSAndroid Build Coastguard Worker * 45*35238bceSAndroid Build Coastguard Worker * Test pass if: 46*35238bceSAndroid Build Coastguard Worker * - no part of destination image, that is outside of destination region, 47*35238bceSAndroid Build Coastguard Worker * was modified, 48*35238bceSAndroid Build Coastguard Worker * - destination region contains data from source region, 49*35238bceSAndroid Build Coastguard Worker * - source image contents were not modified. 50*35238bceSAndroid Build Coastguard Worker * 51*35238bceSAndroid Build Coastguard Worker * Use TexImage* routines to create textures. It is required that textures are 52*35238bceSAndroid Build Coastguard Worker * complete, therefore TEXTURE_BASE_LEVEL and TEXTURE_MAX_LEVEL have to be 53*35238bceSAndroid Build Coastguard Worker * updated with TexParameter manually. 54*35238bceSAndroid Build Coastguard Worker * 55*35238bceSAndroid Build Coastguard Worker * Use draw operation to update contents of Renderbuffers. 56*35238bceSAndroid Build Coastguard Worker * 57*35238bceSAndroid Build Coastguard Worker * Tested image dimensions should be NxM where N and M are <7:15>. 58*35238bceSAndroid Build Coastguard Worker * 59*35238bceSAndroid Build Coastguard Worker * Multi-layered targets should have twelve slices. 60*35238bceSAndroid Build Coastguard Worker * 61*35238bceSAndroid Build Coastguard Worker * Test with the following mipmap levels: 62*35238bceSAndroid Build Coastguard Worker * - 0, 63*35238bceSAndroid Build Coastguard Worker * - 1, 64*35238bceSAndroid Build Coastguard Worker * - 2. 65*35238bceSAndroid Build Coastguard Worker * 66*35238bceSAndroid Build Coastguard Worker * Test with the following region locations: 67*35238bceSAndroid Build Coastguard Worker * - all four corners, 68*35238bceSAndroid Build Coastguard Worker * - all four edge centres, 69*35238bceSAndroid Build Coastguard Worker * - image centre, 70*35238bceSAndroid Build Coastguard Worker * - whole image. 71*35238bceSAndroid Build Coastguard Worker * 72*35238bceSAndroid Build Coastguard Worker * Tested region dimensions should be NxN where N is <1:7>. Depth should be 73*35238bceSAndroid Build Coastguard Worker * selected so as to affect all image slices. In cases when one image has 74*35238bceSAndroid Build Coastguard Worker * single layer and second is multi-layered, than copy operation and inspection 75*35238bceSAndroid Build Coastguard Worker * must be repeated for each layer. 76*35238bceSAndroid Build Coastguard Worker * 77*35238bceSAndroid Build Coastguard Worker * This test should iterate over: 78*35238bceSAndroid Build Coastguard Worker * - all valid internal format combinations, 79*35238bceSAndroid Build Coastguard Worker * - all valid object target combinations, 80*35238bceSAndroid Build Coastguard Worker * - all mipmap level combinations, 81*35238bceSAndroid Build Coastguard Worker * - all image dimensions combinations, 82*35238bceSAndroid Build Coastguard Worker * - all valid copied regions combinations, 83*35238bceSAndroid Build Coastguard Worker * - all valid copied region dimensions combinations. 84*35238bceSAndroid Build Coastguard Worker * 85*35238bceSAndroid Build Coastguard Worker * Moreover this test should also execute CopyImageSubData to copy image to 86*35238bceSAndroid Build Coastguard Worker * itself. In this case it expected that source image will be modified. 87*35238bceSAndroid Build Coastguard Worker * 88*35238bceSAndroid Build Coastguard Worker * 89*35238bceSAndroid Build Coastguard Worker * Implementation notes 90*35238bceSAndroid Build Coastguard Worker * There are some configuration preprocessor flags available in cpp file. 91*35238bceSAndroid Build Coastguard Worker **/ 92*35238bceSAndroid Build Coastguard Worker class FunctionalTest : public deqp::TestCase 93*35238bceSAndroid Build Coastguard Worker { 94*35238bceSAndroid Build Coastguard Worker public: 95*35238bceSAndroid Build Coastguard Worker FunctionalTest(deqp::Context &context); ~FunctionalTest()96*35238bceSAndroid Build Coastguard Worker virtual ~FunctionalTest() 97*35238bceSAndroid Build Coastguard Worker { 98*35238bceSAndroid Build Coastguard Worker } 99*35238bceSAndroid Build Coastguard Worker 100*35238bceSAndroid Build Coastguard Worker /* Implementation of tcu::TestNode methods */ 101*35238bceSAndroid Build Coastguard Worker virtual IterateResult iterate(void); 102*35238bceSAndroid Build Coastguard Worker 103*35238bceSAndroid Build Coastguard Worker private: 104*35238bceSAndroid Build Coastguard Worker /* Private types */ 105*35238bceSAndroid Build Coastguard Worker struct targetDesc 106*35238bceSAndroid Build Coastguard Worker { 107*35238bceSAndroid Build Coastguard Worker glw::GLenum m_target; 108*35238bceSAndroid Build Coastguard Worker glw::GLuint m_width; 109*35238bceSAndroid Build Coastguard Worker glw::GLuint m_height; 110*35238bceSAndroid Build Coastguard Worker glw::GLuint m_level; 111*35238bceSAndroid Build Coastguard Worker glw::GLenum m_internal_format; 112*35238bceSAndroid Build Coastguard Worker glw::GLenum m_format; 113*35238bceSAndroid Build Coastguard Worker glw::GLenum m_type; 114*35238bceSAndroid Build Coastguard Worker }; 115*35238bceSAndroid Build Coastguard Worker 116*35238bceSAndroid Build Coastguard Worker struct testCase 117*35238bceSAndroid Build Coastguard Worker { 118*35238bceSAndroid Build Coastguard Worker targetDesc m_dst; 119*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_x; 120*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_y; 121*35238bceSAndroid Build Coastguard Worker targetDesc m_src; 122*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_x; 123*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_y; 124*35238bceSAndroid Build Coastguard Worker glw::GLuint m_width; 125*35238bceSAndroid Build Coastguard Worker glw::GLuint m_height; 126*35238bceSAndroid Build Coastguard Worker }; 127*35238bceSAndroid Build Coastguard Worker 128*35238bceSAndroid Build Coastguard Worker /* Private methods */ 129*35238bceSAndroid Build Coastguard Worker void calculateDimmensions(glw::GLenum target, glw::GLuint level, glw::GLuint width, glw::GLuint height, 130*35238bceSAndroid Build Coastguard Worker glw::GLuint *out_widths, glw::GLuint *out_heights, glw::GLuint *out_depths) const; 131*35238bceSAndroid Build Coastguard Worker 132*35238bceSAndroid Build Coastguard Worker void clean(); 133*35238bceSAndroid Build Coastguard Worker void cleanPixels(glw::GLubyte **pixels) const; 134*35238bceSAndroid Build Coastguard Worker 135*35238bceSAndroid Build Coastguard Worker bool compareImages(const targetDesc &left_desc, const glw::GLubyte *left_data, glw::GLuint left_x, 136*35238bceSAndroid Build Coastguard Worker glw::GLuint left_y, glw::GLuint left_layer, glw::GLuint left_level, const targetDesc &right_desc, 137*35238bceSAndroid Build Coastguard Worker const glw::GLubyte *right_data, glw::GLuint right_x, glw::GLuint right_y, 138*35238bceSAndroid Build Coastguard Worker glw::GLuint right_layer, glw::GLuint right_level, glw::GLuint region_width, 139*35238bceSAndroid Build Coastguard Worker glw::GLuint region_height) const; 140*35238bceSAndroid Build Coastguard Worker 141*35238bceSAndroid Build Coastguard Worker bool copyAndVerify(const testCase &test_case, const glw::GLubyte **dst_pixels, const glw::GLubyte **src_pixels); 142*35238bceSAndroid Build Coastguard Worker 143*35238bceSAndroid Build Coastguard Worker void getCleanRegions(const testCase &test_case, glw::GLuint dst_level, glw::GLuint out_corners[4][4], 144*35238bceSAndroid Build Coastguard Worker glw::GLuint &out_n_corners) const; 145*35238bceSAndroid Build Coastguard Worker 146*35238bceSAndroid Build Coastguard Worker void getPixels(glw::GLuint name, const targetDesc &desc, glw::GLuint level, glw::GLubyte *out_pixels) const; 147*35238bceSAndroid Build Coastguard Worker 148*35238bceSAndroid Build Coastguard Worker void prepareDstPxls(const targetDesc &desc, glw::GLubyte **out_pixels) const; 149*35238bceSAndroid Build Coastguard Worker 150*35238bceSAndroid Build Coastguard Worker void prepareSrcPxls(const targetDesc &desc, glw::GLenum dst_internal_format, glw::GLubyte **out_pixels) const; 151*35238bceSAndroid Build Coastguard Worker 152*35238bceSAndroid Build Coastguard Worker void prepareTestCases(glw::GLenum dst_internal_format, glw::GLenum dst_target, glw::GLenum src_internal_format, 153*35238bceSAndroid Build Coastguard Worker glw::GLenum src_target); 154*35238bceSAndroid Build Coastguard Worker 155*35238bceSAndroid Build Coastguard Worker glw::GLuint prepareTexture(const targetDesc &desc, const glw::GLubyte **pixels, glw::GLuint &out_buf_id); 156*35238bceSAndroid Build Coastguard Worker 157*35238bceSAndroid Build Coastguard Worker bool verify(const testCase &test_case, glw::GLuint dst_layer, const glw::GLubyte **dst_pixels, 158*35238bceSAndroid Build Coastguard Worker glw::GLuint src_layer, const glw::GLubyte **src_pixels, glw::GLuint depth); 159*35238bceSAndroid Build Coastguard Worker 160*35238bceSAndroid Build Coastguard Worker /* Private fields */ 161*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_buf_name; 162*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_tex_name; 163*35238bceSAndroid Build Coastguard Worker glw::GLuint m_rb_name; 164*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_buf_name; 165*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_tex_name; 166*35238bceSAndroid Build Coastguard Worker glw::GLuint m_test_case_index; 167*35238bceSAndroid Build Coastguard Worker std::vector<testCase> m_test_cases; 168*35238bceSAndroid Build Coastguard Worker }; 169*35238bceSAndroid Build Coastguard Worker 170*35238bceSAndroid Build Coastguard Worker /** Implements functional test. Description follows: 171*35238bceSAndroid Build Coastguard Worker * 172*35238bceSAndroid Build Coastguard Worker * Smoke test: 173*35238bceSAndroid Build Coastguard Worker * Tests if function CopyImageSubData accepts and works correctly with: 174*35238bceSAndroid Build Coastguard Worker * - all internal formats, 175*35238bceSAndroid Build Coastguard Worker * - all valid targets. 176*35238bceSAndroid Build Coastguard Worker * Point of the test is to check each internal format and target separately. 177*35238bceSAndroid Build Coastguard Worker * 178*35238bceSAndroid Build Coastguard Worker * Steps: 179*35238bceSAndroid Build Coastguard Worker * - create source and destination image objects using same format and 180*35238bceSAndroid Build Coastguard Worker * target for both; 181*35238bceSAndroid Build Coastguard Worker * - fill 0 level mipmap of both image objects with different content, also 182*35238bceSAndroid Build Coastguard Worker * each pixel should be unique; 183*35238bceSAndroid Build Coastguard Worker * - make both image objects complete; 184*35238bceSAndroid Build Coastguard Worker * - execute CopyImageSubData on both image objects, to copy contents from 185*35238bceSAndroid Build Coastguard Worker * source image to a destination image; 186*35238bceSAndroid Build Coastguard Worker * - inspect content of both image objects; 187*35238bceSAndroid Build Coastguard Worker * 188*35238bceSAndroid Build Coastguard Worker * Test pass if: 189*35238bceSAndroid Build Coastguard Worker * - destination image contains data from source image, 190*35238bceSAndroid Build Coastguard Worker * - source image contents were not modified. 191*35238bceSAndroid Build Coastguard Worker * 192*35238bceSAndroid Build Coastguard Worker * Repeat steps for all internal formats, using TEXTURE_2D target. 193*35238bceSAndroid Build Coastguard Worker * 194*35238bceSAndroid Build Coastguard Worker * Repeat steps for all valid targets, using RGBA32UI internal format. 195*35238bceSAndroid Build Coastguard Worker **/ 196*35238bceSAndroid Build Coastguard Worker class SmokeTest : public deqp::TestCase 197*35238bceSAndroid Build Coastguard Worker { 198*35238bceSAndroid Build Coastguard Worker public: 199*35238bceSAndroid Build Coastguard Worker SmokeTest(deqp::Context &context); ~SmokeTest()200*35238bceSAndroid Build Coastguard Worker virtual ~SmokeTest() 201*35238bceSAndroid Build Coastguard Worker { 202*35238bceSAndroid Build Coastguard Worker } 203*35238bceSAndroid Build Coastguard Worker 204*35238bceSAndroid Build Coastguard Worker /* Implementation of tcu::TestNode methods */ 205*35238bceSAndroid Build Coastguard Worker virtual IterateResult iterate(void); 206*35238bceSAndroid Build Coastguard Worker 207*35238bceSAndroid Build Coastguard Worker private: 208*35238bceSAndroid Build Coastguard Worker /* Private types */ 209*35238bceSAndroid Build Coastguard Worker struct testCase 210*35238bceSAndroid Build Coastguard Worker { 211*35238bceSAndroid Build Coastguard Worker glw::GLenum m_target; 212*35238bceSAndroid Build Coastguard Worker glw::GLenum m_internal_format; 213*35238bceSAndroid Build Coastguard Worker glw::GLenum m_format; 214*35238bceSAndroid Build Coastguard Worker glw::GLenum m_type; 215*35238bceSAndroid Build Coastguard Worker }; 216*35238bceSAndroid Build Coastguard Worker 217*35238bceSAndroid Build Coastguard Worker /* Private methods */ 218*35238bceSAndroid Build Coastguard Worker void clean(); 219*35238bceSAndroid Build Coastguard Worker void cleanPixels(glw::GLubyte *&pixels) const; 220*35238bceSAndroid Build Coastguard Worker 221*35238bceSAndroid Build Coastguard Worker bool compareImages(const testCase &test_case, const glw::GLubyte *left_data, const glw::GLubyte *right_data) const; 222*35238bceSAndroid Build Coastguard Worker 223*35238bceSAndroid Build Coastguard Worker bool copyAndVerify(const testCase &test_case, const glw::GLubyte *src_pixels); 224*35238bceSAndroid Build Coastguard Worker 225*35238bceSAndroid Build Coastguard Worker void getPixels(glw::GLuint name, const testCase &test_case, glw::GLubyte *out_pixels) const; 226*35238bceSAndroid Build Coastguard Worker 227*35238bceSAndroid Build Coastguard Worker void prepareDstPxls(const testCase &test_case, glw::GLubyte *&out_pixels) const; 228*35238bceSAndroid Build Coastguard Worker 229*35238bceSAndroid Build Coastguard Worker void prepareSrcPxls(const testCase &test_case, glw::GLubyte *&out_pixels) const; 230*35238bceSAndroid Build Coastguard Worker 231*35238bceSAndroid Build Coastguard Worker glw::GLuint prepareTexture(const testCase &test_case, const glw::GLubyte *pixels, glw::GLuint &out_buf_id); 232*35238bceSAndroid Build Coastguard Worker 233*35238bceSAndroid Build Coastguard Worker bool verify(const testCase &test_case, const glw::GLubyte *src_pixels); 234*35238bceSAndroid Build Coastguard Worker 235*35238bceSAndroid Build Coastguard Worker /* Private fields */ 236*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_buf_name; 237*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_tex_name; 238*35238bceSAndroid Build Coastguard Worker glw::GLuint m_rb_name; 239*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_buf_name; 240*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_tex_name; 241*35238bceSAndroid Build Coastguard Worker glw::GLuint m_test_case_index; 242*35238bceSAndroid Build Coastguard Worker std::vector<testCase> m_test_cases; 243*35238bceSAndroid Build Coastguard Worker 244*35238bceSAndroid Build Coastguard Worker /* Constants */ 245*35238bceSAndroid Build Coastguard Worker static const glw::GLuint m_width; 246*35238bceSAndroid Build Coastguard Worker static const glw::GLuint m_height; 247*35238bceSAndroid Build Coastguard Worker static const glw::GLuint m_depth; 248*35238bceSAndroid Build Coastguard Worker }; 249*35238bceSAndroid Build Coastguard Worker 250*35238bceSAndroid Build Coastguard Worker /** Implements negative test A. Description follows: 251*35238bceSAndroid Build Coastguard Worker * 252*35238bceSAndroid Build Coastguard Worker * [A] 253*35238bceSAndroid Build Coastguard Worker * * Verify that GL_INVALID_ENUM error is generated if either <srcTarget> or 254*35238bceSAndroid Build Coastguard Worker * <dstTarget> is set to any of the proxy texture targets, GL_TEXTURE_BUFFER 255*35238bceSAndroid Build Coastguard Worker * or one of the cube-map face selectors. 256*35238bceSAndroid Build Coastguard Worker **/ 257*35238bceSAndroid Build Coastguard Worker class InvalidTargetTest : public deqp::TestCase 258*35238bceSAndroid Build Coastguard Worker { 259*35238bceSAndroid Build Coastguard Worker public: 260*35238bceSAndroid Build Coastguard Worker InvalidTargetTest(deqp::Context &context); ~InvalidTargetTest()261*35238bceSAndroid Build Coastguard Worker virtual ~InvalidTargetTest() 262*35238bceSAndroid Build Coastguard Worker { 263*35238bceSAndroid Build Coastguard Worker } 264*35238bceSAndroid Build Coastguard Worker 265*35238bceSAndroid Build Coastguard Worker /* Implementation of tcu::TestNode methods */ 266*35238bceSAndroid Build Coastguard Worker virtual IterateResult iterate(void); 267*35238bceSAndroid Build Coastguard Worker 268*35238bceSAndroid Build Coastguard Worker private: 269*35238bceSAndroid Build Coastguard Worker /* Private types */ 270*35238bceSAndroid Build Coastguard Worker struct testCase 271*35238bceSAndroid Build Coastguard Worker { 272*35238bceSAndroid Build Coastguard Worker glw::GLenum m_src_target; 273*35238bceSAndroid Build Coastguard Worker glw::GLenum m_dst_target; 274*35238bceSAndroid Build Coastguard Worker glw::GLenum m_expected_result; 275*35238bceSAndroid Build Coastguard Worker }; 276*35238bceSAndroid Build Coastguard Worker 277*35238bceSAndroid Build Coastguard Worker /* Private methods */ 278*35238bceSAndroid Build Coastguard Worker void clean(); 279*35238bceSAndroid Build Coastguard Worker 280*35238bceSAndroid Build Coastguard Worker /* Private fields */ 281*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_buf_name; 282*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_tex_name; 283*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_buf_name; 284*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_tex_name; 285*35238bceSAndroid Build Coastguard Worker glw::GLuint m_test_case_index; 286*35238bceSAndroid Build Coastguard Worker std::vector<testCase> m_test_cases; 287*35238bceSAndroid Build Coastguard Worker }; 288*35238bceSAndroid Build Coastguard Worker 289*35238bceSAndroid Build Coastguard Worker /** Implements negative test B. Description follows: 290*35238bceSAndroid Build Coastguard Worker * 291*35238bceSAndroid Build Coastguard Worker * [B] 292*35238bceSAndroid Build Coastguard Worker * * Verify that usage of a non-matching target for either the source or 293*35238bceSAndroid Build Coastguard Worker * destination objects results in a GL_INVALID_ENUM error. 294*35238bceSAndroid Build Coastguard Worker **/ 295*35238bceSAndroid Build Coastguard Worker class TargetMismatchTest : public deqp::TestCase 296*35238bceSAndroid Build Coastguard Worker { 297*35238bceSAndroid Build Coastguard Worker public: 298*35238bceSAndroid Build Coastguard Worker TargetMismatchTest(deqp::Context &context); ~TargetMismatchTest()299*35238bceSAndroid Build Coastguard Worker virtual ~TargetMismatchTest() 300*35238bceSAndroid Build Coastguard Worker { 301*35238bceSAndroid Build Coastguard Worker } 302*35238bceSAndroid Build Coastguard Worker 303*35238bceSAndroid Build Coastguard Worker /* Implementation of tcu::TestNode methods */ 304*35238bceSAndroid Build Coastguard Worker virtual IterateResult iterate(void); 305*35238bceSAndroid Build Coastguard Worker 306*35238bceSAndroid Build Coastguard Worker private: 307*35238bceSAndroid Build Coastguard Worker /* Private types */ 308*35238bceSAndroid Build Coastguard Worker struct testCase 309*35238bceSAndroid Build Coastguard Worker { 310*35238bceSAndroid Build Coastguard Worker glw::GLenum m_tex_target; 311*35238bceSAndroid Build Coastguard Worker glw::GLenum m_src_target; 312*35238bceSAndroid Build Coastguard Worker glw::GLenum m_dst_target; 313*35238bceSAndroid Build Coastguard Worker glw::GLenum m_expected_result; 314*35238bceSAndroid Build Coastguard Worker }; 315*35238bceSAndroid Build Coastguard Worker 316*35238bceSAndroid Build Coastguard Worker /* Private methods */ 317*35238bceSAndroid Build Coastguard Worker void clean(); 318*35238bceSAndroid Build Coastguard Worker 319*35238bceSAndroid Build Coastguard Worker /* Private fields */ 320*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_buf_name; 321*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_tex_name; 322*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_buf_name; 323*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_tex_name; 324*35238bceSAndroid Build Coastguard Worker glw::GLuint m_test_case_index; 325*35238bceSAndroid Build Coastguard Worker std::vector<testCase> m_test_cases; 326*35238bceSAndroid Build Coastguard Worker }; 327*35238bceSAndroid Build Coastguard Worker 328*35238bceSAndroid Build Coastguard Worker /** Implements negative test C. Description follows: 329*35238bceSAndroid Build Coastguard Worker * 330*35238bceSAndroid Build Coastguard Worker * [C] 331*35238bceSAndroid Build Coastguard Worker * * Verify that INVALID_OPERATION is generated when the texture provided 332*35238bceSAndroid Build Coastguard Worker * to CopyImageSubData is incomplete 333*35238bceSAndroid Build Coastguard Worker **/ 334*35238bceSAndroid Build Coastguard Worker class IncompleteTexTest : public deqp::TestCase 335*35238bceSAndroid Build Coastguard Worker { 336*35238bceSAndroid Build Coastguard Worker public: 337*35238bceSAndroid Build Coastguard Worker IncompleteTexTest(deqp::Context &context); ~IncompleteTexTest()338*35238bceSAndroid Build Coastguard Worker virtual ~IncompleteTexTest() 339*35238bceSAndroid Build Coastguard Worker { 340*35238bceSAndroid Build Coastguard Worker } 341*35238bceSAndroid Build Coastguard Worker 342*35238bceSAndroid Build Coastguard Worker /* Implementation of tcu::TestNode methods */ 343*35238bceSAndroid Build Coastguard Worker virtual IterateResult iterate(void); 344*35238bceSAndroid Build Coastguard Worker 345*35238bceSAndroid Build Coastguard Worker private: 346*35238bceSAndroid Build Coastguard Worker /* Private types */ 347*35238bceSAndroid Build Coastguard Worker struct testCase 348*35238bceSAndroid Build Coastguard Worker { 349*35238bceSAndroid Build Coastguard Worker glw::GLenum m_tex_target; 350*35238bceSAndroid Build Coastguard Worker bool m_is_dst_complete; 351*35238bceSAndroid Build Coastguard Worker bool m_is_src_complete; 352*35238bceSAndroid Build Coastguard Worker glw::GLenum m_expected_result; 353*35238bceSAndroid Build Coastguard Worker }; 354*35238bceSAndroid Build Coastguard Worker 355*35238bceSAndroid Build Coastguard Worker /* Private methods */ 356*35238bceSAndroid Build Coastguard Worker void clean(); 357*35238bceSAndroid Build Coastguard Worker 358*35238bceSAndroid Build Coastguard Worker /* Private fields */ 359*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_buf_name; 360*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_tex_name; 361*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_buf_name; 362*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_tex_name; 363*35238bceSAndroid Build Coastguard Worker glw::GLuint m_test_case_index; 364*35238bceSAndroid Build Coastguard Worker std::vector<testCase> m_test_cases; 365*35238bceSAndroid Build Coastguard Worker }; 366*35238bceSAndroid Build Coastguard Worker 367*35238bceSAndroid Build Coastguard Worker /** Implements negative test D. Description follows: 368*35238bceSAndroid Build Coastguard Worker * 369*35238bceSAndroid Build Coastguard Worker * [D] 370*35238bceSAndroid Build Coastguard Worker * * Verify that usage of source/destination objects, internal formats of which 371*35238bceSAndroid Build Coastguard Worker * are not compatible, results in GL_INVALID_OPERATION error. 372*35238bceSAndroid Build Coastguard Worker **/ 373*35238bceSAndroid Build Coastguard Worker class IncompatibleFormatsTest : public deqp::TestCase 374*35238bceSAndroid Build Coastguard Worker { 375*35238bceSAndroid Build Coastguard Worker public: 376*35238bceSAndroid Build Coastguard Worker IncompatibleFormatsTest(deqp::Context &context); ~IncompatibleFormatsTest()377*35238bceSAndroid Build Coastguard Worker virtual ~IncompatibleFormatsTest() 378*35238bceSAndroid Build Coastguard Worker { 379*35238bceSAndroid Build Coastguard Worker } 380*35238bceSAndroid Build Coastguard Worker 381*35238bceSAndroid Build Coastguard Worker /* Implementation of tcu::TestNode methods */ 382*35238bceSAndroid Build Coastguard Worker virtual IterateResult iterate(void); 383*35238bceSAndroid Build Coastguard Worker 384*35238bceSAndroid Build Coastguard Worker private: 385*35238bceSAndroid Build Coastguard Worker /* Private types */ 386*35238bceSAndroid Build Coastguard Worker struct testCase 387*35238bceSAndroid Build Coastguard Worker { 388*35238bceSAndroid Build Coastguard Worker glw::GLenum m_tex_target; 389*35238bceSAndroid Build Coastguard Worker glw::GLenum m_dst_internal_format; 390*35238bceSAndroid Build Coastguard Worker glw::GLenum m_dst_format; 391*35238bceSAndroid Build Coastguard Worker glw::GLenum m_dst_type; 392*35238bceSAndroid Build Coastguard Worker glw::GLenum m_src_internal_format; 393*35238bceSAndroid Build Coastguard Worker glw::GLenum m_src_format; 394*35238bceSAndroid Build Coastguard Worker glw::GLenum m_src_type; 395*35238bceSAndroid Build Coastguard Worker glw::GLenum m_expected_result; 396*35238bceSAndroid Build Coastguard Worker }; 397*35238bceSAndroid Build Coastguard Worker 398*35238bceSAndroid Build Coastguard Worker /* Private methods */ 399*35238bceSAndroid Build Coastguard Worker void clean(); 400*35238bceSAndroid Build Coastguard Worker 401*35238bceSAndroid Build Coastguard Worker /* Private fields */ 402*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_buf_name; 403*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_tex_name; 404*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_buf_name; 405*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_tex_name; 406*35238bceSAndroid Build Coastguard Worker glw::GLuint m_test_case_index; 407*35238bceSAndroid Build Coastguard Worker std::vector<testCase> m_test_cases; 408*35238bceSAndroid Build Coastguard Worker }; 409*35238bceSAndroid Build Coastguard Worker 410*35238bceSAndroid Build Coastguard Worker /** Implements negative test E. Description follows: 411*35238bceSAndroid Build Coastguard Worker * 412*35238bceSAndroid Build Coastguard Worker * [E] 413*35238bceSAndroid Build Coastguard Worker * * Verify that usage of source/destination objects, internal formats of which 414*35238bceSAndroid Build Coastguard Worker * do not match in terms of number of samples they can hold, results in 415*35238bceSAndroid Build Coastguard Worker * GL_INVALID_OPERATION error. 416*35238bceSAndroid Build Coastguard Worker **/ 417*35238bceSAndroid Build Coastguard Worker class SamplesMismatchTest : public deqp::TestCase 418*35238bceSAndroid Build Coastguard Worker { 419*35238bceSAndroid Build Coastguard Worker public: 420*35238bceSAndroid Build Coastguard Worker SamplesMismatchTest(deqp::Context &context); ~SamplesMismatchTest()421*35238bceSAndroid Build Coastguard Worker virtual ~SamplesMismatchTest() 422*35238bceSAndroid Build Coastguard Worker { 423*35238bceSAndroid Build Coastguard Worker } 424*35238bceSAndroid Build Coastguard Worker 425*35238bceSAndroid Build Coastguard Worker /* Implementation of tcu::TestNode methods */ 426*35238bceSAndroid Build Coastguard Worker virtual IterateResult iterate(void); 427*35238bceSAndroid Build Coastguard Worker 428*35238bceSAndroid Build Coastguard Worker private: 429*35238bceSAndroid Build Coastguard Worker /* Private types */ 430*35238bceSAndroid Build Coastguard Worker struct testCase 431*35238bceSAndroid Build Coastguard Worker { 432*35238bceSAndroid Build Coastguard Worker glw::GLenum m_src_target; 433*35238bceSAndroid Build Coastguard Worker glw::GLsizei m_src_n_samples; 434*35238bceSAndroid Build Coastguard Worker glw::GLenum m_dst_target; 435*35238bceSAndroid Build Coastguard Worker glw::GLsizei m_dst_n_samples; 436*35238bceSAndroid Build Coastguard Worker glw::GLenum m_expected_result; 437*35238bceSAndroid Build Coastguard Worker }; 438*35238bceSAndroid Build Coastguard Worker 439*35238bceSAndroid Build Coastguard Worker /* Private methods */ 440*35238bceSAndroid Build Coastguard Worker void clean(); 441*35238bceSAndroid Build Coastguard Worker 442*35238bceSAndroid Build Coastguard Worker /* Private fields */ 443*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_tex_name; 444*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_tex_name; 445*35238bceSAndroid Build Coastguard Worker glw::GLuint m_test_case_index; 446*35238bceSAndroid Build Coastguard Worker std::vector<testCase> m_test_cases; 447*35238bceSAndroid Build Coastguard Worker }; 448*35238bceSAndroid Build Coastguard Worker 449*35238bceSAndroid Build Coastguard Worker /** Implements negative test F. Description follows: 450*35238bceSAndroid Build Coastguard Worker * 451*35238bceSAndroid Build Coastguard Worker * [F] 452*35238bceSAndroid Build Coastguard Worker * * Verify that usage of a pair of objects, one of which is defined by 453*35238bceSAndroid Build Coastguard Worker * compressed data and the other one has a non-compressed representation, 454*35238bceSAndroid Build Coastguard Worker * results in a GL_INVALID_OPERATION error, if the block size of compressed 455*35238bceSAndroid Build Coastguard Worker * image is not equal to the texel size of the compressed image. 456*35238bceSAndroid Build Coastguard Worker **/ 457*35238bceSAndroid Build Coastguard Worker class IncompatibleFormatsCompressionTest : public deqp::TestCase 458*35238bceSAndroid Build Coastguard Worker { 459*35238bceSAndroid Build Coastguard Worker public: 460*35238bceSAndroid Build Coastguard Worker IncompatibleFormatsCompressionTest(deqp::Context &context); ~IncompatibleFormatsCompressionTest()461*35238bceSAndroid Build Coastguard Worker virtual ~IncompatibleFormatsCompressionTest() 462*35238bceSAndroid Build Coastguard Worker { 463*35238bceSAndroid Build Coastguard Worker } 464*35238bceSAndroid Build Coastguard Worker 465*35238bceSAndroid Build Coastguard Worker /* Implementation of tcu::TestNode methods */ 466*35238bceSAndroid Build Coastguard Worker virtual IterateResult iterate(void); 467*35238bceSAndroid Build Coastguard Worker 468*35238bceSAndroid Build Coastguard Worker private: 469*35238bceSAndroid Build Coastguard Worker /* Private types */ 470*35238bceSAndroid Build Coastguard Worker struct testCase 471*35238bceSAndroid Build Coastguard Worker { 472*35238bceSAndroid Build Coastguard Worker glw::GLenum m_tex_target; 473*35238bceSAndroid Build Coastguard Worker glw::GLenum m_dst_internal_format; 474*35238bceSAndroid Build Coastguard Worker glw::GLenum m_dst_format; 475*35238bceSAndroid Build Coastguard Worker glw::GLenum m_dst_type; 476*35238bceSAndroid Build Coastguard Worker glw::GLenum m_src_internal_format; 477*35238bceSAndroid Build Coastguard Worker glw::GLenum m_src_format; 478*35238bceSAndroid Build Coastguard Worker glw::GLenum m_src_type; 479*35238bceSAndroid Build Coastguard Worker glw::GLenum m_expected_result; 480*35238bceSAndroid Build Coastguard Worker }; 481*35238bceSAndroid Build Coastguard Worker 482*35238bceSAndroid Build Coastguard Worker /* Private methods */ 483*35238bceSAndroid Build Coastguard Worker void clean(); 484*35238bceSAndroid Build Coastguard Worker 485*35238bceSAndroid Build Coastguard Worker /* Private fields */ 486*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_tex_name; 487*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_tex_name; 488*35238bceSAndroid Build Coastguard Worker glw::GLuint m_test_case_index; 489*35238bceSAndroid Build Coastguard Worker std::vector<testCase> m_test_cases; 490*35238bceSAndroid Build Coastguard Worker }; 491*35238bceSAndroid Build Coastguard Worker 492*35238bceSAndroid Build Coastguard Worker /** Implements negative test G. Description follows: 493*35238bceSAndroid Build Coastguard Worker * 494*35238bceSAndroid Build Coastguard Worker * [G] 495*35238bceSAndroid Build Coastguard Worker * * Verify that usage of an invalid <srcTarget> or <dstTarget> argument 496*35238bceSAndroid Build Coastguard Worker * generates GL_INVALID_VALUE error. For the purpose of the test, make sure 497*35238bceSAndroid Build Coastguard Worker * to iterate over the set of all objects that can be used as source or 498*35238bceSAndroid Build Coastguard Worker * destination objects. 499*35238bceSAndroid Build Coastguard Worker **/ 500*35238bceSAndroid Build Coastguard Worker class InvalidObjectTest : public deqp::TestCase 501*35238bceSAndroid Build Coastguard Worker { 502*35238bceSAndroid Build Coastguard Worker public: 503*35238bceSAndroid Build Coastguard Worker InvalidObjectTest(deqp::Context &context); ~InvalidObjectTest()504*35238bceSAndroid Build Coastguard Worker virtual ~InvalidObjectTest() 505*35238bceSAndroid Build Coastguard Worker { 506*35238bceSAndroid Build Coastguard Worker } 507*35238bceSAndroid Build Coastguard Worker 508*35238bceSAndroid Build Coastguard Worker /* Implementation of tcu::TestNode methods */ 509*35238bceSAndroid Build Coastguard Worker virtual IterateResult iterate(void); 510*35238bceSAndroid Build Coastguard Worker 511*35238bceSAndroid Build Coastguard Worker private: 512*35238bceSAndroid Build Coastguard Worker /* Private types */ 513*35238bceSAndroid Build Coastguard Worker struct testCase 514*35238bceSAndroid Build Coastguard Worker { 515*35238bceSAndroid Build Coastguard Worker glw::GLenum m_dst_target; 516*35238bceSAndroid Build Coastguard Worker bool m_dst_valid; 517*35238bceSAndroid Build Coastguard Worker glw::GLenum m_src_target; 518*35238bceSAndroid Build Coastguard Worker bool m_src_valid; 519*35238bceSAndroid Build Coastguard Worker glw::GLenum m_expected_result; 520*35238bceSAndroid Build Coastguard Worker }; 521*35238bceSAndroid Build Coastguard Worker 522*35238bceSAndroid Build Coastguard Worker /* Private methods */ 523*35238bceSAndroid Build Coastguard Worker void clean(); 524*35238bceSAndroid Build Coastguard Worker 525*35238bceSAndroid Build Coastguard Worker /* Private fields */ 526*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_name; 527*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_name; 528*35238bceSAndroid Build Coastguard Worker glw::GLuint m_test_case_index; 529*35238bceSAndroid Build Coastguard Worker std::vector<testCase> m_test_cases; 530*35238bceSAndroid Build Coastguard Worker }; 531*35238bceSAndroid Build Coastguard Worker 532*35238bceSAndroid Build Coastguard Worker /** Implements negative test H. Description follows: 533*35238bceSAndroid Build Coastguard Worker * 534*35238bceSAndroid Build Coastguard Worker * [H] 535*35238bceSAndroid Build Coastguard Worker * * Make sure that GL_INVALID_VALUE error is generated if <level> argument 536*35238bceSAndroid Build Coastguard Worker * refers to a non-existent mip-map level for either the source or the 537*35238bceSAndroid Build Coastguard Worker * destination object. In particular, make sure that using any value other 538*35238bceSAndroid Build Coastguard Worker * than 0 for render-buffers is considered an erroneous action. 539*35238bceSAndroid Build Coastguard Worker **/ 540*35238bceSAndroid Build Coastguard Worker class NonExistentMipMapTest : public deqp::TestCase 541*35238bceSAndroid Build Coastguard Worker { 542*35238bceSAndroid Build Coastguard Worker public: 543*35238bceSAndroid Build Coastguard Worker NonExistentMipMapTest(deqp::Context &context); ~NonExistentMipMapTest()544*35238bceSAndroid Build Coastguard Worker virtual ~NonExistentMipMapTest() 545*35238bceSAndroid Build Coastguard Worker { 546*35238bceSAndroid Build Coastguard Worker } 547*35238bceSAndroid Build Coastguard Worker 548*35238bceSAndroid Build Coastguard Worker /* Implementation of tcu::TestNode methods */ 549*35238bceSAndroid Build Coastguard Worker virtual IterateResult iterate(void); 550*35238bceSAndroid Build Coastguard Worker 551*35238bceSAndroid Build Coastguard Worker private: 552*35238bceSAndroid Build Coastguard Worker /* Private types */ 553*35238bceSAndroid Build Coastguard Worker struct testCase 554*35238bceSAndroid Build Coastguard Worker { 555*35238bceSAndroid Build Coastguard Worker glw::GLenum m_tex_target; 556*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_level; 557*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_level; 558*35238bceSAndroid Build Coastguard Worker glw::GLenum m_expected_result; 559*35238bceSAndroid Build Coastguard Worker }; 560*35238bceSAndroid Build Coastguard Worker 561*35238bceSAndroid Build Coastguard Worker /* Private methods */ 562*35238bceSAndroid Build Coastguard Worker void clean(); 563*35238bceSAndroid Build Coastguard Worker 564*35238bceSAndroid Build Coastguard Worker /* Private fields */ 565*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_tex_name; 566*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_tex_name; 567*35238bceSAndroid Build Coastguard Worker glw::GLuint m_test_case_index; 568*35238bceSAndroid Build Coastguard Worker std::vector<testCase> m_test_cases; 569*35238bceSAndroid Build Coastguard Worker }; 570*35238bceSAndroid Build Coastguard Worker 571*35238bceSAndroid Build Coastguard Worker /** Implements negative test I. Description follows: 572*35238bceSAndroid Build Coastguard Worker * 573*35238bceSAndroid Build Coastguard Worker * [I] 574*35238bceSAndroid Build Coastguard Worker * * Make sure that using source/destination subregions that exceed the 575*35238bceSAndroid Build Coastguard Worker * boundaries of the relevant object generates a GL_INVALID_VALUE error. 576*35238bceSAndroid Build Coastguard Worker **/ 577*35238bceSAndroid Build Coastguard Worker class ExceedingBoundariesTest : public deqp::TestCase 578*35238bceSAndroid Build Coastguard Worker { 579*35238bceSAndroid Build Coastguard Worker public: 580*35238bceSAndroid Build Coastguard Worker ExceedingBoundariesTest(deqp::Context &context); ~ExceedingBoundariesTest()581*35238bceSAndroid Build Coastguard Worker virtual ~ExceedingBoundariesTest() 582*35238bceSAndroid Build Coastguard Worker { 583*35238bceSAndroid Build Coastguard Worker } 584*35238bceSAndroid Build Coastguard Worker 585*35238bceSAndroid Build Coastguard Worker /* Implementation of tcu::TestNode methods */ 586*35238bceSAndroid Build Coastguard Worker virtual IterateResult iterate(void); 587*35238bceSAndroid Build Coastguard Worker 588*35238bceSAndroid Build Coastguard Worker private: 589*35238bceSAndroid Build Coastguard Worker /* Private types */ 590*35238bceSAndroid Build Coastguard Worker struct testCase 591*35238bceSAndroid Build Coastguard Worker { 592*35238bceSAndroid Build Coastguard Worker glw::GLenum m_tex_target; 593*35238bceSAndroid Build Coastguard Worker glw::GLuint m_depth; 594*35238bceSAndroid Build Coastguard Worker glw::GLuint m_height; 595*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_x; 596*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_y; 597*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_z; 598*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_x; 599*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_y; 600*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_z; 601*35238bceSAndroid Build Coastguard Worker glw::GLenum m_expected_result; 602*35238bceSAndroid Build Coastguard Worker }; 603*35238bceSAndroid Build Coastguard Worker 604*35238bceSAndroid Build Coastguard Worker /* Private methods */ 605*35238bceSAndroid Build Coastguard Worker void clean(); 606*35238bceSAndroid Build Coastguard Worker 607*35238bceSAndroid Build Coastguard Worker /* Private fields */ 608*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_tex_name; 609*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_tex_name; 610*35238bceSAndroid Build Coastguard Worker glw::GLuint m_test_case_index; 611*35238bceSAndroid Build Coastguard Worker std::vector<testCase> m_test_cases; 612*35238bceSAndroid Build Coastguard Worker 613*35238bceSAndroid Build Coastguard Worker /* Private constants */ 614*35238bceSAndroid Build Coastguard Worker static const glw::GLuint m_region_depth; 615*35238bceSAndroid Build Coastguard Worker static const glw::GLuint m_region_height; 616*35238bceSAndroid Build Coastguard Worker static const glw::GLuint m_region_width; 617*35238bceSAndroid Build Coastguard Worker }; 618*35238bceSAndroid Build Coastguard Worker 619*35238bceSAndroid Build Coastguard Worker /** Implements negative test J. Description follows: 620*35238bceSAndroid Build Coastguard Worker * 621*35238bceSAndroid Build Coastguard Worker * [J] 622*35238bceSAndroid Build Coastguard Worker * * Assume the source and/or the destination object(s) use(s) a compressed 623*35238bceSAndroid Build Coastguard Worker * internal format. Make sure that copy operations requested to operate on 624*35238bceSAndroid Build Coastguard Worker * subregions that do not meet the alignment constraints of the internal 625*35238bceSAndroid Build Coastguard Worker * format in question, generate GL_INVALID_VALUE error. 626*35238bceSAndroid Build Coastguard Worker **/ 627*35238bceSAndroid Build Coastguard Worker class InvalidAlignmentTest : public deqp::TestCase 628*35238bceSAndroid Build Coastguard Worker { 629*35238bceSAndroid Build Coastguard Worker public: 630*35238bceSAndroid Build Coastguard Worker InvalidAlignmentTest(deqp::Context &context); ~InvalidAlignmentTest()631*35238bceSAndroid Build Coastguard Worker virtual ~InvalidAlignmentTest() 632*35238bceSAndroid Build Coastguard Worker { 633*35238bceSAndroid Build Coastguard Worker } 634*35238bceSAndroid Build Coastguard Worker 635*35238bceSAndroid Build Coastguard Worker /* Implementation of tcu::TestNode methods */ 636*35238bceSAndroid Build Coastguard Worker virtual IterateResult iterate(void); 637*35238bceSAndroid Build Coastguard Worker 638*35238bceSAndroid Build Coastguard Worker private: 639*35238bceSAndroid Build Coastguard Worker /* Private types */ 640*35238bceSAndroid Build Coastguard Worker struct testCase 641*35238bceSAndroid Build Coastguard Worker { 642*35238bceSAndroid Build Coastguard Worker glw::GLuint m_height; 643*35238bceSAndroid Build Coastguard Worker glw::GLuint m_width; 644*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_x; 645*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_y; 646*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_x; 647*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_y; 648*35238bceSAndroid Build Coastguard Worker glw::GLenum m_expected_result; 649*35238bceSAndroid Build Coastguard Worker }; 650*35238bceSAndroid Build Coastguard Worker 651*35238bceSAndroid Build Coastguard Worker /* Private methods */ 652*35238bceSAndroid Build Coastguard Worker void clean(); 653*35238bceSAndroid Build Coastguard Worker 654*35238bceSAndroid Build Coastguard Worker /* Private fields */ 655*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_tex_name; 656*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_tex_name; 657*35238bceSAndroid Build Coastguard Worker glw::GLuint m_test_case_index; 658*35238bceSAndroid Build Coastguard Worker std::vector<testCase> m_test_cases; 659*35238bceSAndroid Build Coastguard Worker }; 660*35238bceSAndroid Build Coastguard Worker 661*35238bceSAndroid Build Coastguard Worker /** Implements functional test. Description follows: 662*35238bceSAndroid Build Coastguard Worker * 663*35238bceSAndroid Build Coastguard Worker * [B] 664*35238bceSAndroid Build Coastguard Worker * 1. Create a single level integer texture, with BASE_LEVEL and MAX_LEVEL set to 0. 665*35238bceSAndroid Build Coastguard Worker * 2. Leave the mipmap filters at the default of GL_NEAREST_MIPMAP_LINEAR and GL_LINEAR. 666*35238bceSAndroid Build Coastguard Worker * 3. Do glCopyImageSubData to or from that texture. 667*35238bceSAndroid Build Coastguard Worker * 4. Make sure it succeeds and does not raise GL_INVALID_OPERATION. 668*35238bceSAndroid Build Coastguard Worker **/ 669*35238bceSAndroid Build Coastguard Worker class IntegerTexTest : public deqp::TestCase 670*35238bceSAndroid Build Coastguard Worker { 671*35238bceSAndroid Build Coastguard Worker public: 672*35238bceSAndroid Build Coastguard Worker IntegerTexTest(deqp::Context &context); ~IntegerTexTest()673*35238bceSAndroid Build Coastguard Worker virtual ~IntegerTexTest() 674*35238bceSAndroid Build Coastguard Worker { 675*35238bceSAndroid Build Coastguard Worker } 676*35238bceSAndroid Build Coastguard Worker 677*35238bceSAndroid Build Coastguard Worker /* Implementation of tcu::TestNode methods */ 678*35238bceSAndroid Build Coastguard Worker virtual IterateResult iterate(void); 679*35238bceSAndroid Build Coastguard Worker 680*35238bceSAndroid Build Coastguard Worker private: 681*35238bceSAndroid Build Coastguard Worker /* Private types */ 682*35238bceSAndroid Build Coastguard Worker struct testCase 683*35238bceSAndroid Build Coastguard Worker { 684*35238bceSAndroid Build Coastguard Worker glw::GLint m_internal_format; 685*35238bceSAndroid Build Coastguard Worker glw::GLuint m_type; 686*35238bceSAndroid Build Coastguard Worker }; 687*35238bceSAndroid Build Coastguard Worker 688*35238bceSAndroid Build Coastguard Worker /* Private methods */ 689*35238bceSAndroid Build Coastguard Worker unsigned int createTexture(int width, int height, glw::GLint internalFormat, glw::GLuint type, const void *data, 690*35238bceSAndroid Build Coastguard Worker int minFilter, int magFilter); 691*35238bceSAndroid Build Coastguard Worker void clean(); 692*35238bceSAndroid Build Coastguard Worker 693*35238bceSAndroid Build Coastguard Worker /* Private fields */ 694*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_buf_name; 695*35238bceSAndroid Build Coastguard Worker glw::GLuint m_dst_tex_name; 696*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_buf_name; 697*35238bceSAndroid Build Coastguard Worker glw::GLuint m_src_tex_name; 698*35238bceSAndroid Build Coastguard Worker glw::GLuint m_test_case_index; 699*35238bceSAndroid Build Coastguard Worker }; 700*35238bceSAndroid Build Coastguard Worker } // namespace CopyImage 701*35238bceSAndroid Build Coastguard Worker 702*35238bceSAndroid Build Coastguard Worker class CopyImageTests : public deqp::TestCaseGroup 703*35238bceSAndroid Build Coastguard Worker { 704*35238bceSAndroid Build Coastguard Worker public: 705*35238bceSAndroid Build Coastguard Worker CopyImageTests(deqp::Context &context); 706*35238bceSAndroid Build Coastguard Worker ~CopyImageTests(void); 707*35238bceSAndroid Build Coastguard Worker 708*35238bceSAndroid Build Coastguard Worker virtual void init(void); 709*35238bceSAndroid Build Coastguard Worker 710*35238bceSAndroid Build Coastguard Worker private: 711*35238bceSAndroid Build Coastguard Worker CopyImageTests(const CopyImageTests &other); 712*35238bceSAndroid Build Coastguard Worker CopyImageTests &operator=(const CopyImageTests &other); 713*35238bceSAndroid Build Coastguard Worker }; 714*35238bceSAndroid Build Coastguard Worker } /* namespace gl4cts */ 715*35238bceSAndroid Build Coastguard Worker 716*35238bceSAndroid Build Coastguard Worker #endif // _GL4CCOPYIMAGETESTS_HPP 717