#version 460
#extension GL_EXT_buffer_reference2 : require
#extension GL_EXT_nonuniform_qualifier : require
#extension GL_EXT_buffer_reference_uvec2 : require
#extension GL_EXT_samplerless_texture_functions : require
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;

layout(buffer_reference) buffer uintPointer;
layout(buffer_reference, buffer_reference_align = 4) buffer uintPointer
{
    uint value;
};

layout(set = 1, binding = 0, std430) restrict readonly buffer SSBO
{
    uint _m0[];
} _22[];

layout(set = 1, binding = 0, std430) restrict readonly buffer _24_27
{
    uint _m0[];
} _27[];

layout(set = 4, binding = 0, std430) writeonly buffer _29_32
{
    uint _m0[];
} _32[];

layout(set = 7, binding = 0, std430) readonly buffer AtomicCounters
{
    uvec2 counters[];
} _37;

layout(set = 4, binding = 0, std430) writeonly buffer _39_42
{
    uint _m0[];
} _42[];

layout(set = 5, binding = 0, std140) uniform BindlessCBV
{
    vec4 _m0[4096];
} _53[];

layout(set = 10, binding = 10, std430) buffer DescriptorHeapGlobalQAData
{
    uvec2 failed_shader_hash;
    uint failed_offset;
    uint failed_heap;
    uint failed_cookie;
    uint fault_atomic;
    uint failed_instruction;
    uint failed_descriptor_type_mask;
    uint actual_descriptor_type_mask;
    uint fault_type;
    uint live_status_table[];
} QAGlobalData;

layout(set = 10, binding = 11, std430) readonly buffer DescriptorHeapQAData
{
    uint descriptor_count;
    uint heap_index;
    uvec2 cookies_descriptor_info[];
} QAHeapData;

layout(push_constant, std430) uniform RootConstants
{
    uint _m0;
    uint _m1;
    uint _m2;
    uint _m3;
    uint _m4;
    uint _m5;
    uint _m6;
    uint _m7;
} registers;

layout(set = 0, binding = 0) uniform texture2D _13[];
layout(set = 1, binding = 0) uniform samplerBuffer _17[];
layout(set = 3, binding = 0) uniform writeonly image2D _46[];

void descriptor_qa_report_fault(uint fault_type, uint heap_offset, uint cookie, uint heap_index, uint descriptor_type, uint actual_descriptor_type, uint instruction)
{
    uint _88 = atomicAdd(QAGlobalData.fault_atomic, 1u);
    if (_88 == 0u)
    {
        QAGlobalData.failed_cookie = cookie;
        QAGlobalData.failed_offset = heap_offset;
        QAGlobalData.failed_heap = heap_index;
        QAGlobalData.failed_descriptor_type_mask = descriptor_type;
        QAGlobalData.actual_descriptor_type_mask = actual_descriptor_type;
        QAGlobalData.failed_instruction = instruction;
        QAGlobalData.failed_shader_hash = uvec2(3735928559u, 0u);
        memoryBarrierBuffer();
        QAGlobalData.fault_type = fault_type;
    }
}

uint descriptor_qa_check(uint heap_offset, uint descriptor_type_mask, uint instruction)
{
    uint _121 = QAHeapData.descriptor_count;
    uint _123 = QAHeapData.heap_index;
    uvec2 _125 = QAHeapData.cookies_descriptor_info[heap_offset];
    uint _133 = QAGlobalData.live_status_table[_125.x >> 5u];
    uint _144 = (uint(heap_offset >= _121) | (((_125.y & descriptor_type_mask) == descriptor_type_mask) ? 0u : 2u)) | (((_133 & (1u << (_125.x & 31u))) != 0u) ? 0u : 4u);
    if (_144 != 0u)
    {
        descriptor_qa_report_fault(_144, heap_offset, _125.x, _123, descriptor_type_mask, _125.y, instruction);
        return _121;
    }
    return heap_offset;
}

uint RobustPhysicalAtomicCounter(uvec2 _363, uint _364, uint _365)
{
    uint _378;
    if (any(notEqual(_363, uvec2(0u))))
    {
        uint _376 = atomicAdd(uintPointer(_363), _364);
        _378 = _376 + _365;
    }
    else
    {
        _378 = 0u;
    }
    return _378;
}

void main()
{
    float _155;
    if (gl_GlobalInvocationID.x > 2u)
    {
        uint _70 = descriptor_qa_check(registers._m5, 4u, 1u);
        _155 = _53[_70]._m0[0u].x;
    }
    else
    {
        _155 = 0.0;
    }
    float _168;
    if (gl_GlobalInvocationID.x > 3u)
    {
        uint _163 = descriptor_qa_check(registers._m5 + (gl_GlobalInvocationID.x + 1u), 4u, 2u);
        _168 = _53[_163]._m0[0u].x + _155;
    }
    else
    {
        _168 = _155;
    }
    float _180;
    if (gl_GlobalInvocationID.x > 4u)
    {
        uint _174 = descriptor_qa_check(registers._m0, 1u, 3u);
        _180 = texelFetch(_13[_174], ivec2(uvec2(gl_GlobalInvocationID.x, 0u)), int(0u)).x + _168;
    }
    else
    {
        _180 = _168;
    }
    float _194;
    if (gl_GlobalInvocationID.x > 5u)
    {
        uint _188 = descriptor_qa_check(registers._m0 + ((gl_GlobalInvocationID.x & 1u) + 1u), 1u, 4u);
        _194 = texelFetch(_13[_188], ivec2(uvec2(0u, gl_GlobalInvocationID.x)), int(0u)).x + _180;
    }
    else
    {
        _194 = _180;
    }
    float _207;
    if (gl_GlobalInvocationID.x > 6u)
    {
        uint _201 = descriptor_qa_check(registers._m1 + 3u, 16u, 5u);
        _207 = texelFetch(_17[_201], int(gl_GlobalInvocationID.x)).x + _194;
    }
    else
    {
        _207 = _194;
    }
    float _220;
    if (gl_GlobalInvocationID.x > 7u)
    {
        uint _215 = descriptor_qa_check(registers._m1 + ((gl_GlobalInvocationID.x & 1u) + 4u), 16u, 6u);
        _220 = texelFetch(_17[_215], int(gl_GlobalInvocationID.x)).x + _207;
    }
    else
    {
        _220 = _207;
    }
    float _232;
    if (gl_GlobalInvocationID.x > 8u)
    {
        uint _227 = descriptor_qa_check(registers._m1 + 6u, 8u, 7u);
        _232 = uintBitsToFloat(_22[_227]._m0[gl_GlobalInvocationID.x]) + _220;
    }
    else
    {
        _232 = _220;
    }
    float _245;
    if (gl_GlobalInvocationID.x > 9u)
    {
        uint _240 = descriptor_qa_check(registers._m1 + ((gl_GlobalInvocationID.x & 1u) + 7u), 8u, 8u);
        _245 = uintBitsToFloat(_22[_240]._m0[gl_GlobalInvocationID.x]) + _232;
    }
    else
    {
        _245 = _232;
    }
    float _259;
    if (gl_GlobalInvocationID.x > 10u)
    {
        uint _253 = descriptor_qa_check(registers._m1 + 9u, 8u, 9u);
        _259 = uintBitsToFloat(_27[_253]._m0[gl_GlobalInvocationID.x]) + _245;
    }
    else
    {
        _259 = _245;
    }
    float _274;
    if (gl_GlobalInvocationID.x > 11u)
    {
        uint _268 = descriptor_qa_check(registers._m1 + ((gl_GlobalInvocationID.x & 1u) + 10u), 8u, 10u);
        _274 = uintBitsToFloat(_27[_268]._m0[gl_GlobalInvocationID.x >> 2u]) + _259;
    }
    else
    {
        _274 = _259;
    }
    if (gl_GlobalInvocationID.x > 1u)
    {
        uint _280 = descriptor_qa_check(registers._m4, 8u, 11u);
        uint _284 = descriptor_qa_check(registers._m4, 256u, 12u);
        _32[_280]._m0[gl_GlobalInvocationID.x] = floatBitsToUint(_274);
    }
    if (gl_GlobalInvocationID.x > 30u)
    {
        uint _298 = descriptor_qa_check(registers._m4 + ((gl_GlobalInvocationID.x & 1u) + 1u), 8u, 13u);
        _32[_298]._m0[gl_GlobalInvocationID.x] = floatBitsToUint(_274);
    }
    if (gl_GlobalInvocationID.x > 40u)
    {
        uint _309 = descriptor_qa_check(registers._m4 + 3u, 8u, 14u);
        _42[_309]._m0[gl_GlobalInvocationID.x] = floatBitsToUint(_274);
    }
    if (gl_GlobalInvocationID.x > 50u)
    {
        uint _324 = descriptor_qa_check(registers._m4 + ((gl_GlobalInvocationID.x & 1u) + 4u), 8u, 15u);
        _42[_324]._m0[gl_GlobalInvocationID.x] = floatBitsToUint(_274);
    }
    if (gl_GlobalInvocationID.x > 80u)
    {
        uint _334 = descriptor_qa_check(registers._m3 + 6u, 2u, 16u);
        imageStore(_46[_334], ivec2(uvec2(gl_GlobalInvocationID.x, 0u)), vec4(_274));
    }
    if (gl_GlobalInvocationID.x > 90u)
    {
        uint _346 = descriptor_qa_check(registers._m3 + ((gl_GlobalInvocationID.x & 1u) + 7u), 2u, 17u);
        imageStore(_46[_346], ivec2(uvec2(0u, gl_GlobalInvocationID.x)), vec4(_274));
    }
    uint _354 = descriptor_qa_check(registers._m4, 8u, 18u);
    uint _359 = descriptor_qa_check(registers._m4, 256u, 19u);
    uvec2 _361 = _37.counters[_359];
    uint _380 = RobustPhysicalAtomicCounter(_361, 1u, 0u);
}


#if 0
// SPIR-V disassembly
; SPIR-V
; Version: 1.3
; Generator: Unknown(30017); 21022
; Bound: 415
; Schema: 0
OpCapability Shader
OpCapability UniformBufferArrayDynamicIndexing
OpCapability SampledImageArrayDynamicIndexing
OpCapability StorageBufferArrayDynamicIndexing
OpCapability StorageImageArrayDynamicIndexing
OpCapability SampledBuffer
OpCapability StorageImageWriteWithoutFormat
OpCapability RuntimeDescriptorArray
OpCapability UniformTexelBufferArrayDynamicIndexing
OpCapability PhysicalStorageBufferAddresses
OpExtension "SPV_EXT_descriptor_indexing"
OpExtension "SPV_KHR_physical_storage_buffer"
OpMemoryModel PhysicalStorageBuffer64 GLSL450
OpEntryPoint GLCompute %3 "main" %56
OpExecutionMode %3 LocalSize 1 1 1
OpName %3 "main"
OpName %6 "RootConstants"
OpName %8 "registers"
OpName %19 "SSBO"
OpName %24 "SSBO"
OpName %29 "SSBO"
OpName %35 "AtomicCounters"
OpMemberName %35 0 "counters"
OpName %39 "SSBO"
OpName %50 "BindlessCBV"
OpName %72 "DescriptorHeapGlobalQAData"
OpMemberName %72 0 "failed_shader_hash"
OpMemberName %72 1 "failed_offset"
OpMemberName %72 2 "failed_heap"
OpMemberName %72 3 "failed_cookie"
OpMemberName %72 4 "fault_atomic"
OpMemberName %72 5 "failed_instruction"
OpMemberName %72 6 "failed_descriptor_type_mask"
OpMemberName %72 7 "actual_descriptor_type_mask"
OpMemberName %72 8 "fault_type"
OpMemberName %72 9 "live_status_table"
OpName %74 "QAGlobalData"
OpName %83 "descriptor_qa_report_fault"
OpName %76 "fault_type"
OpName %77 "heap_offset"
OpName %78 "cookie"
OpName %79 "heap_index"
OpName %80 "descriptor_type"
OpName %81 "actual_descriptor_type"
OpName %82 "instruction"
OpName %111 "DescriptorHeapQAData"
OpMemberName %111 0 "descriptor_count"
OpMemberName %111 1 "heap_index"
OpMemberName %111 2 "cookies_descriptor_info"
OpName %113 "QAHeapData"
OpName %118 "descriptor_qa_check"
OpName %115 "heap_offset"
OpName %116 "descriptor_type_mask"
OpName %117 "instruction"
OpName %366 "RobustPhysicalAtomicCounter"
OpDecorate %6 Block
OpMemberDecorate %6 0 Offset 0
OpMemberDecorate %6 1 Offset 4
OpMemberDecorate %6 2 Offset 8
OpMemberDecorate %6 3 Offset 12
OpMemberDecorate %6 4 Offset 16
OpMemberDecorate %6 5 Offset 20
OpMemberDecorate %6 6 Offset 24
OpMemberDecorate %6 7 Offset 28
OpDecorate %13 DescriptorSet 0
OpDecorate %13 Binding 0
OpDecorate %17 DescriptorSet 1
OpDecorate %17 Binding 0
OpDecorate %18 ArrayStride 4
OpMemberDecorate %19 0 Offset 0
OpDecorate %19 Block
OpDecorate %22 DescriptorSet 1
OpDecorate %22 Binding 0
OpDecorate %22 NonWritable
OpDecorate %22 Restrict
OpDecorate %23 ArrayStride 4
OpMemberDecorate %24 0 Offset 0
OpDecorate %24 Block
OpDecorate %27 DescriptorSet 1
OpDecorate %27 Binding 0
OpDecorate %27 NonWritable
OpDecorate %27 Restrict
OpDecorate %28 ArrayStride 4
OpMemberDecorate %29 0 Offset 0
OpDecorate %29 Block
OpDecorate %32 DescriptorSet 4
OpDecorate %32 Binding 0
OpDecorate %32 NonReadable
OpDecorate %34 ArrayStride 8
OpDecorate %35 Block
OpMemberDecorate %35 0 Offset 0
OpMemberDecorate %35 0 NonWritable
OpDecorate %37 DescriptorSet 7
OpDecorate %37 Binding 0
OpDecorate %37 AliasedPointer
OpDecorate %38 ArrayStride 4
OpMemberDecorate %39 0 Offset 0
OpDecorate %39 Block
OpDecorate %42 DescriptorSet 4
OpDecorate %42 Binding 0
OpDecorate %42 NonReadable
OpDecorate %46 DescriptorSet 3
OpDecorate %46 Binding 0
OpDecorate %46 NonReadable
OpDecorate %49 ArrayStride 16
OpDecorate %50 Block
OpMemberDecorate %50 0 Offset 0
OpDecorate %53 DescriptorSet 5
OpDecorate %53 Binding 0
OpDecorate %56 BuiltIn GlobalInvocationId
OpDecorate %71 ArrayStride 4
OpMemberDecorate %72 0 Offset 0
OpMemberDecorate %72 1 Offset 8
OpMemberDecorate %72 2 Offset 12
OpMemberDecorate %72 3 Offset 16
OpMemberDecorate %72 4 Offset 20
OpMemberDecorate %72 5 Offset 24
OpMemberDecorate %72 6 Offset 28
OpMemberDecorate %72 7 Offset 32
OpMemberDecorate %72 8 Offset 36
OpMemberDecorate %72 9 Offset 40
OpDecorate %72 Block
OpDecorate %74 DescriptorSet 10
OpDecorate %74 Binding 10
OpDecorate %110 ArrayStride 8
OpMemberDecorate %111 0 Offset 0
OpMemberDecorate %111 1 Offset 4
OpMemberDecorate %111 2 Offset 8
OpDecorate %111 Block
OpDecorate %113 DescriptorSet 10
OpDecorate %113 Binding 11
OpDecorate %113 NonWritable
%1 = OpTypeVoid
%2 = OpTypeFunction %1
%5 = OpTypeInt 32 0
%6 = OpTypeStruct %5 %5 %5 %5 %5 %5 %5 %5
%7 = OpTypePointer PushConstant %6
%8 = OpVariable %7 PushConstant
%9 = OpTypeFloat 32
%10 = OpTypeImage %9 2D 0 0 0 1 Unknown
%11 = OpTypeRuntimeArray %10
%12 = OpTypePointer UniformConstant %11
%13 = OpVariable %12 UniformConstant
%14 = OpTypeImage %9 Buffer 0 0 0 1 Unknown
%15 = OpTypeRuntimeArray %14
%16 = OpTypePointer UniformConstant %15
%17 = OpVariable %16 UniformConstant
%18 = OpTypeRuntimeArray %5
%19 = OpTypeStruct %18
%20 = OpTypeRuntimeArray %19
%21 = OpTypePointer StorageBuffer %20
%22 = OpVariable %21 StorageBuffer
%23 = OpTypeRuntimeArray %5
%24 = OpTypeStruct %23
%25 = OpTypeRuntimeArray %24
%26 = OpTypePointer StorageBuffer %25
%27 = OpVariable %26 StorageBuffer
%28 = OpTypeRuntimeArray %5
%29 = OpTypeStruct %28
%30 = OpTypeRuntimeArray %29
%31 = OpTypePointer StorageBuffer %30
%32 = OpVariable %31 StorageBuffer
%33 = OpTypeVector %5 2
%34 = OpTypeRuntimeArray %33
%35 = OpTypeStruct %34
%36 = OpTypePointer StorageBuffer %35
%37 = OpVariable %36 StorageBuffer
%38 = OpTypeRuntimeArray %5
%39 = OpTypeStruct %38
%40 = OpTypeRuntimeArray %39
%41 = OpTypePointer StorageBuffer %40
%42 = OpVariable %41 StorageBuffer
%43 = OpTypeImage %9 2D 0 0 0 2 Unknown
%44 = OpTypeRuntimeArray %43
%45 = OpTypePointer UniformConstant %44
%46 = OpVariable %45 UniformConstant
%47 = OpTypeVector %9 4
%48 = OpConstant %5 4096
%49 = OpTypeArray %47 %48
%50 = OpTypeStruct %49
%51 = OpTypeRuntimeArray %50
%52 = OpTypePointer Uniform %51
%53 = OpVariable %52 Uniform
%54 = OpTypeVector %5 3
%55 = OpTypePointer Input %54
%56 = OpVariable %55 Input
%57 = OpTypePointer Input %5
%59 = OpConstant %5 0
%61 = OpTypeBool
%63 = OpConstant %5 2
%64 = OpTypePointer Uniform %50
%66 = OpTypePointer PushConstant %5
%68 = OpConstant %5 5
%71 = OpTypeRuntimeArray %5
%72 = OpTypeStruct %33 %5 %5 %5 %5 %5 %5 %5 %5 %71
%73 = OpTypePointer StorageBuffer %72
%74 = OpVariable %73 StorageBuffer
%75 = OpTypeFunction %1 %5 %5 %5 %5 %5 %5 %5
%85 = OpTypePointer StorageBuffer %5
%87 = OpConstant %5 4
%89 = OpConstant %5 1
%94 = OpConstant %5 3
%98 = OpConstant %5 6
%100 = OpConstant %5 7
%102 = OpConstant %5 3735928559
%103 = OpConstantComposite %33 %102 %59
%104 = OpTypePointer StorageBuffer %33
%106 = OpConstant %5 72
%108 = OpConstant %5 8
%110 = OpTypeRuntimeArray %33
%111 = OpTypeStruct %5 %5 %110
%112 = OpTypePointer StorageBuffer %111
%113 = OpVariable %112 StorageBuffer
%114 = OpTypeFunction %5 %5 %5 %5
%130 = OpConstant %5 31
%132 = OpConstant %5 9
%151 = OpTypePointer Uniform %47
%156 = OpConstant %9 0
%170 = OpTypePointer UniformConstant %10
%196 = OpTypePointer UniformConstant %14
%202 = OpConstant %5 16
%222 = OpTypePointer StorageBuffer %19
%247 = OpConstant %5 10
%248 = OpTypePointer StorageBuffer %24
%261 = OpConstant %5 11
%276 = OpTypePointer StorageBuffer %29
%285 = OpConstant %5 256
%286 = OpConstant %5 12
%291 = OpConstant %5 30
%299 = OpConstant %5 13
%303 = OpConstant %5 40
%304 = OpTypePointer StorageBuffer %39
%310 = OpConstant %5 14
%315 = OpConstant %5 50
%325 = OpConstant %5 15
%328 = OpConstant %5 80
%329 = OpTypePointer UniformConstant %43
%339 = OpConstant %5 90
%347 = OpConstant %5 17
%355 = OpConstant %5 18
%360 = OpConstant %5 19
%362 = OpTypeFunction %5 %33 %5 %5
%370 = OpTypeVector %61 2
%371 = OpConstantNull %33
%374 = OpTypePointer PhysicalStorageBuffer %5
%3 = OpFunction %1 None %2
%4 = OpLabel
OpBranch %381
%381 = OpLabel
%58 = OpAccessChain %57 %56 %59
%60 = OpLoad %5 %58
%62 = OpUGreaterThan %61 %60 %63
OpSelectionMerge %383 None
OpBranchConditional %62 %382 %383
%382 = OpLabel
%67 = OpAccessChain %66 %8 %68
%69 = OpLoad %5 %67
%70 = OpFunctionCall %5 %118 %69 %87 %89
%65 = OpAccessChain %64 %53 %70
%152 = OpAccessChain %151 %65 %59 %59
%153 = OpLoad %47 %152
%154 = OpCompositeExtract %9 %153 0
OpBranch %383
%383 = OpLabel
%155 = OpPhi %9 %156 %381 %154 %382
%157 = OpUGreaterThan %61 %60 %94
OpSelectionMerge %385 None
OpBranchConditional %157 %384 %385
%384 = OpLabel
%158 = OpIAdd %5 %60 %89
%160 = OpAccessChain %66 %8 %68
%161 = OpLoad %5 %160
%162 = OpIAdd %5 %161 %158
%163 = OpFunctionCall %5 %118 %162 %87 %63
%159 = OpAccessChain %64 %53 %163
%164 = OpAccessChain %151 %159 %59 %59
%165 = OpLoad %47 %164
%166 = OpCompositeExtract %9 %165 0
%167 = OpFAdd %9 %166 %155
OpBranch %385
%385 = OpLabel
%168 = OpPhi %9 %155 %383 %167 %384
%169 = OpUGreaterThan %61 %60 %87
OpSelectionMerge %387 None
OpBranchConditional %169 %386 %387
%386 = OpLabel
%172 = OpAccessChain %66 %8 %59
%173 = OpLoad %5 %172
%174 = OpFunctionCall %5 %118 %173 %89 %94
%171 = OpAccessChain %170 %13 %174
%175 = OpLoad %10 %171
%177 = OpCompositeConstruct %33 %60 %59
%176 = OpImageFetch %47 %175 %177 Lod %59
%178 = OpCompositeExtract %9 %176 0
%179 = OpFAdd %9 %178 %168
OpBranch %387
%387 = OpLabel
%180 = OpPhi %9 %168 %385 %179 %386
%181 = OpUGreaterThan %61 %60 %68
OpSelectionMerge %389 None
OpBranchConditional %181 %388 %389
%388 = OpLabel
%182 = OpBitwiseAnd %5 %60 %89
%183 = OpIAdd %5 %182 %89
%185 = OpAccessChain %66 %8 %59
%186 = OpLoad %5 %185
%187 = OpIAdd %5 %186 %183
%188 = OpFunctionCall %5 %118 %187 %89 %87
%184 = OpAccessChain %170 %13 %188
%189 = OpLoad %10 %184
%191 = OpCompositeConstruct %33 %59 %60
%190 = OpImageFetch %47 %189 %191 Lod %59
%192 = OpCompositeExtract %9 %190 0
%193 = OpFAdd %9 %192 %180
OpBranch %389
%389 = OpLabel
%194 = OpPhi %9 %180 %387 %193 %388
%195 = OpUGreaterThan %61 %60 %98
OpSelectionMerge %391 None
OpBranchConditional %195 %390 %391
%390 = OpLabel
%198 = OpAccessChain %66 %8 %89
%199 = OpLoad %5 %198
%200 = OpIAdd %5 %199 %94
%201 = OpFunctionCall %5 %118 %200 %202 %68
%197 = OpAccessChain %196 %17 %201
%203 = OpLoad %14 %197
%204 = OpImageFetch %47 %203 %60
%205 = OpCompositeExtract %9 %204 0
%206 = OpFAdd %9 %205 %194
OpBranch %391
%391 = OpLabel
%207 = OpPhi %9 %194 %389 %206 %390
%208 = OpUGreaterThan %61 %60 %100
OpSelectionMerge %393 None
OpBranchConditional %208 %392 %393
%392 = OpLabel
%209 = OpBitwiseAnd %5 %60 %89
%210 = OpIAdd %5 %209 %87
%212 = OpAccessChain %66 %8 %89
%213 = OpLoad %5 %212
%214 = OpIAdd %5 %213 %210
%215 = OpFunctionCall %5 %118 %214 %202 %98
%211 = OpAccessChain %196 %17 %215
%216 = OpLoad %14 %211
%217 = OpImageFetch %47 %216 %60
%218 = OpCompositeExtract %9 %217 0
%219 = OpFAdd %9 %218 %207
OpBranch %393
%393 = OpLabel
%220 = OpPhi %9 %207 %391 %219 %392
%221 = OpUGreaterThan %61 %60 %108
OpSelectionMerge %395 None
OpBranchConditional %221 %394 %395
%394 = OpLabel
%224 = OpAccessChain %66 %8 %89
%225 = OpLoad %5 %224
%226 = OpIAdd %5 %225 %98
%227 = OpFunctionCall %5 %118 %226 %108 %100
%223 = OpAccessChain %222 %22 %227
%228 = OpAccessChain %85 %223 %59 %60
%229 = OpLoad %5 %228
%230 = OpBitcast %9 %229
%231 = OpFAdd %9 %230 %220
OpBranch %395
%395 = OpLabel
%232 = OpPhi %9 %220 %393 %231 %394
%233 = OpUGreaterThan %61 %60 %132
OpSelectionMerge %397 None
OpBranchConditional %233 %396 %397
%396 = OpLabel
%234 = OpBitwiseAnd %5 %60 %89
%235 = OpIAdd %5 %234 %100
%237 = OpAccessChain %66 %8 %89
%238 = OpLoad %5 %237
%239 = OpIAdd %5 %238 %235
%240 = OpFunctionCall %5 %118 %239 %108 %108
%236 = OpAccessChain %222 %22 %240
%241 = OpAccessChain %85 %236 %59 %60
%242 = OpLoad %5 %241
%243 = OpBitcast %9 %242
%244 = OpFAdd %9 %243 %232
OpBranch %397
%397 = OpLabel
%245 = OpPhi %9 %232 %395 %244 %396
%246 = OpUGreaterThan %61 %60 %247
OpSelectionMerge %399 None
OpBranchConditional %246 %398 %399
%398 = OpLabel
%250 = OpAccessChain %66 %8 %89
%251 = OpLoad %5 %250
%252 = OpIAdd %5 %251 %132
%253 = OpFunctionCall %5 %118 %252 %108 %132
%249 = OpAccessChain %248 %27 %253
%254 = OpShiftLeftLogical %5 %60 %63
%255 = OpAccessChain %85 %249 %59 %60
%256 = OpLoad %5 %255
%257 = OpBitcast %9 %256
%258 = OpFAdd %9 %257 %245
OpBranch %399
%399 = OpLabel
%259 = OpPhi %9 %245 %397 %258 %398
%260 = OpUGreaterThan %61 %60 %261
OpSelectionMerge %401 None
OpBranchConditional %260 %400 %401
%400 = OpLabel
%262 = OpBitwiseAnd %5 %60 %89
%263 = OpIAdd %5 %262 %247
%265 = OpAccessChain %66 %8 %89
%266 = OpLoad %5 %265
%267 = OpIAdd %5 %266 %263
%268 = OpFunctionCall %5 %118 %267 %108 %247
%264 = OpAccessChain %248 %27 %268
%269 = OpShiftRightLogical %5 %60 %63
%270 = OpAccessChain %85 %264 %59 %269
%271 = OpLoad %5 %270
%272 = OpBitcast %9 %271
%273 = OpFAdd %9 %272 %259
OpBranch %401
%401 = OpLabel
%274 = OpPhi %9 %259 %399 %273 %400
%275 = OpUGreaterThan %61 %60 %89
OpSelectionMerge %403 None
OpBranchConditional %275 %402 %403
%402 = OpLabel
%278 = OpAccessChain %66 %8 %87
%279 = OpLoad %5 %278
%280 = OpFunctionCall %5 %118 %279 %108 %261
%277 = OpAccessChain %276 %32 %280
%282 = OpAccessChain %66 %8 %87
%283 = OpLoad %5 %282
%284 = OpFunctionCall %5 %118 %283 %285 %286
%281 = OpAccessChain %104 %37 %59 %284
%287 = OpLoad %33 %281
%288 = OpBitcast %5 %274
%289 = OpAccessChain %85 %277 %59 %60
OpStore %289 %288
OpBranch %403
%403 = OpLabel
%290 = OpUGreaterThan %61 %60 %291
OpSelectionMerge %405 None
OpBranchConditional %290 %404 %405
%404 = OpLabel
%292 = OpBitwiseAnd %5 %60 %89
%293 = OpIAdd %5 %292 %89
%295 = OpAccessChain %66 %8 %87
%296 = OpLoad %5 %295
%297 = OpIAdd %5 %296 %293
%298 = OpFunctionCall %5 %118 %297 %108 %299
%294 = OpAccessChain %276 %32 %298
%300 = OpBitcast %5 %274
%301 = OpAccessChain %85 %294 %59 %60
OpStore %301 %300
OpBranch %405
%405 = OpLabel
%302 = OpUGreaterThan %61 %60 %303
OpSelectionMerge %407 None
OpBranchConditional %302 %406 %407
%406 = OpLabel
%306 = OpAccessChain %66 %8 %87
%307 = OpLoad %5 %306
%308 = OpIAdd %5 %307 %94
%309 = OpFunctionCall %5 %118 %308 %108 %310
%305 = OpAccessChain %304 %42 %309
%311 = OpBitcast %5 %274
%312 = OpShiftLeftLogical %5 %60 %63
%313 = OpAccessChain %85 %305 %59 %60
OpStore %313 %311
OpBranch %407
%407 = OpLabel
%314 = OpUGreaterThan %61 %60 %315
OpSelectionMerge %409 None
OpBranchConditional %314 %408 %409
%408 = OpLabel
%316 = OpBitwiseAnd %5 %60 %89
%317 = OpBitcast %5 %274
%318 = OpShiftLeftLogical %5 %60 %63
%319 = OpIAdd %5 %316 %87
%321 = OpAccessChain %66 %8 %87
%322 = OpLoad %5 %321
%323 = OpIAdd %5 %322 %319
%324 = OpFunctionCall %5 %118 %323 %108 %325
%320 = OpAccessChain %304 %42 %324
%326 = OpAccessChain %85 %320 %59 %60
OpStore %326 %317
OpBranch %409
%409 = OpLabel
%327 = OpUGreaterThan %61 %60 %328
OpSelectionMerge %411 None
OpBranchConditional %327 %410 %411
%410 = OpLabel
%331 = OpAccessChain %66 %8 %94
%332 = OpLoad %5 %331
%333 = OpIAdd %5 %332 %98
%334 = OpFunctionCall %5 %118 %333 %63 %202
%330 = OpAccessChain %329 %46 %334
%335 = OpLoad %43 %330
%336 = OpCompositeConstruct %33 %60 %59
%337 = OpCompositeConstruct %47 %274 %274 %274 %274
OpImageWrite %335 %336 %337
OpBranch %411
%411 = OpLabel
%338 = OpUGreaterThan %61 %60 %339
OpSelectionMerge %413 None
OpBranchConditional %338 %412 %413
%412 = OpLabel
%340 = OpBitwiseAnd %5 %60 %89
%341 = OpIAdd %5 %340 %100
%343 = OpAccessChain %66 %8 %94
%344 = OpLoad %5 %343
%345 = OpIAdd %5 %344 %341
%346 = OpFunctionCall %5 %118 %345 %63 %347
%342 = OpAccessChain %329 %46 %346
%348 = OpLoad %43 %342
%349 = OpCompositeConstruct %33 %59 %60
%350 = OpCompositeConstruct %47 %274 %274 %274 %274
OpImageWrite %348 %349 %350
OpBranch %413
%413 = OpLabel
%352 = OpAccessChain %66 %8 %87
%353 = OpLoad %5 %352
%354 = OpFunctionCall %5 %118 %353 %108 %355
%351 = OpAccessChain %276 %32 %354
%357 = OpAccessChain %66 %8 %87
%358 = OpLoad %5 %357
%359 = OpFunctionCall %5 %118 %358 %285 %360
%356 = OpAccessChain %104 %37 %59 %359
%361 = OpLoad %33 %356
%380 = OpFunctionCall %5 %366 %361 %89 %59
OpReturn
OpFunctionEnd
%83 = OpFunction %1 None %75
%76 = OpFunctionParameter %5
%77 = OpFunctionParameter %5
%78 = OpFunctionParameter %5
%79 = OpFunctionParameter %5
%80 = OpFunctionParameter %5
%81 = OpFunctionParameter %5
%82 = OpFunctionParameter %5
%84 = OpLabel
%86 = OpAccessChain %85 %74 %87
%88 = OpAtomicIAdd %5 %86 %89 %59 %89
%90 = OpIEqual %61 %88 %59
OpSelectionMerge %92 None
OpBranchConditional %90 %91 %92
%91 = OpLabel
%93 = OpAccessChain %85 %74 %94
OpStore %93 %78
%95 = OpAccessChain %85 %74 %89
OpStore %95 %77
%96 = OpAccessChain %85 %74 %63
OpStore %96 %79
%97 = OpAccessChain %85 %74 %98
OpStore %97 %80
%99 = OpAccessChain %85 %74 %100
OpStore %99 %81
%101 = OpAccessChain %85 %74 %68
OpStore %101 %82
%105 = OpAccessChain %104 %74 %59
OpStore %105 %103
OpMemoryBarrier %89 %106
%107 = OpAccessChain %85 %74 %108
OpStore %107 %76
OpBranch %92
%92 = OpLabel
OpReturn
OpFunctionEnd
%118 = OpFunction %5 None %114
%115 = OpFunctionParameter %5
%116 = OpFunctionParameter %5
%117 = OpFunctionParameter %5
%119 = OpLabel
%120 = OpAccessChain %85 %113 %59
%121 = OpLoad %5 %120
%122 = OpAccessChain %85 %113 %89
%123 = OpLoad %5 %122
%124 = OpAccessChain %104 %113 %63 %115
%125 = OpLoad %33 %124
%126 = OpCompositeExtract %5 %125 0
%128 = OpShiftRightLogical %5 %126 %68
%129 = OpBitwiseAnd %5 %126 %130
%127 = OpCompositeExtract %5 %125 1
%131 = OpAccessChain %85 %74 %132 %128
%133 = OpLoad %5 %131
%134 = OpShiftLeftLogical %5 %89 %129
%135 = OpBitwiseAnd %5 %133 %134
%136 = OpINotEqual %61 %135 %59
%137 = OpBitwiseAnd %5 %127 %116
%138 = OpIEqual %61 %137 %116
%139 = OpUGreaterThanEqual %61 %115 %121
%140 = OpSelect %5 %139 %89 %59
%141 = OpSelect %5 %138 %59 %63
%142 = OpSelect %5 %136 %59 %87
%143 = OpBitwiseOr %5 %140 %141
%144 = OpBitwiseOr %5 %143 %142
%145 = OpINotEqual %61 %144 %59
OpSelectionMerge %147 None
OpBranchConditional %145 %146 %147
%146 = OpLabel
%148 = OpFunctionCall %1 %83 %144 %115 %126 %123 %116 %127 %117
OpReturnValue %121
%147 = OpLabel
OpReturnValue %115
OpFunctionEnd
%366 = OpFunction %5 None %362
%363 = OpFunctionParameter %33
%364 = OpFunctionParameter %5
%365 = OpFunctionParameter %5
%367 = OpLabel
%372 = OpINotEqual %370 %363 %371
%373 = OpAny %61 %372
OpSelectionMerge %369 None
OpBranchConditional %373 %368 %369
%368 = OpLabel
%375 = OpBitcast %374 %363
%376 = OpAtomicIAdd %5 %375 %89 %59 %364
%377 = OpIAdd %5 %376 %365
OpBranch %369
%369 = OpLabel
%378 = OpPhi %5 %59 %367 %377 %368
OpReturnValue %378
OpFunctionEnd
#endif
