am ea702448: am d38c14ba: am 75e63782: am 523bdab6: am 4667bcc1: am f55476d8: Remove...
[platform/upstream/VK-GL-CTS.git] / modules / gles3 / functional / es3fSamplerObjectTests.cpp
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
51 SamplerObjectTests::SamplerObjectTests (Context& context)
52         : TestCaseGroup(context, "samplers", "Texture sampler tests")
53 {
54 }
55
56 SamplerObjectTests::~SamplerObjectTests (void)
57 {
58 }
59
60 void SamplerObjectTests::init (void)
61 {
62         gls::TextureSamplerTest::TestSpec simpleTestCases[] = {
63                 { "diff_wrap_t", "Different GL_TEXTURE_WRAP_T", GL_TEXTURE_2D,
64                                 { GL_NEAREST, GL_NEAREST, GL_MIRRORED_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
65                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
66                 },
67                 { "diff_wrap_s", "Different GL_TEXTURE_WRAP_S", GL_TEXTURE_2D,
68                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_MIRRORED_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
69                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
70                 },
71                 { "diff_wrap_r", "Different GL_TEXTURE_WRAP_R", GL_TEXTURE_2D,
72                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_MIRRORED_REPEAT, -1000.0f, 1000.0f },
73                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
74                 },
75                 { "diff_min_filter", "Different GL_TEXTURE_MIN_FILTER", GL_TEXTURE_2D,
76                                 { GL_LINEAR, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
77                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
78                 },
79                 { "diff_mag_filter", "Different GL_TEXTURE_MAG_FILTER", GL_TEXTURE_2D,
80                                 { GL_NEAREST, GL_LINEAR, 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                 },
83                 { "diff_max_lod", "Different GL_TEXTURE_MAX_LOD", GL_TEXTURE_2D,
84                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
85                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, -999.0f }
86                 },
87                 { "diff_min_lod", "Different GL_TEXTURE_MIN_LOD", GL_TEXTURE_2D,
88                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 0.0f, 1000.0f },
89                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 100.0f, 1000.0f }
90                 }
91         };
92
93         TestCaseGroup* simpleTexture2D = new TestCaseGroup(m_context, "single_tex_2d", "Simple 2D texture with sampler");
94
95         for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(simpleTestCases); testNdx++)
96                 simpleTexture2D->addChild(new gls::TextureSamplerTest(m_testCtx, m_context.getRenderContext(), simpleTestCases[testNdx]));
97
98         addChild(simpleTexture2D);
99
100         gls::MultiTextureSamplerTest::TestSpec multiTestCases[] = {
101                 { "diff_wrap_t", "Different GL_TEXTURE_WRAP_T", GL_TEXTURE_2D,
102                                 { GL_NEAREST, GL_NEAREST, GL_MIRRORED_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
103                                 { GL_NEAREST, GL_NEAREST, GL_MIRRORED_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
104                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
105                 },
106                 { "diff_wrap_s", "Different GL_TEXTURE_WRAP_S", GL_TEXTURE_2D,
107                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_MIRRORED_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
108                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_MIRRORED_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
109                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
110                 },
111                 { "diff_wrap_r", "Different GL_TEXTURE_WRAP_R", GL_TEXTURE_2D,
112                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_MIRRORED_REPEAT, -1000.0f, 1000.0f },
113                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_MIRRORED_REPEAT, -1000.0f, 1000.0f },
114                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
115                 },
116                 { "diff_min_filter", "Different GL_TEXTURE_MIN_FILTER", GL_TEXTURE_2D,
117                                 { GL_LINEAR, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
118                                 { GL_LINEAR, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
119                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
120                 },
121                 { "diff_mag_filter", "Different GL_TEXTURE_MAG_FILTER", GL_TEXTURE_2D,
122                                 { GL_NEAREST, GL_LINEAR, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
123                                 { GL_NEAREST, GL_LINEAR, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
124                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
125                 },
126                 { "diff_max_lod", "Different GL_TEXTURE_MAX_LOD", GL_TEXTURE_2D,
127                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
128                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
129                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, -999.0f }
130                 },
131                 { "diff_min_lod", "Different GL_TEXTURE_MIN_LOD", GL_TEXTURE_2D,
132                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 0.0f, 1000.0f },
133                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 0.0f, 1000.0f },
134                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 100.0f, 1000.0f }
135                 }
136         };
137
138         TestCaseGroup* multiTexture2D = new TestCaseGroup(m_context, "multi_tex_2d", "Multiple texture units 2D texture with sampler");
139
140         for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(multiTestCases); testNdx++)
141                 multiTexture2D->addChild(new gls::MultiTextureSamplerTest(m_testCtx, m_context.getRenderContext(), multiTestCases[testNdx]));
142
143         addChild(multiTexture2D);
144
145         gls::TextureSamplerTest::TestSpec simpleTestCases3D[] = {
146                 { "diff_wrap_t", "Different GL_TEXTURE_WRAP_T", GL_TEXTURE_3D,
147                                 { GL_NEAREST, GL_NEAREST, GL_MIRRORED_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
148                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
149                 },
150                 { "diff_wrap_s", "Different GL_TEXTURE_WRAP_S", GL_TEXTURE_3D,
151                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_MIRRORED_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
152                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
153                 },
154                 { "diff_wrap_r", "Different GL_TEXTURE_WRAP_R", GL_TEXTURE_3D,
155                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_MIRRORED_REPEAT, -1000.0f, 1000.0f },
156                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
157                 },
158                 { "diff_min_filter", "Different GL_TEXTURE_MIN_FILTER", GL_TEXTURE_3D,
159                                 { GL_LINEAR, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
160                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
161                 },
162                 { "diff_mag_filter", "Different GL_TEXTURE_MAG_FILTER", GL_TEXTURE_3D,
163                                 { GL_NEAREST, GL_LINEAR, GL_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                 },
166                 { "diff_max_lod", "Different GL_TEXTURE_MAX_LOD", GL_TEXTURE_3D,
167                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
168                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, -999.0f }
169                 },
170                 { "diff_min_lod", "Different GL_TEXTURE_MIN_LOD", GL_TEXTURE_3D,
171                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 0.0f, 1000.0f },
172                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 100.0f, 1000.0f }
173                 }
174         };
175
176         TestCaseGroup* simpleTexture3D = new TestCaseGroup(m_context, "single_tex_3d", "Simple 3D texture with sampler");
177
178         for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(simpleTestCases3D); testNdx++)
179                 simpleTexture3D->addChild(new gls::TextureSamplerTest(m_testCtx, m_context.getRenderContext(), simpleTestCases3D[testNdx]));
180
181         addChild(simpleTexture3D);
182
183         gls::MultiTextureSamplerTest::TestSpec multiTestCases3D[] = {
184                 { "diff_wrap_t", "Different GL_TEXTURE_WRAP_T", GL_TEXTURE_3D,
185                                 { GL_NEAREST, GL_NEAREST, GL_MIRRORED_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
186                                 { GL_NEAREST, GL_NEAREST, GL_MIRRORED_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
187                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
188                 },
189                 { "diff_wrap_s", "Different GL_TEXTURE_WRAP_S", GL_TEXTURE_3D,
190                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_MIRRORED_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
191                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_MIRRORED_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
192                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
193                 },
194                 { "diff_wrap_r", "Different GL_TEXTURE_WRAP_R", GL_TEXTURE_3D,
195                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_MIRRORED_REPEAT, -1000.0f, 1000.0f },
196                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_MIRRORED_REPEAT, -1000.0f, 1000.0f },
197                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
198                 },
199                 { "diff_min_filter", "Different GL_TEXTURE_MIN_FILTER", GL_TEXTURE_3D,
200                                 { GL_LINEAR, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
201                                 { GL_LINEAR, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
202                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
203                 },
204                 { "diff_mag_filter", "Different GL_TEXTURE_MAG_FILTER", GL_TEXTURE_3D,
205                                 { GL_NEAREST, GL_LINEAR, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
206                                 { GL_NEAREST, GL_LINEAR, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
207                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
208                 },
209                 { "diff_max_lod", "Different GL_TEXTURE_MAX_LOD", GL_TEXTURE_3D,
210                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
211                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
212                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, -999.0f }
213                 },
214                 { "diff_min_lod", "Different GL_TEXTURE_MIN_LOD", GL_TEXTURE_3D,
215                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 0.0f, 1000.0f },
216                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 0.0f, 1000.0f },
217                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 100.0f, 1000.0f }
218                 }
219         };
220
221         TestCaseGroup* multiTexture3D = new TestCaseGroup(m_context, "multi_tex_3d", "Multiple texture units 3D texture with sampler");
222
223         for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(multiTestCases3D); testNdx++)
224                 multiTexture3D->addChild(new gls::MultiTextureSamplerTest(m_testCtx, m_context.getRenderContext(), multiTestCases3D[testNdx]));
225
226         addChild(multiTexture3D);
227
228         gls::TextureSamplerTest::TestSpec simpleTestCasesCube[] = {
229                 { "diff_wrap_t", "Different GL_TEXTURE_WRAP_T", GL_TEXTURE_CUBE_MAP,
230                                 { GL_NEAREST, GL_NEAREST, GL_MIRRORED_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
231                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
232                 },
233                 { "diff_wrap_s", "Different GL_TEXTURE_WRAP_S", GL_TEXTURE_CUBE_MAP,
234                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_MIRRORED_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
235                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
236                 },
237                 { "diff_wrap_r", "Different GL_TEXTURE_WRAP_R", GL_TEXTURE_CUBE_MAP,
238                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_MIRRORED_REPEAT, -1000.0f, 1000.0f },
239                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
240                 },
241                 { "diff_min_filter", "Different GL_TEXTURE_MIN_FILTER", GL_TEXTURE_CUBE_MAP,
242                                 { GL_LINEAR, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
243                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
244                 },
245                 { "diff_mag_filter", "Different GL_TEXTURE_MAG_FILTER", GL_TEXTURE_CUBE_MAP,
246                                 { GL_NEAREST, GL_LINEAR, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
247                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
248                 },
249                 { "diff_max_lod", "Different GL_TEXTURE_MAX_LOD", GL_TEXTURE_CUBE_MAP,
250                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
251                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, -999.0f }
252                 },
253                 { "diff_min_lod", "Different GL_TEXTURE_MIN_LOD", GL_TEXTURE_CUBE_MAP,
254                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 0.0f, 1000.0f },
255                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 100.0f, 1000.0f }
256                 }
257         };
258
259         TestCaseGroup* simpleTextureCube = new TestCaseGroup(m_context, "single_cubemap", "Simple cubemap texture with sampler");
260
261         for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(simpleTestCasesCube); testNdx++)
262                 simpleTextureCube->addChild(new gls::TextureSamplerTest(m_testCtx, m_context.getRenderContext(), simpleTestCasesCube[testNdx]));
263
264         addChild(simpleTextureCube);
265
266         gls::MultiTextureSamplerTest::TestSpec multiTestCasesCube[] = {
267                 { "diff_wrap_t", "Different GL_TEXTURE_WRAP_T", GL_TEXTURE_CUBE_MAP,
268                                 { GL_NEAREST, GL_NEAREST, GL_MIRRORED_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
269                                 { GL_NEAREST, GL_NEAREST, GL_MIRRORED_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
270                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
271                 },
272                 { "diff_wrap_s", "Different GL_TEXTURE_WRAP_S", GL_TEXTURE_CUBE_MAP,
273                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_MIRRORED_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
274                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_MIRRORED_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
275                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
276                 },
277                 { "diff_wrap_r", "Different GL_TEXTURE_WRAP_R", GL_TEXTURE_CUBE_MAP,
278                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_MIRRORED_REPEAT, -1000.0f, 1000.0f },
279                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_MIRRORED_REPEAT, -1000.0f, 1000.0f },
280                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
281                 },
282                 { "diff_min_filter", "Different GL_TEXTURE_MIN_FILTER", GL_TEXTURE_CUBE_MAP,
283                                 { GL_LINEAR, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
284                                 { GL_LINEAR, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
285                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
286                 },
287                 { "diff_mag_filter", "Different GL_TEXTURE_MAG_FILTER", GL_TEXTURE_CUBE_MAP,
288                                 { GL_NEAREST, GL_LINEAR, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
289                                 { GL_NEAREST, GL_LINEAR, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
290                                 { GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f }
291                 },
292                 { "diff_max_lod", "Different GL_TEXTURE_MAX_LOD", GL_TEXTURE_CUBE_MAP,
293                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
294                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, 1000.0f },
295                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, -1000.0f, -999.0f }
296                 },
297                 { "diff_min_lod", "Different GL_TEXTURE_MIN_LOD", GL_TEXTURE_CUBE_MAP,
298                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 0.0f, 1000.0f },
299                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 0.0f, 1000.0f },
300                                 { GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT, GL_REPEAT, 100.0f, 1000.0f }
301                 }
302         };
303
304         TestCaseGroup* multiTextureCube = new TestCaseGroup(m_context, "multi_cubemap", "Multiple texture units cubemap textures with sampler");
305
306         for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(multiTestCasesCube); testNdx++)
307                 multiTextureCube->addChild(new gls::MultiTextureSamplerTest(m_testCtx, m_context.getRenderContext(), multiTestCasesCube[testNdx]));
308
309         addChild(multiTextureCube);
310 }
311
312 } // Functional
313 } // gles3
314 } // deqp