#!amber # Copyright (c) 2024 The Khronos Group Inc. # Copyright (c) 2024 AMD # # 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. # # Immediate/inline arguments to packed 16-bit operations might handled # incorrectly in the compiler backend. DEVICE_FEATURE Storage16BitFeatures.storageBuffer16BitAccess DEVICE_FEATURE Float16Int8Features.shaderFloat16 DEVICE_FEATURE shaderInt16 DEVICE_PROPERTY FloatControlsProperties.shaderDenormPreserveFloat16 # SPIR-V code below generated from following GLSL source and extended with # OpCapability DenormPreserve # OpExtension "SPV_KHR_float_controls" # OpExecutionMode %4 DenormPreserve 16 # # #version 460 # #extension GL_EXT_shader_16bit_storage : require # #extension GL_EXT_shader_explicit_arithmetic_types : require # # layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in; # # layout(set = 0, binding = 0) buffer Result1 { # f16vec2 fp16[]; # }; # # layout(set = 0, binding = 1) buffer Result2 { # i16vec2 i16[]; # }; # # layout(set = 0, binding = 2) uniform Constants { # uvec3 bound; # } consts; # # void main() { # if (any(greaterThanEqual(gl_GlobalInvocationID, consts.bound))) # return; # # ivec2 id32 = ivec2(gl_GlobalInvocationID.xy); # int idx = id32.y * 8 + id32.x; # # fp16[idx + 0] += f16vec2(1.0, 1.0); # fp16[idx + 1] += f16vec2(-1.0, -1.0); # fp16[idx + 2] += f16vec2(0.5, 0.5); # fp16[idx + 3] += f16vec2(-0.5, -0.5); # fp16[idx + 4] += f16vec2(2.0, 2.0); # fp16[idx + 5] += f16vec2(-2.0, -2.0); # fp16[idx + 6] += f16vec2(4.0, 4.0); # fp16[idx + 7] += f16vec2(-4.0, -4.0); # fp16[idx + 8] += int16BitsToHalf(i16vec2(0x3118, 0x3118)); // 1/2pi # # fp16[idx + 9] += f16vec2(1.0, 0.0); # fp16[idx + 10] += f16vec2(0.0, 1.0); # fp16[idx + 11] += f16vec2(1.0, -1.0); # fp16[idx + 12] += f16vec2(-1.0, 1.0); # # float16_t int1 = int16BitsToHalf(1s); # float16_t int17 = int16BitsToHalf(17s); # float16_t int64 = int16BitsToHalf(64s); # fp16[idx + 13] += f16vec2(int1, 0); # fp16[idx + 14] += f16vec2(int1, int1); # fp16[idx + 15] += f16vec2(0, int1); # fp16[idx + 16] += f16vec2(int17, 0); # fp16[idx + 17] += f16vec2(int17, int17); # fp16[idx + 18] += f16vec2(0, int17); # fp16[idx + 19] += f16vec2(int64, 0); # fp16[idx + 20] += f16vec2(int64, int64); # fp16[idx + 21] += f16vec2(0, int64); # # fp16[idx + 22] -= f16vec2(1.0, 1.0); # fp16[idx + 23] -= f16vec2(0.0, 1.0); # fp16[idx + 24] -= f16vec2(1.0, 0.0); # # f16vec2 a = fp16[idx + 29]; # fp16[idx + 25] = fma(f16vec2(2.0, 2.0), a, fp16[idx + 25]); # fp16[idx + 26] = fma(f16vec2(0.0, 2.0), a, fp16[idx + 26]); # fp16[idx + 27] = fma(f16vec2(2.0, 0.0), a, fp16[idx + 27]); # fp16[idx + 28] = fma(f16vec2(2.0, 1.0), a, fp16[idx + 28]); # # fp16[idx + 29] *= f16vec2(2.0, 2.0); # fp16[idx + 30] *= f16vec2(0.0, 2.0); # fp16[idx + 31] *= f16vec2(2.0, 0.0); # fp16[idx + 32] *= f16vec2(2.0, 1.0); # # i16[idx + 33] += i16vec2(1, 1); # i16[idx + 34] += i16vec2(1, 0); # i16[idx + 35] += i16vec2(0, 1); # i16[idx + 36] += i16vec2(64, 64); # i16[idx + 37] += i16vec2(-16, -16); # # i16[idx + 38] += i16vec2(0x3800, 0); // fp16 0.5 # i16[idx + 39] += i16vec2(0, 0x3800); // fp16 0.5 # i16[idx + 40] += i16vec2(0x3800, 0x3800); // fp16 0.5 # i16[idx + 41] += i16vec2(0, 0x3f00); // fp32 0.5 # i16[idx + 42] += i16vec2(0x3f00, 0); // fp32 0.5 # i16[idx + 43] += i16vec2(0x3f00, 0x3f00); // fp32 0.5 # i16[idx + 44] += i16vec2(0xb800, 0); // fp16 -0.5 # i16[idx + 45] += i16vec2(0, 0xbf00); // fp32 -0.5 # i16[idx + 46] += i16vec2(0x3c00, 0); // fp16 1.0 # i16[idx + 47] += i16vec2(0, 0x3f80); // fp32 1.0 # i16[idx + 48] += i16vec2(0xbc00, 0); // fp16 -1.0 # i16[idx + 49] += i16vec2(0, 0xbf80); // fp32 -1.0 # i16[idx + 50] += i16vec2(0x4000, 0); // fp16 2.0 # i16[idx + 51] += i16vec2(0, 0x4000); // fp32 2.0 # i16[idx + 52] += i16vec2(0xc000, 0); // fp16 -2.0 # i16[idx + 53] += i16vec2(0, 0xc000); // fp32 -2.0 # i16[idx + 54] += i16vec2(0x4400, 0); // fp16 4.0 # i16[idx + 55] += i16vec2(0, 0x4080); // fp32 4.0 # i16[idx + 56] += i16vec2(0xc400, 0); // fp16 -4.0 # i16[idx + 57] += i16vec2(0, 0xc080); // fp32 -4.0 # i16[idx + 58] += i16vec2(0x3118, 0); // fp16 1/2pi # i16[idx + 59] += i16vec2(0, 0x3118); // fp16 1/2pi # i16[idx + 60] += i16vec2(0x3118, 0x3118); // fp16 1/2pi # i16[idx + 61] += i16vec2(0xf983, 0x3e22); // fp32 1/2pi # i16[idx + 62] += i16vec2(0x3e22, 0xf983); # i16[idx + 63] += i16vec2(0x3e22, 0x3e22); # i16[idx + 64] += i16vec2(0xf983, 0xf983); # i16[idx + 65] += i16vec2(0x3e22, 0); # i16[idx + 66] += i16vec2(0xf983, 0); # i16[idx + 67] += i16vec2(-2, -1); # i16[idx + 68] += i16vec2(-1, -2); # i16[idx + 69] += i16vec2(12, 20); # # i16[idx + 70] -= i16vec2(0x3800, 0); // fp16 0.5 # i16[idx + 71] -= i16vec2(0, 0x3800); // fp16 0.5 # i16[idx + 72] -= i16vec2(0x3800, 0x3800); // fp16 0.5 # i16[idx + 73] -= i16vec2(0, 0x3f00); // fp32 0.5 # i16[idx + 74] -= i16vec2(0x3f00, 0); // fp32 0.5 # i16[idx + 75] -= i16vec2(0x3f00, 0x3f00); // fp32 0.5 # i16[idx + 76] -= i16vec2(0xb800, 0); // fp16 -0.5 # i16[idx + 77] -= i16vec2(0, 0xbf00); // fp32 -0.5 # i16[idx + 78] -= i16vec2(0x3c00, 0); // fp16 1.0 # i16[idx + 79] -= i16vec2(0, 0x3f80); // fp32 1.0 # i16[idx + 80] -= i16vec2(0xbc00, 0); // fp16 -1.0 # i16[idx + 81] -= i16vec2(0, 0xbf80); // fp32 -1.0 # i16[idx + 82] -= i16vec2(0x4000, 0); // fp16 2.0 # i16[idx + 83] -= i16vec2(0, 0x4000); // fp32 2.0 # i16[idx + 84] -= i16vec2(0xc000, 0); // fp16 -2.0 # i16[idx + 85] -= i16vec2(0, 0xc000); // fp32 -2.0 # i16[idx + 86] -= i16vec2(0x4400, 0); // fp16 4.0 # i16[idx + 87] -= i16vec2(0, 0x4080); // fp32 4.0 # i16[idx + 88] -= i16vec2(0xc400, 0); // fp16 -4.0 # i16[idx + 89] -= i16vec2(0, 0xc080); // fp32 -4.0 # i16[idx + 90] -= i16vec2(0x3118, 0); // fp16 1/2pi # i16[idx + 91] -= i16vec2(0, 0x3118); // fp16 1/2pi # i16[idx + 92] -= i16vec2(0x3118, 0x3118); // fp16 1/2pi # i16[idx + 93] -= i16vec2(0xf983, 0x3e22); // fp32 1/2pi # i16[idx + 94] -= i16vec2(0x3e22, 0xf983); # i16[idx + 95] -= i16vec2(0x3e22, 0x3e22); # i16[idx + 96] -= i16vec2(0xf983, 0xf983); # i16[idx + 97] -= i16vec2(0x3e22, 0); # i16[idx + 98] -= i16vec2(0xf983, 0); # i16[idx + 99] -= i16vec2(-2, -1); # i16[idx + 100] -= i16vec2(-1, -2); # i16[idx + 101] -= i16vec2(12, 20); # # i16[idx + 102] -= i16vec2(-1, -1); # } SHADER compute compute_shader SPIRV-ASM OpCapability Shader OpCapability Float16 OpCapability Int16 OpCapability StorageBuffer16BitAccess OpCapability DenormPreserve OpExtension "SPV_KHR_float_controls" OpExtension "SPV_KHR_16bit_storage" %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint GLCompute %4 "main" %9 OpExecutionMode %4 DenormPreserve 16 OpExecutionMode %4 LocalSize 8 8 1 OpDecorate %9 BuiltIn GlobalInvocationId OpMemberDecorate %11 0 Offset 0 OpDecorate %11 Block OpDecorate %13 DescriptorSet 0 OpDecorate %13 Binding 2 OpDecorate %46 ArrayStride 4 OpMemberDecorate %47 0 Offset 0 OpDecorate %47 BufferBlock OpDecorate %49 DescriptorSet 0 OpDecorate %49 Binding 0 OpDecorate %358 ArrayStride 4 OpMemberDecorate %359 0 Offset 0 OpDecorate %359 BufferBlock OpDecorate %361 DescriptorSet 0 OpDecorate %361 Binding 1 OpDecorate %913 BuiltIn WorkgroupSize %2 = OpTypeVoid %3 = OpTypeFunction %2 %6 = OpTypeInt 32 0 %7 = OpTypeVector %6 3 %8 = OpTypePointer Input %7 %9 = OpVariable %8 Input %11 = OpTypeStruct %7 %12 = OpTypePointer Uniform %11 %13 = OpVariable %12 Uniform %14 = OpTypeInt 32 1 %15 = OpConstant %14 0 %16 = OpTypePointer Uniform %7 %19 = OpTypeBool %20 = OpTypeVector %19 3 %26 = OpTypeVector %14 2 %27 = OpTypePointer Function %26 %29 = OpTypeVector %6 2 %33 = OpTypePointer Function %14 %35 = OpConstant %6 1 %38 = OpConstant %14 8 %40 = OpConstant %6 0 %44 = OpTypeFloat 16 %45 = OpTypeVector %44 2 %46 = OpTypeRuntimeArray %45 %47 = OpTypeStruct %46 %48 = OpTypePointer Uniform %47 %49 = OpVariable %48 Uniform %52 = OpConstant %44 0x1p+0 %53 = OpConstantComposite %45 %52 %52 %54 = OpTypePointer Uniform %45 %60 = OpConstant %14 1 %62 = OpConstant %44 -0x1p+0 %63 = OpConstantComposite %45 %62 %62 %69 = OpConstant %14 2 %71 = OpConstant %44 0x1p-1 %72 = OpConstantComposite %45 %71 %71 %78 = OpConstant %14 3 %80 = OpConstant %44 -0x1p-1 %81 = OpConstantComposite %45 %80 %80 %87 = OpConstant %14 4 %89 = OpConstant %44 0x1p+1 %90 = OpConstantComposite %45 %89 %89 %96 = OpConstant %14 5 %98 = OpConstant %44 -0x1p+1 %99 = OpConstantComposite %45 %98 %98 %105 = OpConstant %14 6 %107 = OpConstant %44 0x1p+2 %108 = OpConstantComposite %45 %107 %107 %114 = OpConstant %14 7 %116 = OpConstant %44 -0x1p+2 %117 = OpConstantComposite %45 %116 %116 %124 = OpTypeInt 16 1 %125 = OpTypeVector %124 2 %126 = OpConstant %124 12568 %127 = OpConstantComposite %125 %126 %126 %134 = OpConstant %14 9 %136 = OpConstant %44 0x0p+0 %137 = OpConstantComposite %45 %52 %136 %143 = OpConstant %14 10 %145 = OpConstantComposite %45 %136 %52 %151 = OpConstant %14 11 %153 = OpConstantComposite %45 %52 %62 %159 = OpConstant %14 12 %161 = OpConstantComposite %45 %62 %52 %166 = OpTypePointer Function %44 %168 = OpConstant %124 1 %171 = OpConstant %124 17 %174 = OpConstant %124 64 %177 = OpConstant %14 13 %186 = OpConstant %14 14 %196 = OpConstant %14 15 %205 = OpConstant %14 16 %214 = OpConstant %14 17 %224 = OpConstant %14 18 %233 = OpConstant %14 19 %242 = OpConstant %14 20 %252 = OpConstant %14 21 %261 = OpConstant %14 22 %268 = OpConstant %14 23 %275 = OpConstant %14 24 %281 = OpTypePointer Function %45 %284 = OpConstant %14 29 %289 = OpConstant %14 25 %299 = OpConstant %14 26 %301 = OpConstantComposite %45 %136 %89 %310 = OpConstant %14 27 %312 = OpConstantComposite %45 %89 %136 %321 = OpConstant %14 28 %323 = OpConstantComposite %45 %89 %52 %338 = OpConstant %14 30 %345 = OpConstant %14 31 %352 = OpConstant %14 32 %358 = OpTypeRuntimeArray %125 %359 = OpTypeStruct %358 %360 = OpTypePointer Uniform %359 %361 = OpVariable %360 Uniform %363 = OpConstant %14 33 %365 = OpConstantComposite %125 %168 %168 %366 = OpTypePointer Uniform %125 %372 = OpConstant %14 34 %374 = OpConstant %124 0 %375 = OpConstantComposite %125 %168 %374 %381 = OpConstant %14 35 %383 = OpConstantComposite %125 %374 %168 %389 = OpConstant %14 36 %391 = OpConstantComposite %125 %174 %174 %397 = OpConstant %14 37 %399 = OpConstant %124 -16 %400 = OpConstantComposite %125 %399 %399 %406 = OpConstant %14 38 %408 = OpConstant %124 14336 %409 = OpConstantComposite %125 %408 %374 %415 = OpConstant %14 39 %417 = OpConstantComposite %125 %374 %408 %423 = OpConstant %14 40 %425 = OpConstantComposite %125 %408 %408 %431 = OpConstant %14 41 %433 = OpConstant %124 16128 %434 = OpConstantComposite %125 %374 %433 %440 = OpConstant %14 42 %442 = OpConstantComposite %125 %433 %374 %448 = OpConstant %14 43 %450 = OpConstantComposite %125 %433 %433 %456 = OpConstant %14 44 %458 = OpConstant %124 -18432 %459 = OpConstantComposite %125 %458 %374 %465 = OpConstant %14 45 %467 = OpConstant %124 -16640 %468 = OpConstantComposite %125 %374 %467 %474 = OpConstant %14 46 %476 = OpConstant %124 15360 %477 = OpConstantComposite %125 %476 %374 %483 = OpConstant %14 47 %485 = OpConstant %124 16256 %486 = OpConstantComposite %125 %374 %485 %492 = OpConstant %14 48 %494 = OpConstant %124 -17408 %495 = OpConstantComposite %125 %494 %374 %501 = OpConstant %14 49 %503 = OpConstant %124 -16512 %504 = OpConstantComposite %125 %374 %503 %510 = OpConstant %14 50 %512 = OpConstant %124 16384 %513 = OpConstantComposite %125 %512 %374 %519 = OpConstant %14 51 %521 = OpConstantComposite %125 %374 %512 %527 = OpConstant %14 52 %529 = OpConstant %124 -16384 %530 = OpConstantComposite %125 %529 %374 %536 = OpConstant %14 53 %538 = OpConstantComposite %125 %374 %529 %544 = OpConstant %14 54 %546 = OpConstant %124 17408 %547 = OpConstantComposite %125 %546 %374 %553 = OpConstant %14 55 %555 = OpConstant %124 16512 %556 = OpConstantComposite %125 %374 %555 %562 = OpConstant %14 56 %564 = OpConstant %124 -15360 %565 = OpConstantComposite %125 %564 %374 %571 = OpConstant %14 57 %573 = OpConstant %124 -16256 %574 = OpConstantComposite %125 %374 %573 %580 = OpConstant %14 58 %582 = OpConstantComposite %125 %126 %374 %588 = OpConstant %14 59 %590 = OpConstantComposite %125 %374 %126 %596 = OpConstant %14 60 %603 = OpConstant %14 61 %605 = OpConstant %124 -1661 %606 = OpConstant %124 15906 %607 = OpConstantComposite %125 %605 %606 %613 = OpConstant %14 62 %615 = OpConstantComposite %125 %606 %605 %621 = OpConstant %14 63 %623 = OpConstantComposite %125 %606 %606 %629 = OpConstant %14 64 %631 = OpConstantComposite %125 %605 %605 %637 = OpConstant %14 65 %639 = OpConstantComposite %125 %606 %374 %645 = OpConstant %14 66 %647 = OpConstantComposite %125 %605 %374 %653 = OpConstant %14 67 %655 = OpConstant %124 -2 %656 = OpConstant %124 -1 %657 = OpConstantComposite %125 %655 %656 %663 = OpConstant %14 68 %665 = OpConstantComposite %125 %656 %655 %671 = OpConstant %14 69 %673 = OpConstant %124 12 %674 = OpConstant %124 20 %675 = OpConstantComposite %125 %673 %674 %681 = OpConstant %14 70 %688 = OpConstant %14 71 %695 = OpConstant %14 72 %702 = OpConstant %14 73 %709 = OpConstant %14 74 %716 = OpConstant %14 75 %723 = OpConstant %14 76 %730 = OpConstant %14 77 %737 = OpConstant %14 78 %744 = OpConstant %14 79 %751 = OpConstant %14 80 %758 = OpConstant %14 81 %765 = OpConstant %14 82 %772 = OpConstant %14 83 %779 = OpConstant %14 84 %786 = OpConstant %14 85 %793 = OpConstant %14 86 %800 = OpConstant %14 87 %807 = OpConstant %14 88 %814 = OpConstant %14 89 %821 = OpConstant %14 90 %828 = OpConstant %14 91 %835 = OpConstant %14 92 %842 = OpConstant %14 93 %849 = OpConstant %14 94 %856 = OpConstant %14 95 %863 = OpConstant %14 96 %870 = OpConstant %14 97 %877 = OpConstant %14 98 %884 = OpConstant %14 99 %891 = OpConstant %14 100 %898 = OpConstant %14 101 %905 = OpConstant %14 102 %907 = OpConstantComposite %125 %656 %656 %912 = OpConstant %6 8 %913 = OpConstantComposite %7 %912 %912 %35 %4 = OpFunction %2 None %3 %5 = OpLabel %28 = OpVariable %27 Function %34 = OpVariable %33 Function %167 = OpVariable %166 Function %170 = OpVariable %166 Function %173 = OpVariable %166 Function %282 = OpVariable %281 Function %10 = OpLoad %7 %9 %17 = OpAccessChain %16 %13 %15 %18 = OpLoad %7 %17 %21 = OpUGreaterThanEqual %20 %10 %18 %22 = OpAny %19 %21 OpSelectionMerge %24 None OpBranchConditional %22 %23 %24 %23 = OpLabel OpReturn %24 = OpLabel %30 = OpLoad %7 %9 %31 = OpVectorShuffle %29 %30 %30 0 1 %32 = OpBitcast %26 %31 OpStore %28 %32 %36 = OpAccessChain %33 %28 %35 %37 = OpLoad %14 %36 %39 = OpIMul %14 %37 %38 %41 = OpAccessChain %33 %28 %40 %42 = OpLoad %14 %41 %43 = OpIAdd %14 %39 %42 OpStore %34 %43 %50 = OpLoad %14 %34 %51 = OpIAdd %14 %50 %15 %55 = OpAccessChain %54 %49 %15 %51 %56 = OpLoad %45 %55 %57 = OpFAdd %45 %56 %53 %58 = OpAccessChain %54 %49 %15 %51 OpStore %58 %57 %59 = OpLoad %14 %34 %61 = OpIAdd %14 %59 %60 %64 = OpAccessChain %54 %49 %15 %61 %65 = OpLoad %45 %64 %66 = OpFAdd %45 %65 %63 %67 = OpAccessChain %54 %49 %15 %61 OpStore %67 %66 %68 = OpLoad %14 %34 %70 = OpIAdd %14 %68 %69 %73 = OpAccessChain %54 %49 %15 %70 %74 = OpLoad %45 %73 %75 = OpFAdd %45 %74 %72 %76 = OpAccessChain %54 %49 %15 %70 OpStore %76 %75 %77 = OpLoad %14 %34 %79 = OpIAdd %14 %77 %78 %82 = OpAccessChain %54 %49 %15 %79 %83 = OpLoad %45 %82 %84 = OpFAdd %45 %83 %81 %85 = OpAccessChain %54 %49 %15 %79 OpStore %85 %84 %86 = OpLoad %14 %34 %88 = OpIAdd %14 %86 %87 %91 = OpAccessChain %54 %49 %15 %88 %92 = OpLoad %45 %91 %93 = OpFAdd %45 %92 %90 %94 = OpAccessChain %54 %49 %15 %88 OpStore %94 %93 %95 = OpLoad %14 %34 %97 = OpIAdd %14 %95 %96 %100 = OpAccessChain %54 %49 %15 %97 %101 = OpLoad %45 %100 %102 = OpFAdd %45 %101 %99 %103 = OpAccessChain %54 %49 %15 %97 OpStore %103 %102 %104 = OpLoad %14 %34 %106 = OpIAdd %14 %104 %105 %109 = OpAccessChain %54 %49 %15 %106 %110 = OpLoad %45 %109 %111 = OpFAdd %45 %110 %108 %112 = OpAccessChain %54 %49 %15 %106 OpStore %112 %111 %113 = OpLoad %14 %34 %115 = OpIAdd %14 %113 %114 %118 = OpAccessChain %54 %49 %15 %115 %119 = OpLoad %45 %118 %120 = OpFAdd %45 %119 %117 %121 = OpAccessChain %54 %49 %15 %115 OpStore %121 %120 %122 = OpLoad %14 %34 %123 = OpIAdd %14 %122 %38 %128 = OpBitcast %45 %127 %129 = OpAccessChain %54 %49 %15 %123 %130 = OpLoad %45 %129 %131 = OpFAdd %45 %130 %128 %132 = OpAccessChain %54 %49 %15 %123 OpStore %132 %131 %133 = OpLoad %14 %34 %135 = OpIAdd %14 %133 %134 %138 = OpAccessChain %54 %49 %15 %135 %139 = OpLoad %45 %138 %140 = OpFAdd %45 %139 %137 %141 = OpAccessChain %54 %49 %15 %135 OpStore %141 %140 %142 = OpLoad %14 %34 %144 = OpIAdd %14 %142 %143 %146 = OpAccessChain %54 %49 %15 %144 %147 = OpLoad %45 %146 %148 = OpFAdd %45 %147 %145 %149 = OpAccessChain %54 %49 %15 %144 OpStore %149 %148 %150 = OpLoad %14 %34 %152 = OpIAdd %14 %150 %151 %154 = OpAccessChain %54 %49 %15 %152 %155 = OpLoad %45 %154 %156 = OpFAdd %45 %155 %153 %157 = OpAccessChain %54 %49 %15 %152 OpStore %157 %156 %158 = OpLoad %14 %34 %160 = OpIAdd %14 %158 %159 %162 = OpAccessChain %54 %49 %15 %160 %163 = OpLoad %45 %162 %164 = OpFAdd %45 %163 %161 %165 = OpAccessChain %54 %49 %15 %160 OpStore %165 %164 %169 = OpBitcast %44 %168 OpStore %167 %169 %172 = OpBitcast %44 %171 OpStore %170 %172 %175 = OpBitcast %44 %174 OpStore %173 %175 %176 = OpLoad %14 %34 %178 = OpIAdd %14 %176 %177 %179 = OpLoad %44 %167 %180 = OpCompositeConstruct %45 %179 %136 %181 = OpAccessChain %54 %49 %15 %178 %182 = OpLoad %45 %181 %183 = OpFAdd %45 %182 %180 %184 = OpAccessChain %54 %49 %15 %178 OpStore %184 %183 %185 = OpLoad %14 %34 %187 = OpIAdd %14 %185 %186 %188 = OpLoad %44 %167 %189 = OpLoad %44 %167 %190 = OpCompositeConstruct %45 %188 %189 %191 = OpAccessChain %54 %49 %15 %187 %192 = OpLoad %45 %191 %193 = OpFAdd %45 %192 %190 %194 = OpAccessChain %54 %49 %15 %187 OpStore %194 %193 %195 = OpLoad %14 %34 %197 = OpIAdd %14 %195 %196 %198 = OpLoad %44 %167 %199 = OpCompositeConstruct %45 %136 %198 %200 = OpAccessChain %54 %49 %15 %197 %201 = OpLoad %45 %200 %202 = OpFAdd %45 %201 %199 %203 = OpAccessChain %54 %49 %15 %197 OpStore %203 %202 %204 = OpLoad %14 %34 %206 = OpIAdd %14 %204 %205 %207 = OpLoad %44 %170 %208 = OpCompositeConstruct %45 %207 %136 %209 = OpAccessChain %54 %49 %15 %206 %210 = OpLoad %45 %209 %211 = OpFAdd %45 %210 %208 %212 = OpAccessChain %54 %49 %15 %206 OpStore %212 %211 %213 = OpLoad %14 %34 %215 = OpIAdd %14 %213 %214 %216 = OpLoad %44 %170 %217 = OpLoad %44 %170 %218 = OpCompositeConstruct %45 %216 %217 %219 = OpAccessChain %54 %49 %15 %215 %220 = OpLoad %45 %219 %221 = OpFAdd %45 %220 %218 %222 = OpAccessChain %54 %49 %15 %215 OpStore %222 %221 %223 = OpLoad %14 %34 %225 = OpIAdd %14 %223 %224 %226 = OpLoad %44 %170 %227 = OpCompositeConstruct %45 %136 %226 %228 = OpAccessChain %54 %49 %15 %225 %229 = OpLoad %45 %228 %230 = OpFAdd %45 %229 %227 %231 = OpAccessChain %54 %49 %15 %225 OpStore %231 %230 %232 = OpLoad %14 %34 %234 = OpIAdd %14 %232 %233 %235 = OpLoad %44 %173 %236 = OpCompositeConstruct %45 %235 %136 %237 = OpAccessChain %54 %49 %15 %234 %238 = OpLoad %45 %237 %239 = OpFAdd %45 %238 %236 %240 = OpAccessChain %54 %49 %15 %234 OpStore %240 %239 %241 = OpLoad %14 %34 %243 = OpIAdd %14 %241 %242 %244 = OpLoad %44 %173 %245 = OpLoad %44 %173 %246 = OpCompositeConstruct %45 %244 %245 %247 = OpAccessChain %54 %49 %15 %243 %248 = OpLoad %45 %247 %249 = OpFAdd %45 %248 %246 %250 = OpAccessChain %54 %49 %15 %243 OpStore %250 %249 %251 = OpLoad %14 %34 %253 = OpIAdd %14 %251 %252 %254 = OpLoad %44 %173 %255 = OpCompositeConstruct %45 %136 %254 %256 = OpAccessChain %54 %49 %15 %253 %257 = OpLoad %45 %256 %258 = OpFAdd %45 %257 %255 %259 = OpAccessChain %54 %49 %15 %253 OpStore %259 %258 %260 = OpLoad %14 %34 %262 = OpIAdd %14 %260 %261 %263 = OpAccessChain %54 %49 %15 %262 %264 = OpLoad %45 %263 %265 = OpFSub %45 %264 %53 %266 = OpAccessChain %54 %49 %15 %262 OpStore %266 %265 %267 = OpLoad %14 %34 %269 = OpIAdd %14 %267 %268 %270 = OpAccessChain %54 %49 %15 %269 %271 = OpLoad %45 %270 %272 = OpFSub %45 %271 %145 %273 = OpAccessChain %54 %49 %15 %269 OpStore %273 %272 %274 = OpLoad %14 %34 %276 = OpIAdd %14 %274 %275 %277 = OpAccessChain %54 %49 %15 %276 %278 = OpLoad %45 %277 %279 = OpFSub %45 %278 %137 %280 = OpAccessChain %54 %49 %15 %276 OpStore %280 %279 %283 = OpLoad %14 %34 %285 = OpIAdd %14 %283 %284 %286 = OpAccessChain %54 %49 %15 %285 %287 = OpLoad %45 %286 OpStore %282 %287 %288 = OpLoad %14 %34 %290 = OpIAdd %14 %288 %289 %291 = OpLoad %45 %282 %292 = OpLoad %14 %34 %293 = OpIAdd %14 %292 %289 %294 = OpAccessChain %54 %49 %15 %293 %295 = OpLoad %45 %294 %296 = OpExtInst %45 %1 Fma %90 %291 %295 %297 = OpAccessChain %54 %49 %15 %290 OpStore %297 %296 %298 = OpLoad %14 %34 %300 = OpIAdd %14 %298 %299 %302 = OpLoad %45 %282 %303 = OpLoad %14 %34 %304 = OpIAdd %14 %303 %299 %305 = OpAccessChain %54 %49 %15 %304 %306 = OpLoad %45 %305 %307 = OpExtInst %45 %1 Fma %301 %302 %306 %308 = OpAccessChain %54 %49 %15 %300 OpStore %308 %307 %309 = OpLoad %14 %34 %311 = OpIAdd %14 %309 %310 %313 = OpLoad %45 %282 %314 = OpLoad %14 %34 %315 = OpIAdd %14 %314 %310 %316 = OpAccessChain %54 %49 %15 %315 %317 = OpLoad %45 %316 %318 = OpExtInst %45 %1 Fma %312 %313 %317 %319 = OpAccessChain %54 %49 %15 %311 OpStore %319 %318 %320 = OpLoad %14 %34 %322 = OpIAdd %14 %320 %321 %324 = OpLoad %45 %282 %325 = OpLoad %14 %34 %326 = OpIAdd %14 %325 %321 %327 = OpAccessChain %54 %49 %15 %326 %328 = OpLoad %45 %327 %329 = OpExtInst %45 %1 Fma %323 %324 %328 %330 = OpAccessChain %54 %49 %15 %322 OpStore %330 %329 %331 = OpLoad %14 %34 %332 = OpIAdd %14 %331 %284 %333 = OpAccessChain %54 %49 %15 %332 %334 = OpLoad %45 %333 %335 = OpFMul %45 %334 %90 %336 = OpAccessChain %54 %49 %15 %332 OpStore %336 %335 %337 = OpLoad %14 %34 %339 = OpIAdd %14 %337 %338 %340 = OpAccessChain %54 %49 %15 %339 %341 = OpLoad %45 %340 %342 = OpFMul %45 %341 %301 %343 = OpAccessChain %54 %49 %15 %339 OpStore %343 %342 %344 = OpLoad %14 %34 %346 = OpIAdd %14 %344 %345 %347 = OpAccessChain %54 %49 %15 %346 %348 = OpLoad %45 %347 %349 = OpFMul %45 %348 %312 %350 = OpAccessChain %54 %49 %15 %346 OpStore %350 %349 %351 = OpLoad %14 %34 %353 = OpIAdd %14 %351 %352 %354 = OpAccessChain %54 %49 %15 %353 %355 = OpLoad %45 %354 %356 = OpFMul %45 %355 %323 %357 = OpAccessChain %54 %49 %15 %353 OpStore %357 %356 %362 = OpLoad %14 %34 %364 = OpIAdd %14 %362 %363 %367 = OpAccessChain %366 %361 %15 %364 %368 = OpLoad %125 %367 %369 = OpIAdd %125 %368 %365 %370 = OpAccessChain %366 %361 %15 %364 OpStore %370 %369 %371 = OpLoad %14 %34 %373 = OpIAdd %14 %371 %372 %376 = OpAccessChain %366 %361 %15 %373 %377 = OpLoad %125 %376 %378 = OpIAdd %125 %377 %375 %379 = OpAccessChain %366 %361 %15 %373 OpStore %379 %378 %380 = OpLoad %14 %34 %382 = OpIAdd %14 %380 %381 %384 = OpAccessChain %366 %361 %15 %382 %385 = OpLoad %125 %384 %386 = OpIAdd %125 %385 %383 %387 = OpAccessChain %366 %361 %15 %382 OpStore %387 %386 %388 = OpLoad %14 %34 %390 = OpIAdd %14 %388 %389 %392 = OpAccessChain %366 %361 %15 %390 %393 = OpLoad %125 %392 %394 = OpIAdd %125 %393 %391 %395 = OpAccessChain %366 %361 %15 %390 OpStore %395 %394 %396 = OpLoad %14 %34 %398 = OpIAdd %14 %396 %397 %401 = OpAccessChain %366 %361 %15 %398 %402 = OpLoad %125 %401 %403 = OpIAdd %125 %402 %400 %404 = OpAccessChain %366 %361 %15 %398 OpStore %404 %403 %405 = OpLoad %14 %34 %407 = OpIAdd %14 %405 %406 %410 = OpAccessChain %366 %361 %15 %407 %411 = OpLoad %125 %410 %412 = OpIAdd %125 %411 %409 %413 = OpAccessChain %366 %361 %15 %407 OpStore %413 %412 %414 = OpLoad %14 %34 %416 = OpIAdd %14 %414 %415 %418 = OpAccessChain %366 %361 %15 %416 %419 = OpLoad %125 %418 %420 = OpIAdd %125 %419 %417 %421 = OpAccessChain %366 %361 %15 %416 OpStore %421 %420 %422 = OpLoad %14 %34 %424 = OpIAdd %14 %422 %423 %426 = OpAccessChain %366 %361 %15 %424 %427 = OpLoad %125 %426 %428 = OpIAdd %125 %427 %425 %429 = OpAccessChain %366 %361 %15 %424 OpStore %429 %428 %430 = OpLoad %14 %34 %432 = OpIAdd %14 %430 %431 %435 = OpAccessChain %366 %361 %15 %432 %436 = OpLoad %125 %435 %437 = OpIAdd %125 %436 %434 %438 = OpAccessChain %366 %361 %15 %432 OpStore %438 %437 %439 = OpLoad %14 %34 %441 = OpIAdd %14 %439 %440 %443 = OpAccessChain %366 %361 %15 %441 %444 = OpLoad %125 %443 %445 = OpIAdd %125 %444 %442 %446 = OpAccessChain %366 %361 %15 %441 OpStore %446 %445 %447 = OpLoad %14 %34 %449 = OpIAdd %14 %447 %448 %451 = OpAccessChain %366 %361 %15 %449 %452 = OpLoad %125 %451 %453 = OpIAdd %125 %452 %450 %454 = OpAccessChain %366 %361 %15 %449 OpStore %454 %453 %455 = OpLoad %14 %34 %457 = OpIAdd %14 %455 %456 %460 = OpAccessChain %366 %361 %15 %457 %461 = OpLoad %125 %460 %462 = OpIAdd %125 %461 %459 %463 = OpAccessChain %366 %361 %15 %457 OpStore %463 %462 %464 = OpLoad %14 %34 %466 = OpIAdd %14 %464 %465 %469 = OpAccessChain %366 %361 %15 %466 %470 = OpLoad %125 %469 %471 = OpIAdd %125 %470 %468 %472 = OpAccessChain %366 %361 %15 %466 OpStore %472 %471 %473 = OpLoad %14 %34 %475 = OpIAdd %14 %473 %474 %478 = OpAccessChain %366 %361 %15 %475 %479 = OpLoad %125 %478 %480 = OpIAdd %125 %479 %477 %481 = OpAccessChain %366 %361 %15 %475 OpStore %481 %480 %482 = OpLoad %14 %34 %484 = OpIAdd %14 %482 %483 %487 = OpAccessChain %366 %361 %15 %484 %488 = OpLoad %125 %487 %489 = OpIAdd %125 %488 %486 %490 = OpAccessChain %366 %361 %15 %484 OpStore %490 %489 %491 = OpLoad %14 %34 %493 = OpIAdd %14 %491 %492 %496 = OpAccessChain %366 %361 %15 %493 %497 = OpLoad %125 %496 %498 = OpIAdd %125 %497 %495 %499 = OpAccessChain %366 %361 %15 %493 OpStore %499 %498 %500 = OpLoad %14 %34 %502 = OpIAdd %14 %500 %501 %505 = OpAccessChain %366 %361 %15 %502 %506 = OpLoad %125 %505 %507 = OpIAdd %125 %506 %504 %508 = OpAccessChain %366 %361 %15 %502 OpStore %508 %507 %509 = OpLoad %14 %34 %511 = OpIAdd %14 %509 %510 %514 = OpAccessChain %366 %361 %15 %511 %515 = OpLoad %125 %514 %516 = OpIAdd %125 %515 %513 %517 = OpAccessChain %366 %361 %15 %511 OpStore %517 %516 %518 = OpLoad %14 %34 %520 = OpIAdd %14 %518 %519 %522 = OpAccessChain %366 %361 %15 %520 %523 = OpLoad %125 %522 %524 = OpIAdd %125 %523 %521 %525 = OpAccessChain %366 %361 %15 %520 OpStore %525 %524 %526 = OpLoad %14 %34 %528 = OpIAdd %14 %526 %527 %531 = OpAccessChain %366 %361 %15 %528 %532 = OpLoad %125 %531 %533 = OpIAdd %125 %532 %530 %534 = OpAccessChain %366 %361 %15 %528 OpStore %534 %533 %535 = OpLoad %14 %34 %537 = OpIAdd %14 %535 %536 %539 = OpAccessChain %366 %361 %15 %537 %540 = OpLoad %125 %539 %541 = OpIAdd %125 %540 %538 %542 = OpAccessChain %366 %361 %15 %537 OpStore %542 %541 %543 = OpLoad %14 %34 %545 = OpIAdd %14 %543 %544 %548 = OpAccessChain %366 %361 %15 %545 %549 = OpLoad %125 %548 %550 = OpIAdd %125 %549 %547 %551 = OpAccessChain %366 %361 %15 %545 OpStore %551 %550 %552 = OpLoad %14 %34 %554 = OpIAdd %14 %552 %553 %557 = OpAccessChain %366 %361 %15 %554 %558 = OpLoad %125 %557 %559 = OpIAdd %125 %558 %556 %560 = OpAccessChain %366 %361 %15 %554 OpStore %560 %559 %561 = OpLoad %14 %34 %563 = OpIAdd %14 %561 %562 %566 = OpAccessChain %366 %361 %15 %563 %567 = OpLoad %125 %566 %568 = OpIAdd %125 %567 %565 %569 = OpAccessChain %366 %361 %15 %563 OpStore %569 %568 %570 = OpLoad %14 %34 %572 = OpIAdd %14 %570 %571 %575 = OpAccessChain %366 %361 %15 %572 %576 = OpLoad %125 %575 %577 = OpIAdd %125 %576 %574 %578 = OpAccessChain %366 %361 %15 %572 OpStore %578 %577 %579 = OpLoad %14 %34 %581 = OpIAdd %14 %579 %580 %583 = OpAccessChain %366 %361 %15 %581 %584 = OpLoad %125 %583 %585 = OpIAdd %125 %584 %582 %586 = OpAccessChain %366 %361 %15 %581 OpStore %586 %585 %587 = OpLoad %14 %34 %589 = OpIAdd %14 %587 %588 %591 = OpAccessChain %366 %361 %15 %589 %592 = OpLoad %125 %591 %593 = OpIAdd %125 %592 %590 %594 = OpAccessChain %366 %361 %15 %589 OpStore %594 %593 %595 = OpLoad %14 %34 %597 = OpIAdd %14 %595 %596 %598 = OpAccessChain %366 %361 %15 %597 %599 = OpLoad %125 %598 %600 = OpIAdd %125 %599 %127 %601 = OpAccessChain %366 %361 %15 %597 OpStore %601 %600 %602 = OpLoad %14 %34 %604 = OpIAdd %14 %602 %603 %608 = OpAccessChain %366 %361 %15 %604 %609 = OpLoad %125 %608 %610 = OpIAdd %125 %609 %607 %611 = OpAccessChain %366 %361 %15 %604 OpStore %611 %610 %612 = OpLoad %14 %34 %614 = OpIAdd %14 %612 %613 %616 = OpAccessChain %366 %361 %15 %614 %617 = OpLoad %125 %616 %618 = OpIAdd %125 %617 %615 %619 = OpAccessChain %366 %361 %15 %614 OpStore %619 %618 %620 = OpLoad %14 %34 %622 = OpIAdd %14 %620 %621 %624 = OpAccessChain %366 %361 %15 %622 %625 = OpLoad %125 %624 %626 = OpIAdd %125 %625 %623 %627 = OpAccessChain %366 %361 %15 %622 OpStore %627 %626 %628 = OpLoad %14 %34 %630 = OpIAdd %14 %628 %629 %632 = OpAccessChain %366 %361 %15 %630 %633 = OpLoad %125 %632 %634 = OpIAdd %125 %633 %631 %635 = OpAccessChain %366 %361 %15 %630 OpStore %635 %634 %636 = OpLoad %14 %34 %638 = OpIAdd %14 %636 %637 %640 = OpAccessChain %366 %361 %15 %638 %641 = OpLoad %125 %640 %642 = OpIAdd %125 %641 %639 %643 = OpAccessChain %366 %361 %15 %638 OpStore %643 %642 %644 = OpLoad %14 %34 %646 = OpIAdd %14 %644 %645 %648 = OpAccessChain %366 %361 %15 %646 %649 = OpLoad %125 %648 %650 = OpIAdd %125 %649 %647 %651 = OpAccessChain %366 %361 %15 %646 OpStore %651 %650 %652 = OpLoad %14 %34 %654 = OpIAdd %14 %652 %653 %658 = OpAccessChain %366 %361 %15 %654 %659 = OpLoad %125 %658 %660 = OpIAdd %125 %659 %657 %661 = OpAccessChain %366 %361 %15 %654 OpStore %661 %660 %662 = OpLoad %14 %34 %664 = OpIAdd %14 %662 %663 %666 = OpAccessChain %366 %361 %15 %664 %667 = OpLoad %125 %666 %668 = OpIAdd %125 %667 %665 %669 = OpAccessChain %366 %361 %15 %664 OpStore %669 %668 %670 = OpLoad %14 %34 %672 = OpIAdd %14 %670 %671 %676 = OpAccessChain %366 %361 %15 %672 %677 = OpLoad %125 %676 %678 = OpIAdd %125 %677 %675 %679 = OpAccessChain %366 %361 %15 %672 OpStore %679 %678 %680 = OpLoad %14 %34 %682 = OpIAdd %14 %680 %681 %683 = OpAccessChain %366 %361 %15 %682 %684 = OpLoad %125 %683 %685 = OpISub %125 %684 %409 %686 = OpAccessChain %366 %361 %15 %682 OpStore %686 %685 %687 = OpLoad %14 %34 %689 = OpIAdd %14 %687 %688 %690 = OpAccessChain %366 %361 %15 %689 %691 = OpLoad %125 %690 %692 = OpISub %125 %691 %417 %693 = OpAccessChain %366 %361 %15 %689 OpStore %693 %692 %694 = OpLoad %14 %34 %696 = OpIAdd %14 %694 %695 %697 = OpAccessChain %366 %361 %15 %696 %698 = OpLoad %125 %697 %699 = OpISub %125 %698 %425 %700 = OpAccessChain %366 %361 %15 %696 OpStore %700 %699 %701 = OpLoad %14 %34 %703 = OpIAdd %14 %701 %702 %704 = OpAccessChain %366 %361 %15 %703 %705 = OpLoad %125 %704 %706 = OpISub %125 %705 %434 %707 = OpAccessChain %366 %361 %15 %703 OpStore %707 %706 %708 = OpLoad %14 %34 %710 = OpIAdd %14 %708 %709 %711 = OpAccessChain %366 %361 %15 %710 %712 = OpLoad %125 %711 %713 = OpISub %125 %712 %442 %714 = OpAccessChain %366 %361 %15 %710 OpStore %714 %713 %715 = OpLoad %14 %34 %717 = OpIAdd %14 %715 %716 %718 = OpAccessChain %366 %361 %15 %717 %719 = OpLoad %125 %718 %720 = OpISub %125 %719 %450 %721 = OpAccessChain %366 %361 %15 %717 OpStore %721 %720 %722 = OpLoad %14 %34 %724 = OpIAdd %14 %722 %723 %725 = OpAccessChain %366 %361 %15 %724 %726 = OpLoad %125 %725 %727 = OpISub %125 %726 %459 %728 = OpAccessChain %366 %361 %15 %724 OpStore %728 %727 %729 = OpLoad %14 %34 %731 = OpIAdd %14 %729 %730 %732 = OpAccessChain %366 %361 %15 %731 %733 = OpLoad %125 %732 %734 = OpISub %125 %733 %468 %735 = OpAccessChain %366 %361 %15 %731 OpStore %735 %734 %736 = OpLoad %14 %34 %738 = OpIAdd %14 %736 %737 %739 = OpAccessChain %366 %361 %15 %738 %740 = OpLoad %125 %739 %741 = OpISub %125 %740 %477 %742 = OpAccessChain %366 %361 %15 %738 OpStore %742 %741 %743 = OpLoad %14 %34 %745 = OpIAdd %14 %743 %744 %746 = OpAccessChain %366 %361 %15 %745 %747 = OpLoad %125 %746 %748 = OpISub %125 %747 %486 %749 = OpAccessChain %366 %361 %15 %745 OpStore %749 %748 %750 = OpLoad %14 %34 %752 = OpIAdd %14 %750 %751 %753 = OpAccessChain %366 %361 %15 %752 %754 = OpLoad %125 %753 %755 = OpISub %125 %754 %495 %756 = OpAccessChain %366 %361 %15 %752 OpStore %756 %755 %757 = OpLoad %14 %34 %759 = OpIAdd %14 %757 %758 %760 = OpAccessChain %366 %361 %15 %759 %761 = OpLoad %125 %760 %762 = OpISub %125 %761 %504 %763 = OpAccessChain %366 %361 %15 %759 OpStore %763 %762 %764 = OpLoad %14 %34 %766 = OpIAdd %14 %764 %765 %767 = OpAccessChain %366 %361 %15 %766 %768 = OpLoad %125 %767 %769 = OpISub %125 %768 %513 %770 = OpAccessChain %366 %361 %15 %766 OpStore %770 %769 %771 = OpLoad %14 %34 %773 = OpIAdd %14 %771 %772 %774 = OpAccessChain %366 %361 %15 %773 %775 = OpLoad %125 %774 %776 = OpISub %125 %775 %521 %777 = OpAccessChain %366 %361 %15 %773 OpStore %777 %776 %778 = OpLoad %14 %34 %780 = OpIAdd %14 %778 %779 %781 = OpAccessChain %366 %361 %15 %780 %782 = OpLoad %125 %781 %783 = OpISub %125 %782 %530 %784 = OpAccessChain %366 %361 %15 %780 OpStore %784 %783 %785 = OpLoad %14 %34 %787 = OpIAdd %14 %785 %786 %788 = OpAccessChain %366 %361 %15 %787 %789 = OpLoad %125 %788 %790 = OpISub %125 %789 %538 %791 = OpAccessChain %366 %361 %15 %787 OpStore %791 %790 %792 = OpLoad %14 %34 %794 = OpIAdd %14 %792 %793 %795 = OpAccessChain %366 %361 %15 %794 %796 = OpLoad %125 %795 %797 = OpISub %125 %796 %547 %798 = OpAccessChain %366 %361 %15 %794 OpStore %798 %797 %799 = OpLoad %14 %34 %801 = OpIAdd %14 %799 %800 %802 = OpAccessChain %366 %361 %15 %801 %803 = OpLoad %125 %802 %804 = OpISub %125 %803 %556 %805 = OpAccessChain %366 %361 %15 %801 OpStore %805 %804 %806 = OpLoad %14 %34 %808 = OpIAdd %14 %806 %807 %809 = OpAccessChain %366 %361 %15 %808 %810 = OpLoad %125 %809 %811 = OpISub %125 %810 %565 %812 = OpAccessChain %366 %361 %15 %808 OpStore %812 %811 %813 = OpLoad %14 %34 %815 = OpIAdd %14 %813 %814 %816 = OpAccessChain %366 %361 %15 %815 %817 = OpLoad %125 %816 %818 = OpISub %125 %817 %574 %819 = OpAccessChain %366 %361 %15 %815 OpStore %819 %818 %820 = OpLoad %14 %34 %822 = OpIAdd %14 %820 %821 %823 = OpAccessChain %366 %361 %15 %822 %824 = OpLoad %125 %823 %825 = OpISub %125 %824 %582 %826 = OpAccessChain %366 %361 %15 %822 OpStore %826 %825 %827 = OpLoad %14 %34 %829 = OpIAdd %14 %827 %828 %830 = OpAccessChain %366 %361 %15 %829 %831 = OpLoad %125 %830 %832 = OpISub %125 %831 %590 %833 = OpAccessChain %366 %361 %15 %829 OpStore %833 %832 %834 = OpLoad %14 %34 %836 = OpIAdd %14 %834 %835 %837 = OpAccessChain %366 %361 %15 %836 %838 = OpLoad %125 %837 %839 = OpISub %125 %838 %127 %840 = OpAccessChain %366 %361 %15 %836 OpStore %840 %839 %841 = OpLoad %14 %34 %843 = OpIAdd %14 %841 %842 %844 = OpAccessChain %366 %361 %15 %843 %845 = OpLoad %125 %844 %846 = OpISub %125 %845 %607 %847 = OpAccessChain %366 %361 %15 %843 OpStore %847 %846 %848 = OpLoad %14 %34 %850 = OpIAdd %14 %848 %849 %851 = OpAccessChain %366 %361 %15 %850 %852 = OpLoad %125 %851 %853 = OpISub %125 %852 %615 %854 = OpAccessChain %366 %361 %15 %850 OpStore %854 %853 %855 = OpLoad %14 %34 %857 = OpIAdd %14 %855 %856 %858 = OpAccessChain %366 %361 %15 %857 %859 = OpLoad %125 %858 %860 = OpISub %125 %859 %623 %861 = OpAccessChain %366 %361 %15 %857 OpStore %861 %860 %862 = OpLoad %14 %34 %864 = OpIAdd %14 %862 %863 %865 = OpAccessChain %366 %361 %15 %864 %866 = OpLoad %125 %865 %867 = OpISub %125 %866 %631 %868 = OpAccessChain %366 %361 %15 %864 OpStore %868 %867 %869 = OpLoad %14 %34 %871 = OpIAdd %14 %869 %870 %872 = OpAccessChain %366 %361 %15 %871 %873 = OpLoad %125 %872 %874 = OpISub %125 %873 %639 %875 = OpAccessChain %366 %361 %15 %871 OpStore %875 %874 %876 = OpLoad %14 %34 %878 = OpIAdd %14 %876 %877 %879 = OpAccessChain %366 %361 %15 %878 %880 = OpLoad %125 %879 %881 = OpISub %125 %880 %647 %882 = OpAccessChain %366 %361 %15 %878 OpStore %882 %881 %883 = OpLoad %14 %34 %885 = OpIAdd %14 %883 %884 %886 = OpAccessChain %366 %361 %15 %885 %887 = OpLoad %125 %886 %888 = OpISub %125 %887 %657 %889 = OpAccessChain %366 %361 %15 %885 OpStore %889 %888 %890 = OpLoad %14 %34 %892 = OpIAdd %14 %890 %891 %893 = OpAccessChain %366 %361 %15 %892 %894 = OpLoad %125 %893 %895 = OpISub %125 %894 %665 %896 = OpAccessChain %366 %361 %15 %892 OpStore %896 %895 %897 = OpLoad %14 %34 %899 = OpIAdd %14 %897 %898 %900 = OpAccessChain %366 %361 %15 %899 %901 = OpLoad %125 %900 %902 = OpISub %125 %901 %675 %903 = OpAccessChain %366 %361 %15 %899 OpStore %903 %902 %904 = OpLoad %14 %34 %906 = OpIAdd %14 %904 %905 %908 = OpAccessChain %366 %361 %15 %906 %909 = OpLoad %125 %908 %910 = OpISub %125 %909 %907 %911 = OpAccessChain %366 %361 %15 %906 OpStore %911 %910 OpReturn OpFunctionEnd END BUFFER result DATA_TYPE uint32 DATA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 # 0..15 0 0 0 0 0 0 0 0 0 0 0 0 0 # 16..28 0x3c003c00 0x3c003c00 0x3c003c00 0x3c003c00 # 29..32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 # 33..47 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 # 48..63 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 # 64..79 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 # 80..95 0 0 0 0 0 0 0 # 96..102 END BUFFER constants DATA_TYPE uint32 DATA 1 1 1 END PIPELINE compute pipeline ATTACH compute_shader BIND BUFFER result AS storage DESCRIPTOR_SET 0 BINDING 0 BIND BUFFER result AS storage DESCRIPTOR_SET 0 BINDING 1 BIND BUFFER constants AS uniform DESCRIPTOR_SET 0 BINDING 2 END RUN pipeline 1 1 1 # Amber bug and/or misleading behavior: index must be given in bytes EXPECT result IDX 0 EQ 0x3c003c00 0xbc00bc00 0x38003800 0xb800b800 0x40004000 0xc000c000 0x44004400 0xc400c400 0x31183118 EXPECT result IDX 36 EQ 0x00003c00 0x3c000000 0xbc003c00 0x3c00bc00 EXPECT result IDX 52 EQ 0x00000001 0x00010001 0x00010000 0x00000011 0x00110011 0x00110000 0x00000040 0x00400040 0x00400000 EXPECT result IDX 88 EQ 0xbc00bc00 0xbc000000 0x0000bc00 EXPECT result IDX 100 EQ 0x40004000 0x40000000 0x00004000 0x3c004000 EXPECT result IDX 116 EQ 0x40004000 0x40000000 0x00004000 0x3c004000 EXPECT result IDX 132 EQ 0x00010001 0x00000001 0x00010000 0x00400040 0xfff0fff0 EXPECT result IDX 152 EQ 0x00003800 0x38000000 0x38003800 0x3f000000 0x00003f00 0x3f003f00 0x0000b800 0xbf000000 EXPECT result IDX 184 EQ 0x00003c00 0x3f800000 0x0000bc00 0xbf800000 0x00004000 0x40000000 0x0000c000 0xc0000000 EXPECT result IDX 216 EQ 0x00004400 0x40800000 0x0000c400 0xc0800000 0x00003118 0x31180000 0x31183118 0x3e22f983 0xf9833e22 0x3e223e22 EXPECT result IDX 256 EQ 0xf983f983 0x00003e22 0x0000f983 0xfffffffe 0xfffeffff 0x0014000c 0x0000c800 0xc8000000 EXPECT result IDX 288 EQ 0xc800c800 0xc1000000 0x0000c100 0xc100c100 0x00004800 0x41000000 0x0000c400 0xc0800000 EXPECT result IDX 320 EQ 0x00004400 0x40800000 0x0000c000 0xc0000000 0x00004000 0x40000000 0x0000bc00 0xbf800000 EXPECT result IDX 352 EQ 0x00003c00 0x3f800000 0x0000cee8 0xcee80000 0xcee8cee8 0xc1de067d 0x067dc1de 0xc1dec1de EXPECT result IDX 384 EQ 0x067d067d 0x0000c1de 0x0000067d 0x00010002 0x00020001 0xffecfff4 0x00010001