xref: /aosp_15_r20/external/deqp/modules/gles31/functional/es31fIntegerStateQueryTests.cpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
2*35238bceSAndroid Build Coastguard Worker  * drawElements Quality Program OpenGL ES 3.1 Module
3*35238bceSAndroid Build Coastguard Worker  * -------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker  *
5*35238bceSAndroid Build Coastguard Worker  * Copyright 2014 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 Integer state query tests
22*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker 
24*35238bceSAndroid Build Coastguard Worker #include "es31fIntegerStateQueryTests.hpp"
25*35238bceSAndroid Build Coastguard Worker #include "tcuTestLog.hpp"
26*35238bceSAndroid Build Coastguard Worker #include "gluRenderContext.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "gluCallLogWrapper.hpp"
28*35238bceSAndroid Build Coastguard Worker #include "gluContextInfo.hpp"
29*35238bceSAndroid Build Coastguard Worker #include "gluObjectWrapper.hpp"
30*35238bceSAndroid Build Coastguard Worker #include "gluShaderProgram.hpp"
31*35238bceSAndroid Build Coastguard Worker #include "gluStrUtil.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 
49*35238bceSAndroid Build Coastguard Worker const int MAX_FRAG_ATOMIC_COUNTER_BUFFERS_GLES32 = 1;
50*35238bceSAndroid Build Coastguard Worker const int MAX_FRAG_ATOMIC_COUNTERS_GLES32        = 8;
51*35238bceSAndroid Build Coastguard Worker const int MAX_FRAG_SHADER_STORAGE_BLOCKS_GLES32  = 4;
52*35238bceSAndroid Build Coastguard Worker 
getVerifierSuffix(QueryType type)53*35238bceSAndroid Build Coastguard Worker static const char *getVerifierSuffix(QueryType type)
54*35238bceSAndroid Build Coastguard Worker {
55*35238bceSAndroid Build Coastguard Worker     switch (type)
56*35238bceSAndroid Build Coastguard Worker     {
57*35238bceSAndroid Build Coastguard Worker     case QUERY_BOOLEAN:
58*35238bceSAndroid Build Coastguard Worker         return "getboolean";
59*35238bceSAndroid Build Coastguard Worker     case QUERY_INTEGER:
60*35238bceSAndroid Build Coastguard Worker         return "getinteger";
61*35238bceSAndroid Build Coastguard Worker     case QUERY_INTEGER64:
62*35238bceSAndroid Build Coastguard Worker         return "getinteger64";
63*35238bceSAndroid Build Coastguard Worker     case QUERY_FLOAT:
64*35238bceSAndroid Build Coastguard Worker         return "getfloat";
65*35238bceSAndroid Build Coastguard Worker     default:
66*35238bceSAndroid Build Coastguard Worker         DE_ASSERT(false);
67*35238bceSAndroid Build Coastguard Worker         return DE_NULL;
68*35238bceSAndroid Build Coastguard Worker     }
69*35238bceSAndroid Build Coastguard Worker }
70*35238bceSAndroid Build Coastguard Worker 
71*35238bceSAndroid Build Coastguard Worker class MaxSamplesCase : public TestCase
72*35238bceSAndroid Build Coastguard Worker {
73*35238bceSAndroid Build Coastguard Worker public:
74*35238bceSAndroid Build Coastguard Worker     MaxSamplesCase(Context &context, const char *name, const char *desc, glw::GLenum target, int minValue,
75*35238bceSAndroid Build Coastguard Worker                    QueryType verifierType);
76*35238bceSAndroid Build Coastguard Worker 
77*35238bceSAndroid Build Coastguard Worker private:
78*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
79*35238bceSAndroid Build Coastguard Worker 
80*35238bceSAndroid Build Coastguard Worker     const glw::GLenum m_target;
81*35238bceSAndroid Build Coastguard Worker     const int m_minValue;
82*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
83*35238bceSAndroid Build Coastguard Worker };
84*35238bceSAndroid Build Coastguard Worker 
MaxSamplesCase(Context & context,const char * name,const char * desc,glw::GLenum target,int minValue,QueryType verifierType)85*35238bceSAndroid Build Coastguard Worker MaxSamplesCase::MaxSamplesCase(Context &context, const char *name, const char *desc, glw::GLenum target, int minValue,
86*35238bceSAndroid Build Coastguard Worker                                QueryType verifierType)
87*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
88*35238bceSAndroid Build Coastguard Worker     , m_target(target)
89*35238bceSAndroid Build Coastguard Worker     , m_minValue(minValue)
90*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
91*35238bceSAndroid Build Coastguard Worker {
92*35238bceSAndroid Build Coastguard Worker }
93*35238bceSAndroid Build Coastguard Worker 
iterate(void)94*35238bceSAndroid Build Coastguard Worker MaxSamplesCase::IterateResult MaxSamplesCase::iterate(void)
95*35238bceSAndroid Build Coastguard Worker {
96*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
97*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
98*35238bceSAndroid Build Coastguard Worker 
99*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
100*35238bceSAndroid Build Coastguard Worker     verifyStateIntegerMin(result, gl, m_target, m_minValue, m_verifierType);
101*35238bceSAndroid Build Coastguard Worker 
102*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
103*35238bceSAndroid Build Coastguard Worker     return STOP;
104*35238bceSAndroid Build Coastguard Worker }
105*35238bceSAndroid Build Coastguard Worker 
106*35238bceSAndroid Build Coastguard Worker class TexBindingCase : public TestCase
107*35238bceSAndroid Build Coastguard Worker {
108*35238bceSAndroid Build Coastguard Worker public:
109*35238bceSAndroid Build Coastguard Worker     TexBindingCase(Context &context, const char *name, const char *desc, glw::GLenum texTarget, glw::GLenum bindTarget,
110*35238bceSAndroid Build Coastguard Worker                    QueryType verifierType);
111*35238bceSAndroid Build Coastguard Worker 
112*35238bceSAndroid Build Coastguard Worker private:
113*35238bceSAndroid Build Coastguard Worker     void init(void);
114*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
115*35238bceSAndroid Build Coastguard Worker 
116*35238bceSAndroid Build Coastguard Worker     const glw::GLenum m_texTarget;
117*35238bceSAndroid Build Coastguard Worker     const glw::GLenum m_bindTarget;
118*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
119*35238bceSAndroid Build Coastguard Worker };
120*35238bceSAndroid Build Coastguard Worker 
TexBindingCase(Context & context,const char * name,const char * desc,glw::GLenum texTarget,glw::GLenum bindTarget,QueryType verifierType)121*35238bceSAndroid Build Coastguard Worker TexBindingCase::TexBindingCase(Context &context, const char *name, const char *desc, glw::GLenum texTarget,
122*35238bceSAndroid Build Coastguard Worker                                glw::GLenum bindTarget, QueryType verifierType)
123*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
124*35238bceSAndroid Build Coastguard Worker     , m_texTarget(texTarget)
125*35238bceSAndroid Build Coastguard Worker     , m_bindTarget(bindTarget)
126*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
127*35238bceSAndroid Build Coastguard Worker {
128*35238bceSAndroid Build Coastguard Worker }
129*35238bceSAndroid Build Coastguard Worker 
init(void)130*35238bceSAndroid Build Coastguard Worker void TexBindingCase::init(void)
131*35238bceSAndroid Build Coastguard Worker {
132*35238bceSAndroid Build Coastguard Worker     auto ctxType = m_context.getRenderContext().getType();
133*35238bceSAndroid Build Coastguard Worker     if (contextSupports(ctxType, glu::ApiType::es(3, 2)) || contextSupports(ctxType, glu::ApiType::core(4, 5)))
134*35238bceSAndroid Build Coastguard Worker         return;
135*35238bceSAndroid Build Coastguard Worker 
136*35238bceSAndroid Build Coastguard Worker     if (m_texTarget == GL_TEXTURE_2D_MULTISAMPLE_ARRAY &&
137*35238bceSAndroid Build Coastguard Worker         !m_context.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
138*35238bceSAndroid Build Coastguard Worker         throw tcu::NotSupportedError("Test requires OES_texture_storage_multisample_2d_array extension");
139*35238bceSAndroid Build Coastguard Worker     if (m_texTarget == GL_TEXTURE_CUBE_MAP_ARRAY &&
140*35238bceSAndroid Build Coastguard Worker         !m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_cube_map_array"))
141*35238bceSAndroid Build Coastguard Worker         throw tcu::NotSupportedError("Test requires GL_EXT_texture_cube_map_array extension");
142*35238bceSAndroid Build Coastguard Worker     if (m_texTarget == GL_TEXTURE_BUFFER && !m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_buffer"))
143*35238bceSAndroid Build Coastguard Worker         throw tcu::NotSupportedError("Test requires GL_EXT_texture_buffer extension");
144*35238bceSAndroid Build Coastguard Worker }
145*35238bceSAndroid Build Coastguard Worker 
iterate(void)146*35238bceSAndroid Build Coastguard Worker TexBindingCase::IterateResult TexBindingCase::iterate(void)
147*35238bceSAndroid Build Coastguard Worker {
148*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
149*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
150*35238bceSAndroid Build Coastguard Worker 
151*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
152*35238bceSAndroid Build Coastguard Worker 
153*35238bceSAndroid Build Coastguard Worker     // initial
154*35238bceSAndroid Build Coastguard Worker     {
155*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "initial", "Initial value");
156*35238bceSAndroid Build Coastguard Worker 
157*35238bceSAndroid Build Coastguard Worker         verifyStateInteger(result, gl, m_bindTarget, 0, m_verifierType);
158*35238bceSAndroid Build Coastguard Worker     }
159*35238bceSAndroid Build Coastguard Worker 
160*35238bceSAndroid Build Coastguard Worker     // bind
161*35238bceSAndroid Build Coastguard Worker     {
162*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "bind", "After bind");
163*35238bceSAndroid Build Coastguard Worker 
164*35238bceSAndroid Build Coastguard Worker         glw::GLuint texture;
165*35238bceSAndroid Build Coastguard Worker 
166*35238bceSAndroid Build Coastguard Worker         gl.glGenTextures(1, &texture);
167*35238bceSAndroid Build Coastguard Worker         gl.glBindTexture(m_texTarget, texture);
168*35238bceSAndroid Build Coastguard Worker         GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "bind texture");
169*35238bceSAndroid Build Coastguard Worker 
170*35238bceSAndroid Build Coastguard Worker         verifyStateInteger(result, gl, m_bindTarget, texture, m_verifierType);
171*35238bceSAndroid Build Coastguard Worker 
172*35238bceSAndroid Build Coastguard Worker         gl.glDeleteTextures(1, &texture);
173*35238bceSAndroid Build Coastguard Worker     }
174*35238bceSAndroid Build Coastguard Worker 
175*35238bceSAndroid Build Coastguard Worker     // after delete
176*35238bceSAndroid Build Coastguard Worker     {
177*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "bind", "After delete");
178*35238bceSAndroid Build Coastguard Worker 
179*35238bceSAndroid Build Coastguard Worker         verifyStateInteger(result, gl, m_bindTarget, 0, m_verifierType);
180*35238bceSAndroid Build Coastguard Worker     }
181*35238bceSAndroid Build Coastguard Worker 
182*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
183*35238bceSAndroid Build Coastguard Worker     return STOP;
184*35238bceSAndroid Build Coastguard Worker }
185*35238bceSAndroid Build Coastguard Worker 
186*35238bceSAndroid Build Coastguard Worker class MinimumValueCase : public TestCase
187*35238bceSAndroid Build Coastguard Worker {
188*35238bceSAndroid Build Coastguard Worker public:
189*35238bceSAndroid Build Coastguard Worker     MinimumValueCase(Context &context, const char *name, const char *desc, glw::GLenum target, int minValue,
190*35238bceSAndroid Build Coastguard Worker                      QueryType verifierType);
191*35238bceSAndroid Build Coastguard Worker     MinimumValueCase(Context &context, const char *name, const char *desc, glw::GLenum target, int minValue,
192*35238bceSAndroid Build Coastguard Worker                      QueryType verifierType, glu::ApiType minVersion);
193*35238bceSAndroid Build Coastguard Worker 
194*35238bceSAndroid Build Coastguard Worker private:
195*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
196*35238bceSAndroid Build Coastguard Worker 
197*35238bceSAndroid Build Coastguard Worker     const glw::GLenum m_target;
198*35238bceSAndroid Build Coastguard Worker     const int m_minValue;
199*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
200*35238bceSAndroid Build Coastguard Worker     const glu::ApiType m_minimumVersion;
201*35238bceSAndroid Build Coastguard Worker };
202*35238bceSAndroid Build Coastguard Worker 
MinimumValueCase(Context & context,const char * name,const char * desc,glw::GLenum target,int minValue,QueryType verifierType)203*35238bceSAndroid Build Coastguard Worker MinimumValueCase::MinimumValueCase(Context &context, const char *name, const char *desc, glw::GLenum target,
204*35238bceSAndroid Build Coastguard Worker                                    int minValue, QueryType verifierType)
205*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
206*35238bceSAndroid Build Coastguard Worker     , m_target(target)
207*35238bceSAndroid Build Coastguard Worker     , m_minValue(minValue)
208*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
209*35238bceSAndroid Build Coastguard Worker     , m_minimumVersion(glu::ApiType::es(3, 1))
210*35238bceSAndroid Build Coastguard Worker {
211*35238bceSAndroid Build Coastguard Worker }
212*35238bceSAndroid Build Coastguard Worker 
MinimumValueCase(Context & context,const char * name,const char * desc,glw::GLenum target,int minValue,QueryType verifierType,glu::ApiType minVersion)213*35238bceSAndroid Build Coastguard Worker MinimumValueCase::MinimumValueCase(Context &context, const char *name, const char *desc, glw::GLenum target,
214*35238bceSAndroid Build Coastguard Worker                                    int minValue, QueryType verifierType, glu::ApiType minVersion)
215*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
216*35238bceSAndroid Build Coastguard Worker     , m_target(target)
217*35238bceSAndroid Build Coastguard Worker     , m_minValue(minValue)
218*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
219*35238bceSAndroid Build Coastguard Worker     , m_minimumVersion(minVersion)
220*35238bceSAndroid Build Coastguard Worker {
221*35238bceSAndroid Build Coastguard Worker }
222*35238bceSAndroid Build Coastguard Worker 
iterate(void)223*35238bceSAndroid Build Coastguard Worker MinimumValueCase::IterateResult MinimumValueCase::iterate(void)
224*35238bceSAndroid Build Coastguard Worker {
225*35238bceSAndroid Build Coastguard Worker     if (!contextSupports(m_context.getRenderContext().getType(), glu::ApiType::core(4, 5)))
226*35238bceSAndroid Build Coastguard Worker         TCU_CHECK_AND_THROW(NotSupportedError,
227*35238bceSAndroid Build Coastguard Worker                             contextSupports(m_context.getRenderContext().getType(), m_minimumVersion),
228*35238bceSAndroid Build Coastguard Worker                             "Test not supported in this context version.");
229*35238bceSAndroid Build Coastguard Worker 
230*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
231*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
232*35238bceSAndroid Build Coastguard Worker 
233*35238bceSAndroid Build Coastguard Worker     // \note: In GL ES 3.2, the following targets have different limits as in 3.1
234*35238bceSAndroid Build Coastguard Worker     const int value =
235*35238bceSAndroid Build Coastguard Worker         contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)) ?
236*35238bceSAndroid Build Coastguard Worker             (m_target == GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS ? MAX_FRAG_ATOMIC_COUNTER_BUFFERS_GLES32 // 1
237*35238bceSAndroid Build Coastguard Worker              :
238*35238bceSAndroid Build Coastguard Worker              m_target == GL_MAX_FRAGMENT_ATOMIC_COUNTERS ? MAX_FRAG_ATOMIC_COUNTERS_GLES32 // 8
239*35238bceSAndroid Build Coastguard Worker              :
240*35238bceSAndroid Build Coastguard Worker              m_target == GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS ? MAX_FRAG_SHADER_STORAGE_BLOCKS_GLES32 // 4
241*35238bceSAndroid Build Coastguard Worker                                                                  :
242*35238bceSAndroid Build Coastguard Worker                                                                  m_minValue) :
243*35238bceSAndroid Build Coastguard Worker             m_minValue;
244*35238bceSAndroid Build Coastguard Worker 
245*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
246*35238bceSAndroid Build Coastguard Worker     verifyStateIntegerMin(result, gl, m_target, value, m_verifierType);
247*35238bceSAndroid Build Coastguard Worker 
248*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
249*35238bceSAndroid Build Coastguard Worker     return STOP;
250*35238bceSAndroid Build Coastguard Worker }
251*35238bceSAndroid Build Coastguard Worker 
252*35238bceSAndroid Build Coastguard Worker class AlignmentCase : public TestCase
253*35238bceSAndroid Build Coastguard Worker {
254*35238bceSAndroid Build Coastguard Worker public:
255*35238bceSAndroid Build Coastguard Worker     AlignmentCase(Context &context, const char *name, const char *desc, glw::GLenum target, int minValue,
256*35238bceSAndroid Build Coastguard Worker                   QueryType verifierType);
257*35238bceSAndroid Build Coastguard Worker     AlignmentCase(Context &context, const char *name, const char *desc, glw::GLenum target, int minValue,
258*35238bceSAndroid Build Coastguard Worker                   QueryType verifierType, glu::ApiType minVersion);
259*35238bceSAndroid Build Coastguard Worker 
260*35238bceSAndroid Build Coastguard Worker private:
261*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
262*35238bceSAndroid Build Coastguard Worker 
263*35238bceSAndroid Build Coastguard Worker     const glw::GLenum m_target;
264*35238bceSAndroid Build Coastguard Worker     const int m_minValue;
265*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
266*35238bceSAndroid Build Coastguard Worker     const glu::ApiType m_minimumVersion;
267*35238bceSAndroid Build Coastguard Worker };
268*35238bceSAndroid Build Coastguard Worker 
AlignmentCase(Context & context,const char * name,const char * desc,glw::GLenum target,int minValue,QueryType verifierType)269*35238bceSAndroid Build Coastguard Worker AlignmentCase::AlignmentCase(Context &context, const char *name, const char *desc, glw::GLenum target, int minValue,
270*35238bceSAndroid Build Coastguard Worker                              QueryType verifierType)
271*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
272*35238bceSAndroid Build Coastguard Worker     , m_target(target)
273*35238bceSAndroid Build Coastguard Worker     , m_minValue(minValue)
274*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
275*35238bceSAndroid Build Coastguard Worker     , m_minimumVersion(glu::ApiType::es(3, 1))
276*35238bceSAndroid Build Coastguard Worker {
277*35238bceSAndroid Build Coastguard Worker }
278*35238bceSAndroid Build Coastguard Worker 
AlignmentCase(Context & context,const char * name,const char * desc,glw::GLenum target,int minValue,QueryType verifierType,glu::ApiType minVersion)279*35238bceSAndroid Build Coastguard Worker AlignmentCase::AlignmentCase(Context &context, const char *name, const char *desc, glw::GLenum target, int minValue,
280*35238bceSAndroid Build Coastguard Worker                              QueryType verifierType, glu::ApiType minVersion)
281*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
282*35238bceSAndroid Build Coastguard Worker     , m_target(target)
283*35238bceSAndroid Build Coastguard Worker     , m_minValue(minValue)
284*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
285*35238bceSAndroid Build Coastguard Worker     , m_minimumVersion(minVersion)
286*35238bceSAndroid Build Coastguard Worker {
287*35238bceSAndroid Build Coastguard Worker }
288*35238bceSAndroid Build Coastguard Worker 
iterate(void)289*35238bceSAndroid Build Coastguard Worker AlignmentCase::IterateResult AlignmentCase::iterate(void)
290*35238bceSAndroid Build Coastguard Worker {
291*35238bceSAndroid Build Coastguard Worker     if (!contextSupports(m_context.getRenderContext().getType(), glu::ApiType::core(4, 5)))
292*35238bceSAndroid Build Coastguard Worker         TCU_CHECK_AND_THROW(NotSupportedError,
293*35238bceSAndroid Build Coastguard Worker                             contextSupports(m_context.getRenderContext().getType(), m_minimumVersion),
294*35238bceSAndroid Build Coastguard Worker                             "Test not supported in this context.");
295*35238bceSAndroid Build Coastguard Worker 
296*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
297*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
298*35238bceSAndroid Build Coastguard Worker 
299*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
300*35238bceSAndroid Build Coastguard Worker     verifyStateIntegerMax(result, gl, m_target, m_minValue, m_verifierType);
301*35238bceSAndroid Build Coastguard Worker 
302*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
303*35238bceSAndroid Build Coastguard Worker     return STOP;
304*35238bceSAndroid Build Coastguard Worker }
305*35238bceSAndroid Build Coastguard Worker 
306*35238bceSAndroid Build Coastguard Worker class BufferBindingCase : public TestCase
307*35238bceSAndroid Build Coastguard Worker {
308*35238bceSAndroid Build Coastguard Worker public:
309*35238bceSAndroid Build Coastguard Worker     BufferBindingCase(Context &context, const char *name, const char *desc, glw::GLenum queryTarget,
310*35238bceSAndroid Build Coastguard Worker                       glw::GLenum bindingPoint, QueryType verifierType);
311*35238bceSAndroid Build Coastguard Worker 
312*35238bceSAndroid Build Coastguard Worker private:
313*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
314*35238bceSAndroid Build Coastguard Worker 
315*35238bceSAndroid Build Coastguard Worker     const glw::GLenum m_queryTarget;
316*35238bceSAndroid Build Coastguard Worker     const glw::GLenum m_bindingPoint;
317*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
318*35238bceSAndroid Build Coastguard Worker };
319*35238bceSAndroid Build Coastguard Worker 
BufferBindingCase(Context & context,const char * name,const char * desc,glw::GLenum queryTarget,glw::GLenum bindingPoint,QueryType verifierType)320*35238bceSAndroid Build Coastguard Worker BufferBindingCase::BufferBindingCase(Context &context, const char *name, const char *desc, glw::GLenum queryTarget,
321*35238bceSAndroid Build Coastguard Worker                                      glw::GLenum bindingPoint, QueryType verifierType)
322*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
323*35238bceSAndroid Build Coastguard Worker     , m_queryTarget(queryTarget)
324*35238bceSAndroid Build Coastguard Worker     , m_bindingPoint(bindingPoint)
325*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
326*35238bceSAndroid Build Coastguard Worker {
327*35238bceSAndroid Build Coastguard Worker }
328*35238bceSAndroid Build Coastguard Worker 
iterate(void)329*35238bceSAndroid Build Coastguard Worker BufferBindingCase::IterateResult BufferBindingCase::iterate(void)
330*35238bceSAndroid Build Coastguard Worker {
331*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
332*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
333*35238bceSAndroid Build Coastguard Worker 
334*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
335*35238bceSAndroid Build Coastguard Worker 
336*35238bceSAndroid Build Coastguard Worker     {
337*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial value");
338*35238bceSAndroid Build Coastguard Worker 
339*35238bceSAndroid Build Coastguard Worker         verifyStateInteger(result, gl, m_queryTarget, 0, m_verifierType);
340*35238bceSAndroid Build Coastguard Worker     }
341*35238bceSAndroid Build Coastguard Worker 
342*35238bceSAndroid Build Coastguard Worker     {
343*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "AfterBinding", "After binding");
344*35238bceSAndroid Build Coastguard Worker         glu::Buffer buf(m_context.getRenderContext());
345*35238bceSAndroid Build Coastguard Worker 
346*35238bceSAndroid Build Coastguard Worker         gl.glBindBuffer(m_bindingPoint, *buf);
347*35238bceSAndroid Build Coastguard Worker         GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "setup");
348*35238bceSAndroid Build Coastguard Worker 
349*35238bceSAndroid Build Coastguard Worker         verifyStateInteger(result, gl, m_queryTarget, *buf, m_verifierType);
350*35238bceSAndroid Build Coastguard Worker     }
351*35238bceSAndroid Build Coastguard Worker 
352*35238bceSAndroid Build Coastguard Worker     {
353*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "AfterDelete", "After deleting");
354*35238bceSAndroid Build Coastguard Worker         glw::GLuint buf = 0;
355*35238bceSAndroid Build Coastguard Worker 
356*35238bceSAndroid Build Coastguard Worker         gl.glGenBuffers(1, &buf);
357*35238bceSAndroid Build Coastguard Worker         gl.glBindBuffer(m_bindingPoint, buf);
358*35238bceSAndroid Build Coastguard Worker         gl.glDeleteBuffers(1, &buf);
359*35238bceSAndroid Build Coastguard Worker         GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "setup");
360*35238bceSAndroid Build Coastguard Worker 
361*35238bceSAndroid Build Coastguard Worker         verifyStateInteger(result, gl, m_queryTarget, 0, m_verifierType);
362*35238bceSAndroid Build Coastguard Worker     }
363*35238bceSAndroid Build Coastguard Worker 
364*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
365*35238bceSAndroid Build Coastguard Worker     return STOP;
366*35238bceSAndroid Build Coastguard Worker }
367*35238bceSAndroid Build Coastguard Worker 
368*35238bceSAndroid Build Coastguard Worker class ProgramPipelineBindingCase : public TestCase
369*35238bceSAndroid Build Coastguard Worker {
370*35238bceSAndroid Build Coastguard Worker public:
371*35238bceSAndroid Build Coastguard Worker     ProgramPipelineBindingCase(Context &context, const char *name, const char *desc, QueryType verifierType);
372*35238bceSAndroid Build Coastguard Worker 
373*35238bceSAndroid Build Coastguard Worker private:
374*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
375*35238bceSAndroid Build Coastguard Worker 
376*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
377*35238bceSAndroid Build Coastguard Worker };
378*35238bceSAndroid Build Coastguard Worker 
ProgramPipelineBindingCase(Context & context,const char * name,const char * desc,QueryType verifierType)379*35238bceSAndroid Build Coastguard Worker ProgramPipelineBindingCase::ProgramPipelineBindingCase(Context &context, const char *name, const char *desc,
380*35238bceSAndroid Build Coastguard Worker                                                        QueryType verifierType)
381*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
382*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
383*35238bceSAndroid Build Coastguard Worker {
384*35238bceSAndroid Build Coastguard Worker }
385*35238bceSAndroid Build Coastguard Worker 
iterate(void)386*35238bceSAndroid Build Coastguard Worker ProgramPipelineBindingCase::IterateResult ProgramPipelineBindingCase::iterate(void)
387*35238bceSAndroid Build Coastguard Worker {
388*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
389*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
390*35238bceSAndroid Build Coastguard Worker 
391*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
392*35238bceSAndroid Build Coastguard Worker 
393*35238bceSAndroid Build Coastguard Worker     {
394*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial value");
395*35238bceSAndroid Build Coastguard Worker 
396*35238bceSAndroid Build Coastguard Worker         verifyStateInteger(result, gl, GL_PROGRAM_PIPELINE_BINDING, 0, m_verifierType);
397*35238bceSAndroid Build Coastguard Worker     }
398*35238bceSAndroid Build Coastguard Worker 
399*35238bceSAndroid Build Coastguard Worker     {
400*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "AfterBinding", "After binding");
401*35238bceSAndroid Build Coastguard Worker         glu::ProgramPipeline pipeline(m_context.getRenderContext());
402*35238bceSAndroid Build Coastguard Worker 
403*35238bceSAndroid Build Coastguard Worker         gl.glBindProgramPipeline(pipeline.getPipeline());
404*35238bceSAndroid Build Coastguard Worker         GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "setup");
405*35238bceSAndroid Build Coastguard Worker 
406*35238bceSAndroid Build Coastguard Worker         verifyStateInteger(result, gl, GL_PROGRAM_PIPELINE_BINDING, pipeline.getPipeline(), m_verifierType);
407*35238bceSAndroid Build Coastguard Worker     }
408*35238bceSAndroid Build Coastguard Worker 
409*35238bceSAndroid Build Coastguard Worker     {
410*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "AfterDelete", "After deleting");
411*35238bceSAndroid Build Coastguard Worker         glw::GLuint pipeline = 0;
412*35238bceSAndroid Build Coastguard Worker 
413*35238bceSAndroid Build Coastguard Worker         gl.glGenProgramPipelines(1, &pipeline);
414*35238bceSAndroid Build Coastguard Worker         gl.glBindProgramPipeline(pipeline);
415*35238bceSAndroid Build Coastguard Worker         gl.glDeleteProgramPipelines(1, &pipeline);
416*35238bceSAndroid Build Coastguard Worker         GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "setup");
417*35238bceSAndroid Build Coastguard Worker 
418*35238bceSAndroid Build Coastguard Worker         verifyStateInteger(result, gl, GL_PROGRAM_PIPELINE_BINDING, 0, m_verifierType);
419*35238bceSAndroid Build Coastguard Worker     }
420*35238bceSAndroid Build Coastguard Worker 
421*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
422*35238bceSAndroid Build Coastguard Worker     return STOP;
423*35238bceSAndroid Build Coastguard Worker }
424*35238bceSAndroid Build Coastguard Worker 
425*35238bceSAndroid Build Coastguard Worker class FramebufferMinimumValueCase : public TestCase
426*35238bceSAndroid Build Coastguard Worker {
427*35238bceSAndroid Build Coastguard Worker public:
428*35238bceSAndroid Build Coastguard Worker     FramebufferMinimumValueCase(Context &context, const char *name, const char *desc, glw::GLenum target, int minValue,
429*35238bceSAndroid Build Coastguard Worker                                 glw::GLenum tiedTo, QueryType verifierType);
430*35238bceSAndroid Build Coastguard Worker 
431*35238bceSAndroid Build Coastguard Worker private:
432*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
433*35238bceSAndroid Build Coastguard Worker 
434*35238bceSAndroid Build Coastguard Worker     const glw::GLenum m_target;
435*35238bceSAndroid Build Coastguard Worker     const glw::GLenum m_tiedTo;
436*35238bceSAndroid Build Coastguard Worker     const int m_minValue;
437*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
438*35238bceSAndroid Build Coastguard Worker };
439*35238bceSAndroid Build Coastguard Worker 
FramebufferMinimumValueCase(Context & context,const char * name,const char * desc,glw::GLenum target,int minValue,glw::GLenum tiedTo,QueryType verifierType)440*35238bceSAndroid Build Coastguard Worker FramebufferMinimumValueCase::FramebufferMinimumValueCase(Context &context, const char *name, const char *desc,
441*35238bceSAndroid Build Coastguard Worker                                                          glw::GLenum target, int minValue, glw::GLenum tiedTo,
442*35238bceSAndroid Build Coastguard Worker                                                          QueryType verifierType)
443*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
444*35238bceSAndroid Build Coastguard Worker     , m_target(target)
445*35238bceSAndroid Build Coastguard Worker     , m_tiedTo(tiedTo)
446*35238bceSAndroid Build Coastguard Worker     , m_minValue(minValue)
447*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
448*35238bceSAndroid Build Coastguard Worker {
449*35238bceSAndroid Build Coastguard Worker }
450*35238bceSAndroid Build Coastguard Worker 
iterate(void)451*35238bceSAndroid Build Coastguard Worker FramebufferMinimumValueCase::IterateResult FramebufferMinimumValueCase::iterate(void)
452*35238bceSAndroid Build Coastguard Worker {
453*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
454*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
455*35238bceSAndroid Build Coastguard Worker 
456*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
457*35238bceSAndroid Build Coastguard Worker 
458*35238bceSAndroid Build Coastguard Worker     {
459*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "Minimum",
460*35238bceSAndroid Build Coastguard Worker                                             "Specified minimum is " + de::toString(m_minValue));
461*35238bceSAndroid Build Coastguard Worker 
462*35238bceSAndroid Build Coastguard Worker         verifyStateIntegerMin(result, gl, m_target, m_minValue, m_verifierType);
463*35238bceSAndroid Build Coastguard Worker     }
464*35238bceSAndroid Build Coastguard Worker     {
465*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "Ties",
466*35238bceSAndroid Build Coastguard Worker                                             "The limit is tied to the value of " +
467*35238bceSAndroid Build Coastguard Worker                                                 de::toString(glu::getGettableStateStr(m_tiedTo)));
468*35238bceSAndroid Build Coastguard Worker         StateQueryMemoryWriteGuard<glw::GLint> tiedToValue;
469*35238bceSAndroid Build Coastguard Worker 
470*35238bceSAndroid Build Coastguard Worker         gl.glGetIntegerv(m_tiedTo, &tiedToValue);
471*35238bceSAndroid Build Coastguard Worker         GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "glGetIntegerv");
472*35238bceSAndroid Build Coastguard Worker 
473*35238bceSAndroid Build Coastguard Worker         if (tiedToValue.verifyValidity(result))
474*35238bceSAndroid Build Coastguard Worker             verifyStateIntegerMin(result, gl, m_target, tiedToValue, m_verifierType);
475*35238bceSAndroid Build Coastguard Worker     }
476*35238bceSAndroid Build Coastguard Worker 
477*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
478*35238bceSAndroid Build Coastguard Worker     return STOP;
479*35238bceSAndroid Build Coastguard Worker }
480*35238bceSAndroid Build Coastguard Worker 
481*35238bceSAndroid Build Coastguard Worker class LegacyVectorLimitCase : public TestCase
482*35238bceSAndroid Build Coastguard Worker {
483*35238bceSAndroid Build Coastguard Worker public:
484*35238bceSAndroid Build Coastguard Worker     LegacyVectorLimitCase(Context &context, const char *name, const char *desc, glw::GLenum legacyTarget,
485*35238bceSAndroid Build Coastguard Worker                           glw::GLenum componentTarget, QueryType verifierType);
486*35238bceSAndroid Build Coastguard Worker 
487*35238bceSAndroid Build Coastguard Worker private:
488*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
489*35238bceSAndroid Build Coastguard Worker 
490*35238bceSAndroid Build Coastguard Worker     const glw::GLenum m_legacyTarget;
491*35238bceSAndroid Build Coastguard Worker     const glw::GLenum m_componentTarget;
492*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
493*35238bceSAndroid Build Coastguard Worker };
494*35238bceSAndroid Build Coastguard Worker 
LegacyVectorLimitCase(Context & context,const char * name,const char * desc,glw::GLenum legacyTarget,glw::GLenum componentTarget,QueryType verifierType)495*35238bceSAndroid Build Coastguard Worker LegacyVectorLimitCase::LegacyVectorLimitCase(Context &context, const char *name, const char *desc,
496*35238bceSAndroid Build Coastguard Worker                                              glw::GLenum legacyTarget, glw::GLenum componentTarget,
497*35238bceSAndroid Build Coastguard Worker                                              QueryType verifierType)
498*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
499*35238bceSAndroid Build Coastguard Worker     , m_legacyTarget(legacyTarget)
500*35238bceSAndroid Build Coastguard Worker     , m_componentTarget(componentTarget)
501*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
502*35238bceSAndroid Build Coastguard Worker {
503*35238bceSAndroid Build Coastguard Worker }
504*35238bceSAndroid Build Coastguard Worker 
iterate(void)505*35238bceSAndroid Build Coastguard Worker LegacyVectorLimitCase::IterateResult LegacyVectorLimitCase::iterate(void)
506*35238bceSAndroid Build Coastguard Worker {
507*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
508*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
509*35238bceSAndroid Build Coastguard Worker 
510*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
511*35238bceSAndroid Build Coastguard Worker 
512*35238bceSAndroid Build Coastguard Worker     {
513*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "TiedTo",
514*35238bceSAndroid Build Coastguard Worker                                             de::toString(glu::getGettableStateStr(m_legacyTarget)) + " is " +
515*35238bceSAndroid Build Coastguard Worker                                                 de::toString(glu::getGettableStateStr(m_componentTarget)) +
516*35238bceSAndroid Build Coastguard Worker                                                 " divided by four");
517*35238bceSAndroid Build Coastguard Worker 
518*35238bceSAndroid Build Coastguard Worker         StateQueryMemoryWriteGuard<glw::GLint> value;
519*35238bceSAndroid Build Coastguard Worker         gl.glGetIntegerv(m_componentTarget, &value);
520*35238bceSAndroid Build Coastguard Worker         GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "glGetIntegerv");
521*35238bceSAndroid Build Coastguard Worker 
522*35238bceSAndroid Build Coastguard Worker         if (value.verifyValidity(result))
523*35238bceSAndroid Build Coastguard Worker             verifyStateInteger(result, gl, m_legacyTarget, ((int)value) / 4, m_verifierType);
524*35238bceSAndroid Build Coastguard Worker     }
525*35238bceSAndroid Build Coastguard Worker 
526*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
527*35238bceSAndroid Build Coastguard Worker     return STOP;
528*35238bceSAndroid Build Coastguard Worker }
529*35238bceSAndroid Build Coastguard Worker 
530*35238bceSAndroid Build Coastguard Worker class CombinedUniformComponentsCase : public TestCase
531*35238bceSAndroid Build Coastguard Worker {
532*35238bceSAndroid Build Coastguard Worker public:
533*35238bceSAndroid Build Coastguard Worker     CombinedUniformComponentsCase(Context &context, const char *name, const char *desc, glw::GLenum target,
534*35238bceSAndroid Build Coastguard Worker                                   QueryType verifierType);
535*35238bceSAndroid Build Coastguard Worker     CombinedUniformComponentsCase(Context &context, const char *name, const char *desc, glw::GLenum target,
536*35238bceSAndroid Build Coastguard Worker                                   QueryType verifierType, glu::ApiType minVersion);
537*35238bceSAndroid Build Coastguard Worker 
538*35238bceSAndroid Build Coastguard Worker private:
539*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
540*35238bceSAndroid Build Coastguard Worker     const glw::GLenum m_target;
541*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
542*35238bceSAndroid Build Coastguard Worker     const glu::ApiType m_minimumVersion;
543*35238bceSAndroid Build Coastguard Worker };
544*35238bceSAndroid Build Coastguard Worker 
CombinedUniformComponentsCase(Context & context,const char * name,const char * desc,glw::GLenum target,QueryType verifierType)545*35238bceSAndroid Build Coastguard Worker CombinedUniformComponentsCase::CombinedUniformComponentsCase(Context &context, const char *name, const char *desc,
546*35238bceSAndroid Build Coastguard Worker                                                              glw::GLenum target, QueryType verifierType)
547*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
548*35238bceSAndroid Build Coastguard Worker     , m_target(target)
549*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
550*35238bceSAndroid Build Coastguard Worker     , m_minimumVersion(glu::ApiType::es(3, 1))
551*35238bceSAndroid Build Coastguard Worker {
552*35238bceSAndroid Build Coastguard Worker }
553*35238bceSAndroid Build Coastguard Worker 
CombinedUniformComponentsCase(Context & context,const char * name,const char * desc,glw::GLenum target,QueryType verifierType,glu::ApiType minVersion)554*35238bceSAndroid Build Coastguard Worker CombinedUniformComponentsCase::CombinedUniformComponentsCase(Context &context, const char *name, const char *desc,
555*35238bceSAndroid Build Coastguard Worker                                                              glw::GLenum target, QueryType verifierType,
556*35238bceSAndroid Build Coastguard Worker                                                              glu::ApiType minVersion)
557*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
558*35238bceSAndroid Build Coastguard Worker     , m_target(target)
559*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
560*35238bceSAndroid Build Coastguard Worker     , m_minimumVersion(minVersion)
561*35238bceSAndroid Build Coastguard Worker {
562*35238bceSAndroid Build Coastguard Worker }
563*35238bceSAndroid Build Coastguard Worker 
iterate(void)564*35238bceSAndroid Build Coastguard Worker CombinedUniformComponentsCase::IterateResult CombinedUniformComponentsCase::iterate(void)
565*35238bceSAndroid Build Coastguard Worker {
566*35238bceSAndroid Build Coastguard Worker     if (!contextSupports(m_context.getRenderContext().getType(), glu::ApiType::core(4, 5)))
567*35238bceSAndroid Build Coastguard Worker         TCU_CHECK_AND_THROW(NotSupportedError,
568*35238bceSAndroid Build Coastguard Worker                             contextSupports(m_context.getRenderContext().getType(), m_minimumVersion),
569*35238bceSAndroid Build Coastguard Worker                             "Test not supported in this context.");
570*35238bceSAndroid Build Coastguard Worker 
571*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
572*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
573*35238bceSAndroid Build Coastguard Worker 
574*35238bceSAndroid Build Coastguard Worker     const glw::GLenum maxUniformBlocksEnum =
575*35238bceSAndroid Build Coastguard Worker         (m_target == GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS)         ? GL_MAX_COMPUTE_UNIFORM_BLOCKS :
576*35238bceSAndroid Build Coastguard Worker         (m_target == GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS)    ? GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS :
577*35238bceSAndroid Build Coastguard Worker         (m_target == GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS) ? GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS :
578*35238bceSAndroid Build Coastguard Worker         (m_target == GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS)        ? GL_MAX_GEOMETRY_UNIFORM_BLOCKS :
579*35238bceSAndroid Build Coastguard Worker                                                                            -1;
580*35238bceSAndroid Build Coastguard Worker 
581*35238bceSAndroid Build Coastguard Worker     const glw::GLenum maxUniformComponentsEnum =
582*35238bceSAndroid Build Coastguard Worker         (m_target == GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS)         ? GL_MAX_COMPUTE_UNIFORM_COMPONENTS :
583*35238bceSAndroid Build Coastguard Worker         (m_target == GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS)    ? GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS :
584*35238bceSAndroid Build Coastguard Worker         (m_target == GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS) ? GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS :
585*35238bceSAndroid Build Coastguard Worker         (m_target == GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS)        ? GL_MAX_GEOMETRY_UNIFORM_COMPONENTS :
586*35238bceSAndroid Build Coastguard Worker                                                                            -1;
587*35238bceSAndroid Build Coastguard Worker 
588*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
589*35238bceSAndroid Build Coastguard Worker 
590*35238bceSAndroid Build Coastguard Worker     m_testCtx.getLog() << tcu::TestLog::Message
591*35238bceSAndroid Build Coastguard Worker                        << "The minimum value of MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS is MAX_COMPUTE_UNIFORM_BLOCKS "
592*35238bceSAndroid Build Coastguard Worker                           "x MAX_UNIFORM_BLOCK_SIZE / 4 + MAX_COMPUTE_UNIFORM_COMPONENTS"
593*35238bceSAndroid Build Coastguard Worker                        << tcu::TestLog::EndMessage;
594*35238bceSAndroid Build Coastguard Worker 
595*35238bceSAndroid Build Coastguard Worker     StateQueryMemoryWriteGuard<glw::GLint> maxUniformBlocks;
596*35238bceSAndroid Build Coastguard Worker     gl.glGetIntegerv(maxUniformBlocksEnum, &maxUniformBlocks);
597*35238bceSAndroid Build Coastguard Worker     GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "glGetIntegerv");
598*35238bceSAndroid Build Coastguard Worker 
599*35238bceSAndroid Build Coastguard Worker     StateQueryMemoryWriteGuard<glw::GLint> maxUniformBlockSize;
600*35238bceSAndroid Build Coastguard Worker     gl.glGetIntegerv(GL_MAX_UNIFORM_BLOCK_SIZE, &maxUniformBlockSize);
601*35238bceSAndroid Build Coastguard Worker     GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "glGetIntegerv");
602*35238bceSAndroid Build Coastguard Worker 
603*35238bceSAndroid Build Coastguard Worker     StateQueryMemoryWriteGuard<glw::GLint> maxUniformComponents;
604*35238bceSAndroid Build Coastguard Worker     gl.glGetIntegerv(maxUniformComponentsEnum, &maxUniformComponents);
605*35238bceSAndroid Build Coastguard Worker     GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "glGetIntegerv");
606*35238bceSAndroid Build Coastguard Worker 
607*35238bceSAndroid Build Coastguard Worker     if (maxUniformBlocks.verifyValidity(result) && maxUniformBlockSize.verifyValidity(result) &&
608*35238bceSAndroid Build Coastguard Worker         maxUniformComponents.verifyValidity(result))
609*35238bceSAndroid Build Coastguard Worker         verifyStateIntegerMin(result, gl, m_target,
610*35238bceSAndroid Build Coastguard Worker                               ((int)maxUniformBlocks) * ((int)maxUniformBlockSize) / 4 + (int)maxUniformComponents,
611*35238bceSAndroid Build Coastguard Worker                               m_verifierType);
612*35238bceSAndroid Build Coastguard Worker 
613*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
614*35238bceSAndroid Build Coastguard Worker     return STOP;
615*35238bceSAndroid Build Coastguard Worker }
616*35238bceSAndroid Build Coastguard Worker 
617*35238bceSAndroid Build Coastguard Worker class TextureGatherLimitCase : public TestCase
618*35238bceSAndroid Build Coastguard Worker {
619*35238bceSAndroid Build Coastguard Worker public:
620*35238bceSAndroid Build Coastguard Worker     TextureGatherLimitCase(Context &context, const char *name, const char *desc, bool isMaxCase,
621*35238bceSAndroid Build Coastguard Worker                            QueryType verifierType);
622*35238bceSAndroid Build Coastguard Worker 
623*35238bceSAndroid Build Coastguard Worker private:
624*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
625*35238bceSAndroid Build Coastguard Worker 
626*35238bceSAndroid Build Coastguard Worker     const bool m_isMaxCase;
627*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
628*35238bceSAndroid Build Coastguard Worker };
629*35238bceSAndroid Build Coastguard Worker 
TextureGatherLimitCase(Context & context,const char * name,const char * desc,bool isMaxCase,QueryType verifierType)630*35238bceSAndroid Build Coastguard Worker TextureGatherLimitCase::TextureGatherLimitCase(Context &context, const char *name, const char *desc, bool isMaxCase,
631*35238bceSAndroid Build Coastguard Worker                                                QueryType verifierType)
632*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
633*35238bceSAndroid Build Coastguard Worker     , m_isMaxCase(isMaxCase)
634*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
635*35238bceSAndroid Build Coastguard Worker {
636*35238bceSAndroid Build Coastguard Worker }
637*35238bceSAndroid Build Coastguard Worker 
iterate(void)638*35238bceSAndroid Build Coastguard Worker TextureGatherLimitCase::IterateResult TextureGatherLimitCase::iterate(void)
639*35238bceSAndroid Build Coastguard Worker {
640*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
641*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
642*35238bceSAndroid Build Coastguard Worker 
643*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
644*35238bceSAndroid Build Coastguard Worker 
645*35238bceSAndroid Build Coastguard Worker     if (m_isMaxCase)
646*35238bceSAndroid Build Coastguard Worker     {
647*35238bceSAndroid Build Coastguard Worker         // range [0, inf)
648*35238bceSAndroid Build Coastguard Worker         verifyStateIntegerMin(result, gl, GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET, 0, m_verifierType);
649*35238bceSAndroid Build Coastguard Worker     }
650*35238bceSAndroid Build Coastguard Worker     else
651*35238bceSAndroid Build Coastguard Worker     {
652*35238bceSAndroid Build Coastguard Worker         // range (-inf, 0]
653*35238bceSAndroid Build Coastguard Worker         verifyStateIntegerMax(result, gl, GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET, 0, m_verifierType);
654*35238bceSAndroid Build Coastguard Worker     }
655*35238bceSAndroid Build Coastguard Worker 
656*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
657*35238bceSAndroid Build Coastguard Worker     return STOP;
658*35238bceSAndroid Build Coastguard Worker }
659*35238bceSAndroid Build Coastguard Worker 
660*35238bceSAndroid Build Coastguard Worker class MaxUniformBufferBindingsCase : public TestCase
661*35238bceSAndroid Build Coastguard Worker {
662*35238bceSAndroid Build Coastguard Worker public:
663*35238bceSAndroid Build Coastguard Worker     MaxUniformBufferBindingsCase(Context &context, const char *name, const char *desc, QueryType verifierType);
664*35238bceSAndroid Build Coastguard Worker 
665*35238bceSAndroid Build Coastguard Worker private:
666*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
667*35238bceSAndroid Build Coastguard Worker 
668*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
669*35238bceSAndroid Build Coastguard Worker };
670*35238bceSAndroid Build Coastguard Worker 
MaxUniformBufferBindingsCase(Context & context,const char * name,const char * desc,QueryType verifierType)671*35238bceSAndroid Build Coastguard Worker MaxUniformBufferBindingsCase::MaxUniformBufferBindingsCase(Context &context, const char *name, const char *desc,
672*35238bceSAndroid Build Coastguard Worker                                                            QueryType verifierType)
673*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
674*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
675*35238bceSAndroid Build Coastguard Worker {
676*35238bceSAndroid Build Coastguard Worker }
677*35238bceSAndroid Build Coastguard Worker 
iterate(void)678*35238bceSAndroid Build Coastguard Worker MaxUniformBufferBindingsCase::IterateResult MaxUniformBufferBindingsCase::iterate(void)
679*35238bceSAndroid Build Coastguard Worker {
680*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
681*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
682*35238bceSAndroid Build Coastguard Worker     int minMax;
683*35238bceSAndroid Build Coastguard Worker 
684*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
685*35238bceSAndroid Build Coastguard Worker 
686*35238bceSAndroid Build Coastguard Worker     if (contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
687*35238bceSAndroid Build Coastguard Worker     {
688*35238bceSAndroid Build Coastguard Worker         minMax = 72;
689*35238bceSAndroid Build Coastguard Worker     }
690*35238bceSAndroid Build Coastguard Worker     else
691*35238bceSAndroid Build Coastguard Worker     {
692*35238bceSAndroid Build Coastguard Worker         if (m_context.getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader"))
693*35238bceSAndroid Build Coastguard Worker         {
694*35238bceSAndroid Build Coastguard Worker             m_testCtx.getLog()
695*35238bceSAndroid Build Coastguard Worker                 << tcu::TestLog::Message
696*35238bceSAndroid Build Coastguard Worker                 << "GL_EXT_tessellation_shader increases the minimum value of GL_MAX_UNIFORM_BUFFER_BINDINGS to 72"
697*35238bceSAndroid Build Coastguard Worker                 << tcu::TestLog::EndMessage;
698*35238bceSAndroid Build Coastguard Worker             minMax = 72;
699*35238bceSAndroid Build Coastguard Worker         }
700*35238bceSAndroid Build Coastguard Worker         else if (m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader"))
701*35238bceSAndroid Build Coastguard Worker         {
702*35238bceSAndroid Build Coastguard Worker             m_testCtx.getLog()
703*35238bceSAndroid Build Coastguard Worker                 << tcu::TestLog::Message
704*35238bceSAndroid Build Coastguard Worker                 << "GL_EXT_geometry_shader increases the minimum value of GL_MAX_UNIFORM_BUFFER_BINDINGS to 48"
705*35238bceSAndroid Build Coastguard Worker                 << tcu::TestLog::EndMessage;
706*35238bceSAndroid Build Coastguard Worker             minMax = 48;
707*35238bceSAndroid Build Coastguard Worker         }
708*35238bceSAndroid Build Coastguard Worker         else
709*35238bceSAndroid Build Coastguard Worker         {
710*35238bceSAndroid Build Coastguard Worker             minMax = 36;
711*35238bceSAndroid Build Coastguard Worker         }
712*35238bceSAndroid Build Coastguard Worker     }
713*35238bceSAndroid Build Coastguard Worker 
714*35238bceSAndroid Build Coastguard Worker     // range [0, inf)
715*35238bceSAndroid Build Coastguard Worker     verifyStateIntegerMin(result, gl, GL_MAX_UNIFORM_BUFFER_BINDINGS, minMax, m_verifierType);
716*35238bceSAndroid Build Coastguard Worker 
717*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
718*35238bceSAndroid Build Coastguard Worker     return STOP;
719*35238bceSAndroid Build Coastguard Worker }
720*35238bceSAndroid Build Coastguard Worker 
721*35238bceSAndroid Build Coastguard Worker class MaxCombinedUniformBlocksCase : public TestCase
722*35238bceSAndroid Build Coastguard Worker {
723*35238bceSAndroid Build Coastguard Worker public:
724*35238bceSAndroid Build Coastguard Worker     MaxCombinedUniformBlocksCase(Context &context, const char *name, const char *desc, QueryType verifierType);
725*35238bceSAndroid Build Coastguard Worker 
726*35238bceSAndroid Build Coastguard Worker private:
727*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
728*35238bceSAndroid Build Coastguard Worker 
729*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
730*35238bceSAndroid Build Coastguard Worker };
731*35238bceSAndroid Build Coastguard Worker 
MaxCombinedUniformBlocksCase(Context & context,const char * name,const char * desc,QueryType verifierType)732*35238bceSAndroid Build Coastguard Worker MaxCombinedUniformBlocksCase::MaxCombinedUniformBlocksCase(Context &context, const char *name, const char *desc,
733*35238bceSAndroid Build Coastguard Worker                                                            QueryType verifierType)
734*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
735*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
736*35238bceSAndroid Build Coastguard Worker {
737*35238bceSAndroid Build Coastguard Worker }
738*35238bceSAndroid Build Coastguard Worker 
iterate(void)739*35238bceSAndroid Build Coastguard Worker MaxCombinedUniformBlocksCase::IterateResult MaxCombinedUniformBlocksCase::iterate(void)
740*35238bceSAndroid Build Coastguard Worker {
741*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
742*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
743*35238bceSAndroid Build Coastguard Worker     int minMax;
744*35238bceSAndroid Build Coastguard Worker 
745*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
746*35238bceSAndroid Build Coastguard Worker 
747*35238bceSAndroid Build Coastguard Worker     if (contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
748*35238bceSAndroid Build Coastguard Worker     {
749*35238bceSAndroid Build Coastguard Worker         minMax = 60;
750*35238bceSAndroid Build Coastguard Worker     }
751*35238bceSAndroid Build Coastguard Worker     else
752*35238bceSAndroid Build Coastguard Worker     {
753*35238bceSAndroid Build Coastguard Worker         if (m_context.getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader"))
754*35238bceSAndroid Build Coastguard Worker         {
755*35238bceSAndroid Build Coastguard Worker             m_testCtx.getLog()
756*35238bceSAndroid Build Coastguard Worker                 << tcu::TestLog::Message
757*35238bceSAndroid Build Coastguard Worker                 << "GL_EXT_tessellation_shader increases the minimum value of GL_MAX_COMBINED_UNIFORM_BLOCKS to 60"
758*35238bceSAndroid Build Coastguard Worker                 << tcu::TestLog::EndMessage;
759*35238bceSAndroid Build Coastguard Worker             minMax = 60;
760*35238bceSAndroid Build Coastguard Worker         }
761*35238bceSAndroid Build Coastguard Worker         else if (m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader"))
762*35238bceSAndroid Build Coastguard Worker         {
763*35238bceSAndroid Build Coastguard Worker             m_testCtx.getLog()
764*35238bceSAndroid Build Coastguard Worker                 << tcu::TestLog::Message
765*35238bceSAndroid Build Coastguard Worker                 << "GL_EXT_geometry_shader increases the minimum value of GL_MAX_COMBINED_UNIFORM_BLOCKS to 36"
766*35238bceSAndroid Build Coastguard Worker                 << tcu::TestLog::EndMessage;
767*35238bceSAndroid Build Coastguard Worker             minMax = 36;
768*35238bceSAndroid Build Coastguard Worker         }
769*35238bceSAndroid Build Coastguard Worker         else
770*35238bceSAndroid Build Coastguard Worker         {
771*35238bceSAndroid Build Coastguard Worker             minMax = 24;
772*35238bceSAndroid Build Coastguard Worker         }
773*35238bceSAndroid Build Coastguard Worker     }
774*35238bceSAndroid Build Coastguard Worker 
775*35238bceSAndroid Build Coastguard Worker     // range [0, inf)
776*35238bceSAndroid Build Coastguard Worker     verifyStateIntegerMin(result, gl, GL_MAX_COMBINED_UNIFORM_BLOCKS, minMax, m_verifierType);
777*35238bceSAndroid Build Coastguard Worker 
778*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
779*35238bceSAndroid Build Coastguard Worker     return STOP;
780*35238bceSAndroid Build Coastguard Worker }
781*35238bceSAndroid Build Coastguard Worker 
782*35238bceSAndroid Build Coastguard Worker class MaxCombinedTexImageUnitsCase : public TestCase
783*35238bceSAndroid Build Coastguard Worker {
784*35238bceSAndroid Build Coastguard Worker public:
785*35238bceSAndroid Build Coastguard Worker     MaxCombinedTexImageUnitsCase(Context &context, const char *name, const char *desc, QueryType verifierType);
786*35238bceSAndroid Build Coastguard Worker 
787*35238bceSAndroid Build Coastguard Worker private:
788*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
789*35238bceSAndroid Build Coastguard Worker 
790*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifierType;
791*35238bceSAndroid Build Coastguard Worker };
792*35238bceSAndroid Build Coastguard Worker 
MaxCombinedTexImageUnitsCase(Context & context,const char * name,const char * desc,QueryType verifierType)793*35238bceSAndroid Build Coastguard Worker MaxCombinedTexImageUnitsCase::MaxCombinedTexImageUnitsCase(Context &context, const char *name, const char *desc,
794*35238bceSAndroid Build Coastguard Worker                                                            QueryType verifierType)
795*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
796*35238bceSAndroid Build Coastguard Worker     , m_verifierType(verifierType)
797*35238bceSAndroid Build Coastguard Worker {
798*35238bceSAndroid Build Coastguard Worker }
799*35238bceSAndroid Build Coastguard Worker 
iterate(void)800*35238bceSAndroid Build Coastguard Worker MaxCombinedTexImageUnitsCase::IterateResult MaxCombinedTexImageUnitsCase::iterate(void)
801*35238bceSAndroid Build Coastguard Worker {
802*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
803*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
804*35238bceSAndroid Build Coastguard Worker     int minMax;
805*35238bceSAndroid Build Coastguard Worker 
806*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
807*35238bceSAndroid Build Coastguard Worker     if (contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
808*35238bceSAndroid Build Coastguard Worker     {
809*35238bceSAndroid Build Coastguard Worker         minMax = 96;
810*35238bceSAndroid Build Coastguard Worker     }
811*35238bceSAndroid Build Coastguard Worker     else
812*35238bceSAndroid Build Coastguard Worker     {
813*35238bceSAndroid Build Coastguard Worker         if (m_context.getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader"))
814*35238bceSAndroid Build Coastguard Worker         {
815*35238bceSAndroid Build Coastguard Worker             m_testCtx.getLog()
816*35238bceSAndroid Build Coastguard Worker                 << tcu::TestLog::Message
817*35238bceSAndroid Build Coastguard Worker                 << "GL_EXT_tessellation_shader increases the minimum value of GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS to 96"
818*35238bceSAndroid Build Coastguard Worker                 << tcu::TestLog::EndMessage;
819*35238bceSAndroid Build Coastguard Worker             minMax = 96;
820*35238bceSAndroid Build Coastguard Worker         }
821*35238bceSAndroid Build Coastguard Worker         else if (m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader"))
822*35238bceSAndroid Build Coastguard Worker         {
823*35238bceSAndroid Build Coastguard Worker             m_testCtx.getLog()
824*35238bceSAndroid Build Coastguard Worker                 << tcu::TestLog::Message
825*35238bceSAndroid Build Coastguard Worker                 << "GL_EXT_geometry_shader increases the minimum value of GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS to 36"
826*35238bceSAndroid Build Coastguard Worker                 << tcu::TestLog::EndMessage;
827*35238bceSAndroid Build Coastguard Worker             minMax = 64;
828*35238bceSAndroid Build Coastguard Worker         }
829*35238bceSAndroid Build Coastguard Worker         else
830*35238bceSAndroid Build Coastguard Worker         {
831*35238bceSAndroid Build Coastguard Worker             minMax = 48;
832*35238bceSAndroid Build Coastguard Worker         }
833*35238bceSAndroid Build Coastguard Worker     }
834*35238bceSAndroid Build Coastguard Worker 
835*35238bceSAndroid Build Coastguard Worker     // range [0, inf)
836*35238bceSAndroid Build Coastguard Worker     verifyStateIntegerMin(result, gl, GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, minMax, m_verifierType);
837*35238bceSAndroid Build Coastguard Worker 
838*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
839*35238bceSAndroid Build Coastguard Worker     return STOP;
840*35238bceSAndroid Build Coastguard Worker }
841*35238bceSAndroid Build Coastguard Worker 
842*35238bceSAndroid Build Coastguard Worker } // namespace
843*35238bceSAndroid Build Coastguard Worker 
IntegerStateQueryTests(Context & context)844*35238bceSAndroid Build Coastguard Worker IntegerStateQueryTests::IntegerStateQueryTests(Context &context)
845*35238bceSAndroid Build Coastguard Worker     : TestCaseGroup(context, "integer", "Integer state query tests")
846*35238bceSAndroid Build Coastguard Worker {
847*35238bceSAndroid Build Coastguard Worker }
848*35238bceSAndroid Build Coastguard Worker 
~IntegerStateQueryTests(void)849*35238bceSAndroid Build Coastguard Worker IntegerStateQueryTests::~IntegerStateQueryTests(void)
850*35238bceSAndroid Build Coastguard Worker {
851*35238bceSAndroid Build Coastguard Worker }
852*35238bceSAndroid Build Coastguard Worker 
init(void)853*35238bceSAndroid Build Coastguard Worker void IntegerStateQueryTests::init(void)
854*35238bceSAndroid Build Coastguard Worker {
855*35238bceSAndroid Build Coastguard Worker     // Verifiers
856*35238bceSAndroid Build Coastguard Worker     const QueryType verifiers[] = {QUERY_BOOLEAN, QUERY_INTEGER, QUERY_INTEGER64, QUERY_FLOAT};
857*35238bceSAndroid Build Coastguard Worker 
858*35238bceSAndroid Build Coastguard Worker #define FOR_EACH_VERIFIER(X)                                                              \
859*35238bceSAndroid Build Coastguard Worker     for (int verifierNdx = 0; verifierNdx < DE_LENGTH_OF_ARRAY(verifiers); ++verifierNdx) \
860*35238bceSAndroid Build Coastguard Worker     {                                                                                     \
861*35238bceSAndroid Build Coastguard Worker         const char *verifierSuffix = getVerifierSuffix(verifiers[verifierNdx]);           \
862*35238bceSAndroid Build Coastguard Worker         const QueryType verifier   = verifiers[verifierNdx];                              \
863*35238bceSAndroid Build Coastguard Worker         this->addChild(X);                                                                \
864*35238bceSAndroid Build Coastguard Worker     }
865*35238bceSAndroid Build Coastguard Worker 
866*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
867*35238bceSAndroid Build Coastguard Worker         new MaxSamplesCase(m_context, (std::string() + "max_color_texture_samples_" + verifierSuffix).c_str(),
868*35238bceSAndroid Build Coastguard Worker                            "Test GL_MAX_COLOR_TEXTURE_SAMPLES", GL_MAX_COLOR_TEXTURE_SAMPLES, 1, verifier))
869*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
870*35238bceSAndroid Build Coastguard Worker         new MaxSamplesCase(m_context, (std::string() + "max_depth_texture_samples_" + verifierSuffix).c_str(),
871*35238bceSAndroid Build Coastguard Worker                            "Test GL_MAX_DEPTH_TEXTURE_SAMPLES", GL_MAX_DEPTH_TEXTURE_SAMPLES, 1, verifier))
872*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MaxSamplesCase(m_context, (std::string() + "max_integer_samples_" + verifierSuffix).c_str(),
873*35238bceSAndroid Build Coastguard Worker                                          "Test GL_MAX_INTEGER_SAMPLES", GL_MAX_INTEGER_SAMPLES, 1, verifier))
874*35238bceSAndroid Build Coastguard Worker 
875*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new TexBindingCase(
876*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "texture_binding_2d_multisample_" + verifierSuffix).c_str(),
877*35238bceSAndroid Build Coastguard Worker         "Test TEXTURE_BINDING_2D_MULTISAMPLE", GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BINDING_2D_MULTISAMPLE, verifier))
878*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new TexBindingCase(
879*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "texture_binding_2d_multisample_array_" + verifierSuffix).c_str(),
880*35238bceSAndroid Build Coastguard Worker         "Test TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY", GL_TEXTURE_2D_MULTISAMPLE_ARRAY,
881*35238bceSAndroid Build Coastguard Worker         GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY, verifier))
882*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new TexBindingCase(
883*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "texture_binding_cube_map_array_" + verifierSuffix).c_str(),
884*35238bceSAndroid Build Coastguard Worker         "Test TEXTURE_BINDING_CUBE_MAP_ARRAY", GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_BINDING_CUBE_MAP_ARRAY, verifier))
885*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
886*35238bceSAndroid Build Coastguard Worker         new TexBindingCase(m_context, (std::string() + "texture_binding_buffer_" + verifierSuffix).c_str(),
887*35238bceSAndroid Build Coastguard Worker                            "Test TEXTURE_BINDING_BUFFER", GL_TEXTURE_BUFFER, GL_TEXTURE_BINDING_BUFFER, verifier))
888*35238bceSAndroid Build Coastguard Worker 
889*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
890*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_vertex_attrib_relative_offset_" + verifierSuffix).c_str(),
891*35238bceSAndroid Build Coastguard Worker         "Test MAX_VERTEX_ATTRIB_RELATIVE_OFFSET", GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET, 2047, verifier))
892*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
893*35238bceSAndroid Build Coastguard Worker         new MinimumValueCase(m_context, (std::string() + "max_vertex_attrib_bindings_" + verifierSuffix).c_str(),
894*35238bceSAndroid Build Coastguard Worker                              "Test MAX_VERTEX_ATTRIB_BINDINGS", GL_MAX_VERTEX_ATTRIB_BINDINGS, 16, verifier))
895*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
896*35238bceSAndroid Build Coastguard Worker         new MinimumValueCase(m_context, (std::string() + "max_vertex_attrib_stride_" + verifierSuffix).c_str(),
897*35238bceSAndroid Build Coastguard Worker                              "Test MAX_VERTEX_ATTRIB_STRIDE", GL_MAX_VERTEX_ATTRIB_STRIDE, 2048, verifier))
898*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(m_context,
899*35238bceSAndroid Build Coastguard Worker                                            (std::string() + "max_sample_mask_words_" + verifierSuffix).c_str(),
900*35238bceSAndroid Build Coastguard Worker                                            "Test MAX_SAMPLE_MASK_WORDS", GL_MAX_SAMPLE_MASK_WORDS, 1, verifier))
901*35238bceSAndroid Build Coastguard Worker 
902*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new AlignmentCase(
903*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "shader_storage_buffer_offset_alignment_" + verifierSuffix).c_str(),
904*35238bceSAndroid Build Coastguard Worker         "Test SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT", GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT, 256, verifier))
905*35238bceSAndroid Build Coastguard Worker 
906*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new BufferBindingCase(
907*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "draw_indirect_buffer_binding_" + verifierSuffix).c_str(),
908*35238bceSAndroid Build Coastguard Worker         "Test DRAW_INDIRECT_BUFFER_BINDING", GL_DRAW_INDIRECT_BUFFER_BINDING, GL_DRAW_INDIRECT_BUFFER, verifier))
909*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new BufferBindingCase(
910*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "atomic_counter_buffer_binding_" + verifierSuffix).c_str(),
911*35238bceSAndroid Build Coastguard Worker         "Test ATOMIC_COUNTER_BUFFER_BINDING", GL_ATOMIC_COUNTER_BUFFER_BINDING, GL_ATOMIC_COUNTER_BUFFER, verifier))
912*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new BufferBindingCase(
913*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "shader_storage_buffer_binding_" + verifierSuffix).c_str(),
914*35238bceSAndroid Build Coastguard Worker         "Test SHADER_STORAGE_BUFFER_BINDING", GL_SHADER_STORAGE_BUFFER_BINDING, GL_SHADER_STORAGE_BUFFER, verifier))
915*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
916*35238bceSAndroid Build Coastguard Worker         new BufferBindingCase(m_context, (std::string() + "dispatch_indirect_buffer_binding_" + verifierSuffix).c_str(),
917*35238bceSAndroid Build Coastguard Worker                               "Test DISPATCH_INDIRECT_BUFFER_BINDING", GL_DISPATCH_INDIRECT_BUFFER_BINDING,
918*35238bceSAndroid Build Coastguard Worker                               GL_DISPATCH_INDIRECT_BUFFER, verifier))
919*35238bceSAndroid Build Coastguard Worker 
920*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new FramebufferMinimumValueCase(
921*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_framebuffer_width_" + verifierSuffix).c_str(), "Test MAX_FRAMEBUFFER_WIDTH",
922*35238bceSAndroid Build Coastguard Worker         GL_MAX_FRAMEBUFFER_WIDTH, 2048, GL_MAX_TEXTURE_SIZE, verifier))
923*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new FramebufferMinimumValueCase(
924*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_framebuffer_height_" + verifierSuffix).c_str(), "Test MAX_FRAMEBUFFER_HEIGHT",
925*35238bceSAndroid Build Coastguard Worker         GL_MAX_FRAMEBUFFER_HEIGHT, 2048, GL_MAX_TEXTURE_SIZE, verifier))
926*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new FramebufferMinimumValueCase(
927*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_framebuffer_samples_" + verifierSuffix).c_str(),
928*35238bceSAndroid Build Coastguard Worker         "Test MAX_FRAMEBUFFER_SAMPLES", GL_MAX_FRAMEBUFFER_SAMPLES, 4, GL_MAX_SAMPLES, verifier))
929*35238bceSAndroid Build Coastguard Worker 
930*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new ProgramPipelineBindingCase(
931*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "program_pipeline_binding_" + verifierSuffix).c_str(),
932*35238bceSAndroid Build Coastguard Worker         "Test PROGRAM_PIPELINE_BINDING", verifier))
933*35238bceSAndroid Build Coastguard Worker 
934*35238bceSAndroid Build Coastguard Worker     // vertex
935*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
936*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_vertex_atomic_counter_buffers_" + verifierSuffix).c_str(),
937*35238bceSAndroid Build Coastguard Worker         "Test MAX_VERTEX_ATOMIC_COUNTER_BUFFERS", GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS, 0, verifier))
938*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
939*35238bceSAndroid Build Coastguard Worker         new MinimumValueCase(m_context, (std::string() + "max_vertex_atomic_counters_" + verifierSuffix).c_str(),
940*35238bceSAndroid Build Coastguard Worker                              "Test MAX_VERTEX_ATOMIC_COUNTERS", GL_MAX_VERTEX_ATOMIC_COUNTERS, 0, verifier))
941*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(m_context,
942*35238bceSAndroid Build Coastguard Worker                                            (std::string() + "max_vertex_image_uniforms_" + verifierSuffix).c_str(),
943*35238bceSAndroid Build Coastguard Worker                                            "Test MAX_VERTEX_IMAGE_UNIFORMS", GL_MAX_VERTEX_IMAGE_UNIFORMS, 0, verifier))
944*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
945*35238bceSAndroid Build Coastguard Worker         new MinimumValueCase(m_context, (std::string() + "max_vertex_shader_storage_blocks_" + verifierSuffix).c_str(),
946*35238bceSAndroid Build Coastguard Worker                              "Test MAX_VERTEX_SHADER_STORAGE_BLOCKS", GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS, 0, verifier))
947*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
948*35238bceSAndroid Build Coastguard Worker         new MinimumValueCase(m_context, (std::string() + "max_vertex_uniform_components_" + verifierSuffix).c_str(),
949*35238bceSAndroid Build Coastguard Worker                              "Test MAX_VERTEX_UNIFORM_COMPONENTS", GL_MAX_VERTEX_UNIFORM_COMPONENTS, 1024, verifier))
950*35238bceSAndroid Build Coastguard Worker 
951*35238bceSAndroid Build Coastguard Worker     // fragment
952*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
953*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_fragment_atomic_counter_buffers_" + verifierSuffix).c_str(),
954*35238bceSAndroid Build Coastguard Worker         "Test MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS", GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS, 0, verifier))
955*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
956*35238bceSAndroid Build Coastguard Worker         new MinimumValueCase(m_context, (std::string() + "max_fragment_atomic_counters_" + verifierSuffix).c_str(),
957*35238bceSAndroid Build Coastguard Worker                              "Test MAX_FRAGMENT_ATOMIC_COUNTERS", GL_MAX_FRAGMENT_ATOMIC_COUNTERS, 0, verifier))
958*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
959*35238bceSAndroid Build Coastguard Worker         new MinimumValueCase(m_context, (std::string() + "max_fragment_image_uniforms_" + verifierSuffix).c_str(),
960*35238bceSAndroid Build Coastguard Worker                              "Test MAX_FRAGMENT_IMAGE_UNIFORMS", GL_MAX_FRAGMENT_IMAGE_UNIFORMS, 0, verifier))
961*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
962*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_fragment_shader_storage_blocks_" + verifierSuffix).c_str(),
963*35238bceSAndroid Build Coastguard Worker         "Test MAX_FRAGMENT_SHADER_STORAGE_BLOCKS", GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS, 0, verifier))
964*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
965*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_fragment_uniform_components_" + verifierSuffix).c_str(),
966*35238bceSAndroid Build Coastguard Worker         "Test MAX_FRAGMENT_UNIFORM_COMPONENTS", GL_MAX_FRAGMENT_UNIFORM_COMPONENTS, 1024, verifier))
967*35238bceSAndroid Build Coastguard Worker 
968*35238bceSAndroid Build Coastguard Worker     // compute
969*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
970*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_compute_work_group_invocations_" + verifierSuffix).c_str(),
971*35238bceSAndroid Build Coastguard Worker         "Test MAX_COMPUTE_WORK_GROUP_INVOCATIONS", GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS, 128, verifier))
972*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
973*35238bceSAndroid Build Coastguard Worker         new MinimumValueCase(m_context, (std::string() + "max_compute_uniform_blocks_" + verifierSuffix).c_str(),
974*35238bceSAndroid Build Coastguard Worker                              "Test MAX_COMPUTE_UNIFORM_BLOCKS", GL_MAX_COMPUTE_UNIFORM_BLOCKS, 12, verifier))
975*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
976*35238bceSAndroid Build Coastguard Worker         new MinimumValueCase(m_context, (std::string() + "max_compute_texture_image_units_" + verifierSuffix).c_str(),
977*35238bceSAndroid Build Coastguard Worker                              "Test MAX_COMPUTE_TEXTURE_IMAGE_UNITS", GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS, 16, verifier))
978*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
979*35238bceSAndroid Build Coastguard Worker         new MinimumValueCase(m_context, (std::string() + "max_compute_shared_memory_size_" + verifierSuffix).c_str(),
980*35238bceSAndroid Build Coastguard Worker                              "Test MAX_COMPUTE_SHARED_MEMORY_SIZE", GL_MAX_COMPUTE_SHARED_MEMORY_SIZE, 16384, verifier))
981*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
982*35238bceSAndroid Build Coastguard Worker         new MinimumValueCase(m_context, (std::string() + "max_compute_uniform_components_" + verifierSuffix).c_str(),
983*35238bceSAndroid Build Coastguard Worker                              "Test MAX_COMPUTE_UNIFORM_COMPONENTS", GL_MAX_COMPUTE_UNIFORM_COMPONENTS, 1024, verifier))
984*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
985*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_compute_atomic_counter_buffers_" + verifierSuffix).c_str(),
986*35238bceSAndroid Build Coastguard Worker         "Test MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS", GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS, 1, verifier))
987*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
988*35238bceSAndroid Build Coastguard Worker         new MinimumValueCase(m_context, (std::string() + "max_compute_atomic_counters_" + verifierSuffix).c_str(),
989*35238bceSAndroid Build Coastguard Worker                              "Test MAX_COMPUTE_ATOMIC_COUNTERS", GL_MAX_COMPUTE_ATOMIC_COUNTERS, 8, verifier))
990*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
991*35238bceSAndroid Build Coastguard Worker         new MinimumValueCase(m_context, (std::string() + "max_compute_image_uniforms_" + verifierSuffix).c_str(),
992*35238bceSAndroid Build Coastguard Worker                              "Test MAX_COMPUTE_IMAGE_UNIFORMS", GL_MAX_COMPUTE_IMAGE_UNIFORMS, 4, verifier))
993*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
994*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_compute_shader_storage_blocks_" + verifierSuffix).c_str(),
995*35238bceSAndroid Build Coastguard Worker         "Test MAX_COMPUTE_SHADER_STORAGE_BLOCKS", GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS, 4, verifier))
996*35238bceSAndroid Build Coastguard Worker 
997*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(m_context,
998*35238bceSAndroid Build Coastguard Worker                                            (std::string() + "max_uniform_locations_" + verifierSuffix).c_str(),
999*35238bceSAndroid Build Coastguard Worker                                            "Test MAX_UNIFORM_LOCATIONS", GL_MAX_UNIFORM_LOCATIONS, 1024, verifier))
1000*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1001*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_atomic_counter_buffer_bindings_" + verifierSuffix).c_str(),
1002*35238bceSAndroid Build Coastguard Worker         "Test MAX_ATOMIC_COUNTER_BUFFER_BINDINGS", GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, 1, verifier))
1003*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
1004*35238bceSAndroid Build Coastguard Worker         new MinimumValueCase(m_context, (std::string() + "max_atomic_counter_buffer_size_" + verifierSuffix).c_str(),
1005*35238bceSAndroid Build Coastguard Worker                              "Test MAX_ATOMIC_COUNTER_BUFFER_SIZE", GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE, 32, verifier))
1006*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1007*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_combined_atomic_counter_buffers_" + verifierSuffix).c_str(),
1008*35238bceSAndroid Build Coastguard Worker         "Test MAX_COMBINED_ATOMIC_COUNTER_BUFFERS", GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS, 1, verifier))
1009*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
1010*35238bceSAndroid Build Coastguard Worker         new MinimumValueCase(m_context, (std::string() + "max_combined_atomic_counters_" + verifierSuffix).c_str(),
1011*35238bceSAndroid Build Coastguard Worker                              "Test MAX_COMBINED_ATOMIC_COUNTERS", GL_MAX_COMBINED_ATOMIC_COUNTERS, 8, verifier))
1012*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(m_context, (std::string() + "max_image_units_" + verifierSuffix).c_str(),
1013*35238bceSAndroid Build Coastguard Worker                                            "Test MAX_IMAGE_UNITS", GL_MAX_IMAGE_UNITS, 4, verifier))
1014*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
1015*35238bceSAndroid Build Coastguard Worker         new MinimumValueCase(m_context, (std::string() + "max_combined_image_uniforms_" + verifierSuffix).c_str(),
1016*35238bceSAndroid Build Coastguard Worker                              "Test MAX_COMBINED_IMAGE_UNIFORMS", GL_MAX_COMBINED_IMAGE_UNIFORMS, 4, verifier))
1017*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1018*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_shader_storage_buffer_bindings_" + verifierSuffix).c_str(),
1019*35238bceSAndroid Build Coastguard Worker         "Test MAX_SHADER_STORAGE_BUFFER_BINDINGS", GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS, 4, verifier))
1020*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
1021*35238bceSAndroid Build Coastguard Worker         new MinimumValueCase(m_context, (std::string() + "max_shader_storage_block_size_" + verifierSuffix).c_str(),
1022*35238bceSAndroid Build Coastguard Worker                              "Test MAX_SHADER_STORAGE_BLOCK_SIZE", GL_MAX_SHADER_STORAGE_BLOCK_SIZE, 1 << 27, verifier))
1023*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1024*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_combined_shader_storage_blocks_" + verifierSuffix).c_str(),
1025*35238bceSAndroid Build Coastguard Worker         "Test MAX_COMBINED_SHADER_STORAGE_BLOCKS", GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS, 4, verifier))
1026*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1027*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_combined_shader_output_resources_" + verifierSuffix).c_str(),
1028*35238bceSAndroid Build Coastguard Worker         "Test MAX_COMBINED_SHADER_OUTPUT_RESOURCES", GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES, 4, verifier))
1029*35238bceSAndroid Build Coastguard Worker 
1030*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MaxUniformBufferBindingsCase(
1031*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_uniform_buffer_bindings_" + verifierSuffix).c_str(),
1032*35238bceSAndroid Build Coastguard Worker         "Test MAX_UNIFORM_BUFFER_BINDINGS", verifier))
1033*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MaxCombinedUniformBlocksCase(
1034*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_combined_uniform_blocks_" + verifierSuffix).c_str(),
1035*35238bceSAndroid Build Coastguard Worker         "Test MAX_COMBINED_UNIFORM_BLOCKS", verifier))
1036*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MaxCombinedTexImageUnitsCase(
1037*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_combined_texture_image_units_" + verifierSuffix).c_str(),
1038*35238bceSAndroid Build Coastguard Worker         "Test MAX_COMBINED_TEXTURE_IMAGE_UNITS", verifier))
1039*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new CombinedUniformComponentsCase(
1040*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_combined_compute_uniform_components_" + verifierSuffix).c_str(),
1041*35238bceSAndroid Build Coastguard Worker         "Test MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS", GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS, verifier))
1042*35238bceSAndroid Build Coastguard Worker 
1043*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new LegacyVectorLimitCase(
1044*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_vertex_uniform_vectors_" + verifierSuffix).c_str(),
1045*35238bceSAndroid Build Coastguard Worker         "Test MAX_VERTEX_UNIFORM_VECTORS", GL_MAX_VERTEX_UNIFORM_VECTORS, GL_MAX_VERTEX_UNIFORM_COMPONENTS, verifier))
1046*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
1047*35238bceSAndroid Build Coastguard Worker         new LegacyVectorLimitCase(m_context, (std::string() + "max_fragment_uniform_vectors_" + verifierSuffix).c_str(),
1048*35238bceSAndroid Build Coastguard Worker                                   "Test MAX_FRAGMENT_UNIFORM_VECTORS", GL_MAX_FRAGMENT_UNIFORM_VECTORS,
1049*35238bceSAndroid Build Coastguard Worker                                   GL_MAX_FRAGMENT_UNIFORM_COMPONENTS, verifier))
1050*35238bceSAndroid Build Coastguard Worker 
1051*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new TextureGatherLimitCase(
1052*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "min_program_texture_gather_offset_" + verifierSuffix).c_str(),
1053*35238bceSAndroid Build Coastguard Worker         "Test MIN_PROGRAM_TEXTURE_GATHER_OFFSET", false, verifier))
1054*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new TextureGatherLimitCase(
1055*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_program_texture_gather_offset_" + verifierSuffix).c_str(),
1056*35238bceSAndroid Build Coastguard Worker         "Test MAX_PROGRAM_TEXTURE_GATHER_OFFSET", true, verifier))
1057*35238bceSAndroid Build Coastguard Worker 
1058*35238bceSAndroid Build Coastguard Worker     // GL ES 3.2 tests
1059*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1060*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_framebuffer_layers_" + verifierSuffix).c_str(), "Test MAX_FRAMEBUFFER_LAYERS",
1061*35238bceSAndroid Build Coastguard Worker         GL_MAX_FRAMEBUFFER_LAYERS, 256, verifier, glu::ApiType::es(3, 2)))
1062*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1063*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "fragment_interpolation_offset_bits_" + verifierSuffix).c_str(),
1064*35238bceSAndroid Build Coastguard Worker         "Test FRAGMENT_INTERPOLATION_OFFSET_BITS", GL_FRAGMENT_INTERPOLATION_OFFSET_BITS, 4, verifier,
1065*35238bceSAndroid Build Coastguard Worker         glu::ApiType::es(3, 2)))
1066*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1067*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_texture_buffer_size_" + verifierSuffix).c_str(),
1068*35238bceSAndroid Build Coastguard Worker         "Test MAX_TEXTURE_BUFFER_SIZE", GL_MAX_TEXTURE_BUFFER_SIZE, 65536, verifier, glu::ApiType::es(3, 2)))
1069*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new AlignmentCase(m_context,
1070*35238bceSAndroid Build Coastguard Worker                                         (std::string() + "texture_buffer_offset_alignment_" + verifierSuffix).c_str(),
1071*35238bceSAndroid Build Coastguard Worker                                         "Test TEXTURE_BUFFER_OFFSET_ALIGNMENT", GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT, 256,
1072*35238bceSAndroid Build Coastguard Worker                                         verifier, glu::ApiType::es(3, 2)))
1073*35238bceSAndroid Build Coastguard Worker 
1074*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(m_context, (std::string() + "max_tess_gen_level_" + verifierSuffix).c_str(),
1075*35238bceSAndroid Build Coastguard Worker                                            "Test MAX_TESS_GEN_LEVEL", GL_MAX_TESS_GEN_LEVEL, 64, verifier,
1076*35238bceSAndroid Build Coastguard Worker                                            glu::ApiType::es(3, 2)))
1077*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(m_context, (std::string() + "max_patch_vertices_" + verifierSuffix).c_str(),
1078*35238bceSAndroid Build Coastguard Worker                                            "Test MAX_PATCH_VERTICES", GL_MAX_PATCH_VERTICES, 32, verifier,
1079*35238bceSAndroid Build Coastguard Worker                                            glu::ApiType::es(3, 2)))
1080*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1081*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_tess_patch_components_" + verifierSuffix).c_str(),
1082*35238bceSAndroid Build Coastguard Worker         "Test MAX_TESS_PATCH_COMPONENTS", GL_MAX_TESS_PATCH_COMPONENTS, 120, verifier, glu::ApiType::es(3, 2)))
1083*35238bceSAndroid Build Coastguard Worker 
1084*35238bceSAndroid Build Coastguard Worker     // tess control
1085*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1086*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_tess_control_uniform_components_" + verifierSuffix).c_str(),
1087*35238bceSAndroid Build Coastguard Worker         "Test MAX_TESS_CONTROL_UNIFORM_COMPONENTS", GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS, 1024, verifier,
1088*35238bceSAndroid Build Coastguard Worker         glu::ApiType::es(3, 2)))
1089*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1090*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_tess_control_texture_image_units_" + verifierSuffix).c_str(),
1091*35238bceSAndroid Build Coastguard Worker         "Test MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS", GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS, 16, verifier,
1092*35238bceSAndroid Build Coastguard Worker         glu::ApiType::es(3, 2)))
1093*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1094*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_tess_control_output_components_" + verifierSuffix).c_str(),
1095*35238bceSAndroid Build Coastguard Worker         "Test MAX_TESS_CONTROL_OUTPUT_COMPONENTS", GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS, 64, verifier,
1096*35238bceSAndroid Build Coastguard Worker         glu::ApiType::es(3, 2)))
1097*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1098*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_tess_control_total_output_components_" + verifierSuffix).c_str(),
1099*35238bceSAndroid Build Coastguard Worker         "Test MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS", GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS, 2048, verifier,
1100*35238bceSAndroid Build Coastguard Worker         glu::ApiType::es(3, 2)))
1101*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
1102*35238bceSAndroid Build Coastguard Worker         new MinimumValueCase(m_context, (std::string() + "max_tess_control_input_components_" + verifierSuffix).c_str(),
1103*35238bceSAndroid Build Coastguard Worker                              "Test MAX_TESS_CONTROL_INPUT_COMPONENTS", GL_MAX_TESS_CONTROL_INPUT_COMPONENTS, 64,
1104*35238bceSAndroid Build Coastguard Worker                              verifier, glu::ApiType::es(3, 2)))
1105*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
1106*35238bceSAndroid Build Coastguard Worker         new MinimumValueCase(m_context, (std::string() + "max_tess_control_uniform_blocks_" + verifierSuffix).c_str(),
1107*35238bceSAndroid Build Coastguard Worker                              "Test MAX_TESS_CONTROL_UNIFORM_BLOCKS", GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS, 12, verifier,
1108*35238bceSAndroid Build Coastguard Worker                              glu::ApiType::es(3, 2)))
1109*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1110*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_tess_control_atomic_counter_buffers_" + verifierSuffix).c_str(),
1111*35238bceSAndroid Build Coastguard Worker         "Test MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS", GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS, 0, verifier,
1112*35238bceSAndroid Build Coastguard Worker         glu::ApiType::es(3, 2)))
1113*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
1114*35238bceSAndroid Build Coastguard Worker         new MinimumValueCase(m_context, (std::string() + "max_tess_control_atomic_counters_" + verifierSuffix).c_str(),
1115*35238bceSAndroid Build Coastguard Worker                              "Test MAX_TESS_CONTROL_ATOMIC_COUNTERS", GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS, 0, verifier,
1116*35238bceSAndroid Build Coastguard Worker                              glu::ApiType::es(3, 2)))
1117*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1118*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_tess_control_shader_storage_blocks_" + verifierSuffix).c_str(),
1119*35238bceSAndroid Build Coastguard Worker         "Test MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS", GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS, 0, verifier,
1120*35238bceSAndroid Build Coastguard Worker         glu::ApiType::es(3, 2)))
1121*35238bceSAndroid Build Coastguard Worker 
1122*35238bceSAndroid Build Coastguard Worker     // tess evaluation
1123*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1124*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_tess_evaluation_uniform_components_" + verifierSuffix).c_str(),
1125*35238bceSAndroid Build Coastguard Worker         "Test MAX_TESS_EVALUATION_UNIFORM_COMPONENTS", GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS, 1024, verifier,
1126*35238bceSAndroid Build Coastguard Worker         glu::ApiType::es(3, 2)))
1127*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1128*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_tess_evaluation_texture_image_units_" + verifierSuffix).c_str(),
1129*35238bceSAndroid Build Coastguard Worker         "Test MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS", GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS, 16, verifier,
1130*35238bceSAndroid Build Coastguard Worker         glu::ApiType::es(3, 2)))
1131*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1132*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_tess_evaluation_output_components_" + verifierSuffix).c_str(),
1133*35238bceSAndroid Build Coastguard Worker         "Test MAX_TESS_EVALUATION_OUTPUT_COMPONENTS", GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS, 64, verifier,
1134*35238bceSAndroid Build Coastguard Worker         glu::ApiType::es(3, 2)))
1135*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1136*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_tess_evaluation_input_components_" + verifierSuffix).c_str(),
1137*35238bceSAndroid Build Coastguard Worker         "Test MAX_TESS_EVALUATION_INPUT_COMPONENTS", GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS, 64, verifier,
1138*35238bceSAndroid Build Coastguard Worker         glu::ApiType::es(3, 2)))
1139*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1140*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_tess_evaluation_uniform_blocks_" + verifierSuffix).c_str(),
1141*35238bceSAndroid Build Coastguard Worker         "Test MAX_TESS_EVALUATION_UNIFORM_BLOCKS", GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS, 12, verifier,
1142*35238bceSAndroid Build Coastguard Worker         glu::ApiType::es(3, 2)))
1143*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1144*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_tess_evaluation_atomic_counter_buffers_" + verifierSuffix).c_str(),
1145*35238bceSAndroid Build Coastguard Worker         "Test MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS", GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS, 0, verifier,
1146*35238bceSAndroid Build Coastguard Worker         glu::ApiType::es(3, 2)))
1147*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1148*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_tess_evaluation_atomic_counters_" + verifierSuffix).c_str(),
1149*35238bceSAndroid Build Coastguard Worker         "Test MAX_TESS_EVALUATION_ATOMIC_COUNTERS", GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS, 0, verifier,
1150*35238bceSAndroid Build Coastguard Worker         glu::ApiType::es(3, 2)))
1151*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1152*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_tess_evaluation_shader_storage_blocks_" + verifierSuffix).c_str(),
1153*35238bceSAndroid Build Coastguard Worker         "Test MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS", GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS, 0, verifier,
1154*35238bceSAndroid Build Coastguard Worker         glu::ApiType::es(3, 2)))
1155*35238bceSAndroid Build Coastguard Worker 
1156*35238bceSAndroid Build Coastguard Worker     // geometry
1157*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
1158*35238bceSAndroid Build Coastguard Worker         new MinimumValueCase(m_context, (std::string() + "max_geometry_uniform_components_" + verifierSuffix).c_str(),
1159*35238bceSAndroid Build Coastguard Worker                              "Test MAX_GEOMETRY_UNIFORM_COMPONENTS", GL_MAX_GEOMETRY_UNIFORM_COMPONENTS, 1024, verifier,
1160*35238bceSAndroid Build Coastguard Worker                              glu::ApiType::es(3, 2)))
1161*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1162*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_geometry_uniform_blocks_" + verifierSuffix).c_str(),
1163*35238bceSAndroid Build Coastguard Worker         "Test MAX_GEOMETRY_UNIFORM_BLOCKS", GL_MAX_GEOMETRY_UNIFORM_BLOCKS, 12, verifier, glu::ApiType::es(3, 2)))
1164*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1165*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_geometry_input_components_" + verifierSuffix).c_str(),
1166*35238bceSAndroid Build Coastguard Worker         "Test MAX_GEOMETRY_INPUT_COMPONENTS", GL_MAX_GEOMETRY_INPUT_COMPONENTS, 64, verifier, glu::ApiType::es(3, 2)))
1167*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1168*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_geometry_output_components_" + verifierSuffix).c_str(),
1169*35238bceSAndroid Build Coastguard Worker         "Test MAX_GEOMETRY_OUTPUT_COMPONENTS", GL_MAX_GEOMETRY_OUTPUT_COMPONENTS, 64, verifier, glu::ApiType::es(3, 2)))
1170*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1171*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_geometry_output_vertices_" + verifierSuffix).c_str(),
1172*35238bceSAndroid Build Coastguard Worker         "Test MAX_GEOMETRY_OUTPUT_VERTICES", GL_MAX_GEOMETRY_OUTPUT_VERTICES, 256, verifier, glu::ApiType::es(3, 2)))
1173*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1174*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_geometry_total_output_components_" + verifierSuffix).c_str(),
1175*35238bceSAndroid Build Coastguard Worker         "Test MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS", GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS, 1024, verifier,
1176*35238bceSAndroid Build Coastguard Worker         glu::ApiType::es(3, 2)))
1177*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
1178*35238bceSAndroid Build Coastguard Worker         new MinimumValueCase(m_context, (std::string() + "max_geometry_texture_image_units_" + verifierSuffix).c_str(),
1179*35238bceSAndroid Build Coastguard Worker                              "Test MAX_GEOMETRY_TEXTURE_IMAGE_UNITS", GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS, 16, verifier,
1180*35238bceSAndroid Build Coastguard Worker                              glu::ApiType::es(3, 2)))
1181*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
1182*35238bceSAndroid Build Coastguard Worker         new MinimumValueCase(m_context, (std::string() + "max_geometry_shader_invocations_" + verifierSuffix).c_str(),
1183*35238bceSAndroid Build Coastguard Worker                              "Test MAX_GEOMETRY_SHADER_INVOCATIONS", GL_MAX_GEOMETRY_SHADER_INVOCATIONS, 32, verifier,
1184*35238bceSAndroid Build Coastguard Worker                              glu::ApiType::es(3, 2)))
1185*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1186*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_geometry_atomic_counter_buffers_" + verifierSuffix).c_str(),
1187*35238bceSAndroid Build Coastguard Worker         "Test MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS", GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS, 0, verifier,
1188*35238bceSAndroid Build Coastguard Worker         glu::ApiType::es(3, 2)))
1189*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1190*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_geometry_atomic_counters_" + verifierSuffix).c_str(),
1191*35238bceSAndroid Build Coastguard Worker         "Test MAX_GEOMETRY_ATOMIC_COUNTERS", GL_MAX_GEOMETRY_ATOMIC_COUNTERS, 0, verifier, glu::ApiType::es(3, 2)))
1192*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1193*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_geometry_shader_storage_blocks_" + verifierSuffix).c_str(),
1194*35238bceSAndroid Build Coastguard Worker         "Test MAX_GEOMETRY_SHADER_STORAGE_BLOCKS", GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS, 0, verifier,
1195*35238bceSAndroid Build Coastguard Worker         glu::ApiType::es(3, 2)))
1196*35238bceSAndroid Build Coastguard Worker 
1197*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
1198*35238bceSAndroid Build Coastguard Worker         new MinimumValueCase(m_context, (std::string() + "max_tess_control_image_uniforms_" + verifierSuffix).c_str(),
1199*35238bceSAndroid Build Coastguard Worker                              "Test MAX_TESS_CONTROL_IMAGE_UNIFORMS", GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS, 0, verifier,
1200*35238bceSAndroid Build Coastguard Worker                              glu::ApiType::es(3, 2)))
1201*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1202*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_tess_evaluation_image_uniforms_" + verifierSuffix).c_str(),
1203*35238bceSAndroid Build Coastguard Worker         "Test MAX_TESS_EVALUATION_IMAGE_UNIFORMS", GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS, 0, verifier,
1204*35238bceSAndroid Build Coastguard Worker         glu::ApiType::es(3, 2)))
1205*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1206*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_geometry_image_uniforms_" + verifierSuffix).c_str(),
1207*35238bceSAndroid Build Coastguard Worker         "Test MAX_GEOMETRY_IMAGE_UNIFORMS", GL_MAX_GEOMETRY_IMAGE_UNIFORMS, 0, verifier, glu::ApiType::es(3, 2)))
1208*35238bceSAndroid Build Coastguard Worker 
1209*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1210*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "debug_logged_messages_" + verifierSuffix).c_str(), "Test DEBUG_LOGGED_MESSAGES",
1211*35238bceSAndroid Build Coastguard Worker         GL_DEBUG_LOGGED_MESSAGES, 0, verifier, glu::ApiType::es(3, 2)))
1212*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
1213*35238bceSAndroid Build Coastguard Worker         new MinimumValueCase(m_context, (std::string() + "debug_next_logged_message_length_" + verifierSuffix).c_str(),
1214*35238bceSAndroid Build Coastguard Worker                              "Test DEBUG_NEXT_LOGGED_MESSAGE_LENGTH", GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH, 0, verifier,
1215*35238bceSAndroid Build Coastguard Worker                              glu::ApiType::es(3, 2)))
1216*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1217*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "debug_group_stack_depth_" + verifierSuffix).c_str(),
1218*35238bceSAndroid Build Coastguard Worker         "Test DEBUG_GROUP_STACK_DEPTH", GL_DEBUG_GROUP_STACK_DEPTH, 0, verifier, glu::ApiType::es(3, 2)))
1219*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1220*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_debug_message_length_" + verifierSuffix).c_str(),
1221*35238bceSAndroid Build Coastguard Worker         "Test MAX_DEBUG_MESSAGE_LENGTH", GL_MAX_DEBUG_MESSAGE_LENGTH, 1, verifier, glu::ApiType::es(3, 2)))
1222*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1223*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_debug_logged_messages_" + verifierSuffix).c_str(),
1224*35238bceSAndroid Build Coastguard Worker         "Test MAX_DEBUG_LOGGED_MESSAGES", GL_MAX_DEBUG_LOGGED_MESSAGES, 1, verifier, glu::ApiType::es(3, 2)))
1225*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1226*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_debug_group_stack_depth_" + verifierSuffix).c_str(),
1227*35238bceSAndroid Build Coastguard Worker         "Test MAX_DEBUG_GROUP_STACK_DEPTH", GL_MAX_DEBUG_GROUP_STACK_DEPTH, 64, verifier, glu::ApiType::es(3, 2)))
1228*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(m_context, (std::string() + "max_label_length_" + verifierSuffix).c_str(),
1229*35238bceSAndroid Build Coastguard Worker                                            "Test MAX_LABEL_LENGTH", GL_MAX_LABEL_LENGTH, 256, verifier,
1230*35238bceSAndroid Build Coastguard Worker                                            glu::ApiType::es(3, 2)))
1231*35238bceSAndroid Build Coastguard Worker 
1232*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new MinimumValueCase(
1233*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "texture_buffer_binding_" + verifierSuffix).c_str(), "Test TEXTURE_BUFFER_BINDING",
1234*35238bceSAndroid Build Coastguard Worker         GL_TEXTURE_BUFFER_BINDING, 0, verifier, glu::ApiType::es(3, 2)))
1235*35238bceSAndroid Build Coastguard Worker 
1236*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new CombinedUniformComponentsCase(
1237*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_combined_tess_control_uniform_components_" + verifierSuffix).c_str(),
1238*35238bceSAndroid Build Coastguard Worker         "Test MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS", GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS, verifier,
1239*35238bceSAndroid Build Coastguard Worker         glu::ApiType::es(3, 2)))
1240*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new CombinedUniformComponentsCase(
1241*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_combined_tess_evaluation_uniform_components_" + verifierSuffix).c_str(),
1242*35238bceSAndroid Build Coastguard Worker         "Test MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS", GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS,
1243*35238bceSAndroid Build Coastguard Worker         verifier, glu::ApiType::es(3, 2)))
1244*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new CombinedUniformComponentsCase(
1245*35238bceSAndroid Build Coastguard Worker         m_context, (std::string() + "max_combined_geometry_uniform_components_" + verifierSuffix).c_str(),
1246*35238bceSAndroid Build Coastguard Worker         "Test MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS", GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS, verifier,
1247*35238bceSAndroid Build Coastguard Worker         glu::ApiType::es(3, 2)))
1248*35238bceSAndroid Build Coastguard Worker 
1249*35238bceSAndroid Build Coastguard Worker #undef FOR_EACH_VERIFIER
1250*35238bceSAndroid Build Coastguard Worker }
1251*35238bceSAndroid Build Coastguard Worker 
1252*35238bceSAndroid Build Coastguard Worker } // namespace Functional
1253*35238bceSAndroid Build Coastguard Worker } // namespace gles31
1254*35238bceSAndroid Build Coastguard Worker } // namespace deqp
1255