blob: 123dd6085d29e911ca5728804b096f6ae9399a57 [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 Kesseniche5f29392016-05-16 17:39:50 -060075 {"hlsl.assoc.frag", "PixelShaderFunction"},
John Kessenich0d2b6de2016-06-05 11:23:11 -060076 {"hlsl.attribute.frag", "PixelShaderFunction"},
John Kessenich1cc1a282016-06-03 16:55:49 -060077 {"hlsl.cast.frag", "PixelShaderFunction"},
John Kessenich8d72f1a2016-05-20 12:06:03 -060078 {"hlsl.float1.frag", "PixelShaderFunction"},
John Kesseniche5f29392016-05-16 17:39:50 -060079 {"hlsl.float4.frag", "PixelShaderFunction"},
John Kessenich0d2b6de2016-06-05 11:23:11 -060080 {"hlsl.if.frag", "PixelShaderFunction"},
LoopDawg643fcb52016-06-03 10:53:28 -060081 {"hlsl.intrinsics.frag", "PixelShaderFunction"},
82 {"hlsl.intrinsics.negative.frag", "PixelShaderFunction"},
83 {"hlsl.intrinsics.negative.vert", "VertexShaderFunction"},
84 {"hlsl.intrinsics.vert", "VertexShaderFunction"},
John Kessenich0133c122016-05-20 12:17:26 -060085 {"hlsl.matType.frag", "PixelShaderFunction"},
John Kesseniche5f29392016-05-16 17:39:50 -060086 {"hlsl.max.frag", "PixelShaderFunction"},
87 {"hlsl.precedence.frag", "PixelShaderFunction"},
88 {"hlsl.precedence2.frag", "PixelShaderFunction"},
89 {"hlsl.sin.frag", "PixelShaderFunction"},
Lei Zhangd6f0ed22016-05-16 12:50:30 -040090 }),
91 FileNameAsCustomTestSuffix
92);
93// clang-format on
94
95} // anonymous namespace
96} // namespace glslangtest