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