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 dst shader doesn't have OpExtImport while the
27 // src 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 %1 = OpExtInstImport "GLSL.std.450"
31 OpMemoryModel Logical GLSL450
32 OpEntryPoint Fragment %4 "main" %9 %11
33 OpExecutionMode %4 OriginUpperLeft
34 OpSource ESSL 310
35 OpName %4 "main"
36 OpName %9 "color"
37 OpName %11 "v"
38 OpDecorate %9 RelaxedPrecision
39 OpDecorate %9 Location 0
40 OpDecorate %11 RelaxedPrecision
41 OpDecorate %11 Location 0
42 OpDecorate %12 RelaxedPrecision
43 OpDecorate %13 RelaxedPrecision
44 OpDecorate %14 RelaxedPrecision
45 %2 = OpTypeVoid
46 %3 = OpTypeFunction %2
47 %6 = OpTypeFloat 32
48 %7 = OpTypeVector %6 4
49 %8 = OpTypePointer Output %7
50 %9 = OpVariable %8 Output
51 %10 = OpTypePointer Input %6
52 %11 = OpVariable %10 Input
53 %4 = OpFunction %2 None %3
54 %5 = OpLabel
55 %12 = OpLoad %6 %11
56 %13 = OpExtInst %6 %1 Log2 %12
57 %14 = OpCompositeConstruct %7 %13 %13 %13 %13
58 OpStore %9 %14
59 OpReturn
60 OpFunctionEnd
61 )";
62 constexpr char kDst[] = R"( OpCapability Shader
63 OpMemoryModel Logical GLSL450
64 OpEntryPoint Fragment %4 "main" %9 %11
65 OpExecutionMode %4 OriginUpperLeft
66 OpSource ESSL 310
67 OpName %4 "main"
68 OpName %9 "color"
69 OpName %11 "v"
70 OpDecorate %9 RelaxedPrecision
71 OpDecorate %9 Location 0
72 OpDecorate %11 RelaxedPrecision
73 OpDecorate %11 Location 0
74 OpDecorate %12 RelaxedPrecision
75 OpDecorate %13 RelaxedPrecision
76 %2 = OpTypeVoid
77 %3 = OpTypeFunction %2
78 %6 = OpTypeFloat 32
79 %7 = OpTypeVector %6 4
80 %8 = OpTypePointer Output %7
81 %9 = OpVariable %8 Output
82 %10 = OpTypePointer Input %6
83 %11 = OpVariable %10 Input
84 %4 = OpFunction %2 None %3
85 %5 = OpLabel
86 %12 = OpLoad %6 %11
87 %13 = OpCompositeConstruct %7 %12 %12 %12 %12
88 OpStore %9 %13
89 OpReturn
90 OpFunctionEnd
91
92 )";
93
TEST(DiffTest,OpextinstInSrcOnly)94 TEST(DiffTest, OpextinstInSrcOnly) {
95 constexpr char kDiff[] = R"( ; SPIR-V
96 ; Version: 1.6
97 ; Generator: Khronos SPIR-V Tools Assembler; 0
98 -; Bound: 15
99 +; Bound: 16
100 ; Schema: 0
101 OpCapability Shader
102 -%1 = 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 %13 RelaxedPrecision
116 OpDecorate %14 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 -%13 = OpExtInst %6 %1 Log2 %12
129 -%14 = OpCompositeConstruct %7 %13 %13 %13 %13
130 +%14 = OpCompositeConstruct %7 %12 %12 %12 %12
131 OpStore %9 %14
132 OpReturn
133 OpFunctionEnd
134 )";
135 Options options;
136 DoStringDiffTest(kSrc, kDst, kDiff, options);
137 }
138
TEST(DiffTest,OpextinstInSrcOnlyNoDebug)139 TEST(DiffTest, OpextinstInSrcOnlyNoDebug) {
140 constexpr char kSrcNoDebug[] = R"( OpCapability Shader
141 %1 = OpExtInstImport "GLSL.std.450"
142 OpMemoryModel Logical GLSL450
143 OpEntryPoint Fragment %4 "main" %9 %11
144 OpExecutionMode %4 OriginUpperLeft
145 OpSource ESSL 310
146 OpDecorate %9 RelaxedPrecision
147 OpDecorate %9 Location 0
148 OpDecorate %11 RelaxedPrecision
149 OpDecorate %11 Location 0
150 OpDecorate %12 RelaxedPrecision
151 OpDecorate %13 RelaxedPrecision
152 OpDecorate %14 RelaxedPrecision
153 %2 = OpTypeVoid
154 %3 = OpTypeFunction %2
155 %6 = OpTypeFloat 32
156 %7 = OpTypeVector %6 4
157 %8 = OpTypePointer Output %7
158 %9 = OpVariable %8 Output
159 %10 = OpTypePointer Input %6
160 %11 = OpVariable %10 Input
161 %4 = OpFunction %2 None %3
162 %5 = OpLabel
163 %12 = OpLoad %6 %11
164 %13 = OpExtInst %6 %1 Log2 %12
165 %14 = OpCompositeConstruct %7 %13 %13 %13 %13
166 OpStore %9 %14
167 OpReturn
168 OpFunctionEnd
169
170 )";
171 constexpr char kDstNoDebug[] = R"( OpCapability Shader
172 OpMemoryModel Logical GLSL450
173 OpEntryPoint Fragment %4 "main" %9 %11
174 OpExecutionMode %4 OriginUpperLeft
175 OpSource ESSL 310
176 OpDecorate %9 RelaxedPrecision
177 OpDecorate %9 Location 0
178 OpDecorate %11 RelaxedPrecision
179 OpDecorate %11 Location 0
180 OpDecorate %12 RelaxedPrecision
181 OpDecorate %13 RelaxedPrecision
182 %2 = OpTypeVoid
183 %3 = OpTypeFunction %2
184 %6 = OpTypeFloat 32
185 %7 = OpTypeVector %6 4
186 %8 = OpTypePointer Output %7
187 %9 = OpVariable %8 Output
188 %10 = OpTypePointer Input %6
189 %11 = OpVariable %10 Input
190 %4 = OpFunction %2 None %3
191 %5 = OpLabel
192 %12 = OpLoad %6 %11
193 %13 = OpCompositeConstruct %7 %12 %12 %12 %12
194 OpStore %9 %13
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: 15
203 +; Bound: 16
204 ; Schema: 0
205 OpCapability Shader
206 -%1 = 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 %13 RelaxedPrecision
217 OpDecorate %14 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 -%13 = OpExtInst %6 %1 Log2 %12
230 -%14 = OpCompositeConstruct %7 %13 %13 %13 %13
231 +%14 = OpCompositeConstruct %7 %12 %12 %12 %12
232 OpStore %9 %14
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