xref: /aosp_15_r20/external/deqp/modules/gles31/functional/es31fIndexedStateQueryTests.cpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
2*35238bceSAndroid Build Coastguard Worker  * drawElements Quality Program OpenGL ES 3.1 Module
3*35238bceSAndroid Build Coastguard Worker  * -------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker  *
5*35238bceSAndroid Build Coastguard Worker  * Copyright 2015 The Android Open Source Project
6*35238bceSAndroid Build Coastguard Worker  *
7*35238bceSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
8*35238bceSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
9*35238bceSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
10*35238bceSAndroid Build Coastguard Worker  *
11*35238bceSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
12*35238bceSAndroid Build Coastguard Worker  *
13*35238bceSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
14*35238bceSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
15*35238bceSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16*35238bceSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
17*35238bceSAndroid Build Coastguard Worker  * limitations under the License.
18*35238bceSAndroid Build Coastguard Worker  *
19*35238bceSAndroid Build Coastguard Worker  *//*!
20*35238bceSAndroid Build Coastguard Worker  * \file
21*35238bceSAndroid Build Coastguard Worker  * \brief Indexed state query tests
22*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker 
24*35238bceSAndroid Build Coastguard Worker #include "es31fIndexedStateQueryTests.hpp"
25*35238bceSAndroid Build Coastguard Worker #include "tcuTestLog.hpp"
26*35238bceSAndroid Build Coastguard Worker #include "tcuFormatUtil.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "gluRenderContext.hpp"
28*35238bceSAndroid Build Coastguard Worker #include "gluCallLogWrapper.hpp"
29*35238bceSAndroid Build Coastguard Worker #include "gluStrUtil.hpp"
30*35238bceSAndroid Build Coastguard Worker #include "gluContextInfo.hpp"
31*35238bceSAndroid Build Coastguard Worker #include "gluObjectWrapper.hpp"
32*35238bceSAndroid Build Coastguard Worker #include "glwFunctions.hpp"
33*35238bceSAndroid Build Coastguard Worker #include "glwEnums.hpp"
34*35238bceSAndroid Build Coastguard Worker #include "glsStateQueryUtil.hpp"
35*35238bceSAndroid Build Coastguard Worker #include "deRandom.hpp"
36*35238bceSAndroid Build Coastguard Worker #include "deStringUtil.hpp"
37*35238bceSAndroid Build Coastguard Worker 
38*35238bceSAndroid Build Coastguard Worker namespace deqp
39*35238bceSAndroid Build Coastguard Worker {
40*35238bceSAndroid Build Coastguard Worker namespace gles31
41*35238bceSAndroid Build Coastguard Worker {
42*35238bceSAndroid Build Coastguard Worker namespace Functional
43*35238bceSAndroid Build Coastguard Worker {
44*35238bceSAndroid Build Coastguard Worker namespace
45*35238bceSAndroid Build Coastguard Worker {
46*35238bceSAndroid Build Coastguard Worker 
47*35238bceSAndroid Build Coastguard Worker using namespace gls::StateQueryUtil;
48*35238bceSAndroid Build Coastguard Worker 
getVerifierSuffix(QueryType type)49*35238bceSAndroid Build Coastguard Worker static const char *getVerifierSuffix(QueryType type)
50*35238bceSAndroid Build Coastguard Worker {
51*35238bceSAndroid Build Coastguard Worker     switch (type)
52*35238bceSAndroid Build Coastguard Worker     {
53*35238bceSAndroid Build Coastguard Worker     case QUERY_INDEXED_BOOLEAN:
54*35238bceSAndroid Build Coastguard Worker         return "getbooleani_v";
55*35238bceSAndroid Build Coastguard Worker     case QUERY_INDEXED_INTEGER:
56*35238bceSAndroid Build Coastguard Worker         return "getintegeri_v";
57*35238bceSAndroid Build Coastguard Worker     case QUERY_INDEXED_INTEGER64:
58*35238bceSAndroid Build Coastguard Worker         return "getinteger64i_v";
59*35238bceSAndroid Build Coastguard Worker     case QUERY_INDEXED_BOOLEAN_VEC4:
60*35238bceSAndroid Build Coastguard Worker         return "getbooleani_v";
61*35238bceSAndroid Build Coastguard Worker     case QUERY_INDEXED_INTEGER_VEC4:
62*35238bceSAndroid Build Coastguard Worker         return "getintegeri_v";
63*35238bceSAndroid Build Coastguard Worker     case QUERY_INDEXED_INTEGER64_VEC4:
64*35238bceSAndroid Build Coastguard Worker         return "getinteger64i_v";
65*35238bceSAndroid Build Coastguard Worker     case QUERY_INDEXED_ISENABLED:
66*35238bceSAndroid Build Coastguard Worker         return "isenabledi";
67*35238bceSAndroid Build Coastguard Worker     default:
68*35238bceSAndroid Build Coastguard Worker         DE_ASSERT(false);
69*35238bceSAndroid Build Coastguard Worker         return DE_NULL;
70*35238bceSAndroid Build Coastguard Worker     }
71*35238bceSAndroid Build Coastguard Worker }
72*35238bceSAndroid Build Coastguard Worker 
isExtensionSupported(Context & context,std::string extensionName)73*35238bceSAndroid Build Coastguard Worker void isExtensionSupported(Context &context, std::string extensionName)
74*35238bceSAndroid Build Coastguard Worker {
75*35238bceSAndroid Build Coastguard Worker     if (contextSupports(context.getRenderContext().getType(), glu::ApiType::core(4, 5)))
76*35238bceSAndroid Build Coastguard Worker         return;
77*35238bceSAndroid Build Coastguard Worker 
78*35238bceSAndroid Build Coastguard Worker     if (extensionName == "GL_EXT_draw_buffers_indexed" || extensionName == "GL_KHR_blend_equation_advanced")
79*35238bceSAndroid Build Coastguard Worker     {
80*35238bceSAndroid Build Coastguard Worker         if (!contextSupports(context.getRenderContext().getType(), glu::ApiType::es(3, 2)) &&
81*35238bceSAndroid Build Coastguard Worker             !context.getContextInfo().isExtensionSupported(extensionName.c_str()))
82*35238bceSAndroid Build Coastguard Worker             TCU_THROW(NotSupportedError,
83*35238bceSAndroid Build Coastguard Worker                       (std::string("Extension ") + extensionName + std::string(" not supported.")).c_str());
84*35238bceSAndroid Build Coastguard Worker     }
85*35238bceSAndroid Build Coastguard Worker     else if (!context.getContextInfo().isExtensionSupported(extensionName.c_str()))
86*35238bceSAndroid Build Coastguard Worker         TCU_THROW(NotSupportedError,
87*35238bceSAndroid Build Coastguard Worker                   (std::string("Extension ") + extensionName + std::string(" not supported.")).c_str());
88*35238bceSAndroid Build Coastguard Worker }
89*35238bceSAndroid Build Coastguard Worker 
90*35238bceSAndroid Build Coastguard Worker class SampleMaskCase : public TestCase
91*35238bceSAndroid Build Coastguard Worker {
92*35238bceSAndroid Build Coastguard Worker public:
93*35238bceSAndroid Build Coastguard Worker     SampleMaskCase(Context &context, const char *name, const char *desc, QueryType verifierType);
94*35238bceSAndroid Build Coastguard Worker 
95*35238bceSAndroid Build Coastguard Worker private:
96*35238bceSAndroid Build Coastguard Worker     void init(void);
97*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
98*35238bceSAndroid Build Coastguard Worker 
99*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
100*35238bceSAndroid Build Coastguard Worker     int m_maxSampleMaskWords;
101*35238bceSAndroid Build Coastguard Worker };
102*35238bceSAndroid Build Coastguard Worker 
SampleMaskCase(Context & context,const char * name,const char * desc,QueryType verifierType)103*35238bceSAndroid Build Coastguard Worker SampleMaskCase::SampleMaskCase(Context &context, const char *name, const char *desc, QueryType verifierType)
104*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
105*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
106*35238bceSAndroid Build Coastguard Worker     , m_maxSampleMaskWords(-1)
107*35238bceSAndroid Build Coastguard Worker {
108*35238bceSAndroid Build Coastguard Worker }
109*35238bceSAndroid Build Coastguard Worker 
init(void)110*35238bceSAndroid Build Coastguard Worker void SampleMaskCase::init(void)
111*35238bceSAndroid Build Coastguard Worker {
112*35238bceSAndroid Build Coastguard Worker     const glw::Functions &gl = m_context.getRenderContext().getFunctions();
113*35238bceSAndroid Build Coastguard Worker 
114*35238bceSAndroid Build Coastguard Worker     gl.getIntegerv(GL_MAX_SAMPLE_MASK_WORDS, &m_maxSampleMaskWords);
115*35238bceSAndroid Build Coastguard Worker     GLU_EXPECT_NO_ERROR(gl.getError(), "query sample mask words");
116*35238bceSAndroid Build Coastguard Worker 
117*35238bceSAndroid Build Coastguard Worker     // mask word count ok?
118*35238bceSAndroid Build Coastguard Worker     if (m_maxSampleMaskWords <= 0)
119*35238bceSAndroid Build Coastguard Worker         throw tcu::TestError("Minimum value of GL_MAX_SAMPLE_MASK_WORDS is 1. Got " +
120*35238bceSAndroid Build Coastguard Worker                              de::toString(m_maxSampleMaskWords));
121*35238bceSAndroid Build Coastguard Worker 
122*35238bceSAndroid Build Coastguard Worker     m_testCtx.getLog() << tcu::TestLog::Message << "GL_MAX_SAMPLE_MASK_WORDS = " << m_maxSampleMaskWords
123*35238bceSAndroid Build Coastguard Worker                        << tcu::TestLog::EndMessage;
124*35238bceSAndroid Build Coastguard Worker }
125*35238bceSAndroid Build Coastguard Worker 
iterate(void)126*35238bceSAndroid Build Coastguard Worker SampleMaskCase::IterateResult SampleMaskCase::iterate(void)
127*35238bceSAndroid Build Coastguard Worker {
128*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
129*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
130*35238bceSAndroid Build Coastguard Worker 
131*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
132*35238bceSAndroid Build Coastguard Worker 
133*35238bceSAndroid Build Coastguard Worker     // initial values
134*35238bceSAndroid Build Coastguard Worker     {
135*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "initial", "Initial values");
136*35238bceSAndroid Build Coastguard Worker 
137*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < m_maxSampleMaskWords; ++ndx)
138*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_SAMPLE_MASK_VALUE, ndx, -1, m_verifierType);
139*35238bceSAndroid Build Coastguard Worker     }
140*35238bceSAndroid Build Coastguard Worker 
141*35238bceSAndroid Build Coastguard Worker     // fixed values
142*35238bceSAndroid Build Coastguard Worker     {
143*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "fixed", "Fixed values");
144*35238bceSAndroid Build Coastguard Worker 
145*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < m_maxSampleMaskWords; ++ndx)
146*35238bceSAndroid Build Coastguard Worker         {
147*35238bceSAndroid Build Coastguard Worker             gl.glSampleMaski(ndx, 0);
148*35238bceSAndroid Build Coastguard Worker             GLU_EXPECT_NO_ERROR(gl.glGetError(), "glSampleMaski");
149*35238bceSAndroid Build Coastguard Worker 
150*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_SAMPLE_MASK_VALUE, ndx, 0, m_verifierType);
151*35238bceSAndroid Build Coastguard Worker         }
152*35238bceSAndroid Build Coastguard Worker     }
153*35238bceSAndroid Build Coastguard Worker 
154*35238bceSAndroid Build Coastguard Worker     // random masks
155*35238bceSAndroid Build Coastguard Worker     {
156*35238bceSAndroid Build Coastguard Worker         const int numRandomTest = 20;
157*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "random", "Random values");
158*35238bceSAndroid Build Coastguard Worker         de::Random rnd(0x4312);
159*35238bceSAndroid Build Coastguard Worker 
160*35238bceSAndroid Build Coastguard Worker         for (int testNdx = 0; testNdx < numRandomTest; ++testNdx)
161*35238bceSAndroid Build Coastguard Worker         {
162*35238bceSAndroid Build Coastguard Worker             const glw::GLint maskIndex = (glw::GLint)(rnd.getUint32() % m_maxSampleMaskWords);
163*35238bceSAndroid Build Coastguard Worker             glw::GLint mask            = (glw::GLint)(rnd.getUint32());
164*35238bceSAndroid Build Coastguard Worker 
165*35238bceSAndroid Build Coastguard Worker             gl.glSampleMaski(maskIndex, mask);
166*35238bceSAndroid Build Coastguard Worker             GLU_EXPECT_NO_ERROR(gl.glGetError(), "glSampleMaski");
167*35238bceSAndroid Build Coastguard Worker 
168*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_SAMPLE_MASK_VALUE, maskIndex, mask, m_verifierType);
169*35238bceSAndroid Build Coastguard Worker         }
170*35238bceSAndroid Build Coastguard Worker     }
171*35238bceSAndroid Build Coastguard Worker 
172*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
173*35238bceSAndroid Build Coastguard Worker     return STOP;
174*35238bceSAndroid Build Coastguard Worker }
175*35238bceSAndroid Build Coastguard Worker 
176*35238bceSAndroid Build Coastguard Worker class MinValueIndexed3Case : public TestCase
177*35238bceSAndroid Build Coastguard Worker {
178*35238bceSAndroid Build Coastguard Worker public:
179*35238bceSAndroid Build Coastguard Worker     MinValueIndexed3Case(Context &context, const char *name, const char *desc, glw::GLenum target,
180*35238bceSAndroid Build Coastguard Worker                          const tcu::IVec3 &ref, QueryType verifierType);
181*35238bceSAndroid Build Coastguard Worker 
182*35238bceSAndroid Build Coastguard Worker private:
183*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
184*35238bceSAndroid Build Coastguard Worker 
185*35238bceSAndroid Build Coastguard Worker     const glw::GLenum m_target;
186*35238bceSAndroid Build Coastguard Worker     const tcu::IVec3 m_ref;
187*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
188*35238bceSAndroid Build Coastguard Worker };
189*35238bceSAndroid Build Coastguard Worker 
MinValueIndexed3Case(Context & context,const char * name,const char * desc,glw::GLenum target,const tcu::IVec3 & ref,QueryType verifierType)190*35238bceSAndroid Build Coastguard Worker MinValueIndexed3Case::MinValueIndexed3Case(Context &context, const char *name, const char *desc, glw::GLenum target,
191*35238bceSAndroid Build Coastguard Worker                                            const tcu::IVec3 &ref, QueryType verifierType)
192*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
193*35238bceSAndroid Build Coastguard Worker     , m_target(target)
194*35238bceSAndroid Build Coastguard Worker     , m_ref(ref)
195*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
196*35238bceSAndroid Build Coastguard Worker {
197*35238bceSAndroid Build Coastguard Worker }
198*35238bceSAndroid Build Coastguard Worker 
iterate(void)199*35238bceSAndroid Build Coastguard Worker MinValueIndexed3Case::IterateResult MinValueIndexed3Case::iterate(void)
200*35238bceSAndroid Build Coastguard Worker {
201*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
202*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
203*35238bceSAndroid Build Coastguard Worker 
204*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
205*35238bceSAndroid Build Coastguard Worker 
206*35238bceSAndroid Build Coastguard Worker     for (int ndx = 0; ndx < 3; ++ndx)
207*35238bceSAndroid Build Coastguard Worker     {
208*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "Element", "Element " + de::toString(ndx));
209*35238bceSAndroid Build Coastguard Worker 
210*35238bceSAndroid Build Coastguard Worker         verifyStateIndexedIntegerMin(result, gl, m_target, ndx, m_ref[ndx], m_verifierType);
211*35238bceSAndroid Build Coastguard Worker     }
212*35238bceSAndroid Build Coastguard Worker 
213*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
214*35238bceSAndroid Build Coastguard Worker     return STOP;
215*35238bceSAndroid Build Coastguard Worker }
216*35238bceSAndroid Build Coastguard Worker 
217*35238bceSAndroid Build Coastguard Worker class BufferBindingCase : public TestCase
218*35238bceSAndroid Build Coastguard Worker {
219*35238bceSAndroid Build Coastguard Worker public:
220*35238bceSAndroid Build Coastguard Worker     BufferBindingCase(Context &context, const char *name, const char *desc, glw::GLenum queryTarget,
221*35238bceSAndroid Build Coastguard Worker                       glw::GLenum bufferTarget, glw::GLenum numBindingsTarget, QueryType verifierType);
222*35238bceSAndroid Build Coastguard Worker 
223*35238bceSAndroid Build Coastguard Worker private:
224*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
225*35238bceSAndroid Build Coastguard Worker 
226*35238bceSAndroid Build Coastguard Worker     const glw::GLenum m_queryTarget;
227*35238bceSAndroid Build Coastguard Worker     const glw::GLenum m_bufferTarget;
228*35238bceSAndroid Build Coastguard Worker     const glw::GLenum m_numBindingsTarget;
229*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
230*35238bceSAndroid Build Coastguard Worker };
231*35238bceSAndroid Build Coastguard Worker 
BufferBindingCase(Context & context,const char * name,const char * desc,glw::GLenum queryTarget,glw::GLenum bufferTarget,glw::GLenum numBindingsTarget,QueryType verifierType)232*35238bceSAndroid Build Coastguard Worker BufferBindingCase::BufferBindingCase(Context &context, const char *name, const char *desc, glw::GLenum queryTarget,
233*35238bceSAndroid Build Coastguard Worker                                      glw::GLenum bufferTarget, glw::GLenum numBindingsTarget, QueryType verifierType)
234*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
235*35238bceSAndroid Build Coastguard Worker     , m_queryTarget(queryTarget)
236*35238bceSAndroid Build Coastguard Worker     , m_bufferTarget(bufferTarget)
237*35238bceSAndroid Build Coastguard Worker     , m_numBindingsTarget(numBindingsTarget)
238*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
239*35238bceSAndroid Build Coastguard Worker {
240*35238bceSAndroid Build Coastguard Worker }
241*35238bceSAndroid Build Coastguard Worker 
iterate(void)242*35238bceSAndroid Build Coastguard Worker BufferBindingCase::IterateResult BufferBindingCase::iterate(void)
243*35238bceSAndroid Build Coastguard Worker {
244*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
245*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
246*35238bceSAndroid Build Coastguard Worker     int maxBindings = -1;
247*35238bceSAndroid Build Coastguard Worker 
248*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
249*35238bceSAndroid Build Coastguard Worker 
250*35238bceSAndroid Build Coastguard Worker     gl.glGetIntegerv(m_numBindingsTarget, &maxBindings);
251*35238bceSAndroid Build Coastguard Worker     GLU_EXPECT_NO_ERROR(gl.glGetError(), "glGetIntegerv");
252*35238bceSAndroid Build Coastguard Worker 
253*35238bceSAndroid Build Coastguard Worker     {
254*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial value");
255*35238bceSAndroid Build Coastguard Worker 
256*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxBindings; ++ndx)
257*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, m_queryTarget, ndx, 0, m_verifierType);
258*35238bceSAndroid Build Coastguard Worker     }
259*35238bceSAndroid Build Coastguard Worker 
260*35238bceSAndroid Build Coastguard Worker     {
261*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection superSection(m_testCtx.getLog(), "AfterSetting", "After setting");
262*35238bceSAndroid Build Coastguard Worker         glu::Buffer bufferA(m_context.getRenderContext());
263*35238bceSAndroid Build Coastguard Worker         glu::Buffer bufferB(m_context.getRenderContext());
264*35238bceSAndroid Build Coastguard Worker         const int ndxA = 0;
265*35238bceSAndroid Build Coastguard Worker         const int ndxB = maxBindings / 2;
266*35238bceSAndroid Build Coastguard Worker 
267*35238bceSAndroid Build Coastguard Worker         {
268*35238bceSAndroid Build Coastguard Worker             const tcu::ScopedLogSection section(m_testCtx.getLog(), "Generic", "After setting generic binding point");
269*35238bceSAndroid Build Coastguard Worker 
270*35238bceSAndroid Build Coastguard Worker             gl.glBindBuffer(m_bufferTarget, *bufferA);
271*35238bceSAndroid Build Coastguard Worker             GLU_EXPECT_NO_ERROR(gl.glGetError(), "glBindBuffer");
272*35238bceSAndroid Build Coastguard Worker 
273*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, m_queryTarget, 0, 0, m_verifierType);
274*35238bceSAndroid Build Coastguard Worker         }
275*35238bceSAndroid Build Coastguard Worker         {
276*35238bceSAndroid Build Coastguard Worker             const tcu::ScopedLogSection section(m_testCtx.getLog(), "Indexed", "After setting with glBindBufferBase");
277*35238bceSAndroid Build Coastguard Worker 
278*35238bceSAndroid Build Coastguard Worker             gl.glBindBufferBase(m_bufferTarget, ndxA, *bufferA);
279*35238bceSAndroid Build Coastguard Worker             GLU_EXPECT_NO_ERROR(gl.glGetError(), "glBindBufferBase");
280*35238bceSAndroid Build Coastguard Worker 
281*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, m_queryTarget, ndxA, *bufferA, m_verifierType);
282*35238bceSAndroid Build Coastguard Worker         }
283*35238bceSAndroid Build Coastguard Worker         {
284*35238bceSAndroid Build Coastguard Worker             const tcu::ScopedLogSection section(m_testCtx.getLog(), "Indexed", "After setting with glBindBufferRange");
285*35238bceSAndroid Build Coastguard Worker 
286*35238bceSAndroid Build Coastguard Worker             gl.glBindBufferRange(m_bufferTarget, ndxB, *bufferB, 0, 8);
287*35238bceSAndroid Build Coastguard Worker             GLU_EXPECT_NO_ERROR(gl.glGetError(), "glBindBufferRange");
288*35238bceSAndroid Build Coastguard Worker 
289*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, m_queryTarget, ndxB, *bufferB, m_verifierType);
290*35238bceSAndroid Build Coastguard Worker         }
291*35238bceSAndroid Build Coastguard Worker         if (ndxA != ndxB)
292*35238bceSAndroid Build Coastguard Worker         {
293*35238bceSAndroid Build Coastguard Worker             const tcu::ScopedLogSection section(m_testCtx.getLog(), "DifferentStates", "Original state did not change");
294*35238bceSAndroid Build Coastguard Worker 
295*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, m_queryTarget, ndxA, *bufferA, m_verifierType);
296*35238bceSAndroid Build Coastguard Worker         }
297*35238bceSAndroid Build Coastguard Worker     }
298*35238bceSAndroid Build Coastguard Worker 
299*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
300*35238bceSAndroid Build Coastguard Worker     return STOP;
301*35238bceSAndroid Build Coastguard Worker }
302*35238bceSAndroid Build Coastguard Worker 
303*35238bceSAndroid Build Coastguard Worker class BufferStartCase : public TestCase
304*35238bceSAndroid Build Coastguard Worker {
305*35238bceSAndroid Build Coastguard Worker public:
306*35238bceSAndroid Build Coastguard Worker     BufferStartCase(Context &context, const char *name, const char *desc, glw::GLenum queryTarget,
307*35238bceSAndroid Build Coastguard Worker                     glw::GLenum bufferTarget, glw::GLenum numBindingsTarget, QueryType verifierType);
308*35238bceSAndroid Build Coastguard Worker 
309*35238bceSAndroid Build Coastguard Worker private:
310*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
311*35238bceSAndroid Build Coastguard Worker 
312*35238bceSAndroid Build Coastguard Worker     const glw::GLenum m_queryTarget;
313*35238bceSAndroid Build Coastguard Worker     const glw::GLenum m_bufferTarget;
314*35238bceSAndroid Build Coastguard Worker     const glw::GLenum m_numBindingsTarget;
315*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
316*35238bceSAndroid Build Coastguard Worker };
317*35238bceSAndroid Build Coastguard Worker 
BufferStartCase(Context & context,const char * name,const char * desc,glw::GLenum queryTarget,glw::GLenum bufferTarget,glw::GLenum numBindingsTarget,QueryType verifierType)318*35238bceSAndroid Build Coastguard Worker BufferStartCase::BufferStartCase(Context &context, const char *name, const char *desc, glw::GLenum queryTarget,
319*35238bceSAndroid Build Coastguard Worker                                  glw::GLenum bufferTarget, glw::GLenum numBindingsTarget, QueryType verifierType)
320*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
321*35238bceSAndroid Build Coastguard Worker     , m_queryTarget(queryTarget)
322*35238bceSAndroid Build Coastguard Worker     , m_bufferTarget(bufferTarget)
323*35238bceSAndroid Build Coastguard Worker     , m_numBindingsTarget(numBindingsTarget)
324*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
325*35238bceSAndroid Build Coastguard Worker {
326*35238bceSAndroid Build Coastguard Worker }
327*35238bceSAndroid Build Coastguard Worker 
iterate(void)328*35238bceSAndroid Build Coastguard Worker BufferStartCase::IterateResult BufferStartCase::iterate(void)
329*35238bceSAndroid Build Coastguard Worker {
330*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
331*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
332*35238bceSAndroid Build Coastguard Worker     int maxBindings = -1;
333*35238bceSAndroid Build Coastguard Worker 
334*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
335*35238bceSAndroid Build Coastguard Worker 
336*35238bceSAndroid Build Coastguard Worker     gl.glGetIntegerv(m_numBindingsTarget, &maxBindings);
337*35238bceSAndroid Build Coastguard Worker     GLU_EXPECT_NO_ERROR(gl.glGetError(), "glGetIntegerv");
338*35238bceSAndroid Build Coastguard Worker 
339*35238bceSAndroid Build Coastguard Worker     {
340*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial value");
341*35238bceSAndroid Build Coastguard Worker 
342*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxBindings; ++ndx)
343*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, m_queryTarget, ndx, 0, m_verifierType);
344*35238bceSAndroid Build Coastguard Worker     }
345*35238bceSAndroid Build Coastguard Worker 
346*35238bceSAndroid Build Coastguard Worker     {
347*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection superSection(m_testCtx.getLog(), "AfterSetting", "After setting");
348*35238bceSAndroid Build Coastguard Worker         glu::Buffer bufferA(m_context.getRenderContext());
349*35238bceSAndroid Build Coastguard Worker         glu::Buffer bufferB(m_context.getRenderContext());
350*35238bceSAndroid Build Coastguard Worker         const int ndxA = 0;
351*35238bceSAndroid Build Coastguard Worker         const int ndxB = maxBindings / 2;
352*35238bceSAndroid Build Coastguard Worker         int offset     = -1;
353*35238bceSAndroid Build Coastguard Worker 
354*35238bceSAndroid Build Coastguard Worker         if (m_bufferTarget == GL_ATOMIC_COUNTER_BUFFER)
355*35238bceSAndroid Build Coastguard Worker             offset = 4;
356*35238bceSAndroid Build Coastguard Worker         else if (m_bufferTarget == GL_SHADER_STORAGE_BUFFER)
357*35238bceSAndroid Build Coastguard Worker         {
358*35238bceSAndroid Build Coastguard Worker             gl.glGetIntegerv(GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT, &offset);
359*35238bceSAndroid Build Coastguard Worker             GLU_EXPECT_NO_ERROR(gl.glGetError(), "get align");
360*35238bceSAndroid Build Coastguard Worker         }
361*35238bceSAndroid Build Coastguard Worker         else
362*35238bceSAndroid Build Coastguard Worker             DE_ASSERT(false);
363*35238bceSAndroid Build Coastguard Worker 
364*35238bceSAndroid Build Coastguard Worker         TCU_CHECK(offset >= 0);
365*35238bceSAndroid Build Coastguard Worker 
366*35238bceSAndroid Build Coastguard Worker         {
367*35238bceSAndroid Build Coastguard Worker             const tcu::ScopedLogSection section(m_testCtx.getLog(), "Generic", "After setting generic binding point");
368*35238bceSAndroid Build Coastguard Worker 
369*35238bceSAndroid Build Coastguard Worker             gl.glBindBuffer(m_bufferTarget, *bufferA);
370*35238bceSAndroid Build Coastguard Worker             gl.glBufferData(m_bufferTarget, 16, DE_NULL, GL_DYNAMIC_READ);
371*35238bceSAndroid Build Coastguard Worker             gl.glBindBuffer(m_bufferTarget, *bufferB);
372*35238bceSAndroid Build Coastguard Worker             gl.glBufferData(m_bufferTarget, 32, DE_NULL, GL_DYNAMIC_READ);
373*35238bceSAndroid Build Coastguard Worker             GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen bufs");
374*35238bceSAndroid Build Coastguard Worker 
375*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, m_queryTarget, 0, 0, m_verifierType);
376*35238bceSAndroid Build Coastguard Worker         }
377*35238bceSAndroid Build Coastguard Worker         {
378*35238bceSAndroid Build Coastguard Worker             const tcu::ScopedLogSection section(m_testCtx.getLog(), "Indexed", "After setting with glBindBufferBase");
379*35238bceSAndroid Build Coastguard Worker 
380*35238bceSAndroid Build Coastguard Worker             gl.glBindBufferBase(m_bufferTarget, ndxA, *bufferA);
381*35238bceSAndroid Build Coastguard Worker             GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind buf");
382*35238bceSAndroid Build Coastguard Worker 
383*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, m_queryTarget, ndxA, 0, m_verifierType);
384*35238bceSAndroid Build Coastguard Worker         }
385*35238bceSAndroid Build Coastguard Worker         {
386*35238bceSAndroid Build Coastguard Worker             const tcu::ScopedLogSection section(m_testCtx.getLog(), "Indexed", "After setting with glBindBufferRange");
387*35238bceSAndroid Build Coastguard Worker 
388*35238bceSAndroid Build Coastguard Worker             gl.glBindBufferRange(m_bufferTarget, ndxB, *bufferB, offset, 8);
389*35238bceSAndroid Build Coastguard Worker             GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind buf");
390*35238bceSAndroid Build Coastguard Worker 
391*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, m_queryTarget, ndxB, offset, m_verifierType);
392*35238bceSAndroid Build Coastguard Worker         }
393*35238bceSAndroid Build Coastguard Worker         if (ndxA != ndxB)
394*35238bceSAndroid Build Coastguard Worker         {
395*35238bceSAndroid Build Coastguard Worker             const tcu::ScopedLogSection section(m_testCtx.getLog(), "DifferentStates", "Original state did not change");
396*35238bceSAndroid Build Coastguard Worker 
397*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, m_queryTarget, ndxA, 0, m_verifierType);
398*35238bceSAndroid Build Coastguard Worker         }
399*35238bceSAndroid Build Coastguard Worker     }
400*35238bceSAndroid Build Coastguard Worker 
401*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
402*35238bceSAndroid Build Coastguard Worker     return STOP;
403*35238bceSAndroid Build Coastguard Worker }
404*35238bceSAndroid Build Coastguard Worker 
405*35238bceSAndroid Build Coastguard Worker class BufferSizeCase : public TestCase
406*35238bceSAndroid Build Coastguard Worker {
407*35238bceSAndroid Build Coastguard Worker public:
408*35238bceSAndroid Build Coastguard Worker     BufferSizeCase(Context &context, const char *name, const char *desc, glw::GLenum queryTarget,
409*35238bceSAndroid Build Coastguard Worker                    glw::GLenum bufferTarget, glw::GLenum numBindingsTarget, QueryType verifierType);
410*35238bceSAndroid Build Coastguard Worker 
411*35238bceSAndroid Build Coastguard Worker private:
412*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
413*35238bceSAndroid Build Coastguard Worker 
414*35238bceSAndroid Build Coastguard Worker     const glw::GLenum m_queryTarget;
415*35238bceSAndroid Build Coastguard Worker     const glw::GLenum m_bufferTarget;
416*35238bceSAndroid Build Coastguard Worker     const glw::GLenum m_numBindingsTarget;
417*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
418*35238bceSAndroid Build Coastguard Worker };
419*35238bceSAndroid Build Coastguard Worker 
BufferSizeCase(Context & context,const char * name,const char * desc,glw::GLenum queryTarget,glw::GLenum bufferTarget,glw::GLenum numBindingsTarget,QueryType verifierType)420*35238bceSAndroid Build Coastguard Worker BufferSizeCase::BufferSizeCase(Context &context, const char *name, const char *desc, glw::GLenum queryTarget,
421*35238bceSAndroid Build Coastguard Worker                                glw::GLenum bufferTarget, glw::GLenum numBindingsTarget, QueryType verifierType)
422*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
423*35238bceSAndroid Build Coastguard Worker     , m_queryTarget(queryTarget)
424*35238bceSAndroid Build Coastguard Worker     , m_bufferTarget(bufferTarget)
425*35238bceSAndroid Build Coastguard Worker     , m_numBindingsTarget(numBindingsTarget)
426*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
427*35238bceSAndroid Build Coastguard Worker {
428*35238bceSAndroid Build Coastguard Worker }
429*35238bceSAndroid Build Coastguard Worker 
iterate(void)430*35238bceSAndroid Build Coastguard Worker BufferSizeCase::IterateResult BufferSizeCase::iterate(void)
431*35238bceSAndroid Build Coastguard Worker {
432*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
433*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
434*35238bceSAndroid Build Coastguard Worker     int maxBindings = -1;
435*35238bceSAndroid Build Coastguard Worker 
436*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
437*35238bceSAndroid Build Coastguard Worker 
438*35238bceSAndroid Build Coastguard Worker     gl.glGetIntegerv(m_numBindingsTarget, &maxBindings);
439*35238bceSAndroid Build Coastguard Worker     GLU_EXPECT_NO_ERROR(gl.glGetError(), "glGetIntegerv");
440*35238bceSAndroid Build Coastguard Worker 
441*35238bceSAndroid Build Coastguard Worker     {
442*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial value");
443*35238bceSAndroid Build Coastguard Worker 
444*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxBindings; ++ndx)
445*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, m_queryTarget, ndx, 0, m_verifierType);
446*35238bceSAndroid Build Coastguard Worker     }
447*35238bceSAndroid Build Coastguard Worker 
448*35238bceSAndroid Build Coastguard Worker     {
449*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection superSection(m_testCtx.getLog(), "AfterSetting", "After setting");
450*35238bceSAndroid Build Coastguard Worker         glu::Buffer bufferA(m_context.getRenderContext());
451*35238bceSAndroid Build Coastguard Worker         glu::Buffer bufferB(m_context.getRenderContext());
452*35238bceSAndroid Build Coastguard Worker         const int ndxA = 0;
453*35238bceSAndroid Build Coastguard Worker         const int ndxB = maxBindings / 2;
454*35238bceSAndroid Build Coastguard Worker 
455*35238bceSAndroid Build Coastguard Worker         {
456*35238bceSAndroid Build Coastguard Worker             const tcu::ScopedLogSection section(m_testCtx.getLog(), "Generic", "After setting generic binding point");
457*35238bceSAndroid Build Coastguard Worker 
458*35238bceSAndroid Build Coastguard Worker             gl.glBindBuffer(m_bufferTarget, *bufferA);
459*35238bceSAndroid Build Coastguard Worker             gl.glBufferData(m_bufferTarget, 16, DE_NULL, GL_DYNAMIC_READ);
460*35238bceSAndroid Build Coastguard Worker             gl.glBindBuffer(m_bufferTarget, *bufferB);
461*35238bceSAndroid Build Coastguard Worker             gl.glBufferData(m_bufferTarget, 32, DE_NULL, GL_DYNAMIC_READ);
462*35238bceSAndroid Build Coastguard Worker             GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen bufs");
463*35238bceSAndroid Build Coastguard Worker 
464*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, m_queryTarget, 0, 0, m_verifierType);
465*35238bceSAndroid Build Coastguard Worker         }
466*35238bceSAndroid Build Coastguard Worker         {
467*35238bceSAndroid Build Coastguard Worker             const tcu::ScopedLogSection section(m_testCtx.getLog(), "Indexed", "After setting with glBindBufferBase");
468*35238bceSAndroid Build Coastguard Worker 
469*35238bceSAndroid Build Coastguard Worker             gl.glBindBufferBase(m_bufferTarget, ndxA, *bufferA);
470*35238bceSAndroid Build Coastguard Worker             GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind buf");
471*35238bceSAndroid Build Coastguard Worker 
472*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, m_queryTarget, ndxA, 0, m_verifierType);
473*35238bceSAndroid Build Coastguard Worker         }
474*35238bceSAndroid Build Coastguard Worker         {
475*35238bceSAndroid Build Coastguard Worker             const tcu::ScopedLogSection section(m_testCtx.getLog(), "Indexed", "After setting with glBindBufferRange");
476*35238bceSAndroid Build Coastguard Worker 
477*35238bceSAndroid Build Coastguard Worker             gl.glBindBufferRange(m_bufferTarget, ndxB, *bufferB, 0, 8);
478*35238bceSAndroid Build Coastguard Worker             GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind buf");
479*35238bceSAndroid Build Coastguard Worker 
480*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, m_queryTarget, ndxB, 8, m_verifierType);
481*35238bceSAndroid Build Coastguard Worker         }
482*35238bceSAndroid Build Coastguard Worker         if (ndxA != ndxB)
483*35238bceSAndroid Build Coastguard Worker         {
484*35238bceSAndroid Build Coastguard Worker             const tcu::ScopedLogSection section(m_testCtx.getLog(), "DifferentStates", "Original state did not change");
485*35238bceSAndroid Build Coastguard Worker 
486*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, m_queryTarget, ndxA, 0, m_verifierType);
487*35238bceSAndroid Build Coastguard Worker         }
488*35238bceSAndroid Build Coastguard Worker     }
489*35238bceSAndroid Build Coastguard Worker 
490*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
491*35238bceSAndroid Build Coastguard Worker     return STOP;
492*35238bceSAndroid Build Coastguard Worker }
493*35238bceSAndroid Build Coastguard Worker 
494*35238bceSAndroid Build Coastguard Worker class ImageBindingNameCase : public TestCase
495*35238bceSAndroid Build Coastguard Worker {
496*35238bceSAndroid Build Coastguard Worker public:
497*35238bceSAndroid Build Coastguard Worker     ImageBindingNameCase(Context &context, const char *name, const char *desc, QueryType verifierType);
498*35238bceSAndroid Build Coastguard Worker 
499*35238bceSAndroid Build Coastguard Worker private:
500*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
501*35238bceSAndroid Build Coastguard Worker 
502*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
503*35238bceSAndroid Build Coastguard Worker };
504*35238bceSAndroid Build Coastguard Worker 
ImageBindingNameCase(Context & context,const char * name,const char * desc,QueryType verifierType)505*35238bceSAndroid Build Coastguard Worker ImageBindingNameCase::ImageBindingNameCase(Context &context, const char *name, const char *desc, QueryType verifierType)
506*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
507*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
508*35238bceSAndroid Build Coastguard Worker {
509*35238bceSAndroid Build Coastguard Worker }
510*35238bceSAndroid Build Coastguard Worker 
iterate(void)511*35238bceSAndroid Build Coastguard Worker ImageBindingNameCase::IterateResult ImageBindingNameCase::iterate(void)
512*35238bceSAndroid Build Coastguard Worker {
513*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
514*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
515*35238bceSAndroid Build Coastguard Worker     int maxImages = -1;
516*35238bceSAndroid Build Coastguard Worker 
517*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
518*35238bceSAndroid Build Coastguard Worker 
519*35238bceSAndroid Build Coastguard Worker     gl.glGetIntegerv(GL_MAX_IMAGE_UNITS, &maxImages);
520*35238bceSAndroid Build Coastguard Worker     GLU_EXPECT_NO_ERROR(gl.glGetError(), "glGetIntegerv");
521*35238bceSAndroid Build Coastguard Worker 
522*35238bceSAndroid Build Coastguard Worker     {
523*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial value");
524*35238bceSAndroid Build Coastguard Worker 
525*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxImages; ++ndx)
526*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_NAME, ndx, 0, m_verifierType);
527*35238bceSAndroid Build Coastguard Worker     }
528*35238bceSAndroid Build Coastguard Worker 
529*35238bceSAndroid Build Coastguard Worker     {
530*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection superSection(m_testCtx.getLog(), "AfterSetting", "After setting");
531*35238bceSAndroid Build Coastguard Worker         glu::Texture textureA(m_context.getRenderContext());
532*35238bceSAndroid Build Coastguard Worker         glu::Texture textureB(m_context.getRenderContext());
533*35238bceSAndroid Build Coastguard Worker         const int ndxA = 0;
534*35238bceSAndroid Build Coastguard Worker         const int ndxB = maxImages / 2;
535*35238bceSAndroid Build Coastguard Worker 
536*35238bceSAndroid Build Coastguard Worker         gl.glBindTexture(GL_TEXTURE_2D, *textureA);
537*35238bceSAndroid Build Coastguard Worker         gl.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 32, 32);
538*35238bceSAndroid Build Coastguard Worker         GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen tex");
539*35238bceSAndroid Build Coastguard Worker 
540*35238bceSAndroid Build Coastguard Worker         gl.glBindImageTexture(ndxA, *textureA, 0, GL_FALSE, 0, GL_READ_ONLY, GL_RGBA8UI);
541*35238bceSAndroid Build Coastguard Worker         GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind unit");
542*35238bceSAndroid Build Coastguard Worker 
543*35238bceSAndroid Build Coastguard Worker         gl.glBindTexture(GL_TEXTURE_2D_ARRAY, *textureB);
544*35238bceSAndroid Build Coastguard Worker         gl.glTexStorage3D(GL_TEXTURE_2D_ARRAY, 1, GL_RGBA8, 32, 32, 4);
545*35238bceSAndroid Build Coastguard Worker         GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen tex");
546*35238bceSAndroid Build Coastguard Worker 
547*35238bceSAndroid Build Coastguard Worker         gl.glBindImageTexture(ndxB, *textureB, 0, GL_FALSE, 2, GL_READ_ONLY, GL_RGBA8UI);
548*35238bceSAndroid Build Coastguard Worker         GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind unit");
549*35238bceSAndroid Build Coastguard Worker 
550*35238bceSAndroid Build Coastguard Worker         verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_NAME, ndxA, *textureA, m_verifierType);
551*35238bceSAndroid Build Coastguard Worker         verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_NAME, ndxB, *textureB, m_verifierType);
552*35238bceSAndroid Build Coastguard Worker     }
553*35238bceSAndroid Build Coastguard Worker 
554*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
555*35238bceSAndroid Build Coastguard Worker     return STOP;
556*35238bceSAndroid Build Coastguard Worker }
557*35238bceSAndroid Build Coastguard Worker 
558*35238bceSAndroid Build Coastguard Worker class ImageBindingLevelCase : public TestCase
559*35238bceSAndroid Build Coastguard Worker {
560*35238bceSAndroid Build Coastguard Worker public:
561*35238bceSAndroid Build Coastguard Worker     ImageBindingLevelCase(Context &context, const char *name, const char *desc, QueryType verifierType);
562*35238bceSAndroid Build Coastguard Worker 
563*35238bceSAndroid Build Coastguard Worker private:
564*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
565*35238bceSAndroid Build Coastguard Worker 
566*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
567*35238bceSAndroid Build Coastguard Worker };
568*35238bceSAndroid Build Coastguard Worker 
ImageBindingLevelCase(Context & context,const char * name,const char * desc,QueryType verifierType)569*35238bceSAndroid Build Coastguard Worker ImageBindingLevelCase::ImageBindingLevelCase(Context &context, const char *name, const char *desc,
570*35238bceSAndroid Build Coastguard Worker                                              QueryType verifierType)
571*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
572*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
573*35238bceSAndroid Build Coastguard Worker {
574*35238bceSAndroid Build Coastguard Worker }
575*35238bceSAndroid Build Coastguard Worker 
iterate(void)576*35238bceSAndroid Build Coastguard Worker ImageBindingLevelCase::IterateResult ImageBindingLevelCase::iterate(void)
577*35238bceSAndroid Build Coastguard Worker {
578*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
579*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
580*35238bceSAndroid Build Coastguard Worker     int maxImages = -1;
581*35238bceSAndroid Build Coastguard Worker 
582*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
583*35238bceSAndroid Build Coastguard Worker 
584*35238bceSAndroid Build Coastguard Worker     gl.glGetIntegerv(GL_MAX_IMAGE_UNITS, &maxImages);
585*35238bceSAndroid Build Coastguard Worker     GLU_EXPECT_NO_ERROR(gl.glGetError(), "glGetIntegerv");
586*35238bceSAndroid Build Coastguard Worker 
587*35238bceSAndroid Build Coastguard Worker     {
588*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial value");
589*35238bceSAndroid Build Coastguard Worker 
590*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxImages; ++ndx)
591*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_LEVEL, ndx, 0, m_verifierType);
592*35238bceSAndroid Build Coastguard Worker     }
593*35238bceSAndroid Build Coastguard Worker 
594*35238bceSAndroid Build Coastguard Worker     {
595*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection superSection(m_testCtx.getLog(), "AfterSetting", "After setting");
596*35238bceSAndroid Build Coastguard Worker         glu::Texture textureA(m_context.getRenderContext());
597*35238bceSAndroid Build Coastguard Worker         glu::Texture textureB(m_context.getRenderContext());
598*35238bceSAndroid Build Coastguard Worker         const int ndxA = 0;
599*35238bceSAndroid Build Coastguard Worker         const int ndxB = maxImages / 2;
600*35238bceSAndroid Build Coastguard Worker 
601*35238bceSAndroid Build Coastguard Worker         gl.glBindTexture(GL_TEXTURE_2D, *textureA);
602*35238bceSAndroid Build Coastguard Worker         gl.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 32, 32);
603*35238bceSAndroid Build Coastguard Worker         GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen tex");
604*35238bceSAndroid Build Coastguard Worker 
605*35238bceSAndroid Build Coastguard Worker         gl.glBindImageTexture(ndxA, *textureA, 0, GL_FALSE, 0, GL_READ_ONLY, GL_RGBA8UI);
606*35238bceSAndroid Build Coastguard Worker         GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind unit");
607*35238bceSAndroid Build Coastguard Worker 
608*35238bceSAndroid Build Coastguard Worker         gl.glBindTexture(GL_TEXTURE_2D, *textureB);
609*35238bceSAndroid Build Coastguard Worker         gl.glTexStorage2D(GL_TEXTURE_2D, 3, GL_RGBA8, 32, 32);
610*35238bceSAndroid Build Coastguard Worker         GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen tex");
611*35238bceSAndroid Build Coastguard Worker 
612*35238bceSAndroid Build Coastguard Worker         gl.glBindImageTexture(ndxB, *textureB, 2, GL_FALSE, 0, GL_READ_ONLY, GL_RGBA8UI);
613*35238bceSAndroid Build Coastguard Worker         GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind unit");
614*35238bceSAndroid Build Coastguard Worker 
615*35238bceSAndroid Build Coastguard Worker         verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_LEVEL, ndxA, 0, m_verifierType);
616*35238bceSAndroid Build Coastguard Worker         verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_LEVEL, ndxB, 2, m_verifierType);
617*35238bceSAndroid Build Coastguard Worker     }
618*35238bceSAndroid Build Coastguard Worker 
619*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
620*35238bceSAndroid Build Coastguard Worker     return STOP;
621*35238bceSAndroid Build Coastguard Worker }
622*35238bceSAndroid Build Coastguard Worker 
623*35238bceSAndroid Build Coastguard Worker class ImageBindingLayeredCase : public TestCase
624*35238bceSAndroid Build Coastguard Worker {
625*35238bceSAndroid Build Coastguard Worker public:
626*35238bceSAndroid Build Coastguard Worker     ImageBindingLayeredCase(Context &context, const char *name, const char *desc, QueryType verifierType);
627*35238bceSAndroid Build Coastguard Worker 
628*35238bceSAndroid Build Coastguard Worker private:
629*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
630*35238bceSAndroid Build Coastguard Worker 
631*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
632*35238bceSAndroid Build Coastguard Worker };
633*35238bceSAndroid Build Coastguard Worker 
ImageBindingLayeredCase(Context & context,const char * name,const char * desc,QueryType verifierType)634*35238bceSAndroid Build Coastguard Worker ImageBindingLayeredCase::ImageBindingLayeredCase(Context &context, const char *name, const char *desc,
635*35238bceSAndroid Build Coastguard Worker                                                  QueryType verifierType)
636*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
637*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
638*35238bceSAndroid Build Coastguard Worker {
639*35238bceSAndroid Build Coastguard Worker }
640*35238bceSAndroid Build Coastguard Worker 
iterate(void)641*35238bceSAndroid Build Coastguard Worker ImageBindingLayeredCase::IterateResult ImageBindingLayeredCase::iterate(void)
642*35238bceSAndroid Build Coastguard Worker {
643*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
644*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
645*35238bceSAndroid Build Coastguard Worker     int maxImages = -1;
646*35238bceSAndroid Build Coastguard Worker 
647*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
648*35238bceSAndroid Build Coastguard Worker 
649*35238bceSAndroid Build Coastguard Worker     gl.glGetIntegerv(GL_MAX_IMAGE_UNITS, &maxImages);
650*35238bceSAndroid Build Coastguard Worker     GLU_EXPECT_NO_ERROR(gl.glGetError(), "glGetIntegerv");
651*35238bceSAndroid Build Coastguard Worker 
652*35238bceSAndroid Build Coastguard Worker     {
653*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial value");
654*35238bceSAndroid Build Coastguard Worker 
655*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxImages; ++ndx)
656*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedBoolean(result, gl, GL_IMAGE_BINDING_LAYERED, ndx, false, m_verifierType);
657*35238bceSAndroid Build Coastguard Worker     }
658*35238bceSAndroid Build Coastguard Worker 
659*35238bceSAndroid Build Coastguard Worker     {
660*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection superSection(m_testCtx.getLog(), "AfterSetting", "After setting");
661*35238bceSAndroid Build Coastguard Worker         glu::Texture textureA(m_context.getRenderContext());
662*35238bceSAndroid Build Coastguard Worker         glu::Texture textureB(m_context.getRenderContext());
663*35238bceSAndroid Build Coastguard Worker         const int ndxA = 0;
664*35238bceSAndroid Build Coastguard Worker         const int ndxB = maxImages / 2;
665*35238bceSAndroid Build Coastguard Worker 
666*35238bceSAndroid Build Coastguard Worker         gl.glBindTexture(GL_TEXTURE_2D, *textureA);
667*35238bceSAndroid Build Coastguard Worker         gl.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 32, 32);
668*35238bceSAndroid Build Coastguard Worker         GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen tex");
669*35238bceSAndroid Build Coastguard Worker 
670*35238bceSAndroid Build Coastguard Worker         gl.glBindImageTexture(ndxA, *textureA, 0, GL_FALSE, 0, GL_READ_ONLY, GL_RGBA8UI);
671*35238bceSAndroid Build Coastguard Worker         GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind unit");
672*35238bceSAndroid Build Coastguard Worker 
673*35238bceSAndroid Build Coastguard Worker         gl.glBindTexture(GL_TEXTURE_2D_ARRAY, *textureB);
674*35238bceSAndroid Build Coastguard Worker         gl.glTexStorage3D(GL_TEXTURE_2D_ARRAY, 1, GL_RGBA8, 32, 32, 4);
675*35238bceSAndroid Build Coastguard Worker         GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen tex");
676*35238bceSAndroid Build Coastguard Worker 
677*35238bceSAndroid Build Coastguard Worker         gl.glBindImageTexture(ndxB, *textureB, 0, GL_TRUE, 2, GL_READ_ONLY, GL_RGBA8UI);
678*35238bceSAndroid Build Coastguard Worker         GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind unit");
679*35238bceSAndroid Build Coastguard Worker 
680*35238bceSAndroid Build Coastguard Worker         verifyStateIndexedBoolean(result, gl, GL_IMAGE_BINDING_LAYERED, ndxA, false, m_verifierType);
681*35238bceSAndroid Build Coastguard Worker         verifyStateIndexedBoolean(result, gl, GL_IMAGE_BINDING_LAYERED, ndxB, true, m_verifierType);
682*35238bceSAndroid Build Coastguard Worker     }
683*35238bceSAndroid Build Coastguard Worker 
684*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
685*35238bceSAndroid Build Coastguard Worker     return STOP;
686*35238bceSAndroid Build Coastguard Worker }
687*35238bceSAndroid Build Coastguard Worker 
688*35238bceSAndroid Build Coastguard Worker class ImageBindingLayerCase : public TestCase
689*35238bceSAndroid Build Coastguard Worker {
690*35238bceSAndroid Build Coastguard Worker public:
691*35238bceSAndroid Build Coastguard Worker     ImageBindingLayerCase(Context &context, const char *name, const char *desc, QueryType verifierType);
692*35238bceSAndroid Build Coastguard Worker 
693*35238bceSAndroid Build Coastguard Worker private:
694*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
695*35238bceSAndroid Build Coastguard Worker 
696*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
697*35238bceSAndroid Build Coastguard Worker };
698*35238bceSAndroid Build Coastguard Worker 
ImageBindingLayerCase(Context & context,const char * name,const char * desc,QueryType verifierType)699*35238bceSAndroid Build Coastguard Worker ImageBindingLayerCase::ImageBindingLayerCase(Context &context, const char *name, const char *desc,
700*35238bceSAndroid Build Coastguard Worker                                              QueryType verifierType)
701*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
702*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
703*35238bceSAndroid Build Coastguard Worker {
704*35238bceSAndroid Build Coastguard Worker }
705*35238bceSAndroid Build Coastguard Worker 
iterate(void)706*35238bceSAndroid Build Coastguard Worker ImageBindingLayerCase::IterateResult ImageBindingLayerCase::iterate(void)
707*35238bceSAndroid Build Coastguard Worker {
708*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
709*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
710*35238bceSAndroid Build Coastguard Worker     int maxImages = -1;
711*35238bceSAndroid Build Coastguard Worker 
712*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
713*35238bceSAndroid Build Coastguard Worker 
714*35238bceSAndroid Build Coastguard Worker     gl.glGetIntegerv(GL_MAX_IMAGE_UNITS, &maxImages);
715*35238bceSAndroid Build Coastguard Worker     GLU_EXPECT_NO_ERROR(gl.glGetError(), "glGetIntegerv");
716*35238bceSAndroid Build Coastguard Worker 
717*35238bceSAndroid Build Coastguard Worker     {
718*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial value");
719*35238bceSAndroid Build Coastguard Worker 
720*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxImages; ++ndx)
721*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_LAYER, ndx, 0, m_verifierType);
722*35238bceSAndroid Build Coastguard Worker     }
723*35238bceSAndroid Build Coastguard Worker 
724*35238bceSAndroid Build Coastguard Worker     {
725*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection superSection(m_testCtx.getLog(), "AfterSetting", "After setting");
726*35238bceSAndroid Build Coastguard Worker         glu::Texture textureA(m_context.getRenderContext());
727*35238bceSAndroid Build Coastguard Worker         glu::Texture textureB(m_context.getRenderContext());
728*35238bceSAndroid Build Coastguard Worker         const int ndxA = 0;
729*35238bceSAndroid Build Coastguard Worker         const int ndxB = maxImages / 2;
730*35238bceSAndroid Build Coastguard Worker 
731*35238bceSAndroid Build Coastguard Worker         gl.glBindTexture(GL_TEXTURE_2D, *textureA);
732*35238bceSAndroid Build Coastguard Worker         gl.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 32, 32);
733*35238bceSAndroid Build Coastguard Worker         GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen tex");
734*35238bceSAndroid Build Coastguard Worker 
735*35238bceSAndroid Build Coastguard Worker         gl.glBindImageTexture(ndxA, *textureA, 0, GL_FALSE, 0, GL_READ_ONLY, GL_RGBA8UI);
736*35238bceSAndroid Build Coastguard Worker         GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind unit");
737*35238bceSAndroid Build Coastguard Worker 
738*35238bceSAndroid Build Coastguard Worker         gl.glBindTexture(GL_TEXTURE_2D_ARRAY, *textureB);
739*35238bceSAndroid Build Coastguard Worker         gl.glTexStorage3D(GL_TEXTURE_2D_ARRAY, 1, GL_RGBA8, 32, 32, 4);
740*35238bceSAndroid Build Coastguard Worker         GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen tex");
741*35238bceSAndroid Build Coastguard Worker 
742*35238bceSAndroid Build Coastguard Worker         gl.glBindImageTexture(ndxB, *textureB, 0, GL_TRUE, 2, GL_READ_ONLY, GL_RGBA8UI);
743*35238bceSAndroid Build Coastguard Worker         GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind unit");
744*35238bceSAndroid Build Coastguard Worker 
745*35238bceSAndroid Build Coastguard Worker         verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_LAYER, ndxA, 0, m_verifierType);
746*35238bceSAndroid Build Coastguard Worker         verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_LAYER, ndxB, 2, m_verifierType);
747*35238bceSAndroid Build Coastguard Worker     }
748*35238bceSAndroid Build Coastguard Worker 
749*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
750*35238bceSAndroid Build Coastguard Worker     return STOP;
751*35238bceSAndroid Build Coastguard Worker }
752*35238bceSAndroid Build Coastguard Worker 
753*35238bceSAndroid Build Coastguard Worker class ImageBindingAccessCase : public TestCase
754*35238bceSAndroid Build Coastguard Worker {
755*35238bceSAndroid Build Coastguard Worker public:
756*35238bceSAndroid Build Coastguard Worker     ImageBindingAccessCase(Context &context, const char *name, const char *desc, QueryType verifierType);
757*35238bceSAndroid Build Coastguard Worker 
758*35238bceSAndroid Build Coastguard Worker private:
759*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
760*35238bceSAndroid Build Coastguard Worker 
761*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
762*35238bceSAndroid Build Coastguard Worker };
763*35238bceSAndroid Build Coastguard Worker 
ImageBindingAccessCase(Context & context,const char * name,const char * desc,QueryType verifierType)764*35238bceSAndroid Build Coastguard Worker ImageBindingAccessCase::ImageBindingAccessCase(Context &context, const char *name, const char *desc,
765*35238bceSAndroid Build Coastguard Worker                                                QueryType verifierType)
766*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
767*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
768*35238bceSAndroid Build Coastguard Worker {
769*35238bceSAndroid Build Coastguard Worker }
770*35238bceSAndroid Build Coastguard Worker 
iterate(void)771*35238bceSAndroid Build Coastguard Worker ImageBindingAccessCase::IterateResult ImageBindingAccessCase::iterate(void)
772*35238bceSAndroid Build Coastguard Worker {
773*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
774*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
775*35238bceSAndroid Build Coastguard Worker     int maxImages = -1;
776*35238bceSAndroid Build Coastguard Worker 
777*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
778*35238bceSAndroid Build Coastguard Worker 
779*35238bceSAndroid Build Coastguard Worker     gl.glGetIntegerv(GL_MAX_IMAGE_UNITS, &maxImages);
780*35238bceSAndroid Build Coastguard Worker     GLU_EXPECT_NO_ERROR(gl.glGetError(), "glGetIntegerv");
781*35238bceSAndroid Build Coastguard Worker 
782*35238bceSAndroid Build Coastguard Worker     {
783*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial value");
784*35238bceSAndroid Build Coastguard Worker 
785*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxImages; ++ndx)
786*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_ACCESS, ndx, GL_READ_ONLY, m_verifierType);
787*35238bceSAndroid Build Coastguard Worker     }
788*35238bceSAndroid Build Coastguard Worker 
789*35238bceSAndroid Build Coastguard Worker     {
790*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection superSection(m_testCtx.getLog(), "AfterSetting", "After setting");
791*35238bceSAndroid Build Coastguard Worker         glu::Texture textureA(m_context.getRenderContext());
792*35238bceSAndroid Build Coastguard Worker         glu::Texture textureB(m_context.getRenderContext());
793*35238bceSAndroid Build Coastguard Worker         const int ndxA = 0;
794*35238bceSAndroid Build Coastguard Worker         const int ndxB = maxImages / 2;
795*35238bceSAndroid Build Coastguard Worker 
796*35238bceSAndroid Build Coastguard Worker         gl.glBindTexture(GL_TEXTURE_2D, *textureA);
797*35238bceSAndroid Build Coastguard Worker         gl.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 32, 32);
798*35238bceSAndroid Build Coastguard Worker         GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen tex");
799*35238bceSAndroid Build Coastguard Worker 
800*35238bceSAndroid Build Coastguard Worker         gl.glBindImageTexture(ndxA, *textureA, 0, GL_FALSE, 0, GL_READ_ONLY, GL_RGBA8UI);
801*35238bceSAndroid Build Coastguard Worker         GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind unit");
802*35238bceSAndroid Build Coastguard Worker 
803*35238bceSAndroid Build Coastguard Worker         gl.glBindTexture(GL_TEXTURE_2D_ARRAY, *textureB);
804*35238bceSAndroid Build Coastguard Worker         gl.glTexStorage3D(GL_TEXTURE_2D_ARRAY, 1, GL_RGBA8, 32, 32, 4);
805*35238bceSAndroid Build Coastguard Worker         GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen tex");
806*35238bceSAndroid Build Coastguard Worker 
807*35238bceSAndroid Build Coastguard Worker         gl.glBindImageTexture(ndxB, *textureB, 0, GL_TRUE, 2, GL_READ_WRITE, GL_RGBA8UI);
808*35238bceSAndroid Build Coastguard Worker         GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind unit");
809*35238bceSAndroid Build Coastguard Worker 
810*35238bceSAndroid Build Coastguard Worker         verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_ACCESS, ndxA, GL_READ_ONLY, m_verifierType);
811*35238bceSAndroid Build Coastguard Worker         verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_ACCESS, ndxB, GL_READ_WRITE, m_verifierType);
812*35238bceSAndroid Build Coastguard Worker     }
813*35238bceSAndroid Build Coastguard Worker 
814*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
815*35238bceSAndroid Build Coastguard Worker     return STOP;
816*35238bceSAndroid Build Coastguard Worker }
817*35238bceSAndroid Build Coastguard Worker 
818*35238bceSAndroid Build Coastguard Worker class ImageBindingFormatCase : public TestCase
819*35238bceSAndroid Build Coastguard Worker {
820*35238bceSAndroid Build Coastguard Worker public:
821*35238bceSAndroid Build Coastguard Worker     ImageBindingFormatCase(Context &context, const char *name, const char *desc, QueryType verifierType);
822*35238bceSAndroid Build Coastguard Worker 
823*35238bceSAndroid Build Coastguard Worker private:
824*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
825*35238bceSAndroid Build Coastguard Worker 
826*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
827*35238bceSAndroid Build Coastguard Worker };
828*35238bceSAndroid Build Coastguard Worker 
ImageBindingFormatCase(Context & context,const char * name,const char * desc,QueryType verifierType)829*35238bceSAndroid Build Coastguard Worker ImageBindingFormatCase::ImageBindingFormatCase(Context &context, const char *name, const char *desc,
830*35238bceSAndroid Build Coastguard Worker                                                QueryType verifierType)
831*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
832*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
833*35238bceSAndroid Build Coastguard Worker {
834*35238bceSAndroid Build Coastguard Worker }
835*35238bceSAndroid Build Coastguard Worker 
iterate(void)836*35238bceSAndroid Build Coastguard Worker ImageBindingFormatCase::IterateResult ImageBindingFormatCase::iterate(void)
837*35238bceSAndroid Build Coastguard Worker {
838*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
839*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
840*35238bceSAndroid Build Coastguard Worker     int maxImages = -1;
841*35238bceSAndroid Build Coastguard Worker 
842*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
843*35238bceSAndroid Build Coastguard Worker 
844*35238bceSAndroid Build Coastguard Worker     gl.glGetIntegerv(GL_MAX_IMAGE_UNITS, &maxImages);
845*35238bceSAndroid Build Coastguard Worker     GLU_EXPECT_NO_ERROR(gl.glGetError(), "glGetIntegerv");
846*35238bceSAndroid Build Coastguard Worker 
847*35238bceSAndroid Build Coastguard Worker     {
848*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial value");
849*35238bceSAndroid Build Coastguard Worker 
850*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxImages; ++ndx)
851*35238bceSAndroid Build Coastguard Worker             if (glu::isContextTypeES(m_context.getRenderContext().getType()))
852*35238bceSAndroid Build Coastguard Worker                 verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_FORMAT, ndx, GL_R32UI, m_verifierType);
853*35238bceSAndroid Build Coastguard Worker             else
854*35238bceSAndroid Build Coastguard Worker                 verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_FORMAT, ndx, GL_R8, m_verifierType);
855*35238bceSAndroid Build Coastguard Worker     }
856*35238bceSAndroid Build Coastguard Worker 
857*35238bceSAndroid Build Coastguard Worker     {
858*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection superSection(m_testCtx.getLog(), "AfterSetting", "After setting");
859*35238bceSAndroid Build Coastguard Worker         glu::Texture textureA(m_context.getRenderContext());
860*35238bceSAndroid Build Coastguard Worker         glu::Texture textureB(m_context.getRenderContext());
861*35238bceSAndroid Build Coastguard Worker         const int ndxA = 0;
862*35238bceSAndroid Build Coastguard Worker         const int ndxB = maxImages / 2;
863*35238bceSAndroid Build Coastguard Worker 
864*35238bceSAndroid Build Coastguard Worker         gl.glBindTexture(GL_TEXTURE_2D, *textureA);
865*35238bceSAndroid Build Coastguard Worker         gl.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 32, 32);
866*35238bceSAndroid Build Coastguard Worker         GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen tex");
867*35238bceSAndroid Build Coastguard Worker 
868*35238bceSAndroid Build Coastguard Worker         gl.glBindImageTexture(ndxA, *textureA, 0, GL_FALSE, 0, GL_READ_ONLY, GL_RGBA8UI);
869*35238bceSAndroid Build Coastguard Worker         GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind unit");
870*35238bceSAndroid Build Coastguard Worker 
871*35238bceSAndroid Build Coastguard Worker         gl.glBindTexture(GL_TEXTURE_2D_ARRAY, *textureB);
872*35238bceSAndroid Build Coastguard Worker         gl.glTexStorage3D(GL_TEXTURE_2D_ARRAY, 1, GL_R32F, 32, 32, 4);
873*35238bceSAndroid Build Coastguard Worker         GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen tex");
874*35238bceSAndroid Build Coastguard Worker 
875*35238bceSAndroid Build Coastguard Worker         gl.glBindImageTexture(ndxB, *textureB, 0, GL_TRUE, 2, GL_READ_WRITE, GL_R32F);
876*35238bceSAndroid Build Coastguard Worker         GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind unit");
877*35238bceSAndroid Build Coastguard Worker 
878*35238bceSAndroid Build Coastguard Worker         verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_FORMAT, ndxA, GL_RGBA8UI, m_verifierType);
879*35238bceSAndroid Build Coastguard Worker         verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_FORMAT, ndxB, GL_R32F, m_verifierType);
880*35238bceSAndroid Build Coastguard Worker     }
881*35238bceSAndroid Build Coastguard Worker 
882*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
883*35238bceSAndroid Build Coastguard Worker     return STOP;
884*35238bceSAndroid Build Coastguard Worker }
885*35238bceSAndroid Build Coastguard Worker 
886*35238bceSAndroid Build Coastguard Worker class ColorMaskCase : public TestCase
887*35238bceSAndroid Build Coastguard Worker {
888*35238bceSAndroid Build Coastguard Worker public:
889*35238bceSAndroid Build Coastguard Worker     ColorMaskCase(Context &context, const char *name, const char *desc, QueryType verifierType);
890*35238bceSAndroid Build Coastguard Worker 
891*35238bceSAndroid Build Coastguard Worker     void init(void);
892*35238bceSAndroid Build Coastguard Worker 
893*35238bceSAndroid Build Coastguard Worker private:
894*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
895*35238bceSAndroid Build Coastguard Worker 
896*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
897*35238bceSAndroid Build Coastguard Worker };
898*35238bceSAndroid Build Coastguard Worker 
ColorMaskCase(Context & context,const char * name,const char * desc,QueryType verifierType)899*35238bceSAndroid Build Coastguard Worker ColorMaskCase::ColorMaskCase(Context &context, const char *name, const char *desc, QueryType verifierType)
900*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
901*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
902*35238bceSAndroid Build Coastguard Worker {
903*35238bceSAndroid Build Coastguard Worker }
904*35238bceSAndroid Build Coastguard Worker 
init(void)905*35238bceSAndroid Build Coastguard Worker void ColorMaskCase::init(void)
906*35238bceSAndroid Build Coastguard Worker {
907*35238bceSAndroid Build Coastguard Worker     isExtensionSupported(m_context, "GL_EXT_draw_buffers_indexed");
908*35238bceSAndroid Build Coastguard Worker }
909*35238bceSAndroid Build Coastguard Worker 
iterate(void)910*35238bceSAndroid Build Coastguard Worker ColorMaskCase::IterateResult ColorMaskCase::iterate(void)
911*35238bceSAndroid Build Coastguard Worker {
912*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
913*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
914*35238bceSAndroid Build Coastguard Worker     int32_t maxDrawBuffers = 0;
915*35238bceSAndroid Build Coastguard Worker 
916*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
917*35238bceSAndroid Build Coastguard Worker 
918*35238bceSAndroid Build Coastguard Worker     gl.glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxDrawBuffers);
919*35238bceSAndroid Build Coastguard Worker     GLU_EXPECT_NO_ERROR(gl.glGetError(), "glGetIntegerv");
920*35238bceSAndroid Build Coastguard Worker 
921*35238bceSAndroid Build Coastguard Worker     {
922*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial value");
923*35238bceSAndroid Build Coastguard Worker 
924*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
925*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedBooleanVec4(result, gl, GL_COLOR_WRITEMASK, ndx, tcu::BVec4(true), m_verifierType);
926*35238bceSAndroid Build Coastguard Worker     }
927*35238bceSAndroid Build Coastguard Worker     {
928*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "AfterSettingCommon", "After setting common");
929*35238bceSAndroid Build Coastguard Worker 
930*35238bceSAndroid Build Coastguard Worker         gl.glColorMask(GL_FALSE, GL_TRUE, GL_TRUE, GL_FALSE);
931*35238bceSAndroid Build Coastguard Worker 
932*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
933*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedBooleanVec4(result, gl, GL_COLOR_WRITEMASK, ndx, tcu::BVec4(false, true, true, false),
934*35238bceSAndroid Build Coastguard Worker                                           m_verifierType);
935*35238bceSAndroid Build Coastguard Worker     }
936*35238bceSAndroid Build Coastguard Worker     {
937*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "AfterSettingIndexed", "After setting indexed");
938*35238bceSAndroid Build Coastguard Worker 
939*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
940*35238bceSAndroid Build Coastguard Worker             gl.glColorMaski(ndx, (ndx % 2 == 0 ? GL_TRUE : GL_FALSE), (ndx % 2 == 1 ? GL_TRUE : GL_FALSE),
941*35238bceSAndroid Build Coastguard Worker                             (ndx % 2 == 0 ? GL_TRUE : GL_FALSE), (ndx % 2 == 1 ? GL_TRUE : GL_FALSE));
942*35238bceSAndroid Build Coastguard Worker 
943*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
944*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedBooleanVec4(
945*35238bceSAndroid Build Coastguard Worker                 result, gl, GL_COLOR_WRITEMASK, ndx,
946*35238bceSAndroid Build Coastguard Worker                 (ndx % 2 == 0 ? tcu::BVec4(true, false, true, false) : tcu::BVec4(false, true, false, true)),
947*35238bceSAndroid Build Coastguard Worker                 m_verifierType);
948*35238bceSAndroid Build Coastguard Worker     }
949*35238bceSAndroid Build Coastguard Worker     {
950*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "AfterResettingIndexedWithCommon",
951*35238bceSAndroid Build Coastguard Worker                                             "After resetting indexed with common");
952*35238bceSAndroid Build Coastguard Worker 
953*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
954*35238bceSAndroid Build Coastguard Worker             gl.glColorMaski(ndx, (ndx % 2 == 0 ? GL_TRUE : GL_FALSE), (ndx % 2 == 1 ? GL_TRUE : GL_FALSE),
955*35238bceSAndroid Build Coastguard Worker                             (ndx % 2 == 0 ? GL_TRUE : GL_FALSE), (ndx % 2 == 1 ? GL_TRUE : GL_FALSE));
956*35238bceSAndroid Build Coastguard Worker 
957*35238bceSAndroid Build Coastguard Worker         gl.glColorMask(GL_FALSE, GL_TRUE, GL_TRUE, GL_FALSE);
958*35238bceSAndroid Build Coastguard Worker 
959*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
960*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedBooleanVec4(result, gl, GL_COLOR_WRITEMASK, ndx, tcu::BVec4(false, true, true, false),
961*35238bceSAndroid Build Coastguard Worker                                           m_verifierType);
962*35238bceSAndroid Build Coastguard Worker     }
963*35238bceSAndroid Build Coastguard Worker 
964*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
965*35238bceSAndroid Build Coastguard Worker     return STOP;
966*35238bceSAndroid Build Coastguard Worker }
967*35238bceSAndroid Build Coastguard Worker 
968*35238bceSAndroid Build Coastguard Worker class BlendFuncCase : public TestCase
969*35238bceSAndroid Build Coastguard Worker {
970*35238bceSAndroid Build Coastguard Worker public:
971*35238bceSAndroid Build Coastguard Worker     BlendFuncCase(Context &context, const char *name, const char *desc, QueryType verifierType);
972*35238bceSAndroid Build Coastguard Worker 
973*35238bceSAndroid Build Coastguard Worker     void init(void);
974*35238bceSAndroid Build Coastguard Worker 
975*35238bceSAndroid Build Coastguard Worker private:
976*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
977*35238bceSAndroid Build Coastguard Worker 
978*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
979*35238bceSAndroid Build Coastguard Worker };
980*35238bceSAndroid Build Coastguard Worker 
BlendFuncCase(Context & context,const char * name,const char * desc,QueryType verifierType)981*35238bceSAndroid Build Coastguard Worker BlendFuncCase::BlendFuncCase(Context &context, const char *name, const char *desc, QueryType verifierType)
982*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
983*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
984*35238bceSAndroid Build Coastguard Worker {
985*35238bceSAndroid Build Coastguard Worker }
986*35238bceSAndroid Build Coastguard Worker 
init(void)987*35238bceSAndroid Build Coastguard Worker void BlendFuncCase::init(void)
988*35238bceSAndroid Build Coastguard Worker {
989*35238bceSAndroid Build Coastguard Worker     isExtensionSupported(m_context, "GL_EXT_draw_buffers_indexed");
990*35238bceSAndroid Build Coastguard Worker }
991*35238bceSAndroid Build Coastguard Worker 
iterate(void)992*35238bceSAndroid Build Coastguard Worker BlendFuncCase::IterateResult BlendFuncCase::iterate(void)
993*35238bceSAndroid Build Coastguard Worker {
994*35238bceSAndroid Build Coastguard Worker     const uint32_t blendFuncs[] = {GL_ZERO,
995*35238bceSAndroid Build Coastguard Worker                                    GL_ONE,
996*35238bceSAndroid Build Coastguard Worker                                    GL_SRC_COLOR,
997*35238bceSAndroid Build Coastguard Worker                                    GL_ONE_MINUS_SRC_COLOR,
998*35238bceSAndroid Build Coastguard Worker                                    GL_DST_COLOR,
999*35238bceSAndroid Build Coastguard Worker                                    GL_ONE_MINUS_DST_COLOR,
1000*35238bceSAndroid Build Coastguard Worker                                    GL_SRC_ALPHA,
1001*35238bceSAndroid Build Coastguard Worker                                    GL_ONE_MINUS_SRC_ALPHA,
1002*35238bceSAndroid Build Coastguard Worker                                    GL_DST_ALPHA,
1003*35238bceSAndroid Build Coastguard Worker                                    GL_ONE_MINUS_DST_ALPHA,
1004*35238bceSAndroid Build Coastguard Worker                                    GL_CONSTANT_COLOR,
1005*35238bceSAndroid Build Coastguard Worker                                    GL_ONE_MINUS_CONSTANT_COLOR,
1006*35238bceSAndroid Build Coastguard Worker                                    GL_CONSTANT_ALPHA,
1007*35238bceSAndroid Build Coastguard Worker                                    GL_ONE_MINUS_CONSTANT_ALPHA,
1008*35238bceSAndroid Build Coastguard Worker                                    GL_SRC_ALPHA_SATURATE};
1009*35238bceSAndroid Build Coastguard Worker 
1010*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
1011*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
1012*35238bceSAndroid Build Coastguard Worker     int32_t maxDrawBuffers = 0;
1013*35238bceSAndroid Build Coastguard Worker 
1014*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
1015*35238bceSAndroid Build Coastguard Worker 
1016*35238bceSAndroid Build Coastguard Worker     gl.glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxDrawBuffers);
1017*35238bceSAndroid Build Coastguard Worker     GLU_EXPECT_NO_ERROR(gl.glGetError(), "glGetIntegerv");
1018*35238bceSAndroid Build Coastguard Worker 
1019*35238bceSAndroid Build Coastguard Worker     {
1020*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial value");
1021*35238bceSAndroid Build Coastguard Worker 
1022*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1023*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_RGB, ndx, GL_ONE, m_verifierType);
1024*35238bceSAndroid Build Coastguard Worker 
1025*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1026*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_DST_RGB, ndx, GL_ZERO, m_verifierType);
1027*35238bceSAndroid Build Coastguard Worker 
1028*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1029*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_ALPHA, ndx, GL_ONE, m_verifierType);
1030*35238bceSAndroid Build Coastguard Worker 
1031*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1032*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_DST_ALPHA, ndx, GL_ZERO, m_verifierType);
1033*35238bceSAndroid Build Coastguard Worker     }
1034*35238bceSAndroid Build Coastguard Worker     {
1035*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "AfterSettingCommon", "After setting common");
1036*35238bceSAndroid Build Coastguard Worker 
1037*35238bceSAndroid Build Coastguard Worker         gl.glBlendFunc(GL_SRC_ALPHA, GL_DST_ALPHA);
1038*35238bceSAndroid Build Coastguard Worker 
1039*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1040*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_RGB, ndx, GL_SRC_ALPHA, m_verifierType);
1041*35238bceSAndroid Build Coastguard Worker 
1042*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1043*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_DST_RGB, ndx, GL_DST_ALPHA, m_verifierType);
1044*35238bceSAndroid Build Coastguard Worker 
1045*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1046*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_ALPHA, ndx, GL_SRC_ALPHA, m_verifierType);
1047*35238bceSAndroid Build Coastguard Worker 
1048*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1049*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_DST_ALPHA, ndx, GL_DST_ALPHA, m_verifierType);
1050*35238bceSAndroid Build Coastguard Worker     }
1051*35238bceSAndroid Build Coastguard Worker     {
1052*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "AfterSettingCommonSeparate",
1053*35238bceSAndroid Build Coastguard Worker                                             "After setting common separate");
1054*35238bceSAndroid Build Coastguard Worker 
1055*35238bceSAndroid Build Coastguard Worker         gl.glBlendFuncSeparate(GL_SRC_COLOR, GL_ONE_MINUS_SRC_ALPHA, GL_DST_COLOR, GL_ONE_MINUS_DST_ALPHA);
1056*35238bceSAndroid Build Coastguard Worker 
1057*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1058*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_RGB, ndx, GL_SRC_COLOR, m_verifierType);
1059*35238bceSAndroid Build Coastguard Worker 
1060*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1061*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_DST_RGB, ndx, GL_ONE_MINUS_SRC_ALPHA, m_verifierType);
1062*35238bceSAndroid Build Coastguard Worker 
1063*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1064*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_ALPHA, ndx, GL_DST_COLOR, m_verifierType);
1065*35238bceSAndroid Build Coastguard Worker 
1066*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1067*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_DST_ALPHA, ndx, GL_ONE_MINUS_DST_ALPHA, m_verifierType);
1068*35238bceSAndroid Build Coastguard Worker     }
1069*35238bceSAndroid Build Coastguard Worker     {
1070*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "AfterSettingIndexed", "After setting indexed");
1071*35238bceSAndroid Build Coastguard Worker 
1072*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1073*35238bceSAndroid Build Coastguard Worker             gl.glBlendFunci(ndx, blendFuncs[ndx % DE_LENGTH_OF_ARRAY(blendFuncs)],
1074*35238bceSAndroid Build Coastguard Worker                             blendFuncs[(ndx + 1) % DE_LENGTH_OF_ARRAY(blendFuncs)]);
1075*35238bceSAndroid Build Coastguard Worker 
1076*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1077*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_RGB, ndx,
1078*35238bceSAndroid Build Coastguard Worker                                       blendFuncs[ndx % DE_LENGTH_OF_ARRAY(blendFuncs)], m_verifierType);
1079*35238bceSAndroid Build Coastguard Worker 
1080*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1081*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_DST_RGB, ndx,
1082*35238bceSAndroid Build Coastguard Worker                                       blendFuncs[(ndx + 1) % DE_LENGTH_OF_ARRAY(blendFuncs)], m_verifierType);
1083*35238bceSAndroid Build Coastguard Worker 
1084*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1085*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_ALPHA, ndx,
1086*35238bceSAndroid Build Coastguard Worker                                       blendFuncs[ndx % DE_LENGTH_OF_ARRAY(blendFuncs)], m_verifierType);
1087*35238bceSAndroid Build Coastguard Worker 
1088*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1089*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_DST_ALPHA, ndx,
1090*35238bceSAndroid Build Coastguard Worker                                       blendFuncs[(ndx + 1) % DE_LENGTH_OF_ARRAY(blendFuncs)], m_verifierType);
1091*35238bceSAndroid Build Coastguard Worker     }
1092*35238bceSAndroid Build Coastguard Worker     {
1093*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "AfterSettingIndexedSeparate",
1094*35238bceSAndroid Build Coastguard Worker                                             "After setting indexed separate");
1095*35238bceSAndroid Build Coastguard Worker 
1096*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1097*35238bceSAndroid Build Coastguard Worker             gl.glBlendFuncSeparatei(ndx, blendFuncs[(ndx + 3) % DE_LENGTH_OF_ARRAY(blendFuncs)],
1098*35238bceSAndroid Build Coastguard Worker                                     blendFuncs[(ndx + 2) % DE_LENGTH_OF_ARRAY(blendFuncs)],
1099*35238bceSAndroid Build Coastguard Worker                                     blendFuncs[(ndx + 1) % DE_LENGTH_OF_ARRAY(blendFuncs)],
1100*35238bceSAndroid Build Coastguard Worker                                     blendFuncs[(ndx + 0) % DE_LENGTH_OF_ARRAY(blendFuncs)]);
1101*35238bceSAndroid Build Coastguard Worker 
1102*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1103*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_RGB, ndx,
1104*35238bceSAndroid Build Coastguard Worker                                       blendFuncs[(ndx + 3) % DE_LENGTH_OF_ARRAY(blendFuncs)], m_verifierType);
1105*35238bceSAndroid Build Coastguard Worker 
1106*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1107*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_DST_RGB, ndx,
1108*35238bceSAndroid Build Coastguard Worker                                       blendFuncs[(ndx + 2) % DE_LENGTH_OF_ARRAY(blendFuncs)], m_verifierType);
1109*35238bceSAndroid Build Coastguard Worker 
1110*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1111*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_ALPHA, ndx,
1112*35238bceSAndroid Build Coastguard Worker                                       blendFuncs[(ndx + 1) % DE_LENGTH_OF_ARRAY(blendFuncs)], m_verifierType);
1113*35238bceSAndroid Build Coastguard Worker 
1114*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1115*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_DST_ALPHA, ndx,
1116*35238bceSAndroid Build Coastguard Worker                                       blendFuncs[(ndx + 0) % DE_LENGTH_OF_ARRAY(blendFuncs)], m_verifierType);
1117*35238bceSAndroid Build Coastguard Worker     }
1118*35238bceSAndroid Build Coastguard Worker     {
1119*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "AfterResettingIndexedWithCommon",
1120*35238bceSAndroid Build Coastguard Worker                                             "After resetting indexed with common");
1121*35238bceSAndroid Build Coastguard Worker 
1122*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1123*35238bceSAndroid Build Coastguard Worker             gl.glBlendFunci(ndx, blendFuncs[ndx % DE_LENGTH_OF_ARRAY(blendFuncs)],
1124*35238bceSAndroid Build Coastguard Worker                             blendFuncs[(ndx + 1) % DE_LENGTH_OF_ARRAY(blendFuncs)]);
1125*35238bceSAndroid Build Coastguard Worker 
1126*35238bceSAndroid Build Coastguard Worker         gl.glBlendFunc(GL_SRC_ALPHA, GL_DST_ALPHA);
1127*35238bceSAndroid Build Coastguard Worker 
1128*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1129*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_RGB, ndx, GL_SRC_ALPHA, m_verifierType);
1130*35238bceSAndroid Build Coastguard Worker 
1131*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1132*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_DST_RGB, ndx, GL_DST_ALPHA, m_verifierType);
1133*35238bceSAndroid Build Coastguard Worker 
1134*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1135*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_ALPHA, ndx, GL_SRC_ALPHA, m_verifierType);
1136*35238bceSAndroid Build Coastguard Worker 
1137*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1138*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_DST_ALPHA, ndx, GL_DST_ALPHA, m_verifierType);
1139*35238bceSAndroid Build Coastguard Worker     }
1140*35238bceSAndroid Build Coastguard Worker     {
1141*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "AfterResettingIndexedWithCommonSeparate",
1142*35238bceSAndroid Build Coastguard Worker                                             "After resetting indexed with common separate");
1143*35238bceSAndroid Build Coastguard Worker 
1144*35238bceSAndroid Build Coastguard Worker         gl.glBlendFuncSeparate(GL_SRC_COLOR, GL_ONE_MINUS_SRC_ALPHA, GL_DST_COLOR, GL_ONE_MINUS_DST_ALPHA);
1145*35238bceSAndroid Build Coastguard Worker 
1146*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1147*35238bceSAndroid Build Coastguard Worker             gl.glBlendFuncSeparatei(ndx, blendFuncs[(ndx + 3) % DE_LENGTH_OF_ARRAY(blendFuncs)],
1148*35238bceSAndroid Build Coastguard Worker                                     blendFuncs[(ndx + 2) % DE_LENGTH_OF_ARRAY(blendFuncs)],
1149*35238bceSAndroid Build Coastguard Worker                                     blendFuncs[(ndx + 1) % DE_LENGTH_OF_ARRAY(blendFuncs)],
1150*35238bceSAndroid Build Coastguard Worker                                     blendFuncs[(ndx + 0) % DE_LENGTH_OF_ARRAY(blendFuncs)]);
1151*35238bceSAndroid Build Coastguard Worker 
1152*35238bceSAndroid Build Coastguard Worker         gl.glBlendFuncSeparate(GL_SRC_COLOR, GL_ONE_MINUS_SRC_ALPHA, GL_DST_COLOR, GL_ONE_MINUS_DST_ALPHA);
1153*35238bceSAndroid Build Coastguard Worker 
1154*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1155*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_RGB, ndx, GL_SRC_COLOR, m_verifierType);
1156*35238bceSAndroid Build Coastguard Worker 
1157*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1158*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_DST_RGB, ndx, GL_ONE_MINUS_SRC_ALPHA, m_verifierType);
1159*35238bceSAndroid Build Coastguard Worker 
1160*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1161*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_ALPHA, ndx, GL_DST_COLOR, m_verifierType);
1162*35238bceSAndroid Build Coastguard Worker 
1163*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1164*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_DST_ALPHA, ndx, GL_ONE_MINUS_DST_ALPHA, m_verifierType);
1165*35238bceSAndroid Build Coastguard Worker     }
1166*35238bceSAndroid Build Coastguard Worker 
1167*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
1168*35238bceSAndroid Build Coastguard Worker     return STOP;
1169*35238bceSAndroid Build Coastguard Worker }
1170*35238bceSAndroid Build Coastguard Worker 
1171*35238bceSAndroid Build Coastguard Worker class BlendEquationCase : public TestCase
1172*35238bceSAndroid Build Coastguard Worker {
1173*35238bceSAndroid Build Coastguard Worker public:
1174*35238bceSAndroid Build Coastguard Worker     BlendEquationCase(Context &context, const char *name, const char *desc, QueryType verifierType);
1175*35238bceSAndroid Build Coastguard Worker 
1176*35238bceSAndroid Build Coastguard Worker     void init(void);
1177*35238bceSAndroid Build Coastguard Worker 
1178*35238bceSAndroid Build Coastguard Worker private:
1179*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
1180*35238bceSAndroid Build Coastguard Worker 
1181*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
1182*35238bceSAndroid Build Coastguard Worker };
1183*35238bceSAndroid Build Coastguard Worker 
BlendEquationCase(Context & context,const char * name,const char * desc,QueryType verifierType)1184*35238bceSAndroid Build Coastguard Worker BlendEquationCase::BlendEquationCase(Context &context, const char *name, const char *desc, QueryType verifierType)
1185*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
1186*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
1187*35238bceSAndroid Build Coastguard Worker {
1188*35238bceSAndroid Build Coastguard Worker }
1189*35238bceSAndroid Build Coastguard Worker 
init(void)1190*35238bceSAndroid Build Coastguard Worker void BlendEquationCase::init(void)
1191*35238bceSAndroid Build Coastguard Worker {
1192*35238bceSAndroid Build Coastguard Worker     isExtensionSupported(m_context, "GL_EXT_draw_buffers_indexed");
1193*35238bceSAndroid Build Coastguard Worker }
1194*35238bceSAndroid Build Coastguard Worker 
iterate(void)1195*35238bceSAndroid Build Coastguard Worker BlendEquationCase::IterateResult BlendEquationCase::iterate(void)
1196*35238bceSAndroid Build Coastguard Worker {
1197*35238bceSAndroid Build Coastguard Worker     const uint32_t blendEquations[] = {GL_FUNC_ADD, GL_FUNC_SUBTRACT, GL_FUNC_REVERSE_SUBTRACT, GL_MIN, GL_MAX};
1198*35238bceSAndroid Build Coastguard Worker 
1199*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
1200*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
1201*35238bceSAndroid Build Coastguard Worker     int32_t maxDrawBuffers = 0;
1202*35238bceSAndroid Build Coastguard Worker 
1203*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
1204*35238bceSAndroid Build Coastguard Worker 
1205*35238bceSAndroid Build Coastguard Worker     gl.glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxDrawBuffers);
1206*35238bceSAndroid Build Coastguard Worker     GLU_EXPECT_NO_ERROR(gl.glGetError(), "glGetIntegerv");
1207*35238bceSAndroid Build Coastguard Worker 
1208*35238bceSAndroid Build Coastguard Worker     {
1209*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial value");
1210*35238bceSAndroid Build Coastguard Worker 
1211*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1212*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx, GL_FUNC_ADD, m_verifierType);
1213*35238bceSAndroid Build Coastguard Worker 
1214*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1215*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx, GL_FUNC_ADD, m_verifierType);
1216*35238bceSAndroid Build Coastguard Worker     }
1217*35238bceSAndroid Build Coastguard Worker     {
1218*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "AfterSettingCommon", "After setting common");
1219*35238bceSAndroid Build Coastguard Worker 
1220*35238bceSAndroid Build Coastguard Worker         gl.glBlendEquation(GL_FUNC_SUBTRACT);
1221*35238bceSAndroid Build Coastguard Worker 
1222*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1223*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx, GL_FUNC_SUBTRACT, m_verifierType);
1224*35238bceSAndroid Build Coastguard Worker 
1225*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1226*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx, GL_FUNC_SUBTRACT, m_verifierType);
1227*35238bceSAndroid Build Coastguard Worker     }
1228*35238bceSAndroid Build Coastguard Worker     {
1229*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "AfterSettingCommonSeparate",
1230*35238bceSAndroid Build Coastguard Worker                                             "After setting common separate");
1231*35238bceSAndroid Build Coastguard Worker 
1232*35238bceSAndroid Build Coastguard Worker         gl.glBlendEquationSeparate(GL_FUNC_REVERSE_SUBTRACT, GL_FUNC_SUBTRACT);
1233*35238bceSAndroid Build Coastguard Worker 
1234*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1235*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx, GL_FUNC_REVERSE_SUBTRACT, m_verifierType);
1236*35238bceSAndroid Build Coastguard Worker 
1237*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1238*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx, GL_FUNC_SUBTRACT, m_verifierType);
1239*35238bceSAndroid Build Coastguard Worker     }
1240*35238bceSAndroid Build Coastguard Worker     {
1241*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "AfterSettingIndexed", "After setting indexed");
1242*35238bceSAndroid Build Coastguard Worker 
1243*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1244*35238bceSAndroid Build Coastguard Worker             gl.glBlendEquationi(ndx, blendEquations[ndx % DE_LENGTH_OF_ARRAY(blendEquations)]);
1245*35238bceSAndroid Build Coastguard Worker 
1246*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1247*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx,
1248*35238bceSAndroid Build Coastguard Worker                                       blendEquations[ndx % DE_LENGTH_OF_ARRAY(blendEquations)], m_verifierType);
1249*35238bceSAndroid Build Coastguard Worker 
1250*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1251*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx,
1252*35238bceSAndroid Build Coastguard Worker                                       blendEquations[ndx % DE_LENGTH_OF_ARRAY(blendEquations)], m_verifierType);
1253*35238bceSAndroid Build Coastguard Worker     }
1254*35238bceSAndroid Build Coastguard Worker     {
1255*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "AfterSettingIndexedSeparate",
1256*35238bceSAndroid Build Coastguard Worker                                             "After setting indexed separate");
1257*35238bceSAndroid Build Coastguard Worker 
1258*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1259*35238bceSAndroid Build Coastguard Worker             gl.glBlendEquationSeparatei(ndx, blendEquations[ndx % DE_LENGTH_OF_ARRAY(blendEquations)],
1260*35238bceSAndroid Build Coastguard Worker                                         blendEquations[(ndx + 1) % DE_LENGTH_OF_ARRAY(blendEquations)]);
1261*35238bceSAndroid Build Coastguard Worker 
1262*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1263*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx,
1264*35238bceSAndroid Build Coastguard Worker                                       blendEquations[ndx % DE_LENGTH_OF_ARRAY(blendEquations)], m_verifierType);
1265*35238bceSAndroid Build Coastguard Worker 
1266*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1267*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx,
1268*35238bceSAndroid Build Coastguard Worker                                       blendEquations[(ndx + 1) % DE_LENGTH_OF_ARRAY(blendEquations)], m_verifierType);
1269*35238bceSAndroid Build Coastguard Worker     }
1270*35238bceSAndroid Build Coastguard Worker     {
1271*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "AfterResettingIndexedWithCommon",
1272*35238bceSAndroid Build Coastguard Worker                                             "After resetting indexed with common");
1273*35238bceSAndroid Build Coastguard Worker 
1274*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1275*35238bceSAndroid Build Coastguard Worker             gl.glBlendEquationi(ndx, blendEquations[ndx % DE_LENGTH_OF_ARRAY(blendEquations)]);
1276*35238bceSAndroid Build Coastguard Worker 
1277*35238bceSAndroid Build Coastguard Worker         gl.glBlendEquation(GL_FUNC_SUBTRACT);
1278*35238bceSAndroid Build Coastguard Worker 
1279*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1280*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx, GL_FUNC_SUBTRACT, m_verifierType);
1281*35238bceSAndroid Build Coastguard Worker 
1282*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1283*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx, GL_FUNC_SUBTRACT, m_verifierType);
1284*35238bceSAndroid Build Coastguard Worker     }
1285*35238bceSAndroid Build Coastguard Worker     {
1286*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "AfterResettingIndexedWithCommonSeparate",
1287*35238bceSAndroid Build Coastguard Worker                                             "After resetting indexed with common separate");
1288*35238bceSAndroid Build Coastguard Worker 
1289*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1290*35238bceSAndroid Build Coastguard Worker             gl.glBlendEquationSeparatei(ndx, blendEquations[ndx % DE_LENGTH_OF_ARRAY(blendEquations)],
1291*35238bceSAndroid Build Coastguard Worker                                         blendEquations[(ndx + 1) % DE_LENGTH_OF_ARRAY(blendEquations)]);
1292*35238bceSAndroid Build Coastguard Worker 
1293*35238bceSAndroid Build Coastguard Worker         gl.glBlendEquationSeparate(GL_FUNC_REVERSE_SUBTRACT, GL_FUNC_SUBTRACT);
1294*35238bceSAndroid Build Coastguard Worker 
1295*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1296*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx, GL_FUNC_REVERSE_SUBTRACT, m_verifierType);
1297*35238bceSAndroid Build Coastguard Worker 
1298*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1299*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx, GL_FUNC_SUBTRACT, m_verifierType);
1300*35238bceSAndroid Build Coastguard Worker     }
1301*35238bceSAndroid Build Coastguard Worker 
1302*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
1303*35238bceSAndroid Build Coastguard Worker     return STOP;
1304*35238bceSAndroid Build Coastguard Worker }
1305*35238bceSAndroid Build Coastguard Worker 
1306*35238bceSAndroid Build Coastguard Worker class BlendEquationAdvancedCase : public TestCase
1307*35238bceSAndroid Build Coastguard Worker {
1308*35238bceSAndroid Build Coastguard Worker public:
1309*35238bceSAndroid Build Coastguard Worker     BlendEquationAdvancedCase(Context &context, const char *name, const char *desc, QueryType verifierType);
1310*35238bceSAndroid Build Coastguard Worker 
1311*35238bceSAndroid Build Coastguard Worker     void init(void);
1312*35238bceSAndroid Build Coastguard Worker 
1313*35238bceSAndroid Build Coastguard Worker private:
1314*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
1315*35238bceSAndroid Build Coastguard Worker 
1316*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
1317*35238bceSAndroid Build Coastguard Worker };
1318*35238bceSAndroid Build Coastguard Worker 
BlendEquationAdvancedCase(Context & context,const char * name,const char * desc,QueryType verifierType)1319*35238bceSAndroid Build Coastguard Worker BlendEquationAdvancedCase::BlendEquationAdvancedCase(Context &context, const char *name, const char *desc,
1320*35238bceSAndroid Build Coastguard Worker                                                      QueryType verifierType)
1321*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
1322*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
1323*35238bceSAndroid Build Coastguard Worker {
1324*35238bceSAndroid Build Coastguard Worker }
1325*35238bceSAndroid Build Coastguard Worker 
init(void)1326*35238bceSAndroid Build Coastguard Worker void BlendEquationAdvancedCase::init(void)
1327*35238bceSAndroid Build Coastguard Worker {
1328*35238bceSAndroid Build Coastguard Worker     isExtensionSupported(m_context, "GL_EXT_draw_buffers_indexed");
1329*35238bceSAndroid Build Coastguard Worker     isExtensionSupported(m_context, "GL_KHR_blend_equation_advanced");
1330*35238bceSAndroid Build Coastguard Worker }
1331*35238bceSAndroid Build Coastguard Worker 
iterate(void)1332*35238bceSAndroid Build Coastguard Worker BlendEquationAdvancedCase::IterateResult BlendEquationAdvancedCase::iterate(void)
1333*35238bceSAndroid Build Coastguard Worker {
1334*35238bceSAndroid Build Coastguard Worker     const uint32_t blendEquations[] = {GL_FUNC_ADD, GL_FUNC_SUBTRACT, GL_FUNC_REVERSE_SUBTRACT, GL_MIN, GL_MAX};
1335*35238bceSAndroid Build Coastguard Worker 
1336*35238bceSAndroid Build Coastguard Worker     const uint32_t blendEquationAdvanced[] = {GL_MULTIPLY,       GL_SCREEN,     GL_OVERLAY,       GL_DARKEN,
1337*35238bceSAndroid Build Coastguard Worker                                               GL_LIGHTEN,        GL_COLORDODGE, GL_COLORBURN,     GL_HARDLIGHT,
1338*35238bceSAndroid Build Coastguard Worker                                               GL_SOFTLIGHT,      GL_DIFFERENCE, GL_EXCLUSION,     GL_HSL_HUE,
1339*35238bceSAndroid Build Coastguard Worker                                               GL_HSL_SATURATION, GL_HSL_COLOR,  GL_HSL_LUMINOSITY};
1340*35238bceSAndroid Build Coastguard Worker 
1341*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
1342*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
1343*35238bceSAndroid Build Coastguard Worker     int32_t maxDrawBuffers = 0;
1344*35238bceSAndroid Build Coastguard Worker 
1345*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
1346*35238bceSAndroid Build Coastguard Worker 
1347*35238bceSAndroid Build Coastguard Worker     gl.glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxDrawBuffers);
1348*35238bceSAndroid Build Coastguard Worker     GLU_EXPECT_NO_ERROR(gl.glGetError(), "glGetIntegerv");
1349*35238bceSAndroid Build Coastguard Worker 
1350*35238bceSAndroid Build Coastguard Worker     {
1351*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "AfterSettingCommon", "After setting common");
1352*35238bceSAndroid Build Coastguard Worker 
1353*35238bceSAndroid Build Coastguard Worker         gl.glBlendEquation(GL_SCREEN);
1354*35238bceSAndroid Build Coastguard Worker 
1355*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1356*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx, GL_SCREEN, m_verifierType);
1357*35238bceSAndroid Build Coastguard Worker 
1358*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1359*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx, GL_SCREEN, m_verifierType);
1360*35238bceSAndroid Build Coastguard Worker     }
1361*35238bceSAndroid Build Coastguard Worker     {
1362*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "AfterSettingIndexed", "After setting indexed");
1363*35238bceSAndroid Build Coastguard Worker 
1364*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1365*35238bceSAndroid Build Coastguard Worker             gl.glBlendEquationi(ndx, blendEquationAdvanced[ndx % DE_LENGTH_OF_ARRAY(blendEquationAdvanced)]);
1366*35238bceSAndroid Build Coastguard Worker 
1367*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1368*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx,
1369*35238bceSAndroid Build Coastguard Worker                                       blendEquationAdvanced[ndx % DE_LENGTH_OF_ARRAY(blendEquationAdvanced)],
1370*35238bceSAndroid Build Coastguard Worker                                       m_verifierType);
1371*35238bceSAndroid Build Coastguard Worker 
1372*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1373*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx,
1374*35238bceSAndroid Build Coastguard Worker                                       blendEquationAdvanced[ndx % DE_LENGTH_OF_ARRAY(blendEquationAdvanced)],
1375*35238bceSAndroid Build Coastguard Worker                                       m_verifierType);
1376*35238bceSAndroid Build Coastguard Worker     }
1377*35238bceSAndroid Build Coastguard Worker     {
1378*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "AfterResettingIndexedWithCommon",
1379*35238bceSAndroid Build Coastguard Worker                                             "After resetting indexed with common");
1380*35238bceSAndroid Build Coastguard Worker 
1381*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1382*35238bceSAndroid Build Coastguard Worker             gl.glBlendEquationi(ndx, blendEquationAdvanced[ndx % DE_LENGTH_OF_ARRAY(blendEquationAdvanced)]);
1383*35238bceSAndroid Build Coastguard Worker 
1384*35238bceSAndroid Build Coastguard Worker         gl.glBlendEquation(GL_MULTIPLY);
1385*35238bceSAndroid Build Coastguard Worker 
1386*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1387*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx, GL_MULTIPLY, m_verifierType);
1388*35238bceSAndroid Build Coastguard Worker 
1389*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1390*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx, GL_MULTIPLY, m_verifierType);
1391*35238bceSAndroid Build Coastguard Worker     }
1392*35238bceSAndroid Build Coastguard Worker     {
1393*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "AfterResettingIndexedSeparateWithCommon",
1394*35238bceSAndroid Build Coastguard Worker                                             "After resetting indexed separate with common");
1395*35238bceSAndroid Build Coastguard Worker 
1396*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1397*35238bceSAndroid Build Coastguard Worker             gl.glBlendEquationSeparatei(ndx, blendEquations[ndx % DE_LENGTH_OF_ARRAY(blendEquations)],
1398*35238bceSAndroid Build Coastguard Worker                                         blendEquations[(ndx + 1) % DE_LENGTH_OF_ARRAY(blendEquations)]);
1399*35238bceSAndroid Build Coastguard Worker 
1400*35238bceSAndroid Build Coastguard Worker         gl.glBlendEquation(GL_LIGHTEN);
1401*35238bceSAndroid Build Coastguard Worker 
1402*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1403*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx, GL_LIGHTEN, m_verifierType);
1404*35238bceSAndroid Build Coastguard Worker 
1405*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
1406*35238bceSAndroid Build Coastguard Worker             verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx, GL_LIGHTEN, m_verifierType);
1407*35238bceSAndroid Build Coastguard Worker     }
1408*35238bceSAndroid Build Coastguard Worker 
1409*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
1410*35238bceSAndroid Build Coastguard Worker     return STOP;
1411*35238bceSAndroid Build Coastguard Worker }
1412*35238bceSAndroid Build Coastguard Worker 
1413*35238bceSAndroid Build Coastguard Worker } // namespace
1414*35238bceSAndroid Build Coastguard Worker 
IndexedStateQueryTests(Context & context)1415*35238bceSAndroid Build Coastguard Worker IndexedStateQueryTests::IndexedStateQueryTests(Context &context)
1416*35238bceSAndroid Build Coastguard Worker     : TestCaseGroup(context, "indexed", "Indexed state queries")
1417*35238bceSAndroid Build Coastguard Worker {
1418*35238bceSAndroid Build Coastguard Worker }
1419*35238bceSAndroid Build Coastguard Worker 
~IndexedStateQueryTests(void)1420*35238bceSAndroid Build Coastguard Worker IndexedStateQueryTests::~IndexedStateQueryTests(void)
1421*35238bceSAndroid Build Coastguard Worker {
1422*35238bceSAndroid Build Coastguard Worker }
1423*35238bceSAndroid Build Coastguard Worker 
init(void)1424*35238bceSAndroid Build Coastguard Worker void IndexedStateQueryTests::init(void)
1425*35238bceSAndroid Build Coastguard Worker {
1426*35238bceSAndroid Build Coastguard Worker     static const QueryType verifiers[] = {QUERY_INDEXED_BOOLEAN, QUERY_INDEXED_INTEGER, QUERY_INDEXED_INTEGER64};
1427*35238bceSAndroid Build Coastguard Worker 
1428*35238bceSAndroid Build Coastguard Worker #define FOR_EACH_VERIFIER(X)                                                              \
1429*35238bceSAndroid Build Coastguard Worker     for (int verifierNdx = 0; verifierNdx < DE_LENGTH_OF_ARRAY(verifiers); ++verifierNdx) \
1430*35238bceSAndroid Build Coastguard Worker     {                                                                                     \
1431*35238bceSAndroid Build Coastguard Worker         const QueryType verifier   = verifiers[verifierNdx];                              \
1432*35238bceSAndroid Build Coastguard Worker         const char *verifierSuffix = getVerifierSuffix(verifier);                         \
1433*35238bceSAndroid Build Coastguard Worker         this->addChild(X);                                                                \
1434*35238bceSAndroid Build Coastguard Worker     }
1435*35238bceSAndroid Build Coastguard Worker 
1436*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new SampleMaskCase(m_context, (std::string() + "sample_mask_value_" + verifierSuffix).c_str(),
1437*35238bceSAndroid Build Coastguard Worker                                          "Test SAMPLE_MASK_VALUE", verifier))
1438*35238bceSAndroid Build Coastguard Worker 
1439*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
1440*35238bceSAndroid Build Coastguard Worker         new MinValueIndexed3Case(m_context, (std::string() + "max_compute_work_group_count_" + verifierSuffix).c_str(),
1441*35238bceSAndroid Build Coastguard Worker                                  "Test MAX_COMPUTE_WORK_GROUP_COUNT", GL_MAX_COMPUTE_WORK_GROUP_COUNT,
1442*35238bceSAndroid Build Coastguard Worker                                  tcu::IVec3(65535, 65535, 65535), verifier))
1443*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinValueIndexed3Case(
1444*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_compute_work_group_size_" + verifierSuffix).c_str(),
1445*35238bceSAndroid Build Coastguard Worker         "Test MAX_COMPUTE_WORK_GROUP_SIZE", GL_MAX_COMPUTE_WORK_GROUP_SIZE, tcu::IVec3(128, 128, 64), verifier))
1446*35238bceSAndroid Build Coastguard Worker 
1447*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new BufferBindingCase(m_context,
1448*35238bceSAndroid Build Coastguard Worker                                             (std::string() + "atomic_counter_buffer_binding_" + verifierSuffix).c_str(),
1449*35238bceSAndroid Build Coastguard Worker                                             "Test ATOMIC_COUNTER_BUFFER_BINDING", GL_ATOMIC_COUNTER_BUFFER_BINDING,
1450*35238bceSAndroid Build Coastguard Worker                                             GL_ATOMIC_COUNTER_BUFFER, GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, verifier))
1451*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new BufferStartCase(m_context,
1452*35238bceSAndroid Build Coastguard Worker                                           (std::string() + "atomic_counter_buffer_start_" + verifierSuffix).c_str(),
1453*35238bceSAndroid Build Coastguard Worker                                           "Test ATOMIC_COUNTER_BUFFER_START", GL_ATOMIC_COUNTER_BUFFER_START,
1454*35238bceSAndroid Build Coastguard Worker                                           GL_ATOMIC_COUNTER_BUFFER, GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, verifier))
1455*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new BufferSizeCase(m_context,
1456*35238bceSAndroid Build Coastguard Worker                                          (std::string() + "atomic_counter_buffer_size_" + verifierSuffix).c_str(),
1457*35238bceSAndroid Build Coastguard Worker                                          "Test ATOMIC_COUNTER_BUFFER_SIZE", GL_ATOMIC_COUNTER_BUFFER_SIZE,
1458*35238bceSAndroid Build Coastguard Worker                                          GL_ATOMIC_COUNTER_BUFFER, GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, verifier))
1459*35238bceSAndroid Build Coastguard Worker 
1460*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new BufferBindingCase(m_context,
1461*35238bceSAndroid Build Coastguard Worker                                             (std::string() + "shader_storage_buffer_binding_" + verifierSuffix).c_str(),
1462*35238bceSAndroid Build Coastguard Worker                                             "Test SHADER_STORAGE_BUFFER_BINDING", GL_SHADER_STORAGE_BUFFER_BINDING,
1463*35238bceSAndroid Build Coastguard Worker                                             GL_SHADER_STORAGE_BUFFER, GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS, verifier))
1464*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new BufferStartCase(m_context,
1465*35238bceSAndroid Build Coastguard Worker                                           (std::string() + "shader_storage_buffer_start_" + verifierSuffix).c_str(),
1466*35238bceSAndroid Build Coastguard Worker                                           "Test SHADER_STORAGE_BUFFER_START", GL_SHADER_STORAGE_BUFFER_START,
1467*35238bceSAndroid Build Coastguard Worker                                           GL_SHADER_STORAGE_BUFFER, GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS, verifier))
1468*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new BufferSizeCase(m_context,
1469*35238bceSAndroid Build Coastguard Worker                                          (std::string() + "shader_storage_buffer_size_" + verifierSuffix).c_str(),
1470*35238bceSAndroid Build Coastguard Worker                                          "Test SHADER_STORAGE_BUFFER_SIZE", GL_SHADER_STORAGE_BUFFER_SIZE,
1471*35238bceSAndroid Build Coastguard Worker                                          GL_SHADER_STORAGE_BUFFER, GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS, verifier))
1472*35238bceSAndroid Build Coastguard Worker 
1473*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new ImageBindingNameCase(m_context,
1474*35238bceSAndroid Build Coastguard Worker                                                (std::string() + "image_binding_name_" + verifierSuffix).c_str(),
1475*35238bceSAndroid Build Coastguard Worker                                                "Test IMAGE_BINDING_NAME", verifier))
1476*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new ImageBindingLevelCase(m_context,
1477*35238bceSAndroid Build Coastguard Worker                                                 (std::string() + "image_binding_level_" + verifierSuffix).c_str(),
1478*35238bceSAndroid Build Coastguard Worker                                                 "Test IMAGE_BINDING_LEVEL", verifier))
1479*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new ImageBindingLayeredCase(m_context,
1480*35238bceSAndroid Build Coastguard Worker                                                   (std::string() + "image_binding_layered_" + verifierSuffix).c_str(),
1481*35238bceSAndroid Build Coastguard Worker                                                   "Test IMAGE_BINDING_LAYERED", verifier))
1482*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new ImageBindingLayerCase(m_context,
1483*35238bceSAndroid Build Coastguard Worker                                                 (std::string() + "image_binding_layer_" + verifierSuffix).c_str(),
1484*35238bceSAndroid Build Coastguard Worker                                                 "Test IMAGE_BINDING_LAYER", verifier))
1485*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new ImageBindingAccessCase(m_context,
1486*35238bceSAndroid Build Coastguard Worker                                                  (std::string() + "image_binding_access_" + verifierSuffix).c_str(),
1487*35238bceSAndroid Build Coastguard Worker                                                  "Test IMAGE_BINDING_ACCESS", verifier))
1488*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new ImageBindingFormatCase(m_context,
1489*35238bceSAndroid Build Coastguard Worker                                                  (std::string() + "image_binding_format_" + verifierSuffix).c_str(),
1490*35238bceSAndroid Build Coastguard Worker                                                  "Test IMAGE_BINDING_FORMAT", verifier))
1491*35238bceSAndroid Build Coastguard Worker 
1492*35238bceSAndroid Build Coastguard Worker     // All non-boolean verifiers are tested in ES3 test module.
1493*35238bceSAndroid Build Coastguard Worker     addChild(new ColorMaskCase(m_context, "color_mask_getbooleani_v", "COLOR_WRITEMASK", QUERY_INDEXED_BOOLEAN_VEC4));
1494*35238bceSAndroid Build Coastguard Worker     addChild(
1495*35238bceSAndroid Build Coastguard Worker         new BlendFuncCase(m_context, "blend_func_getbooleani_v", "BLEND_SRC and BLEND_DST", QUERY_INDEXED_BOOLEAN));
1496*35238bceSAndroid Build Coastguard Worker     addChild(new BlendEquationCase(m_context, "blend_equation_getbooleani_v", "BLEND_EQUATION_RGB and BLEND_DST",
1497*35238bceSAndroid Build Coastguard Worker                                    QUERY_INDEXED_BOOLEAN));
1498*35238bceSAndroid Build Coastguard Worker     addChild(new BlendEquationAdvancedCase(m_context, "blend_equation_advanced_getbooleani_v",
1499*35238bceSAndroid Build Coastguard Worker                                            "BLEND_EQUATION_RGB and BLEND_DST", QUERY_INDEXED_BOOLEAN));
1500*35238bceSAndroid Build Coastguard Worker 
1501*35238bceSAndroid Build Coastguard Worker #undef FOR_EACH_VEC4_VERIFIER
1502*35238bceSAndroid Build Coastguard Worker #undef FOR_EACH_VERIFIER
1503*35238bceSAndroid Build Coastguard Worker }
1504*35238bceSAndroid Build Coastguard Worker 
1505*35238bceSAndroid Build Coastguard Worker } // namespace Functional
1506*35238bceSAndroid Build Coastguard Worker } // namespace gles31
1507*35238bceSAndroid Build Coastguard Worker } // namespace deqp
1508