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