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 diff of unrelated shaders (with different execution models).
27 constexpr char kSrc[] = R"( OpCapability Shader
28 %1 = OpExtInstImport "GLSL.std.450"
29 OpMemoryModel Logical GLSL450
30 OpEntryPoint Vertex %4 "main" %8 %10
31 OpSource ESSL 310
32 OpName %4 "main"
33 OpName %8 "v"
34 OpName %10 "a"
35 OpDecorate %8 Location 0
36 OpDecorate %10 Location 0
37 %2 = OpTypeVoid
38 %3 = OpTypeFunction %2
39 %6 = OpTypeFloat 32
40 %7 = OpTypePointer Output %6
41 %8 = OpVariable %7 Output
42 %9 = OpTypePointer Input %6
43 %10 = OpVariable %9 Input
44 %4 = OpFunction %2 None %3
45 %5 = OpLabel
46 %11 = OpLoad %6 %10
47 OpStore %8 %11
48 OpReturn
49 OpFunctionEnd
50 )";
51 constexpr char kDst[] = R"( OpCapability Shader
52 %1 = OpExtInstImport "GLSL.std.450"
53 OpMemoryModel Logical GLSL450
54 OpEntryPoint Fragment %4 "main" %9 %11
55 OpExecutionMode %4 OriginUpperLeft
56 OpSource ESSL 310
57 OpName %4 "main"
58 OpName %9 "color"
59 OpName %11 "v"
60 OpDecorate %9 RelaxedPrecision
61 OpDecorate %9 Location 0
62 OpDecorate %11 RelaxedPrecision
63 OpDecorate %11 Location 0
64 OpDecorate %12 RelaxedPrecision
65 OpDecorate %13 RelaxedPrecision
66 %2 = OpTypeVoid
67 %3 = OpTypeFunction %2
68 %6 = OpTypeFloat 32
69 %7 = OpTypeVector %6 4
70 %8 = OpTypePointer Output %7
71 %9 = OpVariable %8 Output
72 %10 = OpTypePointer Input %6
73 %11 = OpVariable %10 Input
74 %4 = OpFunction %2 None %3
75 %5 = OpLabel
76 %12 = OpLoad %6 %11
77 %13 = OpCompositeConstruct %7 %12 %12 %12 %12
78 OpStore %9 %13
79 OpReturn
80 OpFunctionEnd
81
82 )";
83
TEST(DiffTest,UnrelatedShaders)84 TEST(DiffTest, UnrelatedShaders) {
85 constexpr char kDiff[] = R"( ; SPIR-V
86 ; Version: 1.6
87 ; Generator: Khronos SPIR-V Tools Assembler; 0
88 -; Bound: 12
89 +; Bound: 16
90 ; Schema: 0
91 OpCapability Shader
92 %1 = OpExtInstImport "GLSL.std.450"
93 OpMemoryModel Logical GLSL450
94 -OpEntryPoint Vertex %4 "main" %8 %10
95 +OpEntryPoint Fragment %4 "main" %14 %8
96 +OpExecutionMode %4 OriginUpperLeft
97 OpSource ESSL 310
98 OpName %4 "main"
99 +OpName %14 "color"
100 OpName %8 "v"
101 -OpName %10 "a"
102 +OpDecorate %14 RelaxedPrecision
103 +OpDecorate %14 Location 0
104 +OpDecorate %8 RelaxedPrecision
105 OpDecorate %8 Location 0
106 -OpDecorate %10 Location 0
107 +OpDecorate %11 RelaxedPrecision
108 +OpDecorate %15 RelaxedPrecision
109 %2 = OpTypeVoid
110 %3 = OpTypeFunction %2
111 %6 = OpTypeFloat 32
112 -%7 = OpTypePointer Output %6
113 +%12 = OpTypeVector %6 4
114 +%13 = OpTypePointer Output %12
115 +%14 = OpVariable %13 Output
116 -%8 = OpVariable %7 Output
117 +%8 = OpVariable %9 Input
118 %9 = OpTypePointer Input %6
119 -%10 = OpVariable %9 Input
120 %4 = OpFunction %2 None %3
121 %5 = OpLabel
122 -%11 = OpLoad %6 %10
123 +%11 = OpLoad %6 %8
124 -OpStore %8 %11
125 +%15 = OpCompositeConstruct %12 %11 %11 %11 %11
126 +OpStore %14 %15
127 OpReturn
128 OpFunctionEnd
129 )";
130 Options options;
131 DoStringDiffTest(kSrc, kDst, kDiff, options);
132 }
133
TEST(DiffTest,UnrelatedShadersNoDebug)134 TEST(DiffTest, UnrelatedShadersNoDebug) {
135 constexpr char kSrcNoDebug[] = R"( OpCapability Shader
136 %1 = OpExtInstImport "GLSL.std.450"
137 OpMemoryModel Logical GLSL450
138 OpEntryPoint Vertex %4 "main" %8 %10
139 OpSource ESSL 310
140 OpDecorate %8 Location 0
141 OpDecorate %10 Location 0
142 %2 = OpTypeVoid
143 %3 = OpTypeFunction %2
144 %6 = OpTypeFloat 32
145 %7 = OpTypePointer Output %6
146 %8 = OpVariable %7 Output
147 %9 = OpTypePointer Input %6
148 %10 = OpVariable %9 Input
149 %4 = OpFunction %2 None %3
150 %5 = OpLabel
151 %11 = OpLoad %6 %10
152 OpStore %8 %11
153 OpReturn
154 OpFunctionEnd
155
156 )";
157 constexpr char kDstNoDebug[] = R"( OpCapability Shader
158 %1 = OpExtInstImport "GLSL.std.450"
159 OpMemoryModel Logical GLSL450
160 OpEntryPoint Fragment %4 "main" %9 %11
161 OpExecutionMode %4 OriginUpperLeft
162 OpSource ESSL 310
163 OpDecorate %9 RelaxedPrecision
164 OpDecorate %9 Location 0
165 OpDecorate %11 RelaxedPrecision
166 OpDecorate %11 Location 0
167 OpDecorate %12 RelaxedPrecision
168 OpDecorate %13 RelaxedPrecision
169 %2 = OpTypeVoid
170 %3 = OpTypeFunction %2
171 %6 = OpTypeFloat 32
172 %7 = OpTypeVector %6 4
173 %8 = OpTypePointer Output %7
174 %9 = OpVariable %8 Output
175 %10 = OpTypePointer Input %6
176 %11 = OpVariable %10 Input
177 %4 = OpFunction %2 None %3
178 %5 = OpLabel
179 %12 = OpLoad %6 %11
180 %13 = OpCompositeConstruct %7 %12 %12 %12 %12
181 OpStore %9 %13
182 OpReturn
183 OpFunctionEnd
184
185 )";
186 constexpr char kDiff[] = R"( ; SPIR-V
187 ; Version: 1.6
188 ; Generator: Khronos SPIR-V Tools Assembler; 0
189 -; Bound: 12
190 +; Bound: 15
191 ; Schema: 0
192 OpCapability Shader
193 %1 = OpExtInstImport "GLSL.std.450"
194 OpMemoryModel Logical GLSL450
195 -OpEntryPoint Vertex %4 "main" %8 %10
196 +OpEntryPoint Fragment %4 "main" %8 %10
197 +OpExecutionMode %4 OriginUpperLeft
198 OpSource ESSL 310
199 +OpDecorate %8 RelaxedPrecision
200 OpDecorate %8 Location 0
201 +OpDecorate %10 RelaxedPrecision
202 OpDecorate %10 Location 0
203 +OpDecorate %11 RelaxedPrecision
204 +OpDecorate %14 RelaxedPrecision
205 %2 = OpTypeVoid
206 %3 = OpTypeFunction %2
207 %6 = OpTypeFloat 32
208 -%7 = OpTypePointer Output %6
209 +%12 = OpTypeVector %6 4
210 +%13 = OpTypePointer Output %12
211 -%8 = OpVariable %7 Output
212 +%8 = OpVariable %13 Output
213 %9 = OpTypePointer Input %6
214 %10 = OpVariable %9 Input
215 %4 = OpFunction %2 None %3
216 %5 = OpLabel
217 %11 = OpLoad %6 %10
218 +%14 = OpCompositeConstruct %12 %11 %11 %11 %11
219 -OpStore %8 %11
220 +OpStore %8 %14
221 OpReturn
222 OpFunctionEnd
223 )";
224 Options options;
225 DoStringDiffTest(kSrcNoDebug, kDstNoDebug, kDiff, options);
226 }
227
228 } // namespace
229 } // namespace diff
230 } // namespace spvtools
231