xref: /aosp_15_r20/external/deqp/modules/gles3/functional/es3fSamplerObjectTests.cpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1 /*-------------------------------------------------------------------------
2  * drawElements Quality Program OpenGL ES 3.0 Module
3  * -------------------------------------------------
4  *
5  * Copyright 2014 The Android Open Source Project
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  *//*!
20  * \file
21  * \brief Sampler object tests.
22  *//*--------------------------------------------------------------------*/
23 #include "es3fSamplerObjectTests.hpp"
24 
25 #include "glsSamplerObjectTest.hpp"
26 
27 #include "tcuTexture.hpp"
28 #include "tcuSurface.hpp"
29 #include "tcuTextureUtil.hpp"
30 #include "tcuImageCompare.hpp"
31 #include "tcuTestLog.hpp"
32 #include "tcuRGBA.hpp"
33 #include "tcuRenderTarget.hpp"
34 
35 #include "gluShaderProgram.hpp"
36 #include "gluPixelTransfer.hpp"
37 #include "gluRenderContext.hpp"
38 
39 #include "deRandom.hpp"
40 #include "deString.h"
41 
42 #include "glwEnums.hpp"
43 
44 namespace deqp
45 {
46 namespace gles3
47 {
48 namespace Functional
49 {
50 
SamplerObjectTests(Context & context)51 SamplerObjectTests::SamplerObjectTests(Context &context) : TestCaseGroup(context, "samplers", "Texture sampler tests")
52 {
53 }
54 
~SamplerObjectTests(void)55 SamplerObjectTests::~SamplerObjectTests(void)
56 {
57 }
58 
init(void)59 void SamplerObjectTests::init(void)
60 {
61     gls::TextureSamplerTest::TestSpec simpleTestCases[] = {
62         {"diff_wrap_t",
63          "Different GL_TEXTURE_WRAP_T",
64          GL_TEXTURE_2D,
65          {GL_NEAREST, GL_NEAREST, GL_MIRRORED_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
66          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
67         {"diff_wrap_s",
68          "Different GL_TEXTURE_WRAP_S",
69          GL_TEXTURE_2D,
70          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_MIRRORED_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
71          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
72         {"diff_wrap_r",
73          "Different GL_TEXTURE_WRAP_R",
74          GL_TEXTURE_2D,
75          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_MIRRORED_REPEAT, -1000.0f, 1000.0f},
76          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
77         {"diff_min_filter",
78          "Different GL_TEXTURE_MIN_FILTER",
79          GL_TEXTURE_2D,
80          {GL_LINEAR, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
81          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
82         {"diff_mag_filter",
83          "Different GL_TEXTURE_MAG_FILTER",
84          GL_TEXTURE_2D,
85          {GL_NEAREST, GL_LINEAR, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
86          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
87         {"diff_max_lod",
88          "Different GL_TEXTURE_MAX_LOD",
89          GL_TEXTURE_2D,
90          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
91          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, -999.0f}},
92         {"diff_min_lod",
93          "Different GL_TEXTURE_MIN_LOD",
94          GL_TEXTURE_2D,
95          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 0.0f, 1000.0f},
96          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 100.0f, 1000.0f}}};
97 
98     TestCaseGroup *simpleTexture2D = new TestCaseGroup(m_context, "single_tex_2d", "Simple 2D texture with sampler");
99 
100     for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(simpleTestCases); testNdx++)
101         simpleTexture2D->addChild(
102             new gls::TextureSamplerTest(m_testCtx, m_context.getRenderContext(), simpleTestCases[testNdx]));
103 
104     addChild(simpleTexture2D);
105 
106     gls::MultiTextureSamplerTest::TestSpec multiTestCases[] = {
107         {"diff_wrap_t",
108          "Different GL_TEXTURE_WRAP_T",
109          GL_TEXTURE_2D,
110          {GL_NEAREST, GL_NEAREST, GL_MIRRORED_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
111          {GL_NEAREST, GL_NEAREST, GL_MIRRORED_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
112          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
113         {"diff_wrap_s",
114          "Different GL_TEXTURE_WRAP_S",
115          GL_TEXTURE_2D,
116          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_MIRRORED_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
117          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_MIRRORED_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
118          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
119         {"diff_wrap_r",
120          "Different GL_TEXTURE_WRAP_R",
121          GL_TEXTURE_2D,
122          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_MIRRORED_REPEAT, -1000.0f, 1000.0f},
123          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_MIRRORED_REPEAT, -1000.0f, 1000.0f},
124          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
125         {"diff_min_filter",
126          "Different GL_TEXTURE_MIN_FILTER",
127          GL_TEXTURE_2D,
128          {GL_LINEAR, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
129          {GL_LINEAR, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
130          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
131         {"diff_mag_filter",
132          "Different GL_TEXTURE_MAG_FILTER",
133          GL_TEXTURE_2D,
134          {GL_NEAREST, GL_LINEAR, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
135          {GL_NEAREST, GL_LINEAR, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
136          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
137         {"diff_max_lod",
138          "Different GL_TEXTURE_MAX_LOD",
139          GL_TEXTURE_2D,
140          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
141          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
142          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, -999.0f}},
143         {"diff_min_lod",
144          "Different GL_TEXTURE_MIN_LOD",
145          GL_TEXTURE_2D,
146          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 0.0f, 1000.0f},
147          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 0.0f, 1000.0f},
148          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 100.0f, 1000.0f}}};
149 
150     TestCaseGroup *multiTexture2D =
151         new TestCaseGroup(m_context, "multi_tex_2d", "Multiple texture units 2D texture with sampler");
152 
153     for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(multiTestCases); testNdx++)
154         multiTexture2D->addChild(
155             new gls::MultiTextureSamplerTest(m_testCtx, m_context.getRenderContext(), multiTestCases[testNdx]));
156 
157     addChild(multiTexture2D);
158 
159     gls::TextureSamplerTest::TestSpec simpleTestCases3D[] = {
160         {"diff_wrap_t",
161          "Different GL_TEXTURE_WRAP_T",
162          GL_TEXTURE_3D,
163          {GL_NEAREST, GL_NEAREST, GL_MIRRORED_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
164          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
165         {"diff_wrap_s",
166          "Different GL_TEXTURE_WRAP_S",
167          GL_TEXTURE_3D,
168          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_MIRRORED_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
169          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
170         {"diff_wrap_r",
171          "Different GL_TEXTURE_WRAP_R",
172          GL_TEXTURE_3D,
173          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_MIRRORED_REPEAT, -1000.0f, 1000.0f},
174          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
175         {"diff_min_filter",
176          "Different GL_TEXTURE_MIN_FILTER",
177          GL_TEXTURE_3D,
178          {GL_LINEAR, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
179          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
180         {"diff_mag_filter",
181          "Different GL_TEXTURE_MAG_FILTER",
182          GL_TEXTURE_3D,
183          {GL_NEAREST, GL_LINEAR, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
184          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
185         {"diff_max_lod",
186          "Different GL_TEXTURE_MAX_LOD",
187          GL_TEXTURE_3D,
188          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
189          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, -999.0f}},
190         {"diff_min_lod",
191          "Different GL_TEXTURE_MIN_LOD",
192          GL_TEXTURE_3D,
193          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 0.0f, 1000.0f},
194          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 100.0f, 1000.0f}}};
195 
196     TestCaseGroup *simpleTexture3D = new TestCaseGroup(m_context, "single_tex_3d", "Simple 3D texture with sampler");
197 
198     for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(simpleTestCases3D); testNdx++)
199         simpleTexture3D->addChild(
200             new gls::TextureSamplerTest(m_testCtx, m_context.getRenderContext(), simpleTestCases3D[testNdx]));
201 
202     addChild(simpleTexture3D);
203 
204     gls::MultiTextureSamplerTest::TestSpec multiTestCases3D[] = {
205         {"diff_wrap_t",
206          "Different GL_TEXTURE_WRAP_T",
207          GL_TEXTURE_3D,
208          {GL_NEAREST, GL_NEAREST, GL_MIRRORED_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
209          {GL_NEAREST, GL_NEAREST, GL_MIRRORED_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
210          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
211         {"diff_wrap_s",
212          "Different GL_TEXTURE_WRAP_S",
213          GL_TEXTURE_3D,
214          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_MIRRORED_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
215          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_MIRRORED_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
216          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
217         {"diff_wrap_r",
218          "Different GL_TEXTURE_WRAP_R",
219          GL_TEXTURE_3D,
220          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_MIRRORED_REPEAT, -1000.0f, 1000.0f},
221          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_MIRRORED_REPEAT, -1000.0f, 1000.0f},
222          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
223         {"diff_min_filter",
224          "Different GL_TEXTURE_MIN_FILTER",
225          GL_TEXTURE_3D,
226          {GL_LINEAR, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
227          {GL_LINEAR, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
228          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
229         {"diff_mag_filter",
230          "Different GL_TEXTURE_MAG_FILTER",
231          GL_TEXTURE_3D,
232          {GL_NEAREST, GL_LINEAR, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
233          {GL_NEAREST, GL_LINEAR, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
234          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
235         {"diff_max_lod",
236          "Different GL_TEXTURE_MAX_LOD",
237          GL_TEXTURE_3D,
238          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
239          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
240          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, -999.0f}},
241         {"diff_min_lod",
242          "Different GL_TEXTURE_MIN_LOD",
243          GL_TEXTURE_3D,
244          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 0.0f, 1000.0f},
245          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 0.0f, 1000.0f},
246          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 100.0f, 1000.0f}}};
247 
248     TestCaseGroup *multiTexture3D =
249         new TestCaseGroup(m_context, "multi_tex_3d", "Multiple texture units 3D texture with sampler");
250 
251     for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(multiTestCases3D); testNdx++)
252         multiTexture3D->addChild(
253             new gls::MultiTextureSamplerTest(m_testCtx, m_context.getRenderContext(), multiTestCases3D[testNdx]));
254 
255     addChild(multiTexture3D);
256 
257     gls::TextureSamplerTest::TestSpec simpleTestCasesCube[] = {
258         {"diff_wrap_t",
259          "Different GL_TEXTURE_WRAP_T",
260          GL_TEXTURE_CUBE_MAP,
261          {GL_NEAREST, GL_NEAREST, GL_MIRRORED_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
262          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
263         {"diff_wrap_s",
264          "Different GL_TEXTURE_WRAP_S",
265          GL_TEXTURE_CUBE_MAP,
266          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_MIRRORED_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
267          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
268         {"diff_wrap_r",
269          "Different GL_TEXTURE_WRAP_R",
270          GL_TEXTURE_CUBE_MAP,
271          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_MIRRORED_REPEAT, -1000.0f, 1000.0f},
272          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
273         {"diff_min_filter",
274          "Different GL_TEXTURE_MIN_FILTER",
275          GL_TEXTURE_CUBE_MAP,
276          {GL_LINEAR, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
277          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
278         {"diff_mag_filter",
279          "Different GL_TEXTURE_MAG_FILTER",
280          GL_TEXTURE_CUBE_MAP,
281          {GL_NEAREST, GL_LINEAR, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
282          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
283         {"diff_max_lod",
284          "Different GL_TEXTURE_MAX_LOD",
285          GL_TEXTURE_CUBE_MAP,
286          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
287          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, -999.0f}},
288         {"diff_min_lod",
289          "Different GL_TEXTURE_MIN_LOD",
290          GL_TEXTURE_CUBE_MAP,
291          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 0.0f, 1000.0f},
292          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 100.0f, 1000.0f}}};
293 
294     TestCaseGroup *simpleTextureCube =
295         new TestCaseGroup(m_context, "single_cubemap", "Simple cubemap texture with sampler");
296 
297     for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(simpleTestCasesCube); testNdx++)
298         simpleTextureCube->addChild(
299             new gls::TextureSamplerTest(m_testCtx, m_context.getRenderContext(), simpleTestCasesCube[testNdx]));
300 
301     addChild(simpleTextureCube);
302 
303     gls::MultiTextureSamplerTest::TestSpec multiTestCasesCube[] = {
304         {"diff_wrap_t",
305          "Different GL_TEXTURE_WRAP_T",
306          GL_TEXTURE_CUBE_MAP,
307          {GL_NEAREST, GL_NEAREST, GL_MIRRORED_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
308          {GL_NEAREST, GL_NEAREST, GL_MIRRORED_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
309          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
310         {"diff_wrap_s",
311          "Different GL_TEXTURE_WRAP_S",
312          GL_TEXTURE_CUBE_MAP,
313          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_MIRRORED_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
314          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_MIRRORED_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
315          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
316         {"diff_wrap_r",
317          "Different GL_TEXTURE_WRAP_R",
318          GL_TEXTURE_CUBE_MAP,
319          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_MIRRORED_REPEAT, -1000.0f, 1000.0f},
320          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_MIRRORED_REPEAT, -1000.0f, 1000.0f},
321          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
322         {"diff_min_filter",
323          "Different GL_TEXTURE_MIN_FILTER",
324          GL_TEXTURE_CUBE_MAP,
325          {GL_LINEAR, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
326          {GL_LINEAR, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
327          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
328         {"diff_mag_filter",
329          "Different GL_TEXTURE_MAG_FILTER",
330          GL_TEXTURE_CUBE_MAP,
331          {GL_NEAREST, GL_LINEAR, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
332          {GL_NEAREST, GL_LINEAR, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
333          {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f}},
334         {"diff_max_lod",
335          "Different GL_TEXTURE_MAX_LOD",
336          GL_TEXTURE_CUBE_MAP,
337          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
338          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f},
339          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, -999.0f}},
340         {"diff_min_lod",
341          "Different GL_TEXTURE_MIN_LOD",
342          GL_TEXTURE_CUBE_MAP,
343          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 0.0f, 1000.0f},
344          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 0.0f, 1000.0f},
345          {GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 100.0f, 1000.0f}}};
346 
347     TestCaseGroup *multiTextureCube =
348         new TestCaseGroup(m_context, "multi_cubemap", "Multiple texture units cubemap textures with sampler");
349 
350     for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(multiTestCasesCube); testNdx++)
351         multiTextureCube->addChild(
352             new gls::MultiTextureSamplerTest(m_testCtx, m_context.getRenderContext(), multiTestCasesCube[testNdx]));
353 
354     addChild(multiTextureCube);
355 }
356 
357 } // namespace Functional
358 } // namespace gles3
359 } // namespace deqp
360