| #!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: Equivalent shaders except one declares a bvec4 |
| |
| # The test passes because both shaders render the same image. |
| |
| 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: 189 |
| ; Schema: 0 |
| OpCapability Shader |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint Fragment %4 "main" %165 %180 |
| OpExecutionMode %4 OriginUpperLeft |
| OpSource ESSL 320 |
| OpName %4 "main" |
| OpName %15 "collision(vf2;vf4;" |
| OpName %13 "pos" |
| OpName %14 "quad" |
| OpName %19 "match(vf2;" |
| OpName %18 "pos" |
| OpName %69 "res" |
| OpName %75 "i" |
| OpName %105 "param" |
| OpName %107 "param" |
| OpName %109 "indexable" |
| OpName %135 "indexable" |
| OpName %140 "indexable" |
| OpName %154 "indexable" |
| OpName %163 "lin" |
| OpName %165 "gl_FragCoord" |
| OpName %168 "buf0" |
| OpMemberName %168 0 "resolution" |
| OpName %170 "" |
| OpName %180 "_GLF_color" |
| OpName %181 "param" |
| OpName %185 "index" |
| OpName %188 "state" |
| OpDecorate %165 BuiltIn FragCoord |
| OpMemberDecorate %168 0 Offset 0 |
| OpDecorate %168 Block |
| OpDecorate %170 DescriptorSet 0 |
| OpDecorate %170 Binding 0 |
| OpDecorate %180 Location 0 |
| %2 = OpTypeVoid |
| %3 = OpTypeFunction %2 |
| %6 = OpTypeFloat 32 |
| %7 = OpTypeVector %6 2 |
| %8 = OpTypePointer Function %7 |
| %9 = OpTypeVector %6 4 |
| %10 = OpTypePointer Function %9 |
| %11 = OpTypeBool |
| %12 = OpTypeFunction %11 %8 %10 |
| %17 = OpTypeFunction %9 %8 |
| %21 = OpTypeInt 32 0 |
| %22 = OpConstant %21 0 |
| %23 = OpTypePointer Function %6 |
| %31 = OpConstantFalse %11 |
| %33 = OpConstant %21 1 |
| %46 = OpConstant %21 2 |
| %58 = OpConstant %21 3 |
| %66 = OpConstantTrue %11 |
| %70 = OpConstant %6 0.5 |
| %71 = OpConstant %6 1 |
| %72 = OpConstantComposite %9 %70 %70 %71 %71 |
| %73 = OpTypeInt 32 1 |
| %74 = OpTypePointer Function %73 |
| %76 = OpConstant %73 0 |
| %83 = OpConstant %73 8 |
| %85 = OpConstant %21 8 |
| %86 = OpTypeArray %9 %85 |
| %87 = OpConstant %6 4 |
| %88 = OpConstant %6 20 |
| %89 = OpConstantComposite %9 %87 %87 %88 %87 |
| %90 = OpConstantComposite %9 %87 %87 %87 %88 |
| %91 = OpConstantComposite %9 %87 %88 %88 %87 |
| %92 = OpConstant %6 8 |
| %93 = OpConstantComposite %9 %88 %87 %87 %92 |
| %94 = OpConstant %6 6 |
| %95 = OpConstant %6 2 |
| %96 = OpConstantComposite %9 %92 %94 %87 %95 |
| %97 = OpConstant %6 12 |
| %98 = OpConstantComposite %9 %95 %97 %95 %87 |
| %99 = OpConstant %6 16 |
| %100 = OpConstantComposite %9 %99 %95 %87 %87 |
| %101 = OpConstant %6 22 |
| %102 = OpConstantComposite %9 %97 %101 %87 %87 |
| %103 = OpConstantComposite %86 %89 %90 %91 %93 %96 %98 %100 %102 |
| %108 = OpTypePointer Function %86 |
| %115 = OpConstant %21 16 |
| %116 = OpTypeArray %9 %115 |
| %117 = OpConstant %6 0 |
| %118 = OpConstantComposite %9 %117 %117 %117 %71 |
| %119 = OpConstantComposite %9 %70 %117 %117 %71 |
| %120 = OpConstantComposite %9 %117 %70 %117 %71 |
| %121 = OpConstantComposite %9 %70 %70 %117 %71 |
| %122 = OpConstantComposite %9 %117 %117 %70 %71 |
| %123 = OpConstantComposite %9 %70 %117 %70 %71 |
| %124 = OpConstantComposite %9 %117 %70 %70 %71 |
| %125 = OpConstantComposite %9 %70 %70 %70 %71 |
| %126 = OpConstantComposite %9 %71 %117 %117 %71 |
| %127 = OpConstantComposite %9 %117 %71 %117 %71 |
| %128 = OpConstantComposite %9 %71 %71 %117 %71 |
| %129 = OpConstantComposite %9 %117 %117 %71 %71 |
| %130 = OpConstantComposite %9 %71 %117 %71 %71 |
| %131 = OpConstantComposite %9 %117 %71 %71 %71 |
| %132 = OpConstantComposite %9 %71 %71 %71 %71 |
| %133 = OpConstantComposite %116 %118 %119 %120 %121 %122 %123 %124 %125 %118 %126 %127 %128 %129 %130 %131 %132 |
| %146 = OpConstant %73 9 |
| %149 = OpConstant %73 11 |
| %151 = OpConstant %73 16 |
| %153 = OpTypePointer Function %116 |
| %158 = OpConstant %73 1 |
| %164 = OpTypePointer Input %9 |
| %165 = OpVariable %164 Input |
| %168 = OpTypeStruct %7 |
| %169 = OpTypePointer Uniform %168 |
| %170 = OpVariable %169 Uniform |
| %171 = OpTypePointer Uniform %7 |
| %176 = OpConstant %6 32 |
| %179 = OpTypePointer Output %9 |
| %180 = OpVariable %179 Output |
| %184 = OpTypePointer Private %73 |
| %185 = OpVariable %184 Private |
| %186 = OpTypeArray %73 %115 |
| %187 = OpTypePointer Private %186 |
| %188 = OpVariable %187 Private |
| %4 = OpFunction %2 None %3 |
| %5 = OpLabel |
| %163 = OpVariable %8 Function |
| %181 = OpVariable %8 Function |
| %166 = OpLoad %9 %165 |
| %167 = OpVectorShuffle %7 %166 %166 0 1 |
| %172 = OpAccessChain %171 %170 %76 |
| %173 = OpLoad %7 %172 |
| %174 = OpFDiv %7 %167 %173 |
| OpStore %163 %174 |
| %175 = OpLoad %7 %163 |
| %177 = OpVectorTimesScalar %7 %175 %176 |
| %178 = OpExtInst %7 %1 Floor %177 |
| OpStore %163 %178 |
| %182 = OpLoad %7 %163 |
| OpStore %181 %182 |
| %183 = OpFunctionCall %9 %19 %181 |
| OpStore %180 %183 |
| OpReturn |
| OpFunctionEnd |
| %15 = OpFunction %11 None %12 |
| %13 = OpFunctionParameter %8 |
| %14 = OpFunctionParameter %10 |
| %16 = OpLabel |
| %24 = OpAccessChain %23 %13 %22 |
| %25 = OpLoad %6 %24 |
| %26 = OpAccessChain %23 %14 %22 |
| %27 = OpLoad %6 %26 |
| %28 = OpFOrdLessThan %11 %25 %27 |
| OpSelectionMerge %30 None |
| OpBranchConditional %28 %29 %30 |
| %29 = OpLabel |
| OpReturnValue %31 |
| %30 = OpLabel |
| %34 = OpAccessChain %23 %13 %33 |
| %35 = OpLoad %6 %34 |
| %36 = OpAccessChain %23 %14 %33 |
| %37 = OpLoad %6 %36 |
| %38 = OpFOrdLessThan %11 %35 %37 |
| OpSelectionMerge %40 None |
| OpBranchConditional %38 %39 %40 |
| %39 = OpLabel |
| OpReturnValue %31 |
| %40 = OpLabel |
| %42 = OpAccessChain %23 %13 %22 |
| %43 = OpLoad %6 %42 |
| %44 = OpAccessChain %23 %14 %22 |
| %45 = OpLoad %6 %44 |
| %47 = OpAccessChain %23 %14 %46 |
| %48 = OpLoad %6 %47 |
| %49 = OpFAdd %6 %45 %48 |
| %50 = OpFOrdGreaterThan %11 %43 %49 |
| OpSelectionMerge %52 None |
| OpBranchConditional %50 %51 %52 |
| %51 = OpLabel |
| OpReturnValue %31 |
| %52 = OpLabel |
| %54 = OpAccessChain %23 %13 %33 |
| %55 = OpLoad %6 %54 |
| %56 = OpAccessChain %23 %14 %33 |
| %57 = OpLoad %6 %56 |
| %59 = OpAccessChain %23 %14 %58 |
| %60 = OpLoad %6 %59 |
| %61 = OpFAdd %6 %57 %60 |
| %62 = OpFOrdGreaterThan %11 %55 %61 |
| OpSelectionMerge %64 None |
| OpBranchConditional %62 %63 %64 |
| %63 = OpLabel |
| OpReturnValue %31 |
| %64 = OpLabel |
| OpReturnValue %66 |
| OpFunctionEnd |
| %19 = OpFunction %9 None %17 |
| %18 = OpFunctionParameter %8 |
| %20 = OpLabel |
| %69 = OpVariable %10 Function |
| %75 = OpVariable %74 Function |
| %105 = OpVariable %8 Function |
| %107 = OpVariable %10 Function |
| %109 = OpVariable %108 Function |
| %135 = OpVariable %108 Function |
| %140 = OpVariable %108 Function |
| %154 = OpVariable %153 Function |
| OpStore %69 %72 |
| OpStore %75 %76 |
| OpBranch %77 |
| %77 = OpLabel |
| OpLoopMerge %79 %80 None |
| OpBranch %81 |
| %81 = OpLabel |
| %82 = OpLoad %73 %75 |
| %84 = OpSLessThan %11 %82 %83 |
| OpBranchConditional %84 %78 %79 |
| %78 = OpLabel |
| %104 = OpLoad %73 %75 |
| %106 = OpLoad %7 %18 |
| OpStore %105 %106 |
| OpStore %109 %103 |
| %110 = OpAccessChain %10 %109 %104 |
| %111 = OpLoad %9 %110 |
| OpStore %107 %111 |
| %112 = OpFunctionCall %11 %15 %105 %107 |
| OpSelectionMerge %114 None |
| OpBranchConditional %112 %113 %114 |
| %113 = OpLabel |
| %134 = OpLoad %73 %75 |
| OpStore %135 %103 |
| %136 = OpAccessChain %23 %135 %134 %22 |
| %137 = OpLoad %6 %136 |
| %138 = OpConvertFToS %73 %137 |
| %139 = OpLoad %73 %75 |
| OpStore %140 %103 |
| %141 = OpAccessChain %23 %140 %139 %33 |
| %142 = OpLoad %6 %141 |
| %143 = OpConvertFToS %73 %142 |
| %144 = OpIMul %73 %138 %143 |
| %145 = OpLoad %73 %75 |
| %147 = OpIMul %73 %145 %146 |
| %148 = OpIAdd %73 %144 %147 |
| %150 = OpIAdd %73 %148 %149 |
| %152 = OpSMod %73 %150 %151 |
| OpStore %154 %133 |
| %155 = OpAccessChain %10 %154 %152 |
| %156 = OpLoad %9 %155 |
| OpStore %69 %156 |
| OpBranch %114 |
| %114 = OpLabel |
| OpBranch %80 |
| %80 = OpLabel |
| %157 = OpLoad %73 %75 |
| %159 = OpIAdd %73 %157 %158 |
| OpStore %75 %159 |
| OpBranch %77 |
| %79 = OpLabel |
| %160 = OpLoad %9 %69 |
| OpReturnValue %160 |
| OpFunctionEnd |
| END |
| |
| # uniforms for reference |
| |
| # resolution |
| BUFFER reference_resolution DATA_TYPE vec2<float> 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: 366 |
| ; Schema: 0 |
| OpCapability Shader |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint Fragment %4 "main" %165 %180 |
| OpExecutionMode %4 OriginUpperLeft |
| OpSource ESSL 320 |
| OpName %4 "main" |
| OpName %15 "collision(vf2;vf4;" |
| OpName %13 "pos" |
| OpName %14 "quad" |
| OpName %19 "match(vf2;" |
| OpName %18 "pos" |
| OpName %69 "res" |
| OpName %75 "i" |
| OpName %105 "param" |
| OpName %107 "param" |
| OpName %109 "indexable" |
| OpName %135 "indexable" |
| OpName %140 "indexable" |
| OpName %154 "indexable" |
| OpName %163 "lin" |
| OpName %165 "gl_FragCoord" |
| OpName %168 "buf0" |
| OpMemberName %168 0 "resolution" |
| OpName %170 "" |
| OpName %180 "_GLF_color" |
| OpName %181 "param" |
| OpName %185 "index" |
| OpName %188 "state" |
| OpDecorate %165 BuiltIn FragCoord |
| OpMemberDecorate %168 0 Offset 0 |
| OpDecorate %168 Block |
| OpDecorate %170 DescriptorSet 0 |
| OpDecorate %170 Binding 0 |
| OpDecorate %180 Location 0 |
| %2 = OpTypeVoid |
| %3 = OpTypeFunction %2 |
| %6 = OpTypeFloat 32 |
| %7 = OpTypeVector %6 2 |
| %8 = OpTypePointer Function %7 |
| %9 = OpTypeVector %6 4 |
| %10 = OpTypePointer Function %9 |
| %11 = OpTypeBool |
| %12 = OpTypeFunction %11 %8 %10 |
| %17 = OpTypeFunction %9 %8 |
| %21 = OpTypeInt 32 0 |
| %22 = OpConstant %21 0 |
| %23 = OpTypePointer Function %6 |
| %31 = OpConstantFalse %11 |
| %33 = OpConstant %21 1 |
| %46 = OpConstant %21 2 |
| %58 = OpConstant %21 3 |
| %66 = OpConstantTrue %11 |
| %70 = OpConstant %6 0.5 |
| %71 = OpConstant %6 1 |
| %72 = OpConstantComposite %9 %70 %70 %71 %71 |
| %73 = OpTypeInt 32 1 |
| %74 = OpTypePointer Function %73 |
| %76 = OpConstant %73 0 |
| %83 = OpConstant %73 8 |
| %85 = OpConstant %21 8 |
| %86 = OpTypeArray %9 %85 |
| %87 = OpConstant %6 4 |
| %88 = OpConstant %6 20 |
| %89 = OpConstantComposite %9 %87 %87 %88 %87 |
| %90 = OpConstantComposite %9 %87 %87 %87 %88 |
| %91 = OpConstantComposite %9 %87 %88 %88 %87 |
| %92 = OpConstant %6 8 |
| %93 = OpConstantComposite %9 %88 %87 %87 %92 |
| %94 = OpConstant %6 6 |
| %95 = OpConstant %6 2 |
| %96 = OpConstantComposite %9 %92 %94 %87 %95 |
| %97 = OpConstant %6 12 |
| %98 = OpConstantComposite %9 %95 %97 %95 %87 |
| %99 = OpConstant %6 16 |
| %100 = OpConstantComposite %9 %99 %95 %87 %87 |
| %101 = OpConstant %6 22 |
| %102 = OpConstantComposite %9 %97 %101 %87 %87 |
| %103 = OpConstantComposite %86 %89 %90 %91 %93 %96 %98 %100 %102 |
| %108 = OpTypePointer Function %86 |
| %115 = OpConstant %21 16 |
| %116 = OpTypeArray %9 %115 |
| %117 = OpConstant %6 0 |
| %118 = OpConstantComposite %9 %117 %117 %117 %71 |
| %119 = OpConstantComposite %9 %70 %117 %117 %71 |
| %120 = OpConstantComposite %9 %117 %70 %117 %71 |
| %121 = OpConstantComposite %9 %70 %70 %117 %71 |
| %122 = OpConstantComposite %9 %117 %117 %70 %71 |
| %123 = OpConstantComposite %9 %70 %117 %70 %71 |
| %124 = OpConstantComposite %9 %117 %70 %70 %71 |
| %125 = OpConstantComposite %9 %70 %70 %70 %71 |
| %126 = OpConstantComposite %9 %71 %117 %117 %71 |
| %127 = OpConstantComposite %9 %117 %71 %117 %71 |
| %128 = OpConstantComposite %9 %71 %71 %117 %71 |
| %129 = OpConstantComposite %9 %117 %117 %71 %71 |
| %130 = OpConstantComposite %9 %71 %117 %71 %71 |
| %131 = OpConstantComposite %9 %117 %71 %71 %71 |
| %132 = OpConstantComposite %9 %71 %71 %71 %71 |
| %133 = OpConstantComposite %116 %118 %119 %120 %121 %122 %123 %124 %125 %118 %126 %127 %128 %129 %130 %131 %132 |
| %146 = OpConstant %73 9 |
| %149 = OpConstant %73 11 |
| %151 = OpConstant %73 16 |
| %153 = OpTypePointer Function %116 |
| %158 = OpConstant %73 1 |
| %164 = OpTypePointer Input %9 |
| %165 = OpVariable %164 Input |
| %168 = OpTypeStruct %7 |
| %169 = OpTypePointer Uniform %168 |
| %170 = OpVariable %169 Uniform |
| %171 = OpTypePointer Uniform %7 |
| %176 = OpConstant %6 32 |
| %179 = OpTypePointer Output %9 |
| %180 = OpVariable %179 Output |
| %184 = OpTypePointer Private %73 |
| %185 = OpVariable %184 Private |
| %186 = OpTypeArray %73 %115 |
| %187 = OpTypePointer Private %186 |
| %188 = OpVariable %187 Private |
| %313 = OpTypeVector %11 4 |
| %363 = OpTypePointer Function %313 |
| %364 = OpConstantComposite %313 %31 %31 %31 %31 |
| %4 = OpFunction %2 None %3 |
| %5 = OpLabel |
| %163 = OpVariable %8 Function |
| %181 = OpVariable %8 Function |
| %166 = OpLoad %9 %165 |
| %167 = OpVectorShuffle %7 %166 %166 0 1 |
| %172 = OpAccessChain %171 %170 %76 |
| %173 = OpLoad %7 %172 |
| %174 = OpFDiv %7 %167 %173 |
| OpStore %163 %174 |
| %175 = OpLoad %7 %163 |
| %177 = OpVectorTimesScalar %7 %175 %176 |
| %178 = OpExtInst %7 %1 Floor %177 |
| OpStore %163 %178 |
| %182 = OpLoad %7 %163 |
| OpStore %181 %182 |
| %183 = OpFunctionCall %9 %19 %181 |
| OpStore %180 %183 |
| OpReturn |
| OpFunctionEnd |
| %15 = OpFunction %11 None %12 |
| %13 = OpFunctionParameter %8 |
| %14 = OpFunctionParameter %10 |
| %16 = OpLabel |
| %365 = OpVariable %363 Function %364 |
| %24 = OpAccessChain %23 %13 %22 |
| %25 = OpLoad %6 %24 |
| %26 = OpAccessChain %23 %14 %22 |
| %27 = OpLoad %6 %26 |
| %28 = OpFOrdLessThan %11 %25 %27 |
| OpSelectionMerge %30 None |
| OpBranchConditional %28 %29 %30 |
| %29 = OpLabel |
| OpReturnValue %31 |
| %30 = OpLabel |
| %34 = OpAccessChain %23 %13 %33 |
| %35 = OpLoad %6 %34 |
| %36 = OpAccessChain %23 %14 %33 |
| %37 = OpLoad %6 %36 |
| %38 = OpFOrdLessThan %11 %35 %37 |
| OpSelectionMerge %40 None |
| OpBranchConditional %38 %39 %40 |
| %39 = OpLabel |
| OpReturnValue %31 |
| %40 = OpLabel |
| %42 = OpAccessChain %23 %13 %22 |
| %43 = OpLoad %6 %42 |
| %44 = OpAccessChain %23 %14 %22 |
| %45 = OpLoad %6 %44 |
| %47 = OpAccessChain %23 %14 %46 |
| %48 = OpLoad %6 %47 |
| %49 = OpFAdd %6 %45 %48 |
| %50 = OpFOrdGreaterThan %11 %43 %49 |
| OpSelectionMerge %52 None |
| OpBranchConditional %50 %51 %52 |
| %51 = OpLabel |
| OpReturnValue %31 |
| %52 = OpLabel |
| %54 = OpAccessChain %23 %13 %33 |
| %55 = OpLoad %6 %54 |
| %56 = OpAccessChain %23 %14 %33 |
| %57 = OpLoad %6 %56 |
| %59 = OpAccessChain %23 %14 %58 |
| %60 = OpLoad %6 %59 |
| %61 = OpFAdd %6 %57 %60 |
| %62 = OpFOrdGreaterThan %11 %55 %61 |
| OpSelectionMerge %64 None |
| OpBranchConditional %62 %63 %64 |
| %63 = OpLabel |
| OpReturnValue %31 |
| %64 = OpLabel |
| OpReturnValue %66 |
| OpFunctionEnd |
| %19 = OpFunction %9 None %17 |
| %18 = OpFunctionParameter %8 |
| %20 = OpLabel |
| %69 = OpVariable %10 Function |
| %75 = OpVariable %74 Function |
| %105 = OpVariable %8 Function |
| %107 = OpVariable %10 Function |
| %109 = OpVariable %108 Function |
| %135 = OpVariable %108 Function |
| %140 = OpVariable %108 Function |
| %154 = OpVariable %153 Function |
| OpStore %69 %72 |
| OpStore %75 %76 |
| OpBranch %77 |
| %77 = OpLabel |
| OpLoopMerge %79 %80 None |
| OpBranch %81 |
| %81 = OpLabel |
| %82 = OpLoad %73 %75 |
| %84 = OpSLessThan %11 %82 %83 |
| OpBranchConditional %84 %78 %79 |
| %78 = OpLabel |
| %104 = OpLoad %73 %75 |
| %106 = OpLoad %7 %18 |
| OpStore %105 %106 |
| OpStore %109 %103 |
| %110 = OpAccessChain %10 %109 %104 |
| %111 = OpLoad %9 %110 |
| OpStore %107 %111 |
| %112 = OpFunctionCall %11 %15 %105 %107 |
| OpSelectionMerge %114 None |
| OpBranchConditional %112 %113 %114 |
| %113 = OpLabel |
| %134 = OpLoad %73 %75 |
| OpStore %135 %103 |
| %136 = OpAccessChain %23 %135 %134 %22 |
| %137 = OpLoad %6 %136 |
| %138 = OpConvertFToS %73 %137 |
| %139 = OpLoad %73 %75 |
| OpStore %140 %103 |
| %141 = OpAccessChain %23 %140 %139 %33 |
| %142 = OpLoad %6 %141 |
| %143 = OpConvertFToS %73 %142 |
| %144 = OpIMul %73 %138 %143 |
| %145 = OpLoad %73 %75 |
| %147 = OpIMul %73 %145 %146 |
| %148 = OpIAdd %73 %144 %147 |
| %150 = OpIAdd %73 %148 %149 |
| %152 = OpSMod %73 %150 %151 |
| OpStore %154 %133 |
| %155 = OpAccessChain %10 %154 %152 |
| %156 = OpLoad %9 %155 |
| OpStore %69 %156 |
| OpBranch %114 |
| %114 = OpLabel |
| OpBranch %80 |
| %80 = OpLabel |
| %157 = OpLoad %73 %75 |
| %159 = OpIAdd %73 %157 %158 |
| OpStore %75 %159 |
| OpBranch %77 |
| %79 = OpLabel |
| %160 = OpLoad %9 %69 |
| OpReturnValue %160 |
| OpFunctionEnd |
| END |
| |
| # uniforms for variant |
| |
| # resolution |
| BUFFER variant_resolution DATA_TYPE vec2<float> 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 |
| |
| EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005 |