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