1 //
2 // Copyright (C) 2016 Google, Inc.
3 //
4 // All rights reserved.
5 //
6 // Redistribution and use in source and binary forms, with or without
7 // modification, are permitted provided that the following conditions
8 // are met:
9 //
10 // Redistributions of source code must retain the above copyright
11 // notice, this list of conditions and the following disclaimer.
12 //
13 // Redistributions in binary form must reproduce the above
14 // copyright notice, this list of conditions and the following
15 // disclaimer in the documentation and/or other materials provided
16 // with the distribution.
17 //
18 // Neither the name of Google Inc. nor the names of its
19 // contributors may be used to endorse or promote products derived
20 // from this software without specific prior written permission.
21 //
22 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25 // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26 // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27 // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28 // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32 // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33 // POSSIBILITY OF SUCH DAMAGE.
34
35 #include <algorithm>
36
37 #include <gtest/gtest.h>
38
39 #include "TestFixture.h"
40
41 namespace glslangtest {
42 namespace {
43
44 struct IoMapData {
45 const char* fileName;
46 const char* entryPoint;
47 int baseSamplerBinding;
48 int baseTextureBinding;
49 int baseImageBinding;
50 int baseUboBinding;
51 int baseSsboBinding;
52 bool autoMapBindings;
53 bool flattenUniforms;
54 };
55
FileNameAsCustomTestSuffixIoMap(const::testing::TestParamInfo<IoMapData> & info)56 std::string FileNameAsCustomTestSuffixIoMap(
57 const ::testing::TestParamInfo<IoMapData>& info) {
58 std::string name = info.param.fileName;
59 // A valid test case suffix cannot have '.' and '-' inside.
60 std::replace(name.begin(), name.end(), '.', '_');
61 std::replace(name.begin(), name.end(), '-', '_');
62 return name;
63 }
64
65 using CompileVulkanToSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
66 using CompileVulkanToDebugSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
67 using CompileVulkan1_1ToSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
68 using CompileOpenGLToSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
69 using VulkanSemantics = GlslangTest<::testing::TestWithParam<std::string>>;
70 using OpenGLSemantics = GlslangTest<::testing::TestWithParam<std::string>>;
71 using VulkanAstSemantics = GlslangTest<::testing::TestWithParam<std::string>>;
72 using HlslIoMap = GlslangTest<::testing::TestWithParam<IoMapData>>;
73 using GlslIoMap = GlslangTest<::testing::TestWithParam<IoMapData>>;
74 #ifdef AMD_EXTENSIONS
75 using CompileVulkanToSpirvTestAMD = GlslangTest<::testing::TestWithParam<std::string>>;
76 #endif
77 #ifdef NV_EXTENSIONS
78 using CompileVulkanToSpirvTestNV = GlslangTest<::testing::TestWithParam<std::string>>;
79 #endif
80 using CompileUpgradeTextureToSampledTextureAndDropSamplersTest = GlslangTest<::testing::TestWithParam<std::string>>;
81
82 // Compiling GLSL to SPIR-V under Vulkan semantics. Expected to successfully
83 // generate SPIR-V.
TEST_P(CompileVulkanToSpirvTest,FromFile)84 TEST_P(CompileVulkanToSpirvTest, FromFile)
85 {
86 loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
87 Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
88 Target::Spv);
89 }
90
91 // Compiling GLSL to SPIR-V with debug info under Vulkan semantics. Expected
92 // to successfully generate SPIR-V.
TEST_P(CompileVulkanToDebugSpirvTest,FromFile)93 TEST_P(CompileVulkanToDebugSpirvTest, FromFile)
94 {
95 loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
96 Source::GLSL, Semantics::Vulkan,
97 glslang::EShTargetVulkan_1_0,
98 Target::Spv, true, "",
99 "/baseResults/", false, true);
100 }
101
TEST_P(CompileVulkan1_1ToSpirvTest,FromFile)102 TEST_P(CompileVulkan1_1ToSpirvTest, FromFile)
103 {
104 loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
105 Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_1,
106 Target::Spv);
107 }
108
109 // Compiling GLSL to SPIR-V under OpenGL semantics. Expected to successfully
110 // generate SPIR-V.
TEST_P(CompileOpenGLToSpirvTest,FromFile)111 TEST_P(CompileOpenGLToSpirvTest, FromFile)
112 {
113 loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
114 Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0,
115 Target::Spv);
116 }
117
118 // GLSL-level Vulkan semantics test. Expected to error out before generating
119 // SPIR-V.
TEST_P(VulkanSemantics,FromFile)120 TEST_P(VulkanSemantics, FromFile)
121 {
122 loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
123 Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
124 Target::Spv, false);
125 }
126
127 // GLSL-level Vulkan semantics test. Expected to error out before generating
128 // SPIR-V.
TEST_P(OpenGLSemantics,FromFile)129 TEST_P(OpenGLSemantics, FromFile)
130 {
131 loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
132 Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0,
133 Target::Spv, false);
134 }
135
136 // GLSL-level Vulkan semantics test that need to see the AST for validation.
TEST_P(VulkanAstSemantics,FromFile)137 TEST_P(VulkanAstSemantics, FromFile)
138 {
139 loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
140 Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
141 Target::AST);
142 }
143
144 // HLSL-level Vulkan semantics tests.
TEST_P(HlslIoMap,FromFile)145 TEST_P(HlslIoMap, FromFile)
146 {
147 loadFileCompileIoMapAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
148 Source::HLSL, Semantics::Vulkan,
149 Target::Spv, GetParam().entryPoint,
150 GetParam().baseSamplerBinding,
151 GetParam().baseTextureBinding,
152 GetParam().baseImageBinding,
153 GetParam().baseUboBinding,
154 GetParam().baseSsboBinding,
155 GetParam().autoMapBindings,
156 GetParam().flattenUniforms);
157 }
158
159 // GLSL-level Vulkan semantics tests.
TEST_P(GlslIoMap,FromFile)160 TEST_P(GlslIoMap, FromFile)
161 {
162 loadFileCompileIoMapAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
163 Source::GLSL, Semantics::Vulkan,
164 Target::Spv, GetParam().entryPoint,
165 GetParam().baseSamplerBinding,
166 GetParam().baseTextureBinding,
167 GetParam().baseImageBinding,
168 GetParam().baseUboBinding,
169 GetParam().baseSsboBinding,
170 GetParam().autoMapBindings,
171 GetParam().flattenUniforms);
172 }
173
174 #ifdef AMD_EXTENSIONS
175 // Compiling GLSL to SPIR-V under Vulkan semantics (AMD extensions enabled).
176 // Expected to successfully generate SPIR-V.
TEST_P(CompileVulkanToSpirvTestAMD,FromFile)177 TEST_P(CompileVulkanToSpirvTestAMD, FromFile)
178 {
179 loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
180 Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
181 Target::Spv);
182 }
183 #endif
184
185 #ifdef NV_EXTENSIONS
186 // Compiling GLSL to SPIR-V under Vulkan semantics (NV extensions enabled).
187 // Expected to successfully generate SPIR-V.
TEST_P(CompileVulkanToSpirvTestNV,FromFile)188 TEST_P(CompileVulkanToSpirvTestNV, FromFile)
189 {
190 loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
191 Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
192 Target::Spv);
193 }
194 #endif
195
TEST_P(CompileUpgradeTextureToSampledTextureAndDropSamplersTest,FromFile)196 TEST_P(CompileUpgradeTextureToSampledTextureAndDropSamplersTest, FromFile)
197 {
198 loadCompileUpgradeTextureToSampledTextureAndDropSamplersAndCheck(GlobalTestSettings.testRoot,
199 GetParam(),
200 Source::GLSL,
201 Semantics::Vulkan,
202 Target::Spv);
203 }
204
205 // clang-format off
206 INSTANTIATE_TEST_CASE_P(
207 Glsl, CompileVulkanToSpirvTest,
208 ::testing::ValuesIn(std::vector<std::string>({
209 // Test looping constructs.
210 // No tests yet for making sure break and continue from a nested loop
211 // goes to the innermost target.
212 "spv.barrier.vert",
213 "spv.do-simple.vert",
214 "spv.do-while-continue-break.vert",
215 "spv.for-complex-condition.vert",
216 "spv.for-continue-break.vert",
217 "spv.for-simple.vert",
218 "spv.for-notest.vert",
219 "spv.for-nobody.vert",
220 "spv.while-continue-break.vert",
221 "spv.while-simple.vert",
222 // vulkan-specific tests
223 "spv.set.vert",
224 "spv.double.comp",
225 "spv.100ops.frag",
226 "spv.130.frag",
227 "spv.140.frag",
228 "spv.150.geom",
229 "spv.150.vert",
230 "spv.16bitstorage.frag",
231 "spv.16bitstorage_Error.frag",
232 "spv.16bitstorage-int.frag",
233 "spv.16bitstorage_Error-int.frag",
234 "spv.16bitstorage-uint.frag",
235 "spv.16bitstorage_Error-uint.frag",
236 "spv.300BuiltIns.vert",
237 "spv.300layout.frag",
238 "spv.300layout.vert",
239 "spv.300layoutp.vert",
240 "spv.310.comp",
241 "spv.310.bitcast.frag",
242 "spv.330.geom",
243 "spv.400.frag",
244 "spv.400.tesc",
245 "spv.400.tese",
246 "spv.420.geom",
247 "spv.430.frag",
248 "spv.430.vert",
249 "spv.450.tesc",
250 "spv.450.geom",
251 "spv.450.noRedecl.tesc",
252 "spv.8bitstorage-int.frag",
253 "spv.8bitstorage_Error-int.frag",
254 "spv.8bitstorage-uint.frag",
255 "spv.8bitstorage_Error-uint.frag",
256 "spv.8bitstorage-ubo.vert",
257 "spv.8bitstorage-ssbo.vert",
258 "spv.accessChain.frag",
259 "spv.aggOps.frag",
260 "spv.always-discard.frag",
261 "spv.always-discard2.frag",
262 "spv.arbPostDepthCoverage.frag",
263 "spv.arbPostDepthCoverage_Error.frag",
264 "spv.bitCast.frag",
265 "spv.bool.vert",
266 "spv.boolInBlock.frag",
267 "spv.branch-return.vert",
268 "spv.bufferhandle1.frag",
269 "spv.bufferhandle10.frag",
270 "spv.bufferhandle11.frag",
271 "spv.bufferhandle12.frag",
272 "spv.bufferhandle13.frag",
273 "spv.bufferhandle14.frag",
274 "spv.bufferhandle15.frag",
275 "spv.bufferhandle2.frag",
276 "spv.bufferhandle3.frag",
277 "spv.bufferhandle4.frag",
278 "spv.bufferhandle5.frag",
279 "spv.bufferhandle6.frag",
280 "spv.bufferhandle7.frag",
281 "spv.bufferhandle8.frag",
282 "spv.bufferhandle9.frag",
283 "spv.bufferhandle_Error.frag",
284 "spv.builtInXFB.vert",
285 "spv.conditionalDiscard.frag",
286 "spv.constStruct.vert",
287 "spv.controlFlowAttributes.frag",
288 "spv.conversion.frag",
289 "spv.dataOut.frag",
290 "spv.dataOutIndirect.frag",
291 "spv.dataOutIndirect.vert",
292 "spv.deepRvalue.frag",
293 "spv.depthOut.frag",
294 "spv.discard-dce.frag",
295 "spv.doWhileLoop.frag",
296 "spv.earlyReturnDiscard.frag",
297 "spv.extPostDepthCoverage.frag",
298 "spv.extPostDepthCoverage_Error.frag",
299 "spv.flowControl.frag",
300 "spv.forLoop.frag",
301 "spv.forwardFun.frag",
302 "spv.fragmentDensity.frag",
303 "spv.fragmentDensity.vert",
304 "spv.fragmentDensity-es.frag",
305 "spv.fragmentDensity-neg.frag",
306 "spv.fullyCovered.frag",
307 "spv.functionCall.frag",
308 "spv.functionNestedOpaque.vert",
309 "spv.functionSemantics.frag",
310 "spv.GeometryShaderPassthrough.geom",
311 "spv.interpOps.frag",
312 "spv.int64.frag",
313 "spv.intOps.vert",
314 "spv.layoutNested.vert",
315 "spv.length.frag",
316 "spv.localAggregates.frag",
317 "spv.loops.frag",
318 "spv.loopsArtificial.frag",
319 "spv.matFun.vert",
320 "spv.matrix.frag",
321 "spv.matrix2.frag",
322 "spv.memoryQualifier.frag",
323 "spv.merge-unreachable.frag",
324 "spv.multiStruct.comp",
325 "spv.multiStructFuncall.frag",
326 "spv.newTexture.frag",
327 "spv.noDeadDecorations.vert",
328 "spv.nonSquare.vert",
329 "spv.nonuniform.frag",
330 "spv.noWorkgroup.comp",
331 "spv.offsets.frag",
332 "spv.Operations.frag",
333 "spv.paramMemory.frag",
334 "spv.precision.frag",
335 "spv.precisionNonESSamp.frag",
336 "spv.prepost.frag",
337 "spv.qualifiers.vert",
338 "spv.sample.frag",
339 "spv.sampleId.frag",
340 "spv.samplePosition.frag",
341 "spv.sampleMaskOverrideCoverage.frag",
342 "spv.scalarlayout.frag",
343 "spv.scalarlayoutfloat16.frag",
344 "spv.shaderBallot.comp",
345 "spv.shaderDrawParams.vert",
346 "spv.shaderGroupVote.comp",
347 "spv.shaderStencilExport.frag",
348 "spv.shiftOps.frag",
349 "spv.simpleFunctionCall.frag",
350 "spv.simpleMat.vert",
351 "spv.sparseTexture.frag",
352 "spv.sparseTextureClamp.frag",
353 "spv.structAssignment.frag",
354 "spv.structDeref.frag",
355 "spv.structure.frag",
356 "spv.switch.frag",
357 "spv.swizzle.frag",
358 "spv.swizzleInversion.frag",
359 "spv.test.frag",
360 "spv.test.vert",
361 "spv.texture.frag",
362 "spv.texture.vert",
363 "spv.textureBuffer.vert",
364 "spv.image.frag",
365 "spv.types.frag",
366 "spv.uint.frag",
367 "spv.uniformArray.frag",
368 "spv.variableArrayIndex.frag",
369 "spv.varyingArray.frag",
370 "spv.varyingArrayIndirect.frag",
371 "spv.vecMatConstruct.frag",
372 "spv.voidFunction.frag",
373 "spv.whileLoop.frag",
374 "spv.AofA.frag",
375 "spv.queryL.frag",
376 "spv.separate.frag",
377 "spv.shortCircuit.frag",
378 "spv.pushConstant.vert",
379 "spv.pushConstantAnon.vert",
380 "spv.subpass.frag",
381 "spv.specConstant.vert",
382 "spv.specConstant.comp",
383 "spv.specConstantComposite.vert",
384 "spv.specConstantOperations.vert",
385 "spv.storageBuffer.vert",
386 "spv.precise.tese",
387 "spv.precise.tesc",
388 "spv.vulkan100.subgroupArithmetic.comp",
389 "spv.vulkan100.subgroupPartitioned.comp",
390 "spv.xfb.vert",
391 "spv.xfb2.vert",
392 "spv.xfb3.vert",
393 "spv.samplerlessTextureFunctions.frag",
394 })),
395 FileNameAsCustomTestSuffix
396 );
397
398 // clang-format off
399 INSTANTIATE_TEST_CASE_P(
400 Glsl, CompileVulkanToDebugSpirvTest,
401 ::testing::ValuesIn(std::vector<std::string>({
402 "spv.pp.line.frag",
403 })),
404 FileNameAsCustomTestSuffix
405 );
406
407 // clang-format off
408 INSTANTIATE_TEST_CASE_P(
409 Glsl, CompileVulkan1_1ToSpirvTest,
410 ::testing::ValuesIn(std::vector<std::string>({
411 "spv.1.3.8bitstorage-ubo.vert",
412 "spv.1.3.8bitstorage-ssbo.vert",
413 "spv.deviceGroup.frag",
414 "spv.drawParams.vert",
415 "spv.int8.frag",
416 "spv.vulkan110.int16.frag",
417 "spv.int32.frag",
418 "spv.explicittypes.frag",
419 "spv.float32.frag",
420 "spv.float64.frag",
421 "spv.memoryScopeSemantics.comp",
422 "spv.memoryScopeSemantics_Error.comp",
423 "spv.multiView.frag",
424 "spv.RayGenShader11.rgen",
425 "spv.subgroup.frag",
426 "spv.subgroup.geom",
427 "spv.subgroup.tesc",
428 "spv.subgroup.tese",
429 "spv.subgroup.vert",
430 "spv.subgroupArithmetic.comp",
431 "spv.subgroupBasic.comp",
432 "spv.subgroupBallot.comp",
433 "spv.subgroupBallotNeg.comp",
434 "spv.subgroupClustered.comp",
435 "spv.subgroupClusteredNeg.comp",
436 "spv.subgroupPartitioned.comp",
437 "spv.subgroupShuffle.comp",
438 "spv.subgroupShuffleRelative.comp",
439 "spv.subgroupQuad.comp",
440 "spv.subgroupVote.comp",
441 "spv.vulkan110.storageBuffer.vert",
442 })),
443 FileNameAsCustomTestSuffix
444 );
445
446 // clang-format off
447 INSTANTIATE_TEST_CASE_P(
448 Hlsl, HlslIoMap,
449 ::testing::ValuesIn(std::vector<IoMapData>{
450 { "spv.register.autoassign.frag", "main_ep", 5, 10, 0, 20, 30, true, false },
451 { "spv.register.noautoassign.frag", "main_ep", 5, 10, 0, 15, 30, false, false },
452 { "spv.register.autoassign-2.frag", "main", 5, 10, 0, 15, 30, true, true },
453 { "spv.register.subpass.frag", "main", 0, 20, 0, 0, 0, true, true },
454 { "spv.buffer.autoassign.frag", "main", 5, 10, 0, 15, 30, true, true },
455 { "spv.ssbo.autoassign.frag", "main", 5, 10, 0, 15, 30, true, true },
456 { "spv.ssboAlias.frag", "main", 0, 0, 0, 0, 83, true, false },
457 { "spv.rw.autoassign.frag", "main", 5, 10, 20, 15, 30, true, true },
458 { "spv.register.autoassign.rangetest.frag", "main",
459 glslang::TQualifier::layoutBindingEnd-2,
460 glslang::TQualifier::layoutBindingEnd+5,
461 20, 30, true, false },
462 }),
463 FileNameAsCustomTestSuffixIoMap
464 );
465
466 // clang-format off
467 INSTANTIATE_TEST_CASE_P(
468 Hlsl, GlslIoMap,
469 ::testing::ValuesIn(std::vector<IoMapData>{
470 { "spv.glsl.register.autoassign.frag", "main", 5, 10, 0, 20, 30, true, false },
471 { "spv.glsl.register.noautoassign.frag", "main", 5, 10, 0, 15, 30, false, false },
472 }),
473 FileNameAsCustomTestSuffixIoMap
474 );
475
476 // clang-format off
477 INSTANTIATE_TEST_CASE_P(
478 Glsl, CompileOpenGLToSpirvTest,
479 ::testing::ValuesIn(std::vector<std::string>({
480 "spv.460.frag",
481 "spv.460.vert",
482 "spv.460.comp",
483 "spv.atomic.comp",
484 "spv.glFragColor.frag",
485 "spv.rankShift.comp",
486 "spv.specConst.vert",
487 "spv.OVR_multiview.vert",
488 "spv.xfbOffsetOnBlockMembersAssignment.vert",
489 "spv.xfbOffsetOnStructMembersAssignment.vert",
490 "spv.xfbOverlapOffsetCheckWithBlockAndMember.vert",
491 "spv.xfbStrideJustOnce.vert",
492 })),
493 FileNameAsCustomTestSuffix
494 );
495
496 INSTANTIATE_TEST_CASE_P(
497 Glsl, VulkanSemantics,
498 ::testing::ValuesIn(std::vector<std::string>({
499 "vulkan.frag",
500 "vulkan.vert",
501 "vulkan.comp",
502 "samplerlessTextureFunctions.frag",
503 })),
504 FileNameAsCustomTestSuffix
505 );
506
507 INSTANTIATE_TEST_CASE_P(
508 Glsl, OpenGLSemantics,
509 ::testing::ValuesIn(std::vector<std::string>({
510 "glspv.esversion.vert",
511 "glspv.version.frag",
512 "glspv.version.vert",
513 "glspv.frag",
514 "glspv.vert",
515 })),
516 FileNameAsCustomTestSuffix
517 );
518
519 INSTANTIATE_TEST_CASE_P(
520 Glsl, VulkanAstSemantics,
521 ::testing::ValuesIn(std::vector<std::string>({
522 "vulkan.ast.vert",
523 })),
524 FileNameAsCustomTestSuffix
525 );
526
527 #ifdef AMD_EXTENSIONS
528 INSTANTIATE_TEST_CASE_P(
529 Glsl, CompileVulkanToSpirvTestAMD,
530 ::testing::ValuesIn(std::vector<std::string>({
531 "spv.float16.frag",
532 "spv.float16Fetch.frag",
533 "spv.imageLoadStoreLod.frag",
534 "spv.int16.frag",
535 "spv.int16.amd.frag",
536 "spv.shaderBallotAMD.comp",
537 "spv.shaderFragMaskAMD.frag",
538 "spv.textureGatherBiasLod.frag",
539 })),
540 FileNameAsCustomTestSuffix
541 );
542 #endif
543
544 #ifdef NV_EXTENSIONS
545 INSTANTIATE_TEST_CASE_P(
546 Glsl, CompileVulkanToSpirvTestNV,
547 ::testing::ValuesIn(std::vector<std::string>({
548 "spv.sampleMaskOverrideCoverage.frag",
549 "spv.GeometryShaderPassthrough.geom",
550 "spv.viewportArray2.vert",
551 "spv.viewportArray2.tesc",
552 "spv.stereoViewRendering.vert",
553 "spv.stereoViewRendering.tesc",
554 "spv.multiviewPerViewAttributes.vert",
555 "spv.multiviewPerViewAttributes.tesc",
556 "spv.atomicInt64.comp",
557 "spv.shadingRate.frag",
558 "spv.RayGenShader.rgen",
559 "spv.RayGenShader_Errors.rgen",
560 "spv.RayConstants.rgen",
561 "spv.IntersectShader.rint",
562 "spv.IntersectShader_Errors.rint",
563 "spv.AnyHitShader.rahit",
564 "spv.AnyHitShader_Errors.rahit",
565 "spv.ClosestHitShader.rchit",
566 "spv.ClosestHitShader_Errors.rchit",
567 "spv.MissShader.rmiss",
568 "spv.MissShader_Errors.rmiss",
569 "spv.RayCallable.rcall",
570 "spv.RayCallable_Errors.rcall",
571 "spv.fragmentShaderBarycentric.frag",
572 "spv.fragmentShaderBarycentric2.frag",
573 "spv.computeShaderDerivatives.comp",
574 "spv.computeShaderDerivatives2.comp",
575 "spv.shaderImageFootprint.frag",
576 "spv.meshShaderBuiltins.mesh",
577 "spv.meshShaderUserDefined.mesh",
578 "spv.meshShaderPerViewBuiltins.mesh",
579 "spv.meshShaderPerViewUserDefined.mesh",
580 "spv.meshShaderSharedMem.mesh",
581 "spv.meshShaderTaskMem.mesh",
582 "spv.320.meshShaderUserDefined.mesh",
583 "spv.meshShaderRedeclBuiltins.mesh",
584 "spv.meshShaderRedeclPerViewBuiltins.mesh",
585 "spv.meshTaskShader.task",
586 "spv.perprimitiveNV.frag",
587 })),
588 FileNameAsCustomTestSuffix
589 );
590 #endif
591
592 INSTANTIATE_TEST_CASE_P(
593 Glsl, CompileUpgradeTextureToSampledTextureAndDropSamplersTest,
594 ::testing::ValuesIn(std::vector<std::string>({
595 "spv.texture.sampler.transform.frag",
596 })),
597 FileNameAsCustomTestSuffix
598 );
599 // clang-format on
600
601 } // anonymous namespace
602 } // namespace glslangtest
603