xref: /aosp_15_r20/external/deqp/external/openglcts/modules/gl/gl4cCopyImageTests.hpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
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