| #!amber |
| |
| # Copyright 2020 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. |
| |
| |
| # A test for a bug found by the GraphicsFuzz project. |
| |
| # Short description: Three shaders with diff: added mutate pointer |
| |
| # The test renders three images using semantically equivalent shaders, and then |
| # checks that the images are similar. |
| # The test passes because the shaders have the same semantics and so the images |
| # should be the same. |
| |
| SHADER vertex reference_vertex_shader PASSTHROUGH |
| |
| SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 |
| ; SPIR-V |
| ; Version: 1.0 |
| ; Generator: Khronos Glslang Reference Front End; 7 |
| ; Bound: 229 |
| ; Schema: 0 |
| OpCapability Shader |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint Fragment %4 "main" %53 %138 |
| OpExecutionMode %4 OriginUpperLeft |
| OpSource ESSL 320 |
| OpName %4 "main" |
| OpName %53 "gl_FragCoord" |
| OpName %56 "buf0" |
| OpMemberName %56 0 "resolution" |
| OpName %58 "" |
| OpName %138 "_GLF_color" |
| OpName %163 "indexable" |
| OpDecorate %53 BuiltIn FragCoord |
| OpMemberDecorate %56 0 Offset 0 |
| OpDecorate %56 Block |
| OpDecorate %58 DescriptorSet 0 |
| OpDecorate %58 Binding 0 |
| OpDecorate %138 Location 0 |
| %2 = OpTypeVoid |
| %3 = OpTypeFunction %2 |
| %6 = OpTypeInt 32 1 |
| %7 = OpTypeVector %6 2 |
| %13 = OpTypeInt 32 0 |
| %18 = OpConstant %6 0 |
| %19 = OpTypeBool |
| %26 = OpConstant %6 1 |
| %38 = OpConstant %6 2 |
| %47 = OpTypeFloat 32 |
| %48 = OpTypeVector %47 2 |
| %51 = OpTypeVector %47 4 |
| %52 = OpTypePointer Input %51 |
| %53 = OpVariable %52 Input |
| %56 = OpTypeStruct %48 |
| %57 = OpTypePointer Uniform %56 |
| %58 = OpVariable %57 Uniform |
| %59 = OpTypePointer Uniform %48 |
| %67 = OpConstant %47 8 |
| %78 = OpConstant %6 5 |
| %82 = OpConstant %6 10 |
| %95 = OpConstant %6 8 |
| %107 = OpConstant %6 100 |
| %130 = OpConstant %6 15 |
| %132 = OpConstant %6 16 |
| %137 = OpTypePointer Output %51 |
| %138 = OpVariable %137 Output |
| %139 = OpConstant %13 16 |
| %140 = OpTypeArray %51 %139 |
| %141 = OpConstant %47 0 |
| %142 = OpConstant %47 1 |
| %143 = OpConstantComposite %51 %141 %141 %141 %142 |
| %144 = OpConstant %47 0.5 |
| %145 = OpConstantComposite %51 %144 %141 %141 %142 |
| %146 = OpConstantComposite %51 %141 %144 %141 %142 |
| %147 = OpConstantComposite %51 %144 %144 %141 %142 |
| %148 = OpConstantComposite %51 %141 %141 %144 %142 |
| %149 = OpConstantComposite %51 %144 %141 %144 %142 |
| %150 = OpConstantComposite %51 %141 %144 %144 %142 |
| %151 = OpConstantComposite %51 %144 %144 %144 %142 |
| %152 = OpConstantComposite %51 %142 %141 %141 %142 |
| %153 = OpConstantComposite %51 %141 %142 %141 %142 |
| %154 = OpConstantComposite %51 %142 %142 %141 %142 |
| %155 = OpConstantComposite %51 %141 %141 %142 %142 |
| %156 = OpConstantComposite %51 %142 %141 %142 %142 |
| %157 = OpConstantComposite %51 %141 %142 %142 %142 |
| %158 = OpConstantComposite %51 %142 %142 %142 %142 |
| %159 = OpConstantComposite %140 %143 %145 %146 %147 %148 %149 %150 %151 %143 %152 %153 %154 %155 %156 %157 %158 |
| %162 = OpTypePointer Function %140 |
| %164 = OpTypePointer Function %51 |
| %4 = OpFunction %2 None %3 |
| %5 = OpLabel |
| %163 = OpVariable %162 Function |
| %54 = OpLoad %51 %53 |
| %55 = OpVectorShuffle %48 %54 %54 0 1 |
| %60 = OpAccessChain %59 %58 %18 |
| %61 = OpLoad %48 %60 |
| %62 = OpFDiv %48 %55 %61 |
| %66 = OpCompositeExtract %47 %62 0 |
| %68 = OpFMul %47 %66 %67 |
| %69 = OpConvertFToS %6 %68 |
| %71 = OpCompositeExtract %47 %62 1 |
| %72 = OpFMul %47 %71 %67 |
| %73 = OpConvertFToS %6 %72 |
| %79 = OpBitwiseAnd %6 %69 %78 |
| %83 = OpBitwiseAnd %6 %73 %82 |
| %84 = OpBitwiseOr %6 %79 %83 |
| %88 = OpBitwiseAnd %6 %73 %78 |
| %91 = OpBitwiseAnd %6 %69 %82 |
| %92 = OpBitwiseOr %6 %88 %91 |
| %96 = OpIMul %6 %84 %95 |
| %98 = OpIAdd %6 %96 %92 |
| %99 = OpCompositeConstruct %7 %98 %18 |
| OpBranch %101 |
| %101 = OpLabel |
| %224 = OpPhi %7 %99 %5 %214 %104 |
| %193 = OpPhi %6 %18 %5 %113 %104 |
| %108 = OpSLessThan %19 %193 %107 |
| OpLoopMerge %103 %104 None |
| OpBranchConditional %108 %102 %103 |
| %102 = OpLabel |
| %170 = OpCompositeExtract %6 %224 0 |
| %171 = OpSGreaterThan %19 %170 %18 |
| OpSelectionMerge %176 None |
| OpBranchConditional %171 %172 %176 |
| %172 = OpLabel |
| %174 = OpCompositeExtract %6 %224 1 |
| %175 = OpISub %6 %174 %26 |
| %206 = OpCompositeInsert %7 %175 %224 1 |
| OpBranch %176 |
| %176 = OpLabel |
| %227 = OpPhi %7 %224 %102 %206 %172 |
| %178 = OpCompositeExtract %6 %227 0 |
| %179 = OpSLessThan %19 %178 %18 |
| OpSelectionMerge %184 None |
| OpBranchConditional %179 %180 %184 |
| %180 = OpLabel |
| %182 = OpCompositeExtract %6 %227 1 |
| %183 = OpIAdd %6 %182 %26 |
| %210 = OpCompositeInsert %7 %183 %227 1 |
| OpBranch %184 |
| %184 = OpLabel |
| %228 = OpPhi %7 %227 %176 %210 %180 |
| %186 = OpCompositeExtract %6 %228 1 |
| %187 = OpSDiv %6 %186 %38 |
| %189 = OpCompositeExtract %6 %228 0 |
| %190 = OpIAdd %6 %189 %187 |
| %214 = OpCompositeInsert %7 %190 %228 0 |
| OpBranch %104 |
| %104 = OpLabel |
| %113 = OpIAdd %6 %193 %26 |
| OpBranch %101 |
| %103 = OpLabel |
| %115 = OpCompositeExtract %6 %224 0 |
| %116 = OpSLessThan %19 %115 %18 |
| OpSelectionMerge %118 None |
| OpBranchConditional %116 %117 %118 |
| %117 = OpLabel |
| %121 = OpSNegate %6 %115 |
| %218 = OpCompositeInsert %7 %121 %224 0 |
| OpBranch %118 |
| %118 = OpLabel |
| %226 = OpPhi %7 %224 %103 %218 %117 |
| OpBranch %123 |
| %123 = OpLabel |
| %225 = OpPhi %7 %226 %118 %222 %124 |
| %129 = OpCompositeExtract %6 %225 0 |
| %131 = OpSGreaterThan %19 %129 %130 |
| OpLoopMerge %125 %124 None |
| OpBranchConditional %131 %124 %125 |
| %124 = OpLabel |
| %135 = OpISub %6 %129 %132 |
| %222 = OpCompositeInsert %7 %135 %225 0 |
| OpBranch %123 |
| %125 = OpLabel |
| OpStore %163 %159 |
| %165 = OpAccessChain %164 %163 %129 |
| %166 = OpLoad %51 %165 |
| OpStore %138 %166 |
| OpReturn |
| OpFunctionEnd |
| END |
| |
| # uniforms for reference |
| |
| # resolution |
| BUFFER reference_resolution DATA_TYPE vec2<float> STD140 DATA |
| 256.0 256.0 |
| END |
| |
| BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM |
| |
| PIPELINE graphics reference_pipeline |
| ATTACH reference_vertex_shader |
| ATTACH reference_fragment_shader |
| FRAMEBUFFER_SIZE 256 256 |
| BIND BUFFER reference_framebuffer AS color LOCATION 0 |
| BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0 |
| END |
| CLEAR_COLOR reference_pipeline 0 0 0 255 |
| |
| CLEAR reference_pipeline |
| RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256 |
| |
| |
| SHADER vertex variant_vertex_shader PASSTHROUGH |
| |
| SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 |
| ; SPIR-V |
| ; Version: 1.0 |
| ; Generator: Khronos Glslang Reference Front End; 7 |
| ; Bound: 549 |
| ; Schema: 0 |
| OpCapability Shader |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint Fragment %4 "main" %53 %138 |
| OpExecutionMode %4 OriginUpperLeft |
| OpSource ESSL 320 |
| OpName %4 "main" |
| OpName %53 "gl_FragCoord" |
| OpName %56 "buf0" |
| OpMemberName %56 0 "resolution" |
| OpName %58 "" |
| OpName %138 "_GLF_color" |
| OpName %163 "indexable" |
| OpDecorate %53 BuiltIn FragCoord |
| OpMemberDecorate %56 0 Offset 0 |
| OpDecorate %56 Block |
| OpDecorate %58 DescriptorSet 0 |
| OpDecorate %58 Binding 0 |
| OpDecorate %138 Location 0 |
| %2 = OpTypeVoid |
| %3 = OpTypeFunction %2 |
| %6 = OpTypeInt 32 1 |
| %7 = OpTypeVector %6 2 |
| %13 = OpTypeInt 32 0 |
| %18 = OpConstant %6 0 |
| %19 = OpTypeBool |
| %26 = OpConstant %6 1 |
| %38 = OpConstant %6 2 |
| %47 = OpTypeFloat 32 |
| %48 = OpTypeVector %47 2 |
| %51 = OpTypeVector %47 4 |
| %52 = OpTypePointer Input %51 |
| %53 = OpVariable %52 Input |
| %56 = OpTypeStruct %48 |
| %57 = OpTypePointer Uniform %56 |
| %58 = OpVariable %57 Uniform |
| %59 = OpTypePointer Uniform %48 |
| %67 = OpConstant %47 8 |
| %78 = OpConstant %6 5 |
| %82 = OpConstant %6 10 |
| %95 = OpConstant %6 8 |
| %107 = OpConstant %6 100 |
| %130 = OpConstant %6 15 |
| %132 = OpConstant %6 16 |
| %137 = OpTypePointer Output %51 |
| %138 = OpVariable %137 Output |
| %139 = OpConstant %13 16 |
| %140 = OpTypeArray %51 %139 |
| %141 = OpConstant %47 0 |
| %142 = OpConstant %47 1 |
| %143 = OpConstantComposite %51 %141 %141 %141 %142 |
| %144 = OpConstant %47 0.5 |
| %145 = OpConstantComposite %51 %144 %141 %141 %142 |
| %146 = OpConstantComposite %51 %141 %144 %141 %142 |
| %147 = OpConstantComposite %51 %144 %144 %141 %142 |
| %148 = OpConstantComposite %51 %141 %141 %144 %142 |
| %149 = OpConstantComposite %51 %144 %141 %144 %142 |
| %150 = OpConstantComposite %51 %141 %144 %144 %142 |
| %151 = OpConstantComposite %51 %144 %144 %144 %142 |
| %152 = OpConstantComposite %51 %142 %141 %141 %142 |
| %153 = OpConstantComposite %51 %141 %142 %141 %142 |
| %154 = OpConstantComposite %51 %142 %142 %141 %142 |
| %155 = OpConstantComposite %51 %141 %141 %142 %142 |
| %156 = OpConstantComposite %51 %142 %141 %142 %142 |
| %157 = OpConstantComposite %51 %141 %142 %142 %142 |
| %158 = OpConstantComposite %51 %142 %142 %142 %142 |
| %159 = OpConstantComposite %140 %143 %145 %146 %147 %148 %149 %150 %151 %143 %152 %153 %154 %155 %156 %157 %158 |
| %162 = OpTypePointer Function %140 |
| %164 = OpTypePointer Function %51 |
| %440 = OpConstant %47 0 |
| %441 = OpConstantComposite %51 %440 %440 %440 %440 |
| %442 = OpConstantComposite %140 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441 |
| %4 = OpFunction %2 None %3 |
| %5 = OpLabel |
| %163 = OpVariable %162 Function |
| %54 = OpLoad %51 %53 |
| %55 = OpVectorShuffle %48 %54 %54 0 1 |
| %60 = OpAccessChain %59 %58 %18 |
| %61 = OpLoad %48 %60 |
| %62 = OpFDiv %48 %55 %61 |
| %66 = OpCompositeExtract %47 %62 0 |
| %68 = OpFMul %47 %66 %67 |
| %69 = OpConvertFToS %6 %68 |
| %330 = OpAccessChain %162 %163 |
| %71 = OpCompositeExtract %47 %62 1 |
| %72 = OpFMul %47 %71 %67 |
| %73 = OpConvertFToS %6 %72 |
| %79 = OpBitwiseAnd %6 %69 %78 |
| %83 = OpBitwiseAnd %6 %73 %82 |
| %84 = OpBitwiseOr %6 %79 %83 |
| %88 = OpBitwiseAnd %6 %73 %78 |
| %91 = OpBitwiseAnd %6 %69 %82 |
| %92 = OpBitwiseOr %6 %88 %91 |
| %96 = OpIMul %6 %84 %95 |
| %98 = OpIAdd %6 %96 %92 |
| %99 = OpCompositeConstruct %7 %98 %18 |
| OpBranch %101 |
| %101 = OpLabel |
| %224 = OpPhi %7 %99 %5 %214 %104 |
| %193 = OpPhi %6 %18 %5 %113 %104 |
| %108 = OpSLessThan %19 %193 %107 |
| OpLoopMerge %103 %104 None |
| OpBranchConditional %108 %102 %103 |
| %102 = OpLabel |
| %170 = OpCompositeExtract %6 %224 0 |
| %171 = OpSGreaterThan %19 %170 %18 |
| OpSelectionMerge %176 None |
| OpBranchConditional %171 %172 %176 |
| %172 = OpLabel |
| %174 = OpCompositeExtract %6 %224 1 |
| %175 = OpISub %6 %174 %26 |
| %206 = OpCompositeInsert %7 %175 %224 1 |
| OpBranch %176 |
| %176 = OpLabel |
| %227 = OpPhi %7 %224 %102 %206 %172 |
| %178 = OpCompositeExtract %6 %227 0 |
| %179 = OpSLessThan %19 %178 %18 |
| OpSelectionMerge %184 None |
| OpBranchConditional %179 %180 %184 |
| %180 = OpLabel |
| %182 = OpCompositeExtract %6 %227 1 |
| %183 = OpIAdd %6 %182 %26 |
| %210 = OpCompositeInsert %7 %183 %227 1 |
| OpBranch %184 |
| %184 = OpLabel |
| %228 = OpPhi %7 %227 %176 %210 %180 |
| %186 = OpCompositeExtract %6 %228 1 |
| %187 = OpSDiv %6 %186 %38 |
| %189 = OpCompositeExtract %6 %228 0 |
| %190 = OpIAdd %6 %189 %187 |
| %214 = OpCompositeInsert %7 %190 %228 0 |
| OpBranch %104 |
| %104 = OpLabel |
| %113 = OpIAdd %6 %193 %26 |
| OpBranch %101 |
| %103 = OpLabel |
| %115 = OpCompositeExtract %6 %224 0 |
| %116 = OpSLessThan %19 %115 %18 |
| OpSelectionMerge %118 None |
| OpBranchConditional %116 %117 %118 |
| %117 = OpLabel |
| %121 = OpSNegate %6 %115 |
| %218 = OpCompositeInsert %7 %121 %224 0 |
| OpBranch %118 |
| %118 = OpLabel |
| %226 = OpPhi %7 %224 %103 %218 %117 |
| OpBranch %123 |
| %123 = OpLabel |
| %225 = OpPhi %7 %226 %118 %222 %124 |
| %129 = OpCompositeExtract %6 %225 0 |
| %131 = OpSGreaterThan %19 %129 %130 |
| OpLoopMerge %125 %124 None |
| OpBranchConditional %131 %124 %125 |
| %124 = OpLabel |
| %135 = OpISub %6 %129 %132 |
| %222 = OpCompositeInsert %7 %135 %225 0 |
| OpBranch %123 |
| %125 = OpLabel |
| OpStore %163 %159 |
| %165 = OpAccessChain %164 %163 %129 |
| %548 = OpLoad %140 %330 |
| OpStore %330 %442 |
| OpStore %330 %548 |
| %166 = OpLoad %51 %165 |
| OpStore %138 %166 |
| OpReturn |
| OpFunctionEnd |
| END |
| |
| # uniforms for variant |
| |
| # resolution |
| BUFFER variant_resolution DATA_TYPE vec2<float> STD140 DATA |
| 256.0 256.0 |
| END |
| |
| BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM |
| |
| PIPELINE graphics variant_pipeline |
| ATTACH variant_vertex_shader |
| ATTACH variant_fragment_shader |
| FRAMEBUFFER_SIZE 256 256 |
| BIND BUFFER variant_framebuffer AS color LOCATION 0 |
| BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0 |
| END |
| CLEAR_COLOR variant_pipeline 0 0 0 255 |
| |
| CLEAR variant_pipeline |
| RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256 |
| |
| |
| SHADER vertex variant_2_vertex_shader PASSTHROUGH |
| |
| SHADER fragment variant_2_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 |
| ; SPIR-V |
| ; Version: 1.0 |
| ; Generator: Khronos Glslang Reference Front End; 7 |
| ; Bound: 443 |
| ; Schema: 0 |
| OpCapability Shader |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint Fragment %4 "main" %53 %138 |
| OpExecutionMode %4 OriginUpperLeft |
| OpSource ESSL 320 |
| OpName %4 "main" |
| OpName %53 "gl_FragCoord" |
| OpName %56 "buf0" |
| OpMemberName %56 0 "resolution" |
| OpName %58 "" |
| OpName %138 "_GLF_color" |
| OpName %163 "indexable" |
| OpDecorate %53 BuiltIn FragCoord |
| OpMemberDecorate %56 0 Offset 0 |
| OpDecorate %56 Block |
| OpDecorate %58 DescriptorSet 0 |
| OpDecorate %58 Binding 0 |
| OpDecorate %138 Location 0 |
| %2 = OpTypeVoid |
| %3 = OpTypeFunction %2 |
| %6 = OpTypeInt 32 1 |
| %7 = OpTypeVector %6 2 |
| %13 = OpTypeInt 32 0 |
| %18 = OpConstant %6 0 |
| %19 = OpTypeBool |
| %26 = OpConstant %6 1 |
| %38 = OpConstant %6 2 |
| %47 = OpTypeFloat 32 |
| %48 = OpTypeVector %47 2 |
| %51 = OpTypeVector %47 4 |
| %52 = OpTypePointer Input %51 |
| %53 = OpVariable %52 Input |
| %56 = OpTypeStruct %48 |
| %57 = OpTypePointer Uniform %56 |
| %58 = OpVariable %57 Uniform |
| %59 = OpTypePointer Uniform %48 |
| %67 = OpConstant %47 8 |
| %78 = OpConstant %6 5 |
| %82 = OpConstant %6 10 |
| %95 = OpConstant %6 8 |
| %107 = OpConstant %6 100 |
| %130 = OpConstant %6 15 |
| %132 = OpConstant %6 16 |
| %137 = OpTypePointer Output %51 |
| %138 = OpVariable %137 Output |
| %139 = OpConstant %13 16 |
| %140 = OpTypeArray %51 %139 |
| %141 = OpConstant %47 0 |
| %142 = OpConstant %47 1 |
| %143 = OpConstantComposite %51 %141 %141 %141 %142 |
| %144 = OpConstant %47 0.5 |
| %145 = OpConstantComposite %51 %144 %141 %141 %142 |
| %146 = OpConstantComposite %51 %141 %144 %141 %142 |
| %147 = OpConstantComposite %51 %144 %144 %141 %142 |
| %148 = OpConstantComposite %51 %141 %141 %144 %142 |
| %149 = OpConstantComposite %51 %144 %141 %144 %142 |
| %150 = OpConstantComposite %51 %141 %144 %144 %142 |
| %151 = OpConstantComposite %51 %144 %144 %144 %142 |
| %152 = OpConstantComposite %51 %142 %141 %141 %142 |
| %153 = OpConstantComposite %51 %141 %142 %141 %142 |
| %154 = OpConstantComposite %51 %142 %142 %141 %142 |
| %155 = OpConstantComposite %51 %141 %141 %142 %142 |
| %156 = OpConstantComposite %51 %142 %141 %142 %142 |
| %157 = OpConstantComposite %51 %141 %142 %142 %142 |
| %158 = OpConstantComposite %51 %142 %142 %142 %142 |
| %159 = OpConstantComposite %140 %143 %145 %146 %147 %148 %149 %150 %151 %143 %152 %153 %154 %155 %156 %157 %158 |
| %162 = OpTypePointer Function %140 |
| %164 = OpTypePointer Function %51 |
| %440 = OpConstant %47 0 |
| %441 = OpConstantComposite %51 %440 %440 %440 %440 |
| %442 = OpConstantComposite %140 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441 %441 |
| %4 = OpFunction %2 None %3 |
| %5 = OpLabel |
| %163 = OpVariable %162 Function |
| %54 = OpLoad %51 %53 |
| %55 = OpVectorShuffle %48 %54 %54 0 1 |
| %60 = OpAccessChain %59 %58 %18 |
| %61 = OpLoad %48 %60 |
| %62 = OpFDiv %48 %55 %61 |
| %66 = OpCompositeExtract %47 %62 0 |
| %68 = OpFMul %47 %66 %67 |
| %69 = OpConvertFToS %6 %68 |
| %330 = OpAccessChain %162 %163 |
| %71 = OpCompositeExtract %47 %62 1 |
| %72 = OpFMul %47 %71 %67 |
| %73 = OpConvertFToS %6 %72 |
| %79 = OpBitwiseAnd %6 %69 %78 |
| %83 = OpBitwiseAnd %6 %73 %82 |
| %84 = OpBitwiseOr %6 %79 %83 |
| %88 = OpBitwiseAnd %6 %73 %78 |
| %91 = OpBitwiseAnd %6 %69 %82 |
| %92 = OpBitwiseOr %6 %88 %91 |
| %96 = OpIMul %6 %84 %95 |
| %98 = OpIAdd %6 %96 %92 |
| %99 = OpCompositeConstruct %7 %98 %18 |
| OpBranch %101 |
| %101 = OpLabel |
| %224 = OpPhi %7 %99 %5 %214 %104 |
| %193 = OpPhi %6 %18 %5 %113 %104 |
| %108 = OpSLessThan %19 %193 %107 |
| OpLoopMerge %103 %104 None |
| OpBranchConditional %108 %102 %103 |
| %102 = OpLabel |
| %170 = OpCompositeExtract %6 %224 0 |
| %171 = OpSGreaterThan %19 %170 %18 |
| OpSelectionMerge %176 None |
| OpBranchConditional %171 %172 %176 |
| %172 = OpLabel |
| %174 = OpCompositeExtract %6 %224 1 |
| %175 = OpISub %6 %174 %26 |
| %206 = OpCompositeInsert %7 %175 %224 1 |
| OpBranch %176 |
| %176 = OpLabel |
| %227 = OpPhi %7 %224 %102 %206 %172 |
| %178 = OpCompositeExtract %6 %227 0 |
| %179 = OpSLessThan %19 %178 %18 |
| OpSelectionMerge %184 None |
| OpBranchConditional %179 %180 %184 |
| %180 = OpLabel |
| %182 = OpCompositeExtract %6 %227 1 |
| %183 = OpIAdd %6 %182 %26 |
| %210 = OpCompositeInsert %7 %183 %227 1 |
| OpBranch %184 |
| %184 = OpLabel |
| %228 = OpPhi %7 %227 %176 %210 %180 |
| %186 = OpCompositeExtract %6 %228 1 |
| %187 = OpSDiv %6 %186 %38 |
| %189 = OpCompositeExtract %6 %228 0 |
| %190 = OpIAdd %6 %189 %187 |
| %214 = OpCompositeInsert %7 %190 %228 0 |
| OpBranch %104 |
| %104 = OpLabel |
| %113 = OpIAdd %6 %193 %26 |
| OpBranch %101 |
| %103 = OpLabel |
| %115 = OpCompositeExtract %6 %224 0 |
| %116 = OpSLessThan %19 %115 %18 |
| OpSelectionMerge %118 None |
| OpBranchConditional %116 %117 %118 |
| %117 = OpLabel |
| %121 = OpSNegate %6 %115 |
| %218 = OpCompositeInsert %7 %121 %224 0 |
| OpBranch %118 |
| %118 = OpLabel |
| %226 = OpPhi %7 %224 %103 %218 %117 |
| OpBranch %123 |
| %123 = OpLabel |
| %225 = OpPhi %7 %226 %118 %222 %124 |
| %129 = OpCompositeExtract %6 %225 0 |
| %131 = OpSGreaterThan %19 %129 %130 |
| OpLoopMerge %125 %124 None |
| OpBranchConditional %131 %124 %125 |
| %124 = OpLabel |
| %135 = OpISub %6 %129 %132 |
| %222 = OpCompositeInsert %7 %135 %225 0 |
| OpBranch %123 |
| %125 = OpLabel |
| OpStore %163 %159 |
| %165 = OpAccessChain %164 %163 %129 |
| %166 = OpLoad %51 %165 |
| OpStore %138 %166 |
| OpReturn |
| OpFunctionEnd |
| END |
| |
| # uniforms for variant_2 |
| |
| # resolution |
| BUFFER variant_2_resolution DATA_TYPE vec2<float> STD140 DATA |
| 256.0 256.0 |
| END |
| |
| BUFFER variant_2_framebuffer FORMAT B8G8R8A8_UNORM |
| |
| PIPELINE graphics variant_2_pipeline |
| ATTACH variant_2_vertex_shader |
| ATTACH variant_2_fragment_shader |
| FRAMEBUFFER_SIZE 256 256 |
| BIND BUFFER variant_2_framebuffer AS color LOCATION 0 |
| BIND BUFFER variant_2_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0 |
| END |
| CLEAR_COLOR variant_2_pipeline 0 0 0 255 |
| |
| CLEAR variant_2_pipeline |
| RUN variant_2_pipeline DRAW_RECT POS 0 0 SIZE 256 256 |
| |
| EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005 |
| EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_2_framebuffer TOLERANCE 0.005 |