#version 460
#extension GL_EXT_buffer_reference2 : require
#extension GL_EXT_nonuniform_qualifier : require
#extension GL_EXT_scalar_block_layout : 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 = 7, binding = 0, std430) readonly buffer AtomicCounters
{
    uvec2 counters[];
} _33;

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

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 va_map_timestamp;
    uint live_status_table[];
} QAGlobalData;

layout(set = 10, binding = 11, scalar) readonly buffer DescriptorHeapQAData
{
    uint descriptor_count;
    uint heap_index;
    uvec3 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 = 1, binding = 0) uniform usamplerBuffer _21[];
layout(set = 1, binding = 0) uniform usamplerBuffer _24[];
layout(set = 4, binding = 0, r32ui) uniform writeonly uimageBuffer _28[];
layout(set = 4, binding = 0, r32ui) uniform writeonly uimageBuffer _36[];
layout(set = 3, binding = 0) uniform writeonly image2D _40[];
layout(set = 2, binding = 0) uniform sampler _51[];

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 _86 = atomicAdd(QAGlobalData.fault_atomic, 1u);
    if (_86 == 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 _119 = QAHeapData.descriptor_count;
    uint _121 = QAHeapData.heap_index;
    uint _124 = QAGlobalData.va_map_timestamp;
    uvec3 _127 = QAHeapData.cookies_descriptor_info[heap_offset];
    uint _136 = QAGlobalData.live_status_table[_127.x >> 5u];
    uint _150 = ((uint(heap_offset >= _119) | (((_127.z & descriptor_type_mask) == descriptor_type_mask) ? 0u : 2u)) | (((_136 & (1u << (_127.x & 31u))) != 0u) ? 0u : 4u)) | ((_124 >= _127.y) ? 0u : 8u);
    if (_150 != 0u)
    {
        descriptor_qa_report_fault(_150, heap_offset, _127.x, _121, descriptor_type_mask, _127.z, instruction);
        return _119;
    }
    return heap_offset;
}

uint RobustPhysicalAtomicCounter(uvec2 _386, uint _387, uint _388)
{
    uint _401;
    if (any(notEqual(_386, uvec2(0u))))
    {
        uint _399 = atomicAdd(uintPointer(_386).value, _387);
        _401 = _399 + _388;
    }
    else
    {
        _401 = 0u;
    }
    return _401;
}

