#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
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;

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

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

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 _24;

void main()
{
    u16vec4 _37 = u16vec4(textureGather(usampler2D(_8, _24), vec2(0.5)));
    vec2 _52 = vec2(0.5);
    uvec4 _53 = textureGather(usampler2D(_10, _24), _52);
    uvec4 _54 = textureGather(usampler2D(_10, _24), _52, int(1u));
    _15._m0[0u] = uvec4(uint(_37.x), uint(_37.y), uint(_37.z), uint(_37.w));
    _15._m0[1u] = uvec4(textureGather(usampler2D(_9, _24), vec2(0.5)));
    _21._m0[1u] = u64vec4(u64vec4(packUint2x32(uvec2(_53.x, _54.x)), packUint2x32(uvec2(_53.y, _54.y)), packUint2x32(uvec2(_53.z, _54.z)), packUint2x32(uvec2(_53.w, _54.w))));
}


#if 0
// SPIR-V disassembly
; SPIR-V
; Version: 1.3
; Generator: Unknown(30017); 21022
; Bound: 92
; Schema: 0
OpCapability Shader
OpCapability Int64
OpCapability Int16
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %3 "main"
OpExecutionMode %3 LocalSize 1 1 1
OpName %3 "main"
OpName %13 "SSBO"
OpName %19 "SSBO"
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 %12 ArrayStride 16
OpMemberDecorate %13 0 Offset 0
OpDecorate %13 Block
OpDecorate %18 ArrayStride 32
OpMemberDecorate %19 0 Offset 0
OpDecorate %19 Block
OpDecorate %15 DescriptorSet 0
OpDecorate %15 Binding 0
OpDecorate %15 NonReadable
OpDecorate %15 Aliased
OpDecorate %21 DescriptorSet 0
OpDecorate %21 Binding 0
OpDecorate %21 NonReadable
OpDecorate %21 Aliased
OpDecorate %24 DescriptorSet 0
OpDecorate %24 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 = OpTypeVector %5 4
%12 = OpTypeRuntimeArray %11
%13 = OpTypeStruct %12
%14 = OpTypePointer StorageBuffer %13
%15 = OpVariable %14 StorageBuffer
%16 = OpTypeInt 64 0
%17 = OpTypeVector %16 4
%18 = OpTypeRuntimeArray %17
%19 = OpTypeStruct %18
%20 = OpTypePointer StorageBuffer %19
%21 = OpVariable %20 StorageBuffer
%22 = OpTypeSampler
%23 = OpTypePointer UniformConstant %22
%24 = OpVariable %23 UniformConstant
%27 = OpTypeSampledImage %6
%29 = OpTypeFloat 32
%30 = OpConstant %29 0.5
%31 = OpTypeVector %29 2
%33 = OpConstant %5 0
%35 = OpTypeInt 16 0
%36 = OpTypeVector %35 4
%55 = OpConstant %5 1
%58 = OpTypeVector %5 2
%83 = OpTypePointer StorageBuffer %11
%88 = OpTypePointer StorageBuffer %17
%3 = OpFunction %1 None %2
%4 = OpLabel
OpBranch %90
%90 = OpLabel
%25 = OpLoad %6 %8
%26 = OpLoad %22 %24
%28 = OpSampledImage %27 %25 %26
%32 = OpCompositeConstruct %31 %30 %30
%34 = OpImageGather %11 %28 %32 %33
%37 = OpUConvert %36 %34
%38 = OpCompositeExtract %35 %37 0
%39 = OpCompositeExtract %35 %37 1
%40 = OpCompositeExtract %35 %37 2
%41 = OpCompositeExtract %35 %37 3
%42 = OpLoad %6 %9
%43 = OpSampledImage %27 %42 %26
%44 = OpCompositeConstruct %31 %30 %30
%45 = OpImageGather %11 %43 %44 %33
%46 = OpCompositeExtract %5 %45 0
%47 = OpCompositeExtract %5 %45 1
%48 = OpCompositeExtract %5 %45 2
%49 = OpCompositeExtract %5 %45 3
%50 = OpLoad %6 %10
%51 = OpSampledImage %27 %50 %26
%52 = OpCompositeConstruct %31 %30 %30
%53 = OpImageGather %11 %51 %52 %33
%54 = OpImageGather %11 %51 %52 %55
%56 = OpCompositeExtract %5 %53 0
%57 = OpCompositeExtract %5 %54 0
%59 = OpCompositeConstruct %58 %56 %57
%60 = OpBitcast %16 %59
%61 = OpCompositeExtract %5 %53 1
%62 = OpCompositeExtract %5 %54 1
%63 = OpCompositeConstruct %58 %61 %62
%64 = OpBitcast %16 %63
%65 = OpCompositeExtract %5 %53 2
%66 = OpCompositeExtract %5 %54 2
%67 = OpCompositeConstruct %58 %65 %66
%68 = OpBitcast %16 %67
%69 = OpCompositeExtract %5 %53 3
%70 = OpCompositeExtract %5 %54 3
%71 = OpCompositeConstruct %58 %69 %70
%72 = OpBitcast %16 %71
%73 = OpCompositeConstruct %17 %60 %64 %68 %72
%74 = OpCompositeExtract %16 %73 0
%75 = OpCompositeExtract %16 %73 1
%76 = OpCompositeExtract %16 %73 2
%77 = OpCompositeExtract %16 %73 3
%78 = OpUConvert %5 %38
%79 = OpUConvert %5 %39
%80 = OpUConvert %5 %40
%81 = OpUConvert %5 %41
%82 = OpCompositeConstruct %11 %78 %79 %80 %81
%84 = OpAccessChain %83 %15 %33 %33
OpStore %84 %82
%85 = OpCompositeConstruct %11 %46 %47 %48 %49
%86 = OpAccessChain %83 %15 %33 %55
OpStore %86 %85
%87 = OpCompositeConstruct %17 %74 %75 %76 %77
%89 = OpAccessChain %88 %21 %33 %55
OpStore %89 %87
OpReturn
OpFunctionEnd
#endif
