#version 460
#if defined(GL_ARB_gpu_shader_int64)
#extension GL_ARB_gpu_shader_int64 : require
#else
#error No extension available for 64-bit integers.
#endif
#extension GL_EXT_shader_explicit_arithmetic_types_int16 : require
#extension GL_EXT_shader_16bit_storage : require
#extension GL_ARB_sparse_texture2 : require
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;

struct SparseTexel
{
    uint _m0;
    uvec4 _m1;
};

struct _49
{
    uint16_t _m0;
    uint16_t _m1;
    uint16_t _m2;
    uint16_t _m3;
    uint _m4;
};

struct _70
{
    uint _m0;
    uint _m1;
    uint _m2;
    uint _m3;
    uint _m4;
};

struct _108
{
    uint64_t _m0;
    uint64_t _m1;
    uint64_t _m2;
    uint64_t _m3;
    uint _m4;
};

layout(set = 0, binding = 0, std430) writeonly buffer SSBO
{
    uint _m0[];
} _14;

layout(set = 0, binding = 0, std430) writeonly buffer _17_19
{
    uvec4 _m0[];
} _19;

layout(set = 0, binding = 0, std430) writeonly buffer _23_25
{
    u64vec4 _m0[];
} _25;

layout(set = 0, binding = 0) uniform mediump utexture2D _8;
layout(set = 0, binding = 1) uniform utexture2D _9;
layout(set = 0, binding = 2) uniform utexture2D _10;
layout(set = 0, binding = 0) uniform sampler _28;

void main()
{
    uint _139;
    uvec4 _140;
    _139 = sparseTextureGatherARB(usampler2D(_8, _28), vec2(0.5), _140);
    SparseTexel _39 = SparseTexel(_139, _140);
    u16vec4 _44 = u16vec4(_39._m1);
    _49 _50 = _49(_44.x, _44.y, _44.z, _44.w, _39._m0);
    uint _141;
    uvec4 _142;
    _141 = sparseTextureGatherARB(usampler2D(_9, _28), vec2(0.5), _142);
    SparseTexel _63 = SparseTexel(_141, _142);
    uvec4 _65 = _63._m1;
    _70 _71 = _70(_65.x, _65.y, _65.z, _65.w, _63._m0);
    vec2 _81 = vec2(0.5);
    uint _143;
    uvec4 _144;
    _143 = sparseTextureGatherARB(usampler2D(_10, _28), _81, _144);
    SparseTexel _82 = SparseTexel(_143, _144);
    uvec4 _83 = textureGather(usampler2D(_10, _28), _81, int(1u));
    uvec4 _84 = _82._m1;
    u64vec4 _102 = u64vec4(packUint2x32(uvec2(_84.x, _83.x)), packUint2x32(uvec2(_84.y, _83.y)), packUint2x32(uvec2(_84.z, _83.z)), packUint2x32(uvec2(_84.w, _83.w)));
    _108 _109 = _108(_102.x, _102.y, _102.z, _102.w, _82._m0);
    _19._m0[0u] = uvec4(uint(_50._m0), uint(_50._m1), uint(_50._m2), uint(_50._m3));
    _19._m0[1u] = uvec4(_71._m0, _71._m1, _71._m2, _71._m3);
    _25._m0[1u] = u64vec4(_109._m0, _109._m1, _109._m2, _109._m3);
    _14._m0[16u] = uint(sparseTexelsResidentARB(int(_50._m4)));
    uint _133 = 16u + 1u;
    _14._m0[_133] = uint(sparseTexelsResidentARB(int(_71._m4)));
    uint _135 = 16u + 2u;
    _14._m0[_135] = uint(sparseTexelsResidentARB(int(_109._m4)));
}


