1617a3babSopenharmony_ci//
2617a3babSopenharmony_ci// Copyright (C) 2016 Google, Inc.
3617a3babSopenharmony_ci//
4617a3babSopenharmony_ci// All rights reserved.
5617a3babSopenharmony_ci//
6617a3babSopenharmony_ci// Redistribution and use in source and binary forms, with or without
7617a3babSopenharmony_ci// modification, are permitted provided that the following conditions
8617a3babSopenharmony_ci// are met:
9617a3babSopenharmony_ci//
10617a3babSopenharmony_ci//    Redistributions of source code must retain the above copyright
11617a3babSopenharmony_ci//    notice, this list of conditions and the following disclaimer.
12617a3babSopenharmony_ci//
13617a3babSopenharmony_ci//    Redistributions in binary form must reproduce the above
14617a3babSopenharmony_ci//    copyright notice, this list of conditions and the following
15617a3babSopenharmony_ci//    disclaimer in the documentation and/or other materials provided
16617a3babSopenharmony_ci//    with the distribution.
17617a3babSopenharmony_ci//
18617a3babSopenharmony_ci//    Neither the name of Google Inc. nor the names of its
19617a3babSopenharmony_ci//    contributors may be used to endorse or promote products derived
20617a3babSopenharmony_ci//    from this software without specific prior written permission.
21617a3babSopenharmony_ci//
22617a3babSopenharmony_ci// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23617a3babSopenharmony_ci// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24617a3babSopenharmony_ci// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25617a3babSopenharmony_ci// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26617a3babSopenharmony_ci// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27617a3babSopenharmony_ci// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28617a3babSopenharmony_ci// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29617a3babSopenharmony_ci// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30617a3babSopenharmony_ci// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31617a3babSopenharmony_ci// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32617a3babSopenharmony_ci// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33617a3babSopenharmony_ci// POSSIBILITY OF SUCH DAMAGE.
34617a3babSopenharmony_ci
35617a3babSopenharmony_ci#include <gtest/gtest.h>
36617a3babSopenharmony_ci
37617a3babSopenharmony_ci#include "TestFixture.h"
38617a3babSopenharmony_ci
39617a3babSopenharmony_cinamespace glslangtest {
40617a3babSopenharmony_cinamespace {
41617a3babSopenharmony_ci
42617a3babSopenharmony_ciusing CompileToAstTest = GlslangTest<::testing::TestWithParam<std::string>>;
43617a3babSopenharmony_ci
44617a3babSopenharmony_ciusing CompileToAstTestNV = GlslangTest<::testing::TestWithParam<std::string>>;
45617a3babSopenharmony_ci
46617a3babSopenharmony_ciTEST_P(CompileToAstTest, FromFile)
47617a3babSopenharmony_ci{
48617a3babSopenharmony_ci    loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
49617a3babSopenharmony_ci                            Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
50617a3babSopenharmony_ci                            Target::AST);
51617a3babSopenharmony_ci}
52617a3babSopenharmony_ci
53617a3babSopenharmony_ci// Compiling GLSL to SPIR-V under OpenGL semantics (NV extensions enabled).
54617a3babSopenharmony_ciTEST_P(CompileToAstTestNV, FromFile)
55617a3babSopenharmony_ci{
56617a3babSopenharmony_ci    loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
57617a3babSopenharmony_ci                            Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
58617a3babSopenharmony_ci                            Target::AST);
59617a3babSopenharmony_ci}
60617a3babSopenharmony_ci
61617a3babSopenharmony_ci// clang-format off
62617a3babSopenharmony_ciINSTANTIATE_TEST_SUITE_P(
63617a3babSopenharmony_ci    Glsl, CompileToAstTest,
64617a3babSopenharmony_ci    ::testing::ValuesIn(std::vector<std::string>({
65617a3babSopenharmony_ci        "sample.frag",
66617a3babSopenharmony_ci        "sample.vert",
67617a3babSopenharmony_ci        "decls.frag",
68617a3babSopenharmony_ci        "specExamples.frag",
69617a3babSopenharmony_ci        "specExamples.vert",
70617a3babSopenharmony_ci        "versionsClean.frag",
71617a3babSopenharmony_ci        "versionsClean.vert",
72617a3babSopenharmony_ci        "versionsErrors.frag",
73617a3babSopenharmony_ci        "versionsErrors.vert",
74617a3babSopenharmony_ci        "100.frag",
75617a3babSopenharmony_ci        "100samplerExternal.frag",
76617a3babSopenharmony_ci        "120.vert",
77617a3babSopenharmony_ci        "120.frag",
78617a3babSopenharmony_ci        "130.vert",
79617a3babSopenharmony_ci        "130.frag",
80617a3babSopenharmony_ci        "140.vert",
81617a3babSopenharmony_ci        "140.frag",
82617a3babSopenharmony_ci        "150.vert",
83617a3babSopenharmony_ci        "150.geom",
84617a3babSopenharmony_ci        "150.frag",
85617a3babSopenharmony_ci        "precision.frag",
86617a3babSopenharmony_ci        "precision.vert",
87617a3babSopenharmony_ci        "nonSquare.vert",
88617a3babSopenharmony_ci        "matrixError.vert",
89617a3babSopenharmony_ci        "cppSimple.vert",
90617a3babSopenharmony_ci        "cppIndent.vert",
91617a3babSopenharmony_ci        "cppIntMinOverNegativeOne.frag",
92617a3babSopenharmony_ci        "cppMerge.frag",
93617a3babSopenharmony_ci        "cppNest.vert",
94617a3babSopenharmony_ci        "cppBad.vert",
95617a3babSopenharmony_ci        "cppBad2.vert",
96617a3babSopenharmony_ci        "cppBad3.vert",
97617a3babSopenharmony_ci        "cppBad4.vert",
98617a3babSopenharmony_ci        "cppBad5.vert",
99617a3babSopenharmony_ci        "cppComplexExpr.vert",
100617a3babSopenharmony_ci        "cppDeepNest.frag",
101617a3babSopenharmony_ci        "cppPassMacroName.frag",
102617a3babSopenharmony_ci        "cppRelaxSkipTokensErrors.vert",
103617a3babSopenharmony_ci        "badChars.frag",
104617a3babSopenharmony_ci        "pointCoord.frag",
105617a3babSopenharmony_ci        "array.frag",
106617a3babSopenharmony_ci        "array100.frag",
107617a3babSopenharmony_ci        "comment.frag",
108617a3babSopenharmony_ci        "300.vert",
109617a3babSopenharmony_ci        "300.frag",
110617a3babSopenharmony_ci        "300BuiltIns.frag",
111617a3babSopenharmony_ci        "300layout.vert",
112617a3babSopenharmony_ci        "300layout.frag",
113617a3babSopenharmony_ci        "300operations.frag",
114617a3babSopenharmony_ci        "300block.frag",
115617a3babSopenharmony_ci        "300samplerExternal.frag",
116617a3babSopenharmony_ci        "300samplerExternalYUV.frag",
117617a3babSopenharmony_ci        "310.comp",
118617a3babSopenharmony_ci        "310.vert",
119617a3babSopenharmony_ci        "310.geom",
120617a3babSopenharmony_ci        "310.frag",
121617a3babSopenharmony_ci        "310.tesc",
122617a3babSopenharmony_ci        "310.tese",
123617a3babSopenharmony_ci        "310implicitSizeArrayError.vert",
124617a3babSopenharmony_ci        "310.inheritMemory.frag",
125617a3babSopenharmony_ci        "310AofA.vert",
126617a3babSopenharmony_ci        "310runtimeArray.vert",
127617a3babSopenharmony_ci        "320.comp",
128617a3babSopenharmony_ci        "320.vert",
129617a3babSopenharmony_ci        "320.geom",
130617a3babSopenharmony_ci        "320.frag",
131617a3babSopenharmony_ci        "320.tesc",
132617a3babSopenharmony_ci        "320.tese",
133617a3babSopenharmony_ci        "330.frag",
134617a3babSopenharmony_ci        "330comp.frag",
135617a3babSopenharmony_ci        "constErrors.frag",
136617a3babSopenharmony_ci        "constFold.frag",
137617a3babSopenharmony_ci        "constFoldIntMin.frag",
138617a3babSopenharmony_ci        "errors.frag",
139617a3babSopenharmony_ci        "forwardRef.frag",
140617a3babSopenharmony_ci        "uint.frag",
141617a3babSopenharmony_ci        "switch.frag",
142617a3babSopenharmony_ci        "tokenLength.vert",
143617a3babSopenharmony_ci        "100Limits.vert",
144617a3babSopenharmony_ci        "100scope.vert",
145617a3babSopenharmony_ci        "110scope.vert",
146617a3babSopenharmony_ci        "300scope.vert",
147617a3babSopenharmony_ci        "400.frag",
148617a3babSopenharmony_ci        "400.vert",
149617a3babSopenharmony_ci        "410.vert",
150617a3babSopenharmony_ci        "420.comp",
151617a3babSopenharmony_ci        "420.frag",
152617a3babSopenharmony_ci        "420.vert",
153617a3babSopenharmony_ci        "420.geom",
154617a3babSopenharmony_ci        "420_size_gl_in.geom",
155617a3babSopenharmony_ci        "430scope.vert",
156617a3babSopenharmony_ci        "lineContinuation100.vert",
157617a3babSopenharmony_ci        "lineContinuation.vert",
158617a3babSopenharmony_ci        "numeral.frag",
159617a3babSopenharmony_ci        "400.geom",
160617a3babSopenharmony_ci        "400.tesc",
161617a3babSopenharmony_ci        "400.tese",
162617a3babSopenharmony_ci        "410.tesc",
163617a3babSopenharmony_ci        "420.tesc",
164617a3babSopenharmony_ci        "420.tese",
165617a3babSopenharmony_ci        "410.geom",
166617a3babSopenharmony_ci        "430.vert",
167617a3babSopenharmony_ci        "430.comp",
168617a3babSopenharmony_ci        "430AofA.frag",
169617a3babSopenharmony_ci        "435.vert",
170617a3babSopenharmony_ci        "440.vert",
171617a3babSopenharmony_ci        "440.frag",
172617a3babSopenharmony_ci        "450.vert",
173617a3babSopenharmony_ci        "450.geom",
174617a3babSopenharmony_ci        "450.tesc",
175617a3babSopenharmony_ci        "450.tese",
176617a3babSopenharmony_ci        "450.frag",
177617a3babSopenharmony_ci        "450.comp",
178617a3babSopenharmony_ci        "460.frag",
179617a3babSopenharmony_ci        "460.vert",
180617a3babSopenharmony_ci        "dce.frag",
181617a3babSopenharmony_ci        "atomic_uint.frag",
182617a3babSopenharmony_ci        "implicitInnerAtomicUint.frag",
183617a3babSopenharmony_ci        "aggOps.frag",
184617a3babSopenharmony_ci        "always-discard.frag",
185617a3babSopenharmony_ci        "always-discard2.frag",
186617a3babSopenharmony_ci        "conditionalDiscard.frag",
187617a3babSopenharmony_ci        "conversion.frag",
188617a3babSopenharmony_ci        "dataOut.frag",
189617a3babSopenharmony_ci        "dataOutIndirect.frag",
190617a3babSopenharmony_ci        "deepRvalue.frag",
191617a3babSopenharmony_ci        "depthOut.frag",
192617a3babSopenharmony_ci        "discard-dce.frag",
193617a3babSopenharmony_ci        "doWhileLoop.frag",
194617a3babSopenharmony_ci        "earlyReturnDiscard.frag",
195617a3babSopenharmony_ci        "flowControl.frag",
196617a3babSopenharmony_ci        "forLoop.frag",
197617a3babSopenharmony_ci        "functionCall.frag",
198617a3babSopenharmony_ci        "functionSemantics.frag",
199617a3babSopenharmony_ci        "length.frag",
200617a3babSopenharmony_ci        "localAggregates.frag",
201617a3babSopenharmony_ci        "loops.frag",
202617a3babSopenharmony_ci        "loopsArtificial.frag",
203617a3babSopenharmony_ci        "matrix.frag",
204617a3babSopenharmony_ci        "matrix2.frag",
205617a3babSopenharmony_ci        "mixedArrayDecls.frag",
206617a3babSopenharmony_ci        "nonuniform.frag",
207617a3babSopenharmony_ci        "newTexture.frag",
208617a3babSopenharmony_ci        "Operations.frag",
209617a3babSopenharmony_ci        "overlongLiteral.frag",
210617a3babSopenharmony_ci        "prepost.frag",
211617a3babSopenharmony_ci        "runtimeArray.vert",
212617a3babSopenharmony_ci        "simpleFunctionCall.frag",
213617a3babSopenharmony_ci        "stringToDouble.vert",
214617a3babSopenharmony_ci        "struct.error.frag",
215617a3babSopenharmony_ci        "structAssignment.frag",
216617a3babSopenharmony_ci        "structDeref.frag",
217617a3babSopenharmony_ci        "structure.frag",
218617a3babSopenharmony_ci        "swizzle.frag",
219617a3babSopenharmony_ci        "invalidSwizzle.vert",
220617a3babSopenharmony_ci        "syntaxError.frag",
221617a3babSopenharmony_ci        "test.frag",
222617a3babSopenharmony_ci        "texture.frag",
223617a3babSopenharmony_ci        "tokenPaste.vert",
224617a3babSopenharmony_ci        "types.frag",
225617a3babSopenharmony_ci        "uniformArray.frag",
226617a3babSopenharmony_ci        "variableArrayIndex.frag",
227617a3babSopenharmony_ci        "varyingArray.frag",
228617a3babSopenharmony_ci        "varyingArrayIndirect.frag",
229617a3babSopenharmony_ci        "voidFunction.frag",
230617a3babSopenharmony_ci        "whileLoop.frag",
231617a3babSopenharmony_ci        "nonVulkan.frag",
232617a3babSopenharmony_ci        "negativeArraySize.comp",
233617a3babSopenharmony_ci        "precise.tesc",
234617a3babSopenharmony_ci        "precise_struct_block.vert",
235617a3babSopenharmony_ci        "maxClipDistances.vert",
236617a3babSopenharmony_ci        "findFunction.frag",
237617a3babSopenharmony_ci        "noMatchingFunction.frag",
238617a3babSopenharmony_ci        "constantUnaryConversion.comp",
239617a3babSopenharmony_ci        "xfbUnsizedArray.error.vert",
240617a3babSopenharmony_ci        "xfbUnsizedArray.error.tese",
241617a3babSopenharmony_ci        "glsl.140.layoutOffset.error.vert",
242617a3babSopenharmony_ci        "glsl.430.layoutOffset.error.vert",
243617a3babSopenharmony_ci        "glsl.450.subgroup.frag",
244617a3babSopenharmony_ci        "glsl.450.subgroup.geom",
245617a3babSopenharmony_ci        "glsl.450.subgroup.tesc",
246617a3babSopenharmony_ci        "glsl.450.subgroup.tese",
247617a3babSopenharmony_ci        "glsl.450.subgroup.vert",
248617a3babSopenharmony_ci        "glsl.450.subgroupArithmetic.comp",
249617a3babSopenharmony_ci        "glsl.450.subgroupBasic.comp",
250617a3babSopenharmony_ci        "glsl.450.subgroupBallot.comp",
251617a3babSopenharmony_ci        "glsl.450.subgroupBallotNeg.comp",
252617a3babSopenharmony_ci        "glsl.450.subgroupClustered.comp",
253617a3babSopenharmony_ci        "glsl.450.subgroupClusteredNeg.comp",
254617a3babSopenharmony_ci        "glsl.450.subgroupPartitioned.comp",
255617a3babSopenharmony_ci        "glsl.450.subgroupShuffle.comp",
256617a3babSopenharmony_ci        "glsl.450.subgroupShuffleRelative.comp",
257617a3babSopenharmony_ci        "glsl.450.subgroupQuad.comp",
258617a3babSopenharmony_ci        "glsl.450.subgroupVote.comp",
259617a3babSopenharmony_ci        "glsl.460.subgroup.mesh",
260617a3babSopenharmony_ci        "glsl.460.subgroup.task",
261617a3babSopenharmony_ci        "glsl.460.subgroup.rahit",
262617a3babSopenharmony_ci        "glsl.460.subgroup.rcall",
263617a3babSopenharmony_ci        "glsl.460.subgroup.rchit",
264617a3babSopenharmony_ci        "glsl.460.subgroup.rgen",
265617a3babSopenharmony_ci        "glsl.460.subgroup.rint",
266617a3babSopenharmony_ci        "glsl.460.subgroup.rmiss",
267617a3babSopenharmony_ci        "glsl.es300.layoutOffset.error.vert",
268617a3babSopenharmony_ci        "glsl.es320.subgroup.frag",
269617a3babSopenharmony_ci        "glsl.es320.subgroup.geom",
270617a3babSopenharmony_ci        "glsl.es320.subgroup.tesc",
271617a3babSopenharmony_ci        "glsl.es320.subgroup.tese",
272617a3babSopenharmony_ci        "glsl.es320.subgroup.vert",
273617a3babSopenharmony_ci        "glsl.es320.subgroupArithmetic.comp",
274617a3babSopenharmony_ci        "glsl.es320.subgroupBasic.comp",
275617a3babSopenharmony_ci        "glsl.es320.subgroupBallot.comp",
276617a3babSopenharmony_ci        "glsl.es320.subgroupBallotNeg.comp",
277617a3babSopenharmony_ci        "glsl.es320.subgroupClustered.comp",
278617a3babSopenharmony_ci        "glsl.es320.subgroupClusteredNeg.comp",
279617a3babSopenharmony_ci        "glsl.es320.subgroupPartitioned.comp",
280617a3babSopenharmony_ci        "glsl.es320.subgroupShuffle.comp",
281617a3babSopenharmony_ci        "glsl.es320.subgroupShuffleRelative.comp",
282617a3babSopenharmony_ci        "glsl.es320.subgroupQuad.comp",
283617a3babSopenharmony_ci        "glsl.es320.subgroupVote.comp",
284617a3babSopenharmony_ci        "glsl.es320.extTextureShadowLod.frag",
285617a3babSopenharmony_ci        "glsl.ext.textureShadowLod.frag",
286617a3babSopenharmony_ci        "terminate.frag",
287617a3babSopenharmony_ci        "terminate.vert",
288617a3babSopenharmony_ci        "negativeWorkGroupSize.comp",
289617a3babSopenharmony_ci        "textureoffset_sampler2darrayshadow.vert",
290617a3babSopenharmony_ci        "atomicAdd.comp",
291617a3babSopenharmony_ci        "GL_ARB_gpu_shader5.u2i.vert",
292617a3babSopenharmony_ci        "textureQueryLOD.frag",
293617a3babSopenharmony_ci        "atomicCounterARBOps.vert",
294617a3babSopenharmony_ci        "GL_EXT_shader_integer_mix.vert",
295617a3babSopenharmony_ci        "GL_ARB_draw_instanced.vert",
296617a3babSopenharmony_ci        "GL_ARB_fragment_coord_conventions.vert",
297617a3babSopenharmony_ci        "GL_ARB_bindless_texture.frag",
298617a3babSopenharmony_ci        "BestMatchFunction.vert",
299617a3babSopenharmony_ci        "EndStreamPrimitive.geom",
300617a3babSopenharmony_ci        "floatBitsToInt.vert",
301617a3babSopenharmony_ci        "coord_conventions.frag",
302617a3babSopenharmony_ci        "gl_FragCoord.frag",
303617a3babSopenharmony_ci        "glsl.interpOp.error.frag",
304617a3babSopenharmony_ci        "GL_EXT_draw_instanced.vert",
305617a3babSopenharmony_ci        "overflow_underflow_toinf_0.frag",
306617a3babSopenharmony_ci        "GL_EXT_texture_array.frag",
307617a3babSopenharmony_ci    })),
308617a3babSopenharmony_ci    FileNameAsCustomTestSuffix
309617a3babSopenharmony_ci);
310617a3babSopenharmony_ci
311617a3babSopenharmony_ciINSTANTIATE_TEST_SUITE_P(
312617a3babSopenharmony_ci    Glsl, CompileToAstTestNV,
313617a3babSopenharmony_ci    ::testing::ValuesIn(std::vector<std::string>({
314617a3babSopenharmony_ci        "nvShaderNoperspectiveInterpolation.frag",
315617a3babSopenharmony_ci    })),
316617a3babSopenharmony_ci    FileNameAsCustomTestSuffix
317617a3babSopenharmony_ci);
318617a3babSopenharmony_ci
319617a3babSopenharmony_ci// clang-format on
320617a3babSopenharmony_ci
321617a3babSopenharmony_ci}  // anonymous namespace
322617a3babSopenharmony_ci}  // namespace glslangtest
323