• 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 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