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