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 22namespace spvtools { 23namespace diff { 24namespace { 25 26// Basic test for spirv-diff 27constexpr char kSrc[] = R"(; SPIR-V 28; Version: 1.0 29; Generator: Google ANGLE Shader Compiler; 0 30; Bound: 27 31; Schema: 0 32OpCapability Shader 33 OpMemoryModel Logical GLSL450 34 OpEntryPoint Vertex %22 "main" %4 %14 %19 35 OpSource GLSL 450 36 OpName %4 "_ua_position" 37 OpName %14 "ANGLEXfbPosition" 38 OpName %17 "gl_PerVertex" 39 OpMemberName %17 0 "gl_Position" 40OpMemberName %17 1 "gl_PointSize" 41OpMemberName %17 2 "gl_ClipDistance" 42 OpMemberName %17 3 "gl_CullDistance" 43 OpName %19 "" 44 OpName %22 "main" 45 OpDecorate %4 Location 0 46 OpDecorate %14 Location 0 47 OpMemberDecorate %17 1 RelaxedPrecision 48 OpMemberDecorate %17 0 BuiltIn Position 49 OpMemberDecorate %17 1 BuiltIn PointSize 50OpMemberDecorate %17 2 BuiltIn ClipDistance 51OpMemberDecorate %17 3 BuiltIn CullDistance 52OpDecorate %17 Block 53%1 = OpTypeFloat 32 54%2 = OpTypeVector %1 4 55%5 = OpTypeInt 32 0 56%6 = OpTypeInt 32 1 57%15 = OpConstant %5 8 58%16 = OpTypeArray %1 %15 59%17 = OpTypeStruct %2 %1 %16 %16 60%20 = OpTypeVoid 61%25 = OpConstant %6 0 62%3 = OpTypePointer Input %2 63%13 = OpTypePointer Output %2 64%18 = OpTypePointer Output %17 65%21 = OpTypeFunction %20 66%4 = OpVariable %3 Input 67%14 = OpVariable %13 Output 68%19 = OpVariable %18 Output 69%22 = OpFunction %20 None %21 70%23 = OpLabel 71%24 = OpLoad %2 %4 72%26 = OpAccessChain %13 %19 %25 73OpStore %26 %24 74OpReturn 75OpFunctionEnd)"; 76constexpr char kDst[] = R"(; SPIR-V 77; Version: 1.0 78; Generator: Khronos Glslang Reference Front End; 10 79; Bound: 28 80; Schema: 0 81OpCapability Shader 82%1 = OpExtInstImport "GLSL.std.450" 83OpMemoryModel Logical GLSL450 84OpEntryPoint Vertex %4 "main" %13 %17 %27 85OpSource GLSL 450 86OpName %4 "main" 87OpName %11 "gl_PerVertex" 88OpMemberName %11 0 "gl_Position" 89OpMemberName %11 1 "gl_PointSize" 90OpMemberName %11 2 "gl_ClipDistance" 91OpMemberName %11 3 "gl_CullDistance" 92OpName %13 "" 93OpName %17 "_ua_position" 94OpName %27 "ANGLEXfbPosition" 95OpMemberDecorate %11 0 BuiltIn Position 96OpMemberDecorate %11 1 BuiltIn PointSize 97OpMemberDecorate %11 2 BuiltIn ClipDistance 98OpMemberDecorate %11 3 BuiltIn CullDistance 99OpDecorate %11 Block 100OpDecorate %17 Location 0 101OpDecorate %27 Location 0 102%2 = OpTypeVoid 103%3 = OpTypeFunction %2 104%6 = OpTypeFloat 32 105%7 = OpTypeVector %6 4 106%8 = OpTypeInt 32 0 107%9 = OpConstant %8 1 108%10 = OpTypeArray %6 %9 109%11 = OpTypeStruct %7 %6 %10 %10 110%12 = OpTypePointer Output %11 111%13 = OpVariable %12 Output 112%14 = OpTypeInt 32 1 113%15 = OpConstant %14 0 114%16 = OpTypePointer Input %7 115%17 = OpVariable %16 Input 116%19 = OpTypePointer Output %7 117%27 = OpVariable %19 Output 118%4 = OpFunction %2 None %3 119%5 = OpLabel 120%18 = OpLoad %7 %17 121%20 = OpAccessChain %19 %13 %15 122OpStore %20 %18 123OpReturn 124OpFunctionEnd 125)"; 126 127TEST(DiffTest, Basic) { 128 constexpr char kDiff[] = R"( ; SPIR-V 129 ; Version: 1.6 130 ; Generator: Khronos SPIR-V Tools Assembler; 0 131-; Bound: 27 132+; Bound: 30 133 ; Schema: 0 134 OpCapability Shader 135+%27 = OpExtInstImport "GLSL.std.450" 136 OpMemoryModel Logical GLSL450 137-OpEntryPoint Vertex %22 "main" %4 %14 %19 138+OpEntryPoint Vertex %22 "main" %19 %4 %14 139 OpSource GLSL 450 140 OpName %4 "_ua_position" 141 OpName %14 "ANGLEXfbPosition" 142 OpName %17 "gl_PerVertex" 143 OpMemberName %17 0 "gl_Position" 144 OpMemberName %17 1 "gl_PointSize" 145 OpMemberName %17 2 "gl_ClipDistance" 146 OpMemberName %17 3 "gl_CullDistance" 147 OpName %19 "" 148 OpName %22 "main" 149 OpDecorate %4 Location 0 150 OpDecorate %14 Location 0 151-OpMemberDecorate %17 1 RelaxedPrecision 152 OpMemberDecorate %17 0 BuiltIn Position 153 OpMemberDecorate %17 1 BuiltIn PointSize 154 OpMemberDecorate %17 2 BuiltIn ClipDistance 155 OpMemberDecorate %17 3 BuiltIn CullDistance 156 OpDecorate %17 Block 157 %1 = OpTypeFloat 32 158 %2 = OpTypeVector %1 4 159 %5 = OpTypeInt 32 0 160 %6 = OpTypeInt 32 1 161-%15 = OpConstant %5 8 162-%16 = OpTypeArray %1 %15 163-%17 = OpTypeStruct %2 %1 %16 %16 164+%17 = OpTypeStruct %2 %1 %29 %29 165+%28 = OpConstant %5 1 166+%29 = OpTypeArray %1 %28 167 %20 = OpTypeVoid 168 %25 = OpConstant %6 0 169 %3 = OpTypePointer Input %2 170 %13 = OpTypePointer Output %2 171 %18 = OpTypePointer Output %17 172 %21 = OpTypeFunction %20 173 %4 = OpVariable %3 Input 174 %14 = OpVariable %13 Output 175 %19 = OpVariable %18 Output 176 %22 = OpFunction %20 None %21 177 %23 = OpLabel 178 %24 = OpLoad %2 %4 179 %26 = OpAccessChain %13 %19 %25 180 OpStore %26 %24 181 OpReturn 182 OpFunctionEnd 183)"; 184 Options options; 185 DoStringDiffTest(kSrc, kDst, kDiff, options); 186} 187 188TEST(DiffTest, BasicNoDebug) { 189 constexpr char kSrcNoDebug[] = R"(; SPIR-V 190; Version: 1.0 191; Generator: Google ANGLE Shader Compiler; 0 192; Bound: 27 193; Schema: 0 194OpCapability Shader 195 OpMemoryModel Logical GLSL450 196 OpEntryPoint Vertex %22 "main" %4 %14 %19 197 OpSource GLSL 450 198 OpDecorate %4 Location 0 199 OpDecorate %14 Location 0 200 OpMemberDecorate %17 1 RelaxedPrecision 201 OpMemberDecorate %17 0 BuiltIn Position 202 OpMemberDecorate %17 1 BuiltIn PointSize 203OpMemberDecorate %17 2 BuiltIn ClipDistance 204OpMemberDecorate %17 3 BuiltIn CullDistance 205OpDecorate %17 Block 206%1 = OpTypeFloat 32 207%2 = OpTypeVector %1 4 208%5 = OpTypeInt 32 0 209%6 = OpTypeInt 32 1 210%15 = OpConstant %5 8 211%16 = OpTypeArray %1 %15 212%17 = OpTypeStruct %2 %1 %16 %16 213%20 = OpTypeVoid 214%25 = OpConstant %6 0 215%3 = OpTypePointer Input %2 216%13 = OpTypePointer Output %2 217%18 = OpTypePointer Output %17 218%21 = OpTypeFunction %20 219%4 = OpVariable %3 Input 220%14 = OpVariable %13 Output 221%19 = OpVariable %18 Output 222%22 = OpFunction %20 None %21 223%23 = OpLabel 224%24 = OpLoad %2 %4 225%26 = OpAccessChain %13 %19 %25 226OpStore %26 %24 227OpReturn 228OpFunctionEnd 229)"; 230 constexpr char kDstNoDebug[] = R"(; SPIR-V 231; Version: 1.0 232; Generator: Khronos Glslang Reference Front End; 10 233; Bound: 28 234; Schema: 0 235OpCapability Shader 236%1 = OpExtInstImport "GLSL.std.450" 237OpMemoryModel Logical GLSL450 238OpEntryPoint Vertex %4 "main" %13 %17 %27 239OpSource GLSL 450 240OpMemberDecorate %11 0 BuiltIn Position 241OpMemberDecorate %11 1 BuiltIn PointSize 242OpMemberDecorate %11 2 BuiltIn ClipDistance 243OpMemberDecorate %11 3 BuiltIn CullDistance 244OpDecorate %11 Block 245OpDecorate %17 Location 0 246OpDecorate %27 Location 0 247%2 = OpTypeVoid 248%3 = OpTypeFunction %2 249%6 = OpTypeFloat 32 250%7 = OpTypeVector %6 4 251%8 = OpTypeInt 32 0 252%9 = OpConstant %8 1 253%10 = OpTypeArray %6 %9 254%11 = OpTypeStruct %7 %6 %10 %10 255%12 = OpTypePointer Output %11 256%13 = OpVariable %12 Output 257%14 = OpTypeInt 32 1 258%15 = OpConstant %14 0 259%16 = OpTypePointer Input %7 260%17 = OpVariable %16 Input 261%19 = OpTypePointer Output %7 262%27 = OpVariable %19 Output 263%4 = OpFunction %2 None %3 264%5 = OpLabel 265%18 = OpLoad %7 %17 266%20 = OpAccessChain %19 %13 %15 267OpStore %20 %18 268OpReturn 269OpFunctionEnd 270)"; 271 constexpr char kDiff[] = R"( ; SPIR-V 272 ; Version: 1.6 273 ; Generator: Khronos SPIR-V Tools Assembler; 0 274-; Bound: 27 275+; Bound: 30 276 ; Schema: 0 277 OpCapability Shader 278+%27 = OpExtInstImport "GLSL.std.450" 279 OpMemoryModel Logical GLSL450 280-OpEntryPoint Vertex %22 "main" %4 %14 %19 281+OpEntryPoint Vertex %22 "main" %19 %4 %14 282 OpSource GLSL 450 283 OpDecorate %4 Location 0 284 OpDecorate %14 Location 0 285-OpMemberDecorate %17 1 RelaxedPrecision 286 OpMemberDecorate %17 0 BuiltIn Position 287 OpMemberDecorate %17 1 BuiltIn PointSize 288 OpMemberDecorate %17 2 BuiltIn ClipDistance 289 OpMemberDecorate %17 3 BuiltIn CullDistance 290 OpDecorate %17 Block 291 %1 = OpTypeFloat 32 292 %2 = OpTypeVector %1 4 293 %5 = OpTypeInt 32 0 294 %6 = OpTypeInt 32 1 295-%15 = OpConstant %5 8 296-%16 = OpTypeArray %1 %15 297-%17 = OpTypeStruct %2 %1 %16 %16 298+%17 = OpTypeStruct %2 %1 %29 %29 299+%28 = OpConstant %5 1 300+%29 = OpTypeArray %1 %28 301 %20 = OpTypeVoid 302 %25 = OpConstant %6 0 303 %3 = OpTypePointer Input %2 304 %13 = OpTypePointer Output %2 305 %18 = OpTypePointer Output %17 306 %21 = OpTypeFunction %20 307 %4 = OpVariable %3 Input 308 %14 = OpVariable %13 Output 309 %19 = OpVariable %18 Output 310 %22 = OpFunction %20 None %21 311 %23 = OpLabel 312 %24 = OpLoad %2 %4 313 %26 = OpAccessChain %13 %19 %25 314 OpStore %26 %24 315 OpReturn 316 OpFunctionEnd 317)"; 318 Options options; 319 DoStringDiffTest(kSrcNoDebug, kDstNoDebug, kDiff, options); 320} 321 322TEST(DiffTest, BasicDumpIds) { 323 constexpr char kDiff[] = R"( ; SPIR-V 324 ; Version: 1.6 325 ; Generator: Khronos SPIR-V Tools Assembler; 0 326-; Bound: 27 327+; Bound: 30 328 ; Schema: 0 329 OpCapability Shader 330+%27 = OpExtInstImport "GLSL.std.450" 331 OpMemoryModel Logical GLSL450 332-OpEntryPoint Vertex %22 "main" %4 %14 %19 333+OpEntryPoint Vertex %22 "main" %19 %4 %14 334 OpSource GLSL 450 335 OpName %4 "_ua_position" 336 OpName %14 "ANGLEXfbPosition" 337 OpName %17 "gl_PerVertex" 338 OpMemberName %17 0 "gl_Position" 339 OpMemberName %17 1 "gl_PointSize" 340 OpMemberName %17 2 "gl_ClipDistance" 341 OpMemberName %17 3 "gl_CullDistance" 342 OpName %19 "" 343 OpName %22 "main" 344 OpDecorate %4 Location 0 345 OpDecorate %14 Location 0 346-OpMemberDecorate %17 1 RelaxedPrecision 347 OpMemberDecorate %17 0 BuiltIn Position 348 OpMemberDecorate %17 1 BuiltIn PointSize 349 OpMemberDecorate %17 2 BuiltIn ClipDistance 350 OpMemberDecorate %17 3 BuiltIn CullDistance 351 OpDecorate %17 Block 352 %1 = OpTypeFloat 32 353 %2 = OpTypeVector %1 4 354 %5 = OpTypeInt 32 0 355 %6 = OpTypeInt 32 1 356-%15 = OpConstant %5 8 357-%16 = OpTypeArray %1 %15 358-%17 = OpTypeStruct %2 %1 %16 %16 359+%17 = OpTypeStruct %2 %1 %29 %29 360+%28 = OpConstant %5 1 361+%29 = OpTypeArray %1 %28 362 %20 = OpTypeVoid 363 %25 = OpConstant %6 0 364 %3 = OpTypePointer Input %2 365 %13 = OpTypePointer Output %2 366 %18 = OpTypePointer Output %17 367 %21 = OpTypeFunction %20 368 %4 = OpVariable %3 Input 369 %14 = OpVariable %13 Output 370 %19 = OpVariable %18 Output 371 %22 = OpFunction %20 None %21 372 %23 = OpLabel 373 %24 = OpLoad %2 %4 374 %26 = OpAccessChain %13 %19 %25 375 OpStore %26 %24 376 OpReturn 377 OpFunctionEnd 378 Src -> Dst 379 1 -> 6 [TypeFloat] 380 2 -> 7 [TypeVector] 381 3 -> 16 [TypePointer] 382 4 -> 17 [Variable] 383 5 -> 8 [TypeInt] 384 6 -> 14 [TypeInt] 385 13 -> 19 [TypePointer] 386 14 -> 27 [Variable] 387 15 -> 28 [Constant] 388 16 -> 29 [TypeArray] 389 17 -> 11 [TypeStruct] 390 18 -> 12 [TypePointer] 391 19 -> 13 [Variable] 392 20 -> 2 [TypeVoid] 393 21 -> 3 [TypeFunction] 394 22 -> 4 [Function] 395 23 -> 5 [Label] 396 24 -> 18 [Load] 397 25 -> 15 [Constant] 398 26 -> 20 [AccessChain] 399)"; 400 Options options; 401 options.dump_id_map = true; 402 DoStringDiffTest(kSrc, kDst, kDiff, options); 403} 404 405} // namespace 406} // namespace diff 407} // namespace spvtools 408