xref: /aosp_15_r20/external/deqp/external/openglcts/modules/gl/gl4cDirectStateAccessTests.hpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker #ifndef _GL4CDIRECTSTATEACCESSTESTS_HPP
2*35238bceSAndroid Build Coastguard Worker #define _GL4CDIRECTSTATEACCESSTESTS_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-2020 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
23*35238bceSAndroid Build Coastguard Worker  * \brief
24*35238bceSAndroid Build Coastguard Worker  */ /*-------------------------------------------------------------------*/
25*35238bceSAndroid Build Coastguard Worker 
26*35238bceSAndroid Build Coastguard Worker /**
27*35238bceSAndroid Build Coastguard Worker  */ /*!
28*35238bceSAndroid Build Coastguard Worker  * \file  gl4cDirectStateAccessTests.hpp
29*35238bceSAndroid Build Coastguard Worker  * \brief Conformance tests for the Direct State Access feature functionality.
30*35238bceSAndroid Build Coastguard Worker  */ /*-----------------------------------------------------------------------------*/
31*35238bceSAndroid Build Coastguard Worker 
32*35238bceSAndroid Build Coastguard Worker /* Includes. */
33*35238bceSAndroid Build Coastguard Worker 
34*35238bceSAndroid Build Coastguard Worker #include "glcTestCase.hpp"
35*35238bceSAndroid Build Coastguard Worker #include "glwDefs.hpp"
36*35238bceSAndroid Build Coastguard Worker #include "tcuDefs.hpp"
37*35238bceSAndroid Build Coastguard Worker 
38*35238bceSAndroid Build Coastguard Worker #include <string>
39*35238bceSAndroid Build Coastguard Worker #include <typeinfo>
40*35238bceSAndroid Build Coastguard Worker 
41*35238bceSAndroid Build Coastguard Worker namespace gl4cts
42*35238bceSAndroid Build Coastguard Worker {
43*35238bceSAndroid Build Coastguard Worker namespace DirectStateAccess
44*35238bceSAndroid Build Coastguard Worker {
45*35238bceSAndroid Build Coastguard Worker /** @class Tests
46*35238bceSAndroid Build Coastguard Worker  *
47*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access test group.
48*35238bceSAndroid Build Coastguard Worker  */
49*35238bceSAndroid Build Coastguard Worker class Tests : public deqp::TestCaseGroup
50*35238bceSAndroid Build Coastguard Worker {
51*35238bceSAndroid Build Coastguard Worker public:
52*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
53*35238bceSAndroid Build Coastguard Worker     Tests(deqp::Context &context);
54*35238bceSAndroid Build Coastguard Worker 
55*35238bceSAndroid Build Coastguard Worker     void init();
56*35238bceSAndroid Build Coastguard Worker 
57*35238bceSAndroid Build Coastguard Worker private:
58*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
59*35238bceSAndroid Build Coastguard Worker     Tests(const Tests &other);
60*35238bceSAndroid Build Coastguard Worker     Tests &operator=(const Tests &other);
61*35238bceSAndroid Build Coastguard Worker };
62*35238bceSAndroid Build Coastguard Worker /* Tests class */
63*35238bceSAndroid Build Coastguard Worker 
64*35238bceSAndroid Build Coastguard Worker /* Direct State Access Feature Interfaces */
65*35238bceSAndroid Build Coastguard Worker 
66*35238bceSAndroid Build Coastguard Worker /* Direct State Access Transform Feedback Tests */
67*35238bceSAndroid Build Coastguard Worker namespace TransformFeedback
68*35238bceSAndroid Build Coastguard Worker {
69*35238bceSAndroid Build Coastguard Worker /** @class CreationTest
70*35238bceSAndroid Build Coastguard Worker  *
71*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Transform Feedback Creation test cases.
72*35238bceSAndroid Build Coastguard Worker  *
73*35238bceSAndroid Build Coastguard Worker  *  Test follows the steps:
74*35238bceSAndroid Build Coastguard Worker  *
75*35238bceSAndroid Build Coastguard Worker  *      Create at least two transform feedback objects names with
76*35238bceSAndroid Build Coastguard Worker  *      GenTransformFeedbacks function. Check them without binding, using
77*35238bceSAndroid Build Coastguard Worker  *      IsTransformFeedback function. Expect GL_FALSE.
78*35238bceSAndroid Build Coastguard Worker  *
79*35238bceSAndroid Build Coastguard Worker  *      Create at least two transform feedback objects with
80*35238bceSAndroid Build Coastguard Worker  *      CreateTransformFeedbacks function. Check them without binding, using
81*35238bceSAndroid Build Coastguard Worker  *      IsTransformFeedback function. Expect GL_TRUE.
82*35238bceSAndroid Build Coastguard Worker  *
83*35238bceSAndroid Build Coastguard Worker  *      Check that transform feedback binding point is unchanged.
84*35238bceSAndroid Build Coastguard Worker  */
85*35238bceSAndroid Build Coastguard Worker class CreationTest : public deqp::TestCase
86*35238bceSAndroid Build Coastguard Worker {
87*35238bceSAndroid Build Coastguard Worker public:
88*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
89*35238bceSAndroid Build Coastguard Worker     CreationTest(deqp::Context &context);
90*35238bceSAndroid Build Coastguard Worker 
91*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
92*35238bceSAndroid Build Coastguard Worker 
93*35238bceSAndroid Build Coastguard Worker private:
94*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
95*35238bceSAndroid Build Coastguard Worker     CreationTest(const CreationTest &other);
96*35238bceSAndroid Build Coastguard Worker     CreationTest &operator=(const CreationTest &other);
97*35238bceSAndroid Build Coastguard Worker };
98*35238bceSAndroid Build Coastguard Worker /* CreationTest class */
99*35238bceSAndroid Build Coastguard Worker 
100*35238bceSAndroid Build Coastguard Worker /** @class DefaultsTest
101*35238bceSAndroid Build Coastguard Worker  *
102*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Transform Feedback Default State test cases.
103*35238bceSAndroid Build Coastguard Worker  *
104*35238bceSAndroid Build Coastguard Worker  *  Test follows the steps:
105*35238bceSAndroid Build Coastguard Worker  *
106*35238bceSAndroid Build Coastguard Worker  *       Create transform feedback object with CreateTransformFeedbacks function.
107*35238bceSAndroid Build Coastguard Worker  *
108*35238bceSAndroid Build Coastguard Worker  *      Query parameters TRANSFORM_FEEDBACK_BUFFER_BINDING using
109*35238bceSAndroid Build Coastguard Worker  *      GetTransformFeedbacki_v for all available indexed binding points. For
110*35238bceSAndroid Build Coastguard Worker  *      all queries, expect value equal to 0.
111*35238bceSAndroid Build Coastguard Worker  *
112*35238bceSAndroid Build Coastguard Worker  *      Query parameters:
113*35238bceSAndroid Build Coastguard Worker  *       -  TRANSFORM_FEEDBACK_BUFFER_START and
114*35238bceSAndroid Build Coastguard Worker  *       -  TRANSFORM_FEEDBACK_BUFFER_SIZE
115*35238bceSAndroid Build Coastguard Worker  *      using GetTransformFeedbacki64_v for all available indexed binding
116*35238bceSAndroid Build Coastguard Worker  *      points. For all queries, expect value equal to 0.
117*35238bceSAndroid Build Coastguard Worker  *
118*35238bceSAndroid Build Coastguard Worker  *      Query parameters:
119*35238bceSAndroid Build Coastguard Worker  *       -  TRANSFORM_FEEDBACK_PAUSED and
120*35238bceSAndroid Build Coastguard Worker  *       -  TRANSFORM_FEEDBACK_ACTIVE
121*35238bceSAndroid Build Coastguard Worker  *      using GetTransformFeedbackiv. For all queries, expect value equal to
122*35238bceSAndroid Build Coastguard Worker  *      FALSE.
123*35238bceSAndroid Build Coastguard Worker  */
124*35238bceSAndroid Build Coastguard Worker class DefaultsTest : public deqp::TestCase
125*35238bceSAndroid Build Coastguard Worker {
126*35238bceSAndroid Build Coastguard Worker public:
127*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
128*35238bceSAndroid Build Coastguard Worker     DefaultsTest(deqp::Context &context);
129*35238bceSAndroid Build Coastguard Worker 
130*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
131*35238bceSAndroid Build Coastguard Worker 
132*35238bceSAndroid Build Coastguard Worker private:
133*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
134*35238bceSAndroid Build Coastguard Worker     DefaultsTest(const DefaultsTest &other);
135*35238bceSAndroid Build Coastguard Worker     DefaultsTest &operator=(const DefaultsTest &other);
136*35238bceSAndroid Build Coastguard Worker 
137*35238bceSAndroid Build Coastguard Worker     /* Function pointers type definitions and declarations. */
138*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *GetTransformFeedbackiv_ProcAddress)(glw::GLuint xfb, glw::GLenum pname,
139*35238bceSAndroid Build Coastguard Worker                                                                    glw::GLint *param);
140*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *GetTransformFeedbacki_v_ProcAddress)(glw::GLuint xfb, glw::GLenum pname,
141*35238bceSAndroid Build Coastguard Worker                                                                     glw::GLuint index, glw::GLint *param);
142*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *GetTransformFeedbacki64_v_ProcAddress)(glw::GLuint xfb, glw::GLenum pname,
143*35238bceSAndroid Build Coastguard Worker                                                                       glw::GLuint index, glw::GLint64 *param);
144*35238bceSAndroid Build Coastguard Worker 
145*35238bceSAndroid Build Coastguard Worker     GetTransformFeedbackiv_ProcAddress m_gl_getTransformFeedbackiv;
146*35238bceSAndroid Build Coastguard Worker     GetTransformFeedbacki_v_ProcAddress m_gl_getTransformFeedbacki_v;
147*35238bceSAndroid Build Coastguard Worker     GetTransformFeedbacki64_v_ProcAddress m_gl_getTransformFeedbacki64_v;
148*35238bceSAndroid Build Coastguard Worker 
149*35238bceSAndroid Build Coastguard Worker     /* Private member variables */
150*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_xfb_dsa;
151*35238bceSAndroid Build Coastguard Worker     glw::GLint m_xfb_indexed_binding_points_count;
152*35238bceSAndroid Build Coastguard Worker 
153*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
154*35238bceSAndroid Build Coastguard Worker     void prepare();
155*35238bceSAndroid Build Coastguard Worker     bool testBuffersBindingPoints();
156*35238bceSAndroid Build Coastguard Worker     bool testBuffersDimensions();
157*35238bceSAndroid Build Coastguard Worker     bool testActive();
158*35238bceSAndroid Build Coastguard Worker     bool testPaused();
159*35238bceSAndroid Build Coastguard Worker     void clean();
160*35238bceSAndroid Build Coastguard Worker };
161*35238bceSAndroid Build Coastguard Worker /* DefaultsTest class */
162*35238bceSAndroid Build Coastguard Worker 
163*35238bceSAndroid Build Coastguard Worker /** @class BuffersTest
164*35238bceSAndroid Build Coastguard Worker  *
165*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Transform Feedback Buffer Objects binding test cases.
166*35238bceSAndroid Build Coastguard Worker  *         The test follows the steps:
167*35238bceSAndroid Build Coastguard Worker  *
168*35238bceSAndroid Build Coastguard Worker  *             Create transform feedback object with CreateTransformFeedbacks function.
169*35238bceSAndroid Build Coastguard Worker  *
170*35238bceSAndroid Build Coastguard Worker  *             Create two buffer objects using GenBuffers and BindBuffer functions.
171*35238bceSAndroid Build Coastguard Worker  *             Allocate storage for them using BufferData.
172*35238bceSAndroid Build Coastguard Worker  *
173*35238bceSAndroid Build Coastguard Worker  *             Bind the first buffer to transform feedback object indexed binding point
174*35238bceSAndroid Build Coastguard Worker  *             0 using TransformFeedbackBufferBase function.
175*35238bceSAndroid Build Coastguard Worker  *
176*35238bceSAndroid Build Coastguard Worker  *             Bind a first half of the second buffer to transform feedback object
177*35238bceSAndroid Build Coastguard Worker  *             indexed binding point 1 using TransformFeedbackBufferRange.
178*35238bceSAndroid Build Coastguard Worker  *
179*35238bceSAndroid Build Coastguard Worker  *             Bind a second half of the second buffer to transform feedback object
180*35238bceSAndroid Build Coastguard Worker  *             indexed binding point 12 using TransformFeedbackBufferRange.
181*35238bceSAndroid Build Coastguard Worker  *
182*35238bceSAndroid Build Coastguard Worker  *             Query parameter TRANSFORM_FEEDBACK_BUFFER_BINDING using
183*35238bceSAndroid Build Coastguard Worker  *             GetTransformFeedbacki_v for all 1st, 2nd and 3rd indexed binding point.
184*35238bceSAndroid Build Coastguard Worker  *             For all queries, expect value equal to the corresponding buffers'
185*35238bceSAndroid Build Coastguard Worker  *             identifiers.
186*35238bceSAndroid Build Coastguard Worker  *
187*35238bceSAndroid Build Coastguard Worker  *             Query parameters:
188*35238bceSAndroid Build Coastguard Worker  *              -  TRANSFORM_FEEDBACK_BUFFER_START and
189*35238bceSAndroid Build Coastguard Worker  *              -  TRANSFORM_FEEDBACK_BUFFER_SIZE
190*35238bceSAndroid Build Coastguard Worker  *             using GetTransformFeedbacki64_v for indexed binding points 0, 1 and 2.
191*35238bceSAndroid Build Coastguard Worker  *             Verify returned values.
192*35238bceSAndroid Build Coastguard Worker  */
193*35238bceSAndroid Build Coastguard Worker class BuffersTest : public deqp::TestCase
194*35238bceSAndroid Build Coastguard Worker {
195*35238bceSAndroid Build Coastguard Worker public:
196*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
197*35238bceSAndroid Build Coastguard Worker     BuffersTest(deqp::Context &context);
198*35238bceSAndroid Build Coastguard Worker 
199*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
200*35238bceSAndroid Build Coastguard Worker 
201*35238bceSAndroid Build Coastguard Worker private:
202*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
203*35238bceSAndroid Build Coastguard Worker     BuffersTest(const BuffersTest &other);
204*35238bceSAndroid Build Coastguard Worker     BuffersTest &operator=(const BuffersTest &other);
205*35238bceSAndroid Build Coastguard Worker 
206*35238bceSAndroid Build Coastguard Worker     /* Function pointers type definitions and declarations. */
207*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *GetTransformFeedbacki_v_ProcAddress)(glw::GLuint xfb, glw::GLenum pname,
208*35238bceSAndroid Build Coastguard Worker                                                                     glw::GLuint index, glw::GLint *param);
209*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *GetTransformFeedbacki64_v_ProcAddress)(glw::GLuint xfb, glw::GLenum pname,
210*35238bceSAndroid Build Coastguard Worker                                                                       glw::GLuint index, glw::GLint64 *param);
211*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *TransformFeedbackBufferBase_ProcAddress)(glw::GLuint xfb, glw::GLuint index,
212*35238bceSAndroid Build Coastguard Worker                                                                         glw::GLuint buffer);
213*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *TransformFeedbackBufferRange_ProcAddress)(glw::GLuint xfb, glw::GLuint index,
214*35238bceSAndroid Build Coastguard Worker                                                                          glw::GLuint buffer, glw::GLintptr offset,
215*35238bceSAndroid Build Coastguard Worker                                                                          glw::GLsizeiptr size);
216*35238bceSAndroid Build Coastguard Worker 
217*35238bceSAndroid Build Coastguard Worker     GetTransformFeedbacki_v_ProcAddress m_gl_getTransformFeedbacki_v;
218*35238bceSAndroid Build Coastguard Worker     GetTransformFeedbacki64_v_ProcAddress m_gl_getTransformFeedbacki64_v;
219*35238bceSAndroid Build Coastguard Worker     TransformFeedbackBufferBase_ProcAddress m_gl_TransformFeedbackBufferBase;
220*35238bceSAndroid Build Coastguard Worker     TransformFeedbackBufferRange_ProcAddress m_gl_TransformFeedbackBufferRange;
221*35238bceSAndroid Build Coastguard Worker 
222*35238bceSAndroid Build Coastguard Worker     /* Private member variables */
223*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_xfb_dsa;
224*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_bo_a;
225*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_bo_b;
226*35238bceSAndroid Build Coastguard Worker 
227*35238bceSAndroid Build Coastguard Worker     /* Private static variables */
228*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_bo_size;
229*35238bceSAndroid Build Coastguard Worker 
230*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
231*35238bceSAndroid Build Coastguard Worker     void prepareObjects();
232*35238bceSAndroid Build Coastguard Worker     bool prepareTestSetup();
233*35238bceSAndroid Build Coastguard Worker     bool testBindingPoint(glw::GLuint const index, glw::GLint const expected_value,
234*35238bceSAndroid Build Coastguard Worker                           glw::GLchar const *const tested_function_name);
235*35238bceSAndroid Build Coastguard Worker     bool testStart(glw::GLuint const index, glw::GLint const expected_value,
236*35238bceSAndroid Build Coastguard Worker                    glw::GLchar const *const tested_function_name);
237*35238bceSAndroid Build Coastguard Worker     bool testSize(glw::GLuint const index, glw::GLint const expected_value,
238*35238bceSAndroid Build Coastguard Worker                   glw::GLchar const *const tested_function_name);
239*35238bceSAndroid Build Coastguard Worker     void clean();
240*35238bceSAndroid Build Coastguard Worker };
241*35238bceSAndroid Build Coastguard Worker /* BuffersTest class */
242*35238bceSAndroid Build Coastguard Worker 
243*35238bceSAndroid Build Coastguard Worker /** @class ErrorsTest
244*35238bceSAndroid Build Coastguard Worker  *
245*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Transform Feedback Negative test cases.
246*35238bceSAndroid Build Coastguard Worker  *         The test follows steps:
247*35238bceSAndroid Build Coastguard Worker  *
248*35238bceSAndroid Build Coastguard Worker  *              Check that CreateTransformFeedbacks generates INVALID_VALUE error if
249*35238bceSAndroid Build Coastguard Worker  *              number of transform feedback objects to create is negative.
250*35238bceSAndroid Build Coastguard Worker  *
251*35238bceSAndroid Build Coastguard Worker  *              Check that GetTransformFeedbackiv, GetTransformFeedbacki_v and
252*35238bceSAndroid Build Coastguard Worker  *              GetTransformFeedbacki64_v generate INVALID_OPERATION error if xfb is not
253*35238bceSAndroid Build Coastguard Worker  *              zero or the name of an existing transform feedback object.
254*35238bceSAndroid Build Coastguard Worker  *
255*35238bceSAndroid Build Coastguard Worker  *              Check that GetTransformFeedbackiv generates INVALID_ENUM error if pname
256*35238bceSAndroid Build Coastguard Worker  *              is not TRANSFORM_FEEDBACK_PAUSED or TRANSFORM_FEEDBACK_ACTIVE.
257*35238bceSAndroid Build Coastguard Worker  *
258*35238bceSAndroid Build Coastguard Worker  *              Check that GetTransformFeedbacki_v generates INVALID_ENUM error if pname
259*35238bceSAndroid Build Coastguard Worker  *              is not TRANSFORM_FEEDBACK_BUFFER_BINDING.
260*35238bceSAndroid Build Coastguard Worker  *
261*35238bceSAndroid Build Coastguard Worker  *              Check that GetTransformFeedbacki64_v generates INVALID_ENUM error if
262*35238bceSAndroid Build Coastguard Worker  *              pname is not TRANSFORM_FEEDBACK_BUFFER_START or
263*35238bceSAndroid Build Coastguard Worker  *              TRANSFORM_FEEDBACK_BUFFER_SIZE.
264*35238bceSAndroid Build Coastguard Worker  *
265*35238bceSAndroid Build Coastguard Worker  *              Check that GetTransformFeedbacki_v and GetTransformFeedbacki64_v
266*35238bceSAndroid Build Coastguard Worker  *              generate INVALID_VALUE error by GetTransformFeedbacki_v and
267*35238bceSAndroid Build Coastguard Worker  *              GetTransformFeedbacki64_v if index is greater than or equal to the
268*35238bceSAndroid Build Coastguard Worker  *              number of binding points for transform feedback (the value of
269*35238bceSAndroid Build Coastguard Worker  *              MAX_TRANSFORM_FEEDBACK_BUFFERS).
270*35238bceSAndroid Build Coastguard Worker  */
271*35238bceSAndroid Build Coastguard Worker class ErrorsTest : public deqp::TestCase
272*35238bceSAndroid Build Coastguard Worker {
273*35238bceSAndroid Build Coastguard Worker public:
274*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
275*35238bceSAndroid Build Coastguard Worker     ErrorsTest(deqp::Context &context);
276*35238bceSAndroid Build Coastguard Worker 
277*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
278*35238bceSAndroid Build Coastguard Worker 
279*35238bceSAndroid Build Coastguard Worker private:
280*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
281*35238bceSAndroid Build Coastguard Worker     ErrorsTest(const ErrorsTest &other);
282*35238bceSAndroid Build Coastguard Worker     ErrorsTest &operator=(const ErrorsTest &other);
283*35238bceSAndroid Build Coastguard Worker 
284*35238bceSAndroid Build Coastguard Worker     /* Function pointers type definitions and declarations. */
285*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *GetTransformFeedbackiv_ProcAddress)(glw::GLuint xfb, glw::GLenum pname,
286*35238bceSAndroid Build Coastguard Worker                                                                    glw::GLint *param);
287*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *GetTransformFeedbacki_v_ProcAddress)(glw::GLuint xfb, glw::GLenum pname,
288*35238bceSAndroid Build Coastguard Worker                                                                     glw::GLuint index, glw::GLint *param);
289*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *GetTransformFeedbacki64_v_ProcAddress)(glw::GLuint xfb, glw::GLenum pname,
290*35238bceSAndroid Build Coastguard Worker                                                                       glw::GLuint index, glw::GLint64 *param);
291*35238bceSAndroid Build Coastguard Worker 
292*35238bceSAndroid Build Coastguard Worker     GetTransformFeedbackiv_ProcAddress m_gl_getTransformFeedbackiv;
293*35238bceSAndroid Build Coastguard Worker     GetTransformFeedbacki_v_ProcAddress m_gl_getTransformFeedbacki_v;
294*35238bceSAndroid Build Coastguard Worker     GetTransformFeedbacki64_v_ProcAddress m_gl_getTransformFeedbacki64_v;
295*35238bceSAndroid Build Coastguard Worker 
296*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
297*35238bceSAndroid Build Coastguard Worker     void prepareFunctionPointers();
298*35238bceSAndroid Build Coastguard Worker     void cleanErrors();
299*35238bceSAndroid Build Coastguard Worker 
300*35238bceSAndroid Build Coastguard Worker     bool testCreateTransformFeedbacksForInvalidNumberOfObjects();
301*35238bceSAndroid Build Coastguard Worker     bool testQueriesForInvalidNameOfObject();
302*35238bceSAndroid Build Coastguard Worker     bool testGetTransformFeedbackivQueryForInvalidParameterName();
303*35238bceSAndroid Build Coastguard Worker     bool testGetTransformFeedbacki_vQueryForInvalidParameterName();
304*35238bceSAndroid Build Coastguard Worker     bool testGetTransformFeedbacki64_vQueryForInvalidParameterName();
305*35238bceSAndroid Build Coastguard Worker     bool testIndexedQueriesForInvalidBindingPoint();
306*35238bceSAndroid Build Coastguard Worker };
307*35238bceSAndroid Build Coastguard Worker /* BuffersTest class */
308*35238bceSAndroid Build Coastguard Worker 
309*35238bceSAndroid Build Coastguard Worker /** @class FunctionalTest
310*35238bceSAndroid Build Coastguard Worker  *
311*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Transform Feedback Functional test cases.
312*35238bceSAndroid Build Coastguard Worker  *
313*35238bceSAndroid Build Coastguard Worker  *  @note  The test follows steps:
314*35238bceSAndroid Build Coastguard Worker  *
315*35238bceSAndroid Build Coastguard Worker  *             Create transform feedback object with CreateTransformFeedbacks function.
316*35238bceSAndroid Build Coastguard Worker  *
317*35238bceSAndroid Build Coastguard Worker  *             Create buffer object using GenBuffers and BindBuffer functions.
318*35238bceSAndroid Build Coastguard Worker  *             Allocate storage for it using BufferData.
319*35238bceSAndroid Build Coastguard Worker  *
320*35238bceSAndroid Build Coastguard Worker  *             Bind the buffer to transform feedback object indexed binding point 0
321*35238bceSAndroid Build Coastguard Worker  *             using TransformFeedbackBufferBase function.
322*35238bceSAndroid Build Coastguard Worker  *
323*35238bceSAndroid Build Coastguard Worker  *             Prepare program with vertex shader which outputs VertexID to transform
324*35238bceSAndroid Build Coastguard Worker  *             feedback varying.
325*35238bceSAndroid Build Coastguard Worker  *
326*35238bceSAndroid Build Coastguard Worker  *             Create and bind empty vertex array object.
327*35238bceSAndroid Build Coastguard Worker  *
328*35238bceSAndroid Build Coastguard Worker  *             Begin transform feedback environment.
329*35238bceSAndroid Build Coastguard Worker  *
330*35238bceSAndroid Build Coastguard Worker  *             Using the program with discarded rasterizer, draw array of 4 indices
331*35238bceSAndroid Build Coastguard Worker  *             using POINTS.
332*35238bceSAndroid Build Coastguard Worker  *
333*35238bceSAndroid Build Coastguard Worker  *             Pause transform feedback environment.
334*35238bceSAndroid Build Coastguard Worker  *
335*35238bceSAndroid Build Coastguard Worker  *             Query parameter TRANSFORM_FEEDBACK_PAUSED using GetTransformFeedbackiv.
336*35238bceSAndroid Build Coastguard Worker  *             Expect value equal to TRUE.
337*35238bceSAndroid Build Coastguard Worker  *
338*35238bceSAndroid Build Coastguard Worker  *             Query parameter TRANSFORM_FEEDBACK_PAUSED using GetTransformFeedbackiv.
339*35238bceSAndroid Build Coastguard Worker  *             Expect value equal to FALSE.
340*35238bceSAndroid Build Coastguard Worker  *
341*35238bceSAndroid Build Coastguard Worker  *             Resume transform feedback environment.
342*35238bceSAndroid Build Coastguard Worker  *
343*35238bceSAndroid Build Coastguard Worker  *             Query parameter TRANSFORM_FEEDBACK_PAUSED using GetTransformFeedbackiv.
344*35238bceSAndroid Build Coastguard Worker  *             Expect value equal to FALSE.
345*35238bceSAndroid Build Coastguard Worker  *
346*35238bceSAndroid Build Coastguard Worker  *             Query parameter TRANSFORM_FEEDBACK_PAUSED using GetTransformFeedbackiv.
347*35238bceSAndroid Build Coastguard Worker  *             Expect value equal to TRUE.
348*35238bceSAndroid Build Coastguard Worker  *
349*35238bceSAndroid Build Coastguard Worker  *             End Transform feedback environment.
350*35238bceSAndroid Build Coastguard Worker  *
351*35238bceSAndroid Build Coastguard Worker  *             Verify data in the buffer using MapBuffer function.
352*35238bceSAndroid Build Coastguard Worker  */
353*35238bceSAndroid Build Coastguard Worker class FunctionalTest : public deqp::TestCase
354*35238bceSAndroid Build Coastguard Worker {
355*35238bceSAndroid Build Coastguard Worker public:
356*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
357*35238bceSAndroid Build Coastguard Worker     FunctionalTest(deqp::Context &context);
358*35238bceSAndroid Build Coastguard Worker 
359*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
360*35238bceSAndroid Build Coastguard Worker 
361*35238bceSAndroid Build Coastguard Worker private:
362*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
363*35238bceSAndroid Build Coastguard Worker     FunctionalTest(const FunctionalTest &other);
364*35238bceSAndroid Build Coastguard Worker     FunctionalTest &operator=(const FunctionalTest &other);
365*35238bceSAndroid Build Coastguard Worker 
366*35238bceSAndroid Build Coastguard Worker     /* Function pointers type definitions and declarations. */
367*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *GetTransformFeedbackiv_ProcAddress)(glw::GLuint xfb, glw::GLenum pname,
368*35238bceSAndroid Build Coastguard Worker                                                                    glw::GLint *param);
369*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *TransformFeedbackBufferBase_ProcAddress)(glw::GLuint xfb, glw::GLuint index,
370*35238bceSAndroid Build Coastguard Worker                                                                         glw::GLuint buffer);
371*35238bceSAndroid Build Coastguard Worker 
372*35238bceSAndroid Build Coastguard Worker     GetTransformFeedbackiv_ProcAddress m_gl_getTransformFeedbackiv;
373*35238bceSAndroid Build Coastguard Worker     TransformFeedbackBufferBase_ProcAddress m_gl_TransformFeedbackBufferBase;
374*35238bceSAndroid Build Coastguard Worker 
375*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
376*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_xfb_dsa;
377*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_bo;
378*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_po;
379*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_vao;
380*35238bceSAndroid Build Coastguard Worker 
381*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
382*35238bceSAndroid Build Coastguard Worker     void prepareFunctionPointers();
383*35238bceSAndroid Build Coastguard Worker     void prepareTransformFeedback();
384*35238bceSAndroid Build Coastguard Worker     void prepareBuffer();
385*35238bceSAndroid Build Coastguard Worker     void prepareProgram();
386*35238bceSAndroid Build Coastguard Worker     void prepareVertexArrayObject();
387*35238bceSAndroid Build Coastguard Worker 
388*35238bceSAndroid Build Coastguard Worker     bool draw();
389*35238bceSAndroid Build Coastguard Worker     bool testTransformFeedbackStatus(glw::GLenum parameter_name, glw::GLint expected_value);
390*35238bceSAndroid Build Coastguard Worker     bool verifyBufferContent();
391*35238bceSAndroid Build Coastguard Worker 
392*35238bceSAndroid Build Coastguard Worker     void clean();
393*35238bceSAndroid Build Coastguard Worker 
394*35238bceSAndroid Build Coastguard Worker     /* Private static variables. */
395*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_bo_size;
396*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar s_vertex_shader[];
397*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar s_fragment_shader[];
398*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *const s_xfb_varying;
399*35238bceSAndroid Build Coastguard Worker };
400*35238bceSAndroid Build Coastguard Worker /* FunctionalTest class */
401*35238bceSAndroid Build Coastguard Worker } // namespace TransformFeedback
402*35238bceSAndroid Build Coastguard Worker 
403*35238bceSAndroid Build Coastguard Worker namespace Samplers
404*35238bceSAndroid Build Coastguard Worker {
405*35238bceSAndroid Build Coastguard Worker /** @class CreationTest
406*35238bceSAndroid Build Coastguard Worker  *
407*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Sampler Objects Creation test cases.
408*35238bceSAndroid Build Coastguard Worker  *
409*35238bceSAndroid Build Coastguard Worker  *  Test follows the steps:
410*35238bceSAndroid Build Coastguard Worker  *
411*35238bceSAndroid Build Coastguard Worker  *       Create at least two Sampler Objects names using GenSamplers function.
412*35238bceSAndroid Build Coastguard Worker  *       Check them without binding, using IsSampler function. Expect GL_FALSE.
413*35238bceSAndroid Build Coastguard Worker  *
414*35238bceSAndroid Build Coastguard Worker  *       Create at least two Sampler Objects using CreateSamplers function. Check
415*35238bceSAndroid Build Coastguard Worker  *       them without binding, using IsSampler function. Expect GL_TRUE.
416*35238bceSAndroid Build Coastguard Worker  *
417*35238bceSAndroid Build Coastguard Worker  *       Release objects.
418*35238bceSAndroid Build Coastguard Worker  */
419*35238bceSAndroid Build Coastguard Worker class CreationTest : public deqp::TestCase
420*35238bceSAndroid Build Coastguard Worker {
421*35238bceSAndroid Build Coastguard Worker public:
422*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
423*35238bceSAndroid Build Coastguard Worker     CreationTest(deqp::Context &context);
424*35238bceSAndroid Build Coastguard Worker 
425*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
426*35238bceSAndroid Build Coastguard Worker 
427*35238bceSAndroid Build Coastguard Worker private:
428*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
429*35238bceSAndroid Build Coastguard Worker     CreationTest(const CreationTest &other);
430*35238bceSAndroid Build Coastguard Worker     CreationTest &operator=(const CreationTest &other);
431*35238bceSAndroid Build Coastguard Worker };
432*35238bceSAndroid Build Coastguard Worker /* CreationTest class */
433*35238bceSAndroid Build Coastguard Worker 
434*35238bceSAndroid Build Coastguard Worker /** @class DefaultsTest
435*35238bceSAndroid Build Coastguard Worker  *
436*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Sampler Objects Default State test.
437*35238bceSAndroid Build Coastguard Worker  *
438*35238bceSAndroid Build Coastguard Worker  *         Test follows the steps:
439*35238bceSAndroid Build Coastguard Worker  *
440*35238bceSAndroid Build Coastguard Worker  *             Create Sampler Object with CreateSamplers function.
441*35238bceSAndroid Build Coastguard Worker  *
442*35238bceSAndroid Build Coastguard Worker  *             Verify that default value of TEXTURE_BORDER_COLOR queried with function
443*35238bceSAndroid Build Coastguard Worker  *             GetSamplerParameterfv is 0.0, 0.0, 0.0, 0.0.
444*35238bceSAndroid Build Coastguard Worker  *
445*35238bceSAndroid Build Coastguard Worker  *             Verify that default value of TEXTURE_COMPARE_FUNC queried with function
446*35238bceSAndroid Build Coastguard Worker  *             GetSamplerParameteriv is LEQUAL.
447*35238bceSAndroid Build Coastguard Worker  *
448*35238bceSAndroid Build Coastguard Worker  *             Verify that default value of TEXTURE_COMPARE_MODE queried with function
449*35238bceSAndroid Build Coastguard Worker  *             GetSamplerParameteriv is NONE.
450*35238bceSAndroid Build Coastguard Worker  *
451*35238bceSAndroid Build Coastguard Worker  *             Verify that default value of TEXTURE_LOD_BIAS queried with function
452*35238bceSAndroid Build Coastguard Worker  *             GetSamplerParameterfv is 0.0.
453*35238bceSAndroid Build Coastguard Worker  *
454*35238bceSAndroid Build Coastguard Worker  *             Verify that default value of TEXTURE_MAX_LOD queried with function
455*35238bceSAndroid Build Coastguard Worker  *             GetSamplerParameterfv is 1000.
456*35238bceSAndroid Build Coastguard Worker  *
457*35238bceSAndroid Build Coastguard Worker  *             Verify that default value of TEXTURE_MAG_FILTER queried with function
458*35238bceSAndroid Build Coastguard Worker  *             GetSamplerParameteriv is LINEAR.
459*35238bceSAndroid Build Coastguard Worker  *
460*35238bceSAndroid Build Coastguard Worker  *             Verify that default value of TEXTURE_MIN_FILTER queried with function
461*35238bceSAndroid Build Coastguard Worker  *             GetSamplerParameteriv is NEAREST_MIPMAP_LINEAR.
462*35238bceSAndroid Build Coastguard Worker  *
463*35238bceSAndroid Build Coastguard Worker  *             Verify that default value of TEXTURE_MIN_LOD queried with function
464*35238bceSAndroid Build Coastguard Worker  *             GetSamplerParameterfv is -1000.
465*35238bceSAndroid Build Coastguard Worker  *
466*35238bceSAndroid Build Coastguard Worker  *             Verify that default value of TEXTURE_WRAP_S queried with function
467*35238bceSAndroid Build Coastguard Worker  *             GetSamplerParameteriv is REPEAT.
468*35238bceSAndroid Build Coastguard Worker  *
469*35238bceSAndroid Build Coastguard Worker  *             Verify that default value of TEXTURE_WRAP_T queried with function
470*35238bceSAndroid Build Coastguard Worker  *             GetSamplerParameteriv is REPEAT.
471*35238bceSAndroid Build Coastguard Worker  *
472*35238bceSAndroid Build Coastguard Worker  *             Verify that default value of TEXTURE_WRAP_R queried with function
473*35238bceSAndroid Build Coastguard Worker  *             GetSamplerParameteriv is REPEAT.
474*35238bceSAndroid Build Coastguard Worker  *
475*35238bceSAndroid Build Coastguard Worker  *             Release objects.
476*35238bceSAndroid Build Coastguard Worker  */
477*35238bceSAndroid Build Coastguard Worker class DefaultsTest : public deqp::TestCase
478*35238bceSAndroid Build Coastguard Worker {
479*35238bceSAndroid Build Coastguard Worker public:
480*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
481*35238bceSAndroid Build Coastguard Worker     DefaultsTest(deqp::Context &context);
482*35238bceSAndroid Build Coastguard Worker 
483*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
484*35238bceSAndroid Build Coastguard Worker 
485*35238bceSAndroid Build Coastguard Worker private:
486*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
487*35238bceSAndroid Build Coastguard Worker     DefaultsTest(const DefaultsTest &other);
488*35238bceSAndroid Build Coastguard Worker     DefaultsTest &operator=(const DefaultsTest &other);
489*35238bceSAndroid Build Coastguard Worker 
490*35238bceSAndroid Build Coastguard Worker     /* Private member variables */
491*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_sampler_dsa;
492*35238bceSAndroid Build Coastguard Worker 
493*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
494*35238bceSAndroid Build Coastguard Worker     void prepare();
495*35238bceSAndroid Build Coastguard Worker     bool testSamplerIntegerParameter(glw::GLenum pname, glw::GLint expected_value);
496*35238bceSAndroid Build Coastguard Worker     bool testSamplerFloatParameter(glw::GLenum pname, glw::GLfloat expected_value);
497*35238bceSAndroid Build Coastguard Worker     bool testSamplerFloatVectorParameter(glw::GLenum pname, glw::GLfloat expected_value[4]);
498*35238bceSAndroid Build Coastguard Worker     void clean();
499*35238bceSAndroid Build Coastguard Worker };
500*35238bceSAndroid Build Coastguard Worker /* DefaultsTest class */
501*35238bceSAndroid Build Coastguard Worker 
502*35238bceSAndroid Build Coastguard Worker /** @class ErrorsTest
503*35238bceSAndroid Build Coastguard Worker  *
504*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Samplers Negative test.
505*35238bceSAndroid Build Coastguard Worker  *
506*35238bceSAndroid Build Coastguard Worker  *         The test follows steps:
507*35238bceSAndroid Build Coastguard Worker  *
508*35238bceSAndroid Build Coastguard Worker  *             Check that CreateSamplers generates INVALID_VALUE error if
509*35238bceSAndroid Build Coastguard Worker  *             number of sampler objects to create is negative.
510*35238bceSAndroid Build Coastguard Worker  */
511*35238bceSAndroid Build Coastguard Worker class ErrorsTest : public deqp::TestCase
512*35238bceSAndroid Build Coastguard Worker {
513*35238bceSAndroid Build Coastguard Worker public:
514*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
515*35238bceSAndroid Build Coastguard Worker     ErrorsTest(deqp::Context &context);
516*35238bceSAndroid Build Coastguard Worker 
517*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
518*35238bceSAndroid Build Coastguard Worker 
519*35238bceSAndroid Build Coastguard Worker private:
520*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
521*35238bceSAndroid Build Coastguard Worker     ErrorsTest(const ErrorsTest &other);
522*35238bceSAndroid Build Coastguard Worker     ErrorsTest &operator=(const ErrorsTest &other);
523*35238bceSAndroid Build Coastguard Worker };
524*35238bceSAndroid Build Coastguard Worker /* ErrorsTest class */
525*35238bceSAndroid Build Coastguard Worker 
526*35238bceSAndroid Build Coastguard Worker /** @class FunctionalTest
527*35238bceSAndroid Build Coastguard Worker  *
528*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Samplers Functional test cases.
529*35238bceSAndroid Build Coastguard Worker  *
530*35238bceSAndroid Build Coastguard Worker  *  @note  The test follows steps:
531*35238bceSAndroid Build Coastguard Worker  *
532*35238bceSAndroid Build Coastguard Worker  *             Create framebuffer with renderbuffer with color attachment and 1x1 pixel
533*35238bceSAndroid Build Coastguard Worker  *             size. Clean framebuffer content with black color.
534*35238bceSAndroid Build Coastguard Worker  *
535*35238bceSAndroid Build Coastguard Worker  *             Create and bind empty vertex array object.
536*35238bceSAndroid Build Coastguard Worker  *
537*35238bceSAndroid Build Coastguard Worker  *             Build and use simple GLSL program drawing full screen textured quad
538*35238bceSAndroid Build Coastguard Worker  *             depending on VertexID. Fragment shader shall output texture point at
539*35238bceSAndroid Build Coastguard Worker  *             (1/3, 1/3).
540*35238bceSAndroid Build Coastguard Worker  *
541*35238bceSAndroid Build Coastguard Worker  *             Create texture 2 x 2 texels in size. Bind it. Upload texture with
542*35238bceSAndroid Build Coastguard Worker  *             following color data:
543*35238bceSAndroid Build Coastguard Worker  *                 RED,    GREEN,
544*35238bceSAndroid Build Coastguard Worker  *                 BLUE,   YELLOW.
545*35238bceSAndroid Build Coastguard Worker  *
546*35238bceSAndroid Build Coastguard Worker  *             Create Sampler object using CreateSamplers function and bind it to the
547*35238bceSAndroid Build Coastguard Worker  *             texture unit. Setup following sampler parameters:
548*35238bceSAndroid Build Coastguard Worker  *              *  TEXTURE_WRAP_S to the value of REPEAT,
549*35238bceSAndroid Build Coastguard Worker  *              *  TEXTURE_WRAP_T to REPEAT,
550*35238bceSAndroid Build Coastguard Worker  *              *  TEXTURE_MIN_FILTER to NEAREST,
551*35238bceSAndroid Build Coastguard Worker  *              *  TEXTURE_MAG_FILTER to NEAREST.
552*35238bceSAndroid Build Coastguard Worker  *
553*35238bceSAndroid Build Coastguard Worker  *             Draw full screen quad.
554*35238bceSAndroid Build Coastguard Worker  *
555*35238bceSAndroid Build Coastguard Worker  *             Fetch framebuffer content with ReadPixels function. Check that,
556*35238bceSAndroid Build Coastguard Worker  *             framebuffer is filled with red color.
557*35238bceSAndroid Build Coastguard Worker  *
558*35238bceSAndroid Build Coastguard Worker  *             Release objects.
559*35238bceSAndroid Build Coastguard Worker  */
560*35238bceSAndroid Build Coastguard Worker class FunctionalTest : public deqp::TestCase
561*35238bceSAndroid Build Coastguard Worker {
562*35238bceSAndroid Build Coastguard Worker public:
563*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
564*35238bceSAndroid Build Coastguard Worker     FunctionalTest(deqp::Context &context);
565*35238bceSAndroid Build Coastguard Worker 
566*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
567*35238bceSAndroid Build Coastguard Worker 
568*35238bceSAndroid Build Coastguard Worker private:
569*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
570*35238bceSAndroid Build Coastguard Worker     FunctionalTest(const FunctionalTest &other);
571*35238bceSAndroid Build Coastguard Worker     FunctionalTest &operator=(const FunctionalTest &other);
572*35238bceSAndroid Build Coastguard Worker 
573*35238bceSAndroid Build Coastguard Worker     void prepareFramebuffer();
574*35238bceSAndroid Build Coastguard Worker     void prepareVertexArrayObject();
575*35238bceSAndroid Build Coastguard Worker     void prepareProgram();
576*35238bceSAndroid Build Coastguard Worker     void prepareTexture();
577*35238bceSAndroid Build Coastguard Worker     void prepareSampler();
578*35238bceSAndroid Build Coastguard Worker     void draw();
579*35238bceSAndroid Build Coastguard Worker     bool checkFramebufferContent();
580*35238bceSAndroid Build Coastguard Worker     void clean();
581*35238bceSAndroid Build Coastguard Worker 
582*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
583*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo;
584*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo;
585*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_vao;
586*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to;
587*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_so;
588*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_po;
589*35238bceSAndroid Build Coastguard Worker 
590*35238bceSAndroid Build Coastguard Worker     /* Private static variables. */
591*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar s_vertex_shader[];
592*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar s_fragment_shader[];
593*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar s_uniform_sampler[];
594*35238bceSAndroid Build Coastguard Worker     static const glw::GLubyte s_texture_data[];
595*35238bceSAndroid Build Coastguard Worker };
596*35238bceSAndroid Build Coastguard Worker /* FunctionalTest class */
597*35238bceSAndroid Build Coastguard Worker } // namespace Samplers
598*35238bceSAndroid Build Coastguard Worker 
599*35238bceSAndroid Build Coastguard Worker namespace ProgramPipelines
600*35238bceSAndroid Build Coastguard Worker {
601*35238bceSAndroid Build Coastguard Worker /** @class CreationTest
602*35238bceSAndroid Build Coastguard Worker  *
603*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Program Pipeline Objects Creation test cases.
604*35238bceSAndroid Build Coastguard Worker  *
605*35238bceSAndroid Build Coastguard Worker  *  @note Test follows the steps:
606*35238bceSAndroid Build Coastguard Worker  *
607*35238bceSAndroid Build Coastguard Worker  *            Create at least two Program Pipeline Objects names using
608*35238bceSAndroid Build Coastguard Worker  *            GenProgramPipelines function. Check them without binding, using
609*35238bceSAndroid Build Coastguard Worker  *            IsProgramPipeline function. Expect GL_FALSE.
610*35238bceSAndroid Build Coastguard Worker  *
611*35238bceSAndroid Build Coastguard Worker  *            Create at least two Program Pipeline Objects using
612*35238bceSAndroid Build Coastguard Worker  *            CreateProgramPipelines function. Check them without binding, using
613*35238bceSAndroid Build Coastguard Worker  *            IsProgramPipeline function. Expect GL_TRUE.
614*35238bceSAndroid Build Coastguard Worker  *
615*35238bceSAndroid Build Coastguard Worker  *            Release objects.
616*35238bceSAndroid Build Coastguard Worker  */
617*35238bceSAndroid Build Coastguard Worker class CreationTest : public deqp::TestCase
618*35238bceSAndroid Build Coastguard Worker {
619*35238bceSAndroid Build Coastguard Worker public:
620*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
621*35238bceSAndroid Build Coastguard Worker     CreationTest(deqp::Context &context);
622*35238bceSAndroid Build Coastguard Worker 
623*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
624*35238bceSAndroid Build Coastguard Worker 
625*35238bceSAndroid Build Coastguard Worker private:
626*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
627*35238bceSAndroid Build Coastguard Worker     CreationTest(const CreationTest &other);
628*35238bceSAndroid Build Coastguard Worker     CreationTest &operator=(const CreationTest &other);
629*35238bceSAndroid Build Coastguard Worker };
630*35238bceSAndroid Build Coastguard Worker /* CreationTest class */
631*35238bceSAndroid Build Coastguard Worker 
632*35238bceSAndroid Build Coastguard Worker /** @class DefaultsTest
633*35238bceSAndroid Build Coastguard Worker  *
634*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Program Pipeline Objects Default State test.
635*35238bceSAndroid Build Coastguard Worker  *
636*35238bceSAndroid Build Coastguard Worker  *  @note Test follows the steps:
637*35238bceSAndroid Build Coastguard Worker  *
638*35238bceSAndroid Build Coastguard Worker  *            Create Program Pipeline Object with CreateProgramPipelines function.
639*35238bceSAndroid Build Coastguard Worker  *
640*35238bceSAndroid Build Coastguard Worker  *            Verify that default value of ACTIVE_PROGRAM queried with function
641*35238bceSAndroid Build Coastguard Worker  *            GetProgramPipelineiv is 0.
642*35238bceSAndroid Build Coastguard Worker  *
643*35238bceSAndroid Build Coastguard Worker  *            Verify that default value of VERTEX_SHADER queried with function
644*35238bceSAndroid Build Coastguard Worker  *            GetProgramPipelineiv is 0.
645*35238bceSAndroid Build Coastguard Worker  *
646*35238bceSAndroid Build Coastguard Worker  *            Verify that default value of GEOMETRY_SHADER queried with function
647*35238bceSAndroid Build Coastguard Worker  *            GetProgramPipelineiv is 0.
648*35238bceSAndroid Build Coastguard Worker  *
649*35238bceSAndroid Build Coastguard Worker  *            Verify that default value of FRAGMENT_SHADER queried with function
650*35238bceSAndroid Build Coastguard Worker  *            GetProgramPipelineiv is 0.
651*35238bceSAndroid Build Coastguard Worker  *
652*35238bceSAndroid Build Coastguard Worker  *            Verify that default value of COMPUTE_SHADER queried with function
653*35238bceSAndroid Build Coastguard Worker  *            GetProgramPipelineiv is 0.
654*35238bceSAndroid Build Coastguard Worker  *
655*35238bceSAndroid Build Coastguard Worker  *            Verify that default value of TESS_CONTROL_SHADER queried with function
656*35238bceSAndroid Build Coastguard Worker  *            GetProgramPipelineiv is 0.
657*35238bceSAndroid Build Coastguard Worker  *
658*35238bceSAndroid Build Coastguard Worker  *            Verify that default value of TESS_EVALUATION_SHADER queried with
659*35238bceSAndroid Build Coastguard Worker  *            function GetProgramPipelineiv is 0.
660*35238bceSAndroid Build Coastguard Worker  *
661*35238bceSAndroid Build Coastguard Worker  *            Verify that default value of VALIDATE_STATUS queried with function
662*35238bceSAndroid Build Coastguard Worker  *            GetProgramPipelineiv is 0.
663*35238bceSAndroid Build Coastguard Worker  *
664*35238bceSAndroid Build Coastguard Worker  *            Verify that default value of info log queried with function
665*35238bceSAndroid Build Coastguard Worker  *            GetProgramPiplineInfoLog is 0.
666*35238bceSAndroid Build Coastguard Worker  *
667*35238bceSAndroid Build Coastguard Worker  *            Verify that default value of INFO_LOG_LENGTH queried with function
668*35238bceSAndroid Build Coastguard Worker  *            GetProgramPipelineiv is 0.
669*35238bceSAndroid Build Coastguard Worker  *
670*35238bceSAndroid Build Coastguard Worker  *            Release object.
671*35238bceSAndroid Build Coastguard Worker  */
672*35238bceSAndroid Build Coastguard Worker class DefaultsTest : public deqp::TestCase
673*35238bceSAndroid Build Coastguard Worker {
674*35238bceSAndroid Build Coastguard Worker public:
675*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
676*35238bceSAndroid Build Coastguard Worker     DefaultsTest(deqp::Context &context);
677*35238bceSAndroid Build Coastguard Worker 
678*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
679*35238bceSAndroid Build Coastguard Worker 
680*35238bceSAndroid Build Coastguard Worker private:
681*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
682*35238bceSAndroid Build Coastguard Worker     DefaultsTest(const DefaultsTest &other);
683*35238bceSAndroid Build Coastguard Worker     DefaultsTest &operator=(const DefaultsTest &other);
684*35238bceSAndroid Build Coastguard Worker 
685*35238bceSAndroid Build Coastguard Worker     /* Private member variables */
686*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_program_pipeline_dsa;
687*35238bceSAndroid Build Coastguard Worker 
688*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
689*35238bceSAndroid Build Coastguard Worker     void prepare();
690*35238bceSAndroid Build Coastguard Worker     bool testProgramPipelineParameter(glw::GLenum pname, glw::GLint expected_value);
691*35238bceSAndroid Build Coastguard Worker     bool testProgramPipelineInfoLog(glw::GLchar *expected_value);
692*35238bceSAndroid Build Coastguard Worker     void clean();
693*35238bceSAndroid Build Coastguard Worker };
694*35238bceSAndroid Build Coastguard Worker /* DefaultsTest class */
695*35238bceSAndroid Build Coastguard Worker 
696*35238bceSAndroid Build Coastguard Worker /** @class ErrorsTest
697*35238bceSAndroid Build Coastguard Worker  *
698*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Program Pipeline Negative test.
699*35238bceSAndroid Build Coastguard Worker  *
700*35238bceSAndroid Build Coastguard Worker  *         The test follows steps:
701*35238bceSAndroid Build Coastguard Worker  *
702*35238bceSAndroid Build Coastguard Worker  *             Check that CreateProgramPipelines generates INVALID_VALUE error if
703*35238bceSAndroid Build Coastguard Worker  *             number of program pipeline objects to create is negative.
704*35238bceSAndroid Build Coastguard Worker  */
705*35238bceSAndroid Build Coastguard Worker class ErrorsTest : public deqp::TestCase
706*35238bceSAndroid Build Coastguard Worker {
707*35238bceSAndroid Build Coastguard Worker public:
708*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
709*35238bceSAndroid Build Coastguard Worker     ErrorsTest(deqp::Context &context);
710*35238bceSAndroid Build Coastguard Worker 
711*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
712*35238bceSAndroid Build Coastguard Worker 
713*35238bceSAndroid Build Coastguard Worker private:
714*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
715*35238bceSAndroid Build Coastguard Worker     ErrorsTest(const ErrorsTest &other);
716*35238bceSAndroid Build Coastguard Worker     ErrorsTest &operator=(const ErrorsTest &other);
717*35238bceSAndroid Build Coastguard Worker };
718*35238bceSAndroid Build Coastguard Worker /* ErrorsTest class */
719*35238bceSAndroid Build Coastguard Worker 
720*35238bceSAndroid Build Coastguard Worker /** @class FunctionalTest
721*35238bceSAndroid Build Coastguard Worker  *
722*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Program Pipeline Functional test cases.
723*35238bceSAndroid Build Coastguard Worker  *
724*35238bceSAndroid Build Coastguard Worker  *  @note  The test follows steps:
725*35238bceSAndroid Build Coastguard Worker  *
726*35238bceSAndroid Build Coastguard Worker  *             Create framebuffer with renderbuffer with color attachment and 1x1 pixel
727*35238bceSAndroid Build Coastguard Worker  *             size. Clean framebuffer content with black color.
728*35238bceSAndroid Build Coastguard Worker  *
729*35238bceSAndroid Build Coastguard Worker  *             Create and bind empty vertex array object.
730*35238bceSAndroid Build Coastguard Worker  *
731*35238bceSAndroid Build Coastguard Worker  *             Make sure that no GLSL program is being used.
732*35238bceSAndroid Build Coastguard Worker  *
733*35238bceSAndroid Build Coastguard Worker  *             Create two shader programs (with CreateShaderProgramv) - one vertex
734*35238bceSAndroid Build Coastguard Worker  *             shader and one fragment shader. The vertex shader shall output full
735*35238bceSAndroid Build Coastguard Worker  *             screen quad depending on VertexID. The fragment shader shall output red
736*35238bceSAndroid Build Coastguard Worker  *             color.
737*35238bceSAndroid Build Coastguard Worker  *
738*35238bceSAndroid Build Coastguard Worker  *             Create the Program Pipeline Object using CreateProgramPipelines
739*35238bceSAndroid Build Coastguard Worker  *             function. Bind it using BindProgramPipeline. Setup Program Pipeline
740*35238bceSAndroid Build Coastguard Worker  *             with the created shader programs using UseProgramStages.
741*35238bceSAndroid Build Coastguard Worker  *
742*35238bceSAndroid Build Coastguard Worker  *             Draw full screen quad.
743*35238bceSAndroid Build Coastguard Worker  *
744*35238bceSAndroid Build Coastguard Worker  *             Fetch framebuffer content with ReadPixels function. Check that,
745*35238bceSAndroid Build Coastguard Worker  *             framebuffer is filled with red color.
746*35238bceSAndroid Build Coastguard Worker  *
747*35238bceSAndroid Build Coastguard Worker  *             Release objects.
748*35238bceSAndroid Build Coastguard Worker  */
749*35238bceSAndroid Build Coastguard Worker class FunctionalTest : public deqp::TestCase
750*35238bceSAndroid Build Coastguard Worker {
751*35238bceSAndroid Build Coastguard Worker public:
752*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
753*35238bceSAndroid Build Coastguard Worker     FunctionalTest(deqp::Context &context);
754*35238bceSAndroid Build Coastguard Worker 
755*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
756*35238bceSAndroid Build Coastguard Worker 
757*35238bceSAndroid Build Coastguard Worker private:
758*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
759*35238bceSAndroid Build Coastguard Worker     FunctionalTest(const FunctionalTest &other);
760*35238bceSAndroid Build Coastguard Worker     FunctionalTest &operator=(const FunctionalTest &other);
761*35238bceSAndroid Build Coastguard Worker 
762*35238bceSAndroid Build Coastguard Worker     void prepareFramebuffer();
763*35238bceSAndroid Build Coastguard Worker     void prepareVertexArrayObject();
764*35238bceSAndroid Build Coastguard Worker     void prepareShaderPrograms();
765*35238bceSAndroid Build Coastguard Worker     void preparePipeline();
766*35238bceSAndroid Build Coastguard Worker     void draw();
767*35238bceSAndroid Build Coastguard Worker     bool checkFramebufferContent();
768*35238bceSAndroid Build Coastguard Worker     void clean();
769*35238bceSAndroid Build Coastguard Worker 
770*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
771*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo;
772*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo;
773*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_vao;
774*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_spo_v;
775*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_spo_f;
776*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_ppo;
777*35238bceSAndroid Build Coastguard Worker 
778*35238bceSAndroid Build Coastguard Worker     /* Private static variables. */
779*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_vertex_shader;
780*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader;
781*35238bceSAndroid Build Coastguard Worker };
782*35238bceSAndroid Build Coastguard Worker /* FunctionalTest class */
783*35238bceSAndroid Build Coastguard Worker } // namespace ProgramPipelines
784*35238bceSAndroid Build Coastguard Worker 
785*35238bceSAndroid Build Coastguard Worker namespace Queries
786*35238bceSAndroid Build Coastguard Worker {
787*35238bceSAndroid Build Coastguard Worker /** @class CreationTest
788*35238bceSAndroid Build Coastguard Worker  *
789*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Queries Creation test cases.
790*35238bceSAndroid Build Coastguard Worker  *
791*35238bceSAndroid Build Coastguard Worker  *  @note Test follows the steps:
792*35238bceSAndroid Build Coastguard Worker  *
793*35238bceSAndroid Build Coastguard Worker  *            Create at least two Query Objects names using GenQueries function.
794*35238bceSAndroid Build Coastguard Worker  *            Check them without binding, using IsQuery function. Expect GL_FALSE.
795*35238bceSAndroid Build Coastguard Worker  *
796*35238bceSAndroid Build Coastguard Worker  *            Create at least two Query Objects using CreateQueries function. Check
797*35238bceSAndroid Build Coastguard Worker  *            them without binding, using IsQuery function. Expect GL_TRUE.
798*35238bceSAndroid Build Coastguard Worker  *
799*35238bceSAndroid Build Coastguard Worker  *            Release objects.
800*35238bceSAndroid Build Coastguard Worker  *
801*35238bceSAndroid Build Coastguard Worker  *            Repeat test for all of following supported targets:
802*35238bceSAndroid Build Coastguard Worker  *             -  SAMPLES_PASSED,
803*35238bceSAndroid Build Coastguard Worker  *             -  ANY_SAMPLES_PASSED,
804*35238bceSAndroid Build Coastguard Worker  *             -  ANY_SAMPLES_PASSED_CONSERVATIVE,
805*35238bceSAndroid Build Coastguard Worker  *             -  TIME_ELAPSED,
806*35238bceSAndroid Build Coastguard Worker  *             -  TIMESTAMP,
807*35238bceSAndroid Build Coastguard Worker  *             -  PRIMITIVES_GENERATED and
808*35238bceSAndroid Build Coastguard Worker  *             -  TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN.
809*35238bceSAndroid Build Coastguard Worker  *
810*35238bceSAndroid Build Coastguard Worker  *  See Ref. OpenGL 4.5 Core Profile, Section 4.2.
811*35238bceSAndroid Build Coastguard Worker  */
812*35238bceSAndroid Build Coastguard Worker class CreationTest : public deqp::TestCase
813*35238bceSAndroid Build Coastguard Worker {
814*35238bceSAndroid Build Coastguard Worker public:
815*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
816*35238bceSAndroid Build Coastguard Worker     CreationTest(deqp::Context &context);
817*35238bceSAndroid Build Coastguard Worker 
818*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
819*35238bceSAndroid Build Coastguard Worker 
820*35238bceSAndroid Build Coastguard Worker private:
821*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
822*35238bceSAndroid Build Coastguard Worker     CreationTest(const CreationTest &other);
823*35238bceSAndroid Build Coastguard Worker     CreationTest &operator=(const CreationTest &other);
824*35238bceSAndroid Build Coastguard Worker };
825*35238bceSAndroid Build Coastguard Worker /* CreationTest class */
826*35238bceSAndroid Build Coastguard Worker 
827*35238bceSAndroid Build Coastguard Worker /** @class DefaultsTest
828*35238bceSAndroid Build Coastguard Worker  *
829*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Queries Default State test.
830*35238bceSAndroid Build Coastguard Worker  *
831*35238bceSAndroid Build Coastguard Worker  *  @note Test follows the steps:
832*35238bceSAndroid Build Coastguard Worker  *
833*35238bceSAndroid Build Coastguard Worker  *            Create Query Object with CreateQueries function.
834*35238bceSAndroid Build Coastguard Worker  *
835*35238bceSAndroid Build Coastguard Worker  *            Verify that default value of QUERY_RESULT queried with function
836*35238bceSAndroid Build Coastguard Worker  *            GetQueryObjectuiv is 0 or FALSE.
837*35238bceSAndroid Build Coastguard Worker  *
838*35238bceSAndroid Build Coastguard Worker  *            Verify that default value of QUERY_RESULT_AVAILABLE queried with
839*35238bceSAndroid Build Coastguard Worker  *            function GetQueryObjectiv is TRUE.
840*35238bceSAndroid Build Coastguard Worker  *
841*35238bceSAndroid Build Coastguard Worker  *            Release object.
842*35238bceSAndroid Build Coastguard Worker  *
843*35238bceSAndroid Build Coastguard Worker  *            Repeat test for all of following supported targets:
844*35238bceSAndroid Build Coastguard Worker  *             -  SAMPLES_PASSED,
845*35238bceSAndroid Build Coastguard Worker  *             -  ANY_SAMPLES_PASSED,
846*35238bceSAndroid Build Coastguard Worker  *             -  ANY_SAMPLES_PASSED_CONSERVATIVE,
847*35238bceSAndroid Build Coastguard Worker  *             -  TIME_ELAPSED,
848*35238bceSAndroid Build Coastguard Worker  *             -  TIMESTAMP,
849*35238bceSAndroid Build Coastguard Worker  *             -  PRIMITIVES_GENERATED and
850*35238bceSAndroid Build Coastguard Worker  *             -  TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN.
851*35238bceSAndroid Build Coastguard Worker  *
852*35238bceSAndroid Build Coastguard Worker  *  See Ref. OpenGL 4.5 Core Profile, Section 4.2.
853*35238bceSAndroid Build Coastguard Worker  */
854*35238bceSAndroid Build Coastguard Worker class DefaultsTest : public deqp::TestCase
855*35238bceSAndroid Build Coastguard Worker {
856*35238bceSAndroid Build Coastguard Worker public:
857*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
858*35238bceSAndroid Build Coastguard Worker     DefaultsTest(deqp::Context &context);
859*35238bceSAndroid Build Coastguard Worker 
860*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
861*35238bceSAndroid Build Coastguard Worker 
862*35238bceSAndroid Build Coastguard Worker private:
863*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
864*35238bceSAndroid Build Coastguard Worker     DefaultsTest(const DefaultsTest &other);
865*35238bceSAndroid Build Coastguard Worker     DefaultsTest &operator=(const DefaultsTest &other);
866*35238bceSAndroid Build Coastguard Worker 
867*35238bceSAndroid Build Coastguard Worker     /* Private member variables */
868*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_query_dsa;
869*35238bceSAndroid Build Coastguard Worker 
870*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
871*35238bceSAndroid Build Coastguard Worker     void prepare(const glw::GLenum target);
872*35238bceSAndroid Build Coastguard Worker     bool testQueryParameter(const glw::GLenum pname, const glw::GLuint expected_value, const glw::GLchar *target_name);
873*35238bceSAndroid Build Coastguard Worker     void clean();
874*35238bceSAndroid Build Coastguard Worker };
875*35238bceSAndroid Build Coastguard Worker /* DefaultsTest class */
876*35238bceSAndroid Build Coastguard Worker 
877*35238bceSAndroid Build Coastguard Worker /** @class ErrorsTest
878*35238bceSAndroid Build Coastguard Worker  *
879*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Queries Negative test.
880*35238bceSAndroid Build Coastguard Worker  *
881*35238bceSAndroid Build Coastguard Worker  *  @note The test follows steps:
882*35238bceSAndroid Build Coastguard Worker  *
883*35238bceSAndroid Build Coastguard Worker  *            Check that CreateQueries generates INVALID_VALUE error if number of
884*35238bceSAndroid Build Coastguard Worker  *            query objects to create is negative.
885*35238bceSAndroid Build Coastguard Worker  *
886*35238bceSAndroid Build Coastguard Worker  *            Check that CreateQueries generates INVALID_ENUM error if target is not
887*35238bceSAndroid Build Coastguard Worker  *            one of accepted values:
888*35238bceSAndroid Build Coastguard Worker  *             -  SAMPLES_PASSED,
889*35238bceSAndroid Build Coastguard Worker  *             -  ANY_SAMPLES_PASSED,
890*35238bceSAndroid Build Coastguard Worker  *             -  ANY_SAMPLES_PASSED_CONSERVATIVE,
891*35238bceSAndroid Build Coastguard Worker  *             -  TIME_ELAPSED,
892*35238bceSAndroid Build Coastguard Worker  *             -  TIMESTAMP,
893*35238bceSAndroid Build Coastguard Worker  *             -  PRIMITIVES_GENERATED or
894*35238bceSAndroid Build Coastguard Worker  *             -  TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN.
895*35238bceSAndroid Build Coastguard Worker  *
896*35238bceSAndroid Build Coastguard Worker  *            Check that GetQueryBufferObjectiv, GetQueryBufferObjectuiv,
897*35238bceSAndroid Build Coastguard Worker  *            GetQueryBufferObjecti64v and GetQueryBufferObjectui64v generate
898*35238bceSAndroid Build Coastguard Worker  *            INVALID_OPERATION error if <id> is not the name of a query object, or
899*35238bceSAndroid Build Coastguard Worker  *            if the query object named by <id> is currently active.
900*35238bceSAndroid Build Coastguard Worker  *
901*35238bceSAndroid Build Coastguard Worker  *            Check that GetQueryBufferObjectiv, GetQueryBufferObjectuiv,
902*35238bceSAndroid Build Coastguard Worker  *            GetQueryBufferObjecti64v and GetQueryBufferObjectui64v generate
903*35238bceSAndroid Build Coastguard Worker  *            INVALID_OPERATION error if <buffer> is not the name of an existing
904*35238bceSAndroid Build Coastguard Worker  *            buffer object.
905*35238bceSAndroid Build Coastguard Worker  *
906*35238bceSAndroid Build Coastguard Worker  *            Check that GetQueryBufferObjectiv, GetQueryBufferObjectuiv,
907*35238bceSAndroid Build Coastguard Worker  *            GetQueryBufferObjecti64v and GetQueryBufferObjectui64v generate
908*35238bceSAndroid Build Coastguard Worker  *            INVALID_ENUM error if <pname> is not QUERY_RESULT,
909*35238bceSAndroid Build Coastguard Worker  *            QUERY_RESULT_AVAILABLE, QUERY_RESULT_NO_WAIT or QUERY_TARGET.
910*35238bceSAndroid Build Coastguard Worker  *
911*35238bceSAndroid Build Coastguard Worker  *            Check that GetQueryBufferObjectiv, GetQueryBufferObjectuiv,
912*35238bceSAndroid Build Coastguard Worker  *            GetQueryBufferObjecti64v and GetQueryBufferObjectui64v generate
913*35238bceSAndroid Build Coastguard Worker  *            INVALID_OPERATION error if the query writes to a buffer object, and the
914*35238bceSAndroid Build Coastguard Worker  *            specified buffer offset would cause data to be written beyond the bounds
915*35238bceSAndroid Build Coastguard Worker  *            of that buffer object.
916*35238bceSAndroid Build Coastguard Worker  *
917*35238bceSAndroid Build Coastguard Worker  *            Check that GetQueryBufferObjectiv, GetQueryBufferObjectuiv,
918*35238bceSAndroid Build Coastguard Worker  *            GetQueryBufferObjecti64v and GetQueryBufferObjectui64v generate
919*35238bceSAndroid Build Coastguard Worker  *            INVALID_VALUE error if <offset> is negative.
920*35238bceSAndroid Build Coastguard Worker  *
921*35238bceSAndroid Build Coastguard Worker  *  See Ref. OpenGL 4.5 Core Profile, Section 4.2.
922*35238bceSAndroid Build Coastguard Worker  */
923*35238bceSAndroid Build Coastguard Worker class ErrorsTest : public deqp::TestCase
924*35238bceSAndroid Build Coastguard Worker {
925*35238bceSAndroid Build Coastguard Worker public:
926*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
927*35238bceSAndroid Build Coastguard Worker     ErrorsTest(deqp::Context &context);
928*35238bceSAndroid Build Coastguard Worker 
929*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
930*35238bceSAndroid Build Coastguard Worker 
931*35238bceSAndroid Build Coastguard Worker private:
932*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
933*35238bceSAndroid Build Coastguard Worker     ErrorsTest(const ErrorsTest &other);
934*35238bceSAndroid Build Coastguard Worker     ErrorsTest &operator=(const ErrorsTest &other);
935*35238bceSAndroid Build Coastguard Worker 
936*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
937*35238bceSAndroid Build Coastguard Worker     bool testNegativeNumberOfObjects();
938*35238bceSAndroid Build Coastguard Worker     bool testInvalidTarget();
939*35238bceSAndroid Build Coastguard Worker     bool testInvalidQueryName();
940*35238bceSAndroid Build Coastguard Worker     bool testInvalidBufferName();
941*35238bceSAndroid Build Coastguard Worker     bool testInvalidParameterName();
942*35238bceSAndroid Build Coastguard Worker     bool testBufferOverflow();
943*35238bceSAndroid Build Coastguard Worker     bool testBufferNegativeOffset();
944*35238bceSAndroid Build Coastguard Worker 
945*35238bceSAndroid Build Coastguard Worker     bool isTarget(glw::GLenum maybe_target);
946*35238bceSAndroid Build Coastguard Worker     bool isParameterName(glw::GLenum maybe_pname);
947*35238bceSAndroid Build Coastguard Worker 
948*35238bceSAndroid Build Coastguard Worker     /* Function pointers. */
949*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLGETQUERYBUFFEROBJECT)(glw::GLuint id, glw::GLuint buffer, glw::GLenum pname,
950*35238bceSAndroid Build Coastguard Worker                                                           glw::GLintptr offset);
951*35238bceSAndroid Build Coastguard Worker 
952*35238bceSAndroid Build Coastguard Worker     PFNGLGETQUERYBUFFEROBJECT m_pGetQueryBufferObjectiv;
953*35238bceSAndroid Build Coastguard Worker     PFNGLGETQUERYBUFFEROBJECT m_pGetQueryBufferObjectuiv;
954*35238bceSAndroid Build Coastguard Worker     PFNGLGETQUERYBUFFEROBJECT m_pGetQueryBufferObjecti64v;
955*35238bceSAndroid Build Coastguard Worker     PFNGLGETQUERYBUFFEROBJECT m_pGetQueryBufferObjectui64v;
956*35238bceSAndroid Build Coastguard Worker 
957*35238bceSAndroid Build Coastguard Worker     /* Private static variables. */
958*35238bceSAndroid Build Coastguard Worker     static const glw::GLenum s_targets[];
959*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_target_names[];
960*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_targets_count;
961*35238bceSAndroid Build Coastguard Worker };
962*35238bceSAndroid Build Coastguard Worker /* ErrorsTest class */
963*35238bceSAndroid Build Coastguard Worker 
964*35238bceSAndroid Build Coastguard Worker /** @class FunctionalTest
965*35238bceSAndroid Build Coastguard Worker  *
966*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Queries Functional test cases.
967*35238bceSAndroid Build Coastguard Worker  *
968*35238bceSAndroid Build Coastguard Worker  *  @note The test follows steps:
969*35238bceSAndroid Build Coastguard Worker  *
970*35238bceSAndroid Build Coastguard Worker  *            Create framebuffer with renderbuffer with color attachment and 1x1 pixel
971*35238bceSAndroid Build Coastguard Worker  *            size. Clean framebuffer content with black color.
972*35238bceSAndroid Build Coastguard Worker  *
973*35238bceSAndroid Build Coastguard Worker  *            Create and bind empty vertex array object.
974*35238bceSAndroid Build Coastguard Worker  *
975*35238bceSAndroid Build Coastguard Worker  *            Create buffer object. Bind it to TRANFORM_FEEDBACK_BUFFER binding point.
976*35238bceSAndroid Build Coastguard Worker  *            Bind buffer base to TRANFORM_FEEDBACK_BUFFER binding point with index 0.
977*35238bceSAndroid Build Coastguard Worker  *            Setup data storage of the buffer with size equal to 6 * sizeof(int).
978*35238bceSAndroid Build Coastguard Worker  *
979*35238bceSAndroid Build Coastguard Worker  *            Build GLSL program consisting of vertex and fragment shader stages.
980*35238bceSAndroid Build Coastguard Worker  *            Vertex shader shall output full screen quad depending on VertexID. The
981*35238bceSAndroid Build Coastguard Worker  *            VertexID shall be saved to transform feedback varying. Fragment shader
982*35238bceSAndroid Build Coastguard Worker  *            shall output red color.
983*35238bceSAndroid Build Coastguard Worker  *
984*35238bceSAndroid Build Coastguard Worker  *            Create query objects with CreateQueries function for following targets:
985*35238bceSAndroid Build Coastguard Worker  *             -  SAMPLES_PASSED,
986*35238bceSAndroid Build Coastguard Worker  *             -  PRIMITIVES_GENERATED,
987*35238bceSAndroid Build Coastguard Worker  *             -  TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN,
988*35238bceSAndroid Build Coastguard Worker  *             -  TIME_ELAPSED.
989*35238bceSAndroid Build Coastguard Worker  *
990*35238bceSAndroid Build Coastguard Worker  *            Begin query for every target.
991*35238bceSAndroid Build Coastguard Worker  *
992*35238bceSAndroid Build Coastguard Worker  *            Begin transform feedback for TRIANGLES primitive type.
993*35238bceSAndroid Build Coastguard Worker  *
994*35238bceSAndroid Build Coastguard Worker  *            Draw full screen quad with TRIANGLE_STRIP primitive type.
995*35238bceSAndroid Build Coastguard Worker  *
996*35238bceSAndroid Build Coastguard Worker  *            End transform feedback.
997*35238bceSAndroid Build Coastguard Worker  *
998*35238bceSAndroid Build Coastguard Worker  *            End all queries.
999*35238bceSAndroid Build Coastguard Worker  *
1000*35238bceSAndroid Build Coastguard Worker  *            Call Finish function.
1001*35238bceSAndroid Build Coastguard Worker  *
1002*35238bceSAndroid Build Coastguard Worker  *            Check that framebuffer is filled with red color.
1003*35238bceSAndroid Build Coastguard Worker  *
1004*35238bceSAndroid Build Coastguard Worker  *            Check that transform feedback buffer contains successive primitive
1005*35238bceSAndroid Build Coastguard Worker  *            vertex ids (0, 1, 2,  2, 1, 3).
1006*35238bceSAndroid Build Coastguard Worker  *
1007*35238bceSAndroid Build Coastguard Worker  *            For every query objects, using GetQueryBufferObjectiv,
1008*35238bceSAndroid Build Coastguard Worker  *            GetQueryBufferObjectuiv, GetQueryBufferObjecti64v,
1009*35238bceSAndroid Build Coastguard Worker  *            GetQueryBufferObjectui64v functions do following comparisons:
1010*35238bceSAndroid Build Coastguard Worker  *
1011*35238bceSAndroid Build Coastguard Worker  *                Check that value of parameter QUERY_TARGET is equal to target.
1012*35238bceSAndroid Build Coastguard Worker  *
1013*35238bceSAndroid Build Coastguard Worker  *                Check that value of parameter QUERY_RESULT_AVAILABLE is TRUE.
1014*35238bceSAndroid Build Coastguard Worker  *
1015*35238bceSAndroid Build Coastguard Worker  *                Check that value of parameter QUERY_RESULT and QUERY_RESULT_NO_WAIT:
1016*35238bceSAndroid Build Coastguard Worker  *                 -  is equal to 1 if target is SAMPLES_PASSED; or
1017*35238bceSAndroid Build Coastguard Worker  *                 -  is equal to 2 if target is PRIMITIVES_GENERATED or
1018*35238bceSAndroid Build Coastguard Worker  *                    TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN; or
1019*35238bceSAndroid Build Coastguard Worker  *                 -  is positive if target is TIME_ELAPSED.
1020*35238bceSAndroid Build Coastguard Worker  *
1021*35238bceSAndroid Build Coastguard Worker  *            Release objects.
1022*35238bceSAndroid Build Coastguard Worker  */
1023*35238bceSAndroid Build Coastguard Worker class FunctionalTest : public deqp::TestCase
1024*35238bceSAndroid Build Coastguard Worker {
1025*35238bceSAndroid Build Coastguard Worker public:
1026*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
1027*35238bceSAndroid Build Coastguard Worker     FunctionalTest(deqp::Context &context);
1028*35238bceSAndroid Build Coastguard Worker 
1029*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
1030*35238bceSAndroid Build Coastguard Worker 
1031*35238bceSAndroid Build Coastguard Worker private:
1032*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
1033*35238bceSAndroid Build Coastguard Worker     FunctionalTest(const FunctionalTest &other);
1034*35238bceSAndroid Build Coastguard Worker     FunctionalTest &operator=(const FunctionalTest &other);
1035*35238bceSAndroid Build Coastguard Worker 
1036*35238bceSAndroid Build Coastguard Worker     /* Function pointers. */
1037*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLGETQUERYBUFFEROBJECT)(glw::GLuint id, glw::GLuint buffer, glw::GLenum pname,
1038*35238bceSAndroid Build Coastguard Worker                                                           glw::GLintptr offset);
1039*35238bceSAndroid Build Coastguard Worker 
1040*35238bceSAndroid Build Coastguard Worker     PFNGLGETQUERYBUFFEROBJECT m_pGetQueryBufferObjectiv;
1041*35238bceSAndroid Build Coastguard Worker     PFNGLGETQUERYBUFFEROBJECT m_pGetQueryBufferObjectuiv;
1042*35238bceSAndroid Build Coastguard Worker     PFNGLGETQUERYBUFFEROBJECT m_pGetQueryBufferObjecti64v;
1043*35238bceSAndroid Build Coastguard Worker     PFNGLGETQUERYBUFFEROBJECT m_pGetQueryBufferObjectui64v;
1044*35238bceSAndroid Build Coastguard Worker 
1045*35238bceSAndroid Build Coastguard Worker     /* Private templated functions. */
1046*35238bceSAndroid Build Coastguard Worker     template <typename T>
1047*35238bceSAndroid Build Coastguard Worker     static bool equal(T, T);
1048*35238bceSAndroid Build Coastguard Worker 
1049*35238bceSAndroid Build Coastguard Worker     template <typename T>
1050*35238bceSAndroid Build Coastguard Worker     static bool less(T, T);
1051*35238bceSAndroid Build Coastguard Worker 
1052*35238bceSAndroid Build Coastguard Worker     template <typename T>
1053*35238bceSAndroid Build Coastguard Worker     void GetQueryBufferObject(glw::GLuint id, glw::GLuint buffer, glw::GLenum pname, glw::GLintptr offset);
1054*35238bceSAndroid Build Coastguard Worker 
1055*35238bceSAndroid Build Coastguard Worker     template <typename T>
1056*35238bceSAndroid Build Coastguard Worker     bool checkQueryBufferObject(glw::GLuint query, glw::GLenum pname, T expected_value, bool (*comparison)(T, T));
1057*35238bceSAndroid Build Coastguard Worker 
1058*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
1059*35238bceSAndroid Build Coastguard Worker     void prepareView();
1060*35238bceSAndroid Build Coastguard Worker     void prepareVertexArray();
1061*35238bceSAndroid Build Coastguard Worker     void prepareBuffers();
1062*35238bceSAndroid Build Coastguard Worker     void prepareQueries();
1063*35238bceSAndroid Build Coastguard Worker     void prepareProgram();
1064*35238bceSAndroid Build Coastguard Worker     void draw();
1065*35238bceSAndroid Build Coastguard Worker     bool checkView();
1066*35238bceSAndroid Build Coastguard Worker     bool checkXFB();
1067*35238bceSAndroid Build Coastguard Worker     void clean();
1068*35238bceSAndroid Build Coastguard Worker 
1069*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
1070*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo;
1071*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo;
1072*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_vao;
1073*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_bo_query;
1074*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_bo_xfb;
1075*35238bceSAndroid Build Coastguard Worker     glw::GLuint *m_qo;
1076*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_po;
1077*35238bceSAndroid Build Coastguard Worker 
1078*35238bceSAndroid Build Coastguard Worker     /* Private static variables. */
1079*35238bceSAndroid Build Coastguard Worker     static const glw::GLenum s_targets[];
1080*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_targets_count;
1081*35238bceSAndroid Build Coastguard Worker 
1082*35238bceSAndroid Build Coastguard Worker     static const glw::GLint s_results[];
1083*35238bceSAndroid Build Coastguard Worker 
1084*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar s_vertex_shader[];
1085*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar s_fragment_shader[];
1086*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_xfb_varying_name;
1087*35238bceSAndroid Build Coastguard Worker };
1088*35238bceSAndroid Build Coastguard Worker /* FunctionalTest class */
1089*35238bceSAndroid Build Coastguard Worker 
1090*35238bceSAndroid Build Coastguard Worker /** @class ReuseTest
1091*35238bceSAndroid Build Coastguard Worker  *
1092*35238bceSAndroid Build Coastguard Worker  *  @brief Test cases for recycling query handles as different types.
1093*35238bceSAndroid Build Coastguard Worker  *
1094*35238bceSAndroid Build Coastguard Worker  *  @note Test follows the steps:
1095*35238bceSAndroid Build Coastguard Worker  *
1096*35238bceSAndroid Build Coastguard Worker  *            Use the EXT_disjoint_timer_query extension to allocate a
1097*35238bceSAndroid Build Coastguard Worker  *            GL_TIMESTAMP_EXT type query.
1098*35238bceSAndroid Build Coastguard Worker  *
1099*35238bceSAndroid Build Coastguard Worker  *            Try to delete and reuse the object as a GL_TIME_ELAPSED
1100*35238bceSAndroid Build Coastguard Worker  *            type query.
1101*35238bceSAndroid Build Coastguard Worker  */
1102*35238bceSAndroid Build Coastguard Worker class ReuseTest : public deqp::TestCase
1103*35238bceSAndroid Build Coastguard Worker {
1104*35238bceSAndroid Build Coastguard Worker public:
1105*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
1106*35238bceSAndroid Build Coastguard Worker     ReuseTest(deqp::Context &context);
1107*35238bceSAndroid Build Coastguard Worker 
1108*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
1109*35238bceSAndroid Build Coastguard Worker 
1110*35238bceSAndroid Build Coastguard Worker private:
1111*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
1112*35238bceSAndroid Build Coastguard Worker     ReuseTest(const ReuseTest &other);
1113*35238bceSAndroid Build Coastguard Worker     ReuseTest &operator=(const ReuseTest &other);
1114*35238bceSAndroid Build Coastguard Worker };
1115*35238bceSAndroid Build Coastguard Worker /* ReuseTest class */
1116*35238bceSAndroid Build Coastguard Worker 
1117*35238bceSAndroid Build Coastguard Worker } // namespace Queries
1118*35238bceSAndroid Build Coastguard Worker 
1119*35238bceSAndroid Build Coastguard Worker namespace Buffers
1120*35238bceSAndroid Build Coastguard Worker {
1121*35238bceSAndroid Build Coastguard Worker /** @class CreationTest
1122*35238bceSAndroid Build Coastguard Worker  *
1123*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Buffers Creation test cases.
1124*35238bceSAndroid Build Coastguard Worker  *
1125*35238bceSAndroid Build Coastguard Worker  *         Test follows the steps:
1126*35238bceSAndroid Build Coastguard Worker  *
1127*35238bceSAndroid Build Coastguard Worker  *             Create at least two buffer objects using GenBuffers function. Check
1128*35238bceSAndroid Build Coastguard Worker  *             them without binding, using IsBuffer function. Expect GL_FALSE.
1129*35238bceSAndroid Build Coastguard Worker  *
1130*35238bceSAndroid Build Coastguard Worker  *             Create at least two buffer objects using CreateBuffers function. Check
1131*35238bceSAndroid Build Coastguard Worker  *             them without binding, using IsBuffer function. Expect GL_TRUE.
1132*35238bceSAndroid Build Coastguard Worker  *
1133*35238bceSAndroid Build Coastguard Worker  *             Release objects.
1134*35238bceSAndroid Build Coastguard Worker  */
1135*35238bceSAndroid Build Coastguard Worker class CreationTest : public deqp::TestCase
1136*35238bceSAndroid Build Coastguard Worker {
1137*35238bceSAndroid Build Coastguard Worker public:
1138*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
1139*35238bceSAndroid Build Coastguard Worker     CreationTest(deqp::Context &context);
1140*35238bceSAndroid Build Coastguard Worker 
1141*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
1142*35238bceSAndroid Build Coastguard Worker 
1143*35238bceSAndroid Build Coastguard Worker private:
1144*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
1145*35238bceSAndroid Build Coastguard Worker     CreationTest(const CreationTest &other);
1146*35238bceSAndroid Build Coastguard Worker     CreationTest &operator=(const CreationTest &other);
1147*35238bceSAndroid Build Coastguard Worker };
1148*35238bceSAndroid Build Coastguard Worker /* CreationTest class */
1149*35238bceSAndroid Build Coastguard Worker 
1150*35238bceSAndroid Build Coastguard Worker /** @class DataTest
1151*35238bceSAndroid Build Coastguard Worker  *
1152*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Buffers Data test cases.
1153*35238bceSAndroid Build Coastguard Worker  *
1154*35238bceSAndroid Build Coastguard Worker  *         Test follows the steps:
1155*35238bceSAndroid Build Coastguard Worker  *
1156*35238bceSAndroid Build Coastguard Worker  *             Prepare test case with following steps:
1157*35238bceSAndroid Build Coastguard Worker  *
1158*35238bceSAndroid Build Coastguard Worker  *             Create buffer object using CreateBuffers.
1159*35238bceSAndroid Build Coastguard Worker  *
1160*35238bceSAndroid Build Coastguard Worker  *             Create data storage using given function and reference data.
1161*35238bceSAndroid Build Coastguard Worker  *
1162*35238bceSAndroid Build Coastguard Worker  *             Bind buffer.
1163*35238bceSAndroid Build Coastguard Worker  *
1164*35238bceSAndroid Build Coastguard Worker  *             Check buffer content using MapBuffer function.
1165*35238bceSAndroid Build Coastguard Worker  *
1166*35238bceSAndroid Build Coastguard Worker  *             Release objects.
1167*35238bceSAndroid Build Coastguard Worker  *
1168*35238bceSAndroid Build Coastguard Worker  *             Repeat the test case with function for data creation:
1169*35238bceSAndroid Build Coastguard Worker  *              -  NamedBufferData,
1170*35238bceSAndroid Build Coastguard Worker  *              -  NamedBufferData and it with NamedBufferSubData,
1171*35238bceSAndroid Build Coastguard Worker  *              -  NamedBufferStorage,
1172*35238bceSAndroid Build Coastguard Worker  *              -  CopyNamedBufferSubData from auxiliary buffer.
1173*35238bceSAndroid Build Coastguard Worker  *
1174*35238bceSAndroid Build Coastguard Worker  *             If NamedBufferData function is used then repeat the test case for
1175*35238bceSAndroid Build Coastguard Worker  *             usage:
1176*35238bceSAndroid Build Coastguard Worker  *              -  STREAM_DRAW,
1177*35238bceSAndroid Build Coastguard Worker  *              -  STREAM_READ,
1178*35238bceSAndroid Build Coastguard Worker  *              -  STREAM_COPY,
1179*35238bceSAndroid Build Coastguard Worker  *              -  STATIC_DRAW,
1180*35238bceSAndroid Build Coastguard Worker  *              -  STATIC_READ,
1181*35238bceSAndroid Build Coastguard Worker  *              -  STATIC_COPY,
1182*35238bceSAndroid Build Coastguard Worker  *              -  DYNAMIC_DRAW,
1183*35238bceSAndroid Build Coastguard Worker  *              -  DYNAMIC_READ, and
1184*35238bceSAndroid Build Coastguard Worker  *              -  DYNAMIC_COPY.
1185*35238bceSAndroid Build Coastguard Worker  *
1186*35238bceSAndroid Build Coastguard Worker  *             If NamedBufferStorage function is used then repeat the test case using
1187*35238bceSAndroid Build Coastguard Worker  *             flag MAP_READ_BIT and one of following:
1188*35238bceSAndroid Build Coastguard Worker  *              -  DYNAMIC_STORAGE_BIT,
1189*35238bceSAndroid Build Coastguard Worker  *              -  MAP_WRITE_BIT,
1190*35238bceSAndroid Build Coastguard Worker  *              -  MAP_PERSISTENT_BIT,
1191*35238bceSAndroid Build Coastguard Worker  *              -  MAP_COHERENT_BIT and
1192*35238bceSAndroid Build Coastguard Worker  *              -  CLIENT_STORAGE_BIT.
1193*35238bceSAndroid Build Coastguard Worker  */
1194*35238bceSAndroid Build Coastguard Worker class DataTest : public deqp::TestCase
1195*35238bceSAndroid Build Coastguard Worker {
1196*35238bceSAndroid Build Coastguard Worker public:
1197*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
1198*35238bceSAndroid Build Coastguard Worker     DataTest(deqp::Context &context);
1199*35238bceSAndroid Build Coastguard Worker 
1200*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
1201*35238bceSAndroid Build Coastguard Worker 
1202*35238bceSAndroid Build Coastguard Worker private:
1203*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
1204*35238bceSAndroid Build Coastguard Worker     DataTest(const DataTest &other);
1205*35238bceSAndroid Build Coastguard Worker     DataTest &operator=(const DataTest &other);
1206*35238bceSAndroid Build Coastguard Worker 
1207*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLNAMEDBUFFERDATA)(glw::GLuint buffer, glw::GLsizeiptr size, const glw::GLvoid *data,
1208*35238bceSAndroid Build Coastguard Worker                                                      glw::GLenum usage);
1209*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLNAMEDBUFFERSUBDATA)(glw::GLuint buffer, glw::GLintptr offset, glw::GLsizeiptr size,
1210*35238bceSAndroid Build Coastguard Worker                                                         const glw::GLvoid *data);
1211*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLNAMEDBUFFERSTORAGE)(glw::GLuint buffer, glw::GLsizeiptr size,
1212*35238bceSAndroid Build Coastguard Worker                                                         const glw::GLvoid *data, glw::GLbitfield flags);
1213*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLCOPYNAMEDBUFFERSUBDATA)(glw::GLuint readBuffer, glw::GLuint writeBuffer,
1214*35238bceSAndroid Build Coastguard Worker                                                             glw::GLintptr readOffset, glw::GLintptr writeOffset,
1215*35238bceSAndroid Build Coastguard Worker                                                             glw::GLsizeiptr size);
1216*35238bceSAndroid Build Coastguard Worker 
1217*35238bceSAndroid Build Coastguard Worker     PFNGLNAMEDBUFFERDATA m_pNamedBufferData;
1218*35238bceSAndroid Build Coastguard Worker     PFNGLNAMEDBUFFERSUBDATA m_pNamedBufferSubData;
1219*35238bceSAndroid Build Coastguard Worker     PFNGLNAMEDBUFFERSTORAGE m_pNamedBufferStorage;
1220*35238bceSAndroid Build Coastguard Worker     PFNGLCOPYNAMEDBUFFERSUBDATA m_pCopyNamedBufferSubData;
1221*35238bceSAndroid Build Coastguard Worker 
1222*35238bceSAndroid Build Coastguard Worker     bool TestCase(void (DataTest::*UploadDataFunction)(glw::GLuint, glw::GLenum), glw::GLenum parameter);
1223*35238bceSAndroid Build Coastguard Worker 
1224*35238bceSAndroid Build Coastguard Worker     void UploadUsingNamedBufferData(glw::GLuint id, glw::GLenum parameter);
1225*35238bceSAndroid Build Coastguard Worker     void UploadUsingNamedBufferSubData(glw::GLuint id, glw::GLenum parameter);
1226*35238bceSAndroid Build Coastguard Worker     void UploadUsingNamedBufferStorage(glw::GLuint id, glw::GLenum parameter);
1227*35238bceSAndroid Build Coastguard Worker     void UploadUsingCopyNamedBufferSubData(glw::GLuint id, glw::GLenum parameter);
1228*35238bceSAndroid Build Coastguard Worker 
1229*35238bceSAndroid Build Coastguard Worker     bool compare(const glw::GLuint *data, const glw::GLuint *reference, const glw::GLsizei count);
1230*35238bceSAndroid Build Coastguard Worker     void LogFail(void (DataTest::*UploadDataFunction)(glw::GLuint, glw::GLenum), glw::GLenum parameter,
1231*35238bceSAndroid Build Coastguard Worker                  const glw::GLuint *data, const glw::GLuint *reference, const glw::GLsizei count);
1232*35238bceSAndroid Build Coastguard Worker     void LogError(void (DataTest::*UploadDataFunction)(glw::GLuint, glw::GLenum), glw::GLenum parameter);
1233*35238bceSAndroid Build Coastguard Worker 
1234*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_reference[];
1235*35238bceSAndroid Build Coastguard Worker     static const glw::GLsizei s_reference_size;
1236*35238bceSAndroid Build Coastguard Worker     static const glw::GLsizei s_reference_count;
1237*35238bceSAndroid Build Coastguard Worker };
1238*35238bceSAndroid Build Coastguard Worker /* DataTest class */
1239*35238bceSAndroid Build Coastguard Worker 
1240*35238bceSAndroid Build Coastguard Worker /** @class ClearTest
1241*35238bceSAndroid Build Coastguard Worker  *
1242*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Buffers Clear test cases.
1243*35238bceSAndroid Build Coastguard Worker  *
1244*35238bceSAndroid Build Coastguard Worker  *         Test follows the steps:
1245*35238bceSAndroid Build Coastguard Worker  *
1246*35238bceSAndroid Build Coastguard Worker  *             Prepare test case with following steps:
1247*35238bceSAndroid Build Coastguard Worker  *
1248*35238bceSAndroid Build Coastguard Worker  *                 Create buffer object using CreateBuffers.
1249*35238bceSAndroid Build Coastguard Worker  *
1250*35238bceSAndroid Build Coastguard Worker  *                 Create data storage using NamedBufferData without data
1251*35238bceSAndroid Build Coastguard Worker  *                 specification.
1252*35238bceSAndroid Build Coastguard Worker  *
1253*35238bceSAndroid Build Coastguard Worker  *                 Clear buffer content using given function.
1254*35238bceSAndroid Build Coastguard Worker  *
1255*35238bceSAndroid Build Coastguard Worker  *                 Bind buffer.
1256*35238bceSAndroid Build Coastguard Worker  *
1257*35238bceSAndroid Build Coastguard Worker  *                 Check buffer content using MapBuffer function.
1258*35238bceSAndroid Build Coastguard Worker  *
1259*35238bceSAndroid Build Coastguard Worker  *                 Release objects.
1260*35238bceSAndroid Build Coastguard Worker  *
1261*35238bceSAndroid Build Coastguard Worker  *             Repeat test case for following clear functions:
1262*35238bceSAndroid Build Coastguard Worker  *              -  ClearNamedBufferData and
1263*35238bceSAndroid Build Coastguard Worker  *              -  ClearNamedBufferSubData.
1264*35238bceSAndroid Build Coastguard Worker  *
1265*35238bceSAndroid Build Coastguard Worker  *             Repeat test case for following internal formats:
1266*35238bceSAndroid Build Coastguard Worker  *              -  GL_R8,
1267*35238bceSAndroid Build Coastguard Worker  *              -  GL_R16,
1268*35238bceSAndroid Build Coastguard Worker  *              -  GL_R16F,
1269*35238bceSAndroid Build Coastguard Worker  *              -  GL_R32F,
1270*35238bceSAndroid Build Coastguard Worker  *              -  GL_R8I,
1271*35238bceSAndroid Build Coastguard Worker  *              -  GL_R16I,
1272*35238bceSAndroid Build Coastguard Worker  *              -  GL_R32I,
1273*35238bceSAndroid Build Coastguard Worker  *              -  GL_R8UI,
1274*35238bceSAndroid Build Coastguard Worker  *              -  GL_R16UI,
1275*35238bceSAndroid Build Coastguard Worker  *              -  GL_R32UI,
1276*35238bceSAndroid Build Coastguard Worker  *              -  GL_RG8,
1277*35238bceSAndroid Build Coastguard Worker  *              -  GL_RG16,
1278*35238bceSAndroid Build Coastguard Worker  *              -  GL_RG16F,
1279*35238bceSAndroid Build Coastguard Worker  *              -  GL_RG32F,
1280*35238bceSAndroid Build Coastguard Worker  *              -  GL_RG8I,
1281*35238bceSAndroid Build Coastguard Worker  *              -  GL_RG16I,
1282*35238bceSAndroid Build Coastguard Worker  *              -  GL_RG32I,
1283*35238bceSAndroid Build Coastguard Worker  *              -  GL_RG8UI,
1284*35238bceSAndroid Build Coastguard Worker  *              -  GL_RG16UI,
1285*35238bceSAndroid Build Coastguard Worker  *              -  GL_RG32UI,
1286*35238bceSAndroid Build Coastguard Worker  *              -  GL_RGB32F,
1287*35238bceSAndroid Build Coastguard Worker  *              -  GL_RGB32I,
1288*35238bceSAndroid Build Coastguard Worker  *              -  GL_RGB32UI,
1289*35238bceSAndroid Build Coastguard Worker  *              -  GL_RGBA8,
1290*35238bceSAndroid Build Coastguard Worker  *              -  GL_RGBA16,
1291*35238bceSAndroid Build Coastguard Worker  *              -  GL_RGBA16F,
1292*35238bceSAndroid Build Coastguard Worker  *              -  GL_RGBA32F,
1293*35238bceSAndroid Build Coastguard Worker  *              -  GL_RGBA8I,
1294*35238bceSAndroid Build Coastguard Worker  *              -  GL_RGBA16I,
1295*35238bceSAndroid Build Coastguard Worker  *              -  GL_RGBA32I,
1296*35238bceSAndroid Build Coastguard Worker  *              -  GL_RGBA8UI,
1297*35238bceSAndroid Build Coastguard Worker  *              -  GL_RGBA16UI and
1298*35238bceSAndroid Build Coastguard Worker  *              -  GL_RGBA32UI.
1299*35238bceSAndroid Build Coastguard Worker  */
1300*35238bceSAndroid Build Coastguard Worker class ClearTest : public deqp::TestCase
1301*35238bceSAndroid Build Coastguard Worker {
1302*35238bceSAndroid Build Coastguard Worker public:
1303*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
1304*35238bceSAndroid Build Coastguard Worker     ClearTest(deqp::Context &context);
1305*35238bceSAndroid Build Coastguard Worker 
1306*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
1307*35238bceSAndroid Build Coastguard Worker 
1308*35238bceSAndroid Build Coastguard Worker private:
1309*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
1310*35238bceSAndroid Build Coastguard Worker     ClearTest(const ClearTest &other);
1311*35238bceSAndroid Build Coastguard Worker     ClearTest &operator=(const ClearTest &other);
1312*35238bceSAndroid Build Coastguard Worker 
1313*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLNAMEDBUFFERDATA)(glw::GLuint buffer, glw::GLsizeiptr size, const glw::GLvoid *data,
1314*35238bceSAndroid Build Coastguard Worker                                                      glw::GLenum usage);
1315*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLCLEARNAMEDBUFFERDATA)(glw::GLuint buffer, glw::GLenum internalformat,
1316*35238bceSAndroid Build Coastguard Worker                                                           glw::GLenum format, glw::GLenum type,
1317*35238bceSAndroid Build Coastguard Worker                                                           const glw::GLvoid *data);
1318*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLCLEARNAMEDBUFFERSUBDATA)(glw::GLuint buffer, glw::GLenum internalformat,
1319*35238bceSAndroid Build Coastguard Worker                                                              glw::GLintptr offset, glw::GLsizeiptr size,
1320*35238bceSAndroid Build Coastguard Worker                                                              glw::GLenum format, glw::GLenum type,
1321*35238bceSAndroid Build Coastguard Worker                                                              const glw::GLvoid *data);
1322*35238bceSAndroid Build Coastguard Worker 
1323*35238bceSAndroid Build Coastguard Worker     PFNGLNAMEDBUFFERDATA m_pNamedBufferData;
1324*35238bceSAndroid Build Coastguard Worker     PFNGLCLEARNAMEDBUFFERDATA m_pClearNamedBufferData;
1325*35238bceSAndroid Build Coastguard Worker     PFNGLCLEARNAMEDBUFFERSUBDATA m_pClearNamedBufferSubData;
1326*35238bceSAndroid Build Coastguard Worker 
1327*35238bceSAndroid Build Coastguard Worker     template <typename T, bool USE_SUB_DATA>
1328*35238bceSAndroid Build Coastguard Worker     bool TestClearNamedBufferData(glw::GLenum internalformat, glw::GLsizei count, glw::GLenum format, glw::GLenum type,
1329*35238bceSAndroid Build Coastguard Worker                                   T *data);
1330*35238bceSAndroid Build Coastguard Worker 
1331*35238bceSAndroid Build Coastguard Worker     template <bool USE_SUB_DATA>
1332*35238bceSAndroid Build Coastguard Worker     void ClearNamedBuffer(glw::GLuint buffer, glw::GLenum internalformat, glw::GLsizei size, glw::GLenum format,
1333*35238bceSAndroid Build Coastguard Worker                           glw::GLenum type, glw::GLvoid *data);
1334*35238bceSAndroid Build Coastguard Worker 
1335*35238bceSAndroid Build Coastguard Worker     template <typename T>
1336*35238bceSAndroid Build Coastguard Worker     bool Compare(const T *data, const T *reference, const glw::GLsizei count);
1337*35238bceSAndroid Build Coastguard Worker 
1338*35238bceSAndroid Build Coastguard Worker     template <typename T>
1339*35238bceSAndroid Build Coastguard Worker     void LogFail(bool use_sub_data, glw::GLenum internalformat, const T *data, const T *reference,
1340*35238bceSAndroid Build Coastguard Worker                  const glw::GLsizei count);
1341*35238bceSAndroid Build Coastguard Worker 
1342*35238bceSAndroid Build Coastguard Worker     void LogError(bool use_sub_data, glw::GLenum internalformat);
1343*35238bceSAndroid Build Coastguard Worker };
1344*35238bceSAndroid Build Coastguard Worker /* ClearTest class */
1345*35238bceSAndroid Build Coastguard Worker 
1346*35238bceSAndroid Build Coastguard Worker /** @class MapReadOnlyTest
1347*35238bceSAndroid Build Coastguard Worker  *
1348*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Buffers Map Read Only test cases.
1349*35238bceSAndroid Build Coastguard Worker  *
1350*35238bceSAndroid Build Coastguard Worker  *         Test follows the steps:
1351*35238bceSAndroid Build Coastguard Worker  *
1352*35238bceSAndroid Build Coastguard Worker  *             Create buffer object using CreateBuffers.
1353*35238bceSAndroid Build Coastguard Worker  *
1354*35238bceSAndroid Build Coastguard Worker  *             Create data storage using NamedBufferData function and reference
1355*35238bceSAndroid Build Coastguard Worker  *             data.
1356*35238bceSAndroid Build Coastguard Worker  *
1357*35238bceSAndroid Build Coastguard Worker  *             Map buffer with MapNamedBuffer function and READ_ONLY access flag.
1358*35238bceSAndroid Build Coastguard Worker  *
1359*35238bceSAndroid Build Coastguard Worker  *             Compare mapped buffer content with reference data.
1360*35238bceSAndroid Build Coastguard Worker  *
1361*35238bceSAndroid Build Coastguard Worker  *             Unmap buffer using UnmapNamedBuffer. Test if UnmapNamedBuffer
1362*35238bceSAndroid Build Coastguard Worker  *             returned GL_TRUE.
1363*35238bceSAndroid Build Coastguard Worker  *
1364*35238bceSAndroid Build Coastguard Worker  *             Release buffer.
1365*35238bceSAndroid Build Coastguard Worker  */
1366*35238bceSAndroid Build Coastguard Worker class MapReadOnlyTest : public deqp::TestCase
1367*35238bceSAndroid Build Coastguard Worker {
1368*35238bceSAndroid Build Coastguard Worker public:
1369*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
1370*35238bceSAndroid Build Coastguard Worker     MapReadOnlyTest(deqp::Context &context);
1371*35238bceSAndroid Build Coastguard Worker 
1372*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
1373*35238bceSAndroid Build Coastguard Worker 
1374*35238bceSAndroid Build Coastguard Worker private:
1375*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
1376*35238bceSAndroid Build Coastguard Worker     MapReadOnlyTest(const MapReadOnlyTest &other);
1377*35238bceSAndroid Build Coastguard Worker     MapReadOnlyTest &operator=(const MapReadOnlyTest &other);
1378*35238bceSAndroid Build Coastguard Worker 
1379*35238bceSAndroid Build Coastguard Worker     /* API entry points. */
1380*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLNAMEDBUFFERDATA)(glw::GLuint buffer, glw::GLsizeiptr size, const glw::GLvoid *data,
1381*35238bceSAndroid Build Coastguard Worker                                                      glw::GLenum usage);
1382*35238bceSAndroid Build Coastguard Worker     typedef void *(GLW_APIENTRY *PFNGLMAPNAMEDBUFFER)(glw::GLuint buffer, glw::GLenum access);
1383*35238bceSAndroid Build Coastguard Worker     typedef glw::GLboolean(GLW_APIENTRY *PFNGLUNMAPNAMEDBUFFER)(glw::GLuint buffer);
1384*35238bceSAndroid Build Coastguard Worker 
1385*35238bceSAndroid Build Coastguard Worker     PFNGLNAMEDBUFFERDATA m_pNamedBufferData;
1386*35238bceSAndroid Build Coastguard Worker     PFNGLMAPNAMEDBUFFER m_pMapNamedBuffer;
1387*35238bceSAndroid Build Coastguard Worker     PFNGLUNMAPNAMEDBUFFER m_pUnmapNamedBuffer;
1388*35238bceSAndroid Build Coastguard Worker 
1389*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_reference[];      //<! Reference data.
1390*35238bceSAndroid Build Coastguard Worker     static const glw::GLsizei s_reference_size;  //<! Reference data size.
1391*35238bceSAndroid Build Coastguard Worker     static const glw::GLsizei s_reference_count; //<! Reference data count (number of GLuint elements).
1392*35238bceSAndroid Build Coastguard Worker };
1393*35238bceSAndroid Build Coastguard Worker /* MapReadOnlyTest class */
1394*35238bceSAndroid Build Coastguard Worker 
1395*35238bceSAndroid Build Coastguard Worker /** @class MapReadWriteTest
1396*35238bceSAndroid Build Coastguard Worker  *
1397*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Buffers Map Read Write test cases.
1398*35238bceSAndroid Build Coastguard Worker  *
1399*35238bceSAndroid Build Coastguard Worker  *         Test follows the steps:
1400*35238bceSAndroid Build Coastguard Worker  *
1401*35238bceSAndroid Build Coastguard Worker  *             Create buffer object using CreateBuffers.
1402*35238bceSAndroid Build Coastguard Worker  *
1403*35238bceSAndroid Build Coastguard Worker  *             Create data storage using NamedBufferData function and reference
1404*35238bceSAndroid Build Coastguard Worker  *             data.
1405*35238bceSAndroid Build Coastguard Worker  *
1406*35238bceSAndroid Build Coastguard Worker  *             Map buffer with MapNamedBuffer function and READ_WRITE access flag.
1407*35238bceSAndroid Build Coastguard Worker  *
1408*35238bceSAndroid Build Coastguard Worker  *             Compare mapped buffer content with reference.
1409*35238bceSAndroid Build Coastguard Worker  *
1410*35238bceSAndroid Build Coastguard Worker  *             Write to the mapped buffer inverted reference content.
1411*35238bceSAndroid Build Coastguard Worker  *
1412*35238bceSAndroid Build Coastguard Worker  *             Unmap buffer.
1413*35238bceSAndroid Build Coastguard Worker  *
1414*35238bceSAndroid Build Coastguard Worker  *             Map buffer with MapNamedBuffer function and READ_WRITE access flag.
1415*35238bceSAndroid Build Coastguard Worker  *
1416*35238bceSAndroid Build Coastguard Worker  *             Compare mapped buffer content with inverted reference.
1417*35238bceSAndroid Build Coastguard Worker  *
1418*35238bceSAndroid Build Coastguard Worker  *             Unmap buffer.
1419*35238bceSAndroid Build Coastguard Worker  *
1420*35238bceSAndroid Build Coastguard Worker  *             Release buffer.
1421*35238bceSAndroid Build Coastguard Worker  */
1422*35238bceSAndroid Build Coastguard Worker class MapReadWriteTest : public deqp::TestCase
1423*35238bceSAndroid Build Coastguard Worker {
1424*35238bceSAndroid Build Coastguard Worker public:
1425*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
1426*35238bceSAndroid Build Coastguard Worker     MapReadWriteTest(deqp::Context &context);
1427*35238bceSAndroid Build Coastguard Worker 
1428*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
1429*35238bceSAndroid Build Coastguard Worker 
1430*35238bceSAndroid Build Coastguard Worker private:
1431*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
1432*35238bceSAndroid Build Coastguard Worker     MapReadWriteTest(const MapReadWriteTest &other);
1433*35238bceSAndroid Build Coastguard Worker     MapReadWriteTest &operator=(const MapReadWriteTest &other);
1434*35238bceSAndroid Build Coastguard Worker 
1435*35238bceSAndroid Build Coastguard Worker     /* API entry points. */
1436*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLNAMEDBUFFERDATA)(glw::GLuint buffer, glw::GLsizeiptr size, const glw::GLvoid *data,
1437*35238bceSAndroid Build Coastguard Worker                                                      glw::GLenum usage);
1438*35238bceSAndroid Build Coastguard Worker     typedef void *(GLW_APIENTRY *PFNGLMAPNAMEDBUFFER)(glw::GLuint buffer, glw::GLenum access);
1439*35238bceSAndroid Build Coastguard Worker     typedef glw::GLboolean(GLW_APIENTRY *PFNGLUNMAPNAMEDBUFFER)(glw::GLuint buffer);
1440*35238bceSAndroid Build Coastguard Worker 
1441*35238bceSAndroid Build Coastguard Worker     PFNGLNAMEDBUFFERDATA m_pNamedBufferData;
1442*35238bceSAndroid Build Coastguard Worker     PFNGLMAPNAMEDBUFFER m_pMapNamedBuffer;
1443*35238bceSAndroid Build Coastguard Worker     PFNGLUNMAPNAMEDBUFFER m_pUnmapNamedBuffer;
1444*35238bceSAndroid Build Coastguard Worker 
1445*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_reference[];      //<! Reference data.
1446*35238bceSAndroid Build Coastguard Worker     static const glw::GLsizei s_reference_size;  //<! Reference data size.
1447*35238bceSAndroid Build Coastguard Worker     static const glw::GLsizei s_reference_count; //<! Reference data count (number of GLuint elements).
1448*35238bceSAndroid Build Coastguard Worker };
1449*35238bceSAndroid Build Coastguard Worker /* MapReadWriteTest class */
1450*35238bceSAndroid Build Coastguard Worker 
1451*35238bceSAndroid Build Coastguard Worker /** @class MapWriteOnlyTest
1452*35238bceSAndroid Build Coastguard Worker  *
1453*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Buffers Map Write Only test cases.
1454*35238bceSAndroid Build Coastguard Worker  *
1455*35238bceSAndroid Build Coastguard Worker  *         Test follows the steps:
1456*35238bceSAndroid Build Coastguard Worker  *
1457*35238bceSAndroid Build Coastguard Worker  *             Create buffer object using CreateBuffers.
1458*35238bceSAndroid Build Coastguard Worker  *
1459*35238bceSAndroid Build Coastguard Worker  *             Create data storage using NamedBufferData function.
1460*35238bceSAndroid Build Coastguard Worker  *
1461*35238bceSAndroid Build Coastguard Worker  *             Map buffer with MapNamedBuffer function and WRITE_ONLY access flag.
1462*35238bceSAndroid Build Coastguard Worker  *
1463*35238bceSAndroid Build Coastguard Worker  *             Write reference data.
1464*35238bceSAndroid Build Coastguard Worker  *
1465*35238bceSAndroid Build Coastguard Worker  *             Unmap buffer.
1466*35238bceSAndroid Build Coastguard Worker  *
1467*35238bceSAndroid Build Coastguard Worker  *             Bind buffer to the binding point.
1468*35238bceSAndroid Build Coastguard Worker  *
1469*35238bceSAndroid Build Coastguard Worker  *             Map buffer with MapBuffer function and READ_ONLY access flag.
1470*35238bceSAndroid Build Coastguard Worker  *
1471*35238bceSAndroid Build Coastguard Worker  *             Compare mapped buffer content with reference.
1472*35238bceSAndroid Build Coastguard Worker  *
1473*35238bceSAndroid Build Coastguard Worker  *             Unmap buffer.
1474*35238bceSAndroid Build Coastguard Worker  *
1475*35238bceSAndroid Build Coastguard Worker  *             Release buffer.
1476*35238bceSAndroid Build Coastguard Worker  */
1477*35238bceSAndroid Build Coastguard Worker class MapWriteOnlyTest : public deqp::TestCase
1478*35238bceSAndroid Build Coastguard Worker {
1479*35238bceSAndroid Build Coastguard Worker public:
1480*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
1481*35238bceSAndroid Build Coastguard Worker     MapWriteOnlyTest(deqp::Context &context);
1482*35238bceSAndroid Build Coastguard Worker 
1483*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
1484*35238bceSAndroid Build Coastguard Worker 
1485*35238bceSAndroid Build Coastguard Worker private:
1486*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
1487*35238bceSAndroid Build Coastguard Worker     MapWriteOnlyTest(const MapWriteOnlyTest &other);
1488*35238bceSAndroid Build Coastguard Worker     MapWriteOnlyTest &operator=(const MapWriteOnlyTest &other);
1489*35238bceSAndroid Build Coastguard Worker 
1490*35238bceSAndroid Build Coastguard Worker     /* API entry points. */
1491*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLNAMEDBUFFERDATA)(glw::GLuint buffer, glw::GLsizeiptr size, const glw::GLvoid *data,
1492*35238bceSAndroid Build Coastguard Worker                                                      glw::GLenum usage);
1493*35238bceSAndroid Build Coastguard Worker     typedef void *(GLW_APIENTRY *PFNGLMAPNAMEDBUFFER)(glw::GLuint buffer, glw::GLenum access);
1494*35238bceSAndroid Build Coastguard Worker     typedef glw::GLboolean(GLW_APIENTRY *PFNGLUNMAPNAMEDBUFFER)(glw::GLuint buffer);
1495*35238bceSAndroid Build Coastguard Worker 
1496*35238bceSAndroid Build Coastguard Worker     PFNGLNAMEDBUFFERDATA m_pNamedBufferData;
1497*35238bceSAndroid Build Coastguard Worker     PFNGLMAPNAMEDBUFFER m_pMapNamedBuffer;
1498*35238bceSAndroid Build Coastguard Worker     PFNGLUNMAPNAMEDBUFFER m_pUnmapNamedBuffer;
1499*35238bceSAndroid Build Coastguard Worker 
1500*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_reference[];      //<! Reference data.
1501*35238bceSAndroid Build Coastguard Worker     static const glw::GLsizei s_reference_size;  //<! Reference data size.
1502*35238bceSAndroid Build Coastguard Worker     static const glw::GLsizei s_reference_count; //<! Reference data count (number of GLuint elements).
1503*35238bceSAndroid Build Coastguard Worker };
1504*35238bceSAndroid Build Coastguard Worker /* MapReadOnlyTest class */
1505*35238bceSAndroid Build Coastguard Worker 
1506*35238bceSAndroid Build Coastguard Worker /** @class MapRangeReadBitTest
1507*35238bceSAndroid Build Coastguard Worker  *
1508*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Buffers Range Map Read Bit test cases.
1509*35238bceSAndroid Build Coastguard Worker  *
1510*35238bceSAndroid Build Coastguard Worker  *         Test follows the steps:
1511*35238bceSAndroid Build Coastguard Worker  *
1512*35238bceSAndroid Build Coastguard Worker  *             Create buffer object using CreateBuffers.
1513*35238bceSAndroid Build Coastguard Worker  *
1514*35238bceSAndroid Build Coastguard Worker  *             Create data storage using NamedBufferStorage function, reference
1515*35238bceSAndroid Build Coastguard Worker  *             data and MAP_READ_BIT access flag.
1516*35238bceSAndroid Build Coastguard Worker  *
1517*35238bceSAndroid Build Coastguard Worker  *             Map first half of buffer with MapNamedBufferRange and MAP_READ_BIT
1518*35238bceSAndroid Build Coastguard Worker  *             access flag.
1519*35238bceSAndroid Build Coastguard Worker  *
1520*35238bceSAndroid Build Coastguard Worker  *             Compare mapped buffer content with reference.
1521*35238bceSAndroid Build Coastguard Worker  *
1522*35238bceSAndroid Build Coastguard Worker  *             Unmap buffer.
1523*35238bceSAndroid Build Coastguard Worker  *
1524*35238bceSAndroid Build Coastguard Worker  *             Map second half of buffer with MapNamedBufferRange and MAP_READ_BIT
1525*35238bceSAndroid Build Coastguard Worker  *             access flag.
1526*35238bceSAndroid Build Coastguard Worker  *
1527*35238bceSAndroid Build Coastguard Worker  *             Compare mapped buffer content with reference.
1528*35238bceSAndroid Build Coastguard Worker  *
1529*35238bceSAndroid Build Coastguard Worker  *             Unmap buffer.
1530*35238bceSAndroid Build Coastguard Worker  *
1531*35238bceSAndroid Build Coastguard Worker  *             Release buffer.
1532*35238bceSAndroid Build Coastguard Worker  *
1533*35238bceSAndroid Build Coastguard Worker  *             Repeat the test with also MAP_PERSISTENT_BIT flag turned on.
1534*35238bceSAndroid Build Coastguard Worker  *
1535*35238bceSAndroid Build Coastguard Worker  *             Repeat the test with also MAP_PERSISTENT_BIT and MAP_COHERENT_BIT
1536*35238bceSAndroid Build Coastguard Worker  *             flags turned on.
1537*35238bceSAndroid Build Coastguard Worker  */
1538*35238bceSAndroid Build Coastguard Worker class MapRangeReadBitTest : public deqp::TestCase
1539*35238bceSAndroid Build Coastguard Worker {
1540*35238bceSAndroid Build Coastguard Worker public:
1541*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
1542*35238bceSAndroid Build Coastguard Worker     MapRangeReadBitTest(deqp::Context &context);
1543*35238bceSAndroid Build Coastguard Worker 
1544*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
1545*35238bceSAndroid Build Coastguard Worker 
1546*35238bceSAndroid Build Coastguard Worker private:
1547*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
1548*35238bceSAndroid Build Coastguard Worker     MapRangeReadBitTest(const MapRangeReadBitTest &other);
1549*35238bceSAndroid Build Coastguard Worker     MapRangeReadBitTest &operator=(const MapRangeReadBitTest &other);
1550*35238bceSAndroid Build Coastguard Worker 
1551*35238bceSAndroid Build Coastguard Worker     /* API entry points. */
1552*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLNAMEDBUFFERSTORAGE)(glw::GLuint buffer, glw::GLsizeiptr size,
1553*35238bceSAndroid Build Coastguard Worker                                                         const glw::GLvoid *data, glw::GLbitfield flags);
1554*35238bceSAndroid Build Coastguard Worker     typedef void *(GLW_APIENTRY *PFNGLMAPNAMEDBUFFERRANGE)(glw::GLuint buffer, glw::GLintptr offset,
1555*35238bceSAndroid Build Coastguard Worker                                                            glw::GLsizeiptr length, glw::GLbitfield access);
1556*35238bceSAndroid Build Coastguard Worker     typedef glw::GLboolean(GLW_APIENTRY *PFNGLUNMAPNAMEDBUFFER)(glw::GLuint buffer);
1557*35238bceSAndroid Build Coastguard Worker 
1558*35238bceSAndroid Build Coastguard Worker     PFNGLNAMEDBUFFERSTORAGE m_pNamedBufferStorage;
1559*35238bceSAndroid Build Coastguard Worker     PFNGLMAPNAMEDBUFFERRANGE m_pMapNamedBufferRange;
1560*35238bceSAndroid Build Coastguard Worker     PFNGLUNMAPNAMEDBUFFER m_pUnmapNamedBuffer;
1561*35238bceSAndroid Build Coastguard Worker 
1562*35238bceSAndroid Build Coastguard Worker     bool CompareWithReference(glw::GLuint *data, glw::GLintptr offset, glw::GLsizei length);
1563*35238bceSAndroid Build Coastguard Worker 
1564*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_reference[];      //<! Reference data.
1565*35238bceSAndroid Build Coastguard Worker     static const glw::GLsizei s_reference_size;  //<! Reference data size.
1566*35238bceSAndroid Build Coastguard Worker     static const glw::GLsizei s_reference_count; //<! Reference data count (number of GLuint elements).
1567*35238bceSAndroid Build Coastguard Worker };
1568*35238bceSAndroid Build Coastguard Worker /* MapRangeReadBitTest class */
1569*35238bceSAndroid Build Coastguard Worker 
1570*35238bceSAndroid Build Coastguard Worker /** @class MapRangeWriteBitTest
1571*35238bceSAndroid Build Coastguard Worker  *
1572*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Buffers Range Map Read Bit test cases.
1573*35238bceSAndroid Build Coastguard Worker  *
1574*35238bceSAndroid Build Coastguard Worker  *         Test follows the steps:
1575*35238bceSAndroid Build Coastguard Worker  *
1576*35238bceSAndroid Build Coastguard Worker  *             Create buffer object using CreateBuffers.
1577*35238bceSAndroid Build Coastguard Worker  *
1578*35238bceSAndroid Build Coastguard Worker  *             Create data storage using NamedBufferStorage function, reference
1579*35238bceSAndroid Build Coastguard Worker  *             data and (MAP_READ_BIT | MAP_WRITE_BIT) access flag.
1580*35238bceSAndroid Build Coastguard Worker  *
1581*35238bceSAndroid Build Coastguard Worker  *             Map first half of buffer with MapNamedBufferRange and MAP_WRITE_BIT
1582*35238bceSAndroid Build Coastguard Worker  *             access flag.
1583*35238bceSAndroid Build Coastguard Worker  *
1584*35238bceSAndroid Build Coastguard Worker  *             Write reference data.
1585*35238bceSAndroid Build Coastguard Worker  *
1586*35238bceSAndroid Build Coastguard Worker  *             Unmap buffer.
1587*35238bceSAndroid Build Coastguard Worker  *
1588*35238bceSAndroid Build Coastguard Worker  *             Map second half of buffer with MapNamedBufferRange and MAP_WRITE_BIT
1589*35238bceSAndroid Build Coastguard Worker  *             access flag.
1590*35238bceSAndroid Build Coastguard Worker  *
1591*35238bceSAndroid Build Coastguard Worker  *             Write reference data.
1592*35238bceSAndroid Build Coastguard Worker  *
1593*35238bceSAndroid Build Coastguard Worker  *             Unmap buffer.
1594*35238bceSAndroid Build Coastguard Worker  *
1595*35238bceSAndroid Build Coastguard Worker  *             Bind buffer to the binding point.
1596*35238bceSAndroid Build Coastguard Worker  *
1597*35238bceSAndroid Build Coastguard Worker  *             Map buffer with MapBuffer function and READ_ONLY access flag.
1598*35238bceSAndroid Build Coastguard Worker  *
1599*35238bceSAndroid Build Coastguard Worker  *             Compare mapped buffer content with reference.
1600*35238bceSAndroid Build Coastguard Worker  *
1601*35238bceSAndroid Build Coastguard Worker  *             Unmap buffer.
1602*35238bceSAndroid Build Coastguard Worker  *
1603*35238bceSAndroid Build Coastguard Worker  *             Release buffer.
1604*35238bceSAndroid Build Coastguard Worker  *
1605*35238bceSAndroid Build Coastguard Worker  *             Repeat the test with also MAP_INVALIDATE_RANGE_BIT flag turned on.
1606*35238bceSAndroid Build Coastguard Worker  *
1607*35238bceSAndroid Build Coastguard Worker  *             Repeat the test with also MAP_INVALIDATE_BUFFER_BIT flag turned on with
1608*35238bceSAndroid Build Coastguard Worker  *             only the first mapping.
1609*35238bceSAndroid Build Coastguard Worker  *
1610*35238bceSAndroid Build Coastguard Worker  *             Repeat the test with also MAP_FLUSH_EXPLICIT_BIT flag turned on. Make
1611*35238bceSAndroid Build Coastguard Worker  *             sure that all writes are flushed using FlushNamedMappedBufferRange
1612*35238bceSAndroid Build Coastguard Worker  *             function.
1613*35238bceSAndroid Build Coastguard Worker  *
1614*35238bceSAndroid Build Coastguard Worker  *             Repeat the test with also MAP_UNSYNCHRONIZED_BIT flag turned on with
1615*35238bceSAndroid Build Coastguard Worker  *             only the second mapping.
1616*35238bceSAndroid Build Coastguard Worker  */
1617*35238bceSAndroid Build Coastguard Worker class MapRangeWriteBitTest : public deqp::TestCase
1618*35238bceSAndroid Build Coastguard Worker {
1619*35238bceSAndroid Build Coastguard Worker public:
1620*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
1621*35238bceSAndroid Build Coastguard Worker     MapRangeWriteBitTest(deqp::Context &context);
1622*35238bceSAndroid Build Coastguard Worker 
1623*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
1624*35238bceSAndroid Build Coastguard Worker 
1625*35238bceSAndroid Build Coastguard Worker private:
1626*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
1627*35238bceSAndroid Build Coastguard Worker     MapRangeWriteBitTest(const MapRangeWriteBitTest &other);
1628*35238bceSAndroid Build Coastguard Worker     MapRangeWriteBitTest &operator=(const MapRangeWriteBitTest &other);
1629*35238bceSAndroid Build Coastguard Worker 
1630*35238bceSAndroid Build Coastguard Worker     /* API entry points. */
1631*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLNAMEDBUFFERSTORAGE)(glw::GLuint buffer, glw::GLsizeiptr size,
1632*35238bceSAndroid Build Coastguard Worker                                                         const glw::GLvoid *data, glw::GLbitfield flags);
1633*35238bceSAndroid Build Coastguard Worker     typedef void *(GLW_APIENTRY *PFNGLMAPNAMEDBUFFERRANGE)(glw::GLuint buffer, glw::GLintptr offset,
1634*35238bceSAndroid Build Coastguard Worker                                                            glw::GLsizeiptr length, glw::GLbitfield access);
1635*35238bceSAndroid Build Coastguard Worker     typedef glw::GLboolean(GLW_APIENTRY *PFNGLUNMAPNAMEDBUFFER)(glw::GLuint buffer);
1636*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLFLUSHMAPPEDNAMEDBUFFERRANGE)(glw::GLuint buffer, glw::GLintptr offset,
1637*35238bceSAndroid Build Coastguard Worker                                                                  glw::GLsizeiptr length);
1638*35238bceSAndroid Build Coastguard Worker 
1639*35238bceSAndroid Build Coastguard Worker     PFNGLNAMEDBUFFERSTORAGE m_pNamedBufferStorage;
1640*35238bceSAndroid Build Coastguard Worker     PFNGLMAPNAMEDBUFFERRANGE m_pMapNamedBufferRange;
1641*35238bceSAndroid Build Coastguard Worker     PFNGLUNMAPNAMEDBUFFER m_pUnmapNamedBuffer;
1642*35238bceSAndroid Build Coastguard Worker     PFNGLFLUSHMAPPEDNAMEDBUFFERRANGE m_pFlushMappedNamedBufferRange;
1643*35238bceSAndroid Build Coastguard Worker 
1644*35238bceSAndroid Build Coastguard Worker     bool CompareWithReference(glw::GLuint buffer, glw::GLbitfield access_flag);
1645*35238bceSAndroid Build Coastguard Worker 
1646*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_reference[];      //<! Reference data.
1647*35238bceSAndroid Build Coastguard Worker     static const glw::GLsizei s_reference_size;  //<! Reference data size.
1648*35238bceSAndroid Build Coastguard Worker     static const glw::GLsizei s_reference_count; //<! Reference data count (number of GLuint elements).
1649*35238bceSAndroid Build Coastguard Worker };
1650*35238bceSAndroid Build Coastguard Worker /* MapRangeWriteBitTest class */
1651*35238bceSAndroid Build Coastguard Worker 
1652*35238bceSAndroid Build Coastguard Worker /** @class SubDataQueryTest
1653*35238bceSAndroid Build Coastguard Worker  *
1654*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access GetNamedBufferSubData Query test cases.
1655*35238bceSAndroid Build Coastguard Worker  *
1656*35238bceSAndroid Build Coastguard Worker  *         Test follows the steps:
1657*35238bceSAndroid Build Coastguard Worker  *
1658*35238bceSAndroid Build Coastguard Worker  *             Create buffer object using CreateBuffers.
1659*35238bceSAndroid Build Coastguard Worker  *
1660*35238bceSAndroid Build Coastguard Worker  *             Create data storage using NamedBufferData function and reference data.
1661*35238bceSAndroid Build Coastguard Worker  *
1662*35238bceSAndroid Build Coastguard Worker  *             Fetch first half of the buffer using GetNamedBufferSubData function.
1663*35238bceSAndroid Build Coastguard Worker  *
1664*35238bceSAndroid Build Coastguard Worker  *             Fetch second half of the buffer using GetNamedBufferSubData function.
1665*35238bceSAndroid Build Coastguard Worker  *
1666*35238bceSAndroid Build Coastguard Worker  *             Compare fetched data with reference values.
1667*35238bceSAndroid Build Coastguard Worker  *
1668*35238bceSAndroid Build Coastguard Worker  *             Release object.
1669*35238bceSAndroid Build Coastguard Worker  */
1670*35238bceSAndroid Build Coastguard Worker class SubDataQueryTest : public deqp::TestCase
1671*35238bceSAndroid Build Coastguard Worker {
1672*35238bceSAndroid Build Coastguard Worker public:
1673*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
1674*35238bceSAndroid Build Coastguard Worker     SubDataQueryTest(deqp::Context &context);
1675*35238bceSAndroid Build Coastguard Worker 
1676*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
1677*35238bceSAndroid Build Coastguard Worker 
1678*35238bceSAndroid Build Coastguard Worker private:
1679*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
1680*35238bceSAndroid Build Coastguard Worker     SubDataQueryTest(const SubDataQueryTest &other);
1681*35238bceSAndroid Build Coastguard Worker     SubDataQueryTest &operator=(const SubDataQueryTest &other);
1682*35238bceSAndroid Build Coastguard Worker 
1683*35238bceSAndroid Build Coastguard Worker     /* API entry points. */
1684*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLNAMEDBUFFERDATA)(glw::GLuint buffer, glw::GLsizeiptr size, const glw::GLvoid *data,
1685*35238bceSAndroid Build Coastguard Worker                                                      glw::GLenum usage);
1686*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLGETNAMEDBUFFERSUBDATA)(glw::GLuint buffer, glw::GLintptr offset,
1687*35238bceSAndroid Build Coastguard Worker                                                            glw::GLsizeiptr size, glw::GLvoid *data);
1688*35238bceSAndroid Build Coastguard Worker 
1689*35238bceSAndroid Build Coastguard Worker     PFNGLNAMEDBUFFERDATA m_pNamedBufferData;
1690*35238bceSAndroid Build Coastguard Worker     PFNGLGETNAMEDBUFFERSUBDATA m_pGetNamedBufferSubData;
1691*35238bceSAndroid Build Coastguard Worker 
1692*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_reference[];      //<! Reference data.
1693*35238bceSAndroid Build Coastguard Worker     static const glw::GLsizei s_reference_size;  //<! Reference data size.
1694*35238bceSAndroid Build Coastguard Worker     static const glw::GLsizei s_reference_count; //<! Reference data count (number of GLuint elements).
1695*35238bceSAndroid Build Coastguard Worker };
1696*35238bceSAndroid Build Coastguard Worker /* SubDataQueryTest class */
1697*35238bceSAndroid Build Coastguard Worker 
1698*35238bceSAndroid Build Coastguard Worker /** @class DefaultsTest
1699*35238bceSAndroid Build Coastguard Worker  *
1700*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Buffer Objects Default Values Test.
1701*35238bceSAndroid Build Coastguard Worker  *
1702*35238bceSAndroid Build Coastguard Worker  *         Test follows the steps:
1703*35238bceSAndroid Build Coastguard Worker  *
1704*35238bceSAndroid Build Coastguard Worker  *             Create buffer object using CreateBuffers.
1705*35238bceSAndroid Build Coastguard Worker  *
1706*35238bceSAndroid Build Coastguard Worker  *             Check that GetNamedBufferParameteriv and GetNamedBufferParameteri64v
1707*35238bceSAndroid Build Coastguard Worker  *             function called with parameter name
1708*35238bceSAndroid Build Coastguard Worker  *              -  BUFFER_SIZE returns value equal to 0;
1709*35238bceSAndroid Build Coastguard Worker  *              -  BUFFER_USAGE returns value equal to STATIC_DRAW;
1710*35238bceSAndroid Build Coastguard Worker  *              -  BUFFER_ACCESS returns value equal to READ_WRITE;
1711*35238bceSAndroid Build Coastguard Worker  *              -  BUFFER_ACCESS_FLAGS returns value equal to 0;
1712*35238bceSAndroid Build Coastguard Worker  *              -  BUFFER_IMMUTABLE_STORAGE returns value equal to FALSE;
1713*35238bceSAndroid Build Coastguard Worker  *              -  BUFFER_MAPPED returns value equal to FALSE;
1714*35238bceSAndroid Build Coastguard Worker  *              -  BUFFER_MAP_OFFSET returns value equal to 0;
1715*35238bceSAndroid Build Coastguard Worker  *              -  BUFFER_MAP_LENGTH returns value equal to 0;
1716*35238bceSAndroid Build Coastguard Worker  *              -  BUFFER_STORAGE_FLAGS returns value equal to 0.
1717*35238bceSAndroid Build Coastguard Worker  *
1718*35238bceSAndroid Build Coastguard Worker  *            Check that GetNamedBufferPointerv function called with parameter name
1719*35238bceSAndroid Build Coastguard Worker  *            BUFFER_MAP_POINTER returns value equal to NULL;
1720*35238bceSAndroid Build Coastguard Worker  */
1721*35238bceSAndroid Build Coastguard Worker class DefaultsTest : public deqp::TestCase
1722*35238bceSAndroid Build Coastguard Worker {
1723*35238bceSAndroid Build Coastguard Worker public:
1724*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
1725*35238bceSAndroid Build Coastguard Worker     DefaultsTest(deqp::Context &context);
1726*35238bceSAndroid Build Coastguard Worker 
1727*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
1728*35238bceSAndroid Build Coastguard Worker 
1729*35238bceSAndroid Build Coastguard Worker private:
1730*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
1731*35238bceSAndroid Build Coastguard Worker     DefaultsTest(const DefaultsTest &other);
1732*35238bceSAndroid Build Coastguard Worker     DefaultsTest &operator=(const DefaultsTest &other);
1733*35238bceSAndroid Build Coastguard Worker 
1734*35238bceSAndroid Build Coastguard Worker     bool CheckParameterError(const glw::GLchar *pname_string, const glw::GLchar *function_string);
1735*35238bceSAndroid Build Coastguard Worker 
1736*35238bceSAndroid Build Coastguard Worker     template <typename T>
1737*35238bceSAndroid Build Coastguard Worker     bool CheckValue(const T value, const T reference_value, const glw::GLchar *pname_string,
1738*35238bceSAndroid Build Coastguard Worker                     const glw::GLchar *function_string);
1739*35238bceSAndroid Build Coastguard Worker 
1740*35238bceSAndroid Build Coastguard Worker     /* API entry points. */
1741*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLNAMEDBUFFERDATA)(glw::GLuint buffer, glw::GLsizeiptr size, const glw::GLvoid *data,
1742*35238bceSAndroid Build Coastguard Worker                                                      glw::GLenum usage);
1743*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLGETNAMEDBUFFERPARAMETERI64V)(glw::GLuint buffer, glw::GLenum pname,
1744*35238bceSAndroid Build Coastguard Worker                                                                  glw::GLint64 *data);
1745*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLGETNAMEDBUFFERPARAMETERIV)(glw::GLuint buffer, glw::GLenum pname, glw::GLint *data);
1746*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLGETNAMEDBUFFERPOINTERV)(glw::GLuint buffer, glw::GLenum pname,
1747*35238bceSAndroid Build Coastguard Worker                                                             glw::GLvoid **params);
1748*35238bceSAndroid Build Coastguard Worker 
1749*35238bceSAndroid Build Coastguard Worker     PFNGLNAMEDBUFFERDATA m_pNamedBufferData;
1750*35238bceSAndroid Build Coastguard Worker     PFNGLGETNAMEDBUFFERPARAMETERI64V m_pGetNamedBufferParameteri64v;
1751*35238bceSAndroid Build Coastguard Worker     PFNGLGETNAMEDBUFFERPARAMETERIV m_pGetNamedBufferParameteriv;
1752*35238bceSAndroid Build Coastguard Worker     PFNGLGETNAMEDBUFFERPOINTERV m_pGetNamedBufferPointerv;
1753*35238bceSAndroid Build Coastguard Worker };
1754*35238bceSAndroid Build Coastguard Worker /* DefaultsTest class */
1755*35238bceSAndroid Build Coastguard Worker 
1756*35238bceSAndroid Build Coastguard Worker /** @class ErrorsTest
1757*35238bceSAndroid Build Coastguard Worker  *
1758*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Buffer Objects Errors Test.
1759*35238bceSAndroid Build Coastguard Worker  *
1760*35238bceSAndroid Build Coastguard Worker  *         Test follows the steps:
1761*35238bceSAndroid Build Coastguard Worker  *
1762*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_VALUE is generated by CreateBuffers if n is negative.
1763*35238bceSAndroid Build Coastguard Worker  *
1764*35238bceSAndroid Build Coastguard Worker  *
1765*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_OPERATION is generated by NamedBufferStorage if
1766*35238bceSAndroid Build Coastguard Worker  *                     buffer is not the name of an existing buffer object.
1767*35238bceSAndroid Build Coastguard Worker  *
1768*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_VALUE is generated by NamedBufferStorage if size is
1769*35238bceSAndroid Build Coastguard Worker  *                     less than or equal to zero.
1770*35238bceSAndroid Build Coastguard Worker  *
1771*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_VALUE is generated by NamedBufferStorage if flags has
1772*35238bceSAndroid Build Coastguard Worker  *                     any bits set other than DYNAMIC_STORAGE_BIT, MAP_READ_BIT,
1773*35238bceSAndroid Build Coastguard Worker  *                     MAP_WRITE_BIT, MAP_PERSISTENT_BIT, MAP_COHERENT_BIT or
1774*35238bceSAndroid Build Coastguard Worker  *                     CLIENT_STORAGE_BIT.
1775*35238bceSAndroid Build Coastguard Worker  *
1776*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_VALUE error is generated by NamedBufferStorage if
1777*35238bceSAndroid Build Coastguard Worker  *                     flags contains MAP_PERSISTENT_BIT but does not contain at least one of
1778*35238bceSAndroid Build Coastguard Worker  *                     MAP_READ_BIT or MAP_WRITE_BIT.
1779*35238bceSAndroid Build Coastguard Worker  *
1780*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_VALUE is generated by NamedBufferStorage if flags
1781*35238bceSAndroid Build Coastguard Worker  *                     contains MAP_COHERENT_BIT, but does not also contain MAP_PERSISTENT_BIT.
1782*35238bceSAndroid Build Coastguard Worker  *
1783*35238bceSAndroid Build Coastguard Worker  *                     Check that OUT_OF_MEMORY is generated if the GL is unable to create a
1784*35238bceSAndroid Build Coastguard Worker  *                     data store with the specified size. Do not set result, if out of memory
1785*35238bceSAndroid Build Coastguard Worker  *                     situation was impossible to generate or unable to verify.
1786*35238bceSAndroid Build Coastguard Worker  *
1787*35238bceSAndroid Build Coastguard Worker  *
1788*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_OPERATION is generated by NamedBufferData if buffer
1789*35238bceSAndroid Build Coastguard Worker  *                     is not the name of an existing buffer object.
1790*35238bceSAndroid Build Coastguard Worker  *
1791*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_ENUM is generated by NamedBufferData if usage is not
1792*35238bceSAndroid Build Coastguard Worker  *                     STREAM_DRAW, STREAM_READ, STREAM_COPY, STATIC_DRAW, STATIC_READ,
1793*35238bceSAndroid Build Coastguard Worker  *                     STATIC_COPY, DYNAMIC_DRAW, DYNAMIC_READ or DYNAMIC_COPY.
1794*35238bceSAndroid Build Coastguard Worker  *
1795*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_VALUE is generated by NamedBufferData if size is
1796*35238bceSAndroid Build Coastguard Worker  *                     negative.
1797*35238bceSAndroid Build Coastguard Worker  *
1798*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_OPERATION is generated by NamedBufferData if the
1799*35238bceSAndroid Build Coastguard Worker  *                     BUFFER_IMMUTABLE_STORAGE flag of the buffer object is TRUE.
1800*35238bceSAndroid Build Coastguard Worker  *
1801*35238bceSAndroid Build Coastguard Worker  *                     Check that OUT_OF_MEMORY is generated if the GL is unable to create a
1802*35238bceSAndroid Build Coastguard Worker  *                     data store with the specified size. Do not set result, if out of memory
1803*35238bceSAndroid Build Coastguard Worker  *                     situation was impossible to generate or unable to verify.
1804*35238bceSAndroid Build Coastguard Worker  *
1805*35238bceSAndroid Build Coastguard Worker  *
1806*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_OPERATION is generated by NamedBufferSubData if
1807*35238bceSAndroid Build Coastguard Worker  *                     buffer is not the name of an existing buffer object.
1808*35238bceSAndroid Build Coastguard Worker  *
1809*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_VALUE is generated by NamedBufferSubData if offset or
1810*35238bceSAndroid Build Coastguard Worker  *                     size is negative, or if offset+size is greater than the value of
1811*35238bceSAndroid Build Coastguard Worker  *                     BUFFER_SIZE for the specified buffer object.
1812*35238bceSAndroid Build Coastguard Worker  *
1813*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_OPERATION is generated by NamedBufferSubData if any
1814*35238bceSAndroid Build Coastguard Worker  *                     part of the specified range of the buffer object is mapped with
1815*35238bceSAndroid Build Coastguard Worker  *                     MapBufferRange or MapBuffer, unless it was mapped with the
1816*35238bceSAndroid Build Coastguard Worker  *                     MAP_PERSISTENT_BIT bit set in the MapBufferRange access flags.
1817*35238bceSAndroid Build Coastguard Worker  *
1818*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_OPERATION is generated by NamedBufferSubData if the
1819*35238bceSAndroid Build Coastguard Worker  *                     value of the BUFFER_IMMUTABLE_STORAGE flag of the buffer object is TRUE
1820*35238bceSAndroid Build Coastguard Worker  *                     and the value of BUFFER_STORAGE_FLAGS for the buffer object does not
1821*35238bceSAndroid Build Coastguard Worker  *                     have the DYNAMIC_STORAGE_BIT bit set.
1822*35238bceSAndroid Build Coastguard Worker  *
1823*35238bceSAndroid Build Coastguard Worker  *
1824*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_OPERATION is generated by ClearNamedBufferData if
1825*35238bceSAndroid Build Coastguard Worker  *                     buffer is not the name of an existing buffer object.
1826*35238bceSAndroid Build Coastguard Worker  *
1827*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_ENUM is generated by ClearNamedBufferData if
1828*35238bceSAndroid Build Coastguard Worker  *                     internal format is not one of the valid sized internal formats listed in
1829*35238bceSAndroid Build Coastguard Worker  *                     the table above.
1830*35238bceSAndroid Build Coastguard Worker  *
1831*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_OPERATION is generated by ClearNamedBufferData if
1832*35238bceSAndroid Build Coastguard Worker  *                     any part of the specified range of the buffer object is mapped with
1833*35238bceSAndroid Build Coastguard Worker  *                     MapBufferRange or MapBuffer, unless it was mapped with the
1834*35238bceSAndroid Build Coastguard Worker  *                     MAP_PERSISTENT_BIT bit set in the MapBufferRange access flags.
1835*35238bceSAndroid Build Coastguard Worker  *
1836*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_VALUE is generated by ClearNamedBufferData if
1837*35238bceSAndroid Build Coastguard Worker  *                     format is not a valid format, or type is not a valid type.
1838*35238bceSAndroid Build Coastguard Worker  *
1839*35238bceSAndroid Build Coastguard Worker  *
1840*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_OPERATION is generated by ClearNamedBufferSubData
1841*35238bceSAndroid Build Coastguard Worker  *                     if buffer is not the name of an existing buffer object.
1842*35238bceSAndroid Build Coastguard Worker  *
1843*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_ENUM is generated by ClearNamedBufferSubData if
1844*35238bceSAndroid Build Coastguard Worker  *                     internal format is not one of the valid sized internal formats listed in
1845*35238bceSAndroid Build Coastguard Worker  *                     the table above.
1846*35238bceSAndroid Build Coastguard Worker  *
1847*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_VALUE is generated by ClearNamedBufferSubData if
1848*35238bceSAndroid Build Coastguard Worker  *                     offset or range are not multiples of the number of basic machine units
1849*35238bceSAndroid Build Coastguard Worker  *                     per-element for the internal format specified by internal format. This
1850*35238bceSAndroid Build Coastguard Worker  *                     value may be computed by multiplying the number of components for
1851*35238bceSAndroid Build Coastguard Worker  *                     internal format from the table by the size of the base type from the
1852*35238bceSAndroid Build Coastguard Worker  *                     specification table.
1853*35238bceSAndroid Build Coastguard Worker  *
1854*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_VALUE is generated by ClearNamedBufferSubData if
1855*35238bceSAndroid Build Coastguard Worker  *                     offset or size is negative, or if offset+size is greater than the value
1856*35238bceSAndroid Build Coastguard Worker  *                     of BUFFER_SIZE for the buffer object.
1857*35238bceSAndroid Build Coastguard Worker  *
1858*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_OPERATION is generated by ClearNamedBufferSubData
1859*35238bceSAndroid Build Coastguard Worker  *                     if any part of the specified range of the buffer object is mapped with
1860*35238bceSAndroid Build Coastguard Worker  *                     MapBufferRange or MapBuffer, unless it was mapped with the
1861*35238bceSAndroid Build Coastguard Worker  *                     MAP_PERSISTENT_BIT bit set in the MapBufferRange access flags.
1862*35238bceSAndroid Build Coastguard Worker  *
1863*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_VALUE is generated by ClearNamedBufferSubData if
1864*35238bceSAndroid Build Coastguard Worker  *                     format is not a valid format, or type is not a valid type.
1865*35238bceSAndroid Build Coastguard Worker  *
1866*35238bceSAndroid Build Coastguard Worker  *
1867*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_OPERATION is generated by CopyNamedBufferSubData if
1868*35238bceSAndroid Build Coastguard Worker  *                     readBuffer or writeBuffer is not the name of an existing buffer object.
1869*35238bceSAndroid Build Coastguard Worker  *
1870*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_VALUE is generated by CopyNamedBufferSubData if any of
1871*35238bceSAndroid Build Coastguard Worker  *                     readOffset, writeOffset or size is negative, if readOffset+size is
1872*35238bceSAndroid Build Coastguard Worker  *                     greater than the size of the source buffer object (its value of
1873*35238bceSAndroid Build Coastguard Worker  *                     BUFFER_SIZE), or if writeOffset+size is greater than the size of the
1874*35238bceSAndroid Build Coastguard Worker  *                     destination buffer object.
1875*35238bceSAndroid Build Coastguard Worker  *
1876*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_VALUE is generated by CopyNamedBufferSubData if the
1877*35238bceSAndroid Build Coastguard Worker  *                     source and destination are the same buffer object, and the ranges
1878*35238bceSAndroid Build Coastguard Worker  *                     [readOffset,readOffset+size) and [writeOffset,writeOffset+size) overlap.
1879*35238bceSAndroid Build Coastguard Worker  *
1880*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_OPERATION is generated by CopyNamedBufferSubData if
1881*35238bceSAndroid Build Coastguard Worker  *                     either the source or destination buffer object is mapped with
1882*35238bceSAndroid Build Coastguard Worker  *                     MapBufferRange or MapBuffer, unless they were mapped with the
1883*35238bceSAndroid Build Coastguard Worker  *                     MAP_PERSISTENT bit set in the MapBufferRange access flags.
1884*35238bceSAndroid Build Coastguard Worker  *
1885*35238bceSAndroid Build Coastguard Worker  *
1886*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_OPERATION is generated by MapNamedBuffer if buffer is
1887*35238bceSAndroid Build Coastguard Worker  *                     not the name of an existing buffer object.
1888*35238bceSAndroid Build Coastguard Worker  *
1889*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_ENUM is generated by MapNamedBuffer if access is not
1890*35238bceSAndroid Build Coastguard Worker  *                     READ_ONLY, WRITE_ONLY, or READ_WRITE.
1891*35238bceSAndroid Build Coastguard Worker  *
1892*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_OPERATION is generated by MapNamedBuffer if the
1893*35238bceSAndroid Build Coastguard Worker  *                     buffer object is in a mapped state.
1894*35238bceSAndroid Build Coastguard Worker  *
1895*35238bceSAndroid Build Coastguard Worker  *
1896*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_OPERATION is generated by MapNamedBufferRange if
1897*35238bceSAndroid Build Coastguard Worker  *                     buffer is not the name of an existing buffer object.
1898*35238bceSAndroid Build Coastguard Worker  *
1899*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_VALUE is generated by MapNamedBufferRange if offset
1900*35238bceSAndroid Build Coastguard Worker  *                     or length is negative, if offset+length is greater than the value of
1901*35238bceSAndroid Build Coastguard Worker  *                     BUFFER_SIZE for the buffer object, or if access has any bits set other
1902*35238bceSAndroid Build Coastguard Worker  *                     than those defined above.
1903*35238bceSAndroid Build Coastguard Worker  *
1904*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_OPERATION is generated by MapNamedBufferRange for any
1905*35238bceSAndroid Build Coastguard Worker  *                     of the following conditions:
1906*35238bceSAndroid Build Coastguard Worker  *                      -  length is zero.
1907*35238bceSAndroid Build Coastguard Worker  *                      -  The buffer object is already in a mapped state.
1908*35238bceSAndroid Build Coastguard Worker  *                      -  Neither MAP_READ_BIT nor MAP_WRITE_BIT is set.
1909*35238bceSAndroid Build Coastguard Worker  *                      -  MAP_READ_BIT is set and any of MAP_INVALIDATE_RANGE_BIT,
1910*35238bceSAndroid Build Coastguard Worker  *                         MAP_INVALIDATE_BUFFER_BIT or MAP_UNSYNCHRONIZED_BIT is set.
1911*35238bceSAndroid Build Coastguard Worker  *                      -  MAP_FLUSH_EXPLICIT_BIT is set and MAP_WRITE_BIT is not set.
1912*35238bceSAndroid Build Coastguard Worker  *                      -  Any of MAP_READ_BIT, MAP_WRITE_BIT, MAP_PERSISTENT_BIT, or
1913*35238bceSAndroid Build Coastguard Worker  *                         MAP_COHERENT_BIT are set, but the same bit is not included in the
1914*35238bceSAndroid Build Coastguard Worker  *                         buffer's storage flags.
1915*35238bceSAndroid Build Coastguard Worker  *
1916*35238bceSAndroid Build Coastguard Worker  *
1917*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_OPERATION is generated by UnmapNamedBuffer if buffer
1918*35238bceSAndroid Build Coastguard Worker  *                     is not the name of an existing buffer object.
1919*35238bceSAndroid Build Coastguard Worker  *
1920*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_OPERATION is generated by UnmapNamedBuffer if the
1921*35238bceSAndroid Build Coastguard Worker  *                     buffer object is not in a mapped state.
1922*35238bceSAndroid Build Coastguard Worker  *
1923*35238bceSAndroid Build Coastguard Worker  *
1924*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_OPERATION is generated by FlushMappedNamedBufferRange
1925*35238bceSAndroid Build Coastguard Worker  *                     if buffer is not the name of an existing buffer object.
1926*35238bceSAndroid Build Coastguard Worker  *
1927*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_VALUE is generated by FlushMappedNamedBufferRange if
1928*35238bceSAndroid Build Coastguard Worker  *                     offset or length is negative, or if offset + length exceeds the size of
1929*35238bceSAndroid Build Coastguard Worker  *                     the mapping.
1930*35238bceSAndroid Build Coastguard Worker  *
1931*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_OPERATION is generated by FlushMappedNamedBufferRange
1932*35238bceSAndroid Build Coastguard Worker  *                     if the buffer object is not mapped, or is mapped without the
1933*35238bceSAndroid Build Coastguard Worker  *                     MAP_FLUSH_EXPLICIT_BIT flag.
1934*35238bceSAndroid Build Coastguard Worker  *
1935*35238bceSAndroid Build Coastguard Worker  *
1936*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_OPERATION is generated by GetNamedBufferParameter* if
1937*35238bceSAndroid Build Coastguard Worker  *                     buffer is not the name of an existing buffer object.
1938*35238bceSAndroid Build Coastguard Worker  *
1939*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_ENUM is generated by GetNamedBufferParameter* if
1940*35238bceSAndroid Build Coastguard Worker  *                     pname is not one of the buffer object parameter names: BUFFER_ACCESS,
1941*35238bceSAndroid Build Coastguard Worker  *                     BUFFER_ACCESS_FLAGS, BUFFER_IMMUTABLE_STORAGE, BUFFER_MAPPED,
1942*35238bceSAndroid Build Coastguard Worker  *                     BUFFER_MAP_LENGTH, BUFFER_MAP_OFFSET, BUFFER_SIZE, BUFFER_STORAGE_FLAGS,
1943*35238bceSAndroid Build Coastguard Worker  *                     BUFFER_USAGE.
1944*35238bceSAndroid Build Coastguard Worker  *
1945*35238bceSAndroid Build Coastguard Worker  *
1946*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_OPERATION is generated by GetNamedBufferPointerv
1947*35238bceSAndroid Build Coastguard Worker  *                     if buffer is not the name of an existing buffer object.
1948*35238bceSAndroid Build Coastguard Worker  *
1949*35238bceSAndroid Build Coastguard Worker  *
1950*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_OPERATION is generated by GetNamedBufferSubData if
1951*35238bceSAndroid Build Coastguard Worker  *                     buffer is not the name of an existing buffer object.
1952*35238bceSAndroid Build Coastguard Worker  *
1953*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_VALUE is generated by GetNamedBufferSubData if offset
1954*35238bceSAndroid Build Coastguard Worker  *                     or size is negative, or if offset+size is greater than the value of
1955*35238bceSAndroid Build Coastguard Worker  *                     BUFFER_SIZE for the buffer object.
1956*35238bceSAndroid Build Coastguard Worker  *
1957*35238bceSAndroid Build Coastguard Worker  *                     Check that INVALID_OPERATION is generated by GetNamedBufferSubData if
1958*35238bceSAndroid Build Coastguard Worker  *                     the buffer object is mapped with MapBufferRange or MapBuffer, unless it
1959*35238bceSAndroid Build Coastguard Worker  *                     was mapped with the MAP_PERSISTENT_BIT bit set in the MapBufferRange
1960*35238bceSAndroid Build Coastguard Worker  *                     access flags.
1961*35238bceSAndroid Build Coastguard Worker  */
1962*35238bceSAndroid Build Coastguard Worker class ErrorsTest : public deqp::TestCase
1963*35238bceSAndroid Build Coastguard Worker {
1964*35238bceSAndroid Build Coastguard Worker public:
1965*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
1966*35238bceSAndroid Build Coastguard Worker     ErrorsTest(deqp::Context &context);
1967*35238bceSAndroid Build Coastguard Worker 
1968*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
1969*35238bceSAndroid Build Coastguard Worker 
1970*35238bceSAndroid Build Coastguard Worker private:
1971*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
1972*35238bceSAndroid Build Coastguard Worker     ErrorsTest(const ErrorsTest &other);
1973*35238bceSAndroid Build Coastguard Worker     ErrorsTest &operator=(const ErrorsTest &other);
1974*35238bceSAndroid Build Coastguard Worker 
1975*35238bceSAndroid Build Coastguard Worker     /* API entry points. */
1976*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLCLEARNAMEDBUFFERDATA)(glw::GLuint buffer, glw::GLenum internalformat,
1977*35238bceSAndroid Build Coastguard Worker                                                           glw::GLenum format, glw::GLenum type,
1978*35238bceSAndroid Build Coastguard Worker                                                           const glw::GLvoid *data);
1979*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLCLEARNAMEDBUFFERSUBDATA)(glw::GLuint buffer, glw::GLenum internalformat,
1980*35238bceSAndroid Build Coastguard Worker                                                              glw::GLintptr offset, glw::GLsizeiptr size,
1981*35238bceSAndroid Build Coastguard Worker                                                              glw::GLenum format, glw::GLenum type,
1982*35238bceSAndroid Build Coastguard Worker                                                              const glw::GLvoid *data);
1983*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLCOPYNAMEDBUFFERSUBDATA)(glw::GLuint readBuffer, glw::GLuint writeBuffer,
1984*35238bceSAndroid Build Coastguard Worker                                                             glw::GLintptr readOffset, glw::GLintptr writeOffset,
1985*35238bceSAndroid Build Coastguard Worker                                                             glw::GLsizeiptr size);
1986*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLFLUSHMAPPEDNAMEDBUFFERRANGE)(glw::GLuint buffer, glw::GLintptr offset,
1987*35238bceSAndroid Build Coastguard Worker                                                                  glw::GLsizeiptr length);
1988*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLGETNAMEDBUFFERPARAMETERI64V)(glw::GLuint buffer, glw::GLenum pname,
1989*35238bceSAndroid Build Coastguard Worker                                                                  glw::GLint64 *data);
1990*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLGETNAMEDBUFFERPARAMETERIV)(glw::GLuint buffer, glw::GLenum pname, glw::GLint *data);
1991*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLGETNAMEDBUFFERPOINTERV)(glw::GLuint buffer, glw::GLenum pname,
1992*35238bceSAndroid Build Coastguard Worker                                                             glw::GLvoid **params);
1993*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLGETNAMEDBUFFERSUBDATA)(glw::GLuint buffer, glw::GLintptr offset,
1994*35238bceSAndroid Build Coastguard Worker                                                            glw::GLsizeiptr size, glw::GLvoid *data);
1995*35238bceSAndroid Build Coastguard Worker     typedef void *(GLW_APIENTRY *PFNGLMAPNAMEDBUFFER)(glw::GLuint buffer, glw::GLenum access);
1996*35238bceSAndroid Build Coastguard Worker     typedef void *(GLW_APIENTRY *PFNGLMAPNAMEDBUFFERRANGE)(glw::GLuint buffer, glw::GLintptr offset,
1997*35238bceSAndroid Build Coastguard Worker                                                            glw::GLsizeiptr length, glw::GLbitfield access);
1998*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLNAMEDBUFFERDATA)(glw::GLuint buffer, glw::GLsizeiptr size, const glw::GLvoid *data,
1999*35238bceSAndroid Build Coastguard Worker                                                      glw::GLenum usage);
2000*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLNAMEDBUFFERSTORAGE)(glw::GLuint buffer, glw::GLsizeiptr size,
2001*35238bceSAndroid Build Coastguard Worker                                                         const glw::GLvoid *data, glw::GLbitfield flags);
2002*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLNAMEDBUFFERSUBDATA)(glw::GLuint buffer, glw::GLintptr offset, glw::GLsizeiptr size,
2003*35238bceSAndroid Build Coastguard Worker                                                         const glw::GLvoid *data);
2004*35238bceSAndroid Build Coastguard Worker     typedef glw::GLboolean(GLW_APIENTRY *PFNGLUNMAPNAMEDBUFFER)(glw::GLuint buffer);
2005*35238bceSAndroid Build Coastguard Worker 
2006*35238bceSAndroid Build Coastguard Worker     PFNGLCLEARNAMEDBUFFERDATA m_pClearNamedBufferData;
2007*35238bceSAndroid Build Coastguard Worker     PFNGLCLEARNAMEDBUFFERSUBDATA m_pClearNamedBufferSubData;
2008*35238bceSAndroid Build Coastguard Worker     PFNGLCOPYNAMEDBUFFERSUBDATA m_pCopyNamedBufferSubData;
2009*35238bceSAndroid Build Coastguard Worker     PFNGLFLUSHMAPPEDNAMEDBUFFERRANGE m_pFlushMappedNamedBufferRange;
2010*35238bceSAndroid Build Coastguard Worker     PFNGLGETNAMEDBUFFERPARAMETERI64V m_pGetNamedBufferParameteri64v;
2011*35238bceSAndroid Build Coastguard Worker     PFNGLGETNAMEDBUFFERPARAMETERIV m_pGetNamedBufferParameteriv;
2012*35238bceSAndroid Build Coastguard Worker     PFNGLGETNAMEDBUFFERPOINTERV m_pGetNamedBufferPointerv;
2013*35238bceSAndroid Build Coastguard Worker     PFNGLGETNAMEDBUFFERSUBDATA m_pGetNamedBufferSubData;
2014*35238bceSAndroid Build Coastguard Worker     PFNGLMAPNAMEDBUFFER m_pMapNamedBuffer;
2015*35238bceSAndroid Build Coastguard Worker     PFNGLMAPNAMEDBUFFERRANGE m_pMapNamedBufferRange;
2016*35238bceSAndroid Build Coastguard Worker     PFNGLNAMEDBUFFERDATA m_pNamedBufferData;
2017*35238bceSAndroid Build Coastguard Worker     PFNGLNAMEDBUFFERSTORAGE m_pNamedBufferStorage;
2018*35238bceSAndroid Build Coastguard Worker     PFNGLNAMEDBUFFERSUBDATA m_pNamedBufferSubData;
2019*35238bceSAndroid Build Coastguard Worker     PFNGLUNMAPNAMEDBUFFER m_pUnmapNamedBuffer;
2020*35238bceSAndroid Build Coastguard Worker 
2021*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
2022*35238bceSAndroid Build Coastguard Worker     bool TestErrorsOfClearNamedBufferData();
2023*35238bceSAndroid Build Coastguard Worker     bool TestErrorsOfClearNamedBufferSubData();
2024*35238bceSAndroid Build Coastguard Worker     bool TestErrorsOfCopyNamedBufferSubData();
2025*35238bceSAndroid Build Coastguard Worker     bool TestErrorsOfCreateBuffers();
2026*35238bceSAndroid Build Coastguard Worker     bool TestErrorsOfFlushMappedNamedBufferRange();
2027*35238bceSAndroid Build Coastguard Worker     bool TestErrorsOfGetNamedBufferParameter();
2028*35238bceSAndroid Build Coastguard Worker     bool TestErrorsOfGetNamedBufferPointerv();
2029*35238bceSAndroid Build Coastguard Worker     bool TestErrorsOfGetNamedBufferSubData();
2030*35238bceSAndroid Build Coastguard Worker     bool TestErrorsOfMapNamedBuffer();
2031*35238bceSAndroid Build Coastguard Worker     bool TestErrorsOfMapNamedBufferRange();
2032*35238bceSAndroid Build Coastguard Worker     bool TestErrorsOfNamedBufferData();
2033*35238bceSAndroid Build Coastguard Worker     bool TestErrorsOfNamedBufferStorage();
2034*35238bceSAndroid Build Coastguard Worker     bool TestErrorsOfNamedBufferSubData();
2035*35238bceSAndroid Build Coastguard Worker     bool TestErrorsOfUnmapNamedBuffer();
2036*35238bceSAndroid Build Coastguard Worker 
2037*35238bceSAndroid Build Coastguard Worker     bool ErrorCheckAndLog(const glw::GLchar *function_name, const glw::GLenum expected_error,
2038*35238bceSAndroid Build Coastguard Worker                           const glw::GLchar *when_shall_be_generated);
2039*35238bceSAndroid Build Coastguard Worker };
2040*35238bceSAndroid Build Coastguard Worker /* ErrorsTest class */
2041*35238bceSAndroid Build Coastguard Worker 
2042*35238bceSAndroid Build Coastguard Worker /** @class FunctionalTest
2043*35238bceSAndroid Build Coastguard Worker  *
2044*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Buffer Objects Functional Test.
2045*35238bceSAndroid Build Coastguard Worker  *
2046*35238bceSAndroid Build Coastguard Worker  *         This test verifies basic usage in rendering pipeline of the tested
2047*35238bceSAndroid Build Coastguard Worker  *         functions:
2048*35238bceSAndroid Build Coastguard Worker  *         -  ClearNamedBufferData,
2049*35238bceSAndroid Build Coastguard Worker  *         -  ClearNamedBufferSubData,
2050*35238bceSAndroid Build Coastguard Worker  *         -  CopyNamedBufferSubData,
2051*35238bceSAndroid Build Coastguard Worker  *         -  FlushMappedNamedBufferRange,
2052*35238bceSAndroid Build Coastguard Worker  *         -  GetNamedBufferParameteri64v,
2053*35238bceSAndroid Build Coastguard Worker  *         -  GetNamedBufferParameteriv,
2054*35238bceSAndroid Build Coastguard Worker  *         -  GetNamedBufferPointerv,
2055*35238bceSAndroid Build Coastguard Worker  *         -  GetNamedBufferSubData,
2056*35238bceSAndroid Build Coastguard Worker  *         -  MapNamedBuffer,
2057*35238bceSAndroid Build Coastguard Worker  *         -  MapNamedBufferRange,
2058*35238bceSAndroid Build Coastguard Worker  *         -  NamedBufferData,
2059*35238bceSAndroid Build Coastguard Worker  *         -  NamedBufferStorage,
2060*35238bceSAndroid Build Coastguard Worker  *         -  NamedBufferSubData and
2061*35238bceSAndroid Build Coastguard Worker  *         -  UnmapNamedBuffer.
2062*35238bceSAndroid Build Coastguard Worker  *
2063*35238bceSAndroid Build Coastguard Worker  *         Test follows the steps:
2064*35238bceSAndroid Build Coastguard Worker  *
2065*35238bceSAndroid Build Coastguard Worker  *             Prepare program with vertex shader and fragment shader. Fragment shader
2066*35238bceSAndroid Build Coastguard Worker  *             shall be pass-trough. Vertex shader shall have one integer input
2067*35238bceSAndroid Build Coastguard Worker  *             variable. Vertex shader shall output (to transform feedback) square of
2068*35238bceSAndroid Build Coastguard Worker  *             input variable. gl_Position shall be set up to vec4(0.0, 0.0, 0.0, 1.0).
2069*35238bceSAndroid Build Coastguard Worker  *             Build and use the program.
2070*35238bceSAndroid Build Coastguard Worker  *
2071*35238bceSAndroid Build Coastguard Worker  *             Create and bind empty vertex array object.
2072*35238bceSAndroid Build Coastguard Worker  *
2073*35238bceSAndroid Build Coastguard Worker  *             Prepare one buffer using CreateBuffers and NamedBufferStorage with size
2074*35238bceSAndroid Build Coastguard Worker  *             of 6 integers and passing pointer to data {1, 2, 3, 4, 5, 5} and dynamic
2075*35238bceSAndroid Build Coastguard Worker  *             storage flag set on. Clear (with 0) the first element with
2076*35238bceSAndroid Build Coastguard Worker  *             ClearNamedBufferSubData. Set second data element to 1 using
2077*35238bceSAndroid Build Coastguard Worker  *             NamedBufferSubData. Set third data element to 2 using MapNamedBuffer
2078*35238bceSAndroid Build Coastguard Worker  *             and UnmapNamedBuffer. Bind it to ARRAY_BUFFER binding point. Copy forth
2079*35238bceSAndroid Build Coastguard Worker  *             element into fifth element using CopyNamedBufferSubData. Set fourth data
2080*35238bceSAndroid Build Coastguard Worker  *             element using MapNamedBufferRange and FlushMappedNamedBuffer to 3.
2081*35238bceSAndroid Build Coastguard Worker  *             During mapping check that GetNamedBufferPointerv called with
2082*35238bceSAndroid Build Coastguard Worker  *             BUFFER_MAP_POINTER returns proper pointer. Unmap it using
2083*35238bceSAndroid Build Coastguard Worker  *             UnmapNamedBuffer function. Setup buffer as an input attribute to GLSL
2084*35238bceSAndroid Build Coastguard Worker  *             program. Consequently, the resulting buffer shall be {0, 1, 2, 3, 4, 5}.
2085*35238bceSAndroid Build Coastguard Worker  *
2086*35238bceSAndroid Build Coastguard Worker  *             Prepare one buffer using GenBuffers. Bind it to transform feedback.
2087*35238bceSAndroid Build Coastguard Worker  *             Allocate it's storage using NamedBufferData with size of 7 integers and
2088*35238bceSAndroid Build Coastguard Worker  *             passing pointer to data {0, 0, 0, 0, 0, 0, 36}. Set up this buffer as
2089*35238bceSAndroid Build Coastguard Worker  *             transform feedback output.
2090*35238bceSAndroid Build Coastguard Worker  *
2091*35238bceSAndroid Build Coastguard Worker  *             Begin transform feedback.
2092*35238bceSAndroid Build Coastguard Worker  *
2093*35238bceSAndroid Build Coastguard Worker  *             Draw six indices using points.
2094*35238bceSAndroid Build Coastguard Worker  *
2095*35238bceSAndroid Build Coastguard Worker  *             End transform feedback.
2096*35238bceSAndroid Build Coastguard Worker  *
2097*35238bceSAndroid Build Coastguard Worker  *             Query array buffer's parameter BUFFER_IMMUTABLE_STORAGE with
2098*35238bceSAndroid Build Coastguard Worker  *             GetNamedBufferParameteriv and compare with previous setup.
2099*35238bceSAndroid Build Coastguard Worker  *
2100*35238bceSAndroid Build Coastguard Worker  *             Query transform feedback buffer size with GetNamedBufferParameteri64v
2101*35238bceSAndroid Build Coastguard Worker  *             and compare with previous setup.
2102*35238bceSAndroid Build Coastguard Worker  *
2103*35238bceSAndroid Build Coastguard Worker  *             Fetch transform feedback buffer content using GetNamedBufferSubData and
2104*35238bceSAndroid Build Coastguard Worker  *             queried size.
2105*35238bceSAndroid Build Coastguard Worker  *
2106*35238bceSAndroid Build Coastguard Worker  *             Check that fetched data is equal to {0, 1, 4, 9, 16, 25, 36}.
2107*35238bceSAndroid Build Coastguard Worker  *
2108*35238bceSAndroid Build Coastguard Worker  *             If any check fails, test shall fail.
2109*35238bceSAndroid Build Coastguard Worker  *
2110*35238bceSAndroid Build Coastguard Worker  *             If any of the tested functions generates error, test shall fail.
2111*35238bceSAndroid Build Coastguard Worker  */
2112*35238bceSAndroid Build Coastguard Worker class FunctionalTest : public deqp::TestCase
2113*35238bceSAndroid Build Coastguard Worker {
2114*35238bceSAndroid Build Coastguard Worker public:
2115*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
2116*35238bceSAndroid Build Coastguard Worker     FunctionalTest(deqp::Context &context);
2117*35238bceSAndroid Build Coastguard Worker 
2118*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
2119*35238bceSAndroid Build Coastguard Worker 
2120*35238bceSAndroid Build Coastguard Worker private:
2121*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
2122*35238bceSAndroid Build Coastguard Worker     FunctionalTest(const FunctionalTest &other);
2123*35238bceSAndroid Build Coastguard Worker     FunctionalTest &operator=(const FunctionalTest &other);
2124*35238bceSAndroid Build Coastguard Worker 
2125*35238bceSAndroid Build Coastguard Worker     /* API entry points. */
2126*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLCLEARNAMEDBUFFERDATA)(glw::GLuint buffer, glw::GLenum internalformat,
2127*35238bceSAndroid Build Coastguard Worker                                                           glw::GLenum format, glw::GLenum type,
2128*35238bceSAndroid Build Coastguard Worker                                                           const glw::GLvoid *data);
2129*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLCLEARNAMEDBUFFERSUBDATA)(glw::GLuint buffer, glw::GLenum internalformat,
2130*35238bceSAndroid Build Coastguard Worker                                                              glw::GLintptr offset, glw::GLsizeiptr size,
2131*35238bceSAndroid Build Coastguard Worker                                                              glw::GLenum format, glw::GLenum type,
2132*35238bceSAndroid Build Coastguard Worker                                                              const glw::GLvoid *data);
2133*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLCOPYNAMEDBUFFERSUBDATA)(glw::GLuint readBuffer, glw::GLuint writeBuffer,
2134*35238bceSAndroid Build Coastguard Worker                                                             glw::GLintptr readOffset, glw::GLintptr writeOffset,
2135*35238bceSAndroid Build Coastguard Worker                                                             glw::GLsizeiptr size);
2136*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLFLUSHMAPPEDNAMEDBUFFERRANGE)(glw::GLuint buffer, glw::GLintptr offset,
2137*35238bceSAndroid Build Coastguard Worker                                                                  glw::GLsizeiptr length);
2138*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLGETNAMEDBUFFERPARAMETERI64V)(glw::GLuint buffer, glw::GLenum pname,
2139*35238bceSAndroid Build Coastguard Worker                                                                  glw::GLint64 *data);
2140*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLGETNAMEDBUFFERPARAMETERIV)(glw::GLuint buffer, glw::GLenum pname, glw::GLint *data);
2141*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLGETNAMEDBUFFERPOINTERV)(glw::GLuint buffer, glw::GLenum pname,
2142*35238bceSAndroid Build Coastguard Worker                                                             glw::GLvoid **params);
2143*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLGETNAMEDBUFFERSUBDATA)(glw::GLuint buffer, glw::GLintptr offset,
2144*35238bceSAndroid Build Coastguard Worker                                                            glw::GLsizeiptr size, glw::GLvoid *data);
2145*35238bceSAndroid Build Coastguard Worker     typedef void *(GLW_APIENTRY *PFNGLMAPNAMEDBUFFER)(glw::GLuint buffer, glw::GLenum access);
2146*35238bceSAndroid Build Coastguard Worker     typedef void *(GLW_APIENTRY *PFNGLMAPNAMEDBUFFERRANGE)(glw::GLuint buffer, glw::GLintptr offset,
2147*35238bceSAndroid Build Coastguard Worker                                                            glw::GLsizeiptr length, glw::GLbitfield access);
2148*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLNAMEDBUFFERDATA)(glw::GLuint buffer, glw::GLsizeiptr size, const glw::GLvoid *data,
2149*35238bceSAndroid Build Coastguard Worker                                                      glw::GLenum usage);
2150*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLNAMEDBUFFERSTORAGE)(glw::GLuint buffer, glw::GLsizeiptr size,
2151*35238bceSAndroid Build Coastguard Worker                                                         const glw::GLvoid *data, glw::GLbitfield flags);
2152*35238bceSAndroid Build Coastguard Worker     typedef void(GLW_APIENTRY *PFNGLNAMEDBUFFERSUBDATA)(glw::GLuint buffer, glw::GLintptr offset, glw::GLsizeiptr size,
2153*35238bceSAndroid Build Coastguard Worker                                                         const glw::GLvoid *data);
2154*35238bceSAndroid Build Coastguard Worker     typedef glw::GLboolean(GLW_APIENTRY *PFNGLUNMAPNAMEDBUFFER)(glw::GLuint buffer);
2155*35238bceSAndroid Build Coastguard Worker 
2156*35238bceSAndroid Build Coastguard Worker     PFNGLCLEARNAMEDBUFFERDATA m_pClearNamedBufferData;
2157*35238bceSAndroid Build Coastguard Worker     PFNGLCLEARNAMEDBUFFERSUBDATA m_pClearNamedBufferSubData;
2158*35238bceSAndroid Build Coastguard Worker     PFNGLCOPYNAMEDBUFFERSUBDATA m_pCopyNamedBufferSubData;
2159*35238bceSAndroid Build Coastguard Worker     PFNGLFLUSHMAPPEDNAMEDBUFFERRANGE m_pFlushMappedNamedBufferRange;
2160*35238bceSAndroid Build Coastguard Worker     PFNGLGETNAMEDBUFFERPARAMETERI64V m_pGetNamedBufferParameteri64v;
2161*35238bceSAndroid Build Coastguard Worker     PFNGLGETNAMEDBUFFERPARAMETERIV m_pGetNamedBufferParameteriv;
2162*35238bceSAndroid Build Coastguard Worker     PFNGLGETNAMEDBUFFERPOINTERV m_pGetNamedBufferPointerv;
2163*35238bceSAndroid Build Coastguard Worker     PFNGLGETNAMEDBUFFERSUBDATA m_pGetNamedBufferSubData;
2164*35238bceSAndroid Build Coastguard Worker     PFNGLMAPNAMEDBUFFER m_pMapNamedBuffer;
2165*35238bceSAndroid Build Coastguard Worker     PFNGLMAPNAMEDBUFFERRANGE m_pMapNamedBufferRange;
2166*35238bceSAndroid Build Coastguard Worker     PFNGLNAMEDBUFFERDATA m_pNamedBufferData;
2167*35238bceSAndroid Build Coastguard Worker     PFNGLNAMEDBUFFERSTORAGE m_pNamedBufferStorage;
2168*35238bceSAndroid Build Coastguard Worker     PFNGLNAMEDBUFFERSUBDATA m_pNamedBufferSubData;
2169*35238bceSAndroid Build Coastguard Worker     PFNGLUNMAPNAMEDBUFFER m_pUnmapNamedBuffer;
2170*35238bceSAndroid Build Coastguard Worker 
2171*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
2172*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_po;
2173*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_vao;
2174*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_bo_in;
2175*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_bo_out;
2176*35238bceSAndroid Build Coastguard Worker     glw::GLint m_attrib_location;
2177*35238bceSAndroid Build Coastguard Worker 
2178*35238bceSAndroid Build Coastguard Worker     /* Private static variables. */
2179*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar s_vertex_shader[];
2180*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar s_fragment_shader[];
2181*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar s_vertex_shader_input_name[];
2182*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_vertex_shader_output_name;
2183*35238bceSAndroid Build Coastguard Worker 
2184*35238bceSAndroid Build Coastguard Worker     static const glw::GLint s_initial_data_a[];
2185*35238bceSAndroid Build Coastguard Worker     static const glw::GLint s_initial_data_b[];
2186*35238bceSAndroid Build Coastguard Worker     static const glw::GLint s_expected_data[];
2187*35238bceSAndroid Build Coastguard Worker 
2188*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
2189*35238bceSAndroid Build Coastguard Worker     void BuildProgram();
2190*35238bceSAndroid Build Coastguard Worker     void PrepareVertexArrayObject();
2191*35238bceSAndroid Build Coastguard Worker     bool PrepareInputBuffer();
2192*35238bceSAndroid Build Coastguard Worker     bool PrepareOutputBuffer();
2193*35238bceSAndroid Build Coastguard Worker     void Draw();
2194*35238bceSAndroid Build Coastguard Worker     bool CheckArrayBufferImmutableFlag();
2195*35238bceSAndroid Build Coastguard Worker     bool CheckTransformFeedbackBufferSize();
2196*35238bceSAndroid Build Coastguard Worker     bool CheckTransformFeedbackResult();
2197*35238bceSAndroid Build Coastguard Worker     void Cleanup();
2198*35238bceSAndroid Build Coastguard Worker };
2199*35238bceSAndroid Build Coastguard Worker /* FunctionalTest class */
2200*35238bceSAndroid Build Coastguard Worker } // namespace Buffers
2201*35238bceSAndroid Build Coastguard Worker 
2202*35238bceSAndroid Build Coastguard Worker namespace Framebuffers
2203*35238bceSAndroid Build Coastguard Worker {
2204*35238bceSAndroid Build Coastguard Worker /** Framebuffer Creation
2205*35238bceSAndroid Build Coastguard Worker  *
2206*35238bceSAndroid Build Coastguard Worker  *      Create at least two framebuffer objects using GenFramebuffers function.
2207*35238bceSAndroid Build Coastguard Worker  *      Check them without binding, using IsFramebuffer function. Expect FALSE.
2208*35238bceSAndroid Build Coastguard Worker  *
2209*35238bceSAndroid Build Coastguard Worker  *      Create at least two framebuffer objects using CreateFramebuffers
2210*35238bceSAndroid Build Coastguard Worker  *      function. Check them without binding, using IsFramebuffer function.
2211*35238bceSAndroid Build Coastguard Worker  *      Expect TRUE.
2212*35238bceSAndroid Build Coastguard Worker  *
2213*35238bceSAndroid Build Coastguard Worker  *      Release objects.
2214*35238bceSAndroid Build Coastguard Worker  */
2215*35238bceSAndroid Build Coastguard Worker class CreationTest : public deqp::TestCase
2216*35238bceSAndroid Build Coastguard Worker {
2217*35238bceSAndroid Build Coastguard Worker public:
2218*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
2219*35238bceSAndroid Build Coastguard Worker     CreationTest(deqp::Context &context);
2220*35238bceSAndroid Build Coastguard Worker 
2221*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
2222*35238bceSAndroid Build Coastguard Worker 
2223*35238bceSAndroid Build Coastguard Worker private:
2224*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
2225*35238bceSAndroid Build Coastguard Worker     CreationTest(const CreationTest &other);
2226*35238bceSAndroid Build Coastguard Worker     CreationTest &operator=(const CreationTest &other);
2227*35238bceSAndroid Build Coastguard Worker };
2228*35238bceSAndroid Build Coastguard Worker /* CreationTest class */
2229*35238bceSAndroid Build Coastguard Worker 
2230*35238bceSAndroid Build Coastguard Worker /** Framebuffer Renderbuffer Attachment
2231*35238bceSAndroid Build Coastguard Worker  *
2232*35238bceSAndroid Build Coastguard Worker  *      Create renderbuffer using GenRenderbuffers function. Bind it. Prepare
2233*35238bceSAndroid Build Coastguard Worker  *      its storage using RenderbufferStorage. Unbind it.
2234*35238bceSAndroid Build Coastguard Worker  *
2235*35238bceSAndroid Build Coastguard Worker  *      Create framebuffer using CreateFramebuffers. Setup renderbuffer storage.
2236*35238bceSAndroid Build Coastguard Worker  *      Attach the renderbuffer to the framebuffer using
2237*35238bceSAndroid Build Coastguard Worker  *      NamedFramebufferRenderbuffer function.
2238*35238bceSAndroid Build Coastguard Worker  *
2239*35238bceSAndroid Build Coastguard Worker  *      Bind framebuffer and check its status using CheckFramebufferStatus
2240*35238bceSAndroid Build Coastguard Worker  *      function call.
2241*35238bceSAndroid Build Coastguard Worker  *
2242*35238bceSAndroid Build Coastguard Worker  *      Clear the framebuffer's content with the reference value. Fetch the
2243*35238bceSAndroid Build Coastguard Worker  *      framebuffer's content using ReadPixels and compare it with reference
2244*35238bceSAndroid Build Coastguard Worker  *      values.
2245*35238bceSAndroid Build Coastguard Worker  *
2246*35238bceSAndroid Build Coastguard Worker  *      Repeat the test for following attachment types:
2247*35238bceSAndroid Build Coastguard Worker  *       -  COLOR_ATTACHMENTi for i from 0 to value of MAX_COLOR_ATTACHMENTS
2248*35238bceSAndroid Build Coastguard Worker  *          minus one,
2249*35238bceSAndroid Build Coastguard Worker  *       -  DEPTH_ATTACHMENT,
2250*35238bceSAndroid Build Coastguard Worker  *       -  STENCIL_ATTACHMENT and
2251*35238bceSAndroid Build Coastguard Worker  *       -  DEPTH_STENCIL_ATTACHMENT.
2252*35238bceSAndroid Build Coastguard Worker  */
2253*35238bceSAndroid Build Coastguard Worker class RenderbufferAttachmentTest : public deqp::TestCase
2254*35238bceSAndroid Build Coastguard Worker {
2255*35238bceSAndroid Build Coastguard Worker public:
2256*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
2257*35238bceSAndroid Build Coastguard Worker     RenderbufferAttachmentTest(deqp::Context &context);
2258*35238bceSAndroid Build Coastguard Worker 
2259*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
2260*35238bceSAndroid Build Coastguard Worker 
2261*35238bceSAndroid Build Coastguard Worker private:
2262*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
2263*35238bceSAndroid Build Coastguard Worker     RenderbufferAttachmentTest(const RenderbufferAttachmentTest &other);
2264*35238bceSAndroid Build Coastguard Worker     RenderbufferAttachmentTest &operator=(const RenderbufferAttachmentTest &other);
2265*35238bceSAndroid Build Coastguard Worker 
2266*35238bceSAndroid Build Coastguard Worker     bool Test(glw::GLenum attachment, glw::GLenum internalformat);
2267*35238bceSAndroid Build Coastguard Worker     void Clean();
2268*35238bceSAndroid Build Coastguard Worker 
2269*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
2270*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo;
2271*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo;
2272*35238bceSAndroid Build Coastguard Worker };
2273*35238bceSAndroid Build Coastguard Worker /* RenderbufferAttachmentTest class */
2274*35238bceSAndroid Build Coastguard Worker 
2275*35238bceSAndroid Build Coastguard Worker /** Named Framebuffer Texture Attachment
2276*35238bceSAndroid Build Coastguard Worker  *
2277*35238bceSAndroid Build Coastguard Worker  *      Create texture using CreateTexture function. Prepare its storage using
2278*35238bceSAndroid Build Coastguard Worker  *      TexStorage*D*.
2279*35238bceSAndroid Build Coastguard Worker  *
2280*35238bceSAndroid Build Coastguard Worker  *      Create framebuffer using CreateFramebuffers. Attach the texture to
2281*35238bceSAndroid Build Coastguard Worker  *      the framebuffer using NamedFramebufferTexture function. Repeat
2282*35238bceSAndroid Build Coastguard Worker  *      attachment for all texture levels.
2283*35238bceSAndroid Build Coastguard Worker  *
2284*35238bceSAndroid Build Coastguard Worker  *      Bind framebuffer and check its status using CheckFramebufferStatus
2285*35238bceSAndroid Build Coastguard Worker  *      function call.
2286*35238bceSAndroid Build Coastguard Worker  *
2287*35238bceSAndroid Build Coastguard Worker  *      Clear the framebuffer's content with the reference value. Fetch the
2288*35238bceSAndroid Build Coastguard Worker  *      framebuffer's content using ReadPixels and compare it with reference
2289*35238bceSAndroid Build Coastguard Worker  *      values.
2290*35238bceSAndroid Build Coastguard Worker  *
2291*35238bceSAndroid Build Coastguard Worker  *      Repeat the test for following attachment types:
2292*35238bceSAndroid Build Coastguard Worker  *       -  COLOR_ATTACHMENTi for i from 0 to value of MAX_COLOR_ATTACHMENTS
2293*35238bceSAndroid Build Coastguard Worker  *          minus one,
2294*35238bceSAndroid Build Coastguard Worker  *       -  DEPTH_ATTACHMENT,
2295*35238bceSAndroid Build Coastguard Worker  *       -  STENCIL_ATTACHMENT and
2296*35238bceSAndroid Build Coastguard Worker  *       -  DEPTH_STENCIL_ATTACHMENT.
2297*35238bceSAndroid Build Coastguard Worker  *
2298*35238bceSAndroid Build Coastguard Worker  *      Repeat the test for following texture targets:
2299*35238bceSAndroid Build Coastguard Worker  *       -  TEXTURE_RECTANGLE,
2300*35238bceSAndroid Build Coastguard Worker  *       -  TEXTURE_2D,
2301*35238bceSAndroid Build Coastguard Worker  *       -  TEXTURE_2D_MULTISAMPLE,
2302*35238bceSAndroid Build Coastguard Worker  *       -  TEXTURE_CUBE_MAP.
2303*35238bceSAndroid Build Coastguard Worker  *
2304*35238bceSAndroid Build Coastguard Worker  *      Repeat the test with each possible texture level, that is:
2305*35238bceSAndroid Build Coastguard Worker  *       -  0 for TEXTURE_RECTANGLE and TEXTURE_2D_MULTISAMPLE targets;
2306*35238bceSAndroid Build Coastguard Worker  *       -  from zero to value one less than base 2 logarithm of the value of
2307*35238bceSAndroid Build Coastguard Worker  *          MAX_3D_TEXTURE_SIZE for TEXTURE_2D target
2308*35238bceSAndroid Build Coastguard Worker  *       -  from zero to value one less than base 2 logarithm of the value of
2309*35238bceSAndroid Build Coastguard Worker  *          MAX_CUBE_MAP_TEXTURE_SIZE for TEXTURE_CUBE_MAP target.
2310*35238bceSAndroid Build Coastguard Worker  */
2311*35238bceSAndroid Build Coastguard Worker class TextureAttachmentTest : public deqp::TestCase
2312*35238bceSAndroid Build Coastguard Worker {
2313*35238bceSAndroid Build Coastguard Worker public:
2314*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
2315*35238bceSAndroid Build Coastguard Worker     TextureAttachmentTest(deqp::Context &context);
2316*35238bceSAndroid Build Coastguard Worker 
2317*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
2318*35238bceSAndroid Build Coastguard Worker 
2319*35238bceSAndroid Build Coastguard Worker private:
2320*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
2321*35238bceSAndroid Build Coastguard Worker     TextureAttachmentTest(const TextureAttachmentTest &other);
2322*35238bceSAndroid Build Coastguard Worker     TextureAttachmentTest &operator=(const TextureAttachmentTest &other);
2323*35238bceSAndroid Build Coastguard Worker 
2324*35238bceSAndroid Build Coastguard Worker     bool Test(glw::GLenum attachment, bool is_color_attachment, glw::GLenum texture_target, glw::GLenum internalformat,
2325*35238bceSAndroid Build Coastguard Worker               glw::GLuint levels);
2326*35238bceSAndroid Build Coastguard Worker     bool SubTestAttachmentError(glw::GLenum attachment, glw::GLenum texture_target, glw::GLuint level,
2327*35238bceSAndroid Build Coastguard Worker                                 glw::GLuint levels);
2328*35238bceSAndroid Build Coastguard Worker     bool SubTestStatus(glw::GLenum attachment, glw::GLenum texture_target, glw::GLuint level, glw::GLuint levels);
2329*35238bceSAndroid Build Coastguard Worker     bool SubTestContent(glw::GLenum attachment, glw::GLenum texture_target, glw::GLenum internalformat,
2330*35238bceSAndroid Build Coastguard Worker                         glw::GLuint level, glw::GLuint levels);
2331*35238bceSAndroid Build Coastguard Worker     glw::GLuint MaxTextureLevels(glw::GLenum texture_target);
2332*35238bceSAndroid Build Coastguard Worker     void Clear();
2333*35238bceSAndroid Build Coastguard Worker     void Clean();
2334*35238bceSAndroid Build Coastguard Worker 
2335*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
2336*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo;
2337*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to;
2338*35238bceSAndroid Build Coastguard Worker 
2339*35238bceSAndroid Build Coastguard Worker     /* Static private variables. */
2340*35238bceSAndroid Build Coastguard Worker     static const glw::GLenum s_targets[];
2341*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_targets_count;
2342*35238bceSAndroid Build Coastguard Worker 
2343*35238bceSAndroid Build Coastguard Worker     static const glw::GLfloat s_reference_color[4];
2344*35238bceSAndroid Build Coastguard Worker     static const glw::GLint s_reference_color_integer[4];
2345*35238bceSAndroid Build Coastguard Worker     static const glw::GLfloat s_reference_depth;
2346*35238bceSAndroid Build Coastguard Worker     static const glw::GLint s_reference_stencil;
2347*35238bceSAndroid Build Coastguard Worker };
2348*35238bceSAndroid Build Coastguard Worker /* TextureAttachmentTest class */
2349*35238bceSAndroid Build Coastguard Worker 
2350*35238bceSAndroid Build Coastguard Worker /** Named Framebuffer Texture Layer Attachment
2351*35238bceSAndroid Build Coastguard Worker  *
2352*35238bceSAndroid Build Coastguard Worker  *      Create texture using CreateTexture function. Prepare its storage using
2353*35238bceSAndroid Build Coastguard Worker  *      TexStorage*D*.
2354*35238bceSAndroid Build Coastguard Worker  *
2355*35238bceSAndroid Build Coastguard Worker  *      Create framebuffer using CreateFramebuffers. Attach the texture to the
2356*35238bceSAndroid Build Coastguard Worker  *      framebuffer using NamedFramebufferTextureLayer function.
2357*35238bceSAndroid Build Coastguard Worker  *
2358*35238bceSAndroid Build Coastguard Worker  *      Bind framebuffer and check its status using CheckFramebufferStatus
2359*35238bceSAndroid Build Coastguard Worker  *      function call.
2360*35238bceSAndroid Build Coastguard Worker  *
2361*35238bceSAndroid Build Coastguard Worker  *      For non multisample target, clean the framebuffer's content with the
2362*35238bceSAndroid Build Coastguard Worker  *      reference value. Fetch one pixel from framebuffer's content using
2363*35238bceSAndroid Build Coastguard Worker  *      ReadPixels and compare it with reference values.
2364*35238bceSAndroid Build Coastguard Worker  *
2365*35238bceSAndroid Build Coastguard Worker  *      Repeat the test for following attachment types:
2366*35238bceSAndroid Build Coastguard Worker  *       -  COLOR_ATTACHMENTi for i from 0 to value of MAX_COLOR_ATTACHMENTS
2367*35238bceSAndroid Build Coastguard Worker  *          minus one,
2368*35238bceSAndroid Build Coastguard Worker  *       -  DEPTH_ATTACHMENT,
2369*35238bceSAndroid Build Coastguard Worker  *       -  STENCIL_ATTACHMENT and
2370*35238bceSAndroid Build Coastguard Worker  *       -  DEPTH_STENCIL_ATTACHMENT.
2371*35238bceSAndroid Build Coastguard Worker  *
2372*35238bceSAndroid Build Coastguard Worker  *      Repeat the test for following texture targets:
2373*35238bceSAndroid Build Coastguard Worker  *       -  TEXTURE_2D_MULTISAMPLE_ARRAY,
2374*35238bceSAndroid Build Coastguard Worker  *       -  TEXTURE_2D_ARRAY,
2375*35238bceSAndroid Build Coastguard Worker  *       -  TEXTURE_CUBE_MAP_ARRAY,
2376*35238bceSAndroid Build Coastguard Worker  *       -  TEXTURE_3D.
2377*35238bceSAndroid Build Coastguard Worker  *
2378*35238bceSAndroid Build Coastguard Worker  *      Repeat the test for texture levels from zero to value one less than base
2379*35238bceSAndroid Build Coastguard Worker  *      2 logarithm of the value of MAX_3D_TEXTURE_SIZE.
2380*35238bceSAndroid Build Coastguard Worker  *
2381*35238bceSAndroid Build Coastguard Worker  *      Repeat with texture which has number of layers:
2382*35238bceSAndroid Build Coastguard Worker  *       -  1,
2383*35238bceSAndroid Build Coastguard Worker  *       -  256,
2384*35238bceSAndroid Build Coastguard Worker  *       -  value of MAX_CUBE_MAP_TEXTURE_SIZE for TEXTURE_CUBE_ARRAY or value
2385*35238bceSAndroid Build Coastguard Worker  *          of MAX_3D_TEXTURE_SIZE.
2386*35238bceSAndroid Build Coastguard Worker  *      Test only limited set of the layers of the above textures to reduce time
2387*35238bceSAndroid Build Coastguard Worker  *      complexity of the test.
2388*35238bceSAndroid Build Coastguard Worker  */
2389*35238bceSAndroid Build Coastguard Worker class TextureLayerAttachmentTest : public deqp::TestCase
2390*35238bceSAndroid Build Coastguard Worker {
2391*35238bceSAndroid Build Coastguard Worker public:
2392*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
2393*35238bceSAndroid Build Coastguard Worker     TextureLayerAttachmentTest(deqp::Context &context);
2394*35238bceSAndroid Build Coastguard Worker 
2395*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
2396*35238bceSAndroid Build Coastguard Worker 
2397*35238bceSAndroid Build Coastguard Worker private:
2398*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
2399*35238bceSAndroid Build Coastguard Worker     TextureLayerAttachmentTest(const TextureLayerAttachmentTest &other);
2400*35238bceSAndroid Build Coastguard Worker     TextureLayerAttachmentTest &operator=(const TextureLayerAttachmentTest &other);
2401*35238bceSAndroid Build Coastguard Worker 
2402*35238bceSAndroid Build Coastguard Worker     bool Test(glw::GLenum attachment, bool is_color_attachment, glw::GLenum texture_target, glw::GLenum internalformat,
2403*35238bceSAndroid Build Coastguard Worker               glw::GLuint levels, glw::GLint layers);
2404*35238bceSAndroid Build Coastguard Worker     bool SubTestAttachmentError(glw::GLenum attachment, glw::GLenum texture_target, glw::GLuint level, glw::GLint layer,
2405*35238bceSAndroid Build Coastguard Worker                                 glw::GLuint levels, glw::GLint layers);
2406*35238bceSAndroid Build Coastguard Worker     bool SubTestStatus(glw::GLenum attachment, glw::GLenum texture_target, glw::GLuint level, glw::GLint layer,
2407*35238bceSAndroid Build Coastguard Worker                        glw::GLuint levels, glw::GLint layers);
2408*35238bceSAndroid Build Coastguard Worker     bool SubTestContent(glw::GLenum attachment, glw::GLenum texture_target, glw::GLenum internalformat,
2409*35238bceSAndroid Build Coastguard Worker                         glw::GLuint level, glw::GLint layer, glw::GLuint levels, glw::GLint layers);
2410*35238bceSAndroid Build Coastguard Worker     void Clear();
2411*35238bceSAndroid Build Coastguard Worker     glw::GLuint MaxTextureLevels(glw::GLenum texture_target);
2412*35238bceSAndroid Build Coastguard Worker     glw::GLuint MaxTextureLayers(glw::GLenum texture_target);
2413*35238bceSAndroid Build Coastguard Worker     void Clean();
2414*35238bceSAndroid Build Coastguard Worker 
2415*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
2416*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo;
2417*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to;
2418*35238bceSAndroid Build Coastguard Worker 
2419*35238bceSAndroid Build Coastguard Worker     /* Static private variables. */
2420*35238bceSAndroid Build Coastguard Worker     static const glw::GLenum s_targets[];
2421*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_targets_count;
2422*35238bceSAndroid Build Coastguard Worker 
2423*35238bceSAndroid Build Coastguard Worker     static const glw::GLfloat s_reference_color[4];
2424*35238bceSAndroid Build Coastguard Worker     static const glw::GLint s_reference_color_integer[4];
2425*35238bceSAndroid Build Coastguard Worker     static const glw::GLfloat s_reference_depth;
2426*35238bceSAndroid Build Coastguard Worker     static const glw::GLint s_reference_stencil;
2427*35238bceSAndroid Build Coastguard Worker };
2428*35238bceSAndroid Build Coastguard Worker /* TextureLayerAttachmentTest class */
2429*35238bceSAndroid Build Coastguard Worker 
2430*35238bceSAndroid Build Coastguard Worker /** Named Framebuffer Draw Read Buffer
2431*35238bceSAndroid Build Coastguard Worker  *
2432*35238bceSAndroid Build Coastguard Worker  *      Create named framebuffer with maximum number of color attachments (use
2433*35238bceSAndroid Build Coastguard Worker  *      named renderbuffer storage).
2434*35238bceSAndroid Build Coastguard Worker  *
2435*35238bceSAndroid Build Coastguard Worker  *      For each color attachment use NamedFramebufferDrawBuffer to set up it as
2436*35238bceSAndroid Build Coastguard Worker  *      a draw buffer. Clear it with unique color.
2437*35238bceSAndroid Build Coastguard Worker  *
2438*35238bceSAndroid Build Coastguard Worker  *      For each color attachment use NamedFramebufferReadBuffer to set up it as
2439*35238bceSAndroid Build Coastguard Worker  *      a read buffer. Fetch the pixel data and compare that it contains unique
2440*35238bceSAndroid Build Coastguard Worker  *      color with the attachment was cleared
2441*35238bceSAndroid Build Coastguard Worker  *
2442*35238bceSAndroid Build Coastguard Worker  *      Check that NamedFramebufferDrawBuffer and NamedFramebufferReadBuffer
2443*35238bceSAndroid Build Coastguard Worker  *      accept GL_NONE as mode without error.
2444*35238bceSAndroid Build Coastguard Worker  *
2445*35238bceSAndroid Build Coastguard Worker  *      Release all objects.
2446*35238bceSAndroid Build Coastguard Worker  */
2447*35238bceSAndroid Build Coastguard Worker class DrawReadBufferTest : public deqp::TestCase
2448*35238bceSAndroid Build Coastguard Worker {
2449*35238bceSAndroid Build Coastguard Worker public:
2450*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
2451*35238bceSAndroid Build Coastguard Worker     DrawReadBufferTest(deqp::Context &context);
2452*35238bceSAndroid Build Coastguard Worker 
2453*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
2454*35238bceSAndroid Build Coastguard Worker 
2455*35238bceSAndroid Build Coastguard Worker private:
2456*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
2457*35238bceSAndroid Build Coastguard Worker     DrawReadBufferTest(const DrawReadBufferTest &other);
2458*35238bceSAndroid Build Coastguard Worker     DrawReadBufferTest &operator=(const DrawReadBufferTest &other);
2459*35238bceSAndroid Build Coastguard Worker };
2460*35238bceSAndroid Build Coastguard Worker /* DrawReadBufferTest class */
2461*35238bceSAndroid Build Coastguard Worker 
2462*35238bceSAndroid Build Coastguard Worker /** Named Framebuffer Draw Buffers
2463*35238bceSAndroid Build Coastguard Worker  *
2464*35238bceSAndroid Build Coastguard Worker  *      Create named framebuffer with maximum number of color attachments (use
2465*35238bceSAndroid Build Coastguard Worker  *      named renderbuffer storage).
2466*35238bceSAndroid Build Coastguard Worker  *
2467*35238bceSAndroid Build Coastguard Worker  *      Set up all attachments as a draw buffer using the function
2468*35238bceSAndroid Build Coastguard Worker  *      NamedFramebufferDrawBuffers. Then clear them at once with unique color.
2469*35238bceSAndroid Build Coastguard Worker  *
2470*35238bceSAndroid Build Coastguard Worker  *      For each color attachment fetch pixel data and compare that contain
2471*35238bceSAndroid Build Coastguard Worker  *      the same unique color.
2472*35238bceSAndroid Build Coastguard Worker  *
2473*35238bceSAndroid Build Coastguard Worker  *      Release all objects.
2474*35238bceSAndroid Build Coastguard Worker  */
2475*35238bceSAndroid Build Coastguard Worker class DrawBuffersTest : public deqp::TestCase
2476*35238bceSAndroid Build Coastguard Worker {
2477*35238bceSAndroid Build Coastguard Worker public:
2478*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
2479*35238bceSAndroid Build Coastguard Worker     DrawBuffersTest(deqp::Context &context);
2480*35238bceSAndroid Build Coastguard Worker 
2481*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
2482*35238bceSAndroid Build Coastguard Worker 
2483*35238bceSAndroid Build Coastguard Worker private:
2484*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
2485*35238bceSAndroid Build Coastguard Worker     DrawBuffersTest(const DrawBuffersTest &other);
2486*35238bceSAndroid Build Coastguard Worker     DrawBuffersTest &operator=(const DrawBuffersTest &other);
2487*35238bceSAndroid Build Coastguard Worker 
2488*35238bceSAndroid Build Coastguard Worker     /* Private static constants. */
2489*35238bceSAndroid Build Coastguard Worker     static const glw::GLfloat s_rgba[4];
2490*35238bceSAndroid Build Coastguard Worker };
2491*35238bceSAndroid Build Coastguard Worker /* DrawReadBuffersTest class */
2492*35238bceSAndroid Build Coastguard Worker 
2493*35238bceSAndroid Build Coastguard Worker /** Invalidate Named Framebuffer Data
2494*35238bceSAndroid Build Coastguard Worker  *
2495*35238bceSAndroid Build Coastguard Worker  *      For default framebuffer try to invalidate each of COLOR, DEPTH, and
2496*35238bceSAndroid Build Coastguard Worker  *      STENCIL attachments. Expect no error.
2497*35238bceSAndroid Build Coastguard Worker  *
2498*35238bceSAndroid Build Coastguard Worker  *      For default framebuffer try to invalidate all (COLOR, DEPTH, and
2499*35238bceSAndroid Build Coastguard Worker  *      STENCIL) attachments. Expect no error.
2500*35238bceSAndroid Build Coastguard Worker  *
2501*35238bceSAndroid Build Coastguard Worker  *      Create named framebuffer with maximum number of color attachments (use
2502*35238bceSAndroid Build Coastguard Worker  *      named renderbuffer storage), depth attachment and stencil attachment.
2503*35238bceSAndroid Build Coastguard Worker  *
2504*35238bceSAndroid Build Coastguard Worker  *      Clear all attachments.
2505*35238bceSAndroid Build Coastguard Worker  *
2506*35238bceSAndroid Build Coastguard Worker  *      Try to invalidate content of all attachments using
2507*35238bceSAndroid Build Coastguard Worker  *      InvalidateNamedFramebufferData. Expect no error.
2508*35238bceSAndroid Build Coastguard Worker  *
2509*35238bceSAndroid Build Coastguard Worker  *      Try to invalidate content of each attachment using
2510*35238bceSAndroid Build Coastguard Worker  *      InvalidateNamedFramebufferData. Expect no error.
2511*35238bceSAndroid Build Coastguard Worker  *
2512*35238bceSAndroid Build Coastguard Worker  *      Release all objects.
2513*35238bceSAndroid Build Coastguard Worker  */
2514*35238bceSAndroid Build Coastguard Worker class InvalidateDataTest : public deqp::TestCase
2515*35238bceSAndroid Build Coastguard Worker {
2516*35238bceSAndroid Build Coastguard Worker public:
2517*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
2518*35238bceSAndroid Build Coastguard Worker     InvalidateDataTest(deqp::Context &context);
2519*35238bceSAndroid Build Coastguard Worker 
2520*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
2521*35238bceSAndroid Build Coastguard Worker 
2522*35238bceSAndroid Build Coastguard Worker private:
2523*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
2524*35238bceSAndroid Build Coastguard Worker     InvalidateDataTest(const InvalidateDataTest &other);
2525*35238bceSAndroid Build Coastguard Worker     InvalidateDataTest &operator=(const InvalidateDataTest &other);
2526*35238bceSAndroid Build Coastguard Worker 
2527*35238bceSAndroid Build Coastguard Worker     bool CheckErrorAndLog(const glw::GLenum attachment);
2528*35238bceSAndroid Build Coastguard Worker     bool CheckErrorAndLog(const glw::GLenum attachments[], const glw::GLuint count);
2529*35238bceSAndroid Build Coastguard Worker };
2530*35238bceSAndroid Build Coastguard Worker /* InvalidateDataTest class */
2531*35238bceSAndroid Build Coastguard Worker 
2532*35238bceSAndroid Build Coastguard Worker /** Invalidate Named Framebuffer SubData
2533*35238bceSAndroid Build Coastguard Worker  *
2534*35238bceSAndroid Build Coastguard Worker  *      For default framebuffer try to invalidate part of each of COLOR, DEPTH,
2535*35238bceSAndroid Build Coastguard Worker  *      and STENCIL attachments. Expect no error.
2536*35238bceSAndroid Build Coastguard Worker  *
2537*35238bceSAndroid Build Coastguard Worker  *      For default framebuffer try to invalidate part of all (COLOR, DEPTH, and
2538*35238bceSAndroid Build Coastguard Worker  *      STENCIL) attachments. Expect no error.
2539*35238bceSAndroid Build Coastguard Worker  *
2540*35238bceSAndroid Build Coastguard Worker  *      Create named framebuffer with maximum number of color attachments (use
2541*35238bceSAndroid Build Coastguard Worker  *      named renderbuffer storage), depth attachment and stencil attachment.
2542*35238bceSAndroid Build Coastguard Worker  *
2543*35238bceSAndroid Build Coastguard Worker  *      Clear all attachments.
2544*35238bceSAndroid Build Coastguard Worker  *
2545*35238bceSAndroid Build Coastguard Worker  *      Try to invalidate content of part of all attachments using
2546*35238bceSAndroid Build Coastguard Worker  *      InvalidateNamedFramebufferData. Expect no error.
2547*35238bceSAndroid Build Coastguard Worker  *
2548*35238bceSAndroid Build Coastguard Worker  *      Try to invalidate content of part of each attachment using
2549*35238bceSAndroid Build Coastguard Worker  *      InvalidateNamedFramebufferData. Expect no error.
2550*35238bceSAndroid Build Coastguard Worker  *
2551*35238bceSAndroid Build Coastguard Worker  *      Release all objects.
2552*35238bceSAndroid Build Coastguard Worker  */
2553*35238bceSAndroid Build Coastguard Worker class InvalidateSubDataTest : public deqp::TestCase
2554*35238bceSAndroid Build Coastguard Worker {
2555*35238bceSAndroid Build Coastguard Worker public:
2556*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
2557*35238bceSAndroid Build Coastguard Worker     InvalidateSubDataTest(deqp::Context &context);
2558*35238bceSAndroid Build Coastguard Worker 
2559*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
2560*35238bceSAndroid Build Coastguard Worker 
2561*35238bceSAndroid Build Coastguard Worker private:
2562*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
2563*35238bceSAndroid Build Coastguard Worker     InvalidateSubDataTest(const InvalidateSubDataTest &other);
2564*35238bceSAndroid Build Coastguard Worker     InvalidateSubDataTest &operator=(const InvalidateSubDataTest &other);
2565*35238bceSAndroid Build Coastguard Worker 
2566*35238bceSAndroid Build Coastguard Worker     bool CheckErrorAndLog(const glw::GLenum attachment);
2567*35238bceSAndroid Build Coastguard Worker     bool CheckErrorAndLog(const glw::GLenum attachments[], const glw::GLuint count);
2568*35238bceSAndroid Build Coastguard Worker };
2569*35238bceSAndroid Build Coastguard Worker /* InvalidateSubDataTest class */
2570*35238bceSAndroid Build Coastguard Worker 
2571*35238bceSAndroid Build Coastguard Worker /** Clear Named Framebuffer
2572*35238bceSAndroid Build Coastguard Worker  *
2573*35238bceSAndroid Build Coastguard Worker  *      Repeat following steps for fixed-point, floating-point, signed integer,
2574*35238bceSAndroid Build Coastguard Worker  *      and unsigned integer color attachments.
2575*35238bceSAndroid Build Coastguard Worker  *
2576*35238bceSAndroid Build Coastguard Worker  *          Create named framebuffer with maximum number of color attachments
2577*35238bceSAndroid Build Coastguard Worker  *          (use named renderbuffer storage).
2578*35238bceSAndroid Build Coastguard Worker  *
2579*35238bceSAndroid Build Coastguard Worker  *          Clear each of the color attachment with unique color using proper
2580*35238bceSAndroid Build Coastguard Worker  *          ClearNamedFramebuffer* function.
2581*35238bceSAndroid Build Coastguard Worker  *
2582*35238bceSAndroid Build Coastguard Worker  *          For each color attachment fetch pixel data and compare that contain
2583*35238bceSAndroid Build Coastguard Worker  *          unique color with which it was cleared.
2584*35238bceSAndroid Build Coastguard Worker  *
2585*35238bceSAndroid Build Coastguard Worker  *          Release all objects.
2586*35238bceSAndroid Build Coastguard Worker  *
2587*35238bceSAndroid Build Coastguard Worker  *      Next, do following steps:
2588*35238bceSAndroid Build Coastguard Worker  *
2589*35238bceSAndroid Build Coastguard Worker  *          Create named framebuffer with depth attachment and stencil
2590*35238bceSAndroid Build Coastguard Worker  *          attachment.
2591*35238bceSAndroid Build Coastguard Worker  *
2592*35238bceSAndroid Build Coastguard Worker  *          Clear each of the attachments with unique value using proper
2593*35238bceSAndroid Build Coastguard Worker  *          ClearNamedFramebufferfi function.
2594*35238bceSAndroid Build Coastguard Worker  *
2595*35238bceSAndroid Build Coastguard Worker  *          Fetch pixel data of each attachment and compare that contain unique
2596*35238bceSAndroid Build Coastguard Worker  *          value with which it was cleared.
2597*35238bceSAndroid Build Coastguard Worker  *
2598*35238bceSAndroid Build Coastguard Worker  *          Release all objects.
2599*35238bceSAndroid Build Coastguard Worker  */
2600*35238bceSAndroid Build Coastguard Worker class ClearTest : public deqp::TestCase
2601*35238bceSAndroid Build Coastguard Worker {
2602*35238bceSAndroid Build Coastguard Worker public:
2603*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
2604*35238bceSAndroid Build Coastguard Worker     ClearTest(deqp::Context &context);
2605*35238bceSAndroid Build Coastguard Worker 
2606*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
2607*35238bceSAndroid Build Coastguard Worker 
2608*35238bceSAndroid Build Coastguard Worker private:
2609*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
2610*35238bceSAndroid Build Coastguard Worker     ClearTest(const ClearTest &other);
2611*35238bceSAndroid Build Coastguard Worker     ClearTest &operator=(const ClearTest &other);
2612*35238bceSAndroid Build Coastguard Worker 
2613*35238bceSAndroid Build Coastguard Worker     void PrepareFramebuffer(glw::GLenum buffer, glw::GLenum internalformat);
2614*35238bceSAndroid Build Coastguard Worker 
2615*35238bceSAndroid Build Coastguard Worker     template <typename T>
2616*35238bceSAndroid Build Coastguard Worker     bool TestClearColor(glw::GLenum buffer, glw::GLenum attachment, T value);
2617*35238bceSAndroid Build Coastguard Worker 
2618*35238bceSAndroid Build Coastguard Worker     template <typename T>
2619*35238bceSAndroid Build Coastguard Worker     bool ClearColor(glw::GLenum buffer, glw::GLint drawbuffer, T value);
2620*35238bceSAndroid Build Coastguard Worker 
2621*35238bceSAndroid Build Coastguard Worker     bool TestClearDepthAndStencil(glw::GLfloat depth, glw::GLint stencil);
2622*35238bceSAndroid Build Coastguard Worker 
2623*35238bceSAndroid Build Coastguard Worker     template <typename T>
2624*35238bceSAndroid Build Coastguard Worker     glw::GLenum Format();
2625*35238bceSAndroid Build Coastguard Worker 
2626*35238bceSAndroid Build Coastguard Worker     template <typename T>
2627*35238bceSAndroid Build Coastguard Worker     glw::GLenum Type();
2628*35238bceSAndroid Build Coastguard Worker 
2629*35238bceSAndroid Build Coastguard Worker     template <typename T>
2630*35238bceSAndroid Build Coastguard Worker     bool Compare(const T first, const T second);
2631*35238bceSAndroid Build Coastguard Worker 
2632*35238bceSAndroid Build Coastguard Worker     void Clean();
2633*35238bceSAndroid Build Coastguard Worker 
2634*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
2635*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo;
2636*35238bceSAndroid Build Coastguard Worker     glw::GLuint *m_renderbuffers;
2637*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_renderbuffers_count;
2638*35238bceSAndroid Build Coastguard Worker };
2639*35238bceSAndroid Build Coastguard Worker /* ClearTest class */
2640*35238bceSAndroid Build Coastguard Worker 
2641*35238bceSAndroid Build Coastguard Worker /** Blit Named Framebuffer
2642*35238bceSAndroid Build Coastguard Worker  *
2643*35238bceSAndroid Build Coastguard Worker  *      Create named framebuffer with color, depth and stencil attachments with
2644*35238bceSAndroid Build Coastguard Worker  *      size 2x2 pixels(use named renderbuffer storage).
2645*35238bceSAndroid Build Coastguard Worker  *
2646*35238bceSAndroid Build Coastguard Worker  *      Create named framebuffer with color, depth and stencil attachments with
2647*35238bceSAndroid Build Coastguard Worker  *      size 2x3 pixels(use named renderbuffer storage).
2648*35238bceSAndroid Build Coastguard Worker  *
2649*35238bceSAndroid Build Coastguard Worker  *      Clear the first framebuffer with red color, 0.5 depth and 1 as a stencil
2650*35238bceSAndroid Build Coastguard Worker  *      index.
2651*35238bceSAndroid Build Coastguard Worker  *
2652*35238bceSAndroid Build Coastguard Worker  *      Blit one pixel of the first framebuffer to the second framebuffer to the
2653*35238bceSAndroid Build Coastguard Worker  *      pixel at (0, 0) position with NEAREST filter.
2654*35238bceSAndroid Build Coastguard Worker  *
2655*35238bceSAndroid Build Coastguard Worker  *      Clear first the framebuffer with green color, 0.25 depth and 2 as a
2656*35238bceSAndroid Build Coastguard Worker  *      stencil index.
2657*35238bceSAndroid Build Coastguard Worker  *
2658*35238bceSAndroid Build Coastguard Worker  *      Blit one pixel of the first framebuffer to the second framebuffer to the
2659*35238bceSAndroid Build Coastguard Worker  *      pixel at (1, 0) position with LINEAR filter for color attachment, but
2660*35238bceSAndroid Build Coastguard Worker  *      NEAREST filter for depth and stencil attachments.
2661*35238bceSAndroid Build Coastguard Worker  *
2662*35238bceSAndroid Build Coastguard Worker  *      Clear the first framebuffer with blue color, 0.125 depth and 3 as a
2663*35238bceSAndroid Build Coastguard Worker  *      stencil index.
2664*35238bceSAndroid Build Coastguard Worker  *
2665*35238bceSAndroid Build Coastguard Worker  *      Blit the whole first framebuffer to the second framebuffer by shrinking
2666*35238bceSAndroid Build Coastguard Worker  *      it to the single pixel at (2, 0) position.
2667*35238bceSAndroid Build Coastguard Worker  *
2668*35238bceSAndroid Build Coastguard Worker  *      Clear the first framebuffer with yellow color, 0.0625 depth and 4 as a
2669*35238bceSAndroid Build Coastguard Worker  *      stencil index.
2670*35238bceSAndroid Build Coastguard Worker  *
2671*35238bceSAndroid Build Coastguard Worker  *      Blit one pixel of the framebuffer to the second framebuffer by expanding
2672*35238bceSAndroid Build Coastguard Worker  *      it to the three pixel constructing horizontal line at (0, 1) position.
2673*35238bceSAndroid Build Coastguard Worker  *
2674*35238bceSAndroid Build Coastguard Worker  *      Expect no error.
2675*35238bceSAndroid Build Coastguard Worker  *
2676*35238bceSAndroid Build Coastguard Worker  *      Check that color attachment of the second framebuffer has following
2677*35238bceSAndroid Build Coastguard Worker  *      values:
2678*35238bceSAndroid Build Coastguard Worker  *          red,    green,  blue,
2679*35238bceSAndroid Build Coastguard Worker  *          yellow, yellow, yellow.
2680*35238bceSAndroid Build Coastguard Worker  *
2681*35238bceSAndroid Build Coastguard Worker  *      Check that depth attachment of the second framebuffer has following
2682*35238bceSAndroid Build Coastguard Worker  *      values:
2683*35238bceSAndroid Build Coastguard Worker  *          0.5,    0.25,   0.125
2684*35238bceSAndroid Build Coastguard Worker  *          0.0625, 0.0625, 0.0625.
2685*35238bceSAndroid Build Coastguard Worker  *
2686*35238bceSAndroid Build Coastguard Worker  *      Check that stencil attachment of the second framebuffer has following
2687*35238bceSAndroid Build Coastguard Worker  *      values:
2688*35238bceSAndroid Build Coastguard Worker  *          1,  2,  3
2689*35238bceSAndroid Build Coastguard Worker  *          4,  4,  4.
2690*35238bceSAndroid Build Coastguard Worker  *
2691*35238bceSAndroid Build Coastguard Worker  *      Release all objects.
2692*35238bceSAndroid Build Coastguard Worker  */
2693*35238bceSAndroid Build Coastguard Worker class BlitTest : public deqp::TestCase
2694*35238bceSAndroid Build Coastguard Worker {
2695*35238bceSAndroid Build Coastguard Worker public:
2696*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
2697*35238bceSAndroid Build Coastguard Worker     BlitTest(deqp::Context &context);
2698*35238bceSAndroid Build Coastguard Worker 
2699*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
2700*35238bceSAndroid Build Coastguard Worker 
2701*35238bceSAndroid Build Coastguard Worker private:
2702*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
2703*35238bceSAndroid Build Coastguard Worker     BlitTest(const BlitTest &other);
2704*35238bceSAndroid Build Coastguard Worker     BlitTest &operator=(const BlitTest &other);
2705*35238bceSAndroid Build Coastguard Worker 
2706*35238bceSAndroid Build Coastguard Worker     void PrepareFramebuffers();
2707*35238bceSAndroid Build Coastguard Worker     bool Test();
2708*35238bceSAndroid Build Coastguard Worker     void ClearFramebuffer(glw::GLfloat red, glw::GLfloat green, glw::GLfloat blue, glw::GLfloat depth,
2709*35238bceSAndroid Build Coastguard Worker                           glw::GLint stencil);
2710*35238bceSAndroid Build Coastguard Worker     bool CheckErrorAndLog();
2711*35238bceSAndroid Build Coastguard Worker     bool CheckColor();
2712*35238bceSAndroid Build Coastguard Worker     bool CheckDepth();
2713*35238bceSAndroid Build Coastguard Worker     bool CheckStencil();
2714*35238bceSAndroid Build Coastguard Worker     void Clean();
2715*35238bceSAndroid Build Coastguard Worker 
2716*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
2717*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo_src;
2718*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo_color_src;
2719*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo_depth_stencil_src;
2720*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo_dst;
2721*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo_color_dst;
2722*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo_depth_stencil_dst;
2723*35238bceSAndroid Build Coastguard Worker };
2724*35238bceSAndroid Build Coastguard Worker /* BlitTest class */
2725*35238bceSAndroid Build Coastguard Worker 
2726*35238bceSAndroid Build Coastguard Worker /** Check Named Framebuffer Status
2727*35238bceSAndroid Build Coastguard Worker  *
2728*35238bceSAndroid Build Coastguard Worker  *      Do following test cases:
2729*35238bceSAndroid Build Coastguard Worker  *
2730*35238bceSAndroid Build Coastguard Worker  *          Incomplete attachment case
2731*35238bceSAndroid Build Coastguard Worker  *
2732*35238bceSAndroid Build Coastguard Worker  *              Prepare framebuffer with one incomplete attachment.
2733*35238bceSAndroid Build Coastguard Worker  *
2734*35238bceSAndroid Build Coastguard Worker  *              Check the framebuffer status using CheckNamedFramebufferStatus.
2735*35238bceSAndroid Build Coastguard Worker  *              Expect FRAMEBUFFER_INCOMPLETE_ATTACHMENT return value.
2736*35238bceSAndroid Build Coastguard Worker  *
2737*35238bceSAndroid Build Coastguard Worker  *              Release all objects.
2738*35238bceSAndroid Build Coastguard Worker  *
2739*35238bceSAndroid Build Coastguard Worker  *              Repeat the test case for all possible color, depth and stencil
2740*35238bceSAndroid Build Coastguard Worker  *              attachments.
2741*35238bceSAndroid Build Coastguard Worker  *
2742*35238bceSAndroid Build Coastguard Worker  *          Missing attachment case
2743*35238bceSAndroid Build Coastguard Worker  *
2744*35238bceSAndroid Build Coastguard Worker  *              Prepare framebuffer without any attachment.
2745*35238bceSAndroid Build Coastguard Worker  *
2746*35238bceSAndroid Build Coastguard Worker  *              Check the framebuffer status using CheckNamedFramebufferStatus.
2747*35238bceSAndroid Build Coastguard Worker  *              Expect FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT return value.
2748*35238bceSAndroid Build Coastguard Worker  *
2749*35238bceSAndroid Build Coastguard Worker  *              Release all objects.
2750*35238bceSAndroid Build Coastguard Worker  *
2751*35238bceSAndroid Build Coastguard Worker  *          Incomplete multisample renderbuffer case
2752*35238bceSAndroid Build Coastguard Worker  *
2753*35238bceSAndroid Build Coastguard Worker  *              Prepare framebuffer with two multisampled renderbuffer color
2754*35238bceSAndroid Build Coastguard Worker  *              attachments which have different number of samples.
2755*35238bceSAndroid Build Coastguard Worker  *
2756*35238bceSAndroid Build Coastguard Worker  *              Check the framebuffer status using CheckNamedFramebufferStatus.
2757*35238bceSAndroid Build Coastguard Worker  *              Expect FRAMEBUFFER_INCOMPLETE_MULTISAMPLE return value. If the
2758*35238bceSAndroid Build Coastguard Worker  *              check fails return TEST_RESULT_COMPATIBILITY_WARNING.
2759*35238bceSAndroid Build Coastguard Worker  *
2760*35238bceSAndroid Build Coastguard Worker  *              Release all objects.
2761*35238bceSAndroid Build Coastguard Worker  *
2762*35238bceSAndroid Build Coastguard Worker  *          Incomplete multisample texture case
2763*35238bceSAndroid Build Coastguard Worker  *
2764*35238bceSAndroid Build Coastguard Worker  *              Prepare framebuffer with two multisampled texture color
2765*35238bceSAndroid Build Coastguard Worker  *              attachments and one multisampled renderbuffer which all have
2766*35238bceSAndroid Build Coastguard Worker  *              different number of sample locations. One of the textures shall
2767*35238bceSAndroid Build Coastguard Worker  *              have fixed sample locations set, one not.
2768*35238bceSAndroid Build Coastguard Worker  *
2769*35238bceSAndroid Build Coastguard Worker  *              Check the framebuffer status using CheckNamedFramebufferStatus.
2770*35238bceSAndroid Build Coastguard Worker  *              Expect FRAMEBUFFER_INCOMPLETE_MULTISAMPLE return value. If the
2771*35238bceSAndroid Build Coastguard Worker  *              check fails return TEST_RESULT_COMPATIBILITY_WARNING.
2772*35238bceSAndroid Build Coastguard Worker  *
2773*35238bceSAndroid Build Coastguard Worker  *              Release all objects.
2774*35238bceSAndroid Build Coastguard Worker  *
2775*35238bceSAndroid Build Coastguard Worker  *          Incomplete layer targets case
2776*35238bceSAndroid Build Coastguard Worker  *
2777*35238bceSAndroid Build Coastguard Worker  *              Prepare framebuffer with one 3D texture and one 2D texture.
2778*35238bceSAndroid Build Coastguard Worker  *
2779*35238bceSAndroid Build Coastguard Worker  *              Check the framebuffer status using CheckNamedFramebufferStatus.
2780*35238bceSAndroid Build Coastguard Worker  *              Expect FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS return value. If the
2781*35238bceSAndroid Build Coastguard Worker  *              check fails return TEST_RESULT_COMPATIBILITY_WARNING.
2782*35238bceSAndroid Build Coastguard Worker  *
2783*35238bceSAndroid Build Coastguard Worker  *              Release all objects.
2784*35238bceSAndroid Build Coastguard Worker  *
2785*35238bceSAndroid Build Coastguard Worker  *      Note
2786*35238bceSAndroid Build Coastguard Worker  *
2787*35238bceSAndroid Build Coastguard Worker  *      The specification is not clear about framebuffer completeness. The
2788*35238bceSAndroid Build Coastguard Worker  *      OpenGL 4.5 Core Profile Specification in chapter 9.4.2 says:
2789*35238bceSAndroid Build Coastguard Worker  *
2790*35238bceSAndroid Build Coastguard Worker  *          "The framebuffer object bound to target is said to be framebuffer
2791*35238bceSAndroid Build Coastguard Worker  *          complete if all the following conditions are true [...]"
2792*35238bceSAndroid Build Coastguard Worker  *
2793*35238bceSAndroid Build Coastguard Worker  *      It does not say that framebuffer is incomplete when any of the
2794*35238bceSAndroid Build Coastguard Worker  *      conditions are not met. Due to this wording, except for obvious cases
2795*35238bceSAndroid Build Coastguard Worker  *      (incomplete attachment and missing attachments) other tests are optional
2796*35238bceSAndroid Build Coastguard Worker  *      and may result in QP_TEST_RESULT_COMPATIBILITY_WARNING when fail.
2797*35238bceSAndroid Build Coastguard Worker  */
2798*35238bceSAndroid Build Coastguard Worker class CheckStatusTest : public deqp::TestCase
2799*35238bceSAndroid Build Coastguard Worker {
2800*35238bceSAndroid Build Coastguard Worker public:
2801*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
2802*35238bceSAndroid Build Coastguard Worker     CheckStatusTest(deqp::Context &context);
2803*35238bceSAndroid Build Coastguard Worker 
2804*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
2805*35238bceSAndroid Build Coastguard Worker 
2806*35238bceSAndroid Build Coastguard Worker private:
2807*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
2808*35238bceSAndroid Build Coastguard Worker     CheckStatusTest(const CheckStatusTest &other);
2809*35238bceSAndroid Build Coastguard Worker     CheckStatusTest &operator=(const CheckStatusTest &other);
2810*35238bceSAndroid Build Coastguard Worker 
2811*35238bceSAndroid Build Coastguard Worker     bool IncompleteAttachmentTestCase();
2812*35238bceSAndroid Build Coastguard Worker     bool MissingAttachmentTestCase();
2813*35238bceSAndroid Build Coastguard Worker     bool IncompleteMultisampleRenderbufferTestCase();
2814*35238bceSAndroid Build Coastguard Worker     bool IncompleteMultisampleTextureTestCase();
2815*35238bceSAndroid Build Coastguard Worker     bool IncompleteLayerTargetsTestCase();
2816*35238bceSAndroid Build Coastguard Worker };
2817*35238bceSAndroid Build Coastguard Worker /* CheckStatusTest class */
2818*35238bceSAndroid Build Coastguard Worker 
2819*35238bceSAndroid Build Coastguard Worker /** Get Named Framebuffer Parameters
2820*35238bceSAndroid Build Coastguard Worker  *
2821*35238bceSAndroid Build Coastguard Worker  *      Prepare framebuffer with read and write buffers and renderbuffer color
2822*35238bceSAndroid Build Coastguard Worker  *      attachment.
2823*35238bceSAndroid Build Coastguard Worker  *
2824*35238bceSAndroid Build Coastguard Worker  *      Do following checks for the created framebuffer:
2825*35238bceSAndroid Build Coastguard Worker  *
2826*35238bceSAndroid Build Coastguard Worker  *          Check that GetNamedFramebufferParameteriv called with parameter name
2827*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_DEFAULT_WIDTH returns the value of
2828*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_DEFAULT_WIDTH for the framebuffer object.
2829*35238bceSAndroid Build Coastguard Worker  *
2830*35238bceSAndroid Build Coastguard Worker  *          Check that GetNamedFramebufferParameteriv called with parameter name
2831*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_DEFAULT_HEIGHT returns the value of
2832*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_DEFAULT_HEIGHT for the framebuffer object.
2833*35238bceSAndroid Build Coastguard Worker  *
2834*35238bceSAndroid Build Coastguard Worker  *          Check that GetNamedFramebufferParameteriv called with parameter name
2835*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_DEFAULT_LAYERS returns the value of
2836*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_DEFAULT_LAYERS for the framebuffer object.
2837*35238bceSAndroid Build Coastguard Worker  *          Check that GetNamedFramebufferParameteriv called with parameter name
2838*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_DEFAULT_SAMPLES returns the value of
2839*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_DEFAULT_SAMPLES for the framebuffer object.
2840*35238bceSAndroid Build Coastguard Worker  *          Check that GetNamedFramebufferParameteriv called with parameter name
2841*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS returns the boolean value
2842*35238bceSAndroid Build Coastguard Worker  *          of FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS.
2843*35238bceSAndroid Build Coastguard Worker  *
2844*35238bceSAndroid Build Coastguard Worker  *      Do following checks for the created and default (if available)
2845*35238bceSAndroid Build Coastguard Worker  *      framebuffer:
2846*35238bceSAndroid Build Coastguard Worker  *
2847*35238bceSAndroid Build Coastguard Worker  *          Check that GetNamedFramebufferParameteriv called with parameter name
2848*35238bceSAndroid Build Coastguard Worker  *          DOUBLEBUFFER returns a boolean value indicating whether double
2849*35238bceSAndroid Build Coastguard Worker  *          buffering is supported for the framebuffer object.
2850*35238bceSAndroid Build Coastguard Worker  *
2851*35238bceSAndroid Build Coastguard Worker  *          Check that GetNamedFramebufferParameteriv called with parameter name
2852*35238bceSAndroid Build Coastguard Worker  *          IMPLEMENTATION_COLOR_READ_FORMAT returns a GLenum value indicating
2853*35238bceSAndroid Build Coastguard Worker  *          the preferred pixel data format for the framebuffer object.
2854*35238bceSAndroid Build Coastguard Worker  *
2855*35238bceSAndroid Build Coastguard Worker  *          Check that GetNamedFramebufferParameteriv called with parameter name
2856*35238bceSAndroid Build Coastguard Worker  *          IMPLEMENTATION_COLOR_READ_TYPE returns a GLenum value indicating the
2857*35238bceSAndroid Build Coastguard Worker  *          implementation's preferred pixel data type for the framebuffer
2858*35238bceSAndroid Build Coastguard Worker  *          object.
2859*35238bceSAndroid Build Coastguard Worker  *
2860*35238bceSAndroid Build Coastguard Worker  *          Check that GetNamedFramebufferParameteriv called with parameter name
2861*35238bceSAndroid Build Coastguard Worker  *          SAMPLES returns an integer value indicating the coverage mask size
2862*35238bceSAndroid Build Coastguard Worker  *          for the framebuffer object.
2863*35238bceSAndroid Build Coastguard Worker  *
2864*35238bceSAndroid Build Coastguard Worker  *          Check that GetNamedFramebufferParameteriv called with parameter name
2865*35238bceSAndroid Build Coastguard Worker  *          SAMPLE_BUFFERS returns an integer value indicating the number of
2866*35238bceSAndroid Build Coastguard Worker  *          sample buffers associated with the framebuffer object.
2867*35238bceSAndroid Build Coastguard Worker  *
2868*35238bceSAndroid Build Coastguard Worker  *          Check that GetNamedFramebufferParameteriv called with parameter name
2869*35238bceSAndroid Build Coastguard Worker  *          STEREO returns a boolean value indicating whether stereo buffers
2870*35238bceSAndroid Build Coastguard Worker  *          (left and right) are supported for the framebuffer object.
2871*35238bceSAndroid Build Coastguard Worker  *
2872*35238bceSAndroid Build Coastguard Worker  *      Release all objects.
2873*35238bceSAndroid Build Coastguard Worker  */
2874*35238bceSAndroid Build Coastguard Worker class GetParametersTest : public deqp::TestCase
2875*35238bceSAndroid Build Coastguard Worker {
2876*35238bceSAndroid Build Coastguard Worker public:
2877*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
2878*35238bceSAndroid Build Coastguard Worker     GetParametersTest(deqp::Context &context);
2879*35238bceSAndroid Build Coastguard Worker 
2880*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
2881*35238bceSAndroid Build Coastguard Worker 
2882*35238bceSAndroid Build Coastguard Worker private:
2883*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
2884*35238bceSAndroid Build Coastguard Worker     GetParametersTest(const GetParametersTest &other);
2885*35238bceSAndroid Build Coastguard Worker     GetParametersTest &operator=(const GetParametersTest &other);
2886*35238bceSAndroid Build Coastguard Worker 
2887*35238bceSAndroid Build Coastguard Worker     void PrepareFramebuffer();
2888*35238bceSAndroid Build Coastguard Worker     bool TestDefaultFramebuffer();
2889*35238bceSAndroid Build Coastguard Worker     bool TestCustomFramebuffer();
2890*35238bceSAndroid Build Coastguard Worker     void Clean();
2891*35238bceSAndroid Build Coastguard Worker 
2892*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
2893*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo;
2894*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo;
2895*35238bceSAndroid Build Coastguard Worker };
2896*35238bceSAndroid Build Coastguard Worker /* GetParametersTest class */
2897*35238bceSAndroid Build Coastguard Worker 
2898*35238bceSAndroid Build Coastguard Worker /** Get Named Framebuffer Attachment Parameters
2899*35238bceSAndroid Build Coastguard Worker  *
2900*35238bceSAndroid Build Coastguard Worker  *      For default framebuffer, for all attachments:
2901*35238bceSAndroid Build Coastguard Worker  *          FRONT_LEFT,
2902*35238bceSAndroid Build Coastguard Worker  *          FRONT_RIGHT,
2903*35238bceSAndroid Build Coastguard Worker  *          BACK_LEFT,
2904*35238bceSAndroid Build Coastguard Worker  *          BACK_RIGHT,
2905*35238bceSAndroid Build Coastguard Worker  *          DEPTH,
2906*35238bceSAndroid Build Coastguard Worker  *          STENCIL
2907*35238bceSAndroid Build Coastguard Worker  *      query FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE using
2908*35238bceSAndroid Build Coastguard Worker  *      GetNamedFramebufferAttachmentParameteriv function. Expect
2909*35238bceSAndroid Build Coastguard Worker  *      FRAMEBUFFER_DEFAULT return value (as queried with non-DSA way).
2910*35238bceSAndroid Build Coastguard Worker  *
2911*35238bceSAndroid Build Coastguard Worker  *      For any attachments not equal to GL_NONE do following queries using
2912*35238bceSAndroid Build Coastguard Worker  *      GetNamedFramebufferAttachmentParameteriv function:
2913*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_RED_SIZE,
2914*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_GREEN_SIZE,
2915*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_BLUE_SIZE,
2916*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE,
2917*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE,
2918*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE,
2919*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE,
2920*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING.
2921*35238bceSAndroid Build Coastguard Worker  *      Expect value equal to framebuffers setup (as queried with non-DSA way).
2922*35238bceSAndroid Build Coastguard Worker  *      Expect no error.
2923*35238bceSAndroid Build Coastguard Worker  *
2924*35238bceSAndroid Build Coastguard Worker  *      Create 3 framebuffer objects with renderbuffer color attachment, and
2925*35238bceSAndroid Build Coastguard Worker  *      depth or stencil or depth-stencil attachments.
2926*35238bceSAndroid Build Coastguard Worker  *
2927*35238bceSAndroid Build Coastguard Worker  *      For each of framebuffers, for each of following attachments:
2928*35238bceSAndroid Build Coastguard Worker  *          DEPTH_ATTACHMENT,
2929*35238bceSAndroid Build Coastguard Worker  *          STENCIL_ATTACHMENT,
2930*35238bceSAndroid Build Coastguard Worker  *          DEPTH_STENCIL_ATTACHMENT,
2931*35238bceSAndroid Build Coastguard Worker  *          COLOR_ATTACHMENT0,
2932*35238bceSAndroid Build Coastguard Worker  *          COLOR_ATTACHMENT1
2933*35238bceSAndroid Build Coastguard Worker  *      query FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE using
2934*35238bceSAndroid Build Coastguard Worker  *      GetNamedFramebufferAttachmentParameteriv function. Expect the same
2935*35238bceSAndroid Build Coastguard Worker  *      return value as queried with non-DSA way.
2936*35238bceSAndroid Build Coastguard Worker  *
2937*35238bceSAndroid Build Coastguard Worker  *      For each of framebuffers, for any attachments not equal to GL_NONE do
2938*35238bceSAndroid Build Coastguard Worker  *      following queries using GetNamedFramebufferAttachmentParameteriv
2939*35238bceSAndroid Build Coastguard Worker  *      function:
2940*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_OBJECT_NAME,
2941*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_RED_SIZE,
2942*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_GREEN_SIZE,
2943*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_BLUE_SIZE,
2944*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE,
2945*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE,
2946*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE,
2947*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE,
2948*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING
2949*35238bceSAndroid Build Coastguard Worker  *      Expect value equal to framebuffers setup (as queried with non-DSA way).
2950*35238bceSAndroid Build Coastguard Worker  *      Expect no error.
2951*35238bceSAndroid Build Coastguard Worker  *
2952*35238bceSAndroid Build Coastguard Worker  *      Release objects.
2953*35238bceSAndroid Build Coastguard Worker  *
2954*35238bceSAndroid Build Coastguard Worker  *      Create 3 framebuffer objects with texture color attachment, and
2955*35238bceSAndroid Build Coastguard Worker  *      depth or stencil or depth-stencil attachments.
2956*35238bceSAndroid Build Coastguard Worker  *
2957*35238bceSAndroid Build Coastguard Worker  *      For each of framebuffers, for each of following attachments:
2958*35238bceSAndroid Build Coastguard Worker  *          DEPTH_ATTACHMENT,
2959*35238bceSAndroid Build Coastguard Worker  *          STENCIL_ATTACHMENT,
2960*35238bceSAndroid Build Coastguard Worker  *          DEPTH_STENCIL_ATTACHMENT,
2961*35238bceSAndroid Build Coastguard Worker  *          COLOR_ATTACHMENT0,
2962*35238bceSAndroid Build Coastguard Worker  *          COLOR_ATTACHMENT1
2963*35238bceSAndroid Build Coastguard Worker  *      query FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE using
2964*35238bceSAndroid Build Coastguard Worker  *      GetNamedFramebufferAttachmentParameteriv function. Expect the same
2965*35238bceSAndroid Build Coastguard Worker  *      return value as queried with non-DSA way.
2966*35238bceSAndroid Build Coastguard Worker  *
2967*35238bceSAndroid Build Coastguard Worker  *      For each of framebuffers, for any attachments not equal to GL_NONE do
2968*35238bceSAndroid Build Coastguard Worker  *      following queries using GetNamedFramebufferAttachmentParameteriv
2969*35238bceSAndroid Build Coastguard Worker  *      function:
2970*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_OBJECT_NAME,
2971*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL,
2972*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE,
2973*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_LAYERED,
2974*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER,
2975*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_RED_SIZE,
2976*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_GREEN_SIZE,
2977*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_BLUE_SIZE,
2978*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE,
2979*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE,
2980*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE,
2981*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE,
2982*35238bceSAndroid Build Coastguard Worker  *          FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING
2983*35238bceSAndroid Build Coastguard Worker  *      Expect value equal to framebuffers setup (as queried with non-DSA way).
2984*35238bceSAndroid Build Coastguard Worker  *      Expect no error.
2985*35238bceSAndroid Build Coastguard Worker  *
2986*35238bceSAndroid Build Coastguard Worker  *      Release objects.
2987*35238bceSAndroid Build Coastguard Worker  *
2988*35238bceSAndroid Build Coastguard Worker  *      Additional conditions:
2989*35238bceSAndroid Build Coastguard Worker  *
2990*35238bceSAndroid Build Coastguard Worker  *          Do not query DEPTH_STENCIL_ATTACHMENT attachment if the renderbuffer
2991*35238bceSAndroid Build Coastguard Worker  *          or texture is not depth-stencil.
2992*35238bceSAndroid Build Coastguard Worker  *
2993*35238bceSAndroid Build Coastguard Worker  *          Do not query FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE pname with
2994*35238bceSAndroid Build Coastguard Worker  *          DEPTH_STENCIL_ATTACHMENT attachment.
2995*35238bceSAndroid Build Coastguard Worker  */
2996*35238bceSAndroid Build Coastguard Worker class GetAttachmentParametersTest : public deqp::TestCase
2997*35238bceSAndroid Build Coastguard Worker {
2998*35238bceSAndroid Build Coastguard Worker public:
2999*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
3000*35238bceSAndroid Build Coastguard Worker     GetAttachmentParametersTest(deqp::Context &context);
3001*35238bceSAndroid Build Coastguard Worker 
3002*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
3003*35238bceSAndroid Build Coastguard Worker 
3004*35238bceSAndroid Build Coastguard Worker private:
3005*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
3006*35238bceSAndroid Build Coastguard Worker     GetAttachmentParametersTest(const GetAttachmentParametersTest &other);
3007*35238bceSAndroid Build Coastguard Worker     GetAttachmentParametersTest &operator=(const GetAttachmentParametersTest &other);
3008*35238bceSAndroid Build Coastguard Worker 
3009*35238bceSAndroid Build Coastguard Worker     void CreateRenderbufferFramebuffer(bool depth, bool stencil);
3010*35238bceSAndroid Build Coastguard Worker     void CreateTextureFramebuffer(bool depth, bool stencil);
3011*35238bceSAndroid Build Coastguard Worker     bool TestDefaultFramebuffer();
3012*35238bceSAndroid Build Coastguard Worker     bool TestRenderbufferFramebuffer(bool depth_stencil);
3013*35238bceSAndroid Build Coastguard Worker     bool TestTextureFramebuffer(bool depth_stencil);
3014*35238bceSAndroid Build Coastguard Worker     void Clean();
3015*35238bceSAndroid Build Coastguard Worker 
3016*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
3017*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo;
3018*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo[2];
3019*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to[2];
3020*35238bceSAndroid Build Coastguard Worker };
3021*35238bceSAndroid Build Coastguard Worker /* GetParametersTest class */
3022*35238bceSAndroid Build Coastguard Worker 
3023*35238bceSAndroid Build Coastguard Worker /** Create Named Framebuffers Errors
3024*35238bceSAndroid Build Coastguard Worker  *
3025*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by CreateFramebuffers if n is
3026*35238bceSAndroid Build Coastguard Worker  *      negative.
3027*35238bceSAndroid Build Coastguard Worker  */
3028*35238bceSAndroid Build Coastguard Worker class CreationErrorsTest : public deqp::TestCase
3029*35238bceSAndroid Build Coastguard Worker {
3030*35238bceSAndroid Build Coastguard Worker public:
3031*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
3032*35238bceSAndroid Build Coastguard Worker     CreationErrorsTest(deqp::Context &context);
3033*35238bceSAndroid Build Coastguard Worker 
3034*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
3035*35238bceSAndroid Build Coastguard Worker 
3036*35238bceSAndroid Build Coastguard Worker private:
3037*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
3038*35238bceSAndroid Build Coastguard Worker     CreationErrorsTest(const CreationErrorsTest &other);
3039*35238bceSAndroid Build Coastguard Worker     CreationErrorsTest &operator=(const CreationErrorsTest &other);
3040*35238bceSAndroid Build Coastguard Worker };
3041*35238bceSAndroid Build Coastguard Worker /* CreationErrorsTest class */
3042*35238bceSAndroid Build Coastguard Worker 
3043*35238bceSAndroid Build Coastguard Worker /** Named Framebuffer Renderbuffer Errors
3044*35238bceSAndroid Build Coastguard Worker  *
3045*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by
3046*35238bceSAndroid Build Coastguard Worker  *      NamedFramebufferRenderbuffer if framebuffer is not the name of an
3047*35238bceSAndroid Build Coastguard Worker  *      existing framebuffer object.
3048*35238bceSAndroid Build Coastguard Worker  *
3049*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by NamedFramebufferRenderbuffer
3050*35238bceSAndroid Build Coastguard Worker  *      if attachment is COLOR_ATTACHMENTm where m is greater than or equal to
3051*35238bceSAndroid Build Coastguard Worker  *      the value of MAX_COLOR_ATTACHMENTS.
3052*35238bceSAndroid Build Coastguard Worker  *
3053*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by NamedFramebufferRenderbuffer if
3054*35238bceSAndroid Build Coastguard Worker  *      attachment is not one of the attachments in table 9.2, and attachment is
3055*35238bceSAndroid Build Coastguard Worker  *      not COLOR_ATTACHMENTm where m is greater than or equal to the value of
3056*35238bceSAndroid Build Coastguard Worker  *      MAX_COLOR_ATTACHMENTS.
3057*35238bceSAndroid Build Coastguard Worker  *
3058*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by NamedFramebufferRenderbuffer if
3059*35238bceSAndroid Build Coastguard Worker  *      renderbuffer target is not RENDERBUFFER.
3060*35238bceSAndroid Build Coastguard Worker  *
3061*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by
3062*35238bceSAndroid Build Coastguard Worker  *      NamedFramebufferRenderbuffer if renderbuffer target is not zero or the
3063*35238bceSAndroid Build Coastguard Worker  *      name of an existing renderbuffer object of type RENDERBUFFER.
3064*35238bceSAndroid Build Coastguard Worker  */
3065*35238bceSAndroid Build Coastguard Worker class RenderbufferAttachmentErrorsTest : public deqp::TestCase
3066*35238bceSAndroid Build Coastguard Worker {
3067*35238bceSAndroid Build Coastguard Worker public:
3068*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
3069*35238bceSAndroid Build Coastguard Worker     RenderbufferAttachmentErrorsTest(deqp::Context &context);
3070*35238bceSAndroid Build Coastguard Worker 
3071*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
3072*35238bceSAndroid Build Coastguard Worker 
3073*35238bceSAndroid Build Coastguard Worker private:
3074*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
3075*35238bceSAndroid Build Coastguard Worker     RenderbufferAttachmentErrorsTest(const RenderbufferAttachmentErrorsTest &other);
3076*35238bceSAndroid Build Coastguard Worker     RenderbufferAttachmentErrorsTest &operator=(const RenderbufferAttachmentErrorsTest &other);
3077*35238bceSAndroid Build Coastguard Worker 
3078*35238bceSAndroid Build Coastguard Worker     void PrepareObjects();
3079*35238bceSAndroid Build Coastguard Worker     bool ExpectError(glw::GLenum expected_error, bool framebuffer, bool attachment, bool color_attachment,
3080*35238bceSAndroid Build Coastguard Worker                      bool renderbuffertarget, bool renderbuffer);
3081*35238bceSAndroid Build Coastguard Worker     void Clean();
3082*35238bceSAndroid Build Coastguard Worker 
3083*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
3084*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo_valid;
3085*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo_valid;
3086*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo_invalid;
3087*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo_invalid;
3088*35238bceSAndroid Build Coastguard Worker     glw::GLenum m_color_attachment_invalid;
3089*35238bceSAndroid Build Coastguard Worker     glw::GLenum m_attachment_invalid;
3090*35238bceSAndroid Build Coastguard Worker     glw::GLenum m_renderbuffer_target_invalid;
3091*35238bceSAndroid Build Coastguard Worker };
3092*35238bceSAndroid Build Coastguard Worker /* RenderbufferAttachmentErrorsTest class */
3093*35238bceSAndroid Build Coastguard Worker 
3094*35238bceSAndroid Build Coastguard Worker /** Named Framebuffer Texture Errors
3095*35238bceSAndroid Build Coastguard Worker  *
3096*35238bceSAndroid Build Coastguard Worker  *      Check that GL_INVALID_OPERATION is generated by glNamedFramebufferTexture and glNamedFramebufferTextureLayer
3097*35238bceSAndroid Build Coastguard Worker  *      if framebuffer is not the name of an existing framebuffer object.
3098*35238bceSAndroid Build Coastguard Worker  *
3099*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by glNamedFramebufferTexture and glNamedFramebufferTextureLayer
3100*35238bceSAndroid Build Coastguard Worker  *      if attachment is COLOR_ATTACHMENTm where m is greater than or equal to
3101*35238bceSAndroid Build Coastguard Worker  *      the value of MAX_COLOR_ATTACHMENTS.
3102*35238bceSAndroid Build Coastguard Worker  *
3103*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by glNamedFramebufferTexture and glNamedFramebufferTextureLayer if
3104*35238bceSAndroid Build Coastguard Worker  *      attachment is not one of the attachments in table 9.2, and attachment is
3105*35238bceSAndroid Build Coastguard Worker  *      not COLOR_ATTACHMENTm where m is greater than or equal to the value of
3106*35238bceSAndroid Build Coastguard Worker  *      MAX_COLOR_ATTACHMENTS.
3107*35238bceSAndroid Build Coastguard Worker  *
3108*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by glNamedFramebufferTexture if texture is not zero or the name
3109*35238bceSAndroid Build Coastguard Worker  *      of an existing texture object.
3110*35238bceSAndroid Build Coastguard Worker  *
3111*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by glNamedFramebufferTextureLayer if texture is not zero or
3112*35238bceSAndroid Build Coastguard Worker  *      the name of an existing texture object.
3113*35238bceSAndroid Build Coastguard Worker  *
3114*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by glNamedFramebufferTexture and glNamedFramebufferTextureLayer if
3115*35238bceSAndroid Build Coastguard Worker  *      texture is not zero and level is not a supported texture level for
3116*35238bceSAndroid Build Coastguard Worker  *      texture.
3117*35238bceSAndroid Build Coastguard Worker  *
3118*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by glNamedFramebufferTexture and glNamedFramebufferTextureLayer
3119*35238bceSAndroid Build Coastguard Worker  *      if texture is a buffer texture.
3120*35238bceSAndroid Build Coastguard Worker  *
3121*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE error is generated by NamedFramebufferTextureLayer if texture is a three-dimensional
3122*35238bceSAndroid Build Coastguard Worker  *      texture, and layer is larger than the value of MAX_3D_TEXTURE_SIZE minus one.
3123*35238bceSAndroid Build Coastguard Worker  *
3124*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE error is generated by NamedFramebufferTextureLayer if texture is an array texture,
3125*35238bceSAndroid Build Coastguard Worker  *      and layer is larger than the value of MAX_ARRAY_TEXTURE_LAYERS minus one.
3126*35238bceSAndroid Build Coastguard Worker  *
3127*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE error is generated by NamedFramebufferTextureLayer if texture is a cube map array texture,
3128*35238bceSAndroid Build Coastguard Worker  *      and (layer / 6) is larger than the value of MAX_CUBE_MAP_TEXTURE_SIZE minus one (see section 9.8).
3129*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE error is generated by NamedFramebufferTextureLayer if texture is non-zero
3130*35238bceSAndroid Build Coastguard Worker  *      and layer is negative.
3131*35238bceSAndroid Build Coastguard Worker  *
3132*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION error is generated by NamedFramebufferTextureLayer if texture is non-zero
3133*35238bceSAndroid Build Coastguard Worker  *      and is not the name of a three-dimensional, two-dimensional multisample array, one- or two-dimensional array,
3134*35238bceSAndroid Build Coastguard Worker  *      or cube map array texture.
3135*35238bceSAndroid Build Coastguard Worker  */
3136*35238bceSAndroid Build Coastguard Worker class TextureAttachmentErrorsTest : public deqp::TestCase
3137*35238bceSAndroid Build Coastguard Worker {
3138*35238bceSAndroid Build Coastguard Worker public:
3139*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
3140*35238bceSAndroid Build Coastguard Worker     TextureAttachmentErrorsTest(deqp::Context &context);
3141*35238bceSAndroid Build Coastguard Worker 
3142*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
3143*35238bceSAndroid Build Coastguard Worker 
3144*35238bceSAndroid Build Coastguard Worker private:
3145*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
3146*35238bceSAndroid Build Coastguard Worker     TextureAttachmentErrorsTest(const TextureAttachmentErrorsTest &other);
3147*35238bceSAndroid Build Coastguard Worker     TextureAttachmentErrorsTest &operator=(const TextureAttachmentErrorsTest &other);
3148*35238bceSAndroid Build Coastguard Worker 
3149*35238bceSAndroid Build Coastguard Worker     void PrepareObjects();
3150*35238bceSAndroid Build Coastguard Worker     bool ExpectError(glw::GLenum expected_error, const glw::GLchar *function_name, bool framebuffer, bool attachment,
3151*35238bceSAndroid Build Coastguard Worker                      bool color_attachment, bool texture, bool level, const glw::GLchar *texture_type, bool layer);
3152*35238bceSAndroid Build Coastguard Worker     void Clean();
3153*35238bceSAndroid Build Coastguard Worker 
3154*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
3155*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo_valid;
3156*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_valid;
3157*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_3d_valid;
3158*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_array_valid;
3159*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_cubearray_valid;
3160*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_tbo_valid;
3161*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo_invalid;
3162*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_invalid;
3163*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_layer_invalid; /* it is valid rectangle texture, but invalid for NamedFramebufferTextureLayer */
3164*35238bceSAndroid Build Coastguard Worker     glw::GLenum m_color_attachment_invalid;
3165*35238bceSAndroid Build Coastguard Worker     glw::GLenum m_attachment_invalid;
3166*35238bceSAndroid Build Coastguard Worker     glw::GLint m_level_invalid;
3167*35238bceSAndroid Build Coastguard Worker     glw::GLint m_max_3d_texture_size;
3168*35238bceSAndroid Build Coastguard Worker     glw::GLint m_max_3d_texture_depth;
3169*35238bceSAndroid Build Coastguard Worker     glw::GLint m_max_array_texture_layers;
3170*35238bceSAndroid Build Coastguard Worker     glw::GLint m_max_cube_map_texture_size;
3171*35238bceSAndroid Build Coastguard Worker };
3172*35238bceSAndroid Build Coastguard Worker /* TextureAttachmentErrorsTest class */
3173*35238bceSAndroid Build Coastguard Worker 
3174*35238bceSAndroid Build Coastguard Worker /** Named Framebuffer Draw Read Buffers Errors
3175*35238bceSAndroid Build Coastguard Worker  *
3176*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION error is generated by
3177*35238bceSAndroid Build Coastguard Worker  *      NamedFramebufferDrawBuffer if framebuffer is not zero or the name of an
3178*35238bceSAndroid Build Coastguard Worker  *      existing framebuffer object.
3179*35238bceSAndroid Build Coastguard Worker  *
3180*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by NamedFramebufferDrawBuffer if
3181*35238bceSAndroid Build Coastguard Worker  *      buf is not an accepted value.
3182*35238bceSAndroid Build Coastguard Worker  *
3183*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by NamedFramebufferDrawBuffer
3184*35238bceSAndroid Build Coastguard Worker  *      if the GL is bound to a draw framebuffer object and the ith argument is
3185*35238bceSAndroid Build Coastguard Worker  *      a value other than COLOR_ATTACHMENTi or NONE.
3186*35238bceSAndroid Build Coastguard Worker  *
3187*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION error is generated by
3188*35238bceSAndroid Build Coastguard Worker  *      NamedFramebufferDrawBuffers if framebuffer is not zero or the name of an
3189*35238bceSAndroid Build Coastguard Worker  *      existing framebuffer object.
3190*35238bceSAndroid Build Coastguard Worker  *
3191*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by NamedFramebufferDrawBuffers if
3192*35238bceSAndroid Build Coastguard Worker  *      n is less than 0.
3193*35238bceSAndroid Build Coastguard Worker  *
3194*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by NamedFramebufferDrawBuffers if
3195*35238bceSAndroid Build Coastguard Worker  *      n is greater than MAX_DRAW_BUFFERS.
3196*35238bceSAndroid Build Coastguard Worker  *
3197*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by NamedFramebufferDrawBuffers if
3198*35238bceSAndroid Build Coastguard Worker  *      one of the values in bufs is not an accepted value.
3199*35238bceSAndroid Build Coastguard Worker  *
3200*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by NamedFramebufferDrawBuffers
3201*35238bceSAndroid Build Coastguard Worker  *      if a symbolic constant other than GL_NONE appears more than once in
3202*35238bceSAndroid Build Coastguard Worker  *      bufs.
3203*35238bceSAndroid Build Coastguard Worker  *
3204*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM error is generated by
3205*35238bceSAndroid Build Coastguard Worker  *      NamedFramebufferDrawBuffers if any value in bufs is FRONT, LEFT, RIGHT,
3206*35238bceSAndroid Build Coastguard Worker  *      or FRONT_AND_BACK. This restriction applies to both the default
3207*35238bceSAndroid Build Coastguard Worker  *      framebuffer and framebuffer objects, and exists because these constants
3208*35238bceSAndroid Build Coastguard Worker  *      may themselves refer to multiple buffers, as shown in table 17.4.
3209*35238bceSAndroid Build Coastguard Worker  *
3210*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by NamedFramebufferDrawBuffers
3211*35238bceSAndroid Build Coastguard Worker  *      if any value in bufs is BACK, and n is not one.
3212*35238bceSAndroid Build Coastguard Worker  *
3213*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by NamedFramebufferDrawBuffers
3214*35238bceSAndroid Build Coastguard Worker  *      if the API call refers to a framebuffer object and one or more of the
3215*35238bceSAndroid Build Coastguard Worker  *      values in bufs is anything other than NONE or one of the
3216*35238bceSAndroid Build Coastguard Worker  *      COLOR_ATTACHMENTn tokens.
3217*35238bceSAndroid Build Coastguard Worker  *
3218*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by NamedFramebufferDrawBuffers
3219*35238bceSAndroid Build Coastguard Worker  *      if the API call refers to the default framebuffer and one or more of the
3220*35238bceSAndroid Build Coastguard Worker  *      values in bufs is one of the COLOR_ATTACHMENTn tokens.
3221*35238bceSAndroid Build Coastguard Worker  *
3222*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by NamedFramebufferReadBuffer
3223*35238bceSAndroid Build Coastguard Worker  *      if framebuffer is not zero or the name of an existing framebuffer
3224*35238bceSAndroid Build Coastguard Worker  *      object.
3225*35238bceSAndroid Build Coastguard Worker  *
3226*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by NamedFramebufferReadBuffer if
3227*35238bceSAndroid Build Coastguard Worker  *      src is not one of the accepted values (tables 17.4 and 17.5 of OpenGL
3228*35238bceSAndroid Build Coastguard Worker  *      4.5 Core Profile Specification).
3229*35238bceSAndroid Build Coastguard Worker  *
3230*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by NamedFramebufferReadBuffer
3231*35238bceSAndroid Build Coastguard Worker  *      if the default framebuffer is affected and src is a value (other than
3232*35238bceSAndroid Build Coastguard Worker  *      NONE) that does not indicate any of the color buffers allocated to the
3233*35238bceSAndroid Build Coastguard Worker  *      default framebuffer.
3234*35238bceSAndroid Build Coastguard Worker  *
3235*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by NamedFramebufferReadBuffer
3236*35238bceSAndroid Build Coastguard Worker  *      if a framebuffer object is affected, and src is one of the  constants
3237*35238bceSAndroid Build Coastguard Worker  *      from table 17.4 (other than NONE, or COLOR_ATTACHMENTm where m is
3238*35238bceSAndroid Build Coastguard Worker  *      greater than or equal to the value of MAX_COLOR_ATTACHMENTS).
3239*35238bceSAndroid Build Coastguard Worker  */
3240*35238bceSAndroid Build Coastguard Worker class DrawReadBuffersErrorsTest : public deqp::TestCase
3241*35238bceSAndroid Build Coastguard Worker {
3242*35238bceSAndroid Build Coastguard Worker public:
3243*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
3244*35238bceSAndroid Build Coastguard Worker     DrawReadBuffersErrorsTest(deqp::Context &context);
3245*35238bceSAndroid Build Coastguard Worker 
3246*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
3247*35238bceSAndroid Build Coastguard Worker 
3248*35238bceSAndroid Build Coastguard Worker private:
3249*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
3250*35238bceSAndroid Build Coastguard Worker     DrawReadBuffersErrorsTest(const DrawReadBuffersErrorsTest &other);
3251*35238bceSAndroid Build Coastguard Worker     DrawReadBuffersErrorsTest operator=(const DrawReadBuffersErrorsTest &other);
3252*35238bceSAndroid Build Coastguard Worker 
3253*35238bceSAndroid Build Coastguard Worker     void PrepareObjects();
3254*35238bceSAndroid Build Coastguard Worker     bool ExpectError(glw::GLenum expected_error, const glw::GLchar *function, const glw::GLchar *conditions);
3255*35238bceSAndroid Build Coastguard Worker     void Clean();
3256*35238bceSAndroid Build Coastguard Worker 
3257*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
3258*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo_valid;
3259*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo_invalid;
3260*35238bceSAndroid Build Coastguard Worker     glw::GLenum m_attachment_color;
3261*35238bceSAndroid Build Coastguard Worker     glw::GLenum m_attachment_back_left;
3262*35238bceSAndroid Build Coastguard Worker     glw::GLenum m_attachment_right;
3263*35238bceSAndroid Build Coastguard Worker     glw::GLenum m_attachment_left;
3264*35238bceSAndroid Build Coastguard Worker     glw::GLenum m_attachment_front;
3265*35238bceSAndroid Build Coastguard Worker     glw::GLenum m_attachment_front_and_back;
3266*35238bceSAndroid Build Coastguard Worker     glw::GLenum m_attachment_back;
3267*35238bceSAndroid Build Coastguard Worker     glw::GLenum m_attachment_invalid;
3268*35238bceSAndroid Build Coastguard Worker     glw::GLenum m_attachments_invalid[2];
3269*35238bceSAndroid Build Coastguard Worker     glw::GLenum m_attachments_back_invalid[2];
3270*35238bceSAndroid Build Coastguard Worker     glw::GLint m_attachments_too_many_count;
3271*35238bceSAndroid Build Coastguard Worker     glw::GLenum *m_attachments_too_many;
3272*35238bceSAndroid Build Coastguard Worker     glw::GLint m_max_color_attachments;
3273*35238bceSAndroid Build Coastguard Worker };
3274*35238bceSAndroid Build Coastguard Worker /* DrawReadBuffersErrorsTest class */
3275*35238bceSAndroid Build Coastguard Worker 
3276*35238bceSAndroid Build Coastguard Worker /** Invalidate Framebuffer Data and SubData Errors
3277*35238bceSAndroid Build Coastguard Worker 
3278*35238bceSAndroid Build Coastguard Worker  Check that INVALID_OPERATION error is generated by
3279*35238bceSAndroid Build Coastguard Worker  InvalidateNamedFramebufferData if framebuffer is not zero or the name of
3280*35238bceSAndroid Build Coastguard Worker  an existing framebuffer object.
3281*35238bceSAndroid Build Coastguard Worker 
3282*35238bceSAndroid Build Coastguard Worker  Check that INVALID_ENUM error is generated by
3283*35238bceSAndroid Build Coastguard Worker  InvalidateNamedFramebufferData if a framebuffer object is affected, and
3284*35238bceSAndroid Build Coastguard Worker  any element of of attachments is not one of the values
3285*35238bceSAndroid Build Coastguard Worker  {COLOR_ATTACHMENTi, DEPTH_ATTACHMENT, STENCIL_ATTACHMENT,
3286*35238bceSAndroid Build Coastguard Worker  DEPTH_STENCIL_ATTACHMENT}.
3287*35238bceSAndroid Build Coastguard Worker 
3288*35238bceSAndroid Build Coastguard Worker  Check that INVALID_OPERATION error is generated by
3289*35238bceSAndroid Build Coastguard Worker  InvalidateNamedFramebufferData if attachments contains COLOR_ATTACHMENTm
3290*35238bceSAndroid Build Coastguard Worker  where m is greater than or equal to the value of MAX_COLOR_ATTACHMENTS.
3291*35238bceSAndroid Build Coastguard Worker 
3292*35238bceSAndroid Build Coastguard Worker  Check that INVALID_ENUM error is generated by
3293*35238bceSAndroid Build Coastguard Worker  InvalidateNamedFramebufferData if the default framebuffer is affected,
3294*35238bceSAndroid Build Coastguard Worker  and any elements of attachments are not one of:
3295*35238bceSAndroid Build Coastguard Worker  -  FRONT_LEFT, FRONT_RIGHT, BACK_LEFT, and BACK_RIGHT, identifying that
3296*35238bceSAndroid Build Coastguard Worker  specific buffer,
3297*35238bceSAndroid Build Coastguard Worker  -  COLOR, which is treated as BACK_LEFT for a double-buffered context
3298*35238bceSAndroid Build Coastguard Worker  and FRONT_LEFT for a single-buffered context,
3299*35238bceSAndroid Build Coastguard Worker  -  DEPTH, identifying the depth buffer,
3300*35238bceSAndroid Build Coastguard Worker  -  STENCIL, identifying the stencil buffer.
3301*35238bceSAndroid Build Coastguard Worker 
3302*35238bceSAndroid Build Coastguard Worker  Check that INVALID_OPERATION error is generated by
3303*35238bceSAndroid Build Coastguard Worker  InvalidateNamedSubFramebuffer if framebuffer is not zero or the name of
3304*35238bceSAndroid Build Coastguard Worker  an existing framebuffer object.
3305*35238bceSAndroid Build Coastguard Worker 
3306*35238bceSAndroid Build Coastguard Worker  Check that INVALID_VALUE error is generated by
3307*35238bceSAndroid Build Coastguard Worker  InvalidateNamedSubFramebuffer if numAttachments, width, or height is
3308*35238bceSAndroid Build Coastguard Worker  negative.
3309*35238bceSAndroid Build Coastguard Worker 
3310*35238bceSAndroid Build Coastguard Worker  Check that INVALID_ENUM error is generated by
3311*35238bceSAndroid Build Coastguard Worker  InvalidateNamedSubFramebuffer if a framebuffer object is affected, and
3312*35238bceSAndroid Build Coastguard Worker  any element of attachments is not one of the values {COLOR_ATTACHMENTi,
3313*35238bceSAndroid Build Coastguard Worker  DEPTH_ATTACHMENT, STENCIL_ATTACHMENT, DEPTH_STENCIL_ATTACHMENT}.
3314*35238bceSAndroid Build Coastguard Worker 
3315*35238bceSAndroid Build Coastguard Worker  Check that INVALID_OPERATION error is generated by
3316*35238bceSAndroid Build Coastguard Worker  InvalidateNamedSubFramebuffer if attachments contains COLOR_ATTACHMENTm
3317*35238bceSAndroid Build Coastguard Worker  where m is greater than or equal to the value of MAX_COLOR_ATTACHMENTS.
3318*35238bceSAndroid Build Coastguard Worker 
3319*35238bceSAndroid Build Coastguard Worker  Check that INVALID_ENUM error is generated by
3320*35238bceSAndroid Build Coastguard Worker  InvalidateNamedSubFramebuffer if the default framebuffer is affected,
3321*35238bceSAndroid Build Coastguard Worker  and any elements of attachments are not one of:
3322*35238bceSAndroid Build Coastguard Worker  -  FRONT_LEFT, FRONT_RIGHT, BACK_LEFT, and BACK_RIGHT, identifying that
3323*35238bceSAndroid Build Coastguard Worker  specific buffer,
3324*35238bceSAndroid Build Coastguard Worker  -  COLOR, which is treated as BACK_LEFT for a double-buffered context
3325*35238bceSAndroid Build Coastguard Worker  and FRONT_LEFT for a single-buffered context,
3326*35238bceSAndroid Build Coastguard Worker  -  DEPTH, identifying the depth buffer,
3327*35238bceSAndroid Build Coastguard Worker  -  STENCIL, identifying the stencil buffer.
3328*35238bceSAndroid Build Coastguard Worker  */
3329*35238bceSAndroid Build Coastguard Worker class InvalidateDataAndSubDataErrorsTest : public deqp::TestCase
3330*35238bceSAndroid Build Coastguard Worker {
3331*35238bceSAndroid Build Coastguard Worker public:
3332*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
3333*35238bceSAndroid Build Coastguard Worker     InvalidateDataAndSubDataErrorsTest(deqp::Context &context);
3334*35238bceSAndroid Build Coastguard Worker 
3335*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
3336*35238bceSAndroid Build Coastguard Worker 
3337*35238bceSAndroid Build Coastguard Worker private:
3338*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
3339*35238bceSAndroid Build Coastguard Worker     InvalidateDataAndSubDataErrorsTest(const InvalidateDataAndSubDataErrorsTest &other);
3340*35238bceSAndroid Build Coastguard Worker     InvalidateDataAndSubDataErrorsTest operator=(const InvalidateDataAndSubDataErrorsTest &other);
3341*35238bceSAndroid Build Coastguard Worker 
3342*35238bceSAndroid Build Coastguard Worker     void PrepareObjects();
3343*35238bceSAndroid Build Coastguard Worker     bool ExpectError(glw::GLenum expected_error, const glw::GLchar *function, const glw::GLchar *conditions);
3344*35238bceSAndroid Build Coastguard Worker     void Clean();
3345*35238bceSAndroid Build Coastguard Worker 
3346*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
3347*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo_valid;
3348*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo;
3349*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo_invalid;
3350*35238bceSAndroid Build Coastguard Worker     glw::GLenum m_fbo_attachment_valid;
3351*35238bceSAndroid Build Coastguard Worker     glw::GLenum m_fbo_attachment_invalid;
3352*35238bceSAndroid Build Coastguard Worker     glw::GLenum m_color_attachment_invalid;
3353*35238bceSAndroid Build Coastguard Worker     glw::GLenum m_default_attachment_invalid;
3354*35238bceSAndroid Build Coastguard Worker };
3355*35238bceSAndroid Build Coastguard Worker /* InvalidateDataAndSubDataErrorsTest class */
3356*35238bceSAndroid Build Coastguard Worker 
3357*35238bceSAndroid Build Coastguard Worker /** Clear Named Framebuffer Errors
3358*35238bceSAndroid Build Coastguard Worker  *
3359*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by ClearNamedFramebuffer* if
3360*35238bceSAndroid Build Coastguard Worker  *      framebuffer is not zero or the name of an existing framebuffer object.
3361*35238bceSAndroid Build Coastguard Worker  *
3362*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by ClearNamedFramebufferiv buffer
3363*35238bceSAndroid Build Coastguard Worker  *      is not COLOR or STENCIL.
3364*35238bceSAndroid Build Coastguard Worker  *
3365*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by ClearNamedFramebufferuiv buffer
3366*35238bceSAndroid Build Coastguard Worker  *      is not COLOR.
3367*35238bceSAndroid Build Coastguard Worker  *
3368*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by ClearNamedFramebufferfv buffer
3369*35238bceSAndroid Build Coastguard Worker  *      is not COLOR or DEPTH.
3370*35238bceSAndroid Build Coastguard Worker  *
3371*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by ClearNamedFramebufferfi buffer
3372*35238bceSAndroid Build Coastguard Worker  *      is not DEPTH_STENCIL.
3373*35238bceSAndroid Build Coastguard Worker  *
3374*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated if buffer is COLOR drawbuffer is
3375*35238bceSAndroid Build Coastguard Worker  *      negative, or greater than the value of MAX_DRAW_BUFFERS minus one.
3376*35238bceSAndroid Build Coastguard Worker  *
3377*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated if buffer is DEPTH, STENCIL or
3378*35238bceSAndroid Build Coastguard Worker  *      DEPTH_STENCIL and drawbuffer is not zero.
3379*35238bceSAndroid Build Coastguard Worker  */
3380*35238bceSAndroid Build Coastguard Worker class ClearNamedFramebufferErrorsTest : public deqp::TestCase
3381*35238bceSAndroid Build Coastguard Worker {
3382*35238bceSAndroid Build Coastguard Worker public:
3383*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
3384*35238bceSAndroid Build Coastguard Worker     ClearNamedFramebufferErrorsTest(deqp::Context &context);
3385*35238bceSAndroid Build Coastguard Worker 
3386*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
3387*35238bceSAndroid Build Coastguard Worker 
3388*35238bceSAndroid Build Coastguard Worker private:
3389*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
3390*35238bceSAndroid Build Coastguard Worker     ClearNamedFramebufferErrorsTest(const ClearNamedFramebufferErrorsTest &other);
3391*35238bceSAndroid Build Coastguard Worker     ClearNamedFramebufferErrorsTest &operator=(const ClearNamedFramebufferErrorsTest &other);
3392*35238bceSAndroid Build Coastguard Worker 
3393*35238bceSAndroid Build Coastguard Worker     void PrepareObjects();
3394*35238bceSAndroid Build Coastguard Worker     bool ExpectError(glw::GLenum expected_error, const glw::GLchar *function, const glw::GLchar *conditions);
3395*35238bceSAndroid Build Coastguard Worker     void Clean();
3396*35238bceSAndroid Build Coastguard Worker 
3397*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
3398*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo_valid;
3399*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo_color;
3400*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo_depth_stencil;
3401*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo_invalid;
3402*35238bceSAndroid Build Coastguard Worker };
3403*35238bceSAndroid Build Coastguard Worker /* ClearNamedFramebufferErrorsTest class */
3404*35238bceSAndroid Build Coastguard Worker 
3405*35238bceSAndroid Build Coastguard Worker /** Check Named Framebuffer Status Errors
3406*35238bceSAndroid Build Coastguard Worker  *
3407*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by CheckNamedFramebufferStatus if
3408*35238bceSAndroid Build Coastguard Worker  *      target is not DRAW_FRAMEBUFFER, READ_FRAMEBUFFER or FRAMEBUFFER.
3409*35238bceSAndroid Build Coastguard Worker  *
3410*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by CheckNamedFramebufferStatus
3411*35238bceSAndroid Build Coastguard Worker  *      if framebuffer is not zero or the name of an existing framebuffer
3412*35238bceSAndroid Build Coastguard Worker  *      object.
3413*35238bceSAndroid Build Coastguard Worker  */
3414*35238bceSAndroid Build Coastguard Worker class CheckStatusErrorsTest : public deqp::TestCase
3415*35238bceSAndroid Build Coastguard Worker {
3416*35238bceSAndroid Build Coastguard Worker public:
3417*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
3418*35238bceSAndroid Build Coastguard Worker     CheckStatusErrorsTest(deqp::Context &context);
3419*35238bceSAndroid Build Coastguard Worker 
3420*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
3421*35238bceSAndroid Build Coastguard Worker 
3422*35238bceSAndroid Build Coastguard Worker private:
3423*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
3424*35238bceSAndroid Build Coastguard Worker     CheckStatusErrorsTest(const CheckStatusErrorsTest &other);
3425*35238bceSAndroid Build Coastguard Worker     CheckStatusErrorsTest &operator=(const CheckStatusErrorsTest &other);
3426*35238bceSAndroid Build Coastguard Worker 
3427*35238bceSAndroid Build Coastguard Worker     void PrepareObjects();
3428*35238bceSAndroid Build Coastguard Worker     bool ExpectError(glw::GLenum expected_error, const glw::GLchar *function, const glw::GLchar *conditions);
3429*35238bceSAndroid Build Coastguard Worker     void Clean();
3430*35238bceSAndroid Build Coastguard Worker 
3431*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
3432*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo_valid;
3433*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo_invalid;
3434*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_target_invalid;
3435*35238bceSAndroid Build Coastguard Worker };
3436*35238bceSAndroid Build Coastguard Worker /* CheckStatusErrorsTest class */
3437*35238bceSAndroid Build Coastguard Worker 
3438*35238bceSAndroid Build Coastguard Worker /** Get Named Framebuffer Parameter Errors
3439*35238bceSAndroid Build Coastguard Worker  *
3440*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by
3441*35238bceSAndroid Build Coastguard Worker  *      GetNamedFramebufferParameteriv if framebuffer is not zero or the name of
3442*35238bceSAndroid Build Coastguard Worker  *      an existing framebuffer object.
3443*35238bceSAndroid Build Coastguard Worker  *
3444*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by GetNamedFramebufferParameteriv
3445*35238bceSAndroid Build Coastguard Worker  *      if pname is not one of the accepted parameter names.
3446*35238bceSAndroid Build Coastguard Worker  *
3447*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated if a default framebuffer is
3448*35238bceSAndroid Build Coastguard Worker  *      queried, and pname is not one of DOUBLEBUFFER,
3449*35238bceSAndroid Build Coastguard Worker  *      IMPLEMENTATION_COLOR_READ_FORMAT, IMPLEMENTATION_COLOR_READ_TYPE,
3450*35238bceSAndroid Build Coastguard Worker  *      SAMPLES, SAMPLE_BUFFERS or STEREO.
3451*35238bceSAndroid Build Coastguard Worker  */
3452*35238bceSAndroid Build Coastguard Worker class GetParameterErrorsTest : public deqp::TestCase
3453*35238bceSAndroid Build Coastguard Worker {
3454*35238bceSAndroid Build Coastguard Worker public:
3455*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
3456*35238bceSAndroid Build Coastguard Worker     GetParameterErrorsTest(deqp::Context &context);
3457*35238bceSAndroid Build Coastguard Worker 
3458*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
3459*35238bceSAndroid Build Coastguard Worker 
3460*35238bceSAndroid Build Coastguard Worker private:
3461*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
3462*35238bceSAndroid Build Coastguard Worker     GetParameterErrorsTest(const GetParameterErrorsTest &other);
3463*35238bceSAndroid Build Coastguard Worker     GetParameterErrorsTest &operator=(const GetParameterErrorsTest &other);
3464*35238bceSAndroid Build Coastguard Worker 
3465*35238bceSAndroid Build Coastguard Worker     void PrepareObjects();
3466*35238bceSAndroid Build Coastguard Worker     bool ExpectError(glw::GLenum expected_error, const glw::GLchar *function, const glw::GLchar *conditions);
3467*35238bceSAndroid Build Coastguard Worker     void Clean();
3468*35238bceSAndroid Build Coastguard Worker 
3469*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
3470*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo_valid;
3471*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo_invalid;
3472*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_parameter_invalid;
3473*35238bceSAndroid Build Coastguard Worker };
3474*35238bceSAndroid Build Coastguard Worker /* GetParameterErrorsTest class */
3475*35238bceSAndroid Build Coastguard Worker 
3476*35238bceSAndroid Build Coastguard Worker /** Get Named Framebuffer Attachment Parameter Errors
3477*35238bceSAndroid Build Coastguard Worker  *
3478*35238bceSAndroid Build Coastguard Worker  *      Check that GL_INVALID_OPERATION is generated by
3479*35238bceSAndroid Build Coastguard Worker  *      GetNamedFramebufferAttachmentParameteriv if framebuffer is not zero or
3480*35238bceSAndroid Build Coastguard Worker  *      the name of an existing framebuffer object.
3481*35238bceSAndroid Build Coastguard Worker  *
3482*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by
3483*35238bceSAndroid Build Coastguard Worker  *      GetNamedFramebufferAttachmentParameteriv if pname is not valid for the
3484*35238bceSAndroid Build Coastguard Worker  *      value of GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, as described above.
3485*35238bceSAndroid Build Coastguard Worker  *
3486*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM error is generated if a framebuffer object is queried, attachment
3487*35238bceSAndroid Build Coastguard Worker  *      is not one of the attachments in table 9.2 (COLOR_ATTACHMENTi, DEPTH_ATTACHMENT, STENCIL_ATTACHMENT, DEPTH_STENCIL_ATTACHMENT), and attachment is not
3488*35238bceSAndroid Build Coastguard Worker  *      COLOR_ATTACHMENTm where m is greater than or equal to the value of MAX_COLOR_ATTACHMENTS.
3489*35238bceSAndroid Build Coastguard Worker  *
3490*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by
3491*35238bceSAndroid Build Coastguard Worker  *      GetNamedFramebufferAttachmentParameteriv if the value of
3492*35238bceSAndroid Build Coastguard Worker  *      FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE is GL_NONE and pname is not
3493*35238bceSAndroid Build Coastguard Worker  *      FRAMEBUFFER_ATTACHMENT_OBJECT_NAME or
3494*35238bceSAndroid Build Coastguard Worker  *      FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE.
3495*35238bceSAndroid Build Coastguard Worker  *
3496*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by
3497*35238bceSAndroid Build Coastguard Worker  *      GetNamedFramebufferAttachmentParameteriv if attachment is
3498*35238bceSAndroid Build Coastguard Worker  *      DEPTH_STENCIL_ATTACHMENT and pname is
3499*35238bceSAndroid Build Coastguard Worker  *      FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE.
3500*35238bceSAndroid Build Coastguard Worker  *
3501*35238bceSAndroid Build Coastguard Worker  *      Check that an INVALID_ENUM error is generated if the default framebuffer is
3502*35238bceSAndroid Build Coastguard Worker  *      queried and attachment is not one the values specified in table 9.1.
3503*35238bceSAndroid Build Coastguard Worker  *
3504*35238bceSAndroid Build Coastguard Worker  *      Check that an INVALID_OPERATION error is generated if a framebuffer object is
3505*35238bceSAndroid Build Coastguard Worker  *      bound to target and attachment is COLOR_ATTACHMENTm where m is greater than or
3506*35238bceSAndroid Build Coastguard Worker  *      equal to the value of MAX_COLOR_ATTACHMENTS.
3507*35238bceSAndroid Build Coastguard Worker  *
3508*35238bceSAndroid Build Coastguard Worker  *      Check that an INVALID_ENUM error is generated if a framebuffer object is
3509*35238bceSAndroid Build Coastguard Worker  *      queried, attachment is not one of the attachments in table 9.2, and attachment
3510*35238bceSAndroid Build Coastguard Worker  *      is not COLOR_ATTACHMENTm where m is greater than or equal to the value of
3511*35238bceSAndroid Build Coastguard Worker  *      MAX_COLOR_ATTACHMENTS.
3512*35238bceSAndroid Build Coastguard Worker  */
3513*35238bceSAndroid Build Coastguard Worker class GetAttachmentParameterErrorsTest : public deqp::TestCase
3514*35238bceSAndroid Build Coastguard Worker {
3515*35238bceSAndroid Build Coastguard Worker public:
3516*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
3517*35238bceSAndroid Build Coastguard Worker     GetAttachmentParameterErrorsTest(deqp::Context &context);
3518*35238bceSAndroid Build Coastguard Worker 
3519*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
3520*35238bceSAndroid Build Coastguard Worker 
3521*35238bceSAndroid Build Coastguard Worker private:
3522*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
3523*35238bceSAndroid Build Coastguard Worker     GetAttachmentParameterErrorsTest(const GetAttachmentParameterErrorsTest &other);
3524*35238bceSAndroid Build Coastguard Worker     GetAttachmentParameterErrorsTest &operator=(const GetAttachmentParameterErrorsTest &other);
3525*35238bceSAndroid Build Coastguard Worker 
3526*35238bceSAndroid Build Coastguard Worker     void PrepareObjects();
3527*35238bceSAndroid Build Coastguard Worker     bool ExpectError(glw::GLenum expected_error, const glw::GLchar *function, const glw::GLchar *conditions);
3528*35238bceSAndroid Build Coastguard Worker     void Clean();
3529*35238bceSAndroid Build Coastguard Worker 
3530*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
3531*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo_valid;
3532*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo_color;
3533*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo_depth_stencil;
3534*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo_invalid;
3535*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_parameter_invalid;
3536*35238bceSAndroid Build Coastguard Worker     glw::GLenum m_attachment_invalid;
3537*35238bceSAndroid Build Coastguard Worker     glw::GLenum m_default_attachment_invalid;
3538*35238bceSAndroid Build Coastguard Worker     glw::GLint m_max_color_attachments;
3539*35238bceSAndroid Build Coastguard Worker };
3540*35238bceSAndroid Build Coastguard Worker /* GetAttachmentParameterErrorsTest class */
3541*35238bceSAndroid Build Coastguard Worker 
3542*35238bceSAndroid Build Coastguard Worker /** Framebuffer and Renderbuffer Functional
3543*35238bceSAndroid Build Coastguard Worker  *
3544*35238bceSAndroid Build Coastguard Worker  *      Create two framebuffer objects using CreateFramebuffers.
3545*35238bceSAndroid Build Coastguard Worker  *
3546*35238bceSAndroid Build Coastguard Worker  *      Setup first framebuffer with renderbuffer color, depth and stencil
3547*35238bceSAndroid Build Coastguard Worker  *      attachments. Setup storage size with width and height equal to 8. Set
3548*35238bceSAndroid Build Coastguard Worker  *      them as draw and read buffers. Clean up it, use black color. Check the
3549*35238bceSAndroid Build Coastguard Worker  *      framebuffer status.
3550*35238bceSAndroid Build Coastguard Worker  *
3551*35238bceSAndroid Build Coastguard Worker  *      Setup second framebuffer with texture color attachment. Setup storage
3552*35238bceSAndroid Build Coastguard Worker  *      size with width equal to 4 and height equal to 3.  Check the framebuffer
3553*35238bceSAndroid Build Coastguard Worker  *      status.
3554*35238bceSAndroid Build Coastguard Worker  *
3555*35238bceSAndroid Build Coastguard Worker  *      Prepare GLSL program which can draw triangles using orthographic
3556*35238bceSAndroid Build Coastguard Worker  *      projection. Fragment shader
3557*35238bceSAndroid Build Coastguard Worker  *
3558*35238bceSAndroid Build Coastguard Worker  *      Clean both framebuffers using ClearNamedFramebuffer* functions.
3559*35238bceSAndroid Build Coastguard Worker  *
3560*35238bceSAndroid Build Coastguard Worker  *      Use first framebuffer.
3561*35238bceSAndroid Build Coastguard Worker  *
3562*35238bceSAndroid Build Coastguard Worker  *      Draw to stencil a quad with screen positions [-0.5, -0.5], [-0.5, 0.5],
3563*35238bceSAndroid Build Coastguard Worker  *      [0.5, -0.5] and [0.5, 0.5].
3564*35238bceSAndroid Build Coastguard Worker  *
3565*35238bceSAndroid Build Coastguard Worker  *      Draw to depth buffer a quad with positions [-1, -1, -1], [-1, 1, -1],
3566*35238bceSAndroid Build Coastguard Worker  *      [1, -1, 0] and [1, 1, 0].
3567*35238bceSAndroid Build Coastguard Worker  *
3568*35238bceSAndroid Build Coastguard Worker  *      Turn on depth and stencil tests. Depth test shall pass if incoming depth
3569*35238bceSAndroid Build Coastguard Worker  *      value is LESS than stored. The Stencil test shall pass only for any
3570*35238bceSAndroid Build Coastguard Worker  *      stencil pass.
3571*35238bceSAndroid Build Coastguard Worker  *
3572*35238bceSAndroid Build Coastguard Worker  *      Draw Full screen quad to draw buffer with z = 0.5.
3573*35238bceSAndroid Build Coastguard Worker  *
3574*35238bceSAndroid Build Coastguard Worker  *      Blit the color content of the first framebuffer to the second with
3575*35238bceSAndroid Build Coastguard Worker  *      nearest filter.
3576*35238bceSAndroid Build Coastguard Worker  *
3577*35238bceSAndroid Build Coastguard Worker  *      Fetch data. Expect that second framebuffer contain following data
3578*35238bceSAndroid Build Coastguard Worker  *          black,  black,  black,  black,
3579*35238bceSAndroid Build Coastguard Worker  *          black,  black,  white,  black,
3580*35238bceSAndroid Build Coastguard Worker  *          black,  black,  black,  black.
3581*35238bceSAndroid Build Coastguard Worker  */
3582*35238bceSAndroid Build Coastguard Worker class FunctionalTest : public deqp::TestCase
3583*35238bceSAndroid Build Coastguard Worker {
3584*35238bceSAndroid Build Coastguard Worker public:
3585*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
3586*35238bceSAndroid Build Coastguard Worker     FunctionalTest(deqp::Context &context);
3587*35238bceSAndroid Build Coastguard Worker 
3588*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
3589*35238bceSAndroid Build Coastguard Worker 
3590*35238bceSAndroid Build Coastguard Worker private:
3591*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
3592*35238bceSAndroid Build Coastguard Worker     FunctionalTest(const FunctionalTest &other);
3593*35238bceSAndroid Build Coastguard Worker     FunctionalTest &operator=(const FunctionalTest &other);
3594*35238bceSAndroid Build Coastguard Worker 
3595*35238bceSAndroid Build Coastguard Worker     bool PrepareFirstFramebuffer();
3596*35238bceSAndroid Build Coastguard Worker     bool PrepareSecondFramebuffer();
3597*35238bceSAndroid Build Coastguard Worker     bool ClearFramebuffers();
3598*35238bceSAndroid Build Coastguard Worker     void PrepareProgram();
3599*35238bceSAndroid Build Coastguard Worker     void PrepareBuffersAndVertexArrays();
3600*35238bceSAndroid Build Coastguard Worker     bool DrawAndBlit();
3601*35238bceSAndroid Build Coastguard Worker     bool CheckSecondFramebufferContent();
3602*35238bceSAndroid Build Coastguard Worker     void Clean();
3603*35238bceSAndroid Build Coastguard Worker 
3604*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
3605*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo_1st;
3606*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo_2nd;
3607*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo_color;
3608*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo_depth_stencil;
3609*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_color;
3610*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_po;
3611*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_vao_stencil_pass_quad;
3612*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_vao_depth_pass_quad;
3613*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_vao_color_pass_quad;
3614*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_bo_stencil_pass_quad;
3615*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_bo_depth_pass_quad;
3616*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_bo_color_pass_quad;
3617*35238bceSAndroid Build Coastguard Worker 
3618*35238bceSAndroid Build Coastguard Worker     /* Private static variables. */
3619*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar s_vertex_shader[];
3620*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar s_fragment_shader[];
3621*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar s_attribute[];
3622*35238bceSAndroid Build Coastguard Worker     static const glw::GLfloat s_stencil_pass_quad[];
3623*35238bceSAndroid Build Coastguard Worker     static const glw::GLfloat s_depth_pass_quad[];
3624*35238bceSAndroid Build Coastguard Worker     static const glw::GLfloat s_color_pass_quad[];
3625*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_stencil_pass_quad_size;
3626*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_depth_pass_quad_size;
3627*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_color_pass_quad_size;
3628*35238bceSAndroid Build Coastguard Worker };
3629*35238bceSAndroid Build Coastguard Worker /* FunctionalTest class */
3630*35238bceSAndroid Build Coastguard Worker } // namespace Framebuffers
3631*35238bceSAndroid Build Coastguard Worker 
3632*35238bceSAndroid Build Coastguard Worker namespace Renderbuffers
3633*35238bceSAndroid Build Coastguard Worker {
3634*35238bceSAndroid Build Coastguard Worker /** Renderbuffer Creation
3635*35238bceSAndroid Build Coastguard Worker  *
3636*35238bceSAndroid Build Coastguard Worker  *      Create at least two renderbuffer objects using GenRenderbuffers
3637*35238bceSAndroid Build Coastguard Worker  *      function. Check them without binding, using IsRenderbuffer function.
3638*35238bceSAndroid Build Coastguard Worker  *      Expect FALSE.
3639*35238bceSAndroid Build Coastguard Worker  *
3640*35238bceSAndroid Build Coastguard Worker  *      Create at least two renderbuffer objects using CreateRenderbuffers
3641*35238bceSAndroid Build Coastguard Worker  *      function. Check them without binding, using IsRenderbuffer function.
3642*35238bceSAndroid Build Coastguard Worker  *      Expect TRUE.
3643*35238bceSAndroid Build Coastguard Worker  *
3644*35238bceSAndroid Build Coastguard Worker  *      Release objects.
3645*35238bceSAndroid Build Coastguard Worker  */
3646*35238bceSAndroid Build Coastguard Worker class CreationTest : public deqp::TestCase
3647*35238bceSAndroid Build Coastguard Worker {
3648*35238bceSAndroid Build Coastguard Worker public:
3649*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
3650*35238bceSAndroid Build Coastguard Worker     CreationTest(deqp::Context &context);
3651*35238bceSAndroid Build Coastguard Worker 
3652*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
3653*35238bceSAndroid Build Coastguard Worker 
3654*35238bceSAndroid Build Coastguard Worker private:
3655*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
3656*35238bceSAndroid Build Coastguard Worker     CreationTest(const CreationTest &other);
3657*35238bceSAndroid Build Coastguard Worker     CreationTest &operator=(const CreationTest &other);
3658*35238bceSAndroid Build Coastguard Worker };
3659*35238bceSAndroid Build Coastguard Worker /* CreationTest class */
3660*35238bceSAndroid Build Coastguard Worker 
3661*35238bceSAndroid Build Coastguard Worker /** Named Renderbuffer Storage
3662*35238bceSAndroid Build Coastguard Worker  *
3663*35238bceSAndroid Build Coastguard Worker  *      Create renderbuffer object. Prepare its storage using
3664*35238bceSAndroid Build Coastguard Worker  *      NamedRenderbufferStorage function.
3665*35238bceSAndroid Build Coastguard Worker  *
3666*35238bceSAndroid Build Coastguard Worker  *      Create framebuffer object. Attach renderbuffer to proper attachment
3667*35238bceSAndroid Build Coastguard Worker  *      point.
3668*35238bceSAndroid Build Coastguard Worker  *
3669*35238bceSAndroid Build Coastguard Worker  *      Clear framebuffer's renderbuffer attachment with reference value. Fetch
3670*35238bceSAndroid Build Coastguard Worker  *      the data from framebuffer's attachment using ReadPixels. Compare the
3671*35238bceSAndroid Build Coastguard Worker  *      fetched values with the reference.
3672*35238bceSAndroid Build Coastguard Worker  *
3673*35238bceSAndroid Build Coastguard Worker  *      Release all objects.
3674*35238bceSAndroid Build Coastguard Worker  *
3675*35238bceSAndroid Build Coastguard Worker  *      Repeat the test for following internal formats:
3676*35238bceSAndroid Build Coastguard Worker  *
3677*35238bceSAndroid Build Coastguard Worker  *          R8, R16, RG8, RG16, RGB565, RGBA4, RGB5_A1, RGBA8, RGB10_A2,
3678*35238bceSAndroid Build Coastguard Worker  *          RGB10_A2UI, RGBA16, SRGB8_ALPHA8, R16F, RG16F, RGBA16F, R32F, RG32F,
3679*35238bceSAndroid Build Coastguard Worker  *          RGBA32F, R11F_G11F_B10F, R8I, R8UI, R16I, R16UI, R32I, R32UI, RG8I,
3680*35238bceSAndroid Build Coastguard Worker  *          RG8UI, RG16I, RG16UI, RG32I, RG32UI, RGBA8I, RGBA8UI, RGBA16I,
3681*35238bceSAndroid Build Coastguard Worker  *          RGBA16UI, RGBA32I, RGBA32UI, DEPTH_COMPONENT16, DEPTH_COMPONENT24,
3682*35238bceSAndroid Build Coastguard Worker  *          DEPTH_COMPONENT32F, DEPTH24_STENCIL8, DEPTH32F_STENCIL8 and
3683*35238bceSAndroid Build Coastguard Worker  *          STENCIL_INDEX8.
3684*35238bceSAndroid Build Coastguard Worker  *
3685*35238bceSAndroid Build Coastguard Worker  *      Repeat the test for following width and height:
3686*35238bceSAndroid Build Coastguard Worker  *          width = 1 and height = 1;
3687*35238bceSAndroid Build Coastguard Worker  *          width = 256 and height = 512;
3688*35238bceSAndroid Build Coastguard Worker  *          width = 1280 and height = 720;
3689*35238bceSAndroid Build Coastguard Worker  *          width = value of MAX_RENDERBUFFER_SIZE and height = 1;
3690*35238bceSAndroid Build Coastguard Worker  *          width = 1 and height = value of MAX_RENDERBUFFER_SIZE.
3691*35238bceSAndroid Build Coastguard Worker  */
3692*35238bceSAndroid Build Coastguard Worker class StorageTest : public deqp::TestCase
3693*35238bceSAndroid Build Coastguard Worker {
3694*35238bceSAndroid Build Coastguard Worker public:
3695*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
3696*35238bceSAndroid Build Coastguard Worker     StorageTest(deqp::Context &context);
3697*35238bceSAndroid Build Coastguard Worker 
3698*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
3699*35238bceSAndroid Build Coastguard Worker 
3700*35238bceSAndroid Build Coastguard Worker private:
3701*35238bceSAndroid Build Coastguard Worker     /* Private static variables. */
3702*35238bceSAndroid Build Coastguard Worker     static const struct RenderbufferInternalFormatConfiguration
3703*35238bceSAndroid Build Coastguard Worker     {
3704*35238bceSAndroid Build Coastguard Worker         glw::GLenum internalformat;
3705*35238bceSAndroid Build Coastguard Worker         const glw::GLchar *internalformat_name;
3706*35238bceSAndroid Build Coastguard Worker         bool hasRedComponent;
3707*35238bceSAndroid Build Coastguard Worker         bool hasGreenComponent;
3708*35238bceSAndroid Build Coastguard Worker         bool hasBlueComponent;
3709*35238bceSAndroid Build Coastguard Worker         bool hasAlphaComponent;
3710*35238bceSAndroid Build Coastguard Worker         bool hasDepthComponent;
3711*35238bceSAndroid Build Coastguard Worker         bool hasStencilComponent;
3712*35238bceSAndroid Build Coastguard Worker         bool isColorIntegralFormat;
3713*35238bceSAndroid Build Coastguard Worker     } s_renderbuffer_internalformat_configuration[];
3714*35238bceSAndroid Build Coastguard Worker 
3715*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_renderbuffer_internalformat_configuration_count;
3716*35238bceSAndroid Build Coastguard Worker 
3717*35238bceSAndroid Build Coastguard Worker     static const glw::GLfloat s_reference_color[4];
3718*35238bceSAndroid Build Coastguard Worker     static const glw::GLint s_reference_color_integer[4];
3719*35238bceSAndroid Build Coastguard Worker     static const glw::GLfloat s_reference_depth;
3720*35238bceSAndroid Build Coastguard Worker     static const glw::GLint s_reference_stencil;
3721*35238bceSAndroid Build Coastguard Worker 
3722*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
3723*35238bceSAndroid Build Coastguard Worker     StorageTest(const StorageTest &other);
3724*35238bceSAndroid Build Coastguard Worker     StorageTest &operator=(const StorageTest &other);
3725*35238bceSAndroid Build Coastguard Worker 
3726*35238bceSAndroid Build Coastguard Worker     bool PrepareRenderbuffer(StorageTest::RenderbufferInternalFormatConfiguration format, glw::GLuint width,
3727*35238bceSAndroid Build Coastguard Worker                              glw::GLuint height);
3728*35238bceSAndroid Build Coastguard Worker     void Clear(bool isIntegralFormat);
3729*35238bceSAndroid Build Coastguard Worker     bool Check(StorageTest::RenderbufferInternalFormatConfiguration format, glw::GLuint width, glw::GLuint height);
3730*35238bceSAndroid Build Coastguard Worker     void Clean();
3731*35238bceSAndroid Build Coastguard Worker 
3732*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
3733*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo;
3734*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo;
3735*35238bceSAndroid Build Coastguard Worker };
3736*35238bceSAndroid Build Coastguard Worker /* StorageTest class */
3737*35238bceSAndroid Build Coastguard Worker 
3738*35238bceSAndroid Build Coastguard Worker /** Named Renderbuffer Storage Multisample
3739*35238bceSAndroid Build Coastguard Worker  *
3740*35238bceSAndroid Build Coastguard Worker  *      Create two renderbuffer objects. Prepare storage of the first one using
3741*35238bceSAndroid Build Coastguard Worker  *      NamedRenderbufferStorageMultisample function. Prepare storage of the
3742*35238bceSAndroid Build Coastguard Worker  *      second one using NamedRenderbufferStorage function.
3743*35238bceSAndroid Build Coastguard Worker  *
3744*35238bceSAndroid Build Coastguard Worker  *      Create two framebuffer objects. Attach multisampled renderbuffer to
3745*35238bceSAndroid Build Coastguard Worker  *      proper attachment points of the first framebuffer. Attach second
3746*35238bceSAndroid Build Coastguard Worker  *      renderbuffer to proper attachment points of the second framebuffer.
3747*35238bceSAndroid Build Coastguard Worker  *
3748*35238bceSAndroid Build Coastguard Worker  *      Clear framebuffer's renderbuffer attachment with reference value. Blit
3749*35238bceSAndroid Build Coastguard Worker  *      surface of the first framebuffer (multisampled renderbuffer) to the
3750*35238bceSAndroid Build Coastguard Worker  *      second framebuffer. Fetch the data from the second framebuffer using
3751*35238bceSAndroid Build Coastguard Worker  *      ReadPixels function. Compare the fetched values with the reference.
3752*35238bceSAndroid Build Coastguard Worker  *
3753*35238bceSAndroid Build Coastguard Worker  *      Release all objects.
3754*35238bceSAndroid Build Coastguard Worker  *
3755*35238bceSAndroid Build Coastguard Worker  *      Repeat the test for following internal formats:
3756*35238bceSAndroid Build Coastguard Worker  *
3757*35238bceSAndroid Build Coastguard Worker  *          R8, R16, RG8, RG16, RGB565, RGBA4, RGB5_A1, RGBA8, RGB10_A2,
3758*35238bceSAndroid Build Coastguard Worker  *          RGB10_A2UI, RGBA16, SRGB8_ALPHA8, R16F, RG16F, RGBA16F, R32F, RG32F,
3759*35238bceSAndroid Build Coastguard Worker  *          RGBA32F, R11F_G11F_B10F, R8I, R8UI, R16I, R16UI, R32I, R32UI, RG8I,
3760*35238bceSAndroid Build Coastguard Worker  *          RG8UI, RG16I, RG16UI, RG32I, RG32UI, RGBA8I, RGBA8UI, RGBA16I,
3761*35238bceSAndroid Build Coastguard Worker  *          RGBA16UI, RGBA32I, RGBA32UI, DEPTH_COMPONENT16, DEPTH_COMPONENT24,
3762*35238bceSAndroid Build Coastguard Worker  *          DEPTH_COMPONENT32F, DEPTH24_STENCIL8, DEPTH32F_STENCIL8 and
3763*35238bceSAndroid Build Coastguard Worker  *          STENCIL_INDEX8.
3764*35238bceSAndroid Build Coastguard Worker  *
3765*35238bceSAndroid Build Coastguard Worker  *      Repeat the test for following width and height:
3766*35238bceSAndroid Build Coastguard Worker  *          width = 1 and height = 1;
3767*35238bceSAndroid Build Coastguard Worker  *          width = value of MAX_RENDERBUFFER_SIZE and height = 1;
3768*35238bceSAndroid Build Coastguard Worker  *          width = 1 and height = value of MAX_RENDERBUFFER_SIZE.
3769*35238bceSAndroid Build Coastguard Worker  *
3770*35238bceSAndroid Build Coastguard Worker  *      Repeat the test for number of samples in range from 1 to value of
3771*35238bceSAndroid Build Coastguard Worker  *      MAX_INTEGER_SAMPLES for signed and unsigned integer internal formats or
3772*35238bceSAndroid Build Coastguard Worker  *      in range from 1 to value of MAX_SAMPLES for all other internal formats.
3773*35238bceSAndroid Build Coastguard Worker  */
3774*35238bceSAndroid Build Coastguard Worker class StorageMultisampleTest : public deqp::TestCase
3775*35238bceSAndroid Build Coastguard Worker {
3776*35238bceSAndroid Build Coastguard Worker public:
3777*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
3778*35238bceSAndroid Build Coastguard Worker     StorageMultisampleTest(deqp::Context &context);
3779*35238bceSAndroid Build Coastguard Worker 
3780*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
3781*35238bceSAndroid Build Coastguard Worker 
3782*35238bceSAndroid Build Coastguard Worker private:
3783*35238bceSAndroid Build Coastguard Worker     /* Private static variables. */
3784*35238bceSAndroid Build Coastguard Worker     static const struct RenderbufferInternalFormatConfiguration
3785*35238bceSAndroid Build Coastguard Worker     {
3786*35238bceSAndroid Build Coastguard Worker         glw::GLenum internalformat;
3787*35238bceSAndroid Build Coastguard Worker         const glw::GLchar *internalformat_name;
3788*35238bceSAndroid Build Coastguard Worker         bool hasRedComponent;
3789*35238bceSAndroid Build Coastguard Worker         bool hasGreenComponent;
3790*35238bceSAndroid Build Coastguard Worker         bool hasBlueComponent;
3791*35238bceSAndroid Build Coastguard Worker         bool hasAlphaComponent;
3792*35238bceSAndroid Build Coastguard Worker         bool hasDepthComponent;
3793*35238bceSAndroid Build Coastguard Worker         bool hasStencilComponent;
3794*35238bceSAndroid Build Coastguard Worker         bool isColorIntegralFormat;
3795*35238bceSAndroid Build Coastguard Worker     } s_renderbuffer_internalformat_configuration[];
3796*35238bceSAndroid Build Coastguard Worker 
3797*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_renderbuffer_internalformat_configuration_count;
3798*35238bceSAndroid Build Coastguard Worker 
3799*35238bceSAndroid Build Coastguard Worker     static const glw::GLfloat s_reference_color[4];
3800*35238bceSAndroid Build Coastguard Worker     static const glw::GLint s_reference_color_integer[4];
3801*35238bceSAndroid Build Coastguard Worker     static const glw::GLfloat s_reference_depth;
3802*35238bceSAndroid Build Coastguard Worker     static const glw::GLint s_reference_stencil;
3803*35238bceSAndroid Build Coastguard Worker 
3804*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
3805*35238bceSAndroid Build Coastguard Worker     StorageMultisampleTest(const StorageMultisampleTest &other);
3806*35238bceSAndroid Build Coastguard Worker     StorageMultisampleTest &operator=(const StorageMultisampleTest &other);
3807*35238bceSAndroid Build Coastguard Worker 
3808*35238bceSAndroid Build Coastguard Worker     bool PrepareRenderbuffer(StorageMultisampleTest::RenderbufferInternalFormatConfiguration format, glw::GLuint width,
3809*35238bceSAndroid Build Coastguard Worker                              glw::GLuint height, glw::GLsizei samples);
3810*35238bceSAndroid Build Coastguard Worker     void Bind(glw::GLenum target, glw::GLuint selector);
3811*35238bceSAndroid Build Coastguard Worker     void Blit(glw::GLuint width, glw::GLuint height);
3812*35238bceSAndroid Build Coastguard Worker     void Clear(bool isIntegralFormat);
3813*35238bceSAndroid Build Coastguard Worker     bool Check(StorageMultisampleTest::RenderbufferInternalFormatConfiguration format, glw::GLuint width,
3814*35238bceSAndroid Build Coastguard Worker                glw::GLuint height);
3815*35238bceSAndroid Build Coastguard Worker     void Clean();
3816*35238bceSAndroid Build Coastguard Worker     glw::GLint GetMaxConformantSampleCount(glw::GLenum target, glw::GLenum internalFormat);
3817*35238bceSAndroid Build Coastguard Worker 
3818*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
3819*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo[2];
3820*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo[2];
3821*35238bceSAndroid Build Coastguard Worker };
3822*35238bceSAndroid Build Coastguard Worker /* StorageMultisampleTest class */
3823*35238bceSAndroid Build Coastguard Worker 
3824*35238bceSAndroid Build Coastguard Worker /** Get Named Renderbuffer Parameter
3825*35238bceSAndroid Build Coastguard Worker  *
3826*35238bceSAndroid Build Coastguard Worker  *      Create named renderbuffer object with varying width = 1,
3827*35238bceSAndroid Build Coastguard Worker  *      height = 2, and varying internalformat.
3828*35238bceSAndroid Build Coastguard Worker  *
3829*35238bceSAndroid Build Coastguard Worker  *      For following parameter names:
3830*35238bceSAndroid Build Coastguard Worker  *       -  RENDERBUFFER_WIDTH,
3831*35238bceSAndroid Build Coastguard Worker  *       -  RENDERBUFFER_HEIGHT,
3832*35238bceSAndroid Build Coastguard Worker  *       -  RENDERBUFFER_INTERNAL_FORMAT,
3833*35238bceSAndroid Build Coastguard Worker  *       -  RENDERBUFFER_SAMPLES,
3834*35238bceSAndroid Build Coastguard Worker  *       -  RENDERBUFFER_RED_SIZE,
3835*35238bceSAndroid Build Coastguard Worker  *       -  RENDERBUFFER_GREEN_SIZE,
3836*35238bceSAndroid Build Coastguard Worker  *       -  RENDERBUFFER_BLUE_SIZE,
3837*35238bceSAndroid Build Coastguard Worker  *       -  RENDERBUFFER_ALPHA_SIZE,
3838*35238bceSAndroid Build Coastguard Worker  *       -  RENDERBUFFER_DEPTH_SIZE,
3839*35238bceSAndroid Build Coastguard Worker  *       -  RENDERBUFFER_STENCIL_SIZE
3840*35238bceSAndroid Build Coastguard Worker  *      query value using GetNamedRenderbufferParameteriv. Expect no error.
3841*35238bceSAndroid Build Coastguard Worker  *      Compare it with value returned in non-DSA way. Expect equality.
3842*35238bceSAndroid Build Coastguard Worker  *
3843*35238bceSAndroid Build Coastguard Worker  *      Repeat test for following internalformats:
3844*35238bceSAndroid Build Coastguard Worker  *       -  RGBA8,
3845*35238bceSAndroid Build Coastguard Worker  *       -  DEPTH_COMPONENT24,
3846*35238bceSAndroid Build Coastguard Worker  *       -  STENCIL_INDEX8,
3847*35238bceSAndroid Build Coastguard Worker  *       -  DEPTH24_STENCIL8.
3848*35238bceSAndroid Build Coastguard Worker  *
3849*35238bceSAndroid Build Coastguard Worker  *      Release objects.
3850*35238bceSAndroid Build Coastguard Worker  */
3851*35238bceSAndroid Build Coastguard Worker class GetParametersTest : public deqp::TestCase
3852*35238bceSAndroid Build Coastguard Worker {
3853*35238bceSAndroid Build Coastguard Worker public:
3854*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
3855*35238bceSAndroid Build Coastguard Worker     GetParametersTest(deqp::Context &context);
3856*35238bceSAndroid Build Coastguard Worker 
3857*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
3858*35238bceSAndroid Build Coastguard Worker 
3859*35238bceSAndroid Build Coastguard Worker private:
3860*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
3861*35238bceSAndroid Build Coastguard Worker     GetParametersTest(const GetParametersTest &other);
3862*35238bceSAndroid Build Coastguard Worker     GetParametersTest &operator=(const GetParametersTest &other);
3863*35238bceSAndroid Build Coastguard Worker 
3864*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
3865*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo;
3866*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo;
3867*35238bceSAndroid Build Coastguard Worker };
3868*35238bceSAndroid Build Coastguard Worker /* GetParametersTest class */
3869*35238bceSAndroid Build Coastguard Worker 
3870*35238bceSAndroid Build Coastguard Worker /** Create Renderbuffer Errors
3871*35238bceSAndroid Build Coastguard Worker  *
3872*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by CreateRenderbuffers if n is
3873*35238bceSAndroid Build Coastguard Worker  *      negative.
3874*35238bceSAndroid Build Coastguard Worker  */
3875*35238bceSAndroid Build Coastguard Worker class CreationErrorsTest : public deqp::TestCase
3876*35238bceSAndroid Build Coastguard Worker {
3877*35238bceSAndroid Build Coastguard Worker public:
3878*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
3879*35238bceSAndroid Build Coastguard Worker     CreationErrorsTest(deqp::Context &context);
3880*35238bceSAndroid Build Coastguard Worker 
3881*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
3882*35238bceSAndroid Build Coastguard Worker 
3883*35238bceSAndroid Build Coastguard Worker private:
3884*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
3885*35238bceSAndroid Build Coastguard Worker     CreationErrorsTest(const CreationErrorsTest &other);
3886*35238bceSAndroid Build Coastguard Worker     CreationErrorsTest &operator=(const CreationErrorsTest &other);
3887*35238bceSAndroid Build Coastguard Worker };
3888*35238bceSAndroid Build Coastguard Worker /* CreationErrorsTest class */
3889*35238bceSAndroid Build Coastguard Worker 
3890*35238bceSAndroid Build Coastguard Worker /** Named Renderbuffer Storage Errors
3891*35238bceSAndroid Build Coastguard Worker  *
3892*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by NamedRenderbufferStorage if
3893*35238bceSAndroid Build Coastguard Worker  *      renderbuffer is not the name of an existing renderbuffer object.
3894*35238bceSAndroid Build Coastguard Worker  *
3895*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by NamedRenderbufferStorage if
3896*35238bceSAndroid Build Coastguard Worker  *      either of width or height is negative, or greater than the value of
3897*35238bceSAndroid Build Coastguard Worker  *      MAX_RENDERBUFFER_SIZE.
3898*35238bceSAndroid Build Coastguard Worker  */
3899*35238bceSAndroid Build Coastguard Worker class StorageErrorsTest : public deqp::TestCase
3900*35238bceSAndroid Build Coastguard Worker {
3901*35238bceSAndroid Build Coastguard Worker public:
3902*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
3903*35238bceSAndroid Build Coastguard Worker     StorageErrorsTest(deqp::Context &context);
3904*35238bceSAndroid Build Coastguard Worker 
3905*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
3906*35238bceSAndroid Build Coastguard Worker 
3907*35238bceSAndroid Build Coastguard Worker private:
3908*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
3909*35238bceSAndroid Build Coastguard Worker     StorageErrorsTest(const StorageErrorsTest &other);
3910*35238bceSAndroid Build Coastguard Worker     StorageErrorsTest &operator=(const StorageErrorsTest &other);
3911*35238bceSAndroid Build Coastguard Worker 
3912*35238bceSAndroid Build Coastguard Worker     void PrepareObjects();
3913*35238bceSAndroid Build Coastguard Worker     bool ExpectError(glw::GLenum expected_error, const glw::GLchar *function, const glw::GLchar *conditions);
3914*35238bceSAndroid Build Coastguard Worker     void Clean();
3915*35238bceSAndroid Build Coastguard Worker 
3916*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
3917*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo_valid;
3918*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo_invalid;
3919*35238bceSAndroid Build Coastguard Worker     glw::GLenum m_internalformat_invalid;
3920*35238bceSAndroid Build Coastguard Worker };
3921*35238bceSAndroid Build Coastguard Worker /* StorageErrorsTest class */
3922*35238bceSAndroid Build Coastguard Worker 
3923*35238bceSAndroid Build Coastguard Worker /** Named Renderbuffer Storage Multisample Errors
3924*35238bceSAndroid Build Coastguard Worker  *
3925*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by
3926*35238bceSAndroid Build Coastguard Worker  *      NamedRenderbufferStorageMultisample function if renderbuffer is not the
3927*35238bceSAndroid Build Coastguard Worker  *      name of an existing renderbuffer object.
3928*35238bceSAndroid Build Coastguard Worker  *
3929*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by
3930*35238bceSAndroid Build Coastguard Worker  *      NamedRenderbufferStorageMultisample if samples is greater than
3931*35238bceSAndroid Build Coastguard Worker  *      MAX_SAMPLES.
3932*35238bceSAndroid Build Coastguard Worker  *
3933*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by
3934*35238bceSAndroid Build Coastguard Worker  *      NamedRenderbufferStorageMultisample if internalformat is not a
3935*35238bceSAndroid Build Coastguard Worker  *      color-renderable, depth-renderable, or stencil-renderable format.
3936*35238bceSAndroid Build Coastguard Worker  *
3937*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by
3938*35238bceSAndroid Build Coastguard Worker  *      NamedRenderbufferStorageMultisample if internalformat is a signed or
3939*35238bceSAndroid Build Coastguard Worker  *      unsigned integer format and samples is greater than the value of
3940*35238bceSAndroid Build Coastguard Worker  *      MAX_INTEGER_SAMPLES.
3941*35238bceSAndroid Build Coastguard Worker  *
3942*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by
3943*35238bceSAndroid Build Coastguard Worker  *      NamedRenderbufferStorageMultisample if either of width or height is
3944*35238bceSAndroid Build Coastguard Worker  *      negative, or greater than the value of GL_MAX_RENDERBUFFER_SIZE.
3945*35238bceSAndroid Build Coastguard Worker  */
3946*35238bceSAndroid Build Coastguard Worker class StorageMultisampleErrorsTest : public deqp::TestCase
3947*35238bceSAndroid Build Coastguard Worker {
3948*35238bceSAndroid Build Coastguard Worker public:
3949*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
3950*35238bceSAndroid Build Coastguard Worker     StorageMultisampleErrorsTest(deqp::Context &context);
3951*35238bceSAndroid Build Coastguard Worker 
3952*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
3953*35238bceSAndroid Build Coastguard Worker 
3954*35238bceSAndroid Build Coastguard Worker private:
3955*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
3956*35238bceSAndroid Build Coastguard Worker     StorageMultisampleErrorsTest(const StorageMultisampleErrorsTest &other);
3957*35238bceSAndroid Build Coastguard Worker     StorageMultisampleErrorsTest &operator=(const StorageMultisampleErrorsTest &other);
3958*35238bceSAndroid Build Coastguard Worker 
3959*35238bceSAndroid Build Coastguard Worker     void PrepareObjects();
3960*35238bceSAndroid Build Coastguard Worker     bool ExpectError(glw::GLenum expected_error, const glw::GLchar *function, const glw::GLchar *conditions);
3961*35238bceSAndroid Build Coastguard Worker     void Clean();
3962*35238bceSAndroid Build Coastguard Worker 
3963*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
3964*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo_valid;
3965*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo_invalid;
3966*35238bceSAndroid Build Coastguard Worker     glw::GLenum m_internalformat_invalid;
3967*35238bceSAndroid Build Coastguard Worker     glw::GLint m_max_samples;
3968*35238bceSAndroid Build Coastguard Worker     glw::GLint m_max_integer_samples;
3969*35238bceSAndroid Build Coastguard Worker };
3970*35238bceSAndroid Build Coastguard Worker /* StorageMultisampleErrorsTest class */
3971*35238bceSAndroid Build Coastguard Worker 
3972*35238bceSAndroid Build Coastguard Worker /** Get Named Renderbuffer Parameter Errors
3973*35238bceSAndroid Build Coastguard Worker  *
3974*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by
3975*35238bceSAndroid Build Coastguard Worker  *      GetNamedRenderbufferParameteriv if renderbuffer is not the name of an
3976*35238bceSAndroid Build Coastguard Worker  *      existing renderbuffer object.
3977*35238bceSAndroid Build Coastguard Worker  *
3978*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by GetNamedRenderbufferParameteriv
3979*35238bceSAndroid Build Coastguard Worker  *      if parameter name is not one of the accepted parameter names described
3980*35238bceSAndroid Build Coastguard Worker  *      in specification.
3981*35238bceSAndroid Build Coastguard Worker  */
3982*35238bceSAndroid Build Coastguard Worker class GetParameterErrorsTest : public deqp::TestCase
3983*35238bceSAndroid Build Coastguard Worker {
3984*35238bceSAndroid Build Coastguard Worker public:
3985*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
3986*35238bceSAndroid Build Coastguard Worker     GetParameterErrorsTest(deqp::Context &context);
3987*35238bceSAndroid Build Coastguard Worker 
3988*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
3989*35238bceSAndroid Build Coastguard Worker 
3990*35238bceSAndroid Build Coastguard Worker private:
3991*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
3992*35238bceSAndroid Build Coastguard Worker     GetParameterErrorsTest(const GetParameterErrorsTest &other);
3993*35238bceSAndroid Build Coastguard Worker     GetParameterErrorsTest &operator=(const GetParameterErrorsTest &other);
3994*35238bceSAndroid Build Coastguard Worker 
3995*35238bceSAndroid Build Coastguard Worker     void PrepareObjects();
3996*35238bceSAndroid Build Coastguard Worker     bool ExpectError(glw::GLenum expected_error, const glw::GLchar *function, const glw::GLchar *conditions);
3997*35238bceSAndroid Build Coastguard Worker     void Clean();
3998*35238bceSAndroid Build Coastguard Worker 
3999*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
4000*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo_valid;
4001*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo_invalid;
4002*35238bceSAndroid Build Coastguard Worker     glw::GLenum m_parameter_invalid;
4003*35238bceSAndroid Build Coastguard Worker };
4004*35238bceSAndroid Build Coastguard Worker /* GetParameterErrorsTest class */
4005*35238bceSAndroid Build Coastguard Worker } // namespace Renderbuffers
4006*35238bceSAndroid Build Coastguard Worker 
4007*35238bceSAndroid Build Coastguard Worker namespace VertexArrays
4008*35238bceSAndroid Build Coastguard Worker {
4009*35238bceSAndroid Build Coastguard Worker /** Vertex Array Object Creation
4010*35238bceSAndroid Build Coastguard Worker  *
4011*35238bceSAndroid Build Coastguard Worker  *     Create at least two vertex array objects using GenVertexArrays function.
4012*35238bceSAndroid Build Coastguard Worker  *     Check them without binding, using IsVertexArray function. Expect FALSE.
4013*35238bceSAndroid Build Coastguard Worker  *
4014*35238bceSAndroid Build Coastguard Worker  *     Create at least two vertex array objects using CreateVertexArrays
4015*35238bceSAndroid Build Coastguard Worker  *     function. Check them without binding, using IsVertexArray function.
4016*35238bceSAndroid Build Coastguard Worker  *     Expect TRUE.
4017*35238bceSAndroid Build Coastguard Worker  *
4018*35238bceSAndroid Build Coastguard Worker  *     Release objects.
4019*35238bceSAndroid Build Coastguard Worker  */
4020*35238bceSAndroid Build Coastguard Worker class CreationTest : public deqp::TestCase
4021*35238bceSAndroid Build Coastguard Worker {
4022*35238bceSAndroid Build Coastguard Worker public:
4023*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
4024*35238bceSAndroid Build Coastguard Worker     CreationTest(deqp::Context &context);
4025*35238bceSAndroid Build Coastguard Worker 
4026*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
4027*35238bceSAndroid Build Coastguard Worker 
4028*35238bceSAndroid Build Coastguard Worker private:
4029*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
4030*35238bceSAndroid Build Coastguard Worker     CreationTest(const CreationTest &other);
4031*35238bceSAndroid Build Coastguard Worker     CreationTest &operator=(const CreationTest &other);
4032*35238bceSAndroid Build Coastguard Worker };
4033*35238bceSAndroid Build Coastguard Worker /* CreationTest class */
4034*35238bceSAndroid Build Coastguard Worker 
4035*35238bceSAndroid Build Coastguard Worker /** Vertex Array Object Enable Disable Attributes
4036*35238bceSAndroid Build Coastguard Worker  *
4037*35238bceSAndroid Build Coastguard Worker  *      Prepare vertex shader with (MAX_VERTEX_ATTRIBS / 2) attribute variables.
4038*35238bceSAndroid Build Coastguard Worker  *      Vertex shader shall sum all input attribute variables and pass the sum
4039*35238bceSAndroid Build Coastguard Worker  *      to transform feedback varying. Build program in two versions:
4040*35238bceSAndroid Build Coastguard Worker  *          1) with attribute variable names bound to even attribute indexes;
4041*35238bceSAndroid Build Coastguard Worker  *          2) with attribute variable names bound to odd attribute indexes.
4042*35238bceSAndroid Build Coastguard Worker  *
4043*35238bceSAndroid Build Coastguard Worker  *      Prepare and bind vertex array object.
4044*35238bceSAndroid Build Coastguard Worker  *
4045*35238bceSAndroid Build Coastguard Worker  *      Prepare buffer object with MAX_VERTEX_ATTRIBS of consecutive numbers.
4046*35238bceSAndroid Build Coastguard Worker  *      Bound each of the numbers to separate index. Prepare second object for
4047*35238bceSAndroid Build Coastguard Worker  *      transform feedback result.
4048*35238bceSAndroid Build Coastguard Worker  *
4049*35238bceSAndroid Build Coastguard Worker  *      Unbind vertex array object.
4050*35238bceSAndroid Build Coastguard Worker  *
4051*35238bceSAndroid Build Coastguard Worker  *      Enable even attribute indexes using EnableVertexArrayAttrib. Expect no
4052*35238bceSAndroid Build Coastguard Worker  *      error.
4053*35238bceSAndroid Build Coastguard Worker  *
4054*35238bceSAndroid Build Coastguard Worker  *      Bind vertex array object.
4055*35238bceSAndroid Build Coastguard Worker  *
4056*35238bceSAndroid Build Coastguard Worker  *      Use first program. Draw single point using transform feedback. Expect
4057*35238bceSAndroid Build Coastguard Worker  *      sum of numbers at even positions in the input (reference) buffer object.
4058*35238bceSAndroid Build Coastguard Worker  *
4059*35238bceSAndroid Build Coastguard Worker  *      Unbind vertex array object.
4060*35238bceSAndroid Build Coastguard Worker  *
4061*35238bceSAndroid Build Coastguard Worker  *      Disable even attribute indexes using DisableVertexArrayAttrib. Expect no
4062*35238bceSAndroid Build Coastguard Worker  *      error.
4063*35238bceSAndroid Build Coastguard Worker  *
4064*35238bceSAndroid Build Coastguard Worker  *      Enable odd attribute indexes using EnableVertexArrayAttrib. Expect no
4065*35238bceSAndroid Build Coastguard Worker  *      error.
4066*35238bceSAndroid Build Coastguard Worker  *
4067*35238bceSAndroid Build Coastguard Worker  *      Bind vertex array object.
4068*35238bceSAndroid Build Coastguard Worker  *
4069*35238bceSAndroid Build Coastguard Worker  *      Use second program. Draw single point using transform feedback. Expect
4070*35238bceSAndroid Build Coastguard Worker  *      sum of numbers at odd positions in the input (reference) buffer object.
4071*35238bceSAndroid Build Coastguard Worker  *
4072*35238bceSAndroid Build Coastguard Worker  *      Unbind vertex array object.
4073*35238bceSAndroid Build Coastguard Worker  *
4074*35238bceSAndroid Build Coastguard Worker  *      Release all objects.
4075*35238bceSAndroid Build Coastguard Worker  */
4076*35238bceSAndroid Build Coastguard Worker class EnableDisableAttributesTest : public deqp::TestCase
4077*35238bceSAndroid Build Coastguard Worker {
4078*35238bceSAndroid Build Coastguard Worker public:
4079*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
4080*35238bceSAndroid Build Coastguard Worker     EnableDisableAttributesTest(deqp::Context &context);
4081*35238bceSAndroid Build Coastguard Worker 
4082*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
4083*35238bceSAndroid Build Coastguard Worker 
4084*35238bceSAndroid Build Coastguard Worker private:
4085*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
4086*35238bceSAndroid Build Coastguard Worker     EnableDisableAttributesTest(const EnableDisableAttributesTest &other);
4087*35238bceSAndroid Build Coastguard Worker     EnableDisableAttributesTest &operator=(const EnableDisableAttributesTest &other);
4088*35238bceSAndroid Build Coastguard Worker 
4089*35238bceSAndroid Build Coastguard Worker     glw::GLuint PrepareProgram(const bool bind_even_or_odd);
4090*35238bceSAndroid Build Coastguard Worker     glw::GLuint BuildProgram(const char *vertex_shader, const bool bind_even_or_odd);
4091*35238bceSAndroid Build Coastguard Worker     void PrepareVAO();
4092*35238bceSAndroid Build Coastguard Worker     void PrepareXFB();
4093*35238bceSAndroid Build Coastguard Worker     bool DrawAndCheck(bool bind_even_or_odd);
4094*35238bceSAndroid Build Coastguard Worker     bool TurnOnAttributes(bool enable_even, bool enable_odd);
4095*35238bceSAndroid Build Coastguard Worker     void Clean();
4096*35238bceSAndroid Build Coastguard Worker 
4097*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
4098*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_po_even;
4099*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_po_odd;
4100*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_vao;
4101*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_bo;
4102*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_bo_xfb;
4103*35238bceSAndroid Build Coastguard Worker     glw::GLint m_max_attributes;
4104*35238bceSAndroid Build Coastguard Worker 
4105*35238bceSAndroid Build Coastguard Worker     /* Private static constants. */
4106*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar s_vertex_shader_template[];
4107*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar s_fragment_shader[];
4108*35238bceSAndroid Build Coastguard Worker };
4109*35238bceSAndroid Build Coastguard Worker /* EnableDisableAttributesTest class */
4110*35238bceSAndroid Build Coastguard Worker 
4111*35238bceSAndroid Build Coastguard Worker /** Vertex Array Object Element Buffer
4112*35238bceSAndroid Build Coastguard Worker  *
4113*35238bceSAndroid Build Coastguard Worker  *      Prepare GLSL program which passes input attribute to transform feedback
4114*35238bceSAndroid Build Coastguard Worker  *      varying.
4115*35238bceSAndroid Build Coastguard Worker  *
4116*35238bceSAndroid Build Coastguard Worker  *      Create and bind vertex array object.
4117*35238bceSAndroid Build Coastguard Worker  *
4118*35238bceSAndroid Build Coastguard Worker  *      Prepare buffer object with integer data {2, 1, 0}. Set this buffer as an
4119*35238bceSAndroid Build Coastguard Worker  *      input attribute. Use non-DSA functions.
4120*35238bceSAndroid Build Coastguard Worker  *
4121*35238bceSAndroid Build Coastguard Worker  *      Unbind vertex array object.
4122*35238bceSAndroid Build Coastguard Worker  *
4123*35238bceSAndroid Build Coastguard Worker  *      Prepare buffer object with integer data {2, 1, 0}. Set this buffer as an
4124*35238bceSAndroid Build Coastguard Worker  *      element buffer using VertexArrayElementBuffer function.
4125*35238bceSAndroid Build Coastguard Worker  *
4126*35238bceSAndroid Build Coastguard Worker  *      Bind vertex array object.
4127*35238bceSAndroid Build Coastguard Worker  *
4128*35238bceSAndroid Build Coastguard Worker  *      Use the program. Draw three points using transform feedback. Expect
4129*35238bceSAndroid Build Coastguard Worker  *      result equal to {0, 1, 2}.
4130*35238bceSAndroid Build Coastguard Worker  *
4131*35238bceSAndroid Build Coastguard Worker  *      Release all objects.
4132*35238bceSAndroid Build Coastguard Worker  */
4133*35238bceSAndroid Build Coastguard Worker class ElementBufferTest : public deqp::TestCase
4134*35238bceSAndroid Build Coastguard Worker {
4135*35238bceSAndroid Build Coastguard Worker public:
4136*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
4137*35238bceSAndroid Build Coastguard Worker     ElementBufferTest(deqp::Context &context);
4138*35238bceSAndroid Build Coastguard Worker 
4139*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
4140*35238bceSAndroid Build Coastguard Worker 
4141*35238bceSAndroid Build Coastguard Worker private:
4142*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
4143*35238bceSAndroid Build Coastguard Worker     ElementBufferTest(const ElementBufferTest &other);
4144*35238bceSAndroid Build Coastguard Worker     ElementBufferTest &operator=(const ElementBufferTest &other);
4145*35238bceSAndroid Build Coastguard Worker 
4146*35238bceSAndroid Build Coastguard Worker     void PrepareProgram();
4147*35238bceSAndroid Build Coastguard Worker     bool PrepareVAO();
4148*35238bceSAndroid Build Coastguard Worker     void PrepareXFB();
4149*35238bceSAndroid Build Coastguard Worker     bool DrawAndCheck();
4150*35238bceSAndroid Build Coastguard Worker     void Clean();
4151*35238bceSAndroid Build Coastguard Worker 
4152*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
4153*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_po;
4154*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_vao;
4155*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_bo_array;
4156*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_bo_elements;
4157*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_bo_xfb;
4158*35238bceSAndroid Build Coastguard Worker 
4159*35238bceSAndroid Build Coastguard Worker     /* Private static constants. */
4160*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar s_vertex_shader[];
4161*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar s_fragment_shader[];
4162*35238bceSAndroid Build Coastguard Worker };
4163*35238bceSAndroid Build Coastguard Worker /* ElementBufferTest class */
4164*35238bceSAndroid Build Coastguard Worker 
4165*35238bceSAndroid Build Coastguard Worker /** Vertex Array Object Vertex Buffer and Buffers
4166*35238bceSAndroid Build Coastguard Worker  *
4167*35238bceSAndroid Build Coastguard Worker  *      Prepare GLSL program which passes sum of three input integer attributes
4168*35238bceSAndroid Build Coastguard Worker  *      to the transform feedback varying.
4169*35238bceSAndroid Build Coastguard Worker  *
4170*35238bceSAndroid Build Coastguard Worker  *      Prepare two vertex buffer objects. Setup first buffer with data {0, 1,
4171*35238bceSAndroid Build Coastguard Worker  *      2, 3}.
4172*35238bceSAndroid Build Coastguard Worker  *      Setup second buffer with data {4, 5}.
4173*35238bceSAndroid Build Coastguard Worker  *
4174*35238bceSAndroid Build Coastguard Worker  *      Create vertex array object. Setup three vertex attributes. Set first
4175*35238bceSAndroid Build Coastguard Worker  *      buffer object as an input attribute 0 and 1 in interleaved way using
4176*35238bceSAndroid Build Coastguard Worker  *      VertexArrayVertexBuffer function. Set second buffer object as an input
4177*35238bceSAndroid Build Coastguard Worker  *      attribute 2 using VertexArrayVertexBuffer function.
4178*35238bceSAndroid Build Coastguard Worker  *
4179*35238bceSAndroid Build Coastguard Worker  *      Use program. Draw 2 points using transform feedback. Query results.
4180*35238bceSAndroid Build Coastguard Worker  *      Expect two values {0+2+4, 1+3+5}.
4181*35238bceSAndroid Build Coastguard Worker  *
4182*35238bceSAndroid Build Coastguard Worker  *      Release all data.
4183*35238bceSAndroid Build Coastguard Worker  *
4184*35238bceSAndroid Build Coastguard Worker  *      Repeat the test using VertexArrayVertexBuffers function instead of
4185*35238bceSAndroid Build Coastguard Worker  *      VertexArrayVertexBuffer.
4186*35238bceSAndroid Build Coastguard Worker  */
4187*35238bceSAndroid Build Coastguard Worker class VertexBuffersTest : public deqp::TestCase
4188*35238bceSAndroid Build Coastguard Worker {
4189*35238bceSAndroid Build Coastguard Worker public:
4190*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
4191*35238bceSAndroid Build Coastguard Worker     VertexBuffersTest(deqp::Context &context);
4192*35238bceSAndroid Build Coastguard Worker 
4193*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
4194*35238bceSAndroid Build Coastguard Worker 
4195*35238bceSAndroid Build Coastguard Worker private:
4196*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
4197*35238bceSAndroid Build Coastguard Worker     VertexBuffersTest(const VertexBuffersTest &other);
4198*35238bceSAndroid Build Coastguard Worker     VertexBuffersTest &operator=(const VertexBuffersTest &other);
4199*35238bceSAndroid Build Coastguard Worker 
4200*35238bceSAndroid Build Coastguard Worker     void PrepareProgram();
4201*35238bceSAndroid Build Coastguard Worker     bool PrepareVAO(bool use_multiple_buffers_function);
4202*35238bceSAndroid Build Coastguard Worker     void PrepareXFB();
4203*35238bceSAndroid Build Coastguard Worker     bool DrawAndCheck();
4204*35238bceSAndroid Build Coastguard Worker     void Clean();
4205*35238bceSAndroid Build Coastguard Worker 
4206*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
4207*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_po;
4208*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_vao;
4209*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_bo_array_0;
4210*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_bo_array_1;
4211*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_bo_xfb;
4212*35238bceSAndroid Build Coastguard Worker 
4213*35238bceSAndroid Build Coastguard Worker     /* Private static constants. */
4214*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar s_vertex_shader[];
4215*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar s_fragment_shader[];
4216*35238bceSAndroid Build Coastguard Worker };
4217*35238bceSAndroid Build Coastguard Worker /* VertexBuffersTest class */
4218*35238bceSAndroid Build Coastguard Worker 
4219*35238bceSAndroid Build Coastguard Worker /** Vertex Array Object Attribute Format
4220*35238bceSAndroid Build Coastguard Worker  *
4221*35238bceSAndroid Build Coastguard Worker  *      Prepare GLSL program which passes sum of two input attributes to the
4222*35238bceSAndroid Build Coastguard Worker  *      transform feedback varying.
4223*35238bceSAndroid Build Coastguard Worker  *
4224*35238bceSAndroid Build Coastguard Worker  *      Create vertex array object.
4225*35238bceSAndroid Build Coastguard Worker  *
4226*35238bceSAndroid Build Coastguard Worker  *      Prepare vertex buffer object with reference data of two interleaved
4227*35238bceSAndroid Build Coastguard Worker  *      arrays. Setup it as input interleaved attributes.
4228*35238bceSAndroid Build Coastguard Worker  *
4229*35238bceSAndroid Build Coastguard Worker  *      Setup two consecutive attributes using VertexArrayAttribFormat function.
4230*35238bceSAndroid Build Coastguard Worker  *
4231*35238bceSAndroid Build Coastguard Worker  *      Use program. Draw 2 points using transform feedback. Query results.
4232*35238bceSAndroid Build Coastguard Worker  *      Expect sum of adequate reference values.
4233*35238bceSAndroid Build Coastguard Worker  *
4234*35238bceSAndroid Build Coastguard Worker  *      Release all data.
4235*35238bceSAndroid Build Coastguard Worker  *
4236*35238bceSAndroid Build Coastguard Worker  *      Repeat the test using VertexArrayAttribIFormat VertexArrayAttribLFormat
4237*35238bceSAndroid Build Coastguard Worker  *      function instead of VertexArrayAttribFormat.
4238*35238bceSAndroid Build Coastguard Worker  *
4239*35238bceSAndroid Build Coastguard Worker  *      Repeat the test using size 1, 2, 3, and 4 (if possible by type).
4240*35238bceSAndroid Build Coastguard Worker  *
4241*35238bceSAndroid Build Coastguard Worker  *      Repeat the test using type BYTE, SHORT, INT, FLOAT, DOUBLE,
4242*35238bceSAndroid Build Coastguard Worker  *      UNSIGNED_BYTE, UNSIGNED_SHORT, UNSIGNED_INT.
4243*35238bceSAndroid Build Coastguard Worker  *
4244*35238bceSAndroid Build Coastguard Worker  *      For test with VertexArrayAttribFormat function repeat for normalized and
4245*35238bceSAndroid Build Coastguard Worker  *      not normalized values.
4246*35238bceSAndroid Build Coastguard Worker  */
4247*35238bceSAndroid Build Coastguard Worker class AttributeFormatTest : public deqp::TestCase
4248*35238bceSAndroid Build Coastguard Worker {
4249*35238bceSAndroid Build Coastguard Worker public:
4250*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
4251*35238bceSAndroid Build Coastguard Worker     AttributeFormatTest(deqp::Context &context);
4252*35238bceSAndroid Build Coastguard Worker 
4253*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
4254*35238bceSAndroid Build Coastguard Worker 
4255*35238bceSAndroid Build Coastguard Worker private:
4256*35238bceSAndroid Build Coastguard Worker     /* Private state enumerations. */
4257*35238bceSAndroid Build Coastguard Worker     enum AtributeFormatFunctionType
4258*35238bceSAndroid Build Coastguard Worker     {
4259*35238bceSAndroid Build Coastguard Worker         ATTRIBUTE_FORMAT_FUNCTION_FLOAT,
4260*35238bceSAndroid Build Coastguard Worker         ATTRIBUTE_FORMAT_FUNCTION_DOUBLE,
4261*35238bceSAndroid Build Coastguard Worker         ATTRIBUTE_FORMAT_FUNCTION_INTEGER,
4262*35238bceSAndroid Build Coastguard Worker         ATTRIBUTE_FORMAT_FUNCTION_COUNT /* Must be last */
4263*35238bceSAndroid Build Coastguard Worker     };
4264*35238bceSAndroid Build Coastguard Worker 
4265*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
4266*35238bceSAndroid Build Coastguard Worker     AttributeFormatTest(const AttributeFormatTest &other);
4267*35238bceSAndroid Build Coastguard Worker     AttributeFormatTest &operator=(const AttributeFormatTest &other);
4268*35238bceSAndroid Build Coastguard Worker 
4269*35238bceSAndroid Build Coastguard Worker     template <typename T>
4270*35238bceSAndroid Build Coastguard Worker     bool compare(T a, T b);
4271*35238bceSAndroid Build Coastguard Worker 
4272*35238bceSAndroid Build Coastguard Worker     void PrepareProgram(glw::GLint size, AtributeFormatFunctionType function_selector);
4273*35238bceSAndroid Build Coastguard Worker 
4274*35238bceSAndroid Build Coastguard Worker     template <typename T>
4275*35238bceSAndroid Build Coastguard Worker     glw::GLdouble NormalizationScaleFactor();
4276*35238bceSAndroid Build Coastguard Worker 
4277*35238bceSAndroid Build Coastguard Worker     template <typename T>
4278*35238bceSAndroid Build Coastguard Worker     bool PrepareVAO(glw::GLint size, glw::GLenum type_gl_name, bool normalized,
4279*35238bceSAndroid Build Coastguard Worker                     AtributeFormatFunctionType function_selector);
4280*35238bceSAndroid Build Coastguard Worker 
4281*35238bceSAndroid Build Coastguard Worker     void PrepareXFB();
4282*35238bceSAndroid Build Coastguard Worker 
4283*35238bceSAndroid Build Coastguard Worker     template <typename T>
4284*35238bceSAndroid Build Coastguard Worker     bool DrawAndCheck(glw::GLint size, bool normalized);
4285*35238bceSAndroid Build Coastguard Worker 
4286*35238bceSAndroid Build Coastguard Worker     void CleanVAO();
4287*35238bceSAndroid Build Coastguard Worker     void CleanProgram();
4288*35238bceSAndroid Build Coastguard Worker     void CleanXFB();
4289*35238bceSAndroid Build Coastguard Worker 
4290*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
4291*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_po;
4292*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_vao;
4293*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_bo_array;
4294*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_bo_xfb;
4295*35238bceSAndroid Build Coastguard Worker 
4296*35238bceSAndroid Build Coastguard Worker     /* Private static constants. */
4297*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_vertex_shader_head;
4298*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_vertex_shader_body;
4299*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_vertex_shader_declaration[ATTRIBUTE_FORMAT_FUNCTION_COUNT][4 /* sizes count */];
4300*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader;
4301*35238bceSAndroid Build Coastguard Worker };
4302*35238bceSAndroid Build Coastguard Worker /* AttributeFormatTest class */
4303*35238bceSAndroid Build Coastguard Worker 
4304*35238bceSAndroid Build Coastguard Worker /** Vertex Array Attribute Binding
4305*35238bceSAndroid Build Coastguard Worker  *
4306*35238bceSAndroid Build Coastguard Worker  *      Prepare GLSL program which passes two integer input attributes to the
4307*35238bceSAndroid Build Coastguard Worker  *      two-component transform feedback varying vector. Bind first attribute
4308*35238bceSAndroid Build Coastguard Worker  *      to attribute index 0. Bind second attribute to attribute index 1.
4309*35238bceSAndroid Build Coastguard Worker  *
4310*35238bceSAndroid Build Coastguard Worker  *      Create vertex array object.
4311*35238bceSAndroid Build Coastguard Worker  *
4312*35238bceSAndroid Build Coastguard Worker  *      Prepare vertex buffer object. Setup the buffer with data {1, 0}.
4313*35238bceSAndroid Build Coastguard Worker  *      Setup two integer attribute pointers in consecutive way.
4314*35238bceSAndroid Build Coastguard Worker  *
4315*35238bceSAndroid Build Coastguard Worker  *      Using VertexArrayAttribBinding function, set up binding index 0 to the
4316*35238bceSAndroid Build Coastguard Worker  *      attribute index 1. Using VertexArrayAttribBinding function, set up
4317*35238bceSAndroid Build Coastguard Worker  *      binding index 1 to the attribute index 0.
4318*35238bceSAndroid Build Coastguard Worker  *
4319*35238bceSAndroid Build Coastguard Worker  *      Prepare transform feedback buffer object.
4320*35238bceSAndroid Build Coastguard Worker  *
4321*35238bceSAndroid Build Coastguard Worker  *      Release all data.
4322*35238bceSAndroid Build Coastguard Worker  */
4323*35238bceSAndroid Build Coastguard Worker class AttributeBindingTest : public deqp::TestCase
4324*35238bceSAndroid Build Coastguard Worker {
4325*35238bceSAndroid Build Coastguard Worker public:
4326*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
4327*35238bceSAndroid Build Coastguard Worker     AttributeBindingTest(deqp::Context &context);
4328*35238bceSAndroid Build Coastguard Worker 
4329*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
4330*35238bceSAndroid Build Coastguard Worker 
4331*35238bceSAndroid Build Coastguard Worker private:
4332*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
4333*35238bceSAndroid Build Coastguard Worker     AttributeBindingTest(const AttributeBindingTest &other);
4334*35238bceSAndroid Build Coastguard Worker     AttributeBindingTest &operator=(const AttributeBindingTest &other);
4335*35238bceSAndroid Build Coastguard Worker 
4336*35238bceSAndroid Build Coastguard Worker     void PrepareProgram();
4337*35238bceSAndroid Build Coastguard Worker     bool PrepareVAO();
4338*35238bceSAndroid Build Coastguard Worker     void PrepareXFB();
4339*35238bceSAndroid Build Coastguard Worker     bool DrawAndCheck();
4340*35238bceSAndroid Build Coastguard Worker     void Clean();
4341*35238bceSAndroid Build Coastguard Worker 
4342*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
4343*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_po;
4344*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_vao;
4345*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_bo_array;
4346*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_bo_xfb;
4347*35238bceSAndroid Build Coastguard Worker 
4348*35238bceSAndroid Build Coastguard Worker     /* Private static constants. */
4349*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar s_vertex_shader[];
4350*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar s_fragment_shader[];
4351*35238bceSAndroid Build Coastguard Worker };
4352*35238bceSAndroid Build Coastguard Worker /* AttributeBindingTest class */
4353*35238bceSAndroid Build Coastguard Worker 
4354*35238bceSAndroid Build Coastguard Worker class AttributeBindingDivisorTest : public deqp::TestCase
4355*35238bceSAndroid Build Coastguard Worker {
4356*35238bceSAndroid Build Coastguard Worker public:
4357*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
4358*35238bceSAndroid Build Coastguard Worker     AttributeBindingDivisorTest(deqp::Context &context);
4359*35238bceSAndroid Build Coastguard Worker 
4360*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
4361*35238bceSAndroid Build Coastguard Worker 
4362*35238bceSAndroid Build Coastguard Worker private:
4363*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
4364*35238bceSAndroid Build Coastguard Worker     AttributeBindingDivisorTest(const AttributeBindingDivisorTest &other);
4365*35238bceSAndroid Build Coastguard Worker     AttributeBindingDivisorTest &operator=(const AttributeBindingDivisorTest &other);
4366*35238bceSAndroid Build Coastguard Worker 
4367*35238bceSAndroid Build Coastguard Worker     void PrepareProgram();
4368*35238bceSAndroid Build Coastguard Worker     void PrepareVAO();
4369*35238bceSAndroid Build Coastguard Worker     void PrepareXFB();
4370*35238bceSAndroid Build Coastguard Worker     void Draw(glw::GLuint number_of_points, glw::GLuint number_of_instances);
4371*35238bceSAndroid Build Coastguard Worker     bool SetDivisor(glw::GLuint divisor);
4372*35238bceSAndroid Build Coastguard Worker     bool CheckXFB(const glw::GLuint count, const glw::GLint expected[], const glw::GLchar *log_message);
4373*35238bceSAndroid Build Coastguard Worker     void Clean();
4374*35238bceSAndroid Build Coastguard Worker 
4375*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
4376*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_po;
4377*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_vao;
4378*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_bo_array;
4379*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_bo_xfb;
4380*35238bceSAndroid Build Coastguard Worker 
4381*35238bceSAndroid Build Coastguard Worker     /* Private static constants. */
4382*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar s_vertex_shader[];
4383*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar s_fragment_shader[];
4384*35238bceSAndroid Build Coastguard Worker };
4385*35238bceSAndroid Build Coastguard Worker /* AttributeBindingDivisorTest class */
4386*35238bceSAndroid Build Coastguard Worker 
4387*35238bceSAndroid Build Coastguard Worker /* Get Vertex Array
4388*35238bceSAndroid Build Coastguard Worker  *
4389*35238bceSAndroid Build Coastguard Worker  *      Create vertex array object.
4390*35238bceSAndroid Build Coastguard Worker  *
4391*35238bceSAndroid Build Coastguard Worker  *      Create buffer object. Set this buffer as an element buffer of the vertex
4392*35238bceSAndroid Build Coastguard Worker  *      array object.
4393*35238bceSAndroid Build Coastguard Worker  *
4394*35238bceSAndroid Build Coastguard Worker  *      Query ELEMENT_ARRAY_BUFFER_BINDING using GetVertexArrayiv. Expect buffer
4395*35238bceSAndroid Build Coastguard Worker  *      ID.
4396*35238bceSAndroid Build Coastguard Worker  *
4397*35238bceSAndroid Build Coastguard Worker  *      Release all objects.
4398*35238bceSAndroid Build Coastguard Worker  */
4399*35238bceSAndroid Build Coastguard Worker class GetVertexArrayTest : public deqp::TestCase
4400*35238bceSAndroid Build Coastguard Worker {
4401*35238bceSAndroid Build Coastguard Worker public:
4402*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
4403*35238bceSAndroid Build Coastguard Worker     GetVertexArrayTest(deqp::Context &context);
4404*35238bceSAndroid Build Coastguard Worker 
4405*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
4406*35238bceSAndroid Build Coastguard Worker 
4407*35238bceSAndroid Build Coastguard Worker private:
4408*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
4409*35238bceSAndroid Build Coastguard Worker     GetVertexArrayTest(const GetVertexArrayTest &other);
4410*35238bceSAndroid Build Coastguard Worker     GetVertexArrayTest &operator=(const GetVertexArrayTest &other);
4411*35238bceSAndroid Build Coastguard Worker };
4412*35238bceSAndroid Build Coastguard Worker /* GetVertexArrayTest class */
4413*35238bceSAndroid Build Coastguard Worker 
4414*35238bceSAndroid Build Coastguard Worker /** Get Vertex Array Indexed
4415*35238bceSAndroid Build Coastguard Worker  *
4416*35238bceSAndroid Build Coastguard Worker  *      Create vertex array object.
4417*35238bceSAndroid Build Coastguard Worker  *
4418*35238bceSAndroid Build Coastguard Worker  *      Enable attribute indexes 0, 1, 2 and 3.
4419*35238bceSAndroid Build Coastguard Worker  *
4420*35238bceSAndroid Build Coastguard Worker  *      Create 4 buffer objects. Set these buffer as attribute arrays:
4421*35238bceSAndroid Build Coastguard Worker  *          -  attribute 0 with size 1, type BYTE, normalized, stride 0, offset 0,
4422*35238bceSAndroid Build Coastguard Worker  *          relative offset 0, binding divisor to 3;
4423*35238bceSAndroid Build Coastguard Worker  *          -  integer attribute 1 with size 2, type SHORT, stride 2, offset 2,
4424*35238bceSAndroid Build Coastguard Worker  *          relative offset 0, binding divisor to 2;
4425*35238bceSAndroid Build Coastguard Worker  *          -  attribute 2 with size 3, type FLOAT, not normalized, stride 0,
4426*35238bceSAndroid Build Coastguard Worker  *          offset 8, relative offset 4, binding divisor to 1;
4427*35238bceSAndroid Build Coastguard Worker  *          -  attribute 3 with size 4, type UNSIGNED_INT_2_10_10_10_REV, not
4428*35238bceSAndroid Build Coastguard Worker  *          normalized, stride 8, offset 4, relative offset 0,
4429*35238bceSAndroid Build Coastguard Worker  *          binding divisor to 0.
4430*35238bceSAndroid Build Coastguard Worker  *
4431*35238bceSAndroid Build Coastguard Worker  *      Query VERTEX_ATTRIB_ARRAY_ENABLED using GetVertexArrayIndexediv. Expect
4432*35238bceSAndroid Build Coastguard Worker  *      TRUE for consecutive indexes 0-3 and FALSE for index 4.
4433*35238bceSAndroid Build Coastguard Worker  *
4434*35238bceSAndroid Build Coastguard Worker  *      Query VERTEX_ATTRIB_ARRAY_SIZE using GetVertexArrayIndexediv. Expect
4435*35238bceSAndroid Build Coastguard Worker  *      1, 2, 3, 4 for consecutive indexes.
4436*35238bceSAndroid Build Coastguard Worker  *
4437*35238bceSAndroid Build Coastguard Worker  *      Query VERTEX_ATTRIB_ARRAY_STRIDE using GetVertexArrayIndexediv. Expect
4438*35238bceSAndroid Build Coastguard Worker  *      0, 2, 0, 8 for consecutive indexes.
4439*35238bceSAndroid Build Coastguard Worker  *
4440*35238bceSAndroid Build Coastguard Worker  *      Query VERTEX_ATTRIB_ARRAY_TYPE using GetVertexArrayIndexediv. Expect
4441*35238bceSAndroid Build Coastguard Worker  *      BYTE, SHORT, FLOAT, UNSIGNED_INT_2_10_10_10_REV for consecutive indexes.
4442*35238bceSAndroid Build Coastguard Worker  *
4443*35238bceSAndroid Build Coastguard Worker  *      Query VERTEX_ATTRIB_ARRAY_NORMALIZED using GetVertexArrayIndexediv.
4444*35238bceSAndroid Build Coastguard Worker  *      Expect true, false, false, false for consecutive indexes.
4445*35238bceSAndroid Build Coastguard Worker  *
4446*35238bceSAndroid Build Coastguard Worker  *      Query VERTEX_ATTRIB_ARRAY_INTEGER using GetVertexArrayIndexediv.
4447*35238bceSAndroid Build Coastguard Worker  *      Expect true, true, false, true for consecutive indexes.
4448*35238bceSAndroid Build Coastguard Worker  *
4449*35238bceSAndroid Build Coastguard Worker  *      Query VERTEX_ATTRIB_ARRAY_LONG using GetVertexArrayIndexediv. Expect
4450*35238bceSAndroid Build Coastguard Worker  *      false for consecutive indexes.
4451*35238bceSAndroid Build Coastguard Worker  *
4452*35238bceSAndroid Build Coastguard Worker  *      Query VERTEX_ATTRIB_ARRAY_DIVISOR using GetVertexArrayIndexediv. Expect
4453*35238bceSAndroid Build Coastguard Worker  *      3, 2, 1, 0 for consecutive indexes.
4454*35238bceSAndroid Build Coastguard Worker  *
4455*35238bceSAndroid Build Coastguard Worker  *      Query VERTEX_ATTRIB_RELATIVE_OFFSET using GetVertexArrayIndexediv.
4456*35238bceSAndroid Build Coastguard Worker  *      Expect 0, 0, 4, 0 for consecutive indexes.
4457*35238bceSAndroid Build Coastguard Worker  *
4458*35238bceSAndroid Build Coastguard Worker  *      Query VERTEX_BINDING_OFFSET using GetVertexArrayIndexed64iv. Expect 0,
4459*35238bceSAndroid Build Coastguard Worker  *      2, 8, 4 for consecutive indexes.
4460*35238bceSAndroid Build Coastguard Worker  *
4461*35238bceSAndroid Build Coastguard Worker  *      Release all objects.
4462*35238bceSAndroid Build Coastguard Worker  */
4463*35238bceSAndroid Build Coastguard Worker class GetVertexArrayIndexedTest : public deqp::TestCase
4464*35238bceSAndroid Build Coastguard Worker {
4465*35238bceSAndroid Build Coastguard Worker public:
4466*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
4467*35238bceSAndroid Build Coastguard Worker     GetVertexArrayIndexedTest(deqp::Context &context);
4468*35238bceSAndroid Build Coastguard Worker 
4469*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
4470*35238bceSAndroid Build Coastguard Worker 
4471*35238bceSAndroid Build Coastguard Worker private:
4472*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
4473*35238bceSAndroid Build Coastguard Worker     GetVertexArrayIndexedTest(const GetVertexArrayIndexedTest &other);
4474*35238bceSAndroid Build Coastguard Worker     GetVertexArrayIndexedTest &operator=(const GetVertexArrayIndexedTest &other);
4475*35238bceSAndroid Build Coastguard Worker 
4476*35238bceSAndroid Build Coastguard Worker     void PrepareVAO();
4477*35238bceSAndroid Build Coastguard Worker     bool Check(const glw::GLenum pname, const glw::GLuint index, const glw::GLint expected);
4478*35238bceSAndroid Build Coastguard Worker     bool Check64(const glw::GLenum pname, const glw::GLuint index, const glw::GLint64 expected);
4479*35238bceSAndroid Build Coastguard Worker 
4480*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
4481*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_vao;
4482*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_bo[4];
4483*35238bceSAndroid Build Coastguard Worker };
4484*35238bceSAndroid Build Coastguard Worker /* GetVertexArrayIndexedTest class */
4485*35238bceSAndroid Build Coastguard Worker 
4486*35238bceSAndroid Build Coastguard Worker /** Vertex Array Defaults
4487*35238bceSAndroid Build Coastguard Worker  *
4488*35238bceSAndroid Build Coastguard Worker  *      Create empty vertex array object using CreateVertexArrays function.
4489*35238bceSAndroid Build Coastguard Worker  *
4490*35238bceSAndroid Build Coastguard Worker  *      Check that parameter VERTEX_ATTRIB_ARRAY_ENABLED for all possible
4491*35238bceSAndroid Build Coastguard Worker  *      attributes is equal to value FALSE.
4492*35238bceSAndroid Build Coastguard Worker  *
4493*35238bceSAndroid Build Coastguard Worker  *      Check that parameter VERTEX_ATTRIB_ARRAY_SIZE for all possible
4494*35238bceSAndroid Build Coastguard Worker  *      attributes is equal to value 4.
4495*35238bceSAndroid Build Coastguard Worker  *
4496*35238bceSAndroid Build Coastguard Worker  *      Check that parameter VERTEX_ATTRIB_ARRAY_STRIDE for all possible
4497*35238bceSAndroid Build Coastguard Worker  *      attributes is equal to value 0.
4498*35238bceSAndroid Build Coastguard Worker  *
4499*35238bceSAndroid Build Coastguard Worker  *      Check that parameter VERTEX_ATTRIB_ARRAY_TYPE for all possible
4500*35238bceSAndroid Build Coastguard Worker  *      attributes is equal to value FLOAT.
4501*35238bceSAndroid Build Coastguard Worker  *
4502*35238bceSAndroid Build Coastguard Worker  *      Check that parameter VERTEX_ATTRIB_ARRAY_NORMALIZED for all possible
4503*35238bceSAndroid Build Coastguard Worker  *      attributes is equal to value FALSE.
4504*35238bceSAndroid Build Coastguard Worker  *
4505*35238bceSAndroid Build Coastguard Worker  *      Check that parameter VERTEX_ATTRIB_ARRAY_INTEGER for all possible
4506*35238bceSAndroid Build Coastguard Worker  *      attributes is equal to value FALSE.
4507*35238bceSAndroid Build Coastguard Worker  *
4508*35238bceSAndroid Build Coastguard Worker  *      Check that parameter VERTEX_ATTRIB_ARRAY_LONG for all possible
4509*35238bceSAndroid Build Coastguard Worker  *      attributes is equal to value FALSE.
4510*35238bceSAndroid Build Coastguard Worker  *
4511*35238bceSAndroid Build Coastguard Worker  *      Check that parameter VERTEX_ATTRIB_ARRAY_DIVISOR for all possible
4512*35238bceSAndroid Build Coastguard Worker  *      attributes is equal to value 0.
4513*35238bceSAndroid Build Coastguard Worker  *
4514*35238bceSAndroid Build Coastguard Worker  *      Check that parameter VERTEX_ATTRIB_RELATIVE_OFFSET for all possible
4515*35238bceSAndroid Build Coastguard Worker  *      attributes is equal to value 0.
4516*35238bceSAndroid Build Coastguard Worker  *
4517*35238bceSAndroid Build Coastguard Worker  *      Check that parameter VERTEX_BINDING_OFFSET for all possible attributes
4518*35238bceSAndroid Build Coastguard Worker  *      is equal to value 0.
4519*35238bceSAndroid Build Coastguard Worker  *
4520*35238bceSAndroid Build Coastguard Worker  *      Check that parameter ELEMENT_ARRAY_BUFFER_BINDING is equal to value 0.
4521*35238bceSAndroid Build Coastguard Worker  *
4522*35238bceSAndroid Build Coastguard Worker  *      Release vertex array object.
4523*35238bceSAndroid Build Coastguard Worker  */
4524*35238bceSAndroid Build Coastguard Worker class DefaultsTest : public deqp::TestCase
4525*35238bceSAndroid Build Coastguard Worker {
4526*35238bceSAndroid Build Coastguard Worker public:
4527*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
4528*35238bceSAndroid Build Coastguard Worker     DefaultsTest(deqp::Context &context);
4529*35238bceSAndroid Build Coastguard Worker 
4530*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
4531*35238bceSAndroid Build Coastguard Worker 
4532*35238bceSAndroid Build Coastguard Worker private:
4533*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
4534*35238bceSAndroid Build Coastguard Worker     DefaultsTest(const DefaultsTest &other);
4535*35238bceSAndroid Build Coastguard Worker     DefaultsTest &operator=(const DefaultsTest &other);
4536*35238bceSAndroid Build Coastguard Worker 
4537*35238bceSAndroid Build Coastguard Worker     void PrepareVAO();
4538*35238bceSAndroid Build Coastguard Worker     bool Check(const glw::GLenum pname, const glw::GLint expected);
4539*35238bceSAndroid Build Coastguard Worker     bool CheckIndexed(const glw::GLenum pname, const glw::GLuint index, const glw::GLint expected);
4540*35238bceSAndroid Build Coastguard Worker     bool CheckIndexed64(const glw::GLenum pname, const glw::GLuint index, const glw::GLint64 expected);
4541*35238bceSAndroid Build Coastguard Worker 
4542*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
4543*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_vao;
4544*35238bceSAndroid Build Coastguard Worker };
4545*35238bceSAndroid Build Coastguard Worker /* DefaultsTest class */
4546*35238bceSAndroid Build Coastguard Worker 
4547*35238bceSAndroid Build Coastguard Worker /** Vertex Array Object Creation Error
4548*35238bceSAndroid Build Coastguard Worker  *
4549*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated if n is negative.
4550*35238bceSAndroid Build Coastguard Worker  */
4551*35238bceSAndroid Build Coastguard Worker class CreationErrorTest : public deqp::TestCase
4552*35238bceSAndroid Build Coastguard Worker {
4553*35238bceSAndroid Build Coastguard Worker public:
4554*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
4555*35238bceSAndroid Build Coastguard Worker     CreationErrorTest(deqp::Context &context);
4556*35238bceSAndroid Build Coastguard Worker 
4557*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
4558*35238bceSAndroid Build Coastguard Worker 
4559*35238bceSAndroid Build Coastguard Worker private:
4560*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
4561*35238bceSAndroid Build Coastguard Worker     CreationErrorTest(const CreationErrorTest &other);
4562*35238bceSAndroid Build Coastguard Worker     CreationErrorTest &operator=(const CreationErrorTest &other);
4563*35238bceSAndroid Build Coastguard Worker 
4564*35238bceSAndroid Build Coastguard Worker     bool CheckError(const glw::GLenum expected, const glw::GLchar *log_message);
4565*35238bceSAndroid Build Coastguard Worker };
4566*35238bceSAndroid Build Coastguard Worker /* CreationErrorTest class */
4567*35238bceSAndroid Build Coastguard Worker 
4568*35238bceSAndroid Build Coastguard Worker /** Vertex Array Object Enable Disable Attribute Errors
4569*35238bceSAndroid Build Coastguard Worker  *
4570*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by EnableVertexArrayAttrib and
4571*35238bceSAndroid Build Coastguard Worker  *      DisableVertexArrayAttrib if vaobj is not the name of an existing vertex
4572*35238bceSAndroid Build Coastguard Worker  *      array object.
4573*35238bceSAndroid Build Coastguard Worker  *
4574*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated if index is greater than or equal
4575*35238bceSAndroid Build Coastguard Worker  *      to MAX_VERTEX_ATTRIBS.
4576*35238bceSAndroid Build Coastguard Worker  */
4577*35238bceSAndroid Build Coastguard Worker class EnableDisableAttributeErrorsTest : public deqp::TestCase
4578*35238bceSAndroid Build Coastguard Worker {
4579*35238bceSAndroid Build Coastguard Worker public:
4580*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
4581*35238bceSAndroid Build Coastguard Worker     EnableDisableAttributeErrorsTest(deqp::Context &context);
4582*35238bceSAndroid Build Coastguard Worker 
4583*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
4584*35238bceSAndroid Build Coastguard Worker 
4585*35238bceSAndroid Build Coastguard Worker private:
4586*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
4587*35238bceSAndroid Build Coastguard Worker     EnableDisableAttributeErrorsTest(const EnableDisableAttributeErrorsTest &other);
4588*35238bceSAndroid Build Coastguard Worker     EnableDisableAttributeErrorsTest &operator=(const EnableDisableAttributeErrorsTest &other);
4589*35238bceSAndroid Build Coastguard Worker 
4590*35238bceSAndroid Build Coastguard Worker     bool CheckError(const glw::GLenum expected, const glw::GLchar *log_message);
4591*35238bceSAndroid Build Coastguard Worker };
4592*35238bceSAndroid Build Coastguard Worker /* EnableDisableAttributeErrorsTest class */
4593*35238bceSAndroid Build Coastguard Worker 
4594*35238bceSAndroid Build Coastguard Worker /** Vertex Array Object Element Buffer Errors
4595*35238bceSAndroid Build Coastguard Worker  *
4596*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION error is generated by VertexArrayElementBuffer if vaobj is not the name
4597*35238bceSAndroid Build Coastguard Worker  *      of an existing vertex array object.
4598*35238bceSAndroid Build Coastguard Worker  *
4599*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION error is generated by VertexArrayElementBuffer if buffer is not zero or
4600*35238bceSAndroid Build Coastguard Worker  *      the name of an existing buffer object.
4601*35238bceSAndroid Build Coastguard Worker  */
4602*35238bceSAndroid Build Coastguard Worker class ElementBufferErrorsTest : public deqp::TestCase
4603*35238bceSAndroid Build Coastguard Worker {
4604*35238bceSAndroid Build Coastguard Worker public:
4605*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
4606*35238bceSAndroid Build Coastguard Worker     ElementBufferErrorsTest(deqp::Context &context);
4607*35238bceSAndroid Build Coastguard Worker 
4608*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
4609*35238bceSAndroid Build Coastguard Worker 
4610*35238bceSAndroid Build Coastguard Worker private:
4611*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
4612*35238bceSAndroid Build Coastguard Worker     ElementBufferErrorsTest(const ElementBufferErrorsTest &other);
4613*35238bceSAndroid Build Coastguard Worker     ElementBufferErrorsTest &operator=(const ElementBufferErrorsTest &other);
4614*35238bceSAndroid Build Coastguard Worker 
4615*35238bceSAndroid Build Coastguard Worker     bool CheckError(const glw::GLenum expected, const glw::GLchar *log_message);
4616*35238bceSAndroid Build Coastguard Worker };
4617*35238bceSAndroid Build Coastguard Worker /* ElementBuffersErrorsTest class */
4618*35238bceSAndroid Build Coastguard Worker 
4619*35238bceSAndroid Build Coastguard Worker /** Vertex Array Object Buffer and Buffers Errors
4620*35238bceSAndroid Build Coastguard Worker  *
4621*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by VertexArrayVertexBuffer and
4622*35238bceSAndroid Build Coastguard Worker  *      VertexArrayVertexBuffers if vaobj is not the name of an existing vertex
4623*35238bceSAndroid Build Coastguard Worker  *      array object.
4624*35238bceSAndroid Build Coastguard Worker  *
4625*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by VertexArrayVertexBuffer if
4626*35238bceSAndroid Build Coastguard Worker  *      buffer is not zero or the name of an existing buffer object (as returned
4627*35238bceSAndroid Build Coastguard Worker  *      by GenBuffers or CreateBuffers).
4628*35238bceSAndroid Build Coastguard Worker  *
4629*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by VertexArrayVertexBuffers if
4630*35238bceSAndroid Build Coastguard Worker  *      any value in buffers is not zero or the name of an existing buffer
4631*35238bceSAndroid Build Coastguard Worker  *      object.
4632*35238bceSAndroid Build Coastguard Worker  *
4633*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by VertexArrayVertexBuffer if
4634*35238bceSAndroid Build Coastguard Worker  *      bindingindex is greater than or equal to the value of
4635*35238bceSAndroid Build Coastguard Worker  *      MAX_VERTEX_ATTRIB_BINDINGS.
4636*35238bceSAndroid Build Coastguard Worker  *
4637*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by VertexArrayVertexBuffers if
4638*35238bceSAndroid Build Coastguard Worker  *      first+count is greater than the value of MAX_VERTEX_ATTRIB_BINDINGS.
4639*35238bceSAndroid Build Coastguard Worker  *
4640*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by VertexArrayVertexBuffer if
4641*35238bceSAndroid Build Coastguard Worker  *      offset or stride is less than zero, or if stride is greater than the
4642*35238bceSAndroid Build Coastguard Worker  *      value of MAX_VERTEX_ATTRIB_STRIDE.
4643*35238bceSAndroid Build Coastguard Worker  *
4644*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by VertexArrayVertexBuffers if any
4645*35238bceSAndroid Build Coastguard Worker  *      value in offsets or strides is negative, or if a value is stride is
4646*35238bceSAndroid Build Coastguard Worker  *      greater than the value of MAX_VERTEX_ATTRIB_STRIDE.
4647*35238bceSAndroid Build Coastguard Worker  */
4648*35238bceSAndroid Build Coastguard Worker class VertexBuffersErrorsTest : public deqp::TestCase
4649*35238bceSAndroid Build Coastguard Worker {
4650*35238bceSAndroid Build Coastguard Worker public:
4651*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
4652*35238bceSAndroid Build Coastguard Worker     VertexBuffersErrorsTest(deqp::Context &context);
4653*35238bceSAndroid Build Coastguard Worker 
4654*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
4655*35238bceSAndroid Build Coastguard Worker 
4656*35238bceSAndroid Build Coastguard Worker private:
4657*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
4658*35238bceSAndroid Build Coastguard Worker     VertexBuffersErrorsTest(const VertexBuffersErrorsTest &other);
4659*35238bceSAndroid Build Coastguard Worker     VertexBuffersErrorsTest &operator=(const VertexBuffersErrorsTest &other);
4660*35238bceSAndroid Build Coastguard Worker 
4661*35238bceSAndroid Build Coastguard Worker     bool CheckError(const glw::GLenum expected, const glw::GLchar *log_message);
4662*35238bceSAndroid Build Coastguard Worker };
4663*35238bceSAndroid Build Coastguard Worker /* VertexBuffersErrorsTest class */
4664*35238bceSAndroid Build Coastguard Worker 
4665*35238bceSAndroid Build Coastguard Worker /** Vertex Array Object Attribute Format Errors
4666*35238bceSAndroid Build Coastguard Worker  *
4667*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by VertexArrayAttrib*Format if
4668*35238bceSAndroid Build Coastguard Worker  *      attribindex is greater than or equal to the value of MAX_VERTEX_ATTRIBS.
4669*35238bceSAndroid Build Coastguard Worker  *
4670*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by VertexArrayAttrib*Format if
4671*35238bceSAndroid Build Coastguard Worker  *      size is not one of the accepted values.
4672*35238bceSAndroid Build Coastguard Worker  *
4673*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by VertexArrayAttrib*Format if
4674*35238bceSAndroid Build Coastguard Worker  *      relativeoffset is greater than the value of
4675*35238bceSAndroid Build Coastguard Worker  *      MAX_VERTEX_ATTRIB_RELATIVE_OFFSET.
4676*35238bceSAndroid Build Coastguard Worker  *
4677*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by VertexArrayAttrib*Format if type
4678*35238bceSAndroid Build Coastguard Worker  *      is not one of the accepted tokens.
4679*35238bceSAndroid Build Coastguard Worker  *
4680*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by VertexArrayAttrib{IL}Format if
4681*35238bceSAndroid Build Coastguard Worker  *      type is UNSIGNED_INT_10F_11F_11F_REV.
4682*35238bceSAndroid Build Coastguard Worker  *
4683*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by VertexArrayAttrib*Format if
4684*35238bceSAndroid Build Coastguard Worker  *      vaobj is not the name of an existing vertex array object.
4685*35238bceSAndroid Build Coastguard Worker  *
4686*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by VertexArrayAttribFormat
4687*35238bceSAndroid Build Coastguard Worker  *      under any of the following conditions:
4688*35238bceSAndroid Build Coastguard Worker  *       -  size is BGRA and type is not UNSIGNED_BYTE, INT_2_10_10_10_REV or
4689*35238bceSAndroid Build Coastguard Worker  *          UNSIGNED_INT_2_10_10_10_REV,
4690*35238bceSAndroid Build Coastguard Worker  *       -  type is INT_2_10_10_10_REV or UNSIGNED_INT_2_10_10_10_REV, and size
4691*35238bceSAndroid Build Coastguard Worker  *          is neither 4 nor BGRA,
4692*35238bceSAndroid Build Coastguard Worker  *       -  type is UNSIGNED_INT_10F_11F_11F_REV and size is not 3,
4693*35238bceSAndroid Build Coastguard Worker  *       -  size is BGRA and normalized is FALSE.
4694*35238bceSAndroid Build Coastguard Worker  */
4695*35238bceSAndroid Build Coastguard Worker class AttributeFormatErrorsTest : public deqp::TestCase
4696*35238bceSAndroid Build Coastguard Worker {
4697*35238bceSAndroid Build Coastguard Worker public:
4698*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
4699*35238bceSAndroid Build Coastguard Worker     AttributeFormatErrorsTest(deqp::Context &context);
4700*35238bceSAndroid Build Coastguard Worker 
4701*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
4702*35238bceSAndroid Build Coastguard Worker 
4703*35238bceSAndroid Build Coastguard Worker private:
4704*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
4705*35238bceSAndroid Build Coastguard Worker     AttributeFormatErrorsTest(const AttributeFormatErrorsTest &other);
4706*35238bceSAndroid Build Coastguard Worker     AttributeFormatErrorsTest &operator=(const AttributeFormatErrorsTest &other);
4707*35238bceSAndroid Build Coastguard Worker 
4708*35238bceSAndroid Build Coastguard Worker     bool CheckError(const glw::GLenum expected, const glw::GLchar *log_message);
4709*35238bceSAndroid Build Coastguard Worker };
4710*35238bceSAndroid Build Coastguard Worker /* AttributeFormatErrorsTest class */
4711*35238bceSAndroid Build Coastguard Worker 
4712*35238bceSAndroid Build Coastguard Worker /** Vertex Array Attribute Binding Errors
4713*35238bceSAndroid Build Coastguard Worker  *
4714*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by VertexArrayAttribBinding if
4715*35238bceSAndroid Build Coastguard Worker  *      vaobj is not the name of an existing vertex array object.
4716*35238bceSAndroid Build Coastguard Worker  *
4717*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by VertexArrayAttribBinding if
4718*35238bceSAndroid Build Coastguard Worker  *      attribindex is greater than or equal to the value of MAX_VERTEX_ATTRIBS.
4719*35238bceSAndroid Build Coastguard Worker  *
4720*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by VertexArrayAttribBinding if
4721*35238bceSAndroid Build Coastguard Worker  *      bindingindex is greater than or equal to the value of
4722*35238bceSAndroid Build Coastguard Worker  *      MAX_VERTEX_ATTRIB_BINDINGS.
4723*35238bceSAndroid Build Coastguard Worker  */
4724*35238bceSAndroid Build Coastguard Worker class AttributeBindingErrorsTest : public deqp::TestCase
4725*35238bceSAndroid Build Coastguard Worker {
4726*35238bceSAndroid Build Coastguard Worker public:
4727*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
4728*35238bceSAndroid Build Coastguard Worker     AttributeBindingErrorsTest(deqp::Context &context);
4729*35238bceSAndroid Build Coastguard Worker 
4730*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
4731*35238bceSAndroid Build Coastguard Worker 
4732*35238bceSAndroid Build Coastguard Worker private:
4733*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
4734*35238bceSAndroid Build Coastguard Worker     AttributeBindingErrorsTest(const AttributeBindingErrorsTest &other);
4735*35238bceSAndroid Build Coastguard Worker     AttributeBindingErrorsTest &operator=(const AttributeBindingErrorsTest &other);
4736*35238bceSAndroid Build Coastguard Worker 
4737*35238bceSAndroid Build Coastguard Worker     bool CheckError(const glw::GLenum expected, const glw::GLchar *log_message);
4738*35238bceSAndroid Build Coastguard Worker };
4739*35238bceSAndroid Build Coastguard Worker /* AttributeBindingErrorsTest class */
4740*35238bceSAndroid Build Coastguard Worker 
4741*35238bceSAndroid Build Coastguard Worker /** Vertex Array Binding Divisor Errors
4742*35238bceSAndroid Build Coastguard Worker  *
4743*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by VertexArrayBindingDivisor if
4744*35238bceSAndroid Build Coastguard Worker  *      bindingindex is greater than or equal to the value of
4745*35238bceSAndroid Build Coastguard Worker  *      MAX_VERTEX_ATTRIB_BINDINGS.
4746*35238bceSAndroid Build Coastguard Worker  *
4747*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by VertexArrayBindingDivisor
4748*35238bceSAndroid Build Coastguard Worker  *      if vaobj is not the name of an existing vertex array object.
4749*35238bceSAndroid Build Coastguard Worker  */
4750*35238bceSAndroid Build Coastguard Worker class AttributeBindingDivisorErrorsTest : public deqp::TestCase
4751*35238bceSAndroid Build Coastguard Worker {
4752*35238bceSAndroid Build Coastguard Worker public:
4753*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
4754*35238bceSAndroid Build Coastguard Worker     AttributeBindingDivisorErrorsTest(deqp::Context &context);
4755*35238bceSAndroid Build Coastguard Worker 
4756*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
4757*35238bceSAndroid Build Coastguard Worker 
4758*35238bceSAndroid Build Coastguard Worker private:
4759*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
4760*35238bceSAndroid Build Coastguard Worker     AttributeBindingDivisorErrorsTest(const AttributeBindingDivisorErrorsTest &other);
4761*35238bceSAndroid Build Coastguard Worker     AttributeBindingDivisorErrorsTest &operator=(const AttributeBindingDivisorErrorsTest &other);
4762*35238bceSAndroid Build Coastguard Worker 
4763*35238bceSAndroid Build Coastguard Worker     bool CheckError(const glw::GLenum expected, const glw::GLchar *log_message);
4764*35238bceSAndroid Build Coastguard Worker };
4765*35238bceSAndroid Build Coastguard Worker /* AttributeBindingDivisorErrorsTest class */
4766*35238bceSAndroid Build Coastguard Worker 
4767*35238bceSAndroid Build Coastguard Worker /** Get Vertex Array Errors
4768*35238bceSAndroid Build Coastguard Worker  *
4769*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION error is generated by GetVertexArrayiv if
4770*35238bceSAndroid Build Coastguard Worker  *      vaobj is not the name of an existing vertex array object.
4771*35238bceSAndroid Build Coastguard Worker  *
4772*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM error is generated by GetVertexArrayiv if pname
4773*35238bceSAndroid Build Coastguard Worker  *      is not ELEMENT_ARRAY_BUFFER_BINDING.
4774*35238bceSAndroid Build Coastguard Worker  */
4775*35238bceSAndroid Build Coastguard Worker class GetVertexArrayErrorsTest : public deqp::TestCase
4776*35238bceSAndroid Build Coastguard Worker {
4777*35238bceSAndroid Build Coastguard Worker public:
4778*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
4779*35238bceSAndroid Build Coastguard Worker     GetVertexArrayErrorsTest(deqp::Context &context);
4780*35238bceSAndroid Build Coastguard Worker 
4781*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
4782*35238bceSAndroid Build Coastguard Worker 
4783*35238bceSAndroid Build Coastguard Worker private:
4784*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
4785*35238bceSAndroid Build Coastguard Worker     GetVertexArrayErrorsTest(const GetVertexArrayErrorsTest &other);
4786*35238bceSAndroid Build Coastguard Worker     GetVertexArrayErrorsTest &operator=(const GetVertexArrayErrorsTest &other);
4787*35238bceSAndroid Build Coastguard Worker 
4788*35238bceSAndroid Build Coastguard Worker     bool CheckError(const glw::GLenum expected, const glw::GLchar *log_message);
4789*35238bceSAndroid Build Coastguard Worker };
4790*35238bceSAndroid Build Coastguard Worker /* GetVertexArrayErrorsTest class */
4791*35238bceSAndroid Build Coastguard Worker 
4792*35238bceSAndroid Build Coastguard Worker /** Get Vertex Array Indexed Errors
4793*35238bceSAndroid Build Coastguard Worker  *
4794*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION error is generated by
4795*35238bceSAndroid Build Coastguard Worker  *      GetVertexArrayIndexediv and GetVertexArrayIndexed64iv if vaobj is not
4796*35238bceSAndroid Build Coastguard Worker  *      the name of an existing vertex array object.
4797*35238bceSAndroid Build Coastguard Worker  *
4798*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE error is generated by GetVertexArrayIndexediv
4799*35238bceSAndroid Build Coastguard Worker  *      and GetVertexArrayIndexed64iv if index is greater than or equal to the
4800*35238bceSAndroid Build Coastguard Worker  *      value of MAX_VERTEX_ATTRIBS.
4801*35238bceSAndroid Build Coastguard Worker  *
4802*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM error is generated by GetVertexArrayIndexediv if
4803*35238bceSAndroid Build Coastguard Worker  *      pname is not one of the valid values:
4804*35238bceSAndroid Build Coastguard Worker  *       -  VERTEX_ATTRIB_ARRAY_ENABLED,
4805*35238bceSAndroid Build Coastguard Worker  *       -  VERTEX_ATTRIB_ARRAY_SIZE,
4806*35238bceSAndroid Build Coastguard Worker  *       -  VERTEX_ATTRIB_ARRAY_STRIDE,
4807*35238bceSAndroid Build Coastguard Worker  *       -  VERTEX_ATTRIB_ARRAY_TYPE,
4808*35238bceSAndroid Build Coastguard Worker  *       -  VERTEX_ATTRIB_ARRAY_NORMALIZED,
4809*35238bceSAndroid Build Coastguard Worker  *       -  VERTEX_ATTRIB_ARRAY_INTEGER,
4810*35238bceSAndroid Build Coastguard Worker  *       -  VERTEX_ATTRIB_ARRAY_LONG,
4811*35238bceSAndroid Build Coastguard Worker  *       -  VERTEX_ATTRIB_ARRAY_DIVISOR,
4812*35238bceSAndroid Build Coastguard Worker  *       -  VERTEX_ATTRIB_RELATIVE_OFFSET.
4813*35238bceSAndroid Build Coastguard Worker  *
4814*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM error is generated by GetVertexArrayIndexed64iv
4815*35238bceSAndroid Build Coastguard Worker  *      if pname is not VERTEX_BINDING_OFFSET.
4816*35238bceSAndroid Build Coastguard Worker  */
4817*35238bceSAndroid Build Coastguard Worker class GetVertexArrayIndexedErrorsTest : public deqp::TestCase
4818*35238bceSAndroid Build Coastguard Worker {
4819*35238bceSAndroid Build Coastguard Worker public:
4820*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
4821*35238bceSAndroid Build Coastguard Worker     GetVertexArrayIndexedErrorsTest(deqp::Context &context);
4822*35238bceSAndroid Build Coastguard Worker 
4823*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
4824*35238bceSAndroid Build Coastguard Worker 
4825*35238bceSAndroid Build Coastguard Worker private:
4826*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
4827*35238bceSAndroid Build Coastguard Worker     GetVertexArrayIndexedErrorsTest(const GetVertexArrayIndexedErrorsTest &other);
4828*35238bceSAndroid Build Coastguard Worker     GetVertexArrayIndexedErrorsTest &operator=(const GetVertexArrayIndexedErrorsTest &other);
4829*35238bceSAndroid Build Coastguard Worker 
4830*35238bceSAndroid Build Coastguard Worker     bool CheckError(const glw::GLenum expected, const glw::GLchar *log_message);
4831*35238bceSAndroid Build Coastguard Worker };
4832*35238bceSAndroid Build Coastguard Worker /* GetVertexArrayIndexedErrorsTest class */
4833*35238bceSAndroid Build Coastguard Worker 
4834*35238bceSAndroid Build Coastguard Worker namespace Utilities
4835*35238bceSAndroid Build Coastguard Worker {
4836*35238bceSAndroid Build Coastguard Worker std::string itoa(glw::GLuint i);
4837*35238bceSAndroid Build Coastguard Worker std::string replace(const std::string &src, const std::string &key, const std::string &value);
4838*35238bceSAndroid Build Coastguard Worker } // namespace Utilities
4839*35238bceSAndroid Build Coastguard Worker } // namespace VertexArrays
4840*35238bceSAndroid Build Coastguard Worker 
4841*35238bceSAndroid Build Coastguard Worker /* Direct State Access Textures Tests */
4842*35238bceSAndroid Build Coastguard Worker namespace Textures
4843*35238bceSAndroid Build Coastguard Worker {
4844*35238bceSAndroid Build Coastguard Worker /** @class CreationTest
4845*35238bceSAndroid Build Coastguard Worker  *
4846*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access Texture Creation test cases.
4847*35238bceSAndroid Build Coastguard Worker  *
4848*35238bceSAndroid Build Coastguard Worker  *  Test follows the steps:
4849*35238bceSAndroid Build Coastguard Worker  *
4850*35238bceSAndroid Build Coastguard Worker  *      Create at least two texture objects using GenTextures function. Check
4851*35238bceSAndroid Build Coastguard Worker  *      them without binding, using IsTexture function. Expect FALSE.
4852*35238bceSAndroid Build Coastguard Worker  *
4853*35238bceSAndroid Build Coastguard Worker  *      Create at least two texture objects using CreateTextures function. Check
4854*35238bceSAndroid Build Coastguard Worker  *      them without binding, using IsTexture function. Expect TRUE. Repeat this
4855*35238bceSAndroid Build Coastguard Worker  *      step for all targets:
4856*35238bceSAndroid Build Coastguard Worker  *          -  TEXTURE_1D,
4857*35238bceSAndroid Build Coastguard Worker  *          -  TEXTURE_2D,
4858*35238bceSAndroid Build Coastguard Worker  *          -  TEXTURE_3D,
4859*35238bceSAndroid Build Coastguard Worker  *          -  TEXTURE_1D_ARRAY,
4860*35238bceSAndroid Build Coastguard Worker  *          -  TEXTURE_2D_ARRAY,
4861*35238bceSAndroid Build Coastguard Worker  *          -  TEXTURE_RECTANGLE,
4862*35238bceSAndroid Build Coastguard Worker  *          -  TEXTURE_CUBE_MAP,
4863*35238bceSAndroid Build Coastguard Worker  *          -  TEXTURE_CUBE_MAP_ARRAY,
4864*35238bceSAndroid Build Coastguard Worker  *          -  TEXTURE_BUFFER,
4865*35238bceSAndroid Build Coastguard Worker  *          -  TEXTURE_2D_MULTISAMPLE and
4866*35238bceSAndroid Build Coastguard Worker  *          -  TEXTURE_2D_MULTISAMPLE_ARRAY.
4867*35238bceSAndroid Build Coastguard Worker  *
4868*35238bceSAndroid Build Coastguard Worker  *      Release objects.
4869*35238bceSAndroid Build Coastguard Worker  */
4870*35238bceSAndroid Build Coastguard Worker class CreationTest : public deqp::TestCase
4871*35238bceSAndroid Build Coastguard Worker {
4872*35238bceSAndroid Build Coastguard Worker public:
4873*35238bceSAndroid Build Coastguard Worker     /* Public member functions */
4874*35238bceSAndroid Build Coastguard Worker     CreationTest(deqp::Context &context);
4875*35238bceSAndroid Build Coastguard Worker 
4876*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
4877*35238bceSAndroid Build Coastguard Worker 
4878*35238bceSAndroid Build Coastguard Worker private:
4879*35238bceSAndroid Build Coastguard Worker     /* Private member functions */
4880*35238bceSAndroid Build Coastguard Worker     CreationTest(const CreationTest &other);
4881*35238bceSAndroid Build Coastguard Worker     CreationTest &operator=(const CreationTest &other);
4882*35238bceSAndroid Build Coastguard Worker };
4883*35238bceSAndroid Build Coastguard Worker /* CreationTest class */
4884*35238bceSAndroid Build Coastguard Worker 
4885*35238bceSAndroid Build Coastguard Worker class Reference
4886*35238bceSAndroid Build Coastguard Worker {
4887*35238bceSAndroid Build Coastguard Worker public:
4888*35238bceSAndroid Build Coastguard Worker     template <typename T, glw::GLint S, bool N>
4889*35238bceSAndroid Build Coastguard Worker     static glw::GLenum InternalFormat();
4890*35238bceSAndroid Build Coastguard Worker 
4891*35238bceSAndroid Build Coastguard Worker     template <glw::GLint S, bool N>
4892*35238bceSAndroid Build Coastguard Worker     static glw::GLenum Format();
4893*35238bceSAndroid Build Coastguard Worker 
4894*35238bceSAndroid Build Coastguard Worker     template <typename T>
4895*35238bceSAndroid Build Coastguard Worker     static glw::GLenum Type();
4896*35238bceSAndroid Build Coastguard Worker 
4897*35238bceSAndroid Build Coastguard Worker     template <typename T, bool N>
4898*35238bceSAndroid Build Coastguard Worker     static const T *ReferenceData();
4899*35238bceSAndroid Build Coastguard Worker 
4900*35238bceSAndroid Build Coastguard Worker     static glw::GLuint ReferenceDataCount();
4901*35238bceSAndroid Build Coastguard Worker 
4902*35238bceSAndroid Build Coastguard Worker     template <typename T>
4903*35238bceSAndroid Build Coastguard Worker     static glw::GLuint ReferenceDataSize();
4904*35238bceSAndroid Build Coastguard Worker 
4905*35238bceSAndroid Build Coastguard Worker     template <typename T>
4906*35238bceSAndroid Build Coastguard Worker     static bool Compare(const T a, const T b);
4907*35238bceSAndroid Build Coastguard Worker 
4908*35238bceSAndroid Build Coastguard Worker private:
4909*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_reference_count = 2 /* 1D */ * 3 /* 2D */ * 4 /* 3D */ * 4 /* components */;
4910*35238bceSAndroid Build Coastguard Worker };
4911*35238bceSAndroid Build Coastguard Worker 
4912*35238bceSAndroid Build Coastguard Worker /** @class BufferTest
4913*35238bceSAndroid Build Coastguard Worker  *
4914*35238bceSAndroid Build Coastguard Worker  *  @brief Direct State Access of texture buffers.
4915*35238bceSAndroid Build Coastguard Worker  *
4916*35238bceSAndroid Build Coastguard Worker  *  @tparam T      Type.
4917*35238bceSAndroid Build Coastguard Worker  *  @tparam S      Size.
4918*35238bceSAndroid Build Coastguard Worker  *  @tparam N      Is normalized.
4919*35238bceSAndroid Build Coastguard Worker  *
4920*35238bceSAndroid Build Coastguard Worker  *  Test follows the steps:
4921*35238bceSAndroid Build Coastguard Worker  *
4922*35238bceSAndroid Build Coastguard Worker  *      Make test for following DSA functions:
4923*35238bceSAndroid Build Coastguard Worker  *        -  TextureBuffer,
4924*35238bceSAndroid Build Coastguard Worker  *        -  TextureBufferRange
4925*35238bceSAndroid Build Coastguard Worker  *       and following texture internal formats:
4926*35238bceSAndroid Build Coastguard Worker  *        -  R8,
4927*35238bceSAndroid Build Coastguard Worker  *        -  R16,
4928*35238bceSAndroid Build Coastguard Worker  *        -  R16F,
4929*35238bceSAndroid Build Coastguard Worker  *        -  R32F,
4930*35238bceSAndroid Build Coastguard Worker  *        -  R8I,
4931*35238bceSAndroid Build Coastguard Worker  *        -  R16I,
4932*35238bceSAndroid Build Coastguard Worker  *        -  R32I,
4933*35238bceSAndroid Build Coastguard Worker  *        -  R8UI,
4934*35238bceSAndroid Build Coastguard Worker  *        -  R16UI,
4935*35238bceSAndroid Build Coastguard Worker  *        -  R32UI,
4936*35238bceSAndroid Build Coastguard Worker  *        -  RG8,
4937*35238bceSAndroid Build Coastguard Worker  *        -  RG16,
4938*35238bceSAndroid Build Coastguard Worker  *        -  RG16F,
4939*35238bceSAndroid Build Coastguard Worker  *        -  RG32F,
4940*35238bceSAndroid Build Coastguard Worker  *        -  RG8I,
4941*35238bceSAndroid Build Coastguard Worker  *        -  RG16I,
4942*35238bceSAndroid Build Coastguard Worker  *        -  RG32I,
4943*35238bceSAndroid Build Coastguard Worker  *        -  RG8UI,
4944*35238bceSAndroid Build Coastguard Worker  *        -  RG16UI,
4945*35238bceSAndroid Build Coastguard Worker  *        -  RG32UI,
4946*35238bceSAndroid Build Coastguard Worker  *        -  RGB32F,
4947*35238bceSAndroid Build Coastguard Worker  *        -  RGB32I,
4948*35238bceSAndroid Build Coastguard Worker  *        -  RGB32UI,
4949*35238bceSAndroid Build Coastguard Worker  *        -  RGBA8,
4950*35238bceSAndroid Build Coastguard Worker  *        -  RGBA16,
4951*35238bceSAndroid Build Coastguard Worker  *        -  RGBA16F,
4952*35238bceSAndroid Build Coastguard Worker  *        -  RGBA32F,
4953*35238bceSAndroid Build Coastguard Worker  *        -  RGBA8I,
4954*35238bceSAndroid Build Coastguard Worker  *        -  RGBA16I,
4955*35238bceSAndroid Build Coastguard Worker  *        -  RGBA32I,
4956*35238bceSAndroid Build Coastguard Worker  *        -  RGBA8UI,
4957*35238bceSAndroid Build Coastguard Worker  *        -  RGBA16UI,
4958*35238bceSAndroid Build Coastguard Worker  *        -  RGBA32UI.
4959*35238bceSAndroid Build Coastguard Worker  *
4960*35238bceSAndroid Build Coastguard Worker  *          Prepare program which draws textured quad 6 x 1 pixels in size. The
4961*35238bceSAndroid Build Coastguard Worker  *          sampled texture shall be buffer texture which linearly store two rows
4962*35238bceSAndroid Build Coastguard Worker  *          of three pixels.
4963*35238bceSAndroid Build Coastguard Worker  *
4964*35238bceSAndroid Build Coastguard Worker  *          Prepare framebuffer 6 x 1 pixels in size.
4965*35238bceSAndroid Build Coastguard Worker  *
4966*35238bceSAndroid Build Coastguard Worker  *          Prepare texture object with attached buffer object as a storage using
4967*35238bceSAndroid Build Coastguard Worker  *          TextureBuffer or TextureBufferRange function. When TextureBufferRange is
4968*35238bceSAndroid Build Coastguard Worker  *          being used, test non-zero offset setup. The buffer object shall contain
4969*35238bceSAndroid Build Coastguard Worker  *          unique reference values. Texture filtering shall be set to NEAREST.
4970*35238bceSAndroid Build Coastguard Worker  *
4971*35238bceSAndroid Build Coastguard Worker  *          Using prepared GL objects draw a quad. Fetch framebuffer data using
4972*35238bceSAndroid Build Coastguard Worker  *          ReadPixels function. Compare the results with the reference data. Expect
4973*35238bceSAndroid Build Coastguard Worker  *          equality.
4974*35238bceSAndroid Build Coastguard Worker  *
4975*35238bceSAndroid Build Coastguard Worker  *          Release all objects.
4976*35238bceSAndroid Build Coastguard Worker  */
4977*35238bceSAndroid Build Coastguard Worker template <typename T, glw::GLint S, bool N>
4978*35238bceSAndroid Build Coastguard Worker class BufferTest : public deqp::TestCase, Reference
4979*35238bceSAndroid Build Coastguard Worker {
4980*35238bceSAndroid Build Coastguard Worker public:
4981*35238bceSAndroid Build Coastguard Worker     /* Public member functions. */
4982*35238bceSAndroid Build Coastguard Worker     BufferTest(deqp::Context &context, const char *name);
4983*35238bceSAndroid Build Coastguard Worker 
4984*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
4985*35238bceSAndroid Build Coastguard Worker 
4986*35238bceSAndroid Build Coastguard Worker private:
4987*35238bceSAndroid Build Coastguard Worker     /* Private constructors. */
4988*35238bceSAndroid Build Coastguard Worker     BufferTest(const BufferTest &other);
4989*35238bceSAndroid Build Coastguard Worker     BufferTest &operator=(const BufferTest &other);
4990*35238bceSAndroid Build Coastguard Worker 
4991*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
4992*35238bceSAndroid Build Coastguard Worker     static glw::GLuint TestReferenceDataCount();
4993*35238bceSAndroid Build Coastguard Worker 
4994*35238bceSAndroid Build Coastguard Worker     static glw::GLuint TestReferenceDataSize();
4995*35238bceSAndroid Build Coastguard Worker 
4996*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *FragmentShaderDeclaration();
4997*35238bceSAndroid Build Coastguard Worker 
4998*35238bceSAndroid Build Coastguard Worker     bool CreateBufferTexture(bool use_range_version);
4999*35238bceSAndroid Build Coastguard Worker 
5000*35238bceSAndroid Build Coastguard Worker     bool Check();
5001*35238bceSAndroid Build Coastguard Worker 
5002*35238bceSAndroid Build Coastguard Worker     bool Test(bool use_range_version);
5003*35238bceSAndroid Build Coastguard Worker 
5004*35238bceSAndroid Build Coastguard Worker     bool PrepareFramebuffer(const glw::GLenum internal_format);
5005*35238bceSAndroid Build Coastguard Worker     void PrepareProgram(const glw::GLchar *variable_declaration);
5006*35238bceSAndroid Build Coastguard Worker     void PrepareVertexArray();
5007*35238bceSAndroid Build Coastguard Worker     void Draw();
5008*35238bceSAndroid Build Coastguard Worker     void CleanBufferTexture();
5009*35238bceSAndroid Build Coastguard Worker     void CleanFramebuffer();
5010*35238bceSAndroid Build Coastguard Worker     void CleanProgram();
5011*35238bceSAndroid Build Coastguard Worker     void CleanErrors();
5012*35238bceSAndroid Build Coastguard Worker     void CleanVertexArray();
5013*35238bceSAndroid Build Coastguard Worker 
5014*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
5015*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo;
5016*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo;
5017*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_po;
5018*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to;
5019*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_bo;
5020*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_vao;
5021*35238bceSAndroid Build Coastguard Worker 
5022*35238bceSAndroid Build Coastguard Worker     /* Private static constants. */
5023*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_fbo_size_x = 6;
5024*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_fbo_size_y = 1;
5025*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_vertex_shader;
5026*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_head;
5027*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_fdecl_lowp;
5028*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_idecl_lowp;
5029*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_udecl_lowp;
5030*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_fdecl_mediump;
5031*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_idecl_mediump;
5032*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_udecl_mediump;
5033*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_fdecl_highp;
5034*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_idecl_highp;
5035*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_udecl_highp;
5036*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_tail;
5037*35238bceSAndroid Build Coastguard Worker };
5038*35238bceSAndroid Build Coastguard Worker 
5039*35238bceSAndroid Build Coastguard Worker /** @brief Fragment shader part selector.
5040*35238bceSAndroid Build Coastguard Worker  *
5041*35238bceSAndroid Build Coastguard Worker  *  @return Array of characters with source code.
5042*35238bceSAndroid Build Coastguard Worker  */
5043*35238bceSAndroid Build Coastguard Worker template <typename T, glw::GLint S, bool N>
FragmentShaderDeclaration()5044*35238bceSAndroid Build Coastguard Worker const glw::GLchar *BufferTest<T, S, N>::FragmentShaderDeclaration()
5045*35238bceSAndroid Build Coastguard Worker {
5046*35238bceSAndroid Build Coastguard Worker     if (typeid(T) == typeid(glw::GLbyte))
5047*35238bceSAndroid Build Coastguard Worker     {
5048*35238bceSAndroid Build Coastguard Worker         return s_fragment_shader_idecl_lowp;
5049*35238bceSAndroid Build Coastguard Worker     }
5050*35238bceSAndroid Build Coastguard Worker 
5051*35238bceSAndroid Build Coastguard Worker     if (typeid(T) == typeid(glw::GLubyte))
5052*35238bceSAndroid Build Coastguard Worker     {
5053*35238bceSAndroid Build Coastguard Worker         return N ? s_fragment_shader_fdecl_lowp : s_fragment_shader_udecl_lowp;
5054*35238bceSAndroid Build Coastguard Worker     }
5055*35238bceSAndroid Build Coastguard Worker 
5056*35238bceSAndroid Build Coastguard Worker     if (typeid(T) == typeid(glw::GLshort))
5057*35238bceSAndroid Build Coastguard Worker     {
5058*35238bceSAndroid Build Coastguard Worker         return s_fragment_shader_idecl_mediump;
5059*35238bceSAndroid Build Coastguard Worker     }
5060*35238bceSAndroid Build Coastguard Worker 
5061*35238bceSAndroid Build Coastguard Worker     if (typeid(T) == typeid(glw::GLushort))
5062*35238bceSAndroid Build Coastguard Worker     {
5063*35238bceSAndroid Build Coastguard Worker         return N ? s_fragment_shader_fdecl_mediump : s_fragment_shader_udecl_mediump;
5064*35238bceSAndroid Build Coastguard Worker     }
5065*35238bceSAndroid Build Coastguard Worker 
5066*35238bceSAndroid Build Coastguard Worker     if (typeid(T) == typeid(glw::GLint))
5067*35238bceSAndroid Build Coastguard Worker     {
5068*35238bceSAndroid Build Coastguard Worker         return s_fragment_shader_idecl_highp;
5069*35238bceSAndroid Build Coastguard Worker     }
5070*35238bceSAndroid Build Coastguard Worker 
5071*35238bceSAndroid Build Coastguard Worker     if (typeid(T) == typeid(glw::GLuint))
5072*35238bceSAndroid Build Coastguard Worker     {
5073*35238bceSAndroid Build Coastguard Worker         return s_fragment_shader_udecl_highp;
5074*35238bceSAndroid Build Coastguard Worker     }
5075*35238bceSAndroid Build Coastguard Worker 
5076*35238bceSAndroid Build Coastguard Worker     return s_fragment_shader_fdecl_highp;
5077*35238bceSAndroid Build Coastguard Worker }
5078*35238bceSAndroid Build Coastguard Worker 
5079*35238bceSAndroid Build Coastguard Worker /* BufferTest class */
5080*35238bceSAndroid Build Coastguard Worker 
5081*35238bceSAndroid Build Coastguard Worker /** @class StorageAndSubImageTest
5082*35238bceSAndroid Build Coastguard Worker  *
5083*35238bceSAndroid Build Coastguard Worker  *  @tparam T      Type.
5084*35238bceSAndroid Build Coastguard Worker  *  @tparam S      Size.
5085*35238bceSAndroid Build Coastguard Worker  *  @tparam N      Is normalized.
5086*35238bceSAndroid Build Coastguard Worker  *  @tparam D      Texture dimension.
5087*35238bceSAndroid Build Coastguard Worker  *  @tparam I      Choose between SubImage and Storage tests.
5088*35238bceSAndroid Build Coastguard Worker  *
5089*35238bceSAndroid Build Coastguard Worker  *      Make test for following DSA storage functions:
5090*35238bceSAndroid Build Coastguard Worker  *       -  TextureStorage1D,
5091*35238bceSAndroid Build Coastguard Worker  *       -  TextureStorage2D,
5092*35238bceSAndroid Build Coastguard Worker  *       -  TextureStorage3D
5093*35238bceSAndroid Build Coastguard Worker  *      and DSA SubImage functions:
5094*35238bceSAndroid Build Coastguard Worker  *       -  TextureSubImage1D,
5095*35238bceSAndroid Build Coastguard Worker  *       -  TextureSubImage2D,
5096*35238bceSAndroid Build Coastguard Worker  *       -  TextureSubImage3D.
5097*35238bceSAndroid Build Coastguard Worker  *
5098*35238bceSAndroid Build Coastguard Worker  *      Test following internal formats:
5099*35238bceSAndroid Build Coastguard Worker  *       -  R8,
5100*35238bceSAndroid Build Coastguard Worker  *       -  R16,
5101*35238bceSAndroid Build Coastguard Worker  *       -  R16F,
5102*35238bceSAndroid Build Coastguard Worker  *       -  R32F,
5103*35238bceSAndroid Build Coastguard Worker  *       -  R8I,
5104*35238bceSAndroid Build Coastguard Worker  *       -  R16I,
5105*35238bceSAndroid Build Coastguard Worker  *       -  R32I,
5106*35238bceSAndroid Build Coastguard Worker  *       -  R8UI,
5107*35238bceSAndroid Build Coastguard Worker  *       -  R16UI,
5108*35238bceSAndroid Build Coastguard Worker  *       -  R32UI,
5109*35238bceSAndroid Build Coastguard Worker  *       -  RG8,
5110*35238bceSAndroid Build Coastguard Worker  *       -  RG16,
5111*35238bceSAndroid Build Coastguard Worker  *       -  RG16F,
5112*35238bceSAndroid Build Coastguard Worker  *       -  RG32F,
5113*35238bceSAndroid Build Coastguard Worker  *       -  RG8I,
5114*35238bceSAndroid Build Coastguard Worker  *       -  RG16I,
5115*35238bceSAndroid Build Coastguard Worker  *       -  RG32I,
5116*35238bceSAndroid Build Coastguard Worker  *       -  RG8UI,
5117*35238bceSAndroid Build Coastguard Worker  *       -  RG16UI,
5118*35238bceSAndroid Build Coastguard Worker  *       -  RG32UI,
5119*35238bceSAndroid Build Coastguard Worker  *       -  RGB32F,
5120*35238bceSAndroid Build Coastguard Worker  *       -  RGB32I,
5121*35238bceSAndroid Build Coastguard Worker  *       -  RGB32UI,
5122*35238bceSAndroid Build Coastguard Worker  *       -  RGBA8,
5123*35238bceSAndroid Build Coastguard Worker  *       -  RGBA16,
5124*35238bceSAndroid Build Coastguard Worker  *       -  RGBA16F,
5125*35238bceSAndroid Build Coastguard Worker  *       -  RGBA32F,
5126*35238bceSAndroid Build Coastguard Worker  *       -  RGBA8I,
5127*35238bceSAndroid Build Coastguard Worker  *       -  RGBA16I,
5128*35238bceSAndroid Build Coastguard Worker  *       -  RGBA32I,
5129*35238bceSAndroid Build Coastguard Worker  *       -  RGBA8UI,
5130*35238bceSAndroid Build Coastguard Worker  *       -  RGBA16UI,
5131*35238bceSAndroid Build Coastguard Worker  *       -  RGBA32UI.
5132*35238bceSAndroid Build Coastguard Worker  *
5133*35238bceSAndroid Build Coastguard Worker  *      Create texture and prepare its storage with the tested function and
5134*35238bceSAndroid Build Coastguard Worker  *      reference data. The texture dimensions shall be 2x3x4 texels in
5135*35238bceSAndroid Build Coastguard Worker  *      corresponding directions (if available).
5136*35238bceSAndroid Build Coastguard Worker  *
5137*35238bceSAndroid Build Coastguard Worker  *      Prepare GLSL program with fragment shader which fetches texture and passes
5138*35238bceSAndroid Build Coastguard Worker  *      it to the framebuffer in serialized way.
5139*35238bceSAndroid Build Coastguard Worker  *
5140*35238bceSAndroid Build Coastguard Worker  *      Prepare framebuffer 24 x 1 pixels in size.
5141*35238bceSAndroid Build Coastguard Worker  *
5142*35238bceSAndroid Build Coastguard Worker  *      Make draw call with prepared texture and program. Fetch framebuffer and
5143*35238bceSAndroid Build Coastguard Worker  *      compare values with the reference data. Expect equality.
5144*35238bceSAndroid Build Coastguard Worker  *
5145*35238bceSAndroid Build Coastguard Worker  *      Release all objects.
5146*35238bceSAndroid Build Coastguard Worker  */
5147*35238bceSAndroid Build Coastguard Worker template <typename T, glw::GLint S, bool N, glw::GLuint D, bool I>
5148*35238bceSAndroid Build Coastguard Worker class StorageAndSubImageTest : public deqp::TestCase, Reference
5149*35238bceSAndroid Build Coastguard Worker {
5150*35238bceSAndroid Build Coastguard Worker public:
5151*35238bceSAndroid Build Coastguard Worker     /* Public member functions. */
5152*35238bceSAndroid Build Coastguard Worker     StorageAndSubImageTest(deqp::Context &context, const char *name);
5153*35238bceSAndroid Build Coastguard Worker 
5154*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
5155*35238bceSAndroid Build Coastguard Worker 
5156*35238bceSAndroid Build Coastguard Worker private:
5157*35238bceSAndroid Build Coastguard Worker     /* Private constructors. */
5158*35238bceSAndroid Build Coastguard Worker     StorageAndSubImageTest(const StorageAndSubImageTest &other);
5159*35238bceSAndroid Build Coastguard Worker     StorageAndSubImageTest &operator=(const StorageAndSubImageTest &other);
5160*35238bceSAndroid Build Coastguard Worker 
5161*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
5162*35238bceSAndroid Build Coastguard Worker     static glw::GLuint TestReferenceDataCount();
5163*35238bceSAndroid Build Coastguard Worker 
5164*35238bceSAndroid Build Coastguard Worker     static glw::GLuint TestReferenceDataWidth();
5165*35238bceSAndroid Build Coastguard Worker 
5166*35238bceSAndroid Build Coastguard Worker     static glw::GLuint TestReferenceDataHeight();
5167*35238bceSAndroid Build Coastguard Worker 
5168*35238bceSAndroid Build Coastguard Worker     static glw::GLuint TestReferenceDataDepth();
5169*35238bceSAndroid Build Coastguard Worker 
5170*35238bceSAndroid Build Coastguard Worker     static glw::GLuint TestReferenceDataSize();
5171*35238bceSAndroid Build Coastguard Worker 
5172*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *FragmentShaderDeclaration();
5173*35238bceSAndroid Build Coastguard Worker 
5174*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *FragmentShaderTail();
5175*35238bceSAndroid Build Coastguard Worker 
5176*35238bceSAndroid Build Coastguard Worker     static glw::GLenum TextureTarget();
5177*35238bceSAndroid Build Coastguard Worker 
5178*35238bceSAndroid Build Coastguard Worker     bool TextureSubImage(glw::GLenum target, glw::GLuint texture, glw::GLint level, glw::GLsizei width,
5179*35238bceSAndroid Build Coastguard Worker                          glw::GLsizei height, glw::GLsizei depth, glw::GLenum format, glw::GLenum type,
5180*35238bceSAndroid Build Coastguard Worker                          const glw::GLvoid *data);
5181*35238bceSAndroid Build Coastguard Worker 
5182*35238bceSAndroid Build Coastguard Worker     bool TextureStorage(glw::GLenum target, glw::GLuint texture, glw::GLsizei levels, glw::GLenum internalformat,
5183*35238bceSAndroid Build Coastguard Worker                         glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth);
5184*35238bceSAndroid Build Coastguard Worker 
5185*35238bceSAndroid Build Coastguard Worker     bool CreateTexture();
5186*35238bceSAndroid Build Coastguard Worker 
5187*35238bceSAndroid Build Coastguard Worker     bool Check();
5188*35238bceSAndroid Build Coastguard Worker 
5189*35238bceSAndroid Build Coastguard Worker     bool Test();
5190*35238bceSAndroid Build Coastguard Worker 
5191*35238bceSAndroid Build Coastguard Worker     void PrepareFramebuffer(const glw::GLenum internal_format);
5192*35238bceSAndroid Build Coastguard Worker     void PrepareProgram(const glw::GLchar *variable_declaration, const glw::GLchar *tail);
5193*35238bceSAndroid Build Coastguard Worker     void PrepareVertexArray();
5194*35238bceSAndroid Build Coastguard Worker     void Draw();
5195*35238bceSAndroid Build Coastguard Worker     void CleanTexture();
5196*35238bceSAndroid Build Coastguard Worker     void CleanFramebuffer();
5197*35238bceSAndroid Build Coastguard Worker     void CleanProgram();
5198*35238bceSAndroid Build Coastguard Worker     void CleanErrors();
5199*35238bceSAndroid Build Coastguard Worker     void CleanVertexArray();
5200*35238bceSAndroid Build Coastguard Worker 
5201*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
5202*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo;
5203*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo;
5204*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_po;
5205*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to;
5206*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_vao;
5207*35238bceSAndroid Build Coastguard Worker 
5208*35238bceSAndroid Build Coastguard Worker     /* Private static constants. */
5209*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_vertex_shader;
5210*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_head;
5211*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_1D_fdecl_lowp;
5212*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_1D_idecl_lowp;
5213*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_1D_udecl_lowp;
5214*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_1D_fdecl_mediump;
5215*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_1D_idecl_mediump;
5216*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_1D_udecl_mediump;
5217*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_1D_fdecl_highp;
5218*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_1D_idecl_highp;
5219*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_1D_udecl_highp;
5220*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_2D_fdecl_lowp;
5221*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_2D_idecl_lowp;
5222*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_2D_udecl_lowp;
5223*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_2D_fdecl_mediump;
5224*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_2D_idecl_mediump;
5225*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_2D_udecl_mediump;
5226*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_2D_fdecl_highp;
5227*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_2D_idecl_highp;
5228*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_2D_udecl_highp;
5229*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_3D_fdecl_lowp;
5230*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_3D_idecl_lowp;
5231*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_3D_udecl_lowp;
5232*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_3D_fdecl_mediump;
5233*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_3D_idecl_mediump;
5234*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_3D_udecl_mediump;
5235*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_3D_fdecl_highp;
5236*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_3D_idecl_highp;
5237*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_3D_udecl_highp;
5238*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_1D_tail;
5239*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_2D_tail;
5240*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_3D_tail;
5241*35238bceSAndroid Build Coastguard Worker };
5242*35238bceSAndroid Build Coastguard Worker /* StorageAndSubImageTest class */
5243*35238bceSAndroid Build Coastguard Worker 
5244*35238bceSAndroid Build Coastguard Worker /** class StorageMultisampleTest
5245*35238bceSAndroid Build Coastguard Worker  *
5246*35238bceSAndroid Build Coastguard Worker  *      @tparam T      Type.
5247*35238bceSAndroid Build Coastguard Worker  *      @tparam S      Size.
5248*35238bceSAndroid Build Coastguard Worker  *      @tparam N      Is normalized.
5249*35238bceSAndroid Build Coastguard Worker  *      @tparam D      Texture dimension.
5250*35238bceSAndroid Build Coastguard Worker  *
5251*35238bceSAndroid Build Coastguard Worker  *      Make test for following DSA functions:
5252*35238bceSAndroid Build Coastguard Worker  *       -  TextureStorage2DMultisample and
5253*35238bceSAndroid Build Coastguard Worker  *       -  TextureStorage3DMultisample.
5254*35238bceSAndroid Build Coastguard Worker  *
5255*35238bceSAndroid Build Coastguard Worker  *      Test following internal formats:
5256*35238bceSAndroid Build Coastguard Worker  *       -  R8,
5257*35238bceSAndroid Build Coastguard Worker  *       -  R16,
5258*35238bceSAndroid Build Coastguard Worker  *       -  R16F,
5259*35238bceSAndroid Build Coastguard Worker  *       -  R32F,
5260*35238bceSAndroid Build Coastguard Worker  *       -  R8I,
5261*35238bceSAndroid Build Coastguard Worker  *       -  R16I,
5262*35238bceSAndroid Build Coastguard Worker  *       -  R32I,
5263*35238bceSAndroid Build Coastguard Worker  *       -  R8UI,
5264*35238bceSAndroid Build Coastguard Worker  *       -  R16UI,
5265*35238bceSAndroid Build Coastguard Worker  *       -  R32UI,
5266*35238bceSAndroid Build Coastguard Worker  *       -  RG8,
5267*35238bceSAndroid Build Coastguard Worker  *       -  RG16,
5268*35238bceSAndroid Build Coastguard Worker  *       -  RG16F,
5269*35238bceSAndroid Build Coastguard Worker  *       -  RG32F,
5270*35238bceSAndroid Build Coastguard Worker  *       -  RG8I,
5271*35238bceSAndroid Build Coastguard Worker  *       -  RG16I,
5272*35238bceSAndroid Build Coastguard Worker  *       -  RG32I,
5273*35238bceSAndroid Build Coastguard Worker  *       -  RG8UI,
5274*35238bceSAndroid Build Coastguard Worker  *       -  RG16UI,
5275*35238bceSAndroid Build Coastguard Worker  *       -  RG32UI,
5276*35238bceSAndroid Build Coastguard Worker  *       -  RGB32F,
5277*35238bceSAndroid Build Coastguard Worker  *       -  RGB32I,
5278*35238bceSAndroid Build Coastguard Worker  *       -  RGB32UI,
5279*35238bceSAndroid Build Coastguard Worker  *       -  RGBA8,
5280*35238bceSAndroid Build Coastguard Worker  *       -  RGBA16,
5281*35238bceSAndroid Build Coastguard Worker  *       -  RGBA16F,
5282*35238bceSAndroid Build Coastguard Worker  *       -  RGBA32F,
5283*35238bceSAndroid Build Coastguard Worker  *       -  RGBA8I,
5284*35238bceSAndroid Build Coastguard Worker  *       -  RGBA16I,
5285*35238bceSAndroid Build Coastguard Worker  *       -  RGBA32I,
5286*35238bceSAndroid Build Coastguard Worker  *       -  RGBA8UI,
5287*35238bceSAndroid Build Coastguard Worker  *       -  RGBA16UI,
5288*35238bceSAndroid Build Coastguard Worker  *       -  RGBA32UI.
5289*35238bceSAndroid Build Coastguard Worker  *
5290*35238bceSAndroid Build Coastguard Worker  *      Create multisample texture and prepare its storage with the tested
5291*35238bceSAndroid Build Coastguard Worker  *      function. The texture dimensions shall be 2x3x4 texels in corresponding
5292*35238bceSAndroid Build Coastguard Worker  *      directions (if available) and two samples per texel.
5293*35238bceSAndroid Build Coastguard Worker  *
5294*35238bceSAndroid Build Coastguard Worker  *      Prepare two framebuffers. The first one with the multisample texture
5295*35238bceSAndroid Build Coastguard Worker  *      as a color attachment with size 2x3 pixels and 4 color attachments
5296*35238bceSAndroid Build Coastguard Worker  *      (layers). The second one with non-multisample renderbuffer storage
5297*35238bceSAndroid Build Coastguard Worker  *      similar in size.
5298*35238bceSAndroid Build Coastguard Worker  *
5299*35238bceSAndroid Build Coastguard Worker  *      Prepare GLSL program which draws explicitly reference data to
5300*35238bceSAndroid Build Coastguard Worker  *      multisample texture framebuffer.
5301*35238bceSAndroid Build Coastguard Worker  *
5302*35238bceSAndroid Build Coastguard Worker  *      Use program to draw the reference data into multisample texture.
5303*35238bceSAndroid Build Coastguard Worker  *
5304*35238bceSAndroid Build Coastguard Worker  *      Prepare second GLSL program with fragment shader which passes samples of
5305*35238bceSAndroid Build Coastguard Worker  *      the input texture to the separate framebuffer pixels.
5306*35238bceSAndroid Build Coastguard Worker  *
5307*35238bceSAndroid Build Coastguard Worker  *      Use the second program to draw the multisample texture into
5308*35238bceSAndroid Build Coastguard Worker  *      renderbuffer.
5309*35238bceSAndroid Build Coastguard Worker  *
5310*35238bceSAndroid Build Coastguard Worker  *      Fetch framebuffer data and compare with the reference values. Expect
5311*35238bceSAndroid Build Coastguard Worker  *      equality.
5312*35238bceSAndroid Build Coastguard Worker  *
5313*35238bceSAndroid Build Coastguard Worker  *      Release all objects.
5314*35238bceSAndroid Build Coastguard Worker  */
5315*35238bceSAndroid Build Coastguard Worker template <typename T, glw::GLint S, bool N, glw::GLuint D>
5316*35238bceSAndroid Build Coastguard Worker class StorageMultisampleTest : public deqp::TestCase, Reference
5317*35238bceSAndroid Build Coastguard Worker {
5318*35238bceSAndroid Build Coastguard Worker public:
5319*35238bceSAndroid Build Coastguard Worker     /* Public member functions. */
5320*35238bceSAndroid Build Coastguard Worker     StorageMultisampleTest(deqp::Context &context, const char *name);
5321*35238bceSAndroid Build Coastguard Worker 
5322*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
5323*35238bceSAndroid Build Coastguard Worker 
5324*35238bceSAndroid Build Coastguard Worker private:
5325*35238bceSAndroid Build Coastguard Worker     /* Private constructors. */
5326*35238bceSAndroid Build Coastguard Worker     StorageMultisampleTest(const StorageMultisampleTest &other);
5327*35238bceSAndroid Build Coastguard Worker     StorageMultisampleTest &operator=(const StorageMultisampleTest &other);
5328*35238bceSAndroid Build Coastguard Worker 
5329*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
5330*35238bceSAndroid Build Coastguard Worker     static glw::GLuint TestReferenceDataCount();
5331*35238bceSAndroid Build Coastguard Worker 
5332*35238bceSAndroid Build Coastguard Worker     static glw::GLuint TestReferenceDataWidth();
5333*35238bceSAndroid Build Coastguard Worker 
5334*35238bceSAndroid Build Coastguard Worker     static glw::GLuint TestReferenceDataHeight();
5335*35238bceSAndroid Build Coastguard Worker 
5336*35238bceSAndroid Build Coastguard Worker     static glw::GLuint TestReferenceDataDepth();
5337*35238bceSAndroid Build Coastguard Worker 
5338*35238bceSAndroid Build Coastguard Worker     static glw::GLuint TestReferenceDataSize();
5339*35238bceSAndroid Build Coastguard Worker 
5340*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *FragmentShaderDeclarationMultisample();
5341*35238bceSAndroid Build Coastguard Worker 
5342*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *FragmentShaderDeclarationAuxiliary();
5343*35238bceSAndroid Build Coastguard Worker 
5344*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *FragmentShaderTail();
5345*35238bceSAndroid Build Coastguard Worker 
5346*35238bceSAndroid Build Coastguard Worker     static glw::GLenum InputTextureTarget();
5347*35238bceSAndroid Build Coastguard Worker 
5348*35238bceSAndroid Build Coastguard Worker     static glw::GLenum MultisampleTextureTarget();
5349*35238bceSAndroid Build Coastguard Worker 
5350*35238bceSAndroid Build Coastguard Worker     void InputTextureImage(const glw::GLenum internal_format, const glw::GLuint width, const glw::GLuint height,
5351*35238bceSAndroid Build Coastguard Worker                            const glw::GLuint depth, const glw::GLenum format, const glw::GLenum type,
5352*35238bceSAndroid Build Coastguard Worker                            const glw::GLvoid *data);
5353*35238bceSAndroid Build Coastguard Worker 
5354*35238bceSAndroid Build Coastguard Worker     void CreateInputTexture();
5355*35238bceSAndroid Build Coastguard Worker 
5356*35238bceSAndroid Build Coastguard Worker     bool Check();
5357*35238bceSAndroid Build Coastguard Worker 
5358*35238bceSAndroid Build Coastguard Worker     bool Test();
5359*35238bceSAndroid Build Coastguard Worker 
5360*35238bceSAndroid Build Coastguard Worker     bool PrepareFramebufferMultisample(const glw::GLenum internal_format);
5361*35238bceSAndroid Build Coastguard Worker 
5362*35238bceSAndroid Build Coastguard Worker     void PrepareFramebufferAuxiliary(const glw::GLenum internal_format);
5363*35238bceSAndroid Build Coastguard Worker 
5364*35238bceSAndroid Build Coastguard Worker     glw::GLuint PrepareProgram(const glw::GLchar *variable_declaration, const glw::GLchar *tail);
5365*35238bceSAndroid Build Coastguard Worker     void PrepareVertexArray();
5366*35238bceSAndroid Build Coastguard Worker 
5367*35238bceSAndroid Build Coastguard Worker     void Draw();
5368*35238bceSAndroid Build Coastguard Worker 
5369*35238bceSAndroid Build Coastguard Worker     void CleanInputTexture();
5370*35238bceSAndroid Build Coastguard Worker     void CleanAuxiliaryTexture();
5371*35238bceSAndroid Build Coastguard Worker     void CleanFramebuffers();
5372*35238bceSAndroid Build Coastguard Worker     void CleanPrograms();
5373*35238bceSAndroid Build Coastguard Worker     void CleanErrors();
5374*35238bceSAndroid Build Coastguard Worker     void CleanVertexArray();
5375*35238bceSAndroid Build Coastguard Worker 
5376*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
5377*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo_ms;
5378*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo_aux;
5379*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_ms;
5380*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_po_ms;
5381*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_po_aux;
5382*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to;
5383*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_aux;
5384*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_vao;
5385*35238bceSAndroid Build Coastguard Worker 
5386*35238bceSAndroid Build Coastguard Worker     /* Private static constants. */
5387*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_vertex_shader;
5388*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_head;
5389*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_ms_2D_fdecl_lowp;
5390*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_ms_2D_idecl_lowp;
5391*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_ms_2D_udecl_lowp;
5392*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_ms_2D_fdecl_mediump;
5393*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_ms_2D_idecl_mediump;
5394*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_ms_2D_udecl_mediump;
5395*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_ms_2D_fdecl_highp;
5396*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_ms_2D_idecl_highp;
5397*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_ms_2D_udecl_highp;
5398*35238bceSAndroid Build Coastguard Worker 
5399*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_ms_3D_fdecl_lowp;
5400*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_ms_3D_idecl_lowp;
5401*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_ms_3D_udecl_lowp;
5402*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_ms_3D_fdecl_mediump;
5403*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_ms_3D_idecl_mediump;
5404*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_ms_3D_udecl_mediump;
5405*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_ms_3D_fdecl_highp;
5406*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_ms_3D_idecl_highp;
5407*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_ms_3D_udecl_highp;
5408*35238bceSAndroid Build Coastguard Worker 
5409*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_aux_2D_fdecl_lowp;
5410*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_aux_2D_idecl_lowp;
5411*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_aux_2D_udecl_lowp;
5412*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_aux_2D_fdecl_mediump;
5413*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_aux_2D_idecl_mediump;
5414*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_aux_2D_udecl_mediump;
5415*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_aux_2D_fdecl_highp;
5416*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_aux_2D_idecl_highp;
5417*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_aux_2D_udecl_highp;
5418*35238bceSAndroid Build Coastguard Worker 
5419*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_aux_3D_fdecl_lowp;
5420*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_aux_3D_idecl_lowp;
5421*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_aux_3D_udecl_lowp;
5422*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_aux_3D_fdecl_mediump;
5423*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_aux_3D_idecl_mediump;
5424*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_aux_3D_udecl_mediump;
5425*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_aux_3D_fdecl_highp;
5426*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_aux_3D_idecl_highp;
5427*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_aux_3D_udecl_highp;
5428*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_tail_2D;
5429*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_tail_3D;
5430*35238bceSAndroid Build Coastguard Worker };
5431*35238bceSAndroid Build Coastguard Worker /* StorageMultisampleTest class */
5432*35238bceSAndroid Build Coastguard Worker 
5433*35238bceSAndroid Build Coastguard Worker /**  @class CompressedSubImage
5434*35238bceSAndroid Build Coastguard Worker  *
5435*35238bceSAndroid Build Coastguard Worker  *    Make test for following DSA functions:
5436*35238bceSAndroid Build Coastguard Worker  *        -  CompressedTextureSubImage1D,
5437*35238bceSAndroid Build Coastguard Worker  *        -  CompressedTextureSubImage2D,
5438*35238bceSAndroid Build Coastguard Worker  *        -  CompressedTextureSubImage3D.
5439*35238bceSAndroid Build Coastguard Worker  *
5440*35238bceSAndroid Build Coastguard Worker  *    Make test for following uncompressed internal formats:
5441*35238bceSAndroid Build Coastguard Worker  *        -  R8,
5442*35238bceSAndroid Build Coastguard Worker  *        -  R8_SNORM,
5443*35238bceSAndroid Build Coastguard Worker  *        -  R16,
5444*35238bceSAndroid Build Coastguard Worker  *        -  R16_SNORM,
5445*35238bceSAndroid Build Coastguard Worker  *        -  RG8,
5446*35238bceSAndroid Build Coastguard Worker  *        -  RG8_SNORM,
5447*35238bceSAndroid Build Coastguard Worker  *        -  RG16,
5448*35238bceSAndroid Build Coastguard Worker  *        -  RG16_SNORM,
5449*35238bceSAndroid Build Coastguard Worker  *        -  R3_G3_B2,
5450*35238bceSAndroid Build Coastguard Worker  *        -  RGB4,
5451*35238bceSAndroid Build Coastguard Worker  *        -  RGB5,
5452*35238bceSAndroid Build Coastguard Worker  *        -  RGB8,
5453*35238bceSAndroid Build Coastguard Worker  *        -  RGB8_SNORM,
5454*35238bceSAndroid Build Coastguard Worker  *        -  RGB10,
5455*35238bceSAndroid Build Coastguard Worker  *        -  RGB12,
5456*35238bceSAndroid Build Coastguard Worker  *        -  RGB16_SNORM,
5457*35238bceSAndroid Build Coastguard Worker  *        -  RGBA2,
5458*35238bceSAndroid Build Coastguard Worker  *        -  RGBA4,
5459*35238bceSAndroid Build Coastguard Worker  *        -  RGB5_A1,
5460*35238bceSAndroid Build Coastguard Worker  *        -  RGBA8,
5461*35238bceSAndroid Build Coastguard Worker  *        -  RGBA8_SNORM,
5462*35238bceSAndroid Build Coastguard Worker  *        -  RGB10_A2,
5463*35238bceSAndroid Build Coastguard Worker  *        -  RGB10_A2UI,
5464*35238bceSAndroid Build Coastguard Worker  *        -  RGBA12,
5465*35238bceSAndroid Build Coastguard Worker  *        -  RGBA16,
5466*35238bceSAndroid Build Coastguard Worker  *        -  SRGB8,
5467*35238bceSAndroid Build Coastguard Worker  *        -  SRGB8_ALPHA8,
5468*35238bceSAndroid Build Coastguard Worker  *        -  R16F,
5469*35238bceSAndroid Build Coastguard Worker  *        -  RG16F,
5470*35238bceSAndroid Build Coastguard Worker  *        -  RGB16F,
5471*35238bceSAndroid Build Coastguard Worker  *        -  RGBA16F,
5472*35238bceSAndroid Build Coastguard Worker  *        -  R32F,
5473*35238bceSAndroid Build Coastguard Worker  *        -  RG32F,
5474*35238bceSAndroid Build Coastguard Worker  *        -  RGB32F,
5475*35238bceSAndroid Build Coastguard Worker  *        -  RGBA32F,
5476*35238bceSAndroid Build Coastguard Worker  *        -  R11F_G11F_B10F,
5477*35238bceSAndroid Build Coastguard Worker  *        -  RGB9_E5,
5478*35238bceSAndroid Build Coastguard Worker  *        -  R8I,
5479*35238bceSAndroid Build Coastguard Worker  *        -  R8UI,
5480*35238bceSAndroid Build Coastguard Worker  *        -  R16I,
5481*35238bceSAndroid Build Coastguard Worker  *        -  R16UI,
5482*35238bceSAndroid Build Coastguard Worker  *        -  R32I,
5483*35238bceSAndroid Build Coastguard Worker  *        -  R32UI,
5484*35238bceSAndroid Build Coastguard Worker  *        -  RG8I,
5485*35238bceSAndroid Build Coastguard Worker  *        -  RG8UI,
5486*35238bceSAndroid Build Coastguard Worker  *        -  RG16I,
5487*35238bceSAndroid Build Coastguard Worker  *        -  RG16UI,
5488*35238bceSAndroid Build Coastguard Worker  *        -  RG32I,
5489*35238bceSAndroid Build Coastguard Worker  *        -  RG32UI,
5490*35238bceSAndroid Build Coastguard Worker  *        -  RGB8I,
5491*35238bceSAndroid Build Coastguard Worker  *        -  RGB8UI,
5492*35238bceSAndroid Build Coastguard Worker  *        -  RGB16I,
5493*35238bceSAndroid Build Coastguard Worker  *        -  RGB16UI,
5494*35238bceSAndroid Build Coastguard Worker  *        -  RGB32I,
5495*35238bceSAndroid Build Coastguard Worker  *        -  RGB32UI,
5496*35238bceSAndroid Build Coastguard Worker  *        -  RGBA8I,
5497*35238bceSAndroid Build Coastguard Worker  *        -  RGBA8UI,
5498*35238bceSAndroid Build Coastguard Worker  *        -  RGBA16I,
5499*35238bceSAndroid Build Coastguard Worker  *        -  RGBA16UI,
5500*35238bceSAndroid Build Coastguard Worker  *        -  RGBA32I,
5501*35238bceSAndroid Build Coastguard Worker  *        -  RGBA32UI.
5502*35238bceSAndroid Build Coastguard Worker  *    and compressed internal formats:
5503*35238bceSAndroid Build Coastguard Worker  *        -  COMPRESSED_RGBA8_ETC2_EAC.
5504*35238bceSAndroid Build Coastguard Worker  *
5505*35238bceSAndroid Build Coastguard Worker  *    Create texture and setup its storage and data using tested function with
5506*35238bceSAndroid Build Coastguard Worker  *    size 2x3 pixels.
5507*35238bceSAndroid Build Coastguard Worker  *
5508*35238bceSAndroid Build Coastguard Worker  *    Prepare framebuffer with renderbuffer color attachment with floating
5509*35238bceSAndroid Build Coastguard Worker  *    point internal format and with size 2x3 pixels
5510*35238bceSAndroid Build Coastguard Worker  *
5511*35238bceSAndroid Build Coastguard Worker  *    Prepare GLSL program with fragment shader which passes input texture to
5512*35238bceSAndroid Build Coastguard Worker  *    the framebuffer.
5513*35238bceSAndroid Build Coastguard Worker  *
5514*35238bceSAndroid Build Coastguard Worker  *    Draw a full screen quad with the prepared texture, program and
5515*35238bceSAndroid Build Coastguard Worker  *    framebuffer. Read the framebuffer content. Compare framebuffer's values
5516*35238bceSAndroid Build Coastguard Worker  *    with the reference values. Take normalization and precision into
5517*35238bceSAndroid Build Coastguard Worker  *    account. Expect equality.
5518*35238bceSAndroid Build Coastguard Worker  *
5519*35238bceSAndroid Build Coastguard Worker  *    Release all objects.
5520*35238bceSAndroid Build Coastguard Worker  */
5521*35238bceSAndroid Build Coastguard Worker class CompressedSubImageTest : public deqp::TestCase
5522*35238bceSAndroid Build Coastguard Worker {
5523*35238bceSAndroid Build Coastguard Worker public:
5524*35238bceSAndroid Build Coastguard Worker     /* Public member functions. */
5525*35238bceSAndroid Build Coastguard Worker     CompressedSubImageTest(deqp::Context &context);
5526*35238bceSAndroid Build Coastguard Worker 
5527*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
5528*35238bceSAndroid Build Coastguard Worker 
5529*35238bceSAndroid Build Coastguard Worker private:
5530*35238bceSAndroid Build Coastguard Worker     /* Private constructors. */
5531*35238bceSAndroid Build Coastguard Worker     CompressedSubImageTest(const CompressedSubImageTest &other);
5532*35238bceSAndroid Build Coastguard Worker     CompressedSubImageTest &operator=(const CompressedSubImageTest &other);
5533*35238bceSAndroid Build Coastguard Worker 
5534*35238bceSAndroid Build Coastguard Worker     void CreateTextures(glw::GLenum target);
5535*35238bceSAndroid Build Coastguard Worker 
5536*35238bceSAndroid Build Coastguard Worker     template <glw::GLuint D>
5537*35238bceSAndroid Build Coastguard Worker     glw::GLenum TextureTarget();
5538*35238bceSAndroid Build Coastguard Worker 
5539*35238bceSAndroid Build Coastguard Worker     template <glw::GLuint D>
5540*35238bceSAndroid Build Coastguard Worker     bool TextureImage(glw::GLint internalformat);
5541*35238bceSAndroid Build Coastguard Worker 
5542*35238bceSAndroid Build Coastguard Worker     template <glw::GLuint D>
5543*35238bceSAndroid Build Coastguard Worker     void CompressedTexImage(glw::GLint internalformat);
5544*35238bceSAndroid Build Coastguard Worker 
5545*35238bceSAndroid Build Coastguard Worker     template <glw::GLuint D>
5546*35238bceSAndroid Build Coastguard Worker     bool CompressedTextureSubImage(glw::GLint internalformat);
5547*35238bceSAndroid Build Coastguard Worker 
5548*35238bceSAndroid Build Coastguard Worker     template <glw::GLuint D>
5549*35238bceSAndroid Build Coastguard Worker     bool PrepareReferenceData(glw::GLenum internalformat);
5550*35238bceSAndroid Build Coastguard Worker 
5551*35238bceSAndroid Build Coastguard Worker     template <glw::GLuint D>
5552*35238bceSAndroid Build Coastguard Worker     void PrepareStorage(glw::GLenum internalformat);
5553*35238bceSAndroid Build Coastguard Worker 
5554*35238bceSAndroid Build Coastguard Worker     template <glw::GLuint D>
5555*35238bceSAndroid Build Coastguard Worker     void PrepareCompressedStorage(glw::GLenum internalformat);
5556*35238bceSAndroid Build Coastguard Worker 
5557*35238bceSAndroid Build Coastguard Worker     template <glw::GLuint D>
5558*35238bceSAndroid Build Coastguard Worker     bool CheckData(glw::GLenum internalformat);
5559*35238bceSAndroid Build Coastguard Worker     void CleanAll();
5560*35238bceSAndroid Build Coastguard Worker     std::string DataToString(glw::GLuint count, const glw::GLubyte data[]);
5561*35238bceSAndroid Build Coastguard Worker 
5562*35238bceSAndroid Build Coastguard Worker     template <glw::GLuint D>
5563*35238bceSAndroid Build Coastguard Worker     bool Test(glw::GLenum internalformat, bool can_be_unsupported);
5564*35238bceSAndroid Build Coastguard Worker 
5565*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
5566*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to;
5567*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_aux;
5568*35238bceSAndroid Build Coastguard Worker     glw::GLubyte *m_compressed_texture_data;
5569*35238bceSAndroid Build Coastguard Worker     glw::GLubyte *m_reference;
5570*35238bceSAndroid Build Coastguard Worker     glw::GLubyte *m_result;
5571*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_reference_size;
5572*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_reference_internalformat;
5573*35238bceSAndroid Build Coastguard Worker 
5574*35238bceSAndroid Build Coastguard Worker     /* Private static constants. */
5575*35238bceSAndroid Build Coastguard Worker     static const glw::GLubyte s_texture_data[];
5576*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_texture_width;
5577*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_texture_height;
5578*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_texture_depth;
5579*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_block_count;
5580*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_block_2d_size_x;
5581*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_block_2d_size_y;
5582*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_block_3d_size;
5583*35238bceSAndroid Build Coastguard Worker };
5584*35238bceSAndroid Build Coastguard Worker /* CompressedSubImageTest class */
5585*35238bceSAndroid Build Coastguard Worker 
5586*35238bceSAndroid Build Coastguard Worker /** @class CopyTest
5587*35238bceSAndroid Build Coastguard Worker  *
5588*35238bceSAndroid Build Coastguard Worker  *      Make test for following DSA functions:
5589*35238bceSAndroid Build Coastguard Worker  *       -  CopyTextureSubImage1D,
5590*35238bceSAndroid Build Coastguard Worker  *       -  CopyTextureSubImage2D and
5591*35238bceSAndroid Build Coastguard Worker  *       -  CopyTextureSubImage3D.
5592*35238bceSAndroid Build Coastguard Worker  *
5593*35238bceSAndroid Build Coastguard Worker  *      Prepare two textures 2x3x4 texels in size for corresponding directions
5594*35238bceSAndroid Build Coastguard Worker  *      (if available). Setup the first one with reference data.
5595*35238bceSAndroid Build Coastguard Worker  *
5596*35238bceSAndroid Build Coastguard Worker  *      Prepare framebuffer with the first texture attached to the a color
5597*35238bceSAndroid Build Coastguard Worker  *      attachment point. Bind the framebuffer.
5598*35238bceSAndroid Build Coastguard Worker  *
5599*35238bceSAndroid Build Coastguard Worker  *      Copy framebuffer content to the texture using tested function. The
5600*35238bceSAndroid Build Coastguard Worker  *      images shall be copied in ranges, two per direction (to test offsets,
5601*35238bceSAndroid Build Coastguard Worker  *      positions and size variables). For 3D textures copy each layer
5602*35238bceSAndroid Build Coastguard Worker  *      substituting the framebuffer attachment.
5603*35238bceSAndroid Build Coastguard Worker  *
5604*35238bceSAndroid Build Coastguard Worker  *      After the copy fetch texture data and compare it with the reference
5605*35238bceSAndroid Build Coastguard Worker  *      values. Expect equality.
5606*35238bceSAndroid Build Coastguard Worker  *
5607*35238bceSAndroid Build Coastguard Worker  *      Release all objects.
5608*35238bceSAndroid Build Coastguard Worker  */
5609*35238bceSAndroid Build Coastguard Worker class CopyTest : public deqp::TestCase
5610*35238bceSAndroid Build Coastguard Worker {
5611*35238bceSAndroid Build Coastguard Worker public:
5612*35238bceSAndroid Build Coastguard Worker     /* Public member functions. */
5613*35238bceSAndroid Build Coastguard Worker     CopyTest(deqp::Context &context);
5614*35238bceSAndroid Build Coastguard Worker 
5615*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
5616*35238bceSAndroid Build Coastguard Worker 
5617*35238bceSAndroid Build Coastguard Worker private:
5618*35238bceSAndroid Build Coastguard Worker     /* Private constructors. */
5619*35238bceSAndroid Build Coastguard Worker     CopyTest(const CopyTest &other);
5620*35238bceSAndroid Build Coastguard Worker     CopyTest &operator=(const CopyTest &other);
5621*35238bceSAndroid Build Coastguard Worker 
5622*35238bceSAndroid Build Coastguard Worker     /* Private member functions. */
5623*35238bceSAndroid Build Coastguard Worker     template <glw::GLuint D>
5624*35238bceSAndroid Build Coastguard Worker     glw::GLenum TextureTarget();
5625*35238bceSAndroid Build Coastguard Worker 
5626*35238bceSAndroid Build Coastguard Worker     bool CopyTextureSubImage1DAndCheckErrors(glw::GLuint texture, glw::GLint level, glw::GLint xoffset, glw::GLint x,
5627*35238bceSAndroid Build Coastguard Worker                                              glw::GLint y, glw::GLsizei width);
5628*35238bceSAndroid Build Coastguard Worker     bool CopyTextureSubImage2DAndCheckErrors(glw::GLuint texture, glw::GLint level, glw::GLint xoffset,
5629*35238bceSAndroid Build Coastguard Worker                                              glw::GLint yoffset, glw::GLint x, glw::GLint y, glw::GLsizei width,
5630*35238bceSAndroid Build Coastguard Worker                                              glw::GLsizei height);
5631*35238bceSAndroid Build Coastguard Worker     bool CopyTextureSubImage3DAndCheckErrors(glw::GLuint texture, glw::GLint level, glw::GLint xoffset,
5632*35238bceSAndroid Build Coastguard Worker                                              glw::GLint yoffset, glw::GLint zoffset, glw::GLint x, glw::GLint y,
5633*35238bceSAndroid Build Coastguard Worker                                              glw::GLsizei width, glw::GLsizei height);
5634*35238bceSAndroid Build Coastguard Worker 
5635*35238bceSAndroid Build Coastguard Worker     template <glw::GLuint D>
5636*35238bceSAndroid Build Coastguard Worker     void CreateSourceTexture();
5637*35238bceSAndroid Build Coastguard Worker 
5638*35238bceSAndroid Build Coastguard Worker     template <glw::GLuint D>
5639*35238bceSAndroid Build Coastguard Worker     void CreateDestinationTexture();
5640*35238bceSAndroid Build Coastguard Worker 
5641*35238bceSAndroid Build Coastguard Worker     template <glw::GLuint D>
5642*35238bceSAndroid Build Coastguard Worker     void CreateSourceFramebuffer();
5643*35238bceSAndroid Build Coastguard Worker 
5644*35238bceSAndroid Build Coastguard Worker     template <glw::GLuint D>
5645*35238bceSAndroid Build Coastguard Worker     void CreateAll();
5646*35238bceSAndroid Build Coastguard Worker 
5647*35238bceSAndroid Build Coastguard Worker     template <glw::GLuint D>
5648*35238bceSAndroid Build Coastguard Worker     bool Test();
5649*35238bceSAndroid Build Coastguard Worker 
5650*35238bceSAndroid Build Coastguard Worker     bool CheckData(glw::GLenum target, glw::GLuint size);
5651*35238bceSAndroid Build Coastguard Worker     std::string DataToString(glw::GLuint count, const glw::GLubyte data[]);
5652*35238bceSAndroid Build Coastguard Worker     void CleanAll();
5653*35238bceSAndroid Build Coastguard Worker 
5654*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
5655*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo;
5656*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_src;
5657*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_dst;
5658*35238bceSAndroid Build Coastguard Worker     glw::GLubyte *m_result;
5659*35238bceSAndroid Build Coastguard Worker 
5660*35238bceSAndroid Build Coastguard Worker     /* Private static constants. */
5661*35238bceSAndroid Build Coastguard Worker     static const glw::GLubyte s_texture_data[];
5662*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_texture_width;
5663*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_texture_height;
5664*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_texture_depth;
5665*35238bceSAndroid Build Coastguard Worker };
5666*35238bceSAndroid Build Coastguard Worker /* CopyTest class */
5667*35238bceSAndroid Build Coastguard Worker 
5668*35238bceSAndroid Build Coastguard Worker /** @class GetSetParameterTest
5669*35238bceSAndroid Build Coastguard Worker  *
5670*35238bceSAndroid Build Coastguard Worker  *  Do following:
5671*35238bceSAndroid Build Coastguard Worker  *      Prepare texture object.
5672*35238bceSAndroid Build Coastguard Worker  *
5673*35238bceSAndroid Build Coastguard Worker  *      Prepare the following test case.
5674*35238bceSAndroid Build Coastguard Worker  *
5675*35238bceSAndroid Build Coastguard Worker  *          Prepare test case which sets a parameter to the desired value using
5676*35238bceSAndroid Build Coastguard Worker  *          one of the following functions (depending on the parameter type):
5677*35238bceSAndroid Build Coastguard Worker  *           -  TextureParameterf,
5678*35238bceSAndroid Build Coastguard Worker  *           -  TextureParameterfv,
5679*35238bceSAndroid Build Coastguard Worker  *           -  TextureParameteri,
5680*35238bceSAndroid Build Coastguard Worker  *           -  TextureParameterIiv,
5681*35238bceSAndroid Build Coastguard Worker  *           -  TextureParameterIuiv,
5682*35238bceSAndroid Build Coastguard Worker  *           -  TextureParameteriv.
5683*35238bceSAndroid Build Coastguard Worker  *
5684*35238bceSAndroid Build Coastguard Worker  *          Read back the texture parameter using one of the DSA-like functions
5685*35238bceSAndroid Build Coastguard Worker  *           -  GetTextureParameterfv,
5686*35238bceSAndroid Build Coastguard Worker  *           -  GetTextureParameteriv,
5687*35238bceSAndroid Build Coastguard Worker  *           -  GetTextureParameterIiv,
5688*35238bceSAndroid Build Coastguard Worker  *           -  GetTextureParameterIuiv.
5689*35238bceSAndroid Build Coastguard Worker  *          Expect equality.
5690*35238bceSAndroid Build Coastguard Worker  *
5691*35238bceSAndroid Build Coastguard Worker  *      Run the test case for following parameters and values:
5692*35238bceSAndroid Build Coastguard Worker  *       -  parameter DEPTH_STENCIL_TEXTURE_MODE with value DEPTH_COMPONENT;
5693*35238bceSAndroid Build Coastguard Worker  *       -  parameter TEXTURE_BASE_LEVEL with value 2;
5694*35238bceSAndroid Build Coastguard Worker  *       -  parameter TEXTURE_BORDER_COLOR with value {0.25, 0.5, 0.75, 1.0}
5695*35238bceSAndroid Build Coastguard Worker  *       -  parameter TEXTURE_COMPARE_FUNC with value LEQUAL;
5696*35238bceSAndroid Build Coastguard Worker  *       -  parameter TEXTURE_COMPARE_MODE with value COMPARE_REF_TO_TEXTURE;
5697*35238bceSAndroid Build Coastguard Worker  *       -  parameter TEXTURE_LOD_BIAS with value -2.0 (which is
5698*35238bceSAndroid Build Coastguard Worker  *          minimum required implementation maximum value);
5699*35238bceSAndroid Build Coastguard Worker  *       -  parameter TEXTURE_MIN_FILTER with value LINEAR_MIPMAP_NEAREST;
5700*35238bceSAndroid Build Coastguard Worker  *       -  parameter TEXTURE_MAG_FILTER with value NEAREST;
5701*35238bceSAndroid Build Coastguard Worker  *       -  parameter TEXTURE_MIN_LOD with value -100;
5702*35238bceSAndroid Build Coastguard Worker  *       -  parameter TEXTURE_MAX_LOD with value 100;
5703*35238bceSAndroid Build Coastguard Worker  *       -  parameter TEXTURE_MAX_LEVEL with value 100;
5704*35238bceSAndroid Build Coastguard Worker  *       -  parameter TEXTURE_SWIZZLE_R with value BLUE;
5705*35238bceSAndroid Build Coastguard Worker  *       -  parameter TEXTURE_SWIZZLE_G with value ALPHA;
5706*35238bceSAndroid Build Coastguard Worker  *       -  parameter TEXTURE_SWIZZLE_B with value RED;
5707*35238bceSAndroid Build Coastguard Worker  *       -  parameter TEXTURE_SWIZZLE_A with value GREEN;
5708*35238bceSAndroid Build Coastguard Worker  *       -  parameter TEXTURE_SWIZZLE_RGBA with value { ZERO, ONE, ZERO, ONE };
5709*35238bceSAndroid Build Coastguard Worker  *       -  parameter TEXTURE_WRAP_S with value MIRROR_CLAMP_TO_EDGE;
5710*35238bceSAndroid Build Coastguard Worker  *       -  parameter TEXTURE_WRAP_T with value CLAMP_TO_EDGE;
5711*35238bceSAndroid Build Coastguard Worker  *       -  parameter TEXTURE_WRAP_R with value CLAMP_TO_EDGE.
5712*35238bceSAndroid Build Coastguard Worker  *
5713*35238bceSAndroid Build Coastguard Worker  *      Release the texture object.
5714*35238bceSAndroid Build Coastguard Worker  */
5715*35238bceSAndroid Build Coastguard Worker class GetSetParameterTest : public deqp::TestCase
5716*35238bceSAndroid Build Coastguard Worker {
5717*35238bceSAndroid Build Coastguard Worker public:
5718*35238bceSAndroid Build Coastguard Worker     /* Public member functions. */
5719*35238bceSAndroid Build Coastguard Worker     GetSetParameterTest(deqp::Context &context);
5720*35238bceSAndroid Build Coastguard Worker 
5721*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
5722*35238bceSAndroid Build Coastguard Worker 
5723*35238bceSAndroid Build Coastguard Worker private:
5724*35238bceSAndroid Build Coastguard Worker     /* Private constructors. */
5725*35238bceSAndroid Build Coastguard Worker     GetSetParameterTest(const GetSetParameterTest &other);
5726*35238bceSAndroid Build Coastguard Worker     GetSetParameterTest &operator=(const GetSetParameterTest &other);
5727*35238bceSAndroid Build Coastguard Worker 
5728*35238bceSAndroid Build Coastguard Worker     bool CheckErrorAndLog(const glw::GLchar *fname, glw::GLenum pname);
5729*35238bceSAndroid Build Coastguard Worker     bool CompareAndLog(glw::GLint value_src, glw::GLint value_dst, glw::GLenum pname);
5730*35238bceSAndroid Build Coastguard Worker     bool CompareAndLog(glw::GLuint value_src, glw::GLuint value_dst, glw::GLenum pname);
5731*35238bceSAndroid Build Coastguard Worker     bool CompareAndLog(glw::GLfloat value_src, glw::GLfloat value_dst, glw::GLenum pname);
5732*35238bceSAndroid Build Coastguard Worker     bool CompareAndLog(glw::GLfloat value_src[4], glw::GLfloat value_dst[4], glw::GLenum pname);
5733*35238bceSAndroid Build Coastguard Worker     bool CompareAndLog(glw::GLint value_src[4], glw::GLint value_dst[4], glw::GLenum pname);
5734*35238bceSAndroid Build Coastguard Worker     bool CompareAndLog(glw::GLuint value_src[4], glw::GLuint value_dst[4], glw::GLenum pname);
5735*35238bceSAndroid Build Coastguard Worker };
5736*35238bceSAndroid Build Coastguard Worker /* GetSetParameterTest class */
5737*35238bceSAndroid Build Coastguard Worker 
5738*35238bceSAndroid Build Coastguard Worker /** @class DefaultsTest
5739*35238bceSAndroid Build Coastguard Worker  *
5740*35238bceSAndroid Build Coastguard Worker  *      Create texture object with CreateTextures. Do not bind it.
5741*35238bceSAndroid Build Coastguard Worker  *
5742*35238bceSAndroid Build Coastguard Worker  *      Using one of the functions
5743*35238bceSAndroid Build Coastguard Worker  *       -  GetTextureParameterfv,
5744*35238bceSAndroid Build Coastguard Worker  *       -  GetTextureParameteriv,
5745*35238bceSAndroid Build Coastguard Worker  *       -  GetTextureParameterIiv,
5746*35238bceSAndroid Build Coastguard Worker  *       -  GetTextureParameterIuiv
5747*35238bceSAndroid Build Coastguard Worker  *      check that initial object parameter values are set to the following
5748*35238bceSAndroid Build Coastguard Worker  *      defaults:
5749*35238bceSAndroid Build Coastguard Worker  *       -  for parameter DEPTH_STENCIL_TEXTURE_MODE initial value is
5750*35238bceSAndroid Build Coastguard Worker  *          DEPTH_COMPONENT;
5751*35238bceSAndroid Build Coastguard Worker  *       -  for parameter TEXTURE_BASE_LEVEL initial value is 0;
5752*35238bceSAndroid Build Coastguard Worker  *       -  for parameter TEXTURE_BORDER_COLOR initial value is {0.0, 0.0, 0.0,
5753*35238bceSAndroid Build Coastguard Worker  *          0.0};
5754*35238bceSAndroid Build Coastguard Worker  *       -  for parameter TEXTURE_COMPARE_FUNC initial value is LEQUAL;
5755*35238bceSAndroid Build Coastguard Worker  *       -  for parameter TEXTURE_COMPARE_MODE initial value is NONE;
5756*35238bceSAndroid Build Coastguard Worker  *       -  for parameter TEXTURE_LOD_BIAS initial value is 0.0;
5757*35238bceSAndroid Build Coastguard Worker  *       -  for parameter TEXTURE_MIN_FILTER initial value is
5758*35238bceSAndroid Build Coastguard Worker  *          NEAREST_MIPMAP_LINEAR;
5759*35238bceSAndroid Build Coastguard Worker  *       -  for parameter TEXTURE_MAG_FILTER initial value is LINEAR;
5760*35238bceSAndroid Build Coastguard Worker  *       -  for parameter TEXTURE_MIN_LOD initial value is -1000;
5761*35238bceSAndroid Build Coastguard Worker  *       -  for parameter TEXTURE_MAX_LOD initial value is 1000;
5762*35238bceSAndroid Build Coastguard Worker  *       -  for parameter TEXTURE_MAX_LEVEL initial value is 1000;
5763*35238bceSAndroid Build Coastguard Worker  *       -  for parameter TEXTURE_SWIZZLE_R initial value is RED;
5764*35238bceSAndroid Build Coastguard Worker  *       -  for parameter TEXTURE_SWIZZLE_G initial value is GREEN;
5765*35238bceSAndroid Build Coastguard Worker  *       -  for parameter TEXTURE_SWIZZLE_B initial value is BLUE;
5766*35238bceSAndroid Build Coastguard Worker  *       -  for parameter TEXTURE_SWIZZLE_A initial value is ALPHA;
5767*35238bceSAndroid Build Coastguard Worker  *       -  for parameter TEXTURE_WRAP_S initial value is REPEAT;
5768*35238bceSAndroid Build Coastguard Worker  *       -  for parameter TEXTURE_WRAP_T initial value is REPEAT;
5769*35238bceSAndroid Build Coastguard Worker  *       -  for parameter TEXTURE_WRAP_R initial value is REPEAT.
5770*35238bceSAndroid Build Coastguard Worker  */
5771*35238bceSAndroid Build Coastguard Worker class DefaultsTest : public deqp::TestCase
5772*35238bceSAndroid Build Coastguard Worker {
5773*35238bceSAndroid Build Coastguard Worker public:
5774*35238bceSAndroid Build Coastguard Worker     /* Public member functions. */
5775*35238bceSAndroid Build Coastguard Worker     DefaultsTest(deqp::Context &context);
5776*35238bceSAndroid Build Coastguard Worker 
5777*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
5778*35238bceSAndroid Build Coastguard Worker 
5779*35238bceSAndroid Build Coastguard Worker private:
5780*35238bceSAndroid Build Coastguard Worker     /* Private constructors. */
5781*35238bceSAndroid Build Coastguard Worker     DefaultsTest(const DefaultsTest &other);
5782*35238bceSAndroid Build Coastguard Worker     DefaultsTest &operator=(const DefaultsTest &other);
5783*35238bceSAndroid Build Coastguard Worker 
5784*35238bceSAndroid Build Coastguard Worker     bool CompareAndLog(glw::GLint value_ref, glw::GLint value_dst, glw::GLenum pname);
5785*35238bceSAndroid Build Coastguard Worker     bool CompareAndLog(glw::GLuint value_ref, glw::GLuint value_dst, glw::GLenum pname);
5786*35238bceSAndroid Build Coastguard Worker     bool CompareAndLog(glw::GLfloat value_ref, glw::GLfloat value_dst, glw::GLenum pname);
5787*35238bceSAndroid Build Coastguard Worker     bool CompareAndLog(glw::GLfloat value_ref[4], glw::GLfloat value_dst[4], glw::GLenum pname);
5788*35238bceSAndroid Build Coastguard Worker     bool CompareAndLog(glw::GLint value_ref[4], glw::GLint value_dst[4], glw::GLenum pname);
5789*35238bceSAndroid Build Coastguard Worker     bool CompareAndLog(glw::GLuint value_ref[4], glw::GLuint value_dst[4], glw::GLenum pname);
5790*35238bceSAndroid Build Coastguard Worker };
5791*35238bceSAndroid Build Coastguard Worker /* DefaultsTest class */
5792*35238bceSAndroid Build Coastguard Worker 
5793*35238bceSAndroid Build Coastguard Worker /** @class GenerateMipmapTest
5794*35238bceSAndroid Build Coastguard Worker  *
5795*35238bceSAndroid Build Coastguard Worker  *      Create one dimensional texture. Setup its image data with successive
5796*35238bceSAndroid Build Coastguard Worker  *      numbers {0..255} stored as red color.
5797*35238bceSAndroid Build Coastguard Worker  *
5798*35238bceSAndroid Build Coastguard Worker  *      Generate mipmaps for the texture using GenerateTextureMipmap function.
5799*35238bceSAndroid Build Coastguard Worker  *
5800*35238bceSAndroid Build Coastguard Worker  *      Download each of the generated mipmap levels. Check that each of the
5801*35238bceSAndroid Build Coastguard Worker  *      mipmaps contains series of not decreasing values.
5802*35238bceSAndroid Build Coastguard Worker  *
5803*35238bceSAndroid Build Coastguard Worker  *      Release texture object.
5804*35238bceSAndroid Build Coastguard Worker  */
5805*35238bceSAndroid Build Coastguard Worker class GenerateMipmapTest : public deqp::TestCase
5806*35238bceSAndroid Build Coastguard Worker {
5807*35238bceSAndroid Build Coastguard Worker public:
5808*35238bceSAndroid Build Coastguard Worker     /* Public member functions. */
5809*35238bceSAndroid Build Coastguard Worker     GenerateMipmapTest(deqp::Context &context);
5810*35238bceSAndroid Build Coastguard Worker 
5811*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
5812*35238bceSAndroid Build Coastguard Worker 
5813*35238bceSAndroid Build Coastguard Worker private:
5814*35238bceSAndroid Build Coastguard Worker     /* Private constructors. */
5815*35238bceSAndroid Build Coastguard Worker     GenerateMipmapTest(const GenerateMipmapTest &other);
5816*35238bceSAndroid Build Coastguard Worker     GenerateMipmapTest &operator=(const GenerateMipmapTest &other);
5817*35238bceSAndroid Build Coastguard Worker 
5818*35238bceSAndroid Build Coastguard Worker     /* Private static constants. */
5819*35238bceSAndroid Build Coastguard Worker     static const glw::GLubyte s_texture_data[];
5820*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_texture_width;
5821*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_texture_width_log;
5822*35238bceSAndroid Build Coastguard Worker };
5823*35238bceSAndroid Build Coastguard Worker /* GenerateMipmapTest class */
5824*35238bceSAndroid Build Coastguard Worker 
5825*35238bceSAndroid Build Coastguard Worker /** @class BindUnitTest
5826*35238bceSAndroid Build Coastguard Worker  *
5827*35238bceSAndroid Build Coastguard Worker  *      Create four 2D textures, filled with 2x3 texels of reference data in RED
5828*35238bceSAndroid Build Coastguard Worker  *      format and R8 internal format.
5829*35238bceSAndroid Build Coastguard Worker  *
5830*35238bceSAndroid Build Coastguard Worker  *      Create framebuffer 2x3 pixels of size with the same internal format as
5831*35238bceSAndroid Build Coastguard Worker  *      textures but RGBA format.
5832*35238bceSAndroid Build Coastguard Worker  *
5833*35238bceSAndroid Build Coastguard Worker  *      Bind each texture to the separate unit using BindTextureUnit function.
5834*35238bceSAndroid Build Coastguard Worker  *
5835*35238bceSAndroid Build Coastguard Worker  *      Prepare GLSL program which draws full screen quad. A fragment shader of
5836*35238bceSAndroid Build Coastguard Worker  *      the program shall pass each of the four input texture red values into
5837*35238bceSAndroid Build Coastguard Worker  *      separate RGBA channel of the output framebuffer.
5838*35238bceSAndroid Build Coastguard Worker  *
5839*35238bceSAndroid Build Coastguard Worker  *      Make a draw call with prepared objects.
5840*35238bceSAndroid Build Coastguard Worker  *
5841*35238bceSAndroid Build Coastguard Worker  *      Fetch framebuffer data. Expect interleaved reference data.
5842*35238bceSAndroid Build Coastguard Worker  *
5843*35238bceSAndroid Build Coastguard Worker  *      Release all objects.
5844*35238bceSAndroid Build Coastguard Worker  */
5845*35238bceSAndroid Build Coastguard Worker class BindUnitTest : public deqp::TestCase
5846*35238bceSAndroid Build Coastguard Worker {
5847*35238bceSAndroid Build Coastguard Worker public:
5848*35238bceSAndroid Build Coastguard Worker     /* Public member functions. */
5849*35238bceSAndroid Build Coastguard Worker     BindUnitTest(deqp::Context &context);
5850*35238bceSAndroid Build Coastguard Worker 
5851*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
5852*35238bceSAndroid Build Coastguard Worker 
5853*35238bceSAndroid Build Coastguard Worker private:
5854*35238bceSAndroid Build Coastguard Worker     /* Private constructors. */
5855*35238bceSAndroid Build Coastguard Worker     BindUnitTest(const BindUnitTest &other);
5856*35238bceSAndroid Build Coastguard Worker     BindUnitTest &operator=(const BindUnitTest &other);
5857*35238bceSAndroid Build Coastguard Worker 
5858*35238bceSAndroid Build Coastguard Worker     void CreateProgram();
5859*35238bceSAndroid Build Coastguard Worker     void CreateTextures();
5860*35238bceSAndroid Build Coastguard Worker     void CreateFrambuffer();
5861*35238bceSAndroid Build Coastguard Worker     void CreateVertexArray();
5862*35238bceSAndroid Build Coastguard Worker     bool Draw();
5863*35238bceSAndroid Build Coastguard Worker     bool Check();
5864*35238bceSAndroid Build Coastguard Worker     void CleanAll();
5865*35238bceSAndroid Build Coastguard Worker     std::string DataToString(glw::GLuint count, const glw::GLubyte data[]);
5866*35238bceSAndroid Build Coastguard Worker 
5867*35238bceSAndroid Build Coastguard Worker     /* Private member variables. */
5868*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_po;
5869*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to[4];
5870*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo;
5871*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_rbo;
5872*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_vao;
5873*35238bceSAndroid Build Coastguard Worker     glw::GLubyte *m_result;
5874*35238bceSAndroid Build Coastguard Worker 
5875*35238bceSAndroid Build Coastguard Worker     /* Private static constants. */
5876*35238bceSAndroid Build Coastguard Worker     static const glw::GLubyte s_texture_data_r[];
5877*35238bceSAndroid Build Coastguard Worker     static const glw::GLubyte s_texture_data_g[];
5878*35238bceSAndroid Build Coastguard Worker     static const glw::GLubyte s_texture_data_b[];
5879*35238bceSAndroid Build Coastguard Worker     static const glw::GLubyte s_texture_data_a[];
5880*35238bceSAndroid Build Coastguard Worker     static const glw::GLubyte s_texture_data_rgba[];
5881*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_texture_width;
5882*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_texture_height;
5883*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_texture_count_rgba;
5884*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_vertex_shader;
5885*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader;
5886*35238bceSAndroid Build Coastguard Worker     static const glw::GLchar *s_fragment_shader_samplers[4];
5887*35238bceSAndroid Build Coastguard Worker };
5888*35238bceSAndroid Build Coastguard Worker /* GenerateMipmapTest class */
5889*35238bceSAndroid Build Coastguard Worker 
5890*35238bceSAndroid Build Coastguard Worker /** @class GetImageTest
5891*35238bceSAndroid Build Coastguard Worker  *
5892*35238bceSAndroid Build Coastguard Worker  *          Make test for following DSA functions:
5893*35238bceSAndroid Build Coastguard Worker  *       -  GetTextureImage,
5894*35238bceSAndroid Build Coastguard Worker  *       -  GetCompressedTextureImage.
5895*35238bceSAndroid Build Coastguard Worker  *
5896*35238bceSAndroid Build Coastguard Worker  *      Create two 2D textures, one with compressed reference image, one with
5897*35238bceSAndroid Build Coastguard Worker  *      uncompressed reference image.
5898*35238bceSAndroid Build Coastguard Worker  *
5899*35238bceSAndroid Build Coastguard Worker  *      Fetch textures with corresponding test functions. Compare fetched values
5900*35238bceSAndroid Build Coastguard Worker  *      with the reference data. Expect equality.
5901*35238bceSAndroid Build Coastguard Worker  *
5902*35238bceSAndroid Build Coastguard Worker  *      Release textures.
5903*35238bceSAndroid Build Coastguard Worker  */
5904*35238bceSAndroid Build Coastguard Worker class GetImageTest : public deqp::TestCase
5905*35238bceSAndroid Build Coastguard Worker {
5906*35238bceSAndroid Build Coastguard Worker public:
5907*35238bceSAndroid Build Coastguard Worker     /* Public member functions. */
5908*35238bceSAndroid Build Coastguard Worker     GetImageTest(deqp::Context &context);
5909*35238bceSAndroid Build Coastguard Worker 
5910*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
5911*35238bceSAndroid Build Coastguard Worker 
5912*35238bceSAndroid Build Coastguard Worker private:
5913*35238bceSAndroid Build Coastguard Worker     /* Private constructors. */
5914*35238bceSAndroid Build Coastguard Worker     GetImageTest(const GetImageTest &other);
5915*35238bceSAndroid Build Coastguard Worker     GetImageTest &operator=(const GetImageTest &other);
5916*35238bceSAndroid Build Coastguard Worker 
5917*35238bceSAndroid Build Coastguard Worker     std::string DataToString(glw::GLuint count, const glw::GLubyte data[]);
5918*35238bceSAndroid Build Coastguard Worker 
5919*35238bceSAndroid Build Coastguard Worker     /* Private static constants. */
5920*35238bceSAndroid Build Coastguard Worker     static const glw::GLubyte s_texture_data[];
5921*35238bceSAndroid Build Coastguard Worker     static const glw::GLubyte s_texture_data_compressed[];
5922*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_texture_width;
5923*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_texture_height;
5924*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_texture_size;
5925*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_texture_size_compressed;
5926*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_texture_count;
5927*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_texture_count_compressed;
5928*35238bceSAndroid Build Coastguard Worker };
5929*35238bceSAndroid Build Coastguard Worker /* GetImageTest class */
5930*35238bceSAndroid Build Coastguard Worker 
5931*35238bceSAndroid Build Coastguard Worker /** @class GetLevelParameterTest
5932*35238bceSAndroid Build Coastguard Worker  *
5933*35238bceSAndroid Build Coastguard Worker  *      Make test for following DSA functions:
5934*35238bceSAndroid Build Coastguard Worker  *          -  GetTextureLevelParameterfv,
5935*35238bceSAndroid Build Coastguard Worker  *          -  GetTextureLevelParameteriv.
5936*35238bceSAndroid Build Coastguard Worker  *
5937*35238bceSAndroid Build Coastguard Worker  *      Create 3D texture with two levels of detail.
5938*35238bceSAndroid Build Coastguard Worker  *
5939*35238bceSAndroid Build Coastguard Worker  *      Fetch following parameters with test functions:
5940*35238bceSAndroid Build Coastguard Worker  *       -  TEXTURE_WIDTH,
5941*35238bceSAndroid Build Coastguard Worker  *       -  TEXTURE_HEIGHT,
5942*35238bceSAndroid Build Coastguard Worker  *       -  TEXTURE_DEPTH,
5943*35238bceSAndroid Build Coastguard Worker  *       -  TEXTURE_INTERNAL_FORMAT,
5944*35238bceSAndroid Build Coastguard Worker  *       -  TEXTURE_RED_TYPE,
5945*35238bceSAndroid Build Coastguard Worker  *       -  TEXTURE_GREEN_TYPE,
5946*35238bceSAndroid Build Coastguard Worker  *       -  TEXTURE_BLUE_TYPE,
5947*35238bceSAndroid Build Coastguard Worker  *       -  TEXTURE_ALPHA_TYPE,
5948*35238bceSAndroid Build Coastguard Worker  *       -  TEXTURE_DEPTH_TYPE,
5949*35238bceSAndroid Build Coastguard Worker  *       -  TEXTURE_RED_SIZE,
5950*35238bceSAndroid Build Coastguard Worker  *       -  TEXTURE_GREEN_SIZE,
5951*35238bceSAndroid Build Coastguard Worker  *       -  TEXTURE_BLUE_SIZE,
5952*35238bceSAndroid Build Coastguard Worker  *       -  TEXTURE_ALPHA_SIZE,
5953*35238bceSAndroid Build Coastguard Worker  *       -  TEXTURE_DEPTH_SIZE and
5954*35238bceSAndroid Build Coastguard Worker  *       -  TEXTURE_COMPRESSED
5955*35238bceSAndroid Build Coastguard Worker  *      and compare values with expected set.
5956*35238bceSAndroid Build Coastguard Worker  *
5957*35238bceSAndroid Build Coastguard Worker  *      Release texture.
5958*35238bceSAndroid Build Coastguard Worker  */
5959*35238bceSAndroid Build Coastguard Worker class GetLevelParameterTest : public deqp::TestCase
5960*35238bceSAndroid Build Coastguard Worker {
5961*35238bceSAndroid Build Coastguard Worker public:
5962*35238bceSAndroid Build Coastguard Worker     /* Public member functions. */
5963*35238bceSAndroid Build Coastguard Worker     GetLevelParameterTest(deqp::Context &context);
5964*35238bceSAndroid Build Coastguard Worker 
5965*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
5966*35238bceSAndroid Build Coastguard Worker 
5967*35238bceSAndroid Build Coastguard Worker private:
5968*35238bceSAndroid Build Coastguard Worker     /* Private constructors. */
5969*35238bceSAndroid Build Coastguard Worker     GetLevelParameterTest(const GetLevelParameterTest &other);
5970*35238bceSAndroid Build Coastguard Worker     GetLevelParameterTest &operator=(const GetLevelParameterTest &other);
5971*35238bceSAndroid Build Coastguard Worker 
5972*35238bceSAndroid Build Coastguard Worker     /* Private static constants. */
5973*35238bceSAndroid Build Coastguard Worker     static const glw::GLubyte s_texture_data[];
5974*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_texture_width;
5975*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_texture_height;
5976*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_texture_depth;
5977*35238bceSAndroid Build Coastguard Worker };
5978*35238bceSAndroid Build Coastguard Worker /* GetLevelParameterTest class */
5979*35238bceSAndroid Build Coastguard Worker 
5980*35238bceSAndroid Build Coastguard Worker /** @class ErrorsUtilities
5981*35238bceSAndroid Build Coastguard Worker  *
5982*35238bceSAndroid Build Coastguard Worker  *      This class contain utility methods for all negative tests.
5983*35238bceSAndroid Build Coastguard Worker  */
5984*35238bceSAndroid Build Coastguard Worker class ErrorsUtilities
5985*35238bceSAndroid Build Coastguard Worker {
5986*35238bceSAndroid Build Coastguard Worker public:
5987*35238bceSAndroid Build Coastguard Worker     bool CheckErrorAndLog(deqp::Context &context, glw::GLuint expected_error, const glw::GLchar *function_name,
5988*35238bceSAndroid Build Coastguard Worker                           const glw::GLchar *log);
5989*35238bceSAndroid Build Coastguard Worker };
5990*35238bceSAndroid Build Coastguard Worker /* ErrorsUtilities  */
5991*35238bceSAndroid Build Coastguard Worker 
5992*35238bceSAndroid Build Coastguard Worker /** @class CreationErrorsTest
5993*35238bceSAndroid Build Coastguard Worker  *
5994*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated if target is not one of the
5995*35238bceSAndroid Build Coastguard Worker  *      allowable values.
5996*35238bceSAndroid Build Coastguard Worker  *
5997*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated if n is negative.
5998*35238bceSAndroid Build Coastguard Worker  */
5999*35238bceSAndroid Build Coastguard Worker class CreationErrorsTest : public deqp::TestCase, ErrorsUtilities
6000*35238bceSAndroid Build Coastguard Worker {
6001*35238bceSAndroid Build Coastguard Worker public:
6002*35238bceSAndroid Build Coastguard Worker     /* Public member functions. */
6003*35238bceSAndroid Build Coastguard Worker     CreationErrorsTest(deqp::Context &context);
6004*35238bceSAndroid Build Coastguard Worker 
6005*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
6006*35238bceSAndroid Build Coastguard Worker 
6007*35238bceSAndroid Build Coastguard Worker private:
6008*35238bceSAndroid Build Coastguard Worker     /* Private constructors. */
6009*35238bceSAndroid Build Coastguard Worker     CreationErrorsTest(const CreationErrorsTest &other);
6010*35238bceSAndroid Build Coastguard Worker     CreationErrorsTest &operator=(const CreationErrorsTest &other);
6011*35238bceSAndroid Build Coastguard Worker 
6012*35238bceSAndroid Build Coastguard Worker     glw::GLenum NotATarget();
6013*35238bceSAndroid Build Coastguard Worker };
6014*35238bceSAndroid Build Coastguard Worker /* CreationErrorsTest class */
6015*35238bceSAndroid Build Coastguard Worker 
6016*35238bceSAndroid Build Coastguard Worker /** @class BufferErrorsTest
6017*35238bceSAndroid Build Coastguard Worker  *
6018*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by glTextureBuffer if texture
6019*35238bceSAndroid Build Coastguard Worker  *      is not the name of an existing texture object.
6020*35238bceSAndroid Build Coastguard Worker  *
6021*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by glTextureBuffer if the effective
6022*35238bceSAndroid Build Coastguard Worker  *      target of texture is not TEXTURE_BUFFER.
6023*35238bceSAndroid Build Coastguard Worker  *
6024*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated if internalformat is not one of the
6025*35238bceSAndroid Build Coastguard Worker  *      sized internal formats described above.
6026*35238bceSAndroid Build Coastguard Worker  *
6027*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated if buffer is not zero and is
6028*35238bceSAndroid Build Coastguard Worker  *      not the name of an existing buffer object.
6029*35238bceSAndroid Build Coastguard Worker  */
6030*35238bceSAndroid Build Coastguard Worker class BufferErrorsTest : public deqp::TestCase, ErrorsUtilities
6031*35238bceSAndroid Build Coastguard Worker {
6032*35238bceSAndroid Build Coastguard Worker public:
6033*35238bceSAndroid Build Coastguard Worker     /* Public member functions. */
6034*35238bceSAndroid Build Coastguard Worker     BufferErrorsTest(deqp::Context &context);
6035*35238bceSAndroid Build Coastguard Worker 
6036*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
6037*35238bceSAndroid Build Coastguard Worker 
6038*35238bceSAndroid Build Coastguard Worker private:
6039*35238bceSAndroid Build Coastguard Worker     /* Private constructors. */
6040*35238bceSAndroid Build Coastguard Worker     BufferErrorsTest(const BufferErrorsTest &other);
6041*35238bceSAndroid Build Coastguard Worker     BufferErrorsTest &operator=(const BufferErrorsTest &other);
6042*35238bceSAndroid Build Coastguard Worker };
6043*35238bceSAndroid Build Coastguard Worker /* BufferErrorsTest class */
6044*35238bceSAndroid Build Coastguard Worker 
6045*35238bceSAndroid Build Coastguard Worker /** @class BufferRangeErrorsTest
6046*35238bceSAndroid Build Coastguard Worker  *
6047*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by TextureBufferRange if
6048*35238bceSAndroid Build Coastguard Worker  *      texture is not the name of an existing texture object.
6049*35238bceSAndroid Build Coastguard Worker  *
6050*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by TextureBufferRange if the
6051*35238bceSAndroid Build Coastguard Worker  *      effective target of texture is not TEXTURE_BUFFER.
6052*35238bceSAndroid Build Coastguard Worker  *
6053*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by TextureBufferRange if
6054*35238bceSAndroid Build Coastguard Worker  *      internalformat is not one of the sized internal formats described above.
6055*35238bceSAndroid Build Coastguard Worker  *
6056*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by TextureBufferRange if
6057*35238bceSAndroid Build Coastguard Worker  *      buffer is not zero and is not the name of an existing buffer object.
6058*35238bceSAndroid Build Coastguard Worker  *
6059*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by TextureBufferRange if offset
6060*35238bceSAndroid Build Coastguard Worker  *      is negative, if size is less than or equal to zero, or if offset + size
6061*35238bceSAndroid Build Coastguard Worker  *      is greater than the value of BUFFER_SIZE for buffer.
6062*35238bceSAndroid Build Coastguard Worker  *
6063*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by TextureBufferRange if offset is
6064*35238bceSAndroid Build Coastguard Worker  *      not an integer multiple of the value of TEXTURE_BUFFER_OFFSET_ALIGNMENT.
6065*35238bceSAndroid Build Coastguard Worker  */
6066*35238bceSAndroid Build Coastguard Worker class BufferRangeErrorsTest : public deqp::TestCase, ErrorsUtilities
6067*35238bceSAndroid Build Coastguard Worker {
6068*35238bceSAndroid Build Coastguard Worker public:
6069*35238bceSAndroid Build Coastguard Worker     /* Public member functions. */
6070*35238bceSAndroid Build Coastguard Worker     BufferRangeErrorsTest(deqp::Context &context);
6071*35238bceSAndroid Build Coastguard Worker 
6072*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
6073*35238bceSAndroid Build Coastguard Worker 
6074*35238bceSAndroid Build Coastguard Worker private:
6075*35238bceSAndroid Build Coastguard Worker     /* Private constructors. */
6076*35238bceSAndroid Build Coastguard Worker     BufferRangeErrorsTest(const BufferRangeErrorsTest &other);
6077*35238bceSAndroid Build Coastguard Worker     BufferRangeErrorsTest &operator=(const BufferRangeErrorsTest &other);
6078*35238bceSAndroid Build Coastguard Worker };
6079*35238bceSAndroid Build Coastguard Worker /* BufferErrorsTest class */
6080*35238bceSAndroid Build Coastguard Worker 
6081*35238bceSAndroid Build Coastguard Worker /** @class StorageErrorsTest
6082*35238bceSAndroid Build Coastguard Worker  *
6083*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by TextureStorage1D if texture
6084*35238bceSAndroid Build Coastguard Worker  *      is not the name of an existing texture object.
6085*35238bceSAndroid Build Coastguard Worker  *
6086*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by TextureStorage1D if
6087*35238bceSAndroid Build Coastguard Worker  *      internalformat is not a valid sized internal format.
6088*35238bceSAndroid Build Coastguard Worker  *
6089*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by TextureStorage1D if target or
6090*35238bceSAndroid Build Coastguard Worker  *      the effective target of texture is not one of the accepted targets
6091*35238bceSAndroid Build Coastguard Worker  *      described above.
6092*35238bceSAndroid Build Coastguard Worker  *
6093*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by TextureStorage1D if width or
6094*35238bceSAndroid Build Coastguard Worker  *      levels are less than 1.
6095*35238bceSAndroid Build Coastguard Worker  *
6096*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by TextureStorage1D if levels
6097*35238bceSAndroid Build Coastguard Worker  *      is greater than log2(width)+1.
6098*35238bceSAndroid Build Coastguard Worker  *
6099*35238bceSAndroid Build Coastguard Worker  *
6100*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by TextureStorage2D if
6101*35238bceSAndroid Build Coastguard Worker  *      texture is not the name of an existing texture object.
6102*35238bceSAndroid Build Coastguard Worker  *
6103*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by TextureStorage2D if
6104*35238bceSAndroid Build Coastguard Worker  *      internalformat is not a valid sized internal format.
6105*35238bceSAndroid Build Coastguard Worker  *
6106*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by TextureStorage2D if target or
6107*35238bceSAndroid Build Coastguard Worker  *      the effective target of texture is not one of the accepted targets
6108*35238bceSAndroid Build Coastguard Worker  *      described above.
6109*35238bceSAndroid Build Coastguard Worker  *
6110*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by TextureStorage2D if width,
6111*35238bceSAndroid Build Coastguard Worker  *      height or levels are less than 1.
6112*35238bceSAndroid Build Coastguard Worker  *
6113*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by TextureStorage2D if target
6114*35238bceSAndroid Build Coastguard Worker  *      is TEXTURE_1D_ARRAY or PROXY_TEXTURE_1D_ARRAY and levels is greater than
6115*35238bceSAndroid Build Coastguard Worker  *      log2(width)+1.
6116*35238bceSAndroid Build Coastguard Worker  *
6117*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by TextureStorage2D if target
6118*35238bceSAndroid Build Coastguard Worker  *      is not TEXTURE_1D_ARRAY or PROXY_TEXTURE_1D_ARRAY and levels is greater
6119*35238bceSAndroid Build Coastguard Worker  *      than log2(max(width, height))+1.
6120*35238bceSAndroid Build Coastguard Worker  *
6121*35238bceSAndroid Build Coastguard Worker  *
6122*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by TextureStorage2DMultisample
6123*35238bceSAndroid Build Coastguard Worker  *      if texture is not the name of an existing texture object.
6124*35238bceSAndroid Build Coastguard Worker  *
6125*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by TextureStorage2DMultisample if
6126*35238bceSAndroid Build Coastguard Worker  *      internalformat is not a valid color-renderable, depth-renderable or
6127*35238bceSAndroid Build Coastguard Worker  *      stencil-renderable format.
6128*35238bceSAndroid Build Coastguard Worker  *
6129*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by TextureStorage2DMultisample if
6130*35238bceSAndroid Build Coastguard Worker  *      target or the effective target of texture is not one of the accepted
6131*35238bceSAndroid Build Coastguard Worker  *      targets described above.
6132*35238bceSAndroid Build Coastguard Worker  *
6133*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by TextureStorage2DMultisample if
6134*35238bceSAndroid Build Coastguard Worker  *      width or height are less than 1 or greater than the value of
6135*35238bceSAndroid Build Coastguard Worker  *      MAX_TEXTURE_SIZE.
6136*35238bceSAndroid Build Coastguard Worker  *
6137*35238bceSAndroid Build Coastguard Worker  *
6138*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by TextureStorage2DMultisample if
6139*35238bceSAndroid Build Coastguard Worker  *      samples is greater than the value of MAX_SAMPLES.
6140*35238bceSAndroid Build Coastguard Worker  *
6141*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by TextureStorage2DMultisample
6142*35238bceSAndroid Build Coastguard Worker  *      if the value of TEXTURE_IMMUTABLE_FORMAT for the texture bound to target
6143*35238bceSAndroid Build Coastguard Worker  *      is not FALSE.
6144*35238bceSAndroid Build Coastguard Worker  *
6145*35238bceSAndroid Build Coastguard Worker  *
6146*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by TextureStorage3D if texture
6147*35238bceSAndroid Build Coastguard Worker  *      is not the name of an existing texture object.
6148*35238bceSAndroid Build Coastguard Worker  *
6149*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by TextureStorage3D if
6150*35238bceSAndroid Build Coastguard Worker  *      internalformat is not a valid sized internal format.
6151*35238bceSAndroid Build Coastguard Worker  *
6152*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by TextureStorage3D if target or
6153*35238bceSAndroid Build Coastguard Worker  *      the effective target of texture is not one of the accepted targets
6154*35238bceSAndroid Build Coastguard Worker  *      described above.
6155*35238bceSAndroid Build Coastguard Worker  *
6156*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by TextureStorage3D if width,
6157*35238bceSAndroid Build Coastguard Worker  *      height, depth or levels are less than 1.
6158*35238bceSAndroid Build Coastguard Worker  *
6159*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by TextureStorage3D if target
6160*35238bceSAndroid Build Coastguard Worker  *      is TEXTURE_3D or PROXY_TEXTURE_3D and levels is greater than
6161*35238bceSAndroid Build Coastguard Worker  *      log2(max(width, height, depth))+1.
6162*35238bceSAndroid Build Coastguard Worker  *
6163*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by TextureStorage3D if target
6164*35238bceSAndroid Build Coastguard Worker  *      is TEXTURE_2D_ARRAY, PROXY_TEXTURE_2D_ARRAY, TEXURE_CUBE_ARRAY,
6165*35238bceSAndroid Build Coastguard Worker  *      or PROXY_TEXTURE_CUBE_MAP_ARRAY and levels is greater than
6166*35238bceSAndroid Build Coastguard Worker  *      log2(max(width, height))+1.
6167*35238bceSAndroid Build Coastguard Worker  *
6168*35238bceSAndroid Build Coastguard Worker  *
6169*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by TextureStorage3DMultisample
6170*35238bceSAndroid Build Coastguard Worker  *      if texture is not the name of an existing texture object.
6171*35238bceSAndroid Build Coastguard Worker  *
6172*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by TextureStorage3DMultisample if
6173*35238bceSAndroid Build Coastguard Worker  *      internalformat is not a valid color-renderable, depth-renderable or
6174*35238bceSAndroid Build Coastguard Worker  *      stencil-renderable format.
6175*35238bceSAndroid Build Coastguard Worker  *
6176*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by TextureStorage3DMultisample if
6177*35238bceSAndroid Build Coastguard Worker  *      target or the effective target of texture is not one of the accepted
6178*35238bceSAndroid Build Coastguard Worker  *      targets described above.
6179*35238bceSAndroid Build Coastguard Worker  *
6180*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by TextureStorage3DMultisample if
6181*35238bceSAndroid Build Coastguard Worker  *      width or height are less than 1 or greater than the value of
6182*35238bceSAndroid Build Coastguard Worker  *      MAX_TEXTURE_SIZE.
6183*35238bceSAndroid Build Coastguard Worker  *
6184*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by TextureStorage3DMultisample if
6185*35238bceSAndroid Build Coastguard Worker  *      depth is less than 1 or greater than the value of
6186*35238bceSAndroid Build Coastguard Worker  *      MAX_ARRAY_TEXTURE_LAYERS.
6187*35238bceSAndroid Build Coastguard Worker  *
6188*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by TextureStorage3DMultisample if
6189*35238bceSAndroid Build Coastguard Worker  *      samples is greater than the value of MAX_SAMPLES.
6190*35238bceSAndroid Build Coastguard Worker  *
6191*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by TextureStorage3DMultisample
6192*35238bceSAndroid Build Coastguard Worker  *      if the value of TEXTURE_IMMUTABLE_FORMAT for the texture bound to
6193*35238bceSAndroid Build Coastguard Worker  *      target is not FALSE.
6194*35238bceSAndroid Build Coastguard Worker  */
6195*35238bceSAndroid Build Coastguard Worker class StorageErrorsTest : public deqp::TestCase, ErrorsUtilities
6196*35238bceSAndroid Build Coastguard Worker {
6197*35238bceSAndroid Build Coastguard Worker public:
6198*35238bceSAndroid Build Coastguard Worker     /* Public member functions. */
6199*35238bceSAndroid Build Coastguard Worker     StorageErrorsTest(deqp::Context &context);
6200*35238bceSAndroid Build Coastguard Worker 
6201*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
6202*35238bceSAndroid Build Coastguard Worker 
6203*35238bceSAndroid Build Coastguard Worker private:
6204*35238bceSAndroid Build Coastguard Worker     /* Private constructors. */
6205*35238bceSAndroid Build Coastguard Worker     StorageErrorsTest(const StorageErrorsTest &other);
6206*35238bceSAndroid Build Coastguard Worker     StorageErrorsTest &operator=(const StorageErrorsTest &other);
6207*35238bceSAndroid Build Coastguard Worker 
6208*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_1D;
6209*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_1D_array;
6210*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_2D;
6211*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_2D_array;
6212*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_3D;
6213*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_2D_ms;
6214*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_2D_ms_immutable;
6215*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_3D_ms;
6216*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_3D_ms_immutable;
6217*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_invalid;
6218*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_internalformat_invalid;
6219*35238bceSAndroid Build Coastguard Worker     glw::GLint m_max_texture_size;
6220*35238bceSAndroid Build Coastguard Worker     glw::GLint m_max_samples;
6221*35238bceSAndroid Build Coastguard Worker     glw::GLint m_max_array_texture_layers;
6222*35238bceSAndroid Build Coastguard Worker 
6223*35238bceSAndroid Build Coastguard Worker     void Prepare();
6224*35238bceSAndroid Build Coastguard Worker     bool Test1D();
6225*35238bceSAndroid Build Coastguard Worker     bool Test2D();
6226*35238bceSAndroid Build Coastguard Worker     bool Test3D();
6227*35238bceSAndroid Build Coastguard Worker     bool Test2DMultisample();
6228*35238bceSAndroid Build Coastguard Worker     bool Test3DMultisample();
6229*35238bceSAndroid Build Coastguard Worker     void Clean();
6230*35238bceSAndroid Build Coastguard Worker };
6231*35238bceSAndroid Build Coastguard Worker /* StorageErrorsTest class */
6232*35238bceSAndroid Build Coastguard Worker 
6233*35238bceSAndroid Build Coastguard Worker /** @class SubImageErrorsTest
6234*35238bceSAndroid Build Coastguard Worker  *
6235*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by TextureSubImage1D if
6236*35238bceSAndroid Build Coastguard Worker  *          texture is not the name of an existing texture object.
6237*35238bceSAndroid Build Coastguard Worker  *
6238*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_ENUM is generated by TextureSubImage1D if format is
6239*35238bceSAndroid Build Coastguard Worker  *          not an accepted format constant.
6240*35238bceSAndroid Build Coastguard Worker  *
6241*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_ENUM is generated by TextureSubImage1D if type is not
6242*35238bceSAndroid Build Coastguard Worker  *          a type constant.
6243*35238bceSAndroid Build Coastguard Worker  *
6244*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_VALUE is generated by TextureSubImage1D if level is
6245*35238bceSAndroid Build Coastguard Worker  *          less than 0.
6246*35238bceSAndroid Build Coastguard Worker  *
6247*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_VALUE may be generated by TextureSubImage1D if level
6248*35238bceSAndroid Build Coastguard Worker  *          is greater than log2 max, where max is the returned value of
6249*35238bceSAndroid Build Coastguard Worker  *          MAX_TEXTURE_SIZE.
6250*35238bceSAndroid Build Coastguard Worker  *
6251*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_VALUE is generated by TextureSubImage1D if
6252*35238bceSAndroid Build Coastguard Worker  *          xoffset<-b, or if (xoffset+width)>(w-b), where w is the TEXTURE_WIDTH,
6253*35238bceSAndroid Build Coastguard Worker  *          and b is the width of the TEXTURE_BORDER of the texture image being
6254*35238bceSAndroid Build Coastguard Worker  *          modified. Note that w includes twice the border width.
6255*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_VALUE is generated by TextureSubImage1D if width is
6256*35238bceSAndroid Build Coastguard Worker  *          less than 0.
6257*35238bceSAndroid Build Coastguard Worker  *
6258*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by TextureSubImage1D if type
6259*35238bceSAndroid Build Coastguard Worker  *          is one of UNSIGNED_BYTE_3_3_2, UNSIGNED_BYTE_2_3_3_REV,
6260*35238bceSAndroid Build Coastguard Worker  *          UNSIGNED_SHORT_5_6_5, or UNSIGNED_SHORT_5_6_5_REV and format is not RGB.
6261*35238bceSAndroid Build Coastguard Worker  *
6262*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by TextureSubImage1D if type
6263*35238bceSAndroid Build Coastguard Worker  *          is one of UNSIGNED_SHORT_4_4_4_4, UNSIGNED_SHORT_4_4_4_4_REV,
6264*35238bceSAndroid Build Coastguard Worker  *          UNSIGNED_SHORT_5_5_5_1, UNSIGNED_SHORT_1_5_5_5_REV,
6265*35238bceSAndroid Build Coastguard Worker  *          UNSIGNED_INT_8_8_8_8, UNSIGNED_INT_8_8_8_8_REV, UNSIGNED_INT_10_10_10_2,
6266*35238bceSAndroid Build Coastguard Worker  *          or UNSIGNED_INT_2_10_10_10_REV and format is neither RGBA nor BGRA.
6267*35238bceSAndroid Build Coastguard Worker  *
6268*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by TextureSubImage1D if a
6269*35238bceSAndroid Build Coastguard Worker  *          non-zero buffer object name is bound to the PIXEL_UNPACK_BUFFER target
6270*35238bceSAndroid Build Coastguard Worker  *          and the buffer object's data store is currently mapped.
6271*35238bceSAndroid Build Coastguard Worker  *
6272*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by TextureSubImage1D if a
6273*35238bceSAndroid Build Coastguard Worker  *          non-zero buffer object name is bound to the PIXEL_UNPACK_BUFFER target
6274*35238bceSAndroid Build Coastguard Worker  *          and the data would be unpacked from the buffer object such that the
6275*35238bceSAndroid Build Coastguard Worker  *          memory reads required would exceed the data store size.
6276*35238bceSAndroid Build Coastguard Worker  *
6277*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by TextureSubImage1D if a
6278*35238bceSAndroid Build Coastguard Worker  *          non-zero buffer object name is bound to the PIXEL_UNPACK_BUFFER target
6279*35238bceSAndroid Build Coastguard Worker  *          and pixels is not evenly divisible into the number of bytes needed to
6280*35238bceSAndroid Build Coastguard Worker  *          store in memory a datum indicated by type.
6281*35238bceSAndroid Build Coastguard Worker  *
6282*35238bceSAndroid Build Coastguard Worker  *
6283*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by TextureSubImage2D if
6284*35238bceSAndroid Build Coastguard Worker  *          texture is not the name of an existing texture object.
6285*35238bceSAndroid Build Coastguard Worker  *
6286*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_ENUM is generated by TextureSubImage2D if format is
6287*35238bceSAndroid Build Coastguard Worker  *          not an accepted format constant.
6288*35238bceSAndroid Build Coastguard Worker  *
6289*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_ENUM is generated if type is not a type constant.
6290*35238bceSAndroid Build Coastguard Worker  *
6291*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_VALUE is generated by TextureSubImage2D if level is
6292*35238bceSAndroid Build Coastguard Worker  *          less than 0.
6293*35238bceSAndroid Build Coastguard Worker  *
6294*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_VALUE may be generated by TextureSubImage2D if level
6295*35238bceSAndroid Build Coastguard Worker  *          is greater than log2 max, where max is the returned value of
6296*35238bceSAndroid Build Coastguard Worker  *          MAX_TEXTURE_SIZE.
6297*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_VALUE is generated by TextureSubImage2D if
6298*35238bceSAndroid Build Coastguard Worker  *          xoffset<-b, (xoffset+width)>(w-b), yoffset<-b, or
6299*35238bceSAndroid Build Coastguard Worker  *          (yoffset+height)>(h-b), where w is the TEXTURE_WIDTH, h is the
6300*35238bceSAndroid Build Coastguard Worker  *          TEXTURE_HEIGHT, and b is the border width of the texture image being
6301*35238bceSAndroid Build Coastguard Worker  *          modified. Note that w and h include twice the border width.
6302*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_VALUE is generated by TextureSubImage2D if width or
6303*35238bceSAndroid Build Coastguard Worker  *          height is less than 0.
6304*35238bceSAndroid Build Coastguard Worker  *
6305*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by TextureSubImage2D if type
6306*35238bceSAndroid Build Coastguard Worker  *          is one of UNSIGNED_BYTE_3_3_2, UNSIGNED_BYTE_2_3_3_REV,
6307*35238bceSAndroid Build Coastguard Worker  *          UNSIGNED_SHORT_5_6_5, or UNSIGNED_SHORT_5_6_5_REV and format is not RGB.
6308*35238bceSAndroid Build Coastguard Worker  *
6309*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by TextureSubImage2D if type
6310*35238bceSAndroid Build Coastguard Worker  *          is one of UNSIGNED_SHORT_4_4_4_4, UNSIGNED_SHORT_4_4_4_4_REV,
6311*35238bceSAndroid Build Coastguard Worker  *          UNSIGNED_SHORT_5_5_5_1, UNSIGNED_SHORT_1_5_5_5_REV, UNSIGNED_INT_8_8_8_8,
6312*35238bceSAndroid Build Coastguard Worker  *          UNSIGNED_INT_8_8_8_8_REV, UNSIGNED_INT_10_10_10_2, or
6313*35238bceSAndroid Build Coastguard Worker  *          UNSIGNED_INT_2_10_10_10_REV and format is neither RGBA
6314*35238bceSAndroid Build Coastguard Worker  *          nor BGRA.
6315*35238bceSAndroid Build Coastguard Worker  *
6316*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by TextureSubImage2D if a
6317*35238bceSAndroid Build Coastguard Worker  *          non-zero buffer object name is bound to the PIXEL_UNPACK_BUFFER target
6318*35238bceSAndroid Build Coastguard Worker  *          and the buffer object's data store is currently mapped.
6319*35238bceSAndroid Build Coastguard Worker  *
6320*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by TextureSubImage2D if a
6321*35238bceSAndroid Build Coastguard Worker  *          non-zero buffer object name is bound to the PIXEL_UNPACK_BUFFER target
6322*35238bceSAndroid Build Coastguard Worker  *          and the data would be unpacked from the buffer object such that the
6323*35238bceSAndroid Build Coastguard Worker  *          memory reads required would exceed the data store size.
6324*35238bceSAndroid Build Coastguard Worker  *
6325*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by TextureSubImage2D if a
6326*35238bceSAndroid Build Coastguard Worker  *          non-zero buffer object name is bound to the PIXEL_UNPACK_BUFFER target
6327*35238bceSAndroid Build Coastguard Worker  *          and pixels is not evenly divisible into the number of bytes needed to
6328*35238bceSAndroid Build Coastguard Worker  *          store in memory a datum indicated by type.
6329*35238bceSAndroid Build Coastguard Worker  *
6330*35238bceSAndroid Build Coastguard Worker  *
6331*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by TextureSubImage3D if
6332*35238bceSAndroid Build Coastguard Worker  *          texture is not the name of an existing texture object.
6333*35238bceSAndroid Build Coastguard Worker  *
6334*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_ENUM is generated by TextureSubImage3D if format is
6335*35238bceSAndroid Build Coastguard Worker  *          not an accepted format constant.
6336*35238bceSAndroid Build Coastguard Worker  *
6337*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_ENUM is generated by TextureSubImage3D if type is
6338*35238bceSAndroid Build Coastguard Worker  *          not a type constant.
6339*35238bceSAndroid Build Coastguard Worker  *
6340*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_VALUE is generated by TextureSubImage3D if level
6341*35238bceSAndroid Build Coastguard Worker  *          is less than 0.
6342*35238bceSAndroid Build Coastguard Worker  *
6343*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_VALUE may be generated by TextureSubImage3D if level
6344*35238bceSAndroid Build Coastguard Worker  *          is greater than log2 max, where max is the returned value of
6345*35238bceSAndroid Build Coastguard Worker  *          MAX_TEXTURE_SIZE.
6346*35238bceSAndroid Build Coastguard Worker  *
6347*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_VALUE is generated by TextureSubImage3D if
6348*35238bceSAndroid Build Coastguard Worker  *          xoffset<-b, (xoffset+width)>(w-b), yoffset<-b, or
6349*35238bceSAndroid Build Coastguard Worker  *          (yoffset+height)>(h-b), or zoffset<-b, or (zoffset+depth)>(d-b), where w
6350*35238bceSAndroid Build Coastguard Worker  *          is the TEXTURE_WIDTH, h is the TEXTURE_HEIGHT, d is the TEXTURE_DEPTH
6351*35238bceSAndroid Build Coastguard Worker  *          and b is the border width of the texture image being modified. Note
6352*35238bceSAndroid Build Coastguard Worker  *          that w, h, and d include twice the border width.
6353*35238bceSAndroid Build Coastguard Worker  *
6354*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_VALUE is generated by TextureSubImage3D if width,
6355*35238bceSAndroid Build Coastguard Worker  *          height, or depth is less than 0.
6356*35238bceSAndroid Build Coastguard Worker  *
6357*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by TextureSubImage3D if type
6358*35238bceSAndroid Build Coastguard Worker  *          is one of UNSIGNED_BYTE_3_3_2, UNSIGNED_BYTE_2_3_3_REV,
6359*35238bceSAndroid Build Coastguard Worker  *          UNSIGNED_SHORT_5_6_5, or UNSIGNED_SHORT_5_6_5_REV and format is not RGB.
6360*35238bceSAndroid Build Coastguard Worker  *
6361*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by TextureSubImage3D if type
6362*35238bceSAndroid Build Coastguard Worker  *          is one of UNSIGNED_SHORT_4_4_4_4, UNSIGNED_SHORT_4_4_4_4_REV,
6363*35238bceSAndroid Build Coastguard Worker  *          UNSIGNED_SHORT_5_5_5_1, UNSIGNED_SHORT_1_5_5_5_REV,
6364*35238bceSAndroid Build Coastguard Worker  *          UNSIGNED_INT_8_8_8_8, UNSIGNED_INT_8_8_8_8_REV, UNSIGNED_INT_10_10_10_2,
6365*35238bceSAndroid Build Coastguard Worker  *          or UNSIGNED_INT_2_10_10_10_REV and format is neither RGBA nor BGRA.
6366*35238bceSAndroid Build Coastguard Worker  *
6367*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by TextureSubImage3D if a
6368*35238bceSAndroid Build Coastguard Worker  *          non-zero buffer object name is bound to the PIXEL_UNPACK_BUFFER target
6369*35238bceSAndroid Build Coastguard Worker  *          and the buffer object's data store is currently mapped.
6370*35238bceSAndroid Build Coastguard Worker  *
6371*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by TextureSubImage3D if a
6372*35238bceSAndroid Build Coastguard Worker  *          non-zero buffer object name is bound to the PIXEL_UNPACK_BUFFER target
6373*35238bceSAndroid Build Coastguard Worker  *          and the data would be unpacked from the buffer object such that the
6374*35238bceSAndroid Build Coastguard Worker  *          memory reads required would exceed the data store size.
6375*35238bceSAndroid Build Coastguard Worker  *
6376*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by TextureSubImage3D if a
6377*35238bceSAndroid Build Coastguard Worker  *          non-zero buffer object name is bound to the PIXEL_UNPACK_BUFFER target
6378*35238bceSAndroid Build Coastguard Worker  *          and pixels is not evenly divisible into the number of bytes needed to
6379*35238bceSAndroid Build Coastguard Worker  *          store in memory a datum indicated by type.
6380*35238bceSAndroid Build Coastguard Worker  *
6381*35238bceSAndroid Build Coastguard Worker  *
6382*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_ENUM is generated by CompressedTextureSubImage1D if
6383*35238bceSAndroid Build Coastguard Worker  *          internalformat is not one of the generic compressed internal formats:
6384*35238bceSAndroid Build Coastguard Worker  *          COMPRESSED_RED, COMPRESSED_RG, COMPRESSED_RGB, COMPRESSED_RGBA.
6385*35238bceSAndroid Build Coastguard Worker  *          COMPRESSED_SRGB, or COMPRESSED_SRGB_ALPHA.
6386*35238bceSAndroid Build Coastguard Worker  *
6387*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_VALUE is generated by CompressedTextureSubImage1D if
6388*35238bceSAndroid Build Coastguard Worker  *          imageSize is not consistent with the format, dimensions, and contents of
6389*35238bceSAndroid Build Coastguard Worker  *          the specified compressed image data.
6390*35238bceSAndroid Build Coastguard Worker  *
6391*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by CompressedTextureSubImage1D
6392*35238bceSAndroid Build Coastguard Worker  *          if parameter combinations are not supported by the specific compressed
6393*35238bceSAndroid Build Coastguard Worker  *          internal format as specified in the specific texture compression
6394*35238bceSAndroid Build Coastguard Worker  *          extension.
6395*35238bceSAndroid Build Coastguard Worker  *
6396*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by CompressedTextureSubImage1D
6397*35238bceSAndroid Build Coastguard Worker  *          if a non-zero buffer object name is bound to the PIXEL_UNPACK_BUFFER
6398*35238bceSAndroid Build Coastguard Worker  *          target and the buffer object's data store is currently mapped.
6399*35238bceSAndroid Build Coastguard Worker  *
6400*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by CompressedTextureSubImage1D
6401*35238bceSAndroid Build Coastguard Worker  *          if a non-zero buffer object name is bound to the PIXEL_UNPACK_BUFFER
6402*35238bceSAndroid Build Coastguard Worker  *          target and the data would be unpacked from the buffer object such that
6403*35238bceSAndroid Build Coastguard Worker  *          the memory reads required would exceed the data store size.
6404*35238bceSAndroid Build Coastguard Worker  *
6405*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by CompressedTextureSubImage1D
6406*35238bceSAndroid Build Coastguard Worker  *          function if texture is not the name of an existing texture object.
6407*35238bceSAndroid Build Coastguard Worker  *
6408*35238bceSAndroid Build Coastguard Worker  *
6409*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by CompressedTextureSubImage2D
6410*35238bceSAndroid Build Coastguard Worker  *          if texture is not the name of an existing texture object.
6411*35238bceSAndroid Build Coastguard Worker  *
6412*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_ENUM is generated by CompressedTextureSubImage2D if
6413*35238bceSAndroid Build Coastguard Worker  *          internalformat is of the generic compressed internal formats:
6414*35238bceSAndroid Build Coastguard Worker  *          COMPRESSED_RED, COMPRESSED_RG, COMPRESSED_RGB, COMPRESSED_RGBA.
6415*35238bceSAndroid Build Coastguard Worker  *          COMPRESSED_SRGB, or COMPRESSED_SRGB_ALPHA.
6416*35238bceSAndroid Build Coastguard Worker  *
6417*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by CompressedTextureSubImage2D
6418*35238bceSAndroid Build Coastguard Worker  *          if format does not match the internal format of the texture image being
6419*35238bceSAndroid Build Coastguard Worker  *          modified, since these commands do not provide for image format
6420*35238bceSAndroid Build Coastguard Worker  *          conversion.
6421*35238bceSAndroid Build Coastguard Worker  *
6422*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_VALUE is generated by CompressedTextureSubImage2D if
6423*35238bceSAndroid Build Coastguard Worker  *          imageSize is not consistent with the format, dimensions, and contents of
6424*35238bceSAndroid Build Coastguard Worker  *          the specified compressed image data.
6425*35238bceSAndroid Build Coastguard Worker  *
6426*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by CompressedTextureSubImage2D
6427*35238bceSAndroid Build Coastguard Worker  *          if a non-zero buffer object name is bound to the PIXEL_UNPACK_BUFFER
6428*35238bceSAndroid Build Coastguard Worker  *          target and the buffer object's data store is currently mapped.
6429*35238bceSAndroid Build Coastguard Worker  *
6430*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by CompressedTextureSubImage2D
6431*35238bceSAndroid Build Coastguard Worker  *          if a non-zero buffer object name is bound to the PIXEL_UNPACK_BUFFER
6432*35238bceSAndroid Build Coastguard Worker  *          target and the data would be unpacked from the buffer object such that
6433*35238bceSAndroid Build Coastguard Worker  *          the memory reads required would exceed the data store size.
6434*35238bceSAndroid Build Coastguard Worker  *
6435*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by CompressedTextureSubImage2D
6436*35238bceSAndroid Build Coastguard Worker  *          if the effective target is TEXTURE_RECTANGLE.
6437*35238bceSAndroid Build Coastguard Worker  *
6438*35238bceSAndroid Build Coastguard Worker  *
6439*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by CompressedTextureSubImage3D
6440*35238bceSAndroid Build Coastguard Worker  *          if texture is not the name of an existing texture object.
6441*35238bceSAndroid Build Coastguard Worker  *
6442*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_ENUM is generated by CompressedTextureSubImage3D if
6443*35238bceSAndroid Build Coastguard Worker  *          internalformat is one of the generic compressed internal formats:
6444*35238bceSAndroid Build Coastguard Worker  *          COMPRESSED_RED, COMPRESSED_RG, COMPRESSED_RGB, COMPRESSED_RGBA.
6445*35238bceSAndroid Build Coastguard Worker  *          COMPRESSED_SRGB, or COMPRESSED_SRGB_ALPHA.
6446*35238bceSAndroid Build Coastguard Worker  *
6447*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by CompressedTextureSubImage3D
6448*35238bceSAndroid Build Coastguard Worker  *          if format does not match the internal format of the texture image being
6449*35238bceSAndroid Build Coastguard Worker  *          modified, since these commands do not provide for image format
6450*35238bceSAndroid Build Coastguard Worker  *          conversion.
6451*35238bceSAndroid Build Coastguard Worker  *
6452*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_VALUE is generated by CompressedTextureSubImage3D if
6453*35238bceSAndroid Build Coastguard Worker  *          imageSize is not consistent with the format, dimensions, and contents of
6454*35238bceSAndroid Build Coastguard Worker  *          the specified compressed image data.
6455*35238bceSAndroid Build Coastguard Worker  *
6456*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by CompressedTextureSubImage3D
6457*35238bceSAndroid Build Coastguard Worker  *          if a non-zero buffer object name is bound to the PIXEL_UNPACK_BUFFER
6458*35238bceSAndroid Build Coastguard Worker  *          target and the buffer object's data store is currently mapped.
6459*35238bceSAndroid Build Coastguard Worker  *
6460*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by CompressedTextureSubImage3D
6461*35238bceSAndroid Build Coastguard Worker  *          if a non-zero buffer object name is bound to the PIXEL_UNPACK_BUFFER
6462*35238bceSAndroid Build Coastguard Worker  *          target and the data would be unpacked from the buffer object such that
6463*35238bceSAndroid Build Coastguard Worker  *          the memory reads required would exceed the data store size.
6464*35238bceSAndroid Build Coastguard Worker  */
6465*35238bceSAndroid Build Coastguard Worker class SubImageErrorsTest : public deqp::TestCase, ErrorsUtilities
6466*35238bceSAndroid Build Coastguard Worker {
6467*35238bceSAndroid Build Coastguard Worker public:
6468*35238bceSAndroid Build Coastguard Worker     /* Public member functions. */
6469*35238bceSAndroid Build Coastguard Worker     SubImageErrorsTest(deqp::Context &context);
6470*35238bceSAndroid Build Coastguard Worker 
6471*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
6472*35238bceSAndroid Build Coastguard Worker 
6473*35238bceSAndroid Build Coastguard Worker private:
6474*35238bceSAndroid Build Coastguard Worker     /* Private constructors. */
6475*35238bceSAndroid Build Coastguard Worker     SubImageErrorsTest(const SubImageErrorsTest &other);
6476*35238bceSAndroid Build Coastguard Worker     SubImageErrorsTest &operator=(const SubImageErrorsTest &other);
6477*35238bceSAndroid Build Coastguard Worker 
6478*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_1D_empty;
6479*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_2D_empty;
6480*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_3D_empty;
6481*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_1D;
6482*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_2D;
6483*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_3D;
6484*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_1D_compressed;
6485*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_2D_compressed;
6486*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_3D_compressed;
6487*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_rectangle_compressed;
6488*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_invalid;
6489*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_bo;
6490*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_format_invalid;
6491*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_type_invalid;
6492*35238bceSAndroid Build Coastguard Worker     glw::GLint m_max_texture_size;
6493*35238bceSAndroid Build Coastguard Worker     glw::GLubyte *m_reference_compressed_1D;
6494*35238bceSAndroid Build Coastguard Worker     glw::GLubyte *m_reference_compressed_2D;
6495*35238bceSAndroid Build Coastguard Worker     glw::GLubyte *m_reference_compressed_3D;
6496*35238bceSAndroid Build Coastguard Worker     glw::GLubyte *m_reference_compressed_rectangle;
6497*35238bceSAndroid Build Coastguard Worker     glw::GLint m_reference_compressed_1D_size;
6498*35238bceSAndroid Build Coastguard Worker     glw::GLint m_reference_compressed_2D_size;
6499*35238bceSAndroid Build Coastguard Worker     glw::GLint m_reference_compressed_3D_size;
6500*35238bceSAndroid Build Coastguard Worker     glw::GLint m_reference_compressed_rectangle_size;
6501*35238bceSAndroid Build Coastguard Worker     glw::GLint m_reference_compressed_1D_format;
6502*35238bceSAndroid Build Coastguard Worker     glw::GLint m_reference_compressed_2D_format;
6503*35238bceSAndroid Build Coastguard Worker     glw::GLint m_reference_compressed_3D_format;
6504*35238bceSAndroid Build Coastguard Worker     glw::GLint m_reference_compressed_rectangle_format;
6505*35238bceSAndroid Build Coastguard Worker     glw::GLint m_not_matching_compressed_1D_format;
6506*35238bceSAndroid Build Coastguard Worker     glw::GLint m_not_matching_compressed_1D_size;
6507*35238bceSAndroid Build Coastguard Worker     glw::GLint m_not_matching_compressed_2D_format;
6508*35238bceSAndroid Build Coastguard Worker     glw::GLint m_not_matching_compressed_2D_size;
6509*35238bceSAndroid Build Coastguard Worker     glw::GLint m_not_matching_compressed_3D_format;
6510*35238bceSAndroid Build Coastguard Worker     glw::GLint m_not_matching_compressed_3D_size;
6511*35238bceSAndroid Build Coastguard Worker 
6512*35238bceSAndroid Build Coastguard Worker     void Prepare();
6513*35238bceSAndroid Build Coastguard Worker     bool Test1D();
6514*35238bceSAndroid Build Coastguard Worker     bool Test2D();
6515*35238bceSAndroid Build Coastguard Worker     bool Test3D();
6516*35238bceSAndroid Build Coastguard Worker     bool Test1DCompressed();
6517*35238bceSAndroid Build Coastguard Worker     bool Test2DCompressed();
6518*35238bceSAndroid Build Coastguard Worker     bool Test3DCompressed();
6519*35238bceSAndroid Build Coastguard Worker     void Clean();
6520*35238bceSAndroid Build Coastguard Worker 
6521*35238bceSAndroid Build Coastguard Worker     static const glw::GLushort s_reference[];
6522*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_reference_width;
6523*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_reference_height;
6524*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_reference_depth;
6525*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_reference_size;
6526*35238bceSAndroid Build Coastguard Worker     static const glw::GLenum s_reference_internalformat;
6527*35238bceSAndroid Build Coastguard Worker     static const glw::GLenum s_reference_internalformat_compressed;
6528*35238bceSAndroid Build Coastguard Worker     static const glw::GLenum s_reference_format;
6529*35238bceSAndroid Build Coastguard Worker     static const glw::GLenum s_reference_type;
6530*35238bceSAndroid Build Coastguard Worker };
6531*35238bceSAndroid Build Coastguard Worker /* SubImageErrorsTest class */
6532*35238bceSAndroid Build Coastguard Worker 
6533*35238bceSAndroid Build Coastguard Worker /** @class CopyErrorsTest
6534*35238bceSAndroid Build Coastguard Worker  *
6535*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_FRAMEBUFFER_OPERATION is generated by
6536*35238bceSAndroid Build Coastguard Worker  *          CopyTextureSubImage1D if the object bound to READ_FRAMEBUFFER_BINDING is
6537*35238bceSAndroid Build Coastguard Worker  *          not framebuffer complete.
6538*35238bceSAndroid Build Coastguard Worker  *
6539*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by CopyTextureSubImage1D if
6540*35238bceSAndroid Build Coastguard Worker  *          texture is not the name of an existing texture object, or if the
6541*35238bceSAndroid Build Coastguard Worker  *          effective target of texture is not TEXTURE_1D.
6542*35238bceSAndroid Build Coastguard Worker  *
6543*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_VALUE is generated by CopyTextureSubImage1D if level
6544*35238bceSAndroid Build Coastguard Worker  *          is less than 0.
6545*35238bceSAndroid Build Coastguard Worker  *
6546*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_VALUE is generated by CopyTextureSubImage1D if
6547*35238bceSAndroid Build Coastguard Worker  *          xoffset<0, or (xoffset+width)>w, where w is the TEXTURE_WIDTH of the
6548*35238bceSAndroid Build Coastguard Worker  *          texture image being modified.
6549*35238bceSAndroid Build Coastguard Worker  *
6550*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by CopyTextureSubImage1D if
6551*35238bceSAndroid Build Coastguard Worker  *          the read buffer is NONE, or the value of READ_FRAMEBUFFER_BINDING is
6552*35238bceSAndroid Build Coastguard Worker  *          non-zero, and: the read buffer selects an attachment that has no image
6553*35238bceSAndroid Build Coastguard Worker  *          attached, or the effective value of SAMPLE_BUFFERS for the read
6554*35238bceSAndroid Build Coastguard Worker  *          framebuffer is one.
6555*35238bceSAndroid Build Coastguard Worker  *
6556*35238bceSAndroid Build Coastguard Worker  *
6557*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_FRAMEBUFFER_OPERATION is generated by
6558*35238bceSAndroid Build Coastguard Worker  *          CopyTextureSubImage2D if the object bound to READ_FRAMEBUFFER_BINDING is
6559*35238bceSAndroid Build Coastguard Worker  *          not framebuffer complete.
6560*35238bceSAndroid Build Coastguard Worker  *
6561*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by CopyTextureSubImage2D if
6562*35238bceSAndroid Build Coastguard Worker  *          texture is not the name of an existing texture object.
6563*35238bceSAndroid Build Coastguard Worker  *
6564*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by CopyTextureSubImage2D if
6565*35238bceSAndroid Build Coastguard Worker  *          the effective target of texture does not correspond to one of the
6566*35238bceSAndroid Build Coastguard Worker  *          texture targets supported by the function.
6567*35238bceSAndroid Build Coastguard Worker  *
6568*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_VALUE is generated by CopyTextureSubImage2D if level
6569*35238bceSAndroid Build Coastguard Worker  *          is less than 0.
6570*35238bceSAndroid Build Coastguard Worker  *
6571*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_VALUE is generated by CopyTextureSubImage2D if
6572*35238bceSAndroid Build Coastguard Worker  *          xoffset<0, (xoffset+width)>w, yoffset<0, or (yoffset+height)>0, where w
6573*35238bceSAndroid Build Coastguard Worker  *          is the TEXTURE_WIDTH, h is the TEXTURE_HEIGHT and of the texture image
6574*35238bceSAndroid Build Coastguard Worker  *          being modified.
6575*35238bceSAndroid Build Coastguard Worker  *
6576*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by CopyTextureSubImage2D if:
6577*35238bceSAndroid Build Coastguard Worker  *          the read buffer is NONE, or the value of READ_FRAMEBUFFER_BINDING is
6578*35238bceSAndroid Build Coastguard Worker  *          non-zero, and: the read buffer selects an attachment that has no image
6579*35238bceSAndroid Build Coastguard Worker  *          attached, or the effective value of SAMPLE_BUFFERS for the read
6580*35238bceSAndroid Build Coastguard Worker  *          framebuffer is one.
6581*35238bceSAndroid Build Coastguard Worker  *
6582*35238bceSAndroid Build Coastguard Worker  *
6583*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by CopyTextureSubImage3D if
6584*35238bceSAndroid Build Coastguard Worker  *          the effective target is not TEXTURE_3D, TEXTURE_2D_ARRAY,
6585*35238bceSAndroid Build Coastguard Worker  *          TEXTURE_CUBE_MAP_ARRAY or TEXTURE_CUBE_MAP.
6586*35238bceSAndroid Build Coastguard Worker  *
6587*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_FRAMEBUFFER_OPERATION is generated by
6588*35238bceSAndroid Build Coastguard Worker  *          CopyTextureSubImage3D if the object bound to READ_FRAMEBUFFER_BINDING is
6589*35238bceSAndroid Build Coastguard Worker  *          not framebuffer complete.
6590*35238bceSAndroid Build Coastguard Worker  *
6591*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by CopyTextureSubImage3D if
6592*35238bceSAndroid Build Coastguard Worker  *          texture is not the name of an existing texture object.
6593*35238bceSAndroid Build Coastguard Worker  *
6594*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_VALUE is generated by CopyTextureSubImage3D if level
6595*35238bceSAndroid Build Coastguard Worker  *          is less than 0.
6596*35238bceSAndroid Build Coastguard Worker  *
6597*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_VALUE is generated by CopyTextureSubImage3D if
6598*35238bceSAndroid Build Coastguard Worker  *          xoffset<0, (xoffset+width)>w, yoffset<0, (yoffset+height)>h, zoffset<0,
6599*35238bceSAndroid Build Coastguard Worker  *          or (zoffset+1)>d, where w is the TEXTURE_WIDTH, h is the TEXTURE_HEIGHT,
6600*35238bceSAndroid Build Coastguard Worker  *          d is the TEXTURE_DEPTH and of the texture image being modified. Note
6601*35238bceSAndroid Build Coastguard Worker  *          that w, h, and d include twice the border width.
6602*35238bceSAndroid Build Coastguard Worker  *
6603*35238bceSAndroid Build Coastguard Worker  *          Check that INVALID_OPERATION is generated by CopyTextureSubImage3D if:
6604*35238bceSAndroid Build Coastguard Worker  *          the read buffer is NONE, or the value of READ_FRAMEBUFFER_BINDING is
6605*35238bceSAndroid Build Coastguard Worker  *          non-zero, and: the read buffer selects an attachment that has no image
6606*35238bceSAndroid Build Coastguard Worker  *          attached, or the effective value of SAMPLE_BUFFERS for the read
6607*35238bceSAndroid Build Coastguard Worker  *          framebuffer is one.
6608*35238bceSAndroid Build Coastguard Worker  */
6609*35238bceSAndroid Build Coastguard Worker class CopyErrorsTest : public deqp::TestCase, ErrorsUtilities
6610*35238bceSAndroid Build Coastguard Worker {
6611*35238bceSAndroid Build Coastguard Worker public:
6612*35238bceSAndroid Build Coastguard Worker     /* Public member functions. */
6613*35238bceSAndroid Build Coastguard Worker     CopyErrorsTest(deqp::Context &context);
6614*35238bceSAndroid Build Coastguard Worker 
6615*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
6616*35238bceSAndroid Build Coastguard Worker 
6617*35238bceSAndroid Build Coastguard Worker private:
6618*35238bceSAndroid Build Coastguard Worker     /* Private constructors. */
6619*35238bceSAndroid Build Coastguard Worker     CopyErrorsTest(const CopyErrorsTest &other);
6620*35238bceSAndroid Build Coastguard Worker     CopyErrorsTest &operator=(const CopyErrorsTest &other);
6621*35238bceSAndroid Build Coastguard Worker 
6622*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo;
6623*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo_ms;
6624*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_fbo_incomplete;
6625*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_src;
6626*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_src_ms;
6627*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_1D_dst;
6628*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_2D_dst;
6629*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_3D_dst;
6630*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_invalid;
6631*35238bceSAndroid Build Coastguard Worker 
6632*35238bceSAndroid Build Coastguard Worker     void Prepare();
6633*35238bceSAndroid Build Coastguard Worker     bool Test1D();
6634*35238bceSAndroid Build Coastguard Worker     bool Test2D();
6635*35238bceSAndroid Build Coastguard Worker     bool Test3D();
6636*35238bceSAndroid Build Coastguard Worker     void Clean();
6637*35238bceSAndroid Build Coastguard Worker 
6638*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_width;
6639*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_height;
6640*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_depth;
6641*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_internalformat;
6642*35238bceSAndroid Build Coastguard Worker };
6643*35238bceSAndroid Build Coastguard Worker /* CopyErrorsTest class */
6644*35238bceSAndroid Build Coastguard Worker 
6645*35238bceSAndroid Build Coastguard Worker /** @class ParameterSetupErrorsTest
6646*35238bceSAndroid Build Coastguard Worker  *
6647*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by TextureParameter* if pname is
6648*35238bceSAndroid Build Coastguard Worker  *      not one of the accepted defined values.
6649*35238bceSAndroid Build Coastguard Worker  *
6650*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by TextureParameter* if params
6651*35238bceSAndroid Build Coastguard Worker  *      should have a defined constant value (based on the value of pname) and
6652*35238bceSAndroid Build Coastguard Worker  *       does not.
6653*35238bceSAndroid Build Coastguard Worker  *
6654*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated if TextureParameter{if} is called
6655*35238bceSAndroid Build Coastguard Worker  *      for a non-scalar parameter (pname TEXTURE_BORDER_COLOR or
6656*35238bceSAndroid Build Coastguard Worker  *      TEXTURE_SWIZZLE_RGBA).
6657*35238bceSAndroid Build Coastguard Worker  *
6658*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by TextureParameter* if the
6659*35238bceSAndroid Build Coastguard Worker  *      effective target is either TEXTURE_2D_MULTISAMPLE or
6660*35238bceSAndroid Build Coastguard Worker  *      TEXTURE_2D_MULTISAMPLE_ARRAY, and pname is any of the sampler states.
6661*35238bceSAndroid Build Coastguard Worker  *
6662*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by TextureParameter* if the
6663*35238bceSAndroid Build Coastguard Worker  *      effective target is TEXTURE_RECTANGLE and either of pnames
6664*35238bceSAndroid Build Coastguard Worker  *      TEXTURE_WRAP_S or TEXTURE_WRAP_T is set to either MIRROR_CLAMP_TO_EDGE,
6665*35238bceSAndroid Build Coastguard Worker  *      MIRRORED_REPEAT or REPEAT.
6666*35238bceSAndroid Build Coastguard Worker  *
6667*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by TextureParameter* if the
6668*35238bceSAndroid Build Coastguard Worker  *      effective target is TEXTURE_RECTANGLE and pname TEXTURE_MIN_FILTER is
6669*35238bceSAndroid Build Coastguard Worker  *      set to a value other than NEAREST or LINEAR (no mipmap filtering is
6670*35238bceSAndroid Build Coastguard Worker  *      permitted).
6671*35238bceSAndroid Build Coastguard Worker  *
6672*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by TextureParameter* if the
6673*35238bceSAndroid Build Coastguard Worker  *      effective target is either TEXTURE_2D_MULTISAMPLE or
6674*35238bceSAndroid Build Coastguard Worker  *      TEXTURE_2D_MULTISAMPLE_ARRAY, and pname TEXTURE_BASE_LEVEL is set to a
6675*35238bceSAndroid Build Coastguard Worker  *      value other than zero.
6676*35238bceSAndroid Build Coastguard Worker  *
6677*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by TextureParameter* if
6678*35238bceSAndroid Build Coastguard Worker  *      texture is not the name of an existing texture object.
6679*35238bceSAndroid Build Coastguard Worker  *
6680*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by TextureParameter* if the
6681*35238bceSAndroid Build Coastguard Worker  *      effective target is TEXTURE_RECTANGLE and pname TEXTURE_BASE_LEVEL is
6682*35238bceSAndroid Build Coastguard Worker  *      set to any value other than zero.
6683*35238bceSAndroid Build Coastguard Worker  *
6684*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by TextureParameter* if pname is
6685*35238bceSAndroid Build Coastguard Worker  *      TEXTURE_BASE_LEVEL or TEXTURE_MAX_LEVEL, and param or params is
6686*35238bceSAndroid Build Coastguard Worker  *      negative.
6687*35238bceSAndroid Build Coastguard Worker  */
6688*35238bceSAndroid Build Coastguard Worker class ParameterSetupErrorsTest : public deqp::TestCase, ErrorsUtilities
6689*35238bceSAndroid Build Coastguard Worker {
6690*35238bceSAndroid Build Coastguard Worker public:
6691*35238bceSAndroid Build Coastguard Worker     /* Public member functions. */
6692*35238bceSAndroid Build Coastguard Worker     ParameterSetupErrorsTest(deqp::Context &context);
6693*35238bceSAndroid Build Coastguard Worker 
6694*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
6695*35238bceSAndroid Build Coastguard Worker 
6696*35238bceSAndroid Build Coastguard Worker private:
6697*35238bceSAndroid Build Coastguard Worker     /* Private constructors. */
6698*35238bceSAndroid Build Coastguard Worker     ParameterSetupErrorsTest(const ParameterSetupErrorsTest &other);
6699*35238bceSAndroid Build Coastguard Worker     ParameterSetupErrorsTest &operator=(const ParameterSetupErrorsTest &other);
6700*35238bceSAndroid Build Coastguard Worker 
6701*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_2D;
6702*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_2D_ms;
6703*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_rectangle;
6704*35238bceSAndroid Build Coastguard Worker     glw::GLuint m_to_invalid;
6705*35238bceSAndroid Build Coastguard Worker     glw::GLenum m_pname_invalid;
6706*35238bceSAndroid Build Coastguard Worker     glw::GLenum m_depth_stencil_mode_invalid;
6707*35238bceSAndroid Build Coastguard Worker 
6708*35238bceSAndroid Build Coastguard Worker     void Prepare();
6709*35238bceSAndroid Build Coastguard Worker     bool Testf();
6710*35238bceSAndroid Build Coastguard Worker     bool Testi();
6711*35238bceSAndroid Build Coastguard Worker     bool Testfv();
6712*35238bceSAndroid Build Coastguard Worker     bool Testiv();
6713*35238bceSAndroid Build Coastguard Worker     bool TestIiv();
6714*35238bceSAndroid Build Coastguard Worker     bool TestIuiv();
6715*35238bceSAndroid Build Coastguard Worker     void Clean();
6716*35238bceSAndroid Build Coastguard Worker 
6717*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_width;
6718*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_height;
6719*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_depth;
6720*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_internalformat;
6721*35238bceSAndroid Build Coastguard Worker };
6722*35238bceSAndroid Build Coastguard Worker /* ParameterSetupErrorsTest class */
6723*35238bceSAndroid Build Coastguard Worker 
6724*35238bceSAndroid Build Coastguard Worker /** @class GenerateMipmapErrorsTest
6725*35238bceSAndroid Build Coastguard Worker  *
6726*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by GenerateTextureMipmap if
6727*35238bceSAndroid Build Coastguard Worker  *      texture is not the name of an existing texture object.
6728*35238bceSAndroid Build Coastguard Worker  *
6729*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by GenerateTextureMipmap if
6730*35238bceSAndroid Build Coastguard Worker  *      target is TEXTURE_CUBE_MAP or TEXTURE_CUBE_MAP_ARRAY, and the specified
6731*35238bceSAndroid Build Coastguard Worker  *      texture object is not cube complete or cube array complete,
6732*35238bceSAndroid Build Coastguard Worker  *      respectively.
6733*35238bceSAndroid Build Coastguard Worker  */
6734*35238bceSAndroid Build Coastguard Worker class GenerateMipmapErrorsTest : public deqp::TestCase, ErrorsUtilities
6735*35238bceSAndroid Build Coastguard Worker {
6736*35238bceSAndroid Build Coastguard Worker public:
6737*35238bceSAndroid Build Coastguard Worker     /* Public member functions. */
6738*35238bceSAndroid Build Coastguard Worker     GenerateMipmapErrorsTest(deqp::Context &context);
6739*35238bceSAndroid Build Coastguard Worker 
6740*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
6741*35238bceSAndroid Build Coastguard Worker 
6742*35238bceSAndroid Build Coastguard Worker private:
6743*35238bceSAndroid Build Coastguard Worker     /* Private constructors. */
6744*35238bceSAndroid Build Coastguard Worker     GenerateMipmapErrorsTest(const GenerateMipmapErrorsTest &other);
6745*35238bceSAndroid Build Coastguard Worker     GenerateMipmapErrorsTest &operator=(const GenerateMipmapErrorsTest &other);
6746*35238bceSAndroid Build Coastguard Worker 
6747*35238bceSAndroid Build Coastguard Worker     static const glw::GLubyte s_reference_data[];
6748*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_reference_width;
6749*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_reference_height;
6750*35238bceSAndroid Build Coastguard Worker     static const glw::GLenum s_reference_internalformat;
6751*35238bceSAndroid Build Coastguard Worker     static const glw::GLenum s_reference_format;
6752*35238bceSAndroid Build Coastguard Worker     static const glw::GLenum s_reference_type;
6753*35238bceSAndroid Build Coastguard Worker };
6754*35238bceSAndroid Build Coastguard Worker /* GenerateMipmapErrorsTest class */
6755*35238bceSAndroid Build Coastguard Worker 
6756*35238bceSAndroid Build Coastguard Worker /** @class BindUnitErrorsTest
6757*35238bceSAndroid Build Coastguard Worker  *
6758*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION error is generated if texture is not zero
6759*35238bceSAndroid Build Coastguard Worker  *      or the name of an existing texture object.
6760*35238bceSAndroid Build Coastguard Worker  */
6761*35238bceSAndroid Build Coastguard Worker class BindUnitErrorsTest : public deqp::TestCase, ErrorsUtilities
6762*35238bceSAndroid Build Coastguard Worker {
6763*35238bceSAndroid Build Coastguard Worker public:
6764*35238bceSAndroid Build Coastguard Worker     /* Public member functions. */
6765*35238bceSAndroid Build Coastguard Worker     BindUnitErrorsTest(deqp::Context &context);
6766*35238bceSAndroid Build Coastguard Worker 
6767*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
6768*35238bceSAndroid Build Coastguard Worker 
6769*35238bceSAndroid Build Coastguard Worker private:
6770*35238bceSAndroid Build Coastguard Worker     /* Private constructors. */
6771*35238bceSAndroid Build Coastguard Worker     BindUnitErrorsTest(const BindUnitErrorsTest &other);
6772*35238bceSAndroid Build Coastguard Worker     BindUnitErrorsTest &operator=(const BindUnitErrorsTest &other);
6773*35238bceSAndroid Build Coastguard Worker };
6774*35238bceSAndroid Build Coastguard Worker /* BindUnitErrorsTest class */
6775*35238bceSAndroid Build Coastguard Worker 
6776*35238bceSAndroid Build Coastguard Worker /** @class ImageQueryErrorsTest
6777*35238bceSAndroid Build Coastguard Worker  *
6778*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by GetTextureImage if texture
6779*35238bceSAndroid Build Coastguard Worker  *      is not the name of an existing texture object.
6780*35238bceSAndroid Build Coastguard Worker  *
6781*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by GetTextureImage functions if
6782*35238bceSAndroid Build Coastguard Worker  *      resulting texture target is not an accepted value TEXTURE_1D,
6783*35238bceSAndroid Build Coastguard Worker  *      TEXTURE_2D, TEXTURE_3D, TEXTURE_1D_ARRAY, TEXTURE_2D_ARRAY,
6784*35238bceSAndroid Build Coastguard Worker  *      TEXTURE_CUBE_MAP_ARRAY, TEXTURE_RECTANGLE, and TEXTURE_CUBE_MAP.
6785*35238bceSAndroid Build Coastguard Worker  *
6786*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION error is generated by GetTextureImage if
6787*35238bceSAndroid Build Coastguard Worker  *      the effective target is TEXTURE_CUBE_MAP or TEXTURE_CUBE_MAP_ARRAY, and
6788*35238bceSAndroid Build Coastguard Worker  *      the texture object is not cube complete or cube array complete,
6789*35238bceSAndroid Build Coastguard Worker  *      respectively.
6790*35238bceSAndroid Build Coastguard Worker  *
6791*35238bceSAndroid Build Coastguard Worker  *      Check that GL_INVALID_VALUE is generated if level is less than 0 or
6792*35238bceSAndroid Build Coastguard Worker  *      larger than the maximum allowable level.
6793*35238bceSAndroid Build Coastguard Worker  *
6794*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE error is generated if level is non-zero and the
6795*35238bceSAndroid Build Coastguard Worker  *      effective target is TEXTURE_RECTANGLE.
6796*35238bceSAndroid Build Coastguard Worker  *
6797*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION error is generated if any of the following
6798*35238bceSAndroid Build Coastguard Worker  *      mismatches between format and the internal format of the texture image
6799*35238bceSAndroid Build Coastguard Worker  *      exist:
6800*35238bceSAndroid Build Coastguard Worker  *       -  format is a color format (one of the formats in table 8.3 whose
6801*35238bceSAndroid Build Coastguard Worker  *          target is the color buffer) and the base internal format of the
6802*35238bceSAndroid Build Coastguard Worker  *          texture image is not a color format.
6803*35238bceSAndroid Build Coastguard Worker  *       -  format is DEPTH_COMPONENT and the base internal format is  not
6804*35238bceSAndroid Build Coastguard Worker  *          DEPTH_COMPONENT or DEPTH_STENCIL
6805*35238bceSAndroid Build Coastguard Worker  *       -  format is DEPTH_STENCIL and the base internal format is not
6806*35238bceSAndroid Build Coastguard Worker  *          DEPTH_STENCIL
6807*35238bceSAndroid Build Coastguard Worker  *       -  format is STENCIL_INDEX and the base internal format is not
6808*35238bceSAndroid Build Coastguard Worker  *          STENCIL_INDEX or DEPTH_STENCIL
6809*35238bceSAndroid Build Coastguard Worker  *       -  format is one of the integer formats in table 8.3 and the internal
6810*35238bceSAndroid Build Coastguard Worker  *          format of the texture image is not integer, or format is not one of
6811*35238bceSAndroid Build Coastguard Worker  *          the integer formats in table 8.3 and the internal format is integer.
6812*35238bceSAndroid Build Coastguard Worker  *
6813*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION error is generated if a pixel pack buffer
6814*35238bceSAndroid Build Coastguard Worker  *      object is bound and packing the texture image into the buffer's memory
6815*35238bceSAndroid Build Coastguard Worker  *      would exceed the size of the buffer.
6816*35238bceSAndroid Build Coastguard Worker  *
6817*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION error is generated if a pixel pack buffer
6818*35238bceSAndroid Build Coastguard Worker  *      object is bound and pixels is not evenly divisible by the number of
6819*35238bceSAndroid Build Coastguard Worker  *      basic machine units needed to store in memory the GL data type
6820*35238bceSAndroid Build Coastguard Worker  *      corresponding to type (see table 8.2).
6821*35238bceSAndroid Build Coastguard Worker  *
6822*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION error is generated by GetTextureImage if
6823*35238bceSAndroid Build Coastguard Worker  *      the buffer size required to store the requested data is greater than
6824*35238bceSAndroid Build Coastguard Worker  *      bufSize.
6825*35238bceSAndroid Build Coastguard Worker  *
6826*35238bceSAndroid Build Coastguard Worker  *
6827*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by GetCompressedTextureImage
6828*35238bceSAndroid Build Coastguard Worker  *      if texture is not the name of an existing texture object.
6829*35238bceSAndroid Build Coastguard Worker  *
6830*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by GetCompressedTextureImage if
6831*35238bceSAndroid Build Coastguard Worker  *      level is less than zero or greater than the maximum number of LODs
6832*35238bceSAndroid Build Coastguard Worker  *      permitted by the implementation.
6833*35238bceSAndroid Build Coastguard Worker  *
6834*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated if GetCompressedTextureImage
6835*35238bceSAndroid Build Coastguard Worker  *      is used to retrieve a texture that is in an uncompressed internal
6836*35238bceSAndroid Build Coastguard Worker  *      format.
6837*35238bceSAndroid Build Coastguard Worker  *
6838*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by GetCompressedTextureImage
6839*35238bceSAndroid Build Coastguard Worker  *      if a non-zero buffer object name is bound to the PIXEL_PACK_BUFFER
6840*35238bceSAndroid Build Coastguard Worker  *      target, the buffer storage was not initialized with BufferStorage using
6841*35238bceSAndroid Build Coastguard Worker  *      MAP_PERSISTENT_BIT flag, and the buffer object's data store is currently
6842*35238bceSAndroid Build Coastguard Worker  *      mapped.
6843*35238bceSAndroid Build Coastguard Worker  *
6844*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by GetCompressedTextureImage
6845*35238bceSAndroid Build Coastguard Worker  *      if a non-zero buffer object name is bound to the PIXEL_PACK_BUFFER
6846*35238bceSAndroid Build Coastguard Worker  *      target and the data would be packed to the buffer object such that the
6847*35238bceSAndroid Build Coastguard Worker  *      memory writes required would exceed the data store size.
6848*35238bceSAndroid Build Coastguard Worker  */
6849*35238bceSAndroid Build Coastguard Worker class ImageQueryErrorsTest : public deqp::TestCase, ErrorsUtilities
6850*35238bceSAndroid Build Coastguard Worker {
6851*35238bceSAndroid Build Coastguard Worker public:
6852*35238bceSAndroid Build Coastguard Worker     /* Public member functions. */
6853*35238bceSAndroid Build Coastguard Worker     ImageQueryErrorsTest(deqp::Context &context);
6854*35238bceSAndroid Build Coastguard Worker 
6855*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
6856*35238bceSAndroid Build Coastguard Worker 
6857*35238bceSAndroid Build Coastguard Worker private:
6858*35238bceSAndroid Build Coastguard Worker     /* Private constructors. */
6859*35238bceSAndroid Build Coastguard Worker     ImageQueryErrorsTest(const ImageQueryErrorsTest &other);
6860*35238bceSAndroid Build Coastguard Worker     ImageQueryErrorsTest &operator=(const ImageQueryErrorsTest &other);
6861*35238bceSAndroid Build Coastguard Worker 
6862*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_reference_data[];
6863*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_reference_width;
6864*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_reference_height;
6865*35238bceSAndroid Build Coastguard Worker     static const glw::GLuint s_reference_size;
6866*35238bceSAndroid Build Coastguard Worker     static const glw::GLenum s_reference_internalformat;
6867*35238bceSAndroid Build Coastguard Worker     static const glw::GLenum s_reference_internalformat_int;
6868*35238bceSAndroid Build Coastguard Worker     static const glw::GLenum s_reference_internalformat_compressed;
6869*35238bceSAndroid Build Coastguard Worker     static const glw::GLenum s_reference_format;
6870*35238bceSAndroid Build Coastguard Worker     static const glw::GLenum s_reference_type;
6871*35238bceSAndroid Build Coastguard Worker };
6872*35238bceSAndroid Build Coastguard Worker /* ImageQueryErrorsTest class */
6873*35238bceSAndroid Build Coastguard Worker 
6874*35238bceSAndroid Build Coastguard Worker /** @class LevelParameterErrorsTest
6875*35238bceSAndroid Build Coastguard Worker  *
6876*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by GetTextureLevelParameterfv
6877*35238bceSAndroid Build Coastguard Worker  *      and GetTextureLevelParameteriv functions if texture is not the name of
6878*35238bceSAndroid Build Coastguard Worker  *      an existing texture object.
6879*35238bceSAndroid Build Coastguard Worker  *
6880*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE is generated by GetTextureLevelParameter* if
6881*35238bceSAndroid Build Coastguard Worker  *      level is less than 0.
6882*35238bceSAndroid Build Coastguard Worker  *
6883*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_VALUE may be generated if level is greater than
6884*35238bceSAndroid Build Coastguard Worker  *      log2 max, where max is the returned value of MAX_TEXTURE_SIZE.
6885*35238bceSAndroid Build Coastguard Worker  *
6886*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by GetTextureLevelParameter*
6887*35238bceSAndroid Build Coastguard Worker  *      if TEXTURE_COMPRESSED_IMAGE_SIZE is queried on texture images with an
6888*35238bceSAndroid Build Coastguard Worker  *      uncompressed internal format or on proxy targets.
6889*35238bceSAndroid Build Coastguard Worker  *
6890*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM error is generated by GetTextureLevelParameter*
6891*35238bceSAndroid Build Coastguard Worker  *      if pname is not one of supported constants.
6892*35238bceSAndroid Build Coastguard Worker  */
6893*35238bceSAndroid Build Coastguard Worker class LevelParameterErrorsTest : public deqp::TestCase, ErrorsUtilities
6894*35238bceSAndroid Build Coastguard Worker {
6895*35238bceSAndroid Build Coastguard Worker public:
6896*35238bceSAndroid Build Coastguard Worker     /* Public member functions. */
6897*35238bceSAndroid Build Coastguard Worker     LevelParameterErrorsTest(deqp::Context &context);
6898*35238bceSAndroid Build Coastguard Worker 
6899*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
6900*35238bceSAndroid Build Coastguard Worker 
6901*35238bceSAndroid Build Coastguard Worker private:
6902*35238bceSAndroid Build Coastguard Worker     /* Private constructors. */
6903*35238bceSAndroid Build Coastguard Worker     LevelParameterErrorsTest(const LevelParameterErrorsTest &other);
6904*35238bceSAndroid Build Coastguard Worker     LevelParameterErrorsTest &operator=(const LevelParameterErrorsTest &other);
6905*35238bceSAndroid Build Coastguard Worker };
6906*35238bceSAndroid Build Coastguard Worker /* LevelParameterErrorsTest class */
6907*35238bceSAndroid Build Coastguard Worker 
6908*35238bceSAndroid Build Coastguard Worker /** @class
6909*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM is generated by glGetTextureParameter* if pname
6910*35238bceSAndroid Build Coastguard Worker  *      is not an accepted value.
6911*35238bceSAndroid Build Coastguard Worker  *
6912*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_OPERATION is generated by glGetTextureParameter* if
6913*35238bceSAndroid Build Coastguard Worker  *      texture is not the name of an existing texture object.
6914*35238bceSAndroid Build Coastguard Worker  *
6915*35238bceSAndroid Build Coastguard Worker  *      Check that INVALID_ENUM error is generated if the effective target is
6916*35238bceSAndroid Build Coastguard Worker  *      not one of the supported texture targets (eg. TEXTURE_BUFFER).
6917*35238bceSAndroid Build Coastguard Worker  */
6918*35238bceSAndroid Build Coastguard Worker class ParameterErrorsTest : public deqp::TestCase, ErrorsUtilities
6919*35238bceSAndroid Build Coastguard Worker {
6920*35238bceSAndroid Build Coastguard Worker public:
6921*35238bceSAndroid Build Coastguard Worker     /* Public member functions. */
6922*35238bceSAndroid Build Coastguard Worker     ParameterErrorsTest(deqp::Context &context);
6923*35238bceSAndroid Build Coastguard Worker 
6924*35238bceSAndroid Build Coastguard Worker     virtual tcu::TestNode::IterateResult iterate();
6925*35238bceSAndroid Build Coastguard Worker 
6926*35238bceSAndroid Build Coastguard Worker private:
6927*35238bceSAndroid Build Coastguard Worker     /* Private constructors. */
6928*35238bceSAndroid Build Coastguard Worker     ParameterErrorsTest(const ParameterErrorsTest &other);
6929*35238bceSAndroid Build Coastguard Worker     ParameterErrorsTest &operator=(const ParameterErrorsTest &other);
6930*35238bceSAndroid Build Coastguard Worker };
6931*35238bceSAndroid Build Coastguard Worker /* ParameterErrorsTest class */
6932*35238bceSAndroid Build Coastguard Worker } // namespace Textures
6933*35238bceSAndroid Build Coastguard Worker } // namespace DirectStateAccess
6934*35238bceSAndroid Build Coastguard Worker } // namespace gl4cts
6935*35238bceSAndroid Build Coastguard Worker 
6936*35238bceSAndroid Build Coastguard Worker #endif // _GL4CDIRECTSTATEACCESSTESTS_HPP
6937