void main()
{
    float _161;
    if (gl_GlobalInvocationID.x > 2u)
    {
        uint _68 = descriptor_qa_check(registers._m5, 4u, 1u);
        _161 = _47[_68]._m0[0u].x;
    }
    else
    {
        _161 = 0.0;
    }
    float _174;
    if (gl_GlobalInvocationID.x > 3u)
    {
        uint _169 = descriptor_qa_check(registers._m5 + (gl_GlobalInvocationID.x + 1u), 4u, 2u);
        _174 = _47[_169]._m0[0u].x + _161;
    }
    else
    {
        _174 = _161;
    }
    float _195;
    if (gl_GlobalInvocationID.x > 4u)
    {
        uint _180 = descriptor_qa_check(registers._m0, 1u, 3u);
        _195 = textureLod(sampler2D(_13[_180], _51[registers._m2]), vec2(0.5), 0.0).x + _174;
    }
    else
    {
        _195 = _174;
    }
    float _209;
    if (gl_GlobalInvocationID.x > 5u)
    {
        uint _203 = descriptor_qa_check(registers._m0 + ((gl_GlobalInvocationID.x & 1u) + 1u), 1u, 4u);
        _209 = texelFetch(_13[_203], ivec2(uvec2(0u, gl_GlobalInvocationID.x)), int(0u)).x + _195;
    }
    else
    {
        _209 = _195;
    }
    float _222;
    if (gl_GlobalInvocationID.x > 6u)
    {
        uint _216 = descriptor_qa_check(registers._m1 + 3u, 16u, 5u);
        _222 = texelFetch(_17[_216], int(gl_GlobalInvocationID.x)).x + _209;
    }
    else
    {
        _222 = _209;
    }
    float _235;
    if (gl_GlobalInvocationID.x > 7u)
    {
        uint _230 = descriptor_qa_check(registers._m1 + ((gl_GlobalInvocationID.x & 1u) + 4u), 16u, 6u);
        _235 = texelFetch(_17[_230], int(gl_GlobalInvocationID.x)).x + _222;
    }
    else
    {
        _235 = _222;
    }
    float _249;
    if (gl_GlobalInvocationID.x > 8u)
    {
        uint _242 = descriptor_qa_check(registers._m1 + 6u, 16u, 7u);
        _249 = uintBitsToFloat(texelFetch(_21[_242], int(gl_GlobalInvocationID.x)).x) + _235;
    }
    else
    {
        _249 = _235;
    }
    float _263;
    if (gl_GlobalInvocationID.x > 9u)
    {
        uint _257 = descriptor_qa_check(registers._m1 + ((gl_GlobalInvocationID.x & 1u) + 7u), 16u, 8u);
        _263 = uintBitsToFloat(texelFetch(_21[_257], int(gl_GlobalInvocationID.x)).x) + _249;
    }
    else
    {
        _263 = _249;
    }
    float _276;
    if (gl_GlobalInvocationID.x > 10u)
    {
        uint _269 = descriptor_qa_check(registers._m1 + 9u, 16u, 9u);
        _276 = uintBitsToFloat(texelFetch(_24[_269], int(gl_GlobalInvocationID.x)).x) + _263;
    }
    else
    {
        _276 = _263;
    }
    float _292;
    if (gl_GlobalInvocationID.x > 11u)
    {
        uint _285 = descriptor_qa_check(registers._m1 + ((gl_GlobalInvocationID.x & 1u) + 10u), 16u, 10u);
        _292 = uintBitsToFloat(texelFetch(_24[_285], int(gl_GlobalInvocationID.x >> 2u)).x) + _276;
    }
    else
    {
        _292 = _276;
    }
    if (gl_GlobalInvocationID.x > 1u)
    {
        uint _298 = descriptor_qa_check(registers._m4, 32u, 11u);
        uint _304 = descriptor_qa_check(registers._m4, 256u, 12u);
        imageStore(_28[_298], int(gl_GlobalInvocationID.x), uvec4(floatBitsToUint(_292)));
    }
    if (gl_GlobalInvocationID.x > 30u)
    {
        uint _318 = descriptor_qa_check(registers._m4 + ((gl_GlobalInvocationID.x & 1u) + 1u), 32u, 13u);
        imageStore(_28[_318], int(gl_GlobalInvocationID.x), uvec4(floatBitsToUint(_292)));
    }
    if (gl_GlobalInvocationID.x > 40u)
    {
        uint _329 = descriptor_qa_check(registers._m4 + 3u, 32u, 14u);
        imageStore(_36[_329], int(gl_GlobalInvocationID.x), uvec4(floatBitsToUint(_292)));
    }
    if (gl_GlobalInvocationID.x > 50u)
    {
        uint _345 = descriptor_qa_check(registers._m4 + ((gl_GlobalInvocationID.x & 1u) + 4u), 32u, 15u);
        imageStore(_36[_345], int(gl_GlobalInvocationID.x), uvec4(floatBitsToUint(_292)));
    }
    if (gl_GlobalInvocationID.x > 80u)
    {
        uint _356 = descriptor_qa_check(registers._m3 + 6u, 2u, 16u);
        imageStore(_40[_356], ivec2(uvec2(gl_GlobalInvocationID.x, 0u)), vec4(_292));
    }
    if (gl_GlobalInvocationID.x > 90u)
    {
        uint _368 = descriptor_qa_check(registers._m3 + ((gl_GlobalInvocationID.x & 1u) + 7u), 2u, 17u);
        imageStore(_40[_368], ivec2(uvec2(0u, gl_GlobalInvocationID.x)), vec4(_292));
    }
    uint _376 = descriptor_qa_check(registers._m4, 32u, 18u);
    uint _382 = descriptor_qa_check(registers._m4, 256u, 19u);
    uvec2 _384 = _33.counters[_382];
    uint _403 = RobustPhysicalAtomicCounter(_384, 1u, 0u);
}


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