| // Copyright (c) 2025 LunarG Inc. |
| // |
| // 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 "gmock/gmock.h" |
| #include "test/opt/pass_fixture.h" |
| |
| namespace spvtools { |
| namespace opt { |
| namespace { |
| |
| using CanonicalizeIdsTest = PassTest<::testing::Test>; |
| |
| // ported from remap.basic.everything.frag |
| TEST_F(CanonicalizeIdsTest, remap_basic) { |
| const std::string before = |
| R"(OpCapability Shader |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint Fragment %4 "main" %9 %11 |
| OpExecutionMode %4 OriginUpperLeft |
| OpSource GLSL 450 |
| OpName %4 "main" |
| OpName %9 "outf4" |
| OpName %11 "inf" |
| OpDecorate %9 Location 0 |
| OpDecorate %11 Location 0 |
| %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 |
| )"; |
| |
| const std::string after = |
| R"(OpCapability Shader |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint Fragment %5663 "main" %4539 %3773 |
| OpExecutionMode %5663 OriginUpperLeft |
| OpSource GLSL 450 |
| OpName %5663 "main" |
| OpName %4539 "outf4" |
| OpName %3773 "inf" |
| OpDecorate %4539 Location 0 |
| OpDecorate %3773 Location 0 |
| %8 = OpTypeVoid |
| %1282 = OpTypeFunction %8 |
| %13 = OpTypeFloat 32 |
| %29 = OpTypeVector %13 4 |
| %666 = OpTypePointer Output %29 |
| %4539 = OpVariable %666 Output |
| %650 = OpTypePointer Input %13 |
| %3773 = OpVariable %650 Input |
| %5663 = OpFunction %8 None %1282 |
| %24968 = OpLabel |
| %17486 = OpLoad %13 %3773 |
| %17691 = OpCompositeConstruct %29 %17486 %17486 %17486 %17486 |
| OpStore %4539 %17691 |
| OpReturn |
| OpFunctionEnd |
| )"; |
| |
| SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); |
| SetDisassembleOptions(SPV_BINARY_TO_TEXT_OPTION_NO_HEADER); |
| SinglePassRunAndCheck<CanonicalizeIdsPass>(before, after, false, false); |
| } |
| |
| // ported from remap.hlsl.sample.basic.everything.frag |
| TEST_F(CanonicalizeIdsTest, remap_hlsl_sample_basic) { |
| const std::string before = |
| R"(OpCapability Shader |
| OpCapability Sampled1D |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint Fragment %4 "main" %188 %192 |
| OpExecutionMode %4 OriginUpperLeft |
| OpExecutionMode %4 DepthReplacing |
| OpSource HLSL 500 |
| OpName %4 "main" |
| OpName %8 "PS_OUTPUT" |
| OpMemberName %8 0 "Color" |
| OpMemberName %8 1 "Depth" |
| OpName %10 "@main(" |
| OpName %13 "MemberTest" |
| OpMemberName %13 0 "Sample" |
| OpMemberName %13 1 "CalculateLevelOfDetail" |
| OpMemberName %13 2 "CalculateLevelOfDetailUnclamped" |
| OpMemberName %13 3 "Gather" |
| OpMemberName %13 4 "GetDimensions" |
| OpMemberName %13 5 "GetSamplePosition" |
| OpMemberName %13 6 "Load" |
| OpMemberName %13 7 "SampleBias" |
| OpMemberName %13 8 "SampleCmp" |
| OpMemberName %13 9 "SampleCmpLevelZero" |
| OpMemberName %13 10 "SampleGrad" |
| OpMemberName %13 11 "SampleLevel" |
| OpName %15 "mtest" |
| OpName %54 "txval10" |
| OpName %45 "g_tTex1df4" |
| OpName %49 "g_sSamp" |
| OpName %66 "txval11" |
| OpName %60 "g_tTex1di4" |
| OpName %79 "txval12" |
| OpName %73 "g_tTex1du4" |
| OpName %90 "txval20" |
| OpName %83 "g_tTex2df4" |
| OpName %101 "txval21" |
| OpName %94 "g_tTex2di4" |
| OpName %113 "txval22" |
| OpName %105 "g_tTex2du4" |
| OpName %124 "txval30" |
| OpName %117 "g_tTex3df4" |
| OpName %134 "txval31" |
| OpName %128 "g_tTex3di4" |
| OpName %147 "txval32" |
| OpName %138 "g_tTex3du4" |
| OpName %156 "txval40" |
| OpName %151 "g_tTexcdf4" |
| OpName %165 "txval41" |
| OpName %160 "g_tTexcdi4" |
| OpName %174 "txval42" |
| OpName %169 "g_tTexcdu4" |
| OpName %176 "psout" |
| OpName %185 "flattenTemp" |
| OpName %188 "@entryPointOutput.Color" |
| OpName %192 "@entryPointOutput.Depth" |
| OpDecorate %45 Binding 0 |
| OpDecorate %45 DescriptorSet 0 |
| OpDecorate %49 Binding 0 |
| OpDecorate %49 DescriptorSet 0 |
| OpDecorate %60 Binding 2 |
| OpDecorate %60 DescriptorSet 0 |
| OpDecorate %73 Binding 3 |
| OpDecorate %73 DescriptorSet 0 |
| OpDecorate %83 Binding 4 |
| OpDecorate %83 DescriptorSet 0 |
| OpDecorate %94 Binding 5 |
| OpDecorate %94 DescriptorSet 0 |
| OpDecorate %105 Binding 6 |
| OpDecorate %105 DescriptorSet 0 |
| OpDecorate %117 Binding 7 |
| OpDecorate %117 DescriptorSet 0 |
| OpDecorate %128 Binding 8 |
| OpDecorate %128 DescriptorSet 0 |
| OpDecorate %138 Binding 9 |
| OpDecorate %138 DescriptorSet 0 |
| OpDecorate %151 Binding 10 |
| OpDecorate %151 DescriptorSet 0 |
| OpDecorate %160 Binding 11 |
| OpDecorate %160 DescriptorSet 0 |
| OpDecorate %169 Binding 12 |
| OpDecorate %169 DescriptorSet 0 |
| OpDecorate %188 Location 0 |
| OpDecorate %192 BuiltIn FragDepth |
| %2 = OpTypeVoid |
| %3 = OpTypeFunction %2 |
| %6 = OpTypeFloat 32 |
| %7 = OpTypeVector %6 4 |
| %8 = OpTypeStruct %7 %6 |
| %9 = OpTypeFunction %8 |
| %12 = OpTypeInt 32 1 |
| %13 = OpTypeStruct %12 %12 %12 %12 %12 %12 %12 %12 %12 %12 %12 %12 |
| %14 = OpTypePointer Function %13 |
| %16 = OpConstant %12 1 |
| %17 = OpTypePointer Function %12 |
| %19 = OpConstant %12 2 |
| %21 = OpConstant %12 3 |
| %23 = OpConstant %12 4 |
| %25 = OpConstant %12 5 |
| %27 = OpConstant %12 6 |
| %29 = OpConstant %12 0 |
| %31 = OpConstant %12 7 |
| %33 = OpConstant %12 8 |
| %35 = OpConstant %12 9 |
| %37 = OpConstant %12 10 |
| %39 = OpConstant %12 11 |
| %41 = OpTypePointer Function %7 |
| %43 = OpTypeImage %6 1D 0 0 0 1 Unknown |
| %44 = OpTypePointer UniformConstant %43 |
| %45 = OpVariable %44 UniformConstant |
| %47 = OpTypeSampler |
| %48 = OpTypePointer UniformConstant %47 |
| %49 = OpVariable %48 UniformConstant |
| %51 = OpTypeSampledImage %43 |
| %53 = OpConstant %6 0.100000001 |
| %55 = OpTypeVector %12 4 |
| %58 = OpTypeImage %12 1D 0 0 0 1 Unknown |
| %59 = OpTypePointer UniformConstant %58 |
| %60 = OpVariable %59 UniformConstant |
| %63 = OpTypeSampledImage %58 |
| %65 = OpConstant %6 0.200000003 |
| %67 = OpTypeInt 32 0 |
| %68 = OpTypeVector %67 4 |
| %71 = OpTypeImage %67 1D 0 0 0 1 Unknown |
| %72 = OpTypePointer UniformConstant %71 |
| %73 = OpVariable %72 UniformConstant |
| %76 = OpTypeSampledImage %71 |
| %78 = OpConstant %6 0.300000012 |
| %81 = OpTypeImage %6 2D 0 0 0 1 Unknown |
| %82 = OpTypePointer UniformConstant %81 |
| %83 = OpVariable %82 UniformConstant |
| %86 = OpTypeSampledImage %81 |
| %88 = OpTypeVector %6 2 |
| %89 = OpConstantComposite %88 %53 %65 |
| %92 = OpTypeImage %12 2D 0 0 0 1 Unknown |
| %93 = OpTypePointer UniformConstant %92 |
| %94 = OpVariable %93 UniformConstant |
| %97 = OpTypeSampledImage %92 |
| %99 = OpConstant %6 0.400000006 |
| %100 = OpConstantComposite %88 %78 %99 |
| %103 = OpTypeImage %67 2D 0 0 0 1 Unknown |
| %104 = OpTypePointer UniformConstant %103 |
| %105 = OpVariable %104 UniformConstant |
| %108 = OpTypeSampledImage %103 |
| %110 = OpConstant %6 0.5 |
| %111 = OpConstant %6 0.600000024 |
| %112 = OpConstantComposite %88 %110 %111 |
| %115 = OpTypeImage %6 3D 0 0 0 1 Unknown |
| %116 = OpTypePointer UniformConstant %115 |
| %117 = OpVariable %116 UniformConstant |
| %120 = OpTypeSampledImage %115 |
| %122 = OpTypeVector %6 3 |
| %123 = OpConstantComposite %122 %53 %65 %78 |
| %126 = OpTypeImage %12 3D 0 0 0 1 Unknown |
| %127 = OpTypePointer UniformConstant %126 |
| %128 = OpVariable %127 UniformConstant |
| %131 = OpTypeSampledImage %126 |
| %133 = OpConstantComposite %122 %99 %110 %111 |
| %136 = OpTypeImage %67 3D 0 0 0 1 Unknown |
| %137 = OpTypePointer UniformConstant %136 |
| %138 = OpVariable %137 UniformConstant |
| %141 = OpTypeSampledImage %136 |
| %143 = OpConstant %6 0.699999988 |
| %144 = OpConstant %6 0.800000012 |
| %145 = OpConstant %6 0.899999976 |
| %146 = OpConstantComposite %122 %143 %144 %145 |
| %149 = OpTypeImage %6 Cube 0 0 0 1 Unknown |
| %150 = OpTypePointer UniformConstant %149 |
| %151 = OpVariable %150 UniformConstant |
| %154 = OpTypeSampledImage %149 |
| %158 = OpTypeImage %12 Cube 0 0 0 1 Unknown |
| %159 = OpTypePointer UniformConstant %158 |
| %160 = OpVariable %159 UniformConstant |
| %163 = OpTypeSampledImage %158 |
| %167 = OpTypeImage %67 Cube 0 0 0 1 Unknown |
| %168 = OpTypePointer UniformConstant %167 |
| %169 = OpVariable %168 UniformConstant |
| %172 = OpTypeSampledImage %167 |
| %175 = OpTypePointer Function %8 |
| %177 = OpConstant %6 1 |
| %178 = OpConstantComposite %7 %177 %177 %177 %177 |
| %180 = OpTypePointer Function %6 |
| %187 = OpTypePointer Output %7 |
| %188 = OpVariable %187 Output |
| %191 = OpTypePointer Output %6 |
| %192 = OpVariable %191 Output |
| %4 = OpFunction %2 None %3 |
| %5 = OpLabel |
| %185 = OpVariable %175 Function |
| %186 = OpFunctionCall %8 %10 |
| OpStore %185 %186 |
| %189 = OpAccessChain %41 %185 %29 |
| %190 = OpLoad %7 %189 |
| OpStore %188 %190 |
| %193 = OpAccessChain %180 %185 %16 |
| %194 = OpLoad %6 %193 |
| OpStore %192 %194 |
| OpReturn |
| OpFunctionEnd |
| %10 = OpFunction %8 None %9 |
| %11 = OpLabel |
| %15 = OpVariable %14 Function |
| %176 = OpVariable %175 Function |
| %18 = OpAccessChain %17 %15 %16 |
| OpStore %18 %16 |
| %20 = OpAccessChain %17 %15 %19 |
| OpStore %20 %16 |
| %22 = OpAccessChain %17 %15 %21 |
| OpStore %22 %16 |
| %24 = OpAccessChain %17 %15 %23 |
| OpStore %24 %16 |
| %26 = OpAccessChain %17 %15 %25 |
| OpStore %26 %16 |
| %28 = OpAccessChain %17 %15 %27 |
| OpStore %28 %16 |
| %30 = OpAccessChain %17 %15 %29 |
| OpStore %30 %16 |
| %32 = OpAccessChain %17 %15 %31 |
| OpStore %32 %16 |
| %34 = OpAccessChain %17 %15 %33 |
| OpStore %34 %16 |
| %36 = OpAccessChain %17 %15 %35 |
| OpStore %36 %16 |
| %38 = OpAccessChain %17 %15 %37 |
| OpStore %38 %16 |
| %40 = OpAccessChain %17 %15 %39 |
| OpStore %40 %16 |
| %46 = OpLoad %43 %45 |
| %50 = OpLoad %47 %49 |
| %52 = OpSampledImage %51 %46 %50 |
| %54 = OpImageSampleImplicitLod %7 %52 %53 |
| %61 = OpLoad %58 %60 |
| %62 = OpLoad %47 %49 |
| %64 = OpSampledImage %63 %61 %62 |
| %66 = OpImageSampleImplicitLod %55 %64 %65 |
| %74 = OpLoad %71 %73 |
| %75 = OpLoad %47 %49 |
| %77 = OpSampledImage %76 %74 %75 |
| %79 = OpImageSampleImplicitLod %68 %77 %78 |
| %84 = OpLoad %81 %83 |
| %85 = OpLoad %47 %49 |
| %87 = OpSampledImage %86 %84 %85 |
| %90 = OpImageSampleImplicitLod %7 %87 %89 |
| %95 = OpLoad %92 %94 |
| %96 = OpLoad %47 %49 |
| %98 = OpSampledImage %97 %95 %96 |
| %101 = OpImageSampleImplicitLod %55 %98 %100 |
| %106 = OpLoad %103 %105 |
| %107 = OpLoad %47 %49 |
| %109 = OpSampledImage %108 %106 %107 |
| %113 = OpImageSampleImplicitLod %68 %109 %112 |
| %118 = OpLoad %115 %117 |
| %119 = OpLoad %47 %49 |
| %121 = OpSampledImage %120 %118 %119 |
| %124 = OpImageSampleImplicitLod %7 %121 %123 |
| %129 = OpLoad %126 %128 |
| %130 = OpLoad %47 %49 |
| %132 = OpSampledImage %131 %129 %130 |
| %134 = OpImageSampleImplicitLod %55 %132 %133 |
| %139 = OpLoad %136 %138 |
| %140 = OpLoad %47 %49 |
| %142 = OpSampledImage %141 %139 %140 |
| %147 = OpImageSampleImplicitLod %68 %142 %146 |
| %152 = OpLoad %149 %151 |
| %153 = OpLoad %47 %49 |
| %155 = OpSampledImage %154 %152 %153 |
| %156 = OpImageSampleImplicitLod %7 %155 %123 |
| %161 = OpLoad %158 %160 |
| %162 = OpLoad %47 %49 |
| %164 = OpSampledImage %163 %161 %162 |
| %165 = OpImageSampleImplicitLod %55 %164 %133 |
| %170 = OpLoad %167 %169 |
| %171 = OpLoad %47 %49 |
| %173 = OpSampledImage %172 %170 %171 |
| %174 = OpImageSampleImplicitLod %68 %173 %146 |
| %179 = OpAccessChain %41 %176 %29 |
| OpStore %179 %178 |
| %181 = OpAccessChain %180 %176 %16 |
| OpStore %181 %177 |
| %182 = OpLoad %8 %176 |
| OpReturnValue %182 |
| OpFunctionEnd |
| )"; |
| |
| const std::string after = |
| R"(OpCapability Shader |
| OpCapability Sampled1D |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint Fragment %5663 "main" %4253 %3709 |
| OpExecutionMode %5663 OriginUpperLeft |
| OpExecutionMode %5663 DepthReplacing |
| OpSource HLSL 500 |
| OpName %5663 "main" |
| OpName %1032 "PS_OUTPUT" |
| OpMemberName %1032 0 "Color" |
| OpMemberName %1032 1 "Depth" |
| OpName %3317 "@main(" |
| OpName %1335 "MemberTest" |
| OpMemberName %1335 0 "Sample" |
| OpMemberName %1335 1 "CalculateLevelOfDetail" |
| OpMemberName %1335 2 "CalculateLevelOfDetailUnclamped" |
| OpMemberName %1335 3 "Gather" |
| OpMemberName %1335 4 "GetDimensions" |
| OpMemberName %1335 5 "GetSamplePosition" |
| OpMemberName %1335 6 "Load" |
| OpMemberName %1335 7 "SampleBias" |
| OpMemberName %1335 8 "SampleCmp" |
| OpMemberName %1335 9 "SampleCmpLevelZero" |
| OpMemberName %1335 10 "SampleGrad" |
| OpMemberName %1335 11 "SampleLevel" |
| OpName %5830 "mtest" |
| OpName %3559 "txval10" |
| OpName %4727 "g_tTex1df4" |
| OpName %3305 "g_sSamp" |
| OpName %3560 "txval11" |
| OpName %4743 "g_tTex1di4" |
| OpName %3561 "txval12" |
| OpName %4807 "g_tTex1du4" |
| OpName %4568 "txval20" |
| OpName %5042 "g_tTex2df4" |
| OpName %4569 "txval21" |
| OpName %5058 "g_tTex2di4" |
| OpName %4570 "txval22" |
| OpName %5122 "g_tTex2du4" |
| OpName %5577 "txval30" |
| OpName %3967 "g_tTex3df4" |
| OpName %5578 "txval31" |
| OpName %3983 "g_tTex3di4" |
| OpName %5579 "txval32" |
| OpName %4047 "g_tTex3du4" |
| OpName %3575 "txval40" |
| OpName %3789 "g_tTexcdf4" |
| OpName %3576 "txval41" |
| OpName %3805 "g_tTexcdi4" |
| OpName %3577 "txval42" |
| OpName %3869 "g_tTexcdu4" |
| OpName %5072 "psout" |
| OpName %4104 "flattenTemp" |
| OpName %4253 "@entryPointOutput.Color" |
| OpName %3709 "@entryPointOutput.Depth" |
| OpDecorate %4727 Binding 0 |
| OpDecorate %4727 DescriptorSet 0 |
| OpDecorate %3305 Binding 0 |
| OpDecorate %3305 DescriptorSet 0 |
| OpDecorate %4743 Binding 2 |
| OpDecorate %4743 DescriptorSet 0 |
| OpDecorate %4807 Binding 3 |
| OpDecorate %4807 DescriptorSet 0 |
| OpDecorate %5042 Binding 4 |
| OpDecorate %5042 DescriptorSet 0 |
| OpDecorate %5058 Binding 5 |
| OpDecorate %5058 DescriptorSet 0 |
| OpDecorate %5122 Binding 6 |
| OpDecorate %5122 DescriptorSet 0 |
| OpDecorate %3967 Binding 7 |
| OpDecorate %3967 DescriptorSet 0 |
| OpDecorate %3983 Binding 8 |
| OpDecorate %3983 DescriptorSet 0 |
| OpDecorate %4047 Binding 9 |
| OpDecorate %4047 DescriptorSet 0 |
| OpDecorate %3789 Binding 10 |
| OpDecorate %3789 DescriptorSet 0 |
| OpDecorate %3805 Binding 11 |
| OpDecorate %3805 DescriptorSet 0 |
| OpDecorate %3869 Binding 12 |
| OpDecorate %3869 DescriptorSet 0 |
| OpDecorate %4253 Location 0 |
| OpDecorate %3709 BuiltIn FragDepth |
| %8 = OpTypeVoid |
| %1282 = OpTypeFunction %8 |
| %13 = OpTypeFloat 32 |
| %29 = OpTypeVector %13 4 |
| %1032 = OpTypeStruct %29 %13 |
| %319 = OpTypeFunction %1032 |
| %12 = OpTypeInt 32 1 |
| %1335 = OpTypeStruct %12 %12 %12 %12 %12 %12 %12 %12 %12 %12 %12 %12 |
| %1972 = OpTypePointer Function %1335 |
| %2574 = OpConstant %12 1 |
| %649 = OpTypePointer Function %12 |
| %2577 = OpConstant %12 2 |
| %2580 = OpConstant %12 3 |
| %2583 = OpConstant %12 4 |
| %2586 = OpConstant %12 5 |
| %2589 = OpConstant %12 6 |
| %2571 = OpConstant %12 0 |
| %2592 = OpConstant %12 7 |
| %2595 = OpConstant %12 8 |
| %2598 = OpConstant %12 9 |
| %2601 = OpConstant %12 10 |
| %2604 = OpConstant %12 11 |
| %666 = OpTypePointer Function %29 |
| %149 = OpTypeImage %13 1D 0 0 0 1 Unknown |
| %786 = OpTypePointer UniformConstant %149 |
| %4727 = OpVariable %786 UniformConstant |
| %508 = OpTypeSampler |
| %1145 = OpTypePointer UniformConstant %508 |
| %3305 = OpVariable %1145 UniformConstant |
| %510 = OpTypeSampledImage %149 |
| %2935 = OpConstant %13 0.100000001 |
| %26 = OpTypeVector %12 4 |
| %148 = OpTypeImage %12 1D 0 0 0 1 Unknown |
| %785 = OpTypePointer UniformConstant %148 |
| %4743 = OpVariable %785 UniformConstant |
| %511 = OpTypeSampledImage %148 |
| %2821 = OpConstant %13 0.200000003 |
| %11 = OpTypeInt 32 0 |
| %23 = OpTypeVector %11 4 |
| %147 = OpTypeImage %11 1D 0 0 0 1 Unknown |
| %784 = OpTypePointer UniformConstant %147 |
| %4807 = OpVariable %784 UniformConstant |
| %512 = OpTypeSampledImage %147 |
| %2151 = OpConstant %13 0.300000012 |
| %150 = OpTypeImage %13 2D 0 0 0 1 Unknown |
| %787 = OpTypePointer UniformConstant %150 |
| %5042 = OpVariable %787 UniformConstant |
| %513 = OpTypeSampledImage %150 |
| %19 = OpTypeVector %13 2 |
| %1825 = OpConstantComposite %19 %2935 %2821 |
| %151 = OpTypeImage %12 2D 0 0 0 1 Unknown |
| %788 = OpTypePointer UniformConstant %151 |
| %5058 = OpVariable %788 UniformConstant |
| %514 = OpTypeSampledImage %151 |
| %2707 = OpConstant %13 0.400000006 |
| %2028 = OpConstantComposite %19 %2151 %2707 |
| %152 = OpTypeImage %11 2D 0 0 0 1 Unknown |
| %789 = OpTypePointer UniformConstant %152 |
| %5122 = OpVariable %789 UniformConstant |
| %515 = OpTypeSampledImage %152 |
| %252 = OpConstant %13 0.5 |
| %2037 = OpConstant %13 0.600000024 |
| %2684 = OpConstantComposite %19 %252 %2037 |
| %153 = OpTypeImage %13 3D 0 0 0 1 Unknown |
| %790 = OpTypePointer UniformConstant %153 |
| %3967 = OpVariable %790 UniformConstant |
| %516 = OpTypeSampledImage %153 |
| %24 = OpTypeVector %13 3 |
| %1660 = OpConstantComposite %24 %2935 %2821 %2151 |
| %154 = OpTypeImage %12 3D 0 0 0 1 Unknown |
| %791 = OpTypePointer UniformConstant %154 |
| %3983 = OpVariable %791 UniformConstant |
| %517 = OpTypeSampledImage %154 |
| %2174 = OpConstantComposite %24 %2707 %252 %2037 |
| %155 = OpTypeImage %11 3D 0 0 0 1 Unknown |
| %792 = OpTypePointer UniformConstant %155 |
| %4047 = OpVariable %792 UniformConstant |
| %518 = OpTypeSampledImage %155 |
| %808 = OpConstant %13 0.699999988 |
| %2593 = OpConstant %13 0.800000012 |
| %1364 = OpConstant %13 0.899999976 |
| %2476 = OpConstantComposite %24 %808 %2593 %1364 |
| %156 = OpTypeImage %13 Cube 0 0 0 1 Unknown |
| %793 = OpTypePointer UniformConstant %156 |
| %3789 = OpVariable %793 UniformConstant |
| %519 = OpTypeSampledImage %156 |
| %157 = OpTypeImage %12 Cube 0 0 0 1 Unknown |
| %794 = OpTypePointer UniformConstant %157 |
| %3805 = OpVariable %794 UniformConstant |
| %520 = OpTypeSampledImage %157 |
| %158 = OpTypeImage %11 Cube 0 0 0 1 Unknown |
| %795 = OpTypePointer UniformConstant %158 |
| %3869 = OpVariable %795 UniformConstant |
| %521 = OpTypeSampledImage %158 |
| %1669 = OpTypePointer Function %1032 |
| %138 = OpConstant %13 1 |
| %1284 = OpConstantComposite %29 %138 %138 %138 %138 |
| %650 = OpTypePointer Function %13 |
| %667 = OpTypePointer Output %29 |
| %4253 = OpVariable %667 Output |
| %651 = OpTypePointer Output %13 |
| %3709 = OpVariable %651 Output |
| %5663 = OpFunction %8 None %1282 |
| %24877 = OpLabel |
| %4104 = OpVariable %1669 Function |
| %18803 = OpFunctionCall %1032 %3317 |
| OpStore %4104 %18803 |
| %13396 = OpAccessChain %666 %4104 %2571 |
| %7967 = OpLoad %29 %13396 |
| OpStore %4253 %7967 |
| %16622 = OpAccessChain %650 %4104 %2574 |
| %11539 = OpLoad %13 %16622 |
| OpStore %3709 %11539 |
| OpReturn |
| OpFunctionEnd |
| %3317 = OpFunction %1032 None %319 |
| %12442 = OpLabel |
| %5830 = OpVariable %1972 Function |
| %5072 = OpVariable %1669 Function |
| %22671 = OpAccessChain %649 %5830 %2574 |
| OpStore %22671 %2574 |
| %20306 = OpAccessChain %649 %5830 %2577 |
| OpStore %20306 %2574 |
| %20307 = OpAccessChain %649 %5830 %2580 |
| OpStore %20307 %2574 |
| %20308 = OpAccessChain %649 %5830 %2583 |
| OpStore %20308 %2574 |
| %20309 = OpAccessChain %649 %5830 %2586 |
| OpStore %20309 %2574 |
| %20310 = OpAccessChain %649 %5830 %2589 |
| OpStore %20310 %2574 |
| %20311 = OpAccessChain %649 %5830 %2571 |
| OpStore %20311 %2574 |
| %20312 = OpAccessChain %649 %5830 %2592 |
| OpStore %20312 %2574 |
| %20313 = OpAccessChain %649 %5830 %2595 |
| OpStore %20313 %2574 |
| %20314 = OpAccessChain %649 %5830 %2598 |
| OpStore %20314 %2574 |
| %20315 = OpAccessChain %649 %5830 %2601 |
| OpStore %20315 %2574 |
| %20230 = OpAccessChain %649 %5830 %2604 |
| OpStore %20230 %2574 |
| %15508 = OpLoad %149 %4727 |
| %12260 = OpLoad %508 %3305 |
| %12514 = OpSampledImage %510 %15508 %12260 |
| %3559 = OpImageSampleImplicitLod %29 %12514 %2935 |
| %9477 = OpLoad %148 %4743 |
| %16280 = OpLoad %508 %3305 |
| %12515 = OpSampledImage %511 %9477 %16280 |
| %3560 = OpImageSampleImplicitLod %26 %12515 %2821 |
| %9478 = OpLoad %147 %4807 |
| %16281 = OpLoad %508 %3305 |
| %12516 = OpSampledImage %512 %9478 %16281 |
| %3561 = OpImageSampleImplicitLod %23 %12516 %2151 |
| %9479 = OpLoad %150 %5042 |
| %16282 = OpLoad %508 %3305 |
| %12517 = OpSampledImage %513 %9479 %16282 |
| %4568 = OpImageSampleImplicitLod %29 %12517 %1825 |
| %9480 = OpLoad %151 %5058 |
| %16283 = OpLoad %508 %3305 |
| %12518 = OpSampledImage %514 %9480 %16283 |
| %4569 = OpImageSampleImplicitLod %26 %12518 %2028 |
| %9481 = OpLoad %152 %5122 |
| %16284 = OpLoad %508 %3305 |
| %12519 = OpSampledImage %515 %9481 %16284 |
| %4570 = OpImageSampleImplicitLod %23 %12519 %2684 |
| %9482 = OpLoad %153 %3967 |
| %16285 = OpLoad %508 %3305 |
| %12520 = OpSampledImage %516 %9482 %16285 |
| %5577 = OpImageSampleImplicitLod %29 %12520 %1660 |
| %9483 = OpLoad %154 %3983 |
| %16286 = OpLoad %508 %3305 |
| %12521 = OpSampledImage %517 %9483 %16286 |
| %5578 = OpImageSampleImplicitLod %26 %12521 %2174 |
| %9484 = OpLoad %155 %4047 |
| %16287 = OpLoad %508 %3305 |
| %12522 = OpSampledImage %518 %9484 %16287 |
| %5579 = OpImageSampleImplicitLod %23 %12522 %2476 |
| %9485 = OpLoad %156 %3789 |
| %16288 = OpLoad %508 %3305 |
| %12523 = OpSampledImage %519 %9485 %16288 |
| %3575 = OpImageSampleImplicitLod %29 %12523 %1660 |
| %9486 = OpLoad %157 %3805 |
| %16289 = OpLoad %508 %3305 |
| %12524 = OpSampledImage %520 %9486 %16289 |
| %3576 = OpImageSampleImplicitLod %26 %12524 %2174 |
| %9487 = OpLoad %158 %3869 |
| %16290 = OpLoad %508 %3305 |
| %12590 = OpSampledImage %521 %9487 %16290 |
| %3577 = OpImageSampleImplicitLod %23 %12590 %2476 |
| %14275 = OpAccessChain %666 %5072 %2571 |
| OpStore %14275 %1284 |
| %20231 = OpAccessChain %650 %5072 %2574 |
| OpStore %20231 %138 |
| %8692 = OpLoad %1032 %5072 |
| OpReturnValue %8692 |
| OpFunctionEnd |
| )"; |
| |
| SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); |
| SetDisassembleOptions(SPV_BINARY_TO_TEXT_OPTION_NO_HEADER); |
| SinglePassRunAndCheck<CanonicalizeIdsPass>(before, after, false, false); |
| } |
| |
| // ported from remap.hlsl.templatetypes.everything.frag |
| TEST_F(CanonicalizeIdsTest, remap_hlsl_templatetypes) { |
| const std::string before = |
| R"(OpCapability Shader |
| OpCapability Float64 |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint Fragment %4 "main" %153 %156 |
| OpExecutionMode %4 OriginUpperLeft |
| OpSource HLSL 500 |
| OpName %4 "main" |
| OpName %11 "@main(vf4;" |
| OpName %10 "input" |
| OpName %18 "r00" |
| OpName %21 "r01" |
| OpName %25 "r12" |
| OpName %29 "r13" |
| OpName %14 "r14" |
| OpName %35 "r15" |
| OpName %39 "r16" |
| OpName %44 "r20" |
| OpName %49 "r21" |
| OpName %53 "r22" |
| OpName %58 "r23" |
| OpName %63 "r24" |
| OpName %67 "r30" |
| OpName %72 "r31" |
| OpName %76 "r32" |
| OpName %81 "r33" |
| OpName %86 "r34" |
| OpName %90 "r40" |
| OpName %95 "r41" |
| OpName %18 "r42" |
| OpName %101 "r43" |
| OpName %106 "r44" |
| OpName %125 "r50" |
| OpName %125 "r51" |
| OpName %131 "r61" |
| OpName %137 "r62" |
| OpName %142 "r65" |
| OpName %148 "r66" |
| OpName %154 "input" |
| OpName %153 "input" |
| OpName %156 "@entryPointOutput" |
| OpName %157 "param" |
| OpDecorate %153 Location 0 |
| OpDecorate %156 Location 0 |
| %2 = OpTypeVoid |
| %3 = OpTypeFunction %2 |
| %6 = OpTypeFloat 32 |
| %7 = OpTypeVector %6 4 |
| %8 = OpTypePointer Function %7 |
| %9 = OpTypeFunction %6 %8 |
| %14 = OpConstant %6 1 |
| %15 = OpConstant %6 2 |
| %16 = OpConstant %6 3 |
| %17 = OpConstant %6 4 |
| %18 = OpConstantComposite %7 %14 %15 %16 %17 |
| %20 = OpConstant %6 5 |
| %21 = OpConstantComposite %7 %15 %16 %17 %20 |
| %22 = OpTypeBool |
| %25 = OpConstantFalse %22 |
| %26 = OpTypeInt 32 1 |
| %29 = OpConstant %26 1 |
| %32 = OpTypeFloat 64 |
| %35 = OpConstant %32 1 |
| %36 = OpTypeInt 32 0 |
| %39 = OpConstant %36 1 |
| %40 = OpTypeVector %22 2 |
| %43 = OpConstantTrue %22 |
| %44 = OpConstantComposite %40 %25 %43 |
| %45 = OpTypeVector %26 2 |
| %48 = OpConstant %26 2 |
| %49 = OpConstantComposite %45 %29 %48 |
| %50 = OpTypeVector %6 2 |
| %53 = OpConstantComposite %50 %14 %15 |
| %54 = OpTypeVector %32 2 |
| %57 = OpConstant %32 2 |
| %58 = OpConstantComposite %54 %35 %57 |
| %59 = OpTypeVector %36 2 |
| %62 = OpConstant %36 2 |
| %63 = OpConstantComposite %59 %39 %62 |
| %64 = OpTypeVector %22 3 |
| %67 = OpConstantComposite %64 %25 %43 %43 |
| %68 = OpTypeVector %26 3 |
| %71 = OpConstant %26 3 |
| %72 = OpConstantComposite %68 %29 %48 %71 |
| %73 = OpTypeVector %6 3 |
| %76 = OpConstantComposite %73 %14 %15 %16 |
| %77 = OpTypeVector %32 3 |
| %80 = OpConstant %32 3 |
| %81 = OpConstantComposite %77 %35 %57 %80 |
| %82 = OpTypeVector %36 3 |
| %85 = OpConstant %36 3 |
| %86 = OpConstantComposite %82 %39 %62 %85 |
| %87 = OpTypeVector %22 4 |
| %90 = OpConstantComposite %87 %25 %43 %43 %25 |
| %91 = OpTypeVector %26 4 |
| %94 = OpConstant %26 4 |
| %95 = OpConstantComposite %91 %29 %48 %71 %94 |
| %97 = OpTypeVector %32 4 |
| %100 = OpConstant %32 4 |
| %101 = OpConstantComposite %97 %35 %57 %80 %100 |
| %102 = OpTypeVector %36 4 |
| %105 = OpConstant %36 4 |
| %106 = OpConstantComposite %102 %39 %62 %85 %105 |
| %107 = OpTypeMatrix %7 4 |
| %110 = OpConstant %6 0 |
| %111 = OpConstantComposite %7 %110 %14 %15 %16 |
| %112 = OpConstant %6 6 |
| %113 = OpConstant %6 7 |
| %114 = OpConstantComposite %7 %17 %20 %112 %113 |
| %115 = OpConstant %6 8 |
| %116 = OpConstant %6 9 |
| %117 = OpConstant %6 10 |
| %118 = OpConstant %6 11 |
| %119 = OpConstantComposite %7 %115 %116 %117 %118 |
| %120 = OpConstant %6 12 |
| %121 = OpConstant %6 13 |
| %122 = OpConstant %6 14 |
| %123 = OpConstant %6 15 |
| %124 = OpConstantComposite %7 %120 %121 %122 %123 |
| %125 = OpConstantComposite %107 %111 %114 %119 %124 |
| %127 = OpTypeMatrix %73 2 |
| %130 = OpConstantComposite %73 %17 %20 %112 |
| %131 = OpConstantComposite %127 %76 %130 |
| %132 = OpTypeMatrix %50 3 |
| %135 = OpConstantComposite %50 %16 %17 |
| %136 = OpConstantComposite %50 %20 %112 |
| %137 = OpConstantComposite %132 %53 %135 %136 |
| %138 = OpTypeMatrix %50 4 |
| %141 = OpConstantComposite %50 %113 %115 |
| %142 = OpConstantComposite %138 %53 %135 %136 %141 |
| %143 = OpTypeMatrix %73 4 |
| %146 = OpConstantComposite %73 %113 %115 %116 |
| %147 = OpConstantComposite %73 %117 %118 %120 |
| %148 = OpConstantComposite %143 %76 %130 %146 %147 |
| %152 = OpTypePointer Input %7 |
| %153 = OpVariable %152 Input |
| %155 = OpTypePointer Output %6 |
| %156 = OpVariable %155 Output |
| %4 = OpFunction %2 None %3 |
| %5 = OpLabel |
| %157 = OpVariable %8 Function |
| %154 = OpLoad %7 %153 |
| OpStore %157 %154 |
| %159 = OpFunctionCall %6 %11 %157 |
| OpStore %156 %159 |
| OpReturn |
| OpFunctionEnd |
| %11 = OpFunction %6 None %9 |
| %10 = OpFunctionParameter %8 |
| %12 = OpLabel |
| OpReturnValue %110 |
| OpFunctionEnd |
| )"; |
| |
| const std::string after = |
| R"(OpCapability Shader |
| OpCapability Float64 |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint Fragment %5663 "main" %4872 %4045 |
| OpExecutionMode %5663 OriginUpperLeft |
| OpSource HLSL 500 |
| OpName %5663 "main" |
| OpName %3917 "@main(vf4;" |
| OpName %10636 "input" |
| OpName %1616 "r00" |
| OpName %590 "r01" |
| OpName %1927 "r12" |
| OpName %2574 "r13" |
| OpName %138 "r14" |
| OpName %1201 "r15" |
| OpName %2573 "r16" |
| OpName %311 "r20" |
| OpName %1848 "r21" |
| OpName %312 "r22" |
| OpName %490 "r23" |
| OpName %1840 "r24" |
| OpName %869 "r30" |
| OpName %2668 "r31" |
| OpName %1271 "r32" |
| OpName %1108 "r33" |
| OpName %2654 "r34" |
| OpName %340 "r40" |
| OpName %56 "r41" |
| OpName %1616 "r42" |
| OpName %1328 "r43" |
| OpName %35 "r44" |
| OpName %1294 "r50" |
| OpName %1294 "r51" |
| OpName %1207 "r61" |
| OpName %162 "r62" |
| OpName %2695 "r65" |
| OpName %55 "r66" |
| OpName %24021 "input" |
| OpName %4872 "input" |
| OpName %4045 "@entryPointOutput" |
| OpName %5786 "param" |
| OpDecorate %4872 Location 0 |
| OpDecorate %4045 Location 0 |
| %8 = OpTypeVoid |
| %1282 = OpTypeFunction %8 |
| %13 = OpTypeFloat 32 |
| %29 = OpTypeVector %13 4 |
| %666 = OpTypePointer Function %29 |
| %255 = OpTypeFunction %13 %666 |
| %138 = OpConstant %13 1 |
| %24 = OpConstant %13 2 |
| %2978 = OpConstant %13 3 |
| %2921 = OpConstant %13 4 |
| %1616 = OpConstantComposite %29 %138 %24 %2978 %2921 |
| %1387 = OpConstant %13 5 |
| %590 = OpConstantComposite %29 %24 %2978 %2921 %1387 |
| %9 = OpTypeBool |
| %1927 = OpConstantFalse %9 |
| %12 = OpTypeInt 32 1 |
| %2574 = OpConstant %12 1 |
| %14 = OpTypeFloat 64 |
| %1201 = OpConstant %14 1 |
| %11 = OpTypeInt 32 0 |
| %2573 = OpConstant %11 1 |
| %15 = OpTypeVector %9 2 |
| %1926 = OpConstantTrue %9 |
| %311 = OpConstantComposite %15 %1927 %1926 |
| %18 = OpTypeVector %12 2 |
| %2577 = OpConstant %12 2 |
| %1848 = OpConstantComposite %18 %2574 %2577 |
| %19 = OpTypeVector %13 2 |
| %312 = OpConstantComposite %19 %138 %24 |
| %20 = OpTypeVector %14 2 |
| %2572 = OpConstant %14 2 |
| %490 = OpConstantComposite %20 %1201 %2572 |
| %17 = OpTypeVector %11 2 |
| %2576 = OpConstant %11 2 |
| %1840 = OpConstantComposite %17 %2573 %2576 |
| %16 = OpTypeVector %9 3 |
| %869 = OpConstantComposite %16 %1927 %1926 %1926 |
| %22 = OpTypeVector %12 3 |
| %2580 = OpConstant %12 3 |
| %2668 = OpConstantComposite %22 %2574 %2577 %2580 |
| %25 = OpTypeVector %13 3 |
| %1271 = OpConstantComposite %25 %138 %24 %2978 |
| %26 = OpTypeVector %14 3 |
| %1057 = OpConstant %14 3 |
| %1108 = OpConstantComposite %26 %1201 %2572 %1057 |
| %21 = OpTypeVector %11 3 |
| %2579 = OpConstant %11 3 |
| %2654 = OpConstantComposite %21 %2573 %2576 %2579 |
| %23 = OpTypeVector %9 4 |
| %340 = OpConstantComposite %23 %1927 %1926 %1926 %1927 |
| %27 = OpTypeVector %12 4 |
| %2583 = OpConstant %12 4 |
| %56 = OpConstantComposite %27 %2574 %2577 %2580 %2583 |
| %30 = OpTypeVector %14 4 |
| %2553 = OpConstant %14 4 |
| %1328 = OpConstantComposite %30 %1201 %2572 %1057 %2553 |
| %28 = OpTypeVector %11 4 |
| %2582 = OpConstant %11 4 |
| %35 = OpConstantComposite %28 %2573 %2576 %2579 %2582 |
| %101 = OpTypeMatrix %29 4 |
| %2575 = OpConstant %13 0 |
| %1199 = OpConstantComposite %29 %2575 %138 %24 %2978 |
| %2864 = OpConstant %13 6 |
| %1330 = OpConstant %13 7 |
| %2290 = OpConstantComposite %29 %2921 %1387 %2864 %1330 |
| %2807 = OpConstant %13 8 |
| %2040 = OpConstant %13 9 |
| %1273 = OpConstant %13 10 |
| %506 = OpConstant %13 11 |
| %694 = OpConstantComposite %29 %2807 %2040 %1273 %506 |
| %2750 = OpConstant %13 12 |
| %1983 = OpConstant %13 13 |
| %1216 = OpConstant %13 14 |
| %449 = OpConstant %13 15 |
| %2679 = OpConstantComposite %29 %2750 %1983 %1216 %449 |
| %1294 = OpConstantComposite %101 %1199 %2290 %694 %2679 |
| %54 = OpTypeMatrix %25 2 |
| %837 = OpConstantComposite %25 %2921 %1387 %2864 |
| %1207 = OpConstantComposite %54 %1271 %837 |
| %60 = OpTypeMatrix %19 3 |
| %2354 = OpConstantComposite %19 %2978 %2921 |
| %364 = OpConstantComposite %19 %1387 %2864 |
| %162 = OpConstantComposite %60 %312 %2354 %364 |
| %71 = OpTypeMatrix %19 4 |
| %2976 = OpConstantComposite %19 %1330 %2807 |
| %2695 = OpConstantComposite %71 %312 %2354 %364 %2976 |
| %86 = OpTypeMatrix %25 4 |
| %635 = OpConstantComposite %25 %1330 %2807 %2040 |
| %832 = OpConstantComposite %25 %1273 %506 %2750 |
| %55 = OpConstantComposite %86 %1271 %837 %635 %832 |
| %667 = OpTypePointer Input %29 |
| %4872 = OpVariable %667 Input |
| %650 = OpTypePointer Output %13 |
| %4045 = OpVariable %650 Output |
| %5663 = OpFunction %8 None %1282 |
| %24953 = OpLabel |
| %5786 = OpVariable %666 Function |
| %24021 = OpLoad %29 %4872 |
| OpStore %5786 %24021 |
| %9338 = OpFunctionCall %13 %3917 %5786 |
| OpStore %4045 %9338 |
| OpReturn |
| OpFunctionEnd |
| %3917 = OpFunction %13 None %255 |
| %10636 = OpFunctionParameter %666 |
| %10637 = OpLabel |
| OpReturnValue %2575 |
| OpFunctionEnd |
| )"; |
| |
| SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); |
| SetDisassembleOptions(SPV_BINARY_TO_TEXT_OPTION_NO_HEADER); |
| SinglePassRunAndCheck<CanonicalizeIdsPass>(before, after, false, false); |
| } |
| |
| // ported from remap.if.everything.frag |
| TEST_F(CanonicalizeIdsTest, remap_if) { |
| const std::string before = |
| R"(OpCapability Shader |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint Fragment %4 "main" %8 %17 |
| OpExecutionMode %4 OriginUpperLeft |
| OpSource GLSL 450 |
| OpName %4 "main" |
| OpName %8 "inf" |
| OpName %17 "outf4" |
| OpDecorate %8 Location 0 |
| OpDecorate %17 Location 0 |
| %2 = OpTypeVoid |
| %3 = OpTypeFunction %2 |
| %6 = OpTypeFloat 32 |
| %7 = OpTypePointer Input %6 |
| %8 = OpVariable %7 Input |
| %10 = OpConstant %6 2 |
| %11 = OpTypeBool |
| %15 = OpTypeVector %6 4 |
| %16 = OpTypePointer Output %15 |
| %17 = OpVariable %16 Output |
| %22 = OpConstant %6 -0.5 |
| %4 = OpFunction %2 None %3 |
| %5 = OpLabel |
| %9 = OpLoad %6 %8 |
| %12 = OpFOrdGreaterThan %11 %9 %10 |
| OpSelectionMerge %14 None |
| OpBranchConditional %12 %13 %20 |
| %13 = OpLabel |
| %18 = OpLoad %6 %8 |
| %19 = OpCompositeConstruct %15 %18 %18 %18 %18 |
| OpStore %17 %19 |
| OpBranch %14 |
| %20 = OpLabel |
| %21 = OpLoad %6 %8 |
| %23 = OpFAdd %6 %21 %22 |
| %24 = OpCompositeConstruct %15 %23 %23 %23 %23 |
| OpStore %17 %24 |
| OpBranch %14 |
| %14 = OpLabel |
| OpReturn |
| OpFunctionEnd |
| )"; |
| |
| const std::string after = |
| R"(OpCapability Shader |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint Fragment %5663 "main" %3773 %4539 |
| OpExecutionMode %5663 OriginUpperLeft |
| OpSource GLSL 450 |
| OpName %5663 "main" |
| OpName %3773 "inf" |
| OpName %4539 "outf4" |
| OpDecorate %3773 Location 0 |
| OpDecorate %4539 Location 0 |
| %8 = OpTypeVoid |
| %1282 = OpTypeFunction %8 |
| %13 = OpTypeFloat 32 |
| %650 = OpTypePointer Input %13 |
| %3773 = OpVariable %650 Input |
| %24 = OpConstant %13 2 |
| %9 = OpTypeBool |
| %29 = OpTypeVector %13 4 |
| %666 = OpTypePointer Output %29 |
| %4539 = OpVariable %666 Output |
| %947 = OpConstant %13 -0.5 |
| %5663 = OpFunction %8 None %1282 |
| %7911 = OpLabel |
| %21734 = OpLoad %13 %3773 |
| %13508 = OpFOrdGreaterThan %9 %21734 %24 |
| OpSelectionMerge %19578 None |
| OpBranchConditional %13508 %13182 %10142 |
| %13182 = OpLabel |
| %9496 = OpLoad %13 %3773 |
| %17615 = OpCompositeConstruct %29 %9496 %9496 %9496 %9496 |
| OpStore %4539 %17615 |
| OpBranch %19578 |
| %10142 = OpLabel |
| %22854 = OpLoad %13 %3773 |
| %9982 = OpFAdd %13 %22854 %947 |
| %12421 = OpCompositeConstruct %29 %9982 %9982 %9982 %9982 |
| OpStore %4539 %12421 |
| OpBranch %19578 |
| %19578 = OpLabel |
| OpReturn |
| OpFunctionEnd |
| )"; |
| |
| SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); |
| SetDisassembleOptions(SPV_BINARY_TO_TEXT_OPTION_NO_HEADER); |
| SinglePassRunAndCheck<CanonicalizeIdsPass>(before, after, false, false); |
| } |
| |
| // ported from remap.similar_1a.everything.frag |
| TEST_F(CanonicalizeIdsTest, remap_similar_1a) { |
| const std::string before = |
| R"(OpCapability Shader |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint Fragment %4 "main" %53 %73 %75 |
| OpExecutionMode %4 OriginUpperLeft |
| OpSource GLSL 450 |
| OpName %4 "main" |
| OpName %11 "Test1(i1;" |
| OpName %10 "bound" |
| OpName %14 "Test2(i1;" |
| OpName %13 "bound" |
| OpName %17 "r" |
| OpName %19 "x" |
| OpName %44 "param" |
| OpName %53 "ini4" |
| OpName %73 "outf4" |
| OpName %75 "inf" |
| OpName %78 "param" |
| OpName %82 "param" |
| OpDecorate %53 Flat |
| OpDecorate %53 Location 1 |
| OpDecorate %73 Location 0 |
| OpDecorate %75 Location 0 |
| %2 = OpTypeVoid |
| %3 = OpTypeFunction %2 |
| %6 = OpTypeInt 32 1 |
| %7 = OpTypePointer Function %6 |
| %8 = OpTypeFloat 32 |
| %9 = OpTypeFunction %8 %7 |
| %16 = OpTypePointer Function %8 |
| %18 = OpConstant %8 0 |
| %20 = OpConstant %6 0 |
| %28 = OpTypeBool |
| %30 = OpConstant %8 0.5 |
| %34 = OpConstant %6 1 |
| %40 = OpConstant %6 2 |
| %51 = OpTypeVector %6 4 |
| %52 = OpTypePointer Input %51 |
| %53 = OpVariable %52 Input |
| %54 = OpTypeInt 32 0 |
| %55 = OpConstant %54 1 |
| %56 = OpTypePointer Input %6 |
| %59 = OpConstant %54 2 |
| %64 = OpConstant %54 0 |
| %71 = OpTypeVector %8 4 |
| %72 = OpTypePointer Output %71 |
| %73 = OpVariable %72 Output |
| %74 = OpTypePointer Input %8 |
| %75 = OpVariable %74 Input |
| %4 = OpFunction %2 None %3 |
| %5 = OpLabel |
| %78 = OpVariable %7 Function |
| %82 = OpVariable %7 Function |
| %76 = OpLoad %8 %75 |
| %77 = OpConvertFToS %6 %76 |
| OpStore %78 %77 |
| %79 = OpFunctionCall %8 %11 %78 |
| %80 = OpLoad %8 %75 |
| %81 = OpConvertFToS %6 %80 |
| OpStore %82 %81 |
| %83 = OpFunctionCall %8 %14 %82 |
| %84 = OpFAdd %8 %79 %83 |
| %85 = OpCompositeConstruct %71 %84 %84 %84 %84 |
| OpStore %73 %85 |
| OpReturn |
| OpFunctionEnd |
| %11 = OpFunction %8 None %9 |
| %10 = OpFunctionParameter %7 |
| %12 = OpLabel |
| %17 = OpVariable %16 Function |
| %19 = OpVariable %7 Function |
| OpStore %17 %18 |
| OpStore %19 %20 |
| OpBranch %21 |
| %21 = OpLabel |
| OpLoopMerge %23 %24 None |
| OpBranch %25 |
| %25 = OpLabel |
| %26 = OpLoad %6 %19 |
| %27 = OpLoad %6 %10 |
| %29 = OpSLessThan %28 %26 %27 |
| OpBranchConditional %29 %22 %23 |
| %22 = OpLabel |
| %31 = OpLoad %8 %17 |
| %32 = OpFAdd %8 %31 %30 |
| OpStore %17 %32 |
| OpBranch %24 |
| %24 = OpLabel |
| %33 = OpLoad %6 %19 |
| %35 = OpIAdd %6 %33 %34 |
| OpStore %19 %35 |
| OpBranch %21 |
| %23 = OpLabel |
| %36 = OpLoad %8 %17 |
| OpReturnValue %36 |
| OpFunctionEnd |
| %14 = OpFunction %8 None %9 |
| %13 = OpFunctionParameter %7 |
| %15 = OpLabel |
| %44 = OpVariable %7 Function |
| %39 = OpLoad %6 %13 |
| %41 = OpSGreaterThan %28 %39 %40 |
| OpSelectionMerge %43 None |
| OpBranchConditional %41 %42 %48 |
| %42 = OpLabel |
| %45 = OpLoad %6 %13 |
| OpStore %44 %45 |
| %46 = OpFunctionCall %8 %11 %44 |
| OpReturnValue %46 |
| %48 = OpLabel |
| %49 = OpLoad %6 %13 |
| %50 = OpIMul %6 %49 %40 |
| %57 = OpAccessChain %56 %53 %55 |
| %58 = OpLoad %6 %57 |
| %60 = OpAccessChain %56 %53 %59 |
| %61 = OpLoad %6 %60 |
| %62 = OpIMul %6 %58 %61 |
| %63 = OpIAdd %6 %50 %62 |
| %65 = OpAccessChain %56 %53 %64 |
| %66 = OpLoad %6 %65 |
| %67 = OpIAdd %6 %63 %66 |
| %68 = OpConvertSToF %8 %67 |
| OpReturnValue %68 |
| %43 = OpLabel |
| OpUnreachable |
| OpFunctionEnd |
| )"; |
| |
| const std::string after = |
| R"(OpCapability Shader |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint Fragment %5663 "main" %4201 %4539 %3773 |
| OpExecutionMode %5663 OriginUpperLeft |
| OpSource GLSL 450 |
| OpName %5663 "main" |
| OpName %3782 "Test1(i1;" |
| OpName %6931 "bound" |
| OpName %3836 "Test2(i1;" |
| OpName %4408 "bound" |
| OpName %4292 "r" |
| OpName %4298 "x" |
| OpName %22102 "param" |
| OpName %4201 "ini4" |
| OpName %4539 "outf4" |
| OpName %3773 "inf" |
| OpName %18415 "param" |
| OpName %5786 "param" |
| OpDecorate %4201 Flat |
| OpDecorate %4201 Location 1 |
| OpDecorate %4539 Location 0 |
| OpDecorate %3773 Location 0 |
| %8 = OpTypeVoid |
| %1282 = OpTypeFunction %8 |
| %12 = OpTypeInt 32 1 |
| %649 = OpTypePointer Function %12 |
| %13 = OpTypeFloat 32 |
| %204 = OpTypeFunction %13 %649 |
| %650 = OpTypePointer Function %13 |
| %2572 = OpConstant %13 0 |
| %2571 = OpConstant %12 0 |
| %9 = OpTypeBool |
| %252 = OpConstant %13 0.5 |
| %2574 = OpConstant %12 1 |
| %2577 = OpConstant %12 2 |
| %26 = OpTypeVector %12 4 |
| %663 = OpTypePointer Input %26 |
| %4201 = OpVariable %663 Input |
| %11 = OpTypeInt 32 0 |
| %2573 = OpConstant %11 1 |
| %651 = OpTypePointer Input %12 |
| %2576 = OpConstant %11 2 |
| %2570 = OpConstant %11 0 |
| %29 = OpTypeVector %13 4 |
| %666 = OpTypePointer Output %29 |
| %4539 = OpVariable %666 Output |
| %652 = OpTypePointer Input %13 |
| %3773 = OpVariable %652 Input |
| %5663 = OpFunction %8 None %1282 |
| %24915 = OpLabel |
| %18415 = OpVariable %649 Function |
| %5786 = OpVariable %649 Function |
| %8366 = OpLoad %13 %3773 |
| %8654 = OpConvertFToS %12 %8366 |
| OpStore %18415 %8654 |
| %17256 = OpFunctionCall %13 %3782 %18415 |
| %14512 = OpLoad %13 %3773 |
| %7041 = OpConvertFToS %12 %14512 |
| OpStore %5786 %7041 |
| %23993 = OpFunctionCall %13 %3836 %5786 |
| %9180 = OpFAdd %13 %17256 %23993 |
| %15728 = OpCompositeConstruct %29 %9180 %9180 %9180 %9180 |
| OpStore %4539 %15728 |
| OpReturn |
| OpFunctionEnd |
| %3782 = OpFunction %13 None %204 |
| %6931 = OpFunctionParameter %649 |
| %12220 = OpLabel |
| %4292 = OpVariable %650 Function |
| %4298 = OpVariable %649 Function |
| OpStore %4292 %2572 |
| OpStore %4298 %2571 |
| OpBranch %14924 |
| %14924 = OpLabel |
| OpLoopMerge %8882 %6488 None |
| OpBranch %11857 |
| %11857 = OpLabel |
| %13755 = OpLoad %12 %4298 |
| %22731 = OpLoad %12 %6931 |
| %20007 = OpSLessThan %9 %13755 %22731 |
| OpBranchConditional %20007 %24750 %8882 |
| %24750 = OpLabel |
| %22912 = OpLoad %13 %4292 |
| %19471 = OpFAdd %13 %22912 %252 |
| OpStore %4292 %19471 |
| OpBranch %6488 |
| %6488 = OpLabel |
| %19050 = OpLoad %12 %4298 |
| %8593 = OpIAdd %12 %19050 %2574 |
| OpStore %4298 %8593 |
| OpBranch %14924 |
| %8882 = OpLabel |
| %11601 = OpLoad %13 %4292 |
| OpReturnValue %11601 |
| OpFunctionEnd |
| %3836 = OpFunction %13 None %204 |
| %4408 = OpFunctionParameter %649 |
| %12143 = OpLabel |
| %22102 = OpVariable %649 Function |
| %24151 = OpLoad %12 %4408 |
| %13868 = OpSGreaterThan %9 %24151 %2577 |
| OpSelectionMerge %14966 None |
| OpBranchConditional %13868 %9492 %17416 |
| %9492 = OpLabel |
| %15624 = OpLoad %12 %4408 |
| OpStore %22102 %15624 |
| %17278 = OpFunctionCall %13 %3782 %22102 |
| OpReturnValue %17278 |
| %17416 = OpLabel |
| %19506 = OpLoad %12 %4408 |
| %22773 = OpIMul %12 %19506 %2577 |
| %13472 = OpAccessChain %651 %4201 %2573 |
| %15280 = OpLoad %12 %13472 |
| %18079 = OpAccessChain %651 %4201 %2576 |
| %15199 = OpLoad %12 %18079 |
| %9343 = OpIMul %12 %15280 %15199 |
| %11462 = OpIAdd %12 %22773 %9343 |
| %11885 = OpAccessChain %651 %4201 %2570 |
| %21176 = OpLoad %12 %11885 |
| %10505 = OpIAdd %12 %11462 %21176 |
| %14626 = OpConvertSToF %13 %10505 |
| OpReturnValue %14626 |
| %14966 = OpLabel |
| OpUnreachable |
| OpFunctionEnd |
| )"; |
| |
| SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); |
| SetDisassembleOptions(SPV_BINARY_TO_TEXT_OPTION_NO_HEADER); |
| SinglePassRunAndCheck<CanonicalizeIdsPass>(before, after, false, false); |
| } |
| |
| // ported from remap.similar_1b.everything.frag |
| TEST_F(CanonicalizeIdsTest, remap_similar_1b) { |
| const std::string before = |
| R"(OpCapability Shader |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint Fragment %4 "main" %58 %78 %80 |
| OpExecutionMode %4 OriginUpperLeft |
| OpSource GLSL 450 |
| OpName %4 "main" |
| OpName %11 "Test1(i1;" |
| OpName %10 "bound" |
| OpName %14 "Test2(i1;" |
| OpName %13 "bound" |
| OpName %17 "r" |
| OpName %19 "x" |
| OpName %49 "param" |
| OpName %58 "ini4" |
| OpName %78 "outf4" |
| OpName %80 "inf" |
| OpName %83 "param" |
| OpName %87 "param" |
| OpDecorate %58 Flat |
| OpDecorate %58 Location 0 |
| OpDecorate %78 Location 0 |
| OpDecorate %80 Location 1 |
| %2 = OpTypeVoid |
| %3 = OpTypeFunction %2 |
| %6 = OpTypeInt 32 1 |
| %7 = OpTypePointer Function %6 |
| %8 = OpTypeFloat 32 |
| %9 = OpTypeFunction %8 %7 |
| %16 = OpTypePointer Function %8 |
| %18 = OpConstant %8 0 |
| %20 = OpConstant %6 0 |
| %28 = OpTypeBool |
| %30 = OpConstant %8 0.5 |
| %34 = OpConstant %6 1 |
| %36 = OpConstant %8 0.200000003 |
| %43 = OpConstant %6 2 |
| %54 = OpConstant %6 4 |
| %56 = OpTypeVector %6 4 |
| %57 = OpTypePointer Input %56 |
| %58 = OpVariable %57 Input |
| %59 = OpTypeInt 32 0 |
| %60 = OpConstant %59 1 |
| %61 = OpTypePointer Input %6 |
| %64 = OpConstant %59 2 |
| %69 = OpConstant %59 0 |
| %76 = OpTypeVector %8 4 |
| %77 = OpTypePointer Output %76 |
| %78 = OpVariable %77 Output |
| %79 = OpTypePointer Input %8 |
| %80 = OpVariable %79 Input |
| %4 = OpFunction %2 None %3 |
| %5 = OpLabel |
| %83 = OpVariable %7 Function |
| %87 = OpVariable %7 Function |
| %81 = OpLoad %8 %80 |
| %82 = OpConvertFToS %6 %81 |
| OpStore %83 %82 |
| %84 = OpFunctionCall %8 %11 %83 |
| %85 = OpLoad %8 %80 |
| %86 = OpConvertFToS %6 %85 |
| OpStore %87 %86 |
| %88 = OpFunctionCall %8 %14 %87 |
| %89 = OpFAdd %8 %84 %88 |
| %90 = OpCompositeConstruct %76 %89 %89 %89 %89 |
| OpStore %78 %90 |
| OpReturn |
| OpFunctionEnd |
| %11 = OpFunction %8 None %9 |
| %10 = OpFunctionParameter %7 |
| %12 = OpLabel |
| %17 = OpVariable %16 Function |
| %19 = OpVariable %7 Function |
| OpStore %17 %18 |
| OpStore %19 %20 |
| OpBranch %21 |
| %21 = OpLabel |
| OpLoopMerge %23 %24 None |
| OpBranch %25 |
| %25 = OpLabel |
| %26 = OpLoad %6 %19 |
| %27 = OpLoad %6 %10 |
| %29 = OpSLessThan %28 %26 %27 |
| OpBranchConditional %29 %22 %23 |
| %22 = OpLabel |
| %31 = OpLoad %8 %17 |
| %32 = OpFAdd %8 %31 %30 |
| OpStore %17 %32 |
| OpBranch %24 |
| %24 = OpLabel |
| %33 = OpLoad %6 %19 |
| %35 = OpIAdd %6 %33 %34 |
| OpStore %19 %35 |
| OpBranch %21 |
| %23 = OpLabel |
| %37 = OpLoad %8 %17 |
| %38 = OpFAdd %8 %37 %36 |
| OpStore %17 %38 |
| %39 = OpLoad %8 %17 |
| OpReturnValue %39 |
| OpFunctionEnd |
| %14 = OpFunction %8 None %9 |
| %13 = OpFunctionParameter %7 |
| %15 = OpLabel |
| %49 = OpVariable %7 Function |
| %42 = OpLoad %6 %13 |
| %44 = OpSGreaterThan %28 %42 %43 |
| OpSelectionMerge %46 None |
| OpBranchConditional %44 %45 %52 |
| %45 = OpLabel |
| %47 = OpLoad %6 %13 |
| %48 = OpIMul %6 %47 %43 |
| OpStore %49 %48 |
| %50 = OpFunctionCall %8 %11 %49 |
| OpReturnValue %50 |
| %52 = OpLabel |
| %53 = OpLoad %6 %13 |
| %55 = OpIMul %6 %53 %54 |
| %62 = OpAccessChain %61 %58 %60 |
| %63 = OpLoad %6 %62 |
| %65 = OpAccessChain %61 %58 %64 |
| %66 = OpLoad %6 %65 |
| %67 = OpIMul %6 %63 %66 |
| %68 = OpIAdd %6 %55 %67 |
| %70 = OpAccessChain %61 %58 %69 |
| %71 = OpLoad %6 %70 |
| %72 = OpIAdd %6 %68 %71 |
| %73 = OpConvertSToF %8 %72 |
| OpReturnValue %73 |
| %46 = OpLabel |
| OpUnreachable |
| OpFunctionEnd |
| )"; |
| |
| const std::string after = |
| R"(OpCapability Shader |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint Fragment %5663 "main" %4201 %4539 %3773 |
| OpExecutionMode %5663 OriginUpperLeft |
| OpSource GLSL 450 |
| OpName %5663 "main" |
| OpName %3782 "Test1(i1;" |
| OpName %6931 "bound" |
| OpName %3836 "Test2(i1;" |
| OpName %4408 "bound" |
| OpName %4292 "r" |
| OpName %4298 "x" |
| OpName %22102 "param" |
| OpName %4201 "ini4" |
| OpName %4539 "outf4" |
| OpName %3773 "inf" |
| OpName %18415 "param" |
| OpName %5786 "param" |
| OpDecorate %4201 Flat |
| OpDecorate %4201 Location 0 |
| OpDecorate %4539 Location 0 |
| OpDecorate %3773 Location 1 |
| %8 = OpTypeVoid |
| %1282 = OpTypeFunction %8 |
| %12 = OpTypeInt 32 1 |
| %649 = OpTypePointer Function %12 |
| %13 = OpTypeFloat 32 |
| %204 = OpTypeFunction %13 %649 |
| %650 = OpTypePointer Function %13 |
| %2572 = OpConstant %13 0 |
| %2571 = OpConstant %12 0 |
| %9 = OpTypeBool |
| %252 = OpConstant %13 0.5 |
| %2574 = OpConstant %12 1 |
| %2821 = OpConstant %13 0.200000003 |
| %2577 = OpConstant %12 2 |
| %2583 = OpConstant %12 4 |
| %26 = OpTypeVector %12 4 |
| %663 = OpTypePointer Input %26 |
| %4201 = OpVariable %663 Input |
| %11 = OpTypeInt 32 0 |
| %2573 = OpConstant %11 1 |
| %651 = OpTypePointer Input %12 |
| %2576 = OpConstant %11 2 |
| %2570 = OpConstant %11 0 |
| %29 = OpTypeVector %13 4 |
| %666 = OpTypePointer Output %29 |
| %4539 = OpVariable %666 Output |
| %652 = OpTypePointer Input %13 |
| %3773 = OpVariable %652 Input |
| %5663 = OpFunction %8 None %1282 |
| %24915 = OpLabel |
| %18415 = OpVariable %649 Function |
| %5786 = OpVariable %649 Function |
| %8366 = OpLoad %13 %3773 |
| %8654 = OpConvertFToS %12 %8366 |
| OpStore %18415 %8654 |
| %17256 = OpFunctionCall %13 %3782 %18415 |
| %14512 = OpLoad %13 %3773 |
| %7041 = OpConvertFToS %12 %14512 |
| OpStore %5786 %7041 |
| %23993 = OpFunctionCall %13 %3836 %5786 |
| %9180 = OpFAdd %13 %17256 %23993 |
| %15728 = OpCompositeConstruct %29 %9180 %9180 %9180 %9180 |
| OpStore %4539 %15728 |
| OpReturn |
| OpFunctionEnd |
| %3782 = OpFunction %13 None %204 |
| %6931 = OpFunctionParameter %649 |
| %12220 = OpLabel |
| %4292 = OpVariable %650 Function |
| %4298 = OpVariable %649 Function |
| OpStore %4292 %2572 |
| OpStore %4298 %2571 |
| OpBranch %14924 |
| %14924 = OpLabel |
| OpLoopMerge %6507 %6488 None |
| OpBranch %11857 |
| %11857 = OpLabel |
| %13755 = OpLoad %12 %4298 |
| %22731 = OpLoad %12 %6931 |
| %20007 = OpSLessThan %9 %13755 %22731 |
| OpBranchConditional %20007 %24750 %6507 |
| %24750 = OpLabel |
| %22912 = OpLoad %13 %4292 |
| %19471 = OpFAdd %13 %22912 %252 |
| OpStore %4292 %19471 |
| OpBranch %6488 |
| %6488 = OpLabel |
| %19050 = OpLoad %12 %4298 |
| %8593 = OpIAdd %12 %19050 %2574 |
| OpStore %4298 %8593 |
| OpBranch %14924 |
| %6507 = OpLabel |
| %18877 = OpLoad %13 %4292 |
| %15899 = OpFAdd %13 %18877 %2821 |
| OpStore %4292 %15899 |
| %20342 = OpLoad %13 %4292 |
| OpReturnValue %20342 |
| OpFunctionEnd |
| %3836 = OpFunction %13 None %204 |
| %4408 = OpFunctionParameter %649 |
| %12143 = OpLabel |
| %22102 = OpVariable %649 Function |
| %24151 = OpLoad %12 %4408 |
| %13868 = OpSGreaterThan %9 %24151 %2577 |
| OpSelectionMerge %14966 None |
| OpBranchConditional %13868 %10822 %17416 |
| %10822 = OpLabel |
| %22680 = OpLoad %12 %4408 |
| %23216 = OpIMul %12 %22680 %2577 |
| OpStore %22102 %23216 |
| %7042 = OpFunctionCall %13 %3782 %22102 |
| OpReturnValue %7042 |
| %17416 = OpLabel |
| %19506 = OpLoad %12 %4408 |
| %22773 = OpIMul %12 %19506 %2583 |
| %13472 = OpAccessChain %651 %4201 %2573 |
| %15280 = OpLoad %12 %13472 |
| %18079 = OpAccessChain %651 %4201 %2576 |
| %15199 = OpLoad %12 %18079 |
| %9343 = OpIMul %12 %15280 %15199 |
| %11462 = OpIAdd %12 %22773 %9343 |
| %11885 = OpAccessChain %651 %4201 %2570 |
| %21176 = OpLoad %12 %11885 |
| %10505 = OpIAdd %12 %11462 %21176 |
| %14626 = OpConvertSToF %13 %10505 |
| OpReturnValue %14626 |
| %14966 = OpLabel |
| OpUnreachable |
| OpFunctionEnd |
| )"; |
| |
| SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); |
| SetDisassembleOptions(SPV_BINARY_TO_TEXT_OPTION_NO_HEADER); |
| SinglePassRunAndCheck<CanonicalizeIdsPass>(before, after, false, false); |
| } |
| |
| // ported from remap.specconst.comp |
| TEST_F(CanonicalizeIdsTest, remap_specconst) { |
| const std::string before = |
| R"(OpCapability Shader |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint GLCompute %4 "main" |
| OpExecutionMode %4 LocalSize 1 1 1 |
| OpSource GLSL 450 |
| OpName %4 "main" |
| OpDecorate %7 SpecId 0 |
| OpDecorate %8 SpecId 1 |
| OpDecorate %9 SpecId 2 |
| OpDecorate %11 BuiltIn WorkgroupSize |
| %2 = OpTypeVoid |
| %3 = OpTypeFunction %2 |
| %6 = OpTypeInt 32 0 |
| %7 = OpSpecConstant %6 1 |
| %8 = OpSpecConstant %6 1 |
| %9 = OpSpecConstant %6 1 |
| %10 = OpTypeVector %6 3 |
| %11 = OpSpecConstantComposite %10 %7 %8 %9 |
| %14 = OpSpecConstantOp %6 CompositeExtract %11 0 |
| %16 = OpSpecConstantOp %6 CompositeExtract %11 1 |
| %18 = OpSpecConstantOp %6 CompositeExtract %11 2 |
| %19 = OpSpecConstantOp %6 IMul %16 %18 |
| %20 = OpSpecConstantOp %6 IAdd %14 %19 |
| %4 = OpFunction %2 None %3 |
| %5 = OpLabel |
| OpReturn |
| OpFunctionEnd |
| )"; |
| |
| const std::string after = |
| R"(OpCapability Shader |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint GLCompute %5663 "main" |
| OpExecutionMode %5663 LocalSize 1 1 1 |
| OpSource GLSL 450 |
| OpName %5663 "main" |
| OpDecorate %2 SpecId 0 |
| OpDecorate %3 SpecId 1 |
| OpDecorate %4 SpecId 2 |
| OpDecorate %5 BuiltIn WorkgroupSize |
| %8 = OpTypeVoid |
| %1282 = OpTypeFunction %8 |
| %11 = OpTypeInt 32 0 |
| %2 = OpSpecConstant %11 1 |
| %3 = OpSpecConstant %11 1 |
| %4 = OpSpecConstant %11 1 |
| %20 = OpTypeVector %11 3 |
| %5 = OpSpecConstantComposite %20 %2 %3 %4 |
| %6 = OpSpecConstantOp %11 CompositeExtract %5 0 |
| %7 = OpSpecConstantOp %11 CompositeExtract %5 1 |
| %9 = OpSpecConstantOp %11 CompositeExtract %5 2 |
| %10 = OpSpecConstantOp %11 IMul %7 %9 |
| %12 = OpSpecConstantOp %11 IAdd %6 %10 |
| %5663 = OpFunction %8 None %1282 |
| %16103 = OpLabel |
| OpReturn |
| OpFunctionEnd |
| )"; |
| |
| SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); |
| SetDisassembleOptions(SPV_BINARY_TO_TEXT_OPTION_NO_HEADER); |
| SinglePassRunAndCheck<CanonicalizeIdsPass>(before, after, false, false); |
| } |
| |
| // ported from remap.switch.everything.frag |
| TEST_F(CanonicalizeIdsTest, remap_switch) { |
| const std::string before = |
| R"(OpCapability Shader |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint Fragment %4 "main" %9 %23 |
| OpExecutionMode %4 OriginUpperLeft |
| OpSource GLSL 450 |
| OpName %4 "main" |
| OpName %9 "in0" |
| OpName %23 "FragColor" |
| OpDecorate %9 Location 0 |
| OpDecorate %23 RelaxedPrecision |
| OpDecorate %23 Location 0 |
| OpDecorate %29 RelaxedPrecision |
| OpDecorate %36 RelaxedPrecision |
| OpDecorate %43 RelaxedPrecision |
| %2 = OpTypeVoid |
| %3 = OpTypeFunction %2 |
| %6 = OpTypeFloat 32 |
| %7 = OpTypeVector %6 4 |
| %8 = OpTypePointer Input %7 |
| %9 = OpVariable %8 Input |
| %10 = OpTypeInt 32 0 |
| %11 = OpConstant %10 3 |
| %12 = OpTypePointer Input %6 |
| %15 = OpTypeInt 32 1 |
| %22 = OpTypePointer Output %7 |
| %23 = OpVariable %22 Output |
| %24 = OpConstant %10 0 |
| %27 = OpConstant %6 0 |
| %31 = OpConstant %10 1 |
| %34 = OpConstant %6 1 |
| %38 = OpConstant %10 2 |
| %41 = OpConstant %6 2 |
| %45 = OpConstant %6 -1 |
| %46 = OpConstantComposite %7 %45 %45 %45 %45 |
| %4 = OpFunction %2 None %3 |
| %5 = OpLabel |
| %13 = OpAccessChain %12 %9 %11 |
| %14 = OpLoad %6 %13 |
| %16 = OpConvertFToS %15 %14 |
| OpSelectionMerge %21 None |
| OpSwitch %16 %20 0 %17 1 %18 2 %19 |
| %20 = OpLabel |
| OpStore %23 %46 |
| OpBranch %21 |
| %17 = OpLabel |
| %25 = OpAccessChain %12 %9 %24 |
| %26 = OpLoad %6 %25 |
| %28 = OpFAdd %6 %26 %27 |
| %29 = OpCompositeConstruct %7 %28 %28 %28 %28 |
| OpStore %23 %29 |
| OpBranch %21 |
| %18 = OpLabel |
| %32 = OpAccessChain %12 %9 %31 |
| %33 = OpLoad %6 %32 |
| %35 = OpFAdd %6 %33 %34 |
| %36 = OpCompositeConstruct %7 %35 %35 %35 %35 |
| OpStore %23 %36 |
| OpBranch %21 |
| %19 = OpLabel |
| %39 = OpAccessChain %12 %9 %38 |
| %40 = OpLoad %6 %39 |
| %42 = OpFAdd %6 %40 %41 |
| %43 = OpCompositeConstruct %7 %42 %42 %42 %42 |
| OpStore %23 %43 |
| OpBranch %21 |
| %21 = OpLabel |
| OpReturn |
| OpFunctionEnd |
| )"; |
| |
| const std::string after = |
| R"(OpCapability Shader |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint Fragment %5663 "main" %3719 %3994 |
| OpExecutionMode %5663 OriginUpperLeft |
| OpSource GLSL 450 |
| OpName %5663 "main" |
| OpName %3719 "in0" |
| OpName %3994 "FragColor" |
| OpDecorate %3719 Location 0 |
| OpDecorate %3994 RelaxedPrecision |
| OpDecorate %3994 Location 0 |
| OpDecorate %12421 RelaxedPrecision |
| OpDecorate %12422 RelaxedPrecision |
| OpDecorate %12423 RelaxedPrecision |
| %8 = OpTypeVoid |
| %1282 = OpTypeFunction %8 |
| %13 = OpTypeFloat 32 |
| %29 = OpTypeVector %13 4 |
| %666 = OpTypePointer Input %29 |
| %3719 = OpVariable %666 Input |
| %11 = OpTypeInt 32 0 |
| %2579 = OpConstant %11 3 |
| %650 = OpTypePointer Input %13 |
| %12 = OpTypeInt 32 1 |
| %667 = OpTypePointer Output %29 |
| %3994 = OpVariable %667 Output |
| %2570 = OpConstant %11 0 |
| %2572 = OpConstant %13 0 |
| %2573 = OpConstant %11 1 |
| %138 = OpConstant %13 1 |
| %2576 = OpConstant %11 2 |
| %24 = OpConstant %13 2 |
| %833 = OpConstant %13 -1 |
| %1284 = OpConstantComposite %29 %833 %833 %833 %833 |
| %5663 = OpFunction %8 None %1282 |
| %23915 = OpLabel |
| %7984 = OpAccessChain %650 %3719 %2579 |
| %11376 = OpLoad %13 %7984 |
| %16859 = OpConvertFToS %12 %11376 |
| OpSelectionMerge %19578 None |
| OpSwitch %16859 %15971 0 %8158 1 %8159 2 %8160 |
| %15971 = OpLabel |
| OpStore %3994 %1284 |
| OpBranch %19578 |
| %8158 = OpLabel |
| %21848 = OpAccessChain %650 %3719 %2570 |
| %23987 = OpLoad %13 %21848 |
| %19989 = OpFAdd %13 %23987 %2572 |
| %12421 = OpCompositeConstruct %29 %19989 %19989 %19989 %19989 |
| OpStore %3994 %12421 |
| OpBranch %19578 |
| %8159 = OpLabel |
| %21849 = OpAccessChain %650 %3719 %2573 |
| %23988 = OpLoad %13 %21849 |
| %19990 = OpFAdd %13 %23988 %138 |
| %12422 = OpCompositeConstruct %29 %19990 %19990 %19990 %19990 |
| OpStore %3994 %12422 |
| OpBranch %19578 |
| %8160 = OpLabel |
| %21850 = OpAccessChain %650 %3719 %2576 |
| %23989 = OpLoad %13 %21850 |
| %19991 = OpFAdd %13 %23989 %24 |
| %12423 = OpCompositeConstruct %29 %19991 %19991 %19991 %19991 |
| OpStore %3994 %12423 |
| OpBranch %19578 |
| %19578 = OpLabel |
| OpReturn |
| OpFunctionEnd |
| )"; |
| |
| SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); |
| SetDisassembleOptions(SPV_BINARY_TO_TEXT_OPTION_NO_HEADER); |
| SinglePassRunAndCheck<CanonicalizeIdsPass>(before, after, false, false); |
| } |
| |
| // ported from remap.uniformarray.everything.frag |
| TEST_F(CanonicalizeIdsTest, remap_uniformarray) { |
| const std::string before = |
| R"(OpCapability Shader |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint Fragment %4 "main" %14 %25 %43 %54 |
| OpExecutionMode %4 OriginUpperLeft |
| OpSource GLSL 140 |
| OpName %4 "main" |
| OpName %9 "texColor" |
| OpName %14 "color" |
| OpName %25 "inColor" |
| OpName %43 "alpha" |
| OpName %54 "gl_FragColor" |
| OpDecorate %14 Location 1 |
| OpDecorate %25 Location 0 |
| OpDecorate %43 Location 7 |
| OpDecorate %54 Location 0 |
| %2 = OpTypeVoid |
| %3 = OpTypeFunction %2 |
| %6 = OpTypeFloat 32 |
| %7 = OpTypeVector %6 4 |
| %8 = OpTypePointer Function %7 |
| %10 = OpTypeInt 32 0 |
| %11 = OpConstant %10 6 |
| %12 = OpTypeArray %7 %11 |
| %13 = OpTypePointer Input %12 |
| %14 = OpVariable %13 Input |
| %15 = OpTypeInt 32 1 |
| %16 = OpConstant %15 1 |
| %17 = OpTypePointer Input %7 |
| %23 = OpTypeVector %6 3 |
| %24 = OpTypePointer Input %23 |
| %25 = OpVariable %24 Input |
| %30 = OpConstant %10 0 |
| %31 = OpTypePointer Function %6 |
| %34 = OpConstant %10 1 |
| %37 = OpConstant %10 2 |
| %40 = OpConstant %10 16 |
| %41 = OpTypeArray %6 %40 |
| %42 = OpTypePointer Input %41 |
| %43 = OpVariable %42 Input |
| %44 = OpConstant %15 12 |
| %45 = OpTypePointer Input %6 |
| %48 = OpConstant %10 3 |
| %53 = OpTypePointer Output %7 |
| %54 = OpVariable %53 Output |
| %4 = OpFunction %2 None %3 |
| %5 = OpLabel |
| %9 = OpVariable %8 Function |
| %18 = OpAccessChain %17 %14 %16 |
| %19 = OpLoad %7 %18 |
| %20 = OpAccessChain %17 %14 %16 |
| %21 = OpLoad %7 %20 |
| %22 = OpFAdd %7 %19 %21 |
| OpStore %9 %22 |
| %26 = OpLoad %23 %25 |
| %27 = OpLoad %7 %9 |
| %28 = OpVectorShuffle %23 %27 %27 0 1 2 |
| %29 = OpFAdd %23 %28 %26 |
| %32 = OpAccessChain %31 %9 %30 |
| %33 = OpCompositeExtract %6 %29 0 |
| OpStore %32 %33 |
| %35 = OpAccessChain %31 %9 %34 |
| %36 = OpCompositeExtract %6 %29 1 |
| OpStore %35 %36 |
| %38 = OpAccessChain %31 %9 %37 |
| %39 = OpCompositeExtract %6 %29 2 |
| OpStore %38 %39 |
| %46 = OpAccessChain %45 %43 %44 |
| %47 = OpLoad %6 %46 |
| %49 = OpAccessChain %31 %9 %48 |
| %50 = OpLoad %6 %49 |
| %51 = OpFAdd %6 %50 %47 |
| %52 = OpAccessChain %31 %9 %48 |
| OpStore %52 %51 |
| %55 = OpLoad %7 %9 |
| OpStore %54 %55 |
| OpReturn |
| OpFunctionEnd |
| )"; |
| |
| const std::string after = |
| R"(OpCapability Shader |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint Fragment %5663 "main" %3608 %4957 %4339 %5139 |
| OpExecutionMode %5663 OriginUpperLeft |
| OpSource GLSL 140 |
| OpName %5663 "main" |
| OpName %4902 "texColor" |
| OpName %3608 "color" |
| OpName %4957 "inColor" |
| OpName %4339 "alpha" |
| OpName %5139 "gl_FragColor" |
| OpDecorate %3608 Location 1 |
| OpDecorate %4957 Location 0 |
| OpDecorate %4339 Location 7 |
| OpDecorate %5139 Location 0 |
| %8 = OpTypeVoid |
| %1282 = OpTypeFunction %8 |
| %13 = OpTypeFloat 32 |
| %29 = OpTypeVector %13 4 |
| %666 = OpTypePointer Function %29 |
| %11 = OpTypeInt 32 0 |
| %2588 = OpConstant %11 6 |
| %740 = OpTypeArray %29 %2588 |
| %1377 = OpTypePointer Input %740 |
| %3608 = OpVariable %1377 Input |
| %12 = OpTypeInt 32 1 |
| %2574 = OpConstant %12 1 |
| %667 = OpTypePointer Input %29 |
| %24 = OpTypeVector %13 3 |
| %661 = OpTypePointer Input %24 |
| %4957 = OpVariable %661 Input |
| %2570 = OpConstant %11 0 |
| %650 = OpTypePointer Function %13 |
| %2573 = OpConstant %11 1 |
| %2576 = OpConstant %11 2 |
| %2618 = OpConstant %11 16 |
| %709 = OpTypeArray %13 %2618 |
| %1346 = OpTypePointer Input %709 |
| %4339 = OpVariable %1346 Input |
| %2607 = OpConstant %12 12 |
| %651 = OpTypePointer Input %13 |
| %2579 = OpConstant %11 3 |
| %668 = OpTypePointer Output %29 |
| %5139 = OpVariable %668 Output |
| %5663 = OpFunction %8 None %1282 |
| %25029 = OpLabel |
| %4902 = OpVariable %666 Function |
| %10645 = OpAccessChain %667 %3608 %2574 |
| %8181 = OpLoad %29 %10645 |
| %21370 = OpAccessChain %667 %3608 %2574 |
| %11355 = OpLoad %29 %21370 |
| %23084 = OpFAdd %29 %8181 %11355 |
| OpStore %4902 %23084 |
| %21218 = OpLoad %24 %4957 |
| %13695 = OpLoad %29 %4902 |
| %23959 = OpVectorShuffle %24 %13695 %13695 0 1 2 |
| %14937 = OpFAdd %24 %23959 %21218 |
| %15653 = OpAccessChain %650 %4902 %2570 |
| %21354 = OpCompositeExtract %13 %14937 0 |
| OpStore %15653 %21354 |
| %16378 = OpAccessChain %650 %4902 %2573 |
| %15746 = OpCompositeExtract %13 %14937 1 |
| OpStore %16378 %15746 |
| %16379 = OpAccessChain %650 %4902 %2576 |
| %15747 = OpCompositeExtract %13 %14937 2 |
| OpStore %16379 %15747 |
| %19895 = OpAccessChain %651 %4339 %2607 |
| %7372 = OpLoad %13 %19895 |
| %21371 = OpAccessChain %650 %4902 %2579 |
| %11412 = OpLoad %13 %21371 |
| %22584 = OpFAdd %13 %11412 %7372 |
| %17318 = OpAccessChain %650 %4902 %2579 |
| OpStore %17318 %22584 |
| %17934 = OpLoad %29 %4902 |
| OpStore %5139 %17934 |
| OpReturn |
| OpFunctionEnd |
| )"; |
| |
| SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); |
| SetDisassembleOptions(SPV_BINARY_TO_TEXT_OPTION_NO_HEADER); |
| SinglePassRunAndCheck<CanonicalizeIdsPass>(before, after, false, false); |
| } |
| |
| } // namespace |
| } // namespace opt |
| } // namespace spvtools |