#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 _54
{
    uint16_t _m0;
    uint16_t _m1;
    uint16_t _m2;
    uint16_t _m3;
    uint _m4;
};

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

struct _118
{
    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 _147;
    uvec4 _148;
    _147 = sparseTextureGatherOffsetARB(usampler2D(_8, _28), vec2(0.5), ivec2(-3, -2), _148);
    SparseTexel _42 = SparseTexel(_147, _148);
    u16vec4 _49 = u16vec4(_42._m1);
    _54 _55 = _54(_49.x, _49.y, _49.z, _49.w, _42._m0);
    uint _65 = uint(_55._m0);
    uint _66 = uint(_55._m1);
    uint _149;
    uvec4 _150;
    _149 = sparseTextureGatherOffsetARB(usampler2D(_9, _28), vec2(0.5), ivec2(int(_65), int(_66)), _150);
    SparseTexel _72 = SparseTexel(_149, _150);
    uvec4 _75 = _72._m1;
    _80 _81 = _80(_75.x, _75.y, _75.z, _75.w, _72._m0);
    vec2 _91 = vec2(0.5);
    uint _151;
    uvec4 _152;
    _151 = sparseTextureGatherOffsetARB(usampler2D(_10, _28), _91, ivec2(-3, -2), _152);
    SparseTexel _92 = SparseTexel(_151, _152);
    uvec4 _93 = textureGatherOffset(usampler2D(_10, _28), _91, ivec2(-3, -2), int(1u));
    uvec4 _94 = _92._m1;
    u64vec4 _112 = u64vec4(packUint2x32(uvec2(_94.x, _93.x)), packUint2x32(uvec2(_94.y, _93.y)), packUint2x32(uvec2(_94.z, _93.z)), packUint2x32(uvec2(_94.w, _93.w)));
    _118 _119 = _118(_112.x, _112.y, _112.z, _112.w, _92._m0);
    _19._m0[0u] = uvec4(_65, _66, uint(_55._m2), uint(_55._m3));
    _19._m0[1u] = uvec4(_81._m0, _81._m1, _81._m2, _81._m3);
    _25._m0[1u] = u64vec4(_119._m0, _119._m1, _119._m2, _119._m3);
    _14._m0[16u] = uint(sparseTexelsResidentARB(int(_55._m4)));
    uint _141 = 16u + 1u;
    _14._m0[_141] = uint(sparseTexelsResidentARB(int(_81._m4)));
    uint _143 = 16u + 2u;
    _14._m0[_143] = uint(sparseTexelsResidentARB(int(_119._m4)));
}


