blob: ded91c82855a6fce39a14466f25cbd649c6b64c3 [file] [log] [blame]
Lei Zhangd6f0ed22016-05-16 12:50:30 -04001//
2// Copyright (C) 2016 Google, Inc.
LoopDawg4b677322016-05-26 10:10:16 -06003// Copyright (C) 2016 LunarG, Inc.
Lei Zhangd6f0ed22016-05-16 12:50:30 -04004//
5// All rights reserved.
6//
7// Redistribution and use in source and binary forms, with or without
8// modification, are permitted provided that the following conditions
9// are met:
10//
11// Redistributions of source code must retain the above copyright
12// notice, this list of conditions and the following disclaimer.
13//
14// Redistributions in binary form must reproduce the above
15// copyright notice, this list of conditions and the following
16// disclaimer in the documentation and/or other materials provided
17// with the distribution.
18//
19// Neither the name of Google Inc. nor the names of its
20// contributors may be used to endorse or promote products derived
21// from this software without specific prior written permission.
22//
23// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
26// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
27// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
28// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
29// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
33// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34// POSSIBILITY OF SUCH DAMAGE.
35
36#include <gtest/gtest.h>
37
38#include "TestFixture.h"
39
40namespace glslangtest {
41namespace {
42
43struct FileNameEntryPointPair {
44 const char* fileName;
45 const char* entryPoint;
46};
47
48// We are using FileNameEntryPointPair objects as parameters for instantiating
49// the template, so the global FileNameAsCustomTestSuffix() won't work since
50// it assumes std::string as parameters. Thus, an overriding one here.
51std::string FileNameAsCustomTestSuffix(
52 const ::testing::TestParamInfo<FileNameEntryPointPair>& info) {
53 std::string name = info.param.fileName;
54 // A valid test case suffix cannot have '.' and '-' inside.
55 std::replace(name.begin(), name.end(), '.', '_');
56 std::replace(name.begin(), name.end(), '-', '_');
57 return name;
58}
59
60using HlslCompileTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
61
62// Compiling HLSL to SPIR-V under Vulkan semantics. Expected to successfully
Lei Zhangfc697cc2016-05-17 16:43:05 -040063// generate both AST and SPIR-V.
Lei Zhangd6f0ed22016-05-16 12:50:30 -040064TEST_P(HlslCompileTest, FromFile)
65{
66 loadFileCompileAndCheck(GLSLANG_TEST_DIRECTORY, GetParam().fileName,
67 Source::HLSL, Semantics::Vulkan,
68 Target::BothASTAndSpv, GetParam().entryPoint);
69}
70
71// clang-format off
72INSTANTIATE_TEST_CASE_P(
73 ToSpirv, HlslCompileTest,
74 ::testing::ValuesIn(std::vector<FileNameEntryPointPair>{
John Kessenich19b92ff2016-06-19 11:50:34 -060075 {"hlsl.array.frag", "PixelShaderFunction"},
John Kesseniche5f29392016-05-16 17:39:50 -060076 {"hlsl.assoc.frag", "PixelShaderFunction"},
John Kessenich0d2b6de2016-06-05 11:23:11 -060077 {"hlsl.attribute.frag", "PixelShaderFunction"},
John Kessenich1cc1a282016-06-03 16:55:49 -060078 {"hlsl.cast.frag", "PixelShaderFunction"},
John Kessenich5bc4d9a2016-06-20 01:22:38 -060079 {"hlsl.discard.frag", "PixelShaderFunction"},
John Kessenich119f8f62016-06-05 15:44:07 -060080 {"hlsl.doLoop.frag", "PixelShaderFunction"},
John Kessenich8d72f1a2016-05-20 12:06:03 -060081 {"hlsl.float1.frag", "PixelShaderFunction"},
John Kesseniche5f29392016-05-16 17:39:50 -060082 {"hlsl.float4.frag", "PixelShaderFunction"},
John Kessenich119f8f62016-06-05 15:44:07 -060083 {"hlsl.forLoop.frag", "PixelShaderFunction"},
LoopDawga2f3d282016-07-22 08:28:11 -060084 {"hlsl.gather.array.dx10.frag", "main"},
85 {"hlsl.gather.basic.dx10.frag", "main"},
86 {"hlsl.gather.basic.dx10.vert", "main"},
87 {"hlsl.gather.offset.dx10.frag", "main"},
88 {"hlsl.gather.offsetarray.dx10.frag", "main"},
LoopDawg5d58fae2016-07-15 11:22:24 -060089 {"hlsl.getdimensions.dx10.frag", "main"},
90 {"hlsl.getdimensions.dx10.vert", "main"},
John Kessenich0d2b6de2016-06-05 11:23:11 -060091 {"hlsl.if.frag", "PixelShaderFunction"},
LoopDawg9249c702016-07-12 20:44:32 -060092 {"hlsl.inoutquals.frag", "main"},
John Kessenich532543c2016-07-01 19:06:44 -060093 {"hlsl.init.frag", "ShaderFunction"},
LoopDawg6e72fdd2016-06-15 09:50:24 -060094 {"hlsl.intrinsics.barriers.comp", "ComputeShaderFunction"},
LoopDawg58910702016-06-13 09:22:28 -060095 {"hlsl.intrinsics.comp", "ComputeShaderFunction"},
LoopDawg6e72fdd2016-06-15 09:50:24 -060096 {"hlsl.intrinsics.evalfns.frag", "main"},
LoopDawg1b7fd0f2016-06-22 15:20:14 -060097 {"hlsl.intrinsics.double.frag", "PixelShaderFunction"},
LoopDawg6e72fdd2016-06-15 09:50:24 -060098 {"hlsl.intrinsics.f1632.frag", "PixelShaderFunction"},
LoopDawg643fcb52016-06-03 10:53:28 -060099 {"hlsl.intrinsics.frag", "PixelShaderFunction"},
LoopDawg6e72fdd2016-06-15 09:50:24 -0600100 {"hlsl.intrinsics.lit.frag", "PixelShaderFunction"},
LoopDawg58910702016-06-13 09:22:28 -0600101 {"hlsl.intrinsics.negative.comp", "ComputeShaderFunction"},
LoopDawg643fcb52016-06-03 10:53:28 -0600102 {"hlsl.intrinsics.negative.frag", "PixelShaderFunction"},
103 {"hlsl.intrinsics.negative.vert", "VertexShaderFunction"},
LoopDawgf2451012016-07-20 16:34:44 -0600104 {"hlsl.load.array.dx10.frag", "main"},
105 {"hlsl.load.basic.dx10.frag", "main"},
106 {"hlsl.load.offset.dx10.frag", "main"},
107 {"hlsl.load.offsetarray.dx10.frag", "main"},
LoopDawga2b79912016-07-14 14:45:14 -0600108 {"hlsl.sample.array.dx10.frag", "main"},
109 {"hlsl.sample.basic.dx10.frag", "main"},
110 {"hlsl.sample.offset.dx10.frag", "main"},
111 {"hlsl.sample.offsetarray.dx10.frag", "main"},
112 {"hlsl.samplebias.array.dx10.frag", "main"},
113 {"hlsl.samplebias.basic.dx10.frag", "main"},
114 {"hlsl.samplebias.offset.dx10.frag", "main"},
115 {"hlsl.samplebias.offsetarray.dx10.frag", "main"},
LoopDawga78b0292016-07-19 14:28:05 -0600116 {"hlsl.samplecmp.array.dx10.frag", "main"},
117 {"hlsl.samplecmp.basic.dx10.frag", "main"},
118 {"hlsl.samplecmp.offset.dx10.frag", "main"},
119 {"hlsl.samplecmp.offsetarray.dx10.frag", "main"},
120 {"hlsl.samplecmplevelzero.array.dx10.frag", "main"},
121 {"hlsl.samplecmplevelzero.basic.dx10.frag", "main"},
122 {"hlsl.samplecmplevelzero.offset.dx10.frag", "main"},
123 {"hlsl.samplecmplevelzero.offsetarray.dx10.frag", "main"},
LoopDawga2b79912016-07-14 14:45:14 -0600124 {"hlsl.samplegrad.array.dx10.frag", "main"},
125 {"hlsl.samplegrad.basic.dx10.frag", "main"},
126 {"hlsl.samplegrad.basic.dx10.vert", "main"},
127 {"hlsl.samplegrad.offset.dx10.frag", "main"},
128 {"hlsl.samplegrad.offsetarray.dx10.frag", "main"},
LoopDawg3ef78522016-07-21 15:02:16 -0600129 {"hlsl.samplelevel.array.dx10.frag", "main"},
130 {"hlsl.samplelevel.basic.dx10.frag", "main"},
131 {"hlsl.samplelevel.basic.dx10.vert", "main"},
132 {"hlsl.samplelevel.offset.dx10.frag", "main"},
133 {"hlsl.samplelevel.offsetarray.dx10.frag", "main"},
LoopDawg643fcb52016-06-03 10:53:28 -0600134 {"hlsl.intrinsics.vert", "VertexShaderFunction"},
John Kessenich0133c122016-05-20 12:17:26 -0600135 {"hlsl.matType.frag", "PixelShaderFunction"},
John Kesseniche5f29392016-05-16 17:39:50 -0600136 {"hlsl.max.frag", "PixelShaderFunction"},
137 {"hlsl.precedence.frag", "PixelShaderFunction"},
138 {"hlsl.precedence2.frag", "PixelShaderFunction"},
John Kessenich077e0522016-06-09 02:02:17 -0600139 {"hlsl.scope.frag", "PixelShaderFunction"},
John Kesseniche5f29392016-05-16 17:39:50 -0600140 {"hlsl.sin.frag", "PixelShaderFunction"},
John Kesseniche6e74942016-06-11 16:43:14 -0600141 {"hlsl.struct.frag", "PixelShaderFunction"},
John Kessenichd02dc5d2016-07-01 00:04:11 -0600142 {"hlsl.switch.frag", "PixelShaderFunction"},
John Kessenich93a162a2016-06-17 17:16:27 -0600143 {"hlsl.swizzle.frag", "PixelShaderFunction"},
LoopDawg6daaa4f2016-06-23 19:13:48 -0600144 {"hlsl.templatetypes.frag", "PixelShaderFunction"},
John Kessenich5e69ec62016-07-05 00:02:40 -0600145 {"hlsl.typedef.frag", "PixelShaderFunction"},
John Kessenich119f8f62016-06-05 15:44:07 -0600146 {"hlsl.whileLoop.frag", "PixelShaderFunction"},
John Kessenich71351de2016-06-08 12:50:56 -0600147 {"hlsl.void.frag", "PixelShaderFunction"},
Lei Zhangd6f0ed22016-05-16 12:50:30 -0400148 }),
149 FileNameAsCustomTestSuffix
150);
151// clang-format on
152
153} // anonymous namespace
154} // namespace glslangtest