Merge vk-gl-cts/vulkan-cts-1.0.2 into vk-gl-cts/vulkan-cts-1.1.0
[platform/upstream/VK-GL-CTS.git] / modules / gles31 / functional / es31fFunctionalTests.cpp
1 /*-------------------------------------------------------------------------
2  * drawElements Quality Program OpenGL ES 3.1 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 Functional Tests.
22  *//*--------------------------------------------------------------------*/
23
24 #include "es31fFunctionalTests.hpp"
25
26 #include "glsShaderLibrary.hpp"
27 #include "es31fBasicComputeShaderTests.hpp"
28 #include "es31fComputeShaderBuiltinVarTests.hpp"
29 #include "es31fDrawTests.hpp"
30 #include "es31fShaderSharedVarTests.hpp"
31 #include "es31fAtomicCounterTests.hpp"
32 #include "es31fShaderAtomicOpTests.hpp"
33 #include "es31fShaderImageLoadStoreTests.hpp"
34 #include "es31fTessellationTests.hpp"
35 #include "es31fSSBOLayoutTests.hpp"
36 #include "es31fSSBOArrayLengthTests.hpp"
37 #include "es31fShaderCommonFunctionTests.hpp"
38 #include "es31fShaderPackingFunctionTests.hpp"
39 #include "es31fShaderIntegerFunctionTests.hpp"
40 #include "es31fStencilTexturingTests.hpp"
41 #include "es31fShaderTextureSizeTests.hpp"
42 #include "es31fShaderStateQueryTests.hpp"
43 #include "es31fLayoutBindingTests.hpp"
44 #include "es31fTextureLevelStateQueryTests.hpp"
45 #include "es31fIntegerStateQueryTests.hpp"
46 #include "es31fInternalFormatQueryTests.hpp"
47 #include "es31fBooleanStateQueryTests.hpp"
48 #include "es31fIndexedStateQueryTests.hpp"
49 #include "es31fTextureStateQueryTests.hpp"
50 #include "es31fFramebufferDefaultStateQueryTests.hpp"
51 #include "es31fProgramPipelineStateQueryTests.hpp"
52 #include "es31fProgramStateQueryTests.hpp"
53 #include "es31fSamplerStateQueryTests.hpp"
54 #include "es31fTextureFilteringTests.hpp"
55 #include "es31fTextureFormatTests.hpp"
56 #include "es31fTextureSpecificationTests.hpp"
57 #include "es31fTextureMultisampleTests.hpp"
58 #include "es31fMultisampleTests.hpp"
59 #include "es31fSynchronizationTests.hpp"
60 #include "es31fGeometryShaderTests.hpp"
61 #include "es31fSampleShadingTests.hpp"
62 #include "es31fSampleVariableTests.hpp"
63 #include "es31fIndirectComputeDispatchTests.hpp"
64 #include "es31fVertexAttributeBindingTests.hpp"
65 #include "es31fVertexAttributeBindingStateQueryTests.hpp"
66 #include "es31fShaderMultisampleInterpolationTests.hpp"
67 #include "es31fShaderMultisampleInterpolationStateQueryTests.hpp"
68 #include "es31fProgramUniformTests.hpp"
69 #include "es31fOpaqueTypeIndexingTests.hpp"
70 #include "es31fAdvancedBlendTests.hpp"
71 #include "es31fSeparateShaderTests.hpp"
72 #include "es31fUniformLocationTests.hpp"
73 #include "es31fBuiltinPrecisionTests.hpp"
74 #include "es31fTessellationGeometryInteractionTests.hpp"
75 #include "es31fUniformBlockTests.hpp"
76 #include "es31fDebugTests.hpp"
77 #include "es31fFboColorbufferTests.hpp"
78 #include "es31fFboNoAttachmentTests.hpp"
79 #include "es31fFboSRGBWriteControlTests.hpp"
80 #include "es31fProgramInterfaceQueryTests.hpp"
81 #include "es31fTextureGatherTests.hpp"
82 #include "es31fTextureFormatTests.hpp"
83 #include "es31fTextureBufferTests.hpp"
84 #include "es31fTextureBorderClampTests.hpp"
85 #include "es31fShaderBuiltinConstantTests.hpp"
86 #include "es31fShaderHelperInvocationTests.hpp"
87 #include "es31fPrimitiveBoundingBoxTests.hpp"
88 #include "es31fAndroidExtensionPackES31ATests.hpp"
89 #include "es31fCopyImageTests.hpp"
90 #include "es31fDrawBuffersIndexedTests.hpp"
91 #include "es31fDefaultVertexArrayObjectTests.hpp"
92 #include "es31fSRGBDecodeTests.hpp"
93 #include "es31fDrawElementsBaseVertexTests.hpp"
94 #include "es31fShaderFramebufferFetchTests.hpp"
95
96 namespace deqp
97 {
98 namespace gles31
99 {
100 namespace Functional
101 {
102
103 class ShaderLibraryTest : public TestCaseGroup
104 {
105 public:
106         ShaderLibraryTest (Context& context, const char* filename, const char* name, const char* description)
107                 : TestCaseGroup (context, name, description)
108                 , m_filename    (filename)
109         {
110         }
111
112         void init (void)
113         {
114                 gls::ShaderLibrary                      shaderLibrary(m_testCtx, m_context.getRenderContext(), m_context.getContextInfo());
115                 std::string                                     fileName        = m_filename;
116                 std::vector<tcu::TestNode*>     children        = shaderLibrary.loadShaderFile(fileName.c_str());
117
118                 for (int i = 0; i < (int)children.size(); i++)
119                         addChild(children[i]);
120         }
121
122 private:
123         const std::string m_filename;
124 };
125
126 class ShaderLibraryGroup : public TestCaseGroup
127 {
128 public:
129         struct File
130         {
131                 const char*             fileName;
132                 const char*             testName;
133                 const char*             description;
134         };
135
136         ShaderLibraryGroup (Context& context, const char* name, const char* description, int numFiles, const File* files)
137                 : TestCaseGroup (context, name, description)
138                 , m_numFiles    (numFiles)
139                 , m_files               (files)
140         {}
141
142         void init (void)
143         {
144                 for (int ndx = 0; ndx < m_numFiles; ++ndx)
145                         addChild(new ShaderLibraryTest(m_context, m_files[ndx].fileName, m_files[ndx].testName, m_files[ndx].description));
146         }
147
148 private:
149         const int                       m_numFiles;
150         const File* const       m_files;
151 };
152
153 class ShaderBuiltinVarTests : public TestCaseGroup
154 {
155 public:
156         ShaderBuiltinVarTests (Context& context)
157                 : TestCaseGroup(context, "builtin_var", "Shader Built-in Variable Tests")
158         {
159         }
160
161         void init (void)
162         {
163                 addChild(new ComputeShaderBuiltinVarTests(m_context));
164         }
165 };
166
167 class ShaderBuiltinFunctionTests : public TestCaseGroup
168 {
169 public:
170         ShaderBuiltinFunctionTests (Context& context)
171                 : TestCaseGroup(context, "builtin_functions", "Built-in Function Tests")
172         {
173         }
174
175         void init (void)
176         {
177                 addChild(new ShaderCommonFunctionTests  (m_context));
178                 addChild(new ShaderPackingFunctionTests (m_context));
179                 addChild(new ShaderIntegerFunctionTests (m_context));
180                 addChild(new ShaderTextureSizeTests             (m_context));
181                 addChild(createBuiltinPrecisionTests    (m_context));
182         }
183 };
184
185 class ShaderLinkageTests : public TestCaseGroup
186 {
187 public:
188         ShaderLinkageTests (Context& context)
189                 : TestCaseGroup(context,  "linkage", "Linkage Tests")
190         {
191         }
192
193         void init (void)
194         {
195                 static const ShaderLibraryGroup::File   s_filesES31[]   =
196                 {
197                         { "shaders/es31/linkage_geometry.test",                                 "geometry",                                     "Geometry shader"                                       },
198                         { "shaders/es31/linkage_tessellation.test",                             "tessellation",                         "Tessellation shader"                           },
199                         { "shaders/es31/linkage_tessellation_geometry.test",    "tessellation_geometry",        "Tessellation and geometry shader"      },
200                         { "shaders/es31/linkage_shader_storage_block.test",             "shader_storage_block",         "Shader storage blocks"                         },
201                         { "shaders/es31/linkage_io_block.test",                                 "io_block",                                     "Shader io blocks"                                      },
202                         { "shaders/es31/linkage_uniform.test",                                  "uniform",                                      "Uniform linkage"                                       },
203                 };
204                 static const ShaderLibraryGroup::File   s_filesES32[]   =
205                 {
206                         { "shaders/es32/linkage_geometry.test",                                 "geometry",                                     "Geometry shader"                                       },
207                         { "shaders/es32/linkage_tessellation.test",                             "tessellation",                         "Tessellation shader"                           },
208                         { "shaders/es32/linkage_tessellation_geometry.test",    "tessellation_geometry",        "Tessellation and geometry shader"      },
209                         { "shaders/es32/linkage_shader_storage_block.test",             "shader_storage_block",         "Shader storage blocks"                         },
210                         { "shaders/es32/linkage_io_block.test",                                 "io_block",                                     "Shader io blocks"                                      },
211                         { "shaders/es32/linkage_uniform.test",                                  "uniform",                                      "Uniform linkage"                                       },
212                 };
213
214                 addChild(new ShaderLibraryGroup(m_context,      "es31",         "GLSL ES 3.1 Linkage",  DE_LENGTH_OF_ARRAY(s_filesES31), s_filesES31));
215                 addChild(new ShaderLibraryGroup(m_context,      "es32",         "GLSL ES 3.2 Linkage",  DE_LENGTH_OF_ARRAY(s_filesES32), s_filesES32));
216         }
217 };
218
219 class ShaderTests : public TestCaseGroup
220 {
221 public:
222         ShaderTests (Context& context)
223                 : TestCaseGroup(context, "shaders", "Shading Language Tests")
224         {
225         }
226
227         void init (void)
228         {
229                 addChild(new ShaderBuiltinVarTests                              (m_context));
230                 addChild(new ShaderBuiltinFunctionTests                 (m_context));
231                 addChild(new SampleVariableTests                                (m_context));
232                 addChild(new ShaderMultisampleInterpolationTests(m_context));
233                 addChild(new OpaqueTypeIndexingTests                    (m_context));
234
235                 {
236                         static const ShaderLibraryGroup::File s_functionFiles[] =
237                         {
238                                 { "shaders/es31/functions.test",        "es31",         "GLSL ES 3.1 Function Tests"    },
239                                 { "shaders/es32/functions.test",        "es32",         "GLSL ES 3.2 Function Tests"    },
240                         };
241                         addChild(new ShaderLibraryGroup(m_context, "functions", "Function Tests", DE_LENGTH_OF_ARRAY(s_functionFiles), s_functionFiles));
242                 }
243
244                 {
245                         static const ShaderLibraryGroup::File s_arraysFiles[] =
246                         {
247                                 { "shaders/es31/arrays.test",   "es31",         "GLSL ES 3.1 Array Tests"       },
248                                 { "shaders/es32/arrays.test",   "es32",         "GLSL ES 3.2 Array Tests"       },
249                         };
250                         addChild(new ShaderLibraryGroup(m_context, "arrays", "Array Tests", DE_LENGTH_OF_ARRAY(s_arraysFiles), s_arraysFiles));
251                 }
252
253                 {
254                         static const ShaderLibraryGroup::File s_arraysOfArraysFiles[] =
255                         {
256                                 { "shaders/es31/arrays_of_arrays.test",         "es31",         "GLSL ES 3.1 Arrays of Arrays Tests"    },
257                                 { "shaders/es32/arrays_of_arrays.test",         "es32",         "GLSL ES 3.2 Arrays of Arrays Tests"    },
258                         };
259                         addChild(new ShaderLibraryGroup(m_context, "arrays_of_arrays", "Arrays of Arras Tests", DE_LENGTH_OF_ARRAY(s_arraysOfArraysFiles), s_arraysOfArraysFiles));
260                 }
261
262                 addChild(new ShaderLinkageTests                                 (m_context));
263                 addChild(new ShaderBuiltinConstantTests                 (m_context));
264                 addChild(new ShaderHelperInvocationTests                (m_context));
265
266                 {
267                         static const ShaderLibraryGroup::File s_implicitConversionsFiles[] =
268                         {
269                                 { "shaders/es31/implicit_conversions.test",             "es31",         "GLSL ES 3.1 GL_EXT_shader_implicit_conversions Tests"  },
270                                 { "shaders/es32/implicit_conversions.test",             "es32",         "GLSL ES 3.2 GL_EXT_shader_implicit_conversions Tests"  },
271                         };
272                         addChild(new ShaderLibraryGroup(m_context, "implicit_conversions", "GL_EXT_shader_implicit_conversions Tests", DE_LENGTH_OF_ARRAY(s_implicitConversionsFiles), s_implicitConversionsFiles));
273                 }
274
275                 {
276                         static const ShaderLibraryGroup::File s_uniformBlockFiles[] =
277                         {
278                                 { "shaders/es31/uniform_block.test",    "es31",         "GLSL ES 3.1 Uniform block tests"       },
279                                 { "shaders/es32/uniform_block.test",    "es32",         "GLSL ES 3.2 Uniform block tests"       },
280                         };
281                         addChild(new ShaderLibraryGroup(m_context, "uniform_block", "Uniform block tests", DE_LENGTH_OF_ARRAY(s_uniformBlockFiles), s_uniformBlockFiles));
282                 }
283
284                 addChild(new ShaderFramebufferFetchTests                (m_context));
285         }
286 };
287
288 class ComputeTests : public TestCaseGroup
289 {
290 public:
291         ComputeTests (Context& context)
292                 : TestCaseGroup(context, "compute", "Compute Shader Tests")
293         {
294         }
295
296         void init (void)
297         {
298                 addChild(new BasicComputeShaderTests            (m_context));
299                 addChild(new ShaderSharedVarTests                       (m_context));
300                 addChild(new IndirectComputeDispatchTests       (m_context));
301         }
302 };
303
304 class SSBOTests : public TestCaseGroup
305 {
306 public:
307         SSBOTests (Context& context)
308                 : TestCaseGroup(context, "ssbo", "Shader Storage Buffer Object Tests")
309         {
310         }
311
312         void init (void)
313         {
314                 addChild(new SSBOLayoutTests                    (m_context));
315                 addChild(new ShaderAtomicOpTests                (m_context, "atomic", ATOMIC_OPERAND_BUFFER_VARIABLE));
316                 addChild(new SSBOArrayLengthTests               (m_context));
317         }
318 };
319
320 class TextureTests : public TestCaseGroup
321 {
322 public:
323         TextureTests (Context& context)
324                 : TestCaseGroup(context, "texture", "Texture tests")
325         {
326         }
327
328         void init (void)
329         {
330                 addChild(new TextureFilteringTests              (m_context));
331                 addChild(new TextureFormatTests                 (m_context));
332                 addChild(new TextureSpecificationTests  (m_context));
333                 addChild(new TextureMultisampleTests    (m_context));
334                 addChild(new TextureGatherTests                 (m_context));
335                 addChild(createTextureBufferTests               (m_context));
336                 addChild(new TextureBorderClampTests    (m_context));
337         }
338 };
339
340 class StateQueryTests : public TestCaseGroup
341 {
342 public:
343         StateQueryTests (Context& context)
344                 : TestCaseGroup(context, "state_query", "State query tests")
345         {
346         }
347
348         void init (void)
349         {
350                 addChild(new BooleanStateQueryTests                                                     (m_context));
351                 addChild(new IntegerStateQueryTests                                                     (m_context));
352                 addChild(new IndexedStateQueryTests                                                     (m_context));
353                 addChild(new TextureStateQueryTests                                                     (m_context));
354                 addChild(new TextureLevelStateQueryTests                                        (m_context));
355                 addChild(new SamplerStateQueryTests                                                     (m_context));
356                 addChild(new ShaderStateQueryTests                                                      (m_context));
357                 addChild(new InternalFormatQueryTests                                           (m_context));
358                 addChild(new VertexAttributeBindingStateQueryTests                      (m_context));
359                 addChild(new ShaderMultisampleInterpolationStateQueryTests      (m_context));
360                 addChild(new FramebufferDefaultStateQueryTests                          (m_context));
361                 addChild(new ProgramStateQueryTests                                                     (m_context));
362                 addChild(new ProgramPipelineStateQueryTests                                     (m_context));
363         }
364 };
365
366 class FboTests : public TestCaseGroup
367 {
368 public:
369         FboTests (Context& context)
370                 : TestCaseGroup(context, "fbo", "Framebuffer Object Tests")
371         {
372         }
373
374         void init (void)
375         {
376                 addChild(new FboColorTests                                              (m_context));
377                 addChild(createFboNoAttachmentTests                             (m_context));
378                 addChild(createFboNoAttachmentCompletenessTests (m_context));
379                 addChild(new FboSRGBWriteControlTests                   (m_context));
380         }
381 };
382
383 class SRGBTextureDecodeTests : public TestCaseGroup
384 {
385 public:
386         SRGBTextureDecodeTests (Context& context)
387                 : TestCaseGroup (context, "srgb_texture_decode", "GL_EXT_texture_sRGB_decode tests")
388         {
389         }
390
391         void init (void)
392         {
393                 addChild(new SRGBDecodeTests    (m_context));
394         }
395 };
396
397 FunctionalTests::FunctionalTests (Context& context)
398         : TestCaseGroup(context, "functional", "Functionality Tests")
399 {
400 }
401
402 FunctionalTests::~FunctionalTests (void)
403 {
404 }
405
406 void FunctionalTests::init (void)
407 {
408         addChild(new ShaderTests                                                        (m_context));
409         addChild(new ComputeTests                                                       (m_context));
410         addChild(new DrawTests                                                          (m_context));
411         addChild(new TessellationTests                                          (m_context));
412         addChild(new SSBOTests                                                          (m_context));
413         addChild(new UniformBlockTests                                          (m_context));
414         addChild(new ShaderImageLoadStoreTests                          (m_context));
415         addChild(new AtomicCounterTests                                         (m_context));
416         addChild(new StencilTexturingTests                                      (m_context));
417         addChild(new TextureTests                                                       (m_context));
418         addChild(new StateQueryTests                                            (m_context));
419         addChild(new MultisampleTests                                           (m_context));
420         addChild(new SynchronizationTests                                       (m_context));
421         addChild(new GeometryShaderTests                                        (m_context));
422         addChild(new SampleShadingTests                                         (m_context));
423         addChild(new VertexAttributeBindingTests                        (m_context));
424         addChild(new ProgramUniformTests                                        (m_context));
425         addChild(new AdvancedBlendTests                                         (m_context));
426         addChild(createSeparateShaderTests                                      (m_context));
427         addChild(new UniformLocationTests                                       (m_context));
428         addChild(new TessellationGeometryInteractionTests       (m_context));
429         addChild(new DebugTests                                                         (m_context));
430         addChild(new FboTests                                                           (m_context));
431         addChild(new ProgramInterfaceQueryTests                         (m_context));
432         addChild(new LayoutBindingTests                                         (m_context));
433         addChild(new PrimitiveBoundingBoxTests                          (m_context));
434         addChild(new AndroidExtensionPackES31ATests                     (m_context));
435         addChild(createCopyImageTests                                           (m_context));
436         addChild(createDrawBuffersIndexedTests                          (m_context));
437         addChild(new DefaultVertexArrayObjectTests                      (m_context));
438         addChild(new SRGBTextureDecodeTests                                     (m_context));
439         addChild(new DrawElementsBaseVertexTests                        (m_context));
440 }
441
442 } // Functional
443 } // gles31
444 } // deqp