// GENERATED FILE - DO NOT EDIT. // Generated by generate_tests.py // // Copyright (c) 2022 Google LLC. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "../diff_test_utils.h" #include "gtest/gtest.h" namespace spvtools { namespace diff { namespace { // Tests a diff where the src shader doesn't have OpExtImport while the // dst shader does (and uses OpExtInst). This test ensures that when matching, // the OpExtImport instruction from the correct module is referenced. constexpr char kSrc[] = R"( OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %4 "main" %9 %11 OpExecutionMode %4 OriginUpperLeft OpSource ESSL 310 OpName %4 "main" OpName %9 "color" OpName %11 "v" OpDecorate %9 RelaxedPrecision OpDecorate %9 Location 0 OpDecorate %11 RelaxedPrecision OpDecorate %11 Location 0 OpDecorate %12 RelaxedPrecision OpDecorate %13 RelaxedPrecision %2 = OpTypeVoid %3 = OpTypeFunction %2 %6 = OpTypeFloat 32 %7 = OpTypeVector %6 4 %8 = OpTypePointer Output %7 %9 = OpVariable %8 Output %10 = OpTypePointer Input %6 %11 = OpVariable %10 Input %4 = OpFunction %2 None %3 %5 = OpLabel %12 = OpLoad %6 %11 %13 = OpCompositeConstruct %7 %12 %12 %12 %12 OpStore %9 %13 OpReturn OpFunctionEnd )"; constexpr char kDst[] = R"( OpCapability Shader %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %4 "main" %9 %11 OpExecutionMode %4 OriginUpperLeft OpSource ESSL 310 OpName %4 "main" OpName %9 "color" OpName %11 "v" OpDecorate %9 RelaxedPrecision OpDecorate %9 Location 0 OpDecorate %11 RelaxedPrecision OpDecorate %11 Location 0 OpDecorate %12 RelaxedPrecision OpDecorate %13 RelaxedPrecision OpDecorate %14 RelaxedPrecision %2 = OpTypeVoid %3 = OpTypeFunction %2 %6 = OpTypeFloat 32 %7 = OpTypeVector %6 4 %8 = OpTypePointer Output %7 %9 = OpVariable %8 Output %10 = OpTypePointer Input %6 %11 = OpVariable %10 Input %4 = OpFunction %2 None %3 %5 = OpLabel %12 = OpLoad %6 %11 %13 = OpExtInst %6 %1 Log2 %12 %14 = OpCompositeConstruct %7 %13 %13 %13 %13 OpStore %9 %14 OpReturn OpFunctionEnd )"; TEST(DiffTest, OpextinstInDstOnly) { constexpr char kDiff[] = R"( ; SPIR-V ; Version: 1.6 ; Generator: Khronos SPIR-V Tools Assembler; 0 -; Bound: 14 +; Bound: 16 ; Schema: 0 OpCapability Shader +%14 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %4 "main" %9 %11 OpExecutionMode %4 OriginUpperLeft OpSource ESSL 310 OpName %4 "main" OpName %9 "color" OpName %11 "v" OpDecorate %9 RelaxedPrecision OpDecorate %9 Location 0 OpDecorate %11 RelaxedPrecision OpDecorate %11 Location 0 OpDecorate %12 RelaxedPrecision +OpDecorate %15 RelaxedPrecision OpDecorate %13 RelaxedPrecision %2 = OpTypeVoid %3 = OpTypeFunction %2 %6 = OpTypeFloat 32 %7 = OpTypeVector %6 4 %8 = OpTypePointer Output %7 %9 = OpVariable %8 Output %10 = OpTypePointer Input %6 %11 = OpVariable %10 Input %4 = OpFunction %2 None %3 %5 = OpLabel %12 = OpLoad %6 %11 +%15 = OpExtInst %6 %14 Log2 %12 -%13 = OpCompositeConstruct %7 %12 %12 %12 %12 +%13 = OpCompositeConstruct %7 %15 %15 %15 %15 OpStore %9 %13 OpReturn OpFunctionEnd )"; Options options; DoStringDiffTest(kSrc, kDst, kDiff, options); } TEST(DiffTest, OpextinstInDstOnlyNoDebug) { constexpr char kSrcNoDebug[] = R"( OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %4 "main" %9 %11 OpExecutionMode %4 OriginUpperLeft OpSource ESSL 310 OpDecorate %9 RelaxedPrecision OpDecorate %9 Location 0 OpDecorate %11 RelaxedPrecision OpDecorate %11 Location 0 OpDecorate %12 RelaxedPrecision OpDecorate %13 RelaxedPrecision %2 = OpTypeVoid %3 = OpTypeFunction %2 %6 = OpTypeFloat 32 %7 = OpTypeVector %6 4 %8 = OpTypePointer Output %7 %9 = OpVariable %8 Output %10 = OpTypePointer Input %6 %11 = OpVariable %10 Input %4 = OpFunction %2 None %3 %5 = OpLabel %12 = OpLoad %6 %11 %13 = OpCompositeConstruct %7 %12 %12 %12 %12 OpStore %9 %13 OpReturn OpFunctionEnd )"; constexpr char kDstNoDebug[] = R"( OpCapability Shader %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %4 "main" %9 %11 OpExecutionMode %4 OriginUpperLeft OpSource ESSL 310 OpDecorate %9 RelaxedPrecision OpDecorate %9 Location 0 OpDecorate %11 RelaxedPrecision OpDecorate %11 Location 0 OpDecorate %12 RelaxedPrecision OpDecorate %13 RelaxedPrecision OpDecorate %14 RelaxedPrecision %2 = OpTypeVoid %3 = OpTypeFunction %2 %6 = OpTypeFloat 32 %7 = OpTypeVector %6 4 %8 = OpTypePointer Output %7 %9 = OpVariable %8 Output %10 = OpTypePointer Input %6 %11 = OpVariable %10 Input %4 = OpFunction %2 None %3 %5 = OpLabel %12 = OpLoad %6 %11 %13 = OpExtInst %6 %1 Log2 %12 %14 = OpCompositeConstruct %7 %13 %13 %13 %13 OpStore %9 %14 OpReturn OpFunctionEnd )"; constexpr char kDiff[] = R"( ; SPIR-V ; Version: 1.6 ; Generator: Khronos SPIR-V Tools Assembler; 0 -; Bound: 14 +; Bound: 16 ; Schema: 0 OpCapability Shader +%14 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %4 "main" %9 %11 OpExecutionMode %4 OriginUpperLeft OpSource ESSL 310 OpDecorate %9 RelaxedPrecision OpDecorate %9 Location 0 OpDecorate %11 RelaxedPrecision OpDecorate %11 Location 0 OpDecorate %12 RelaxedPrecision +OpDecorate %15 RelaxedPrecision OpDecorate %13 RelaxedPrecision %2 = OpTypeVoid %3 = OpTypeFunction %2 %6 = OpTypeFloat 32 %7 = OpTypeVector %6 4 %8 = OpTypePointer Output %7 %9 = OpVariable %8 Output %10 = OpTypePointer Input %6 %11 = OpVariable %10 Input %4 = OpFunction %2 None %3 %5 = OpLabel %12 = OpLoad %6 %11 +%15 = OpExtInst %6 %14 Log2 %12 -%13 = OpCompositeConstruct %7 %12 %12 %12 %12 +%13 = OpCompositeConstruct %7 %15 %15 %15 %15 OpStore %9 %13 OpReturn OpFunctionEnd )"; Options options; DoStringDiffTest(kSrcNoDebug, kDstNoDebug, kDiff, options); } } // namespace } // namespace diff } // namespace spvtools