#if 0
// SPIR-V disassembly
; SPIR-V
; Version: 1.3
; Generator: Unknown(30017); 21022
; Bound: 147
; Schema: 0
OpCapability Shader
OpCapability Int64
OpCapability Int16
OpCapability ImageGatherExtended
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 %41 "SparseTexel"
OpName %54 ""
OpName %80 ""
OpName %118 ""
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 = OpTypeInt 32 1
%38 = OpConstant %37 -3
%39 = OpConstant %37 -2
%40 = OpConstant %5 0
%41 = OpTypeStruct %5 %15
%43 = OpTypeVector %37 2
%44 = OpConstantComposite %43 %38 %39
%47 = OpTypeInt 16 0
%48 = OpTypeVector %47 4
%54 = OpTypeStruct %47 %47 %47 %47 %5
%61 = OpTypeBool
%63 = OpConstant %5 1
%80 = OpTypeStruct %5 %5 %5 %5 %5
%97 = OpTypeVector %5 2
%118 = OpTypeStruct %20 %20 %20 %20 %5
%130 = OpTypePointer StorageBuffer %15
%135 = OpTypePointer StorageBuffer %21
%137 = OpConstant %5 16
%138 = OpTypePointer StorageBuffer %5
%144 = OpConstant %5 2
%3 = OpFunction %1 None %2
%4 = OpLabel
OpBranch %145
%145 = OpLabel
%29 = OpLoad %6 %8
%30 = OpLoad %26 %28
%32 = OpSampledImage %31 %29 %30
%36 = OpCompositeConstruct %35 %34 %34
%42 = OpImageSparseGather %41 %32 %36 %40 ConstOffset %44
%45 = OpCompositeExtract %5 %42 0
%46 = OpCompositeExtract %15 %42 1
%49 = OpUConvert %48 %46
%50 = OpCompositeExtract %47 %49 0
%51 = OpCompositeExtract %47 %49 1
%52 = OpCompositeExtract %47 %49 2
%53 = OpCompositeExtract %47 %49 3
%55 = OpCompositeConstruct %54 %50 %51 %52 %53 %45
%56 = OpCompositeExtract %47 %55 0
%57 = OpCompositeExtract %47 %55 1
%58 = OpCompositeExtract %47 %55 2
%59 = OpCompositeExtract %47 %55 3
%60 = OpCompositeExtract %5 %55 4
%62 = OpImageSparseTexelsResident %61 %60
%64 = OpSelect %5 %62 %63 %40
%65 = OpUConvert %5 %56
%66 = OpUConvert %5 %57
%67 = OpLoad %6 %9
%68 = OpSampledImage %31 %67 %30
%69 = OpCompositeConstruct %35 %34 %34
%70 = OpBitcast %37 %65
%71 = OpBitcast %37 %66
%73 = OpCompositeConstruct %43 %70 %71
%72 = OpImageSparseGather %41 %68 %69 %40 Offset %73
%74 = OpCompositeExtract %5 %72 0
%75 = OpCompositeExtract %15 %72 1
%76 = OpCompositeExtract %5 %75 0
%77 = OpCompositeExtract %5 %75 1
%78 = OpCompositeExtract %5 %75 2
%79 = OpCompositeExtract %5 %75 3
%81 = OpCompositeConstruct %80 %76 %77 %78 %79 %74
%82 = OpCompositeExtract %5 %81 0
%83 = OpCompositeExtract %5 %81 1
%84 = OpCompositeExtract %5 %81 2
%85 = OpCompositeExtract %5 %81 3
%86 = OpCompositeExtract %5 %81 4
%87 = OpImageSparseTexelsResident %61 %86
%88 = OpSelect %5 %87 %63 %40
%89 = OpLoad %6 %10
%90 = OpSampledImage %31 %89 %30
%91 = OpCompositeConstruct %35 %34 %34
%92 = OpImageSparseGather %41 %90 %91 %40 ConstOffset %44
%93 = OpImageGather %15 %90 %91 %63 ConstOffset %44
%94 = OpCompositeExtract %15 %92 1
%95 = OpCompositeExtract %5 %94 0
%96 = OpCompositeExtract %5 %93 0
%98 = OpCompositeConstruct %97 %95 %96
%99 = OpBitcast %20 %98
%100 = OpCompositeExtract %5 %94 1
%101 = OpCompositeExtract %5 %93 1
%102 = OpCompositeConstruct %97 %100 %101
%103 = OpBitcast %20 %102
%104 = OpCompositeExtract %5 %94 2
%105 = OpCompositeExtract %5 %93 2
%106 = OpCompositeConstruct %97 %104 %105
%107 = OpBitcast %20 %106
%108 = OpCompositeExtract %5 %94 3
%109 = OpCompositeExtract %5 %93 3
%110 = OpCompositeConstruct %97 %108 %109
%111 = OpBitcast %20 %110
%112 = OpCompositeConstruct %21 %99 %103 %107 %111
%113 = OpCompositeExtract %5 %92 0
%114 = OpCompositeExtract %20 %112 0
%115 = OpCompositeExtract %20 %112 1
%116 = OpCompositeExtract %20 %112 2
%117 = OpCompositeExtract %20 %112 3
%119 = OpCompositeConstruct %118 %114 %115 %116 %117 %113
%120 = OpCompositeExtract %20 %119 0
%121 = OpCompositeExtract %20 %119 1
%122 = OpCompositeExtract %20 %119 2
%123 = OpCompositeExtract %20 %119 3
%124 = OpCompositeExtract %5 %119 4
%125 = OpImageSparseTexelsResident %61 %124
%126 = OpSelect %5 %125 %63 %40
%127 = OpUConvert %5 %58
%128 = OpUConvert %5 %59
%129 = OpCompositeConstruct %15 %65 %66 %127 %128
%131 = OpAccessChain %130 %19 %40 %40
OpStore %131 %129
%132 = OpCompositeConstruct %15 %82 %83 %84 %85
%133 = OpAccessChain %130 %19 %40 %63
OpStore %133 %132
%134 = OpCompositeConstruct %21 %120 %121 %122 %123
%136 = OpAccessChain %135 %25 %40 %63
OpStore %136 %134
%139 = OpAccessChain %138 %14 %40 %137
OpStore %139 %64
%141 = OpIAdd %5 %137 %63
%140 = OpAccessChain %138 %14 %40 %141
OpStore %140 %88
%143 = OpIAdd %5 %137 %144
%142 = OpAccessChain %138 %14 %40 %143
OpStore %142 %126
OpReturn
OpFunctionEnd
#endif