#if 0
// SPIR-V disassembly
; SPIR-V
; Version: 1.3
; Generator: Unknown(30017); 21022
; Bound: 139
; Schema: 0
OpCapability Shader
OpCapability Int64
OpCapability Int16
OpCapability SparseResidency
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %3 "main"
OpExecutionMode %3 LocalSize 1 1 1
OpName %3 "main"
OpName %12 "SSBO"
OpName %17 "SSBO"
OpName %23 "SSBO"
OpName %38 "SparseTexel"
OpName %49 ""
OpName %70 ""
OpName %108 ""
OpDecorate %8 RelaxedPrecision
OpDecorate %8 DescriptorSet 0
OpDecorate %8 Binding 0
OpDecorate %9 DescriptorSet 0
OpDecorate %9 Binding 1
OpDecorate %10 DescriptorSet 0
OpDecorate %10 Binding 2
OpDecorate %11 ArrayStride 4
OpMemberDecorate %12 0 Offset 0
OpDecorate %12 Block
OpDecorate %16 ArrayStride 16
OpMemberDecorate %17 0 Offset 0
OpDecorate %17 Block
OpDecorate %22 ArrayStride 32
OpMemberDecorate %23 0 Offset 0
OpDecorate %23 Block
OpDecorate %14 DescriptorSet 0
OpDecorate %14 Binding 0
OpDecorate %14 NonReadable
OpDecorate %14 Aliased
OpDecorate %19 DescriptorSet 0
OpDecorate %19 Binding 0
OpDecorate %19 NonReadable
OpDecorate %19 Aliased
OpDecorate %25 DescriptorSet 0
OpDecorate %25 Binding 0
OpDecorate %25 NonReadable
OpDecorate %25 Aliased
OpDecorate %28 DescriptorSet 0
OpDecorate %28 Binding 0
%1 = OpTypeVoid
%2 = OpTypeFunction %1
%5 = OpTypeInt 32 0
%6 = OpTypeImage %5 2D 0 0 0 1 Unknown
%7 = OpTypePointer UniformConstant %6
%8 = OpVariable %7 UniformConstant
%9 = OpVariable %7 UniformConstant
%10 = OpVariable %7 UniformConstant
%11 = OpTypeRuntimeArray %5
%12 = OpTypeStruct %11
%13 = OpTypePointer StorageBuffer %12
%14 = OpVariable %13 StorageBuffer
%15 = OpTypeVector %5 4
%16 = OpTypeRuntimeArray %15
%17 = OpTypeStruct %16
%18 = OpTypePointer StorageBuffer %17
%19 = OpVariable %18 StorageBuffer
%20 = OpTypeInt 64 0
%21 = OpTypeVector %20 4
%22 = OpTypeRuntimeArray %21
%23 = OpTypeStruct %22
%24 = OpTypePointer StorageBuffer %23
%25 = OpVariable %24 StorageBuffer
%26 = OpTypeSampler
%27 = OpTypePointer UniformConstant %26
%28 = OpVariable %27 UniformConstant
%31 = OpTypeSampledImage %6
%33 = OpTypeFloat 32
%34 = OpConstant %33 0.5
%35 = OpTypeVector %33 2
%37 = OpConstant %5 0
%38 = OpTypeStruct %5 %15
%42 = OpTypeInt 16 0
%43 = OpTypeVector %42 4
%49 = OpTypeStruct %42 %42 %42 %42 %5
%56 = OpTypeBool
%58 = OpConstant %5 1
%70 = OpTypeStruct %5 %5 %5 %5 %5
%87 = OpTypeVector %5 2
%108 = OpTypeStruct %20 %20 %20 %20 %5
%122 = OpTypePointer StorageBuffer %15
%127 = OpTypePointer StorageBuffer %21
%129 = OpConstant %5 16
%130 = OpTypePointer StorageBuffer %5
%136 = OpConstant %5 2
%3 = OpFunction %1 None %2
%4 = OpLabel
OpBranch %137
%137 = OpLabel
%29 = OpLoad %6 %8
%30 = OpLoad %26 %28
%32 = OpSampledImage %31 %29 %30
%36 = OpCompositeConstruct %35 %34 %34
%39 = OpImageSparseGather %38 %32 %36 %37
%40 = OpCompositeExtract %5 %39 0
%41 = OpCompositeExtract %15 %39 1
%44 = OpUConvert %43 %41
%45 = OpCompositeExtract %42 %44 0
%46 = OpCompositeExtract %42 %44 1
%47 = OpCompositeExtract %42 %44 2
%48 = OpCompositeExtract %42 %44 3
%50 = OpCompositeConstruct %49 %45 %46 %47 %48 %40
%51 = OpCompositeExtract %42 %50 0
%52 = OpCompositeExtract %42 %50 1
%53 = OpCompositeExtract %42 %50 2
%54 = OpCompositeExtract %42 %50 3
%55 = OpCompositeExtract %5 %50 4
%57 = OpImageSparseTexelsResident %56 %55
%59 = OpSelect %5 %57 %58 %37
%60 = OpLoad %6 %9
%61 = OpSampledImage %31 %60 %30
%62 = OpCompositeConstruct %35 %34 %34
%63 = OpImageSparseGather %38 %61 %62 %37
%64 = OpCompositeExtract %5 %63 0
%65 = OpCompositeExtract %15 %63 1
%66 = OpCompositeExtract %5 %65 0
%67 = OpCompositeExtract %5 %65 1
%68 = OpCompositeExtract %5 %65 2
%69 = OpCompositeExtract %5 %65 3
%71 = OpCompositeConstruct %70 %66 %67 %68 %69 %64
%72 = OpCompositeExtract %5 %71 0
%73 = OpCompositeExtract %5 %71 1
%74 = OpCompositeExtract %5 %71 2
%75 = OpCompositeExtract %5 %71 3
%76 = OpCompositeExtract %5 %71 4
%77 = OpImageSparseTexelsResident %56 %76
%78 = OpSelect %5 %77 %58 %37
%79 = OpLoad %6 %10
%80 = OpSampledImage %31 %79 %30
%81 = OpCompositeConstruct %35 %34 %34
%82 = OpImageSparseGather %38 %80 %81 %37
%83 = OpImageGather %15 %80 %81 %58
%84 = OpCompositeExtract %15 %82 1
%85 = OpCompositeExtract %5 %84 0
%86 = OpCompositeExtract %5 %83 0
%88 = OpCompositeConstruct %87 %85 %86
%89 = OpBitcast %20 %88
%90 = OpCompositeExtract %5 %84 1
%91 = OpCompositeExtract %5 %83 1
%92 = OpCompositeConstruct %87 %90 %91
%93 = OpBitcast %20 %92
%94 = OpCompositeExtract %5 %84 2
%95 = OpCompositeExtract %5 %83 2
%96 = OpCompositeConstruct %87 %94 %95
%97 = OpBitcast %20 %96
%98 = OpCompositeExtract %5 %84 3
%99 = OpCompositeExtract %5 %83 3
%100 = OpCompositeConstruct %87 %98 %99
%101 = OpBitcast %20 %100
%102 = OpCompositeConstruct %21 %89 %93 %97 %101
%103 = OpCompositeExtract %5 %82 0
%104 = OpCompositeExtract %20 %102 0
%105 = OpCompositeExtract %20 %102 1
%106 = OpCompositeExtract %20 %102 2
%107 = OpCompositeExtract %20 %102 3
%109 = OpCompositeConstruct %108 %104 %105 %106 %107 %103
%110 = OpCompositeExtract %20 %109 0
%111 = OpCompositeExtract %20 %109 1
%112 = OpCompositeExtract %20 %109 2
%113 = OpCompositeExtract %20 %109 3
%114 = OpCompositeExtract %5 %109 4
%115 = OpImageSparseTexelsResident %56 %114
%116 = OpSelect %5 %115 %58 %37
%117 = OpUConvert %5 %51
%118 = OpUConvert %5 %52
%119 = OpUConvert %5 %53
%120 = OpUConvert %5 %54
%121 = OpCompositeConstruct %15 %117 %118 %119 %120
%123 = OpAccessChain %122 %19 %37 %37
OpStore %123 %121
%124 = OpCompositeConstruct %15 %72 %73 %74 %75
%125 = OpAccessChain %122 %19 %37 %58
OpStore %125 %124
%126 = OpCompositeConstruct %21 %110 %111 %112 %113
%128 = OpAccessChain %127 %25 %37 %58
OpStore %128 %126
%131 = OpAccessChain %130 %14 %37 %129
OpStore %131 %59
%133 = OpIAdd %5 %129 %58
%132 = OpAccessChain %130 %14 %37 %133
OpStore %132 %78
%135 = OpIAdd %5 %129 %136
%134 = OpAccessChain %130 %14 %37 %135
OpStore %134 %116
OpReturn
OpFunctionEnd
#endif
