• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // GENERATED FILE - DO NOT EDIT.
2 // Generated by generate_tests.py
3 //
4 // Copyright (c) 2022 Google LLC.
5 //
6 // Licensed under the Apache License, Version 2.0 (the "License");
7 // you may not use this file except in compliance with the License.
8 // You may obtain a copy of the License at
9 //
10 //     http://www.apache.org/licenses/LICENSE-2.0
11 //
12 // Unless required by applicable law or agreed to in writing, software
13 // distributed under the License is distributed on an "AS IS" BASIS,
14 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 // See the License for the specific language governing permissions and
16 // limitations under the License.
17 
18 #include "../diff_test_utils.h"
19 
20 #include "gtest/gtest.h"
21 
22 namespace spvtools {
23 namespace diff {
24 namespace {
25 
26 // Tests a diff where the src shader doesn't have OpExtImport while the
27 // dst shader does (and uses OpExtInst).  This test ensures that when matching,
28 // the OpExtImport instruction from the correct module is referenced.
29 constexpr char kSrc[] = R"(               OpCapability Shader
30                OpMemoryModel Logical GLSL450
31                OpEntryPoint Fragment %4 "main" %9 %11
32                OpExecutionMode %4 OriginUpperLeft
33                OpSource ESSL 310
34                OpName %4 "main"
35                OpName %9 "color"
36                OpName %11 "v"
37                OpDecorate %9 RelaxedPrecision
38                OpDecorate %9 Location 0
39                OpDecorate %11 RelaxedPrecision
40                OpDecorate %11 Location 0
41                OpDecorate %12 RelaxedPrecision
42                OpDecorate %13 RelaxedPrecision
43           %2 = OpTypeVoid
44           %3 = OpTypeFunction %2
45           %6 = OpTypeFloat 32
46           %7 = OpTypeVector %6 4
47           %8 = OpTypePointer Output %7
48           %9 = OpVariable %8 Output
49          %10 = OpTypePointer Input %6
50          %11 = OpVariable %10 Input
51           %4 = OpFunction %2 None %3
52           %5 = OpLabel
53          %12 = OpLoad %6 %11
54          %13 = OpCompositeConstruct %7 %12 %12 %12 %12
55                OpStore %9 %13
56                OpReturn
57                OpFunctionEnd
58 )";
59 constexpr char kDst[] = R"(               OpCapability Shader
60           %1 = OpExtInstImport "GLSL.std.450"
61                OpMemoryModel Logical GLSL450
62                OpEntryPoint Fragment %4 "main" %9 %11
63                OpExecutionMode %4 OriginUpperLeft
64                OpSource ESSL 310
65                OpName %4 "main"
66                OpName %9 "color"
67                OpName %11 "v"
68                OpDecorate %9 RelaxedPrecision
69                OpDecorate %9 Location 0
70                OpDecorate %11 RelaxedPrecision
71                OpDecorate %11 Location 0
72                OpDecorate %12 RelaxedPrecision
73                OpDecorate %13 RelaxedPrecision
74                OpDecorate %14 RelaxedPrecision
75           %2 = OpTypeVoid
76           %3 = OpTypeFunction %2
77           %6 = OpTypeFloat 32
78           %7 = OpTypeVector %6 4
79           %8 = OpTypePointer Output %7
80           %9 = OpVariable %8 Output
81          %10 = OpTypePointer Input %6
82          %11 = OpVariable %10 Input
83           %4 = OpFunction %2 None %3
84           %5 = OpLabel
85          %12 = OpLoad %6 %11
86          %13 = OpExtInst %6 %1 Log2 %12
87          %14 = OpCompositeConstruct %7 %13 %13 %13 %13
88                OpStore %9 %14
89                OpReturn
90                OpFunctionEnd
91 
92 )";
93 
TEST(DiffTest,OpextinstInDstOnly)94 TEST(DiffTest, OpextinstInDstOnly) {
95   constexpr char kDiff[] = R"( ; SPIR-V
96  ; Version: 1.6
97  ; Generator: Khronos SPIR-V Tools Assembler; 0
98 -; Bound: 14
99 +; Bound: 16
100  ; Schema: 0
101  OpCapability Shader
102 +%14 = OpExtInstImport "GLSL.std.450"
103  OpMemoryModel Logical GLSL450
104  OpEntryPoint Fragment %4 "main" %9 %11
105  OpExecutionMode %4 OriginUpperLeft
106  OpSource ESSL 310
107  OpName %4 "main"
108  OpName %9 "color"
109  OpName %11 "v"
110  OpDecorate %9 RelaxedPrecision
111  OpDecorate %9 Location 0
112  OpDecorate %11 RelaxedPrecision
113  OpDecorate %11 Location 0
114  OpDecorate %12 RelaxedPrecision
115 +OpDecorate %15 RelaxedPrecision
116  OpDecorate %13 RelaxedPrecision
117  %2 = OpTypeVoid
118  %3 = OpTypeFunction %2
119  %6 = OpTypeFloat 32
120  %7 = OpTypeVector %6 4
121  %8 = OpTypePointer Output %7
122  %9 = OpVariable %8 Output
123  %10 = OpTypePointer Input %6
124  %11 = OpVariable %10 Input
125  %4 = OpFunction %2 None %3
126  %5 = OpLabel
127  %12 = OpLoad %6 %11
128 +%15 = OpExtInst %6 %14 Log2 %12
129 -%13 = OpCompositeConstruct %7 %12 %12 %12 %12
130 +%13 = OpCompositeConstruct %7 %15 %15 %15 %15
131  OpStore %9 %13
132  OpReturn
133  OpFunctionEnd
134 )";
135   Options options;
136   DoStringDiffTest(kSrc, kDst, kDiff, options);
137 }
138 
TEST(DiffTest,OpextinstInDstOnlyNoDebug)139 TEST(DiffTest, OpextinstInDstOnlyNoDebug) {
140   constexpr char kSrcNoDebug[] = R"(               OpCapability Shader
141                OpMemoryModel Logical GLSL450
142                OpEntryPoint Fragment %4 "main" %9 %11
143                OpExecutionMode %4 OriginUpperLeft
144                OpSource ESSL 310
145                OpDecorate %9 RelaxedPrecision
146                OpDecorate %9 Location 0
147                OpDecorate %11 RelaxedPrecision
148                OpDecorate %11 Location 0
149                OpDecorate %12 RelaxedPrecision
150                OpDecorate %13 RelaxedPrecision
151           %2 = OpTypeVoid
152           %3 = OpTypeFunction %2
153           %6 = OpTypeFloat 32
154           %7 = OpTypeVector %6 4
155           %8 = OpTypePointer Output %7
156           %9 = OpVariable %8 Output
157          %10 = OpTypePointer Input %6
158          %11 = OpVariable %10 Input
159           %4 = OpFunction %2 None %3
160           %5 = OpLabel
161          %12 = OpLoad %6 %11
162          %13 = OpCompositeConstruct %7 %12 %12 %12 %12
163                OpStore %9 %13
164                OpReturn
165                OpFunctionEnd
166 
167 )";
168   constexpr char kDstNoDebug[] = R"(               OpCapability Shader
169           %1 = OpExtInstImport "GLSL.std.450"
170                OpMemoryModel Logical GLSL450
171                OpEntryPoint Fragment %4 "main" %9 %11
172                OpExecutionMode %4 OriginUpperLeft
173                OpSource ESSL 310
174                OpDecorate %9 RelaxedPrecision
175                OpDecorate %9 Location 0
176                OpDecorate %11 RelaxedPrecision
177                OpDecorate %11 Location 0
178                OpDecorate %12 RelaxedPrecision
179                OpDecorate %13 RelaxedPrecision
180                OpDecorate %14 RelaxedPrecision
181           %2 = OpTypeVoid
182           %3 = OpTypeFunction %2
183           %6 = OpTypeFloat 32
184           %7 = OpTypeVector %6 4
185           %8 = OpTypePointer Output %7
186           %9 = OpVariable %8 Output
187          %10 = OpTypePointer Input %6
188          %11 = OpVariable %10 Input
189           %4 = OpFunction %2 None %3
190           %5 = OpLabel
191          %12 = OpLoad %6 %11
192          %13 = OpExtInst %6 %1 Log2 %12
193          %14 = OpCompositeConstruct %7 %13 %13 %13 %13
194                OpStore %9 %14
195                OpReturn
196                OpFunctionEnd
197 
198 )";
199   constexpr char kDiff[] = R"( ; SPIR-V
200  ; Version: 1.6
201  ; Generator: Khronos SPIR-V Tools Assembler; 0
202 -; Bound: 14
203 +; Bound: 16
204  ; Schema: 0
205  OpCapability Shader
206 +%14 = OpExtInstImport "GLSL.std.450"
207  OpMemoryModel Logical GLSL450
208  OpEntryPoint Fragment %4 "main" %9 %11
209  OpExecutionMode %4 OriginUpperLeft
210  OpSource ESSL 310
211  OpDecorate %9 RelaxedPrecision
212  OpDecorate %9 Location 0
213  OpDecorate %11 RelaxedPrecision
214  OpDecorate %11 Location 0
215  OpDecorate %12 RelaxedPrecision
216 +OpDecorate %15 RelaxedPrecision
217  OpDecorate %13 RelaxedPrecision
218  %2 = OpTypeVoid
219  %3 = OpTypeFunction %2
220  %6 = OpTypeFloat 32
221  %7 = OpTypeVector %6 4
222  %8 = OpTypePointer Output %7
223  %9 = OpVariable %8 Output
224  %10 = OpTypePointer Input %6
225  %11 = OpVariable %10 Input
226  %4 = OpFunction %2 None %3
227  %5 = OpLabel
228  %12 = OpLoad %6 %11
229 +%15 = OpExtInst %6 %14 Log2 %12
230 -%13 = OpCompositeConstruct %7 %12 %12 %12 %12
231 +%13 = OpCompositeConstruct %7 %15 %15 %15 %15
232  OpStore %9 %13
233  OpReturn
234  OpFunctionEnd
235 )";
236   Options options;
237   DoStringDiffTest(kSrcNoDebug, kDstNoDebug, kDiff, options);
238 }
239 
240 }  // namespace
241 }  // namespace diff
242 }  // namespace spvtools
243