1e5c31af7Sopenharmony_ci#!amber 2e5c31af7Sopenharmony_ci 3e5c31af7Sopenharmony_ci# Copyright 2020 Google LLC 4e5c31af7Sopenharmony_ci# 5e5c31af7Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 6e5c31af7Sopenharmony_ci# you may not use this file except in compliance with the License. 7e5c31af7Sopenharmony_ci# You may obtain a copy of the License at 8e5c31af7Sopenharmony_ci# 9e5c31af7Sopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 10e5c31af7Sopenharmony_ci# 11e5c31af7Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software 12e5c31af7Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 13e5c31af7Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14e5c31af7Sopenharmony_ci# See the License for the specific language governing permissions and 15e5c31af7Sopenharmony_ci# limitations under the License. 16e5c31af7Sopenharmony_ci 17e5c31af7Sopenharmony_ci 18e5c31af7Sopenharmony_ci# A test for a bug found by the GraphicsFuzz project. 19e5c31af7Sopenharmony_ci 20e5c31af7Sopenharmony_ci# Short description: Two shaders diff: mutate var, comp extract/construct 21e5c31af7Sopenharmony_ci 22e5c31af7Sopenharmony_ci# The test renders two images using semantically equivalent shaders, and then 23e5c31af7Sopenharmony_ci# checks that the images are similar. 24e5c31af7Sopenharmony_ci# The test passes because the shaders have the same semantics and so the images 25e5c31af7Sopenharmony_ci# should be the same. 26e5c31af7Sopenharmony_ci 27e5c31af7Sopenharmony_ciSHADER vertex reference_vertex_shader PASSTHROUGH 28e5c31af7Sopenharmony_ci 29e5c31af7Sopenharmony_ciSHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 30e5c31af7Sopenharmony_ci; SPIR-V 31e5c31af7Sopenharmony_ci; Version: 1.0 32e5c31af7Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 7 33e5c31af7Sopenharmony_ci; Bound: 138 34e5c31af7Sopenharmony_ci; Schema: 0 35e5c31af7Sopenharmony_ci OpCapability Shader 36e5c31af7Sopenharmony_ci %1 = OpExtInstImport "GLSL.std.450" 37e5c31af7Sopenharmony_ci OpMemoryModel Logical GLSL450 38e5c31af7Sopenharmony_ci OpEntryPoint Fragment %4 "main" %47 %76 39e5c31af7Sopenharmony_ci OpExecutionMode %4 OriginUpperLeft 40e5c31af7Sopenharmony_ci OpSource ESSL 320 41e5c31af7Sopenharmony_ci OpName %4 "main" 42e5c31af7Sopenharmony_ci OpName %47 "gl_FragCoord" 43e5c31af7Sopenharmony_ci OpName %50 "buf0" 44e5c31af7Sopenharmony_ci OpMemberName %50 0 "resolution" 45e5c31af7Sopenharmony_ci OpName %52 "" 46e5c31af7Sopenharmony_ci OpName %76 "_GLF_color" 47e5c31af7Sopenharmony_ci OpName %104 "indexable" 48e5c31af7Sopenharmony_ci OpDecorate %47 BuiltIn FragCoord 49e5c31af7Sopenharmony_ci OpMemberDecorate %50 0 Offset 0 50e5c31af7Sopenharmony_ci OpDecorate %50 Block 51e5c31af7Sopenharmony_ci OpDecorate %52 DescriptorSet 0 52e5c31af7Sopenharmony_ci OpDecorate %52 Binding 0 53e5c31af7Sopenharmony_ci OpDecorate %76 Location 0 54e5c31af7Sopenharmony_ci %2 = OpTypeVoid 55e5c31af7Sopenharmony_ci %3 = OpTypeFunction %2 56e5c31af7Sopenharmony_ci %6 = OpTypeInt 32 1 57e5c31af7Sopenharmony_ci %13 = OpConstant %6 0 58e5c31af7Sopenharmony_ci %20 = OpConstant %6 1 59e5c31af7Sopenharmony_ci %21 = OpTypeBool 60e5c31af7Sopenharmony_ci %28 = OpConstant %6 3 61e5c31af7Sopenharmony_ci %33 = OpConstant %6 2 62e5c31af7Sopenharmony_ci %41 = OpTypeFloat 32 63e5c31af7Sopenharmony_ci %42 = OpTypeVector %41 2 64e5c31af7Sopenharmony_ci %45 = OpTypeVector %41 4 65e5c31af7Sopenharmony_ci %46 = OpTypePointer Input %45 66e5c31af7Sopenharmony_ci %47 = OpVariable %46 Input 67e5c31af7Sopenharmony_ci %50 = OpTypeStruct %42 68e5c31af7Sopenharmony_ci %51 = OpTypePointer Uniform %50 69e5c31af7Sopenharmony_ci %52 = OpVariable %51 Uniform 70e5c31af7Sopenharmony_ci %53 = OpTypePointer Uniform %42 71e5c31af7Sopenharmony_ci %58 = OpConstant %41 8 72e5c31af7Sopenharmony_ci %62 = OpTypeInt 32 0 73e5c31af7Sopenharmony_ci %68 = OpConstant %6 8 74e5c31af7Sopenharmony_ci %75 = OpTypePointer Output %45 75e5c31af7Sopenharmony_ci %76 = OpVariable %75 Output 76e5c31af7Sopenharmony_ci %77 = OpConstant %62 16 77e5c31af7Sopenharmony_ci %78 = OpTypeArray %45 %77 78e5c31af7Sopenharmony_ci %79 = OpConstant %41 0 79e5c31af7Sopenharmony_ci %80 = OpConstant %41 1 80e5c31af7Sopenharmony_ci %81 = OpConstantComposite %45 %79 %79 %79 %80 81e5c31af7Sopenharmony_ci %82 = OpConstant %41 0.5 82e5c31af7Sopenharmony_ci %83 = OpConstantComposite %45 %82 %79 %79 %80 83e5c31af7Sopenharmony_ci %84 = OpConstantComposite %45 %79 %82 %79 %80 84e5c31af7Sopenharmony_ci %85 = OpConstantComposite %45 %82 %82 %79 %80 85e5c31af7Sopenharmony_ci %86 = OpConstantComposite %45 %79 %79 %82 %80 86e5c31af7Sopenharmony_ci %87 = OpConstantComposite %45 %82 %79 %82 %80 87e5c31af7Sopenharmony_ci %88 = OpConstantComposite %45 %79 %82 %82 %80 88e5c31af7Sopenharmony_ci %89 = OpConstantComposite %45 %82 %82 %82 %80 89e5c31af7Sopenharmony_ci %90 = OpConstantComposite %45 %80 %79 %79 %80 90e5c31af7Sopenharmony_ci %91 = OpConstantComposite %45 %79 %80 %79 %80 91e5c31af7Sopenharmony_ci %92 = OpConstantComposite %45 %80 %80 %79 %80 92e5c31af7Sopenharmony_ci %93 = OpConstantComposite %45 %79 %79 %80 %80 93e5c31af7Sopenharmony_ci %94 = OpConstantComposite %45 %80 %79 %80 %80 94e5c31af7Sopenharmony_ci %95 = OpConstantComposite %45 %79 %80 %80 %80 95e5c31af7Sopenharmony_ci %96 = OpConstantComposite %45 %80 %80 %80 %80 96e5c31af7Sopenharmony_ci %97 = OpConstantComposite %78 %81 %83 %84 %85 %86 %87 %88 %89 %81 %90 %91 %92 %93 %94 %95 %96 97e5c31af7Sopenharmony_ci %101 = OpConstant %6 16 98e5c31af7Sopenharmony_ci %103 = OpTypePointer Function %78 99e5c31af7Sopenharmony_ci %105 = OpTypePointer Function %45 100e5c31af7Sopenharmony_ci %4 = OpFunction %2 None %3 101e5c31af7Sopenharmony_ci %5 = OpLabel 102e5c31af7Sopenharmony_ci %104 = OpVariable %103 Function 103e5c31af7Sopenharmony_ci %48 = OpLoad %45 %47 104e5c31af7Sopenharmony_ci %49 = OpVectorShuffle %42 %48 %48 0 1 105e5c31af7Sopenharmony_ci %54 = OpAccessChain %53 %52 %13 106e5c31af7Sopenharmony_ci %55 = OpLoad %42 %54 107e5c31af7Sopenharmony_ci %56 = OpFDiv %42 %49 %55 108e5c31af7Sopenharmony_ci %59 = OpVectorTimesScalar %42 %56 %58 109e5c31af7Sopenharmony_ci %60 = OpExtInst %42 %1 Floor %59 110e5c31af7Sopenharmony_ci %66 = OpCompositeExtract %41 %60 0 111e5c31af7Sopenharmony_ci %67 = OpConvertFToS %6 %66 112e5c31af7Sopenharmony_ci %69 = OpIMul %6 %67 %68 113e5c31af7Sopenharmony_ci %72 = OpCompositeExtract %41 %60 1 114e5c31af7Sopenharmony_ci %73 = OpConvertFToS %6 %72 115e5c31af7Sopenharmony_ci %74 = OpIAdd %6 %69 %73 116e5c31af7Sopenharmony_ci OpBranch %111 117e5c31af7Sopenharmony_ci %111 = OpLabel 118e5c31af7Sopenharmony_ci %135 = OpPhi %6 %13 %5 %128 %129 119e5c31af7Sopenharmony_ci %134 = OpPhi %6 %74 %5 %137 %129 120e5c31af7Sopenharmony_ci %114 = OpSGreaterThan %21 %134 %20 121e5c31af7Sopenharmony_ci OpLoopMerge %130 %129 None 122e5c31af7Sopenharmony_ci OpBranchConditional %114 %115 %130 123e5c31af7Sopenharmony_ci %115 = OpLabel 124e5c31af7Sopenharmony_ci %117 = OpBitwiseAnd %6 %134 %20 125e5c31af7Sopenharmony_ci %118 = OpIEqual %21 %117 %20 126e5c31af7Sopenharmony_ci OpSelectionMerge %126 None 127e5c31af7Sopenharmony_ci OpBranchConditional %118 %119 %123 128e5c31af7Sopenharmony_ci %119 = OpLabel 129e5c31af7Sopenharmony_ci %121 = OpIMul %6 %28 %134 130e5c31af7Sopenharmony_ci %122 = OpIAdd %6 %121 %20 131e5c31af7Sopenharmony_ci OpBranch %126 132e5c31af7Sopenharmony_ci %123 = OpLabel 133e5c31af7Sopenharmony_ci %125 = OpSDiv %6 %134 %33 134e5c31af7Sopenharmony_ci OpBranch %126 135e5c31af7Sopenharmony_ci %126 = OpLabel 136e5c31af7Sopenharmony_ci %137 = OpPhi %6 %122 %119 %125 %123 137e5c31af7Sopenharmony_ci %128 = OpIAdd %6 %135 %20 138e5c31af7Sopenharmony_ci OpBranch %129 139e5c31af7Sopenharmony_ci %129 = OpLabel 140e5c31af7Sopenharmony_ci OpBranch %111 141e5c31af7Sopenharmony_ci %130 = OpLabel 142e5c31af7Sopenharmony_ci %102 = OpSMod %6 %135 %101 143e5c31af7Sopenharmony_ci OpStore %104 %97 144e5c31af7Sopenharmony_ci %106 = OpAccessChain %105 %104 %102 145e5c31af7Sopenharmony_ci %107 = OpLoad %45 %106 146e5c31af7Sopenharmony_ci OpStore %76 %107 147e5c31af7Sopenharmony_ci OpReturn 148e5c31af7Sopenharmony_ci OpFunctionEnd 149e5c31af7Sopenharmony_ciEND 150e5c31af7Sopenharmony_ci 151e5c31af7Sopenharmony_ci# uniforms for reference 152e5c31af7Sopenharmony_ci 153e5c31af7Sopenharmony_ci# resolution 154e5c31af7Sopenharmony_ciBUFFER reference_resolution DATA_TYPE vec2<float> STD140 DATA 155e5c31af7Sopenharmony_ci 256.0 256.0 156e5c31af7Sopenharmony_ciEND 157e5c31af7Sopenharmony_ci 158e5c31af7Sopenharmony_ciBUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM 159e5c31af7Sopenharmony_ci 160e5c31af7Sopenharmony_ciPIPELINE graphics reference_pipeline 161e5c31af7Sopenharmony_ci ATTACH reference_vertex_shader 162e5c31af7Sopenharmony_ci ATTACH reference_fragment_shader 163e5c31af7Sopenharmony_ci FRAMEBUFFER_SIZE 256 256 164e5c31af7Sopenharmony_ci BIND BUFFER reference_framebuffer AS color LOCATION 0 165e5c31af7Sopenharmony_ci BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0 166e5c31af7Sopenharmony_ciEND 167e5c31af7Sopenharmony_ciCLEAR_COLOR reference_pipeline 0 0 0 255 168e5c31af7Sopenharmony_ci 169e5c31af7Sopenharmony_ciCLEAR reference_pipeline 170e5c31af7Sopenharmony_ciRUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256 171e5c31af7Sopenharmony_ci 172e5c31af7Sopenharmony_ci 173e5c31af7Sopenharmony_ciSHADER vertex variant_vertex_shader PASSTHROUGH 174e5c31af7Sopenharmony_ci 175e5c31af7Sopenharmony_ciSHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 176e5c31af7Sopenharmony_ci; SPIR-V 177e5c31af7Sopenharmony_ci; Version: 1.0 178e5c31af7Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 7 179e5c31af7Sopenharmony_ci; Bound: 502 180e5c31af7Sopenharmony_ci; Schema: 0 181e5c31af7Sopenharmony_ci OpCapability Shader 182e5c31af7Sopenharmony_ci %1 = OpExtInstImport "GLSL.std.450" 183e5c31af7Sopenharmony_ci OpMemoryModel Logical GLSL450 184e5c31af7Sopenharmony_ci OpEntryPoint Fragment %4 "main" %47 %76 185e5c31af7Sopenharmony_ci OpExecutionMode %4 OriginUpperLeft 186e5c31af7Sopenharmony_ci OpSource ESSL 320 187e5c31af7Sopenharmony_ci OpName %4 "main" 188e5c31af7Sopenharmony_ci OpName %47 "gl_FragCoord" 189e5c31af7Sopenharmony_ci OpName %50 "buf0" 190e5c31af7Sopenharmony_ci OpMemberName %50 0 "resolution" 191e5c31af7Sopenharmony_ci OpName %52 "" 192e5c31af7Sopenharmony_ci OpName %76 "_GLF_color" 193e5c31af7Sopenharmony_ci OpName %104 "indexable" 194e5c31af7Sopenharmony_ci OpDecorate %47 BuiltIn FragCoord 195e5c31af7Sopenharmony_ci OpMemberDecorate %50 0 Offset 0 196e5c31af7Sopenharmony_ci OpDecorate %50 Block 197e5c31af7Sopenharmony_ci OpDecorate %52 DescriptorSet 0 198e5c31af7Sopenharmony_ci OpDecorate %52 Binding 0 199e5c31af7Sopenharmony_ci OpDecorate %76 Location 0 200e5c31af7Sopenharmony_ci %2 = OpTypeVoid 201e5c31af7Sopenharmony_ci %3 = OpTypeFunction %2 202e5c31af7Sopenharmony_ci %6 = OpTypeInt 32 1 203e5c31af7Sopenharmony_ci %13 = OpConstant %6 0 204e5c31af7Sopenharmony_ci %20 = OpConstant %6 1 205e5c31af7Sopenharmony_ci %21 = OpTypeBool 206e5c31af7Sopenharmony_ci %28 = OpConstant %6 3 207e5c31af7Sopenharmony_ci %33 = OpConstant %6 2 208e5c31af7Sopenharmony_ci %41 = OpTypeFloat 32 209e5c31af7Sopenharmony_ci %42 = OpTypeVector %41 2 210e5c31af7Sopenharmony_ci %45 = OpTypeVector %41 4 211e5c31af7Sopenharmony_ci %46 = OpTypePointer Input %45 212e5c31af7Sopenharmony_ci %47 = OpVariable %46 Input 213e5c31af7Sopenharmony_ci %50 = OpTypeStruct %42 214e5c31af7Sopenharmony_ci %51 = OpTypePointer Uniform %50 215e5c31af7Sopenharmony_ci %52 = OpVariable %51 Uniform 216e5c31af7Sopenharmony_ci %53 = OpTypePointer Uniform %42 217e5c31af7Sopenharmony_ci %58 = OpConstant %41 8 218e5c31af7Sopenharmony_ci %62 = OpTypeInt 32 0 219e5c31af7Sopenharmony_ci %68 = OpConstant %6 8 220e5c31af7Sopenharmony_ci %75 = OpTypePointer Output %45 221e5c31af7Sopenharmony_ci %76 = OpVariable %75 Output 222e5c31af7Sopenharmony_ci %77 = OpConstant %62 16 223e5c31af7Sopenharmony_ci %78 = OpTypeArray %45 %77 224e5c31af7Sopenharmony_ci %79 = OpConstant %41 0 225e5c31af7Sopenharmony_ci %80 = OpConstant %41 1 226e5c31af7Sopenharmony_ci %81 = OpConstantComposite %45 %79 %79 %79 %80 227e5c31af7Sopenharmony_ci %82 = OpConstant %41 0.5 228e5c31af7Sopenharmony_ci %83 = OpConstantComposite %45 %82 %79 %79 %80 229e5c31af7Sopenharmony_ci %84 = OpConstantComposite %45 %79 %82 %79 %80 230e5c31af7Sopenharmony_ci %85 = OpConstantComposite %45 %82 %82 %79 %80 231e5c31af7Sopenharmony_ci %86 = OpConstantComposite %45 %79 %79 %82 %80 232e5c31af7Sopenharmony_ci %87 = OpConstantComposite %45 %82 %79 %82 %80 233e5c31af7Sopenharmony_ci %88 = OpConstantComposite %45 %79 %82 %82 %80 234e5c31af7Sopenharmony_ci %89 = OpConstantComposite %45 %82 %82 %82 %80 235e5c31af7Sopenharmony_ci %90 = OpConstantComposite %45 %80 %79 %79 %80 236e5c31af7Sopenharmony_ci %91 = OpConstantComposite %45 %79 %80 %79 %80 237e5c31af7Sopenharmony_ci %92 = OpConstantComposite %45 %80 %80 %79 %80 238e5c31af7Sopenharmony_ci %93 = OpConstantComposite %45 %79 %79 %80 %80 239e5c31af7Sopenharmony_ci %94 = OpConstantComposite %45 %80 %79 %80 %80 240e5c31af7Sopenharmony_ci %95 = OpConstantComposite %45 %79 %80 %80 %80 241e5c31af7Sopenharmony_ci %96 = OpConstantComposite %45 %80 %80 %80 %80 242e5c31af7Sopenharmony_ci %97 = OpConstantComposite %78 %81 %83 %84 %85 %86 %87 %88 %89 %81 %90 %91 %92 %93 %94 %95 %96 243e5c31af7Sopenharmony_ci %101 = OpConstant %6 16 244e5c31af7Sopenharmony_ci %103 = OpTypePointer Function %78 245e5c31af7Sopenharmony_ci %105 = OpTypePointer Function %45 246e5c31af7Sopenharmony_ci %403 = OpConstant %41 0 247e5c31af7Sopenharmony_ci %404 = OpConstantComposite %45 %403 %403 %403 %403 248e5c31af7Sopenharmony_ci %405 = OpConstantComposite %78 %404 %404 %404 %404 %404 %404 %404 %404 %404 %404 %404 %404 %404 %404 %404 %404 249e5c31af7Sopenharmony_ci %4 = OpFunction %2 None %3 250e5c31af7Sopenharmony_ci %5 = OpLabel 251e5c31af7Sopenharmony_ci %104 = OpVariable %103 Function 252e5c31af7Sopenharmony_ci %48 = OpLoad %45 %47 253e5c31af7Sopenharmony_ci %49 = OpVectorShuffle %42 %48 %48 0 1 254e5c31af7Sopenharmony_ci %238 = OpCompositeConstruct %45 %79 %58 %49 255e5c31af7Sopenharmony_ci %54 = OpAccessChain %53 %52 %13 256e5c31af7Sopenharmony_ci %55 = OpLoad %42 %54 257e5c31af7Sopenharmony_ci %239 = OpCompositeConstruct %78 %86 %94 %88 %95 %96 %88 %88 %87 %92 %48 %86 %85 %84 %83 %91 %90 258e5c31af7Sopenharmony_ci %56 = OpFDiv %42 %49 %55 259e5c31af7Sopenharmony_ci %59 = OpVectorTimesScalar %42 %56 %58 260e5c31af7Sopenharmony_ci %60 = OpExtInst %42 %1 Floor %59 261e5c31af7Sopenharmony_ci %241 = OpCompositeConstruct %45 %59 %82 %80 262e5c31af7Sopenharmony_ci %66 = OpCompositeExtract %41 %60 0 263e5c31af7Sopenharmony_ci %67 = OpConvertFToS %6 %66 264e5c31af7Sopenharmony_ci %69 = OpIMul %6 %67 %68 265e5c31af7Sopenharmony_ci %72 = OpCompositeExtract %41 %60 1 266e5c31af7Sopenharmony_ci %73 = OpConvertFToS %6 %72 267e5c31af7Sopenharmony_ci %74 = OpIAdd %6 %69 %73 268e5c31af7Sopenharmony_ci OpBranch %111 269e5c31af7Sopenharmony_ci %111 = OpLabel 270e5c31af7Sopenharmony_ci %135 = OpPhi %6 %13 %5 %128 %129 271e5c31af7Sopenharmony_ci %134 = OpPhi %6 %74 %5 %137 %129 272e5c31af7Sopenharmony_ci %114 = OpSGreaterThan %21 %134 %20 273e5c31af7Sopenharmony_ci OpLoopMerge %130 %129 None 274e5c31af7Sopenharmony_ci OpBranchConditional %114 %115 %130 275e5c31af7Sopenharmony_ci %115 = OpLabel 276e5c31af7Sopenharmony_ci %117 = OpBitwiseAnd %6 %134 %20 277e5c31af7Sopenharmony_ci %118 = OpIEqual %21 %117 %20 278e5c31af7Sopenharmony_ci OpSelectionMerge %126 None 279e5c31af7Sopenharmony_ci OpBranchConditional %118 %119 %123 280e5c31af7Sopenharmony_ci %119 = OpLabel 281e5c31af7Sopenharmony_ci %121 = OpIMul %6 %28 %134 282e5c31af7Sopenharmony_ci %122 = OpIAdd %6 %121 %20 283e5c31af7Sopenharmony_ci OpBranch %126 284e5c31af7Sopenharmony_ci %123 = OpLabel 285e5c31af7Sopenharmony_ci %125 = OpSDiv %6 %134 %33 286e5c31af7Sopenharmony_ci OpBranch %126 287e5c31af7Sopenharmony_ci %126 = OpLabel 288e5c31af7Sopenharmony_ci %137 = OpPhi %6 %122 %119 %125 %123 289e5c31af7Sopenharmony_ci %128 = OpIAdd %6 %135 %20 290e5c31af7Sopenharmony_ci OpBranch %129 291e5c31af7Sopenharmony_ci %129 = OpLabel 292e5c31af7Sopenharmony_ci OpBranch %111 293e5c31af7Sopenharmony_ci %130 = OpLabel 294e5c31af7Sopenharmony_ci %102 = OpSMod %6 %135 %101 295e5c31af7Sopenharmony_ci OpStore %104 %97 296e5c31af7Sopenharmony_ci %501 = OpLoad %78 %104 297e5c31af7Sopenharmony_ci OpStore %104 %405 298e5c31af7Sopenharmony_ci OpStore %104 %501 299e5c31af7Sopenharmony_ci %248 = OpCompositeExtract %45 %239 1 300e5c31af7Sopenharmony_ci %245 = OpCompositeConstruct %78 %87 %87 %91 %81 %87 %89 %94 %81 %91 %238 %86 %88 %87 %92 %94 %241 301e5c31af7Sopenharmony_ci %106 = OpAccessChain %105 %104 %102 302e5c31af7Sopenharmony_ci %107 = OpLoad %45 %106 303e5c31af7Sopenharmony_ci OpStore %76 %107 304e5c31af7Sopenharmony_ci OpReturn 305e5c31af7Sopenharmony_ci OpFunctionEnd 306e5c31af7Sopenharmony_ciEND 307e5c31af7Sopenharmony_ci 308e5c31af7Sopenharmony_ci# uniforms for variant 309e5c31af7Sopenharmony_ci 310e5c31af7Sopenharmony_ci# resolution 311e5c31af7Sopenharmony_ciBUFFER variant_resolution DATA_TYPE vec2<float> STD140 DATA 312e5c31af7Sopenharmony_ci 256.0 256.0 313e5c31af7Sopenharmony_ciEND 314e5c31af7Sopenharmony_ci 315e5c31af7Sopenharmony_ciBUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM 316e5c31af7Sopenharmony_ci 317e5c31af7Sopenharmony_ciPIPELINE graphics variant_pipeline 318e5c31af7Sopenharmony_ci ATTACH variant_vertex_shader 319e5c31af7Sopenharmony_ci ATTACH variant_fragment_shader 320e5c31af7Sopenharmony_ci FRAMEBUFFER_SIZE 256 256 321e5c31af7Sopenharmony_ci BIND BUFFER variant_framebuffer AS color LOCATION 0 322e5c31af7Sopenharmony_ci BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0 323e5c31af7Sopenharmony_ciEND 324e5c31af7Sopenharmony_ciCLEAR_COLOR variant_pipeline 0 0 0 255 325e5c31af7Sopenharmony_ci 326e5c31af7Sopenharmony_ciCLEAR variant_pipeline 327e5c31af7Sopenharmony_ciRUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256 328e5c31af7Sopenharmony_ci 329e5c31af7Sopenharmony_ciEXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005 330