#version 460
layout(local_size_x = 2, local_size_y = 1, local_size_z = 1) in;

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

layout(set = 0, binding = 1, std430) writeonly buffer _12_14
{
    uvec4 _m0[];
} _14;

void main()
{
    vec4 _37 = uintBitsToFloat(_10._m0[((gl_GlobalInvocationID.x * 4u) + gl_LocalInvocationIndex) + 1u]);
    _14._m0[(gl_GlobalInvocationID.x * 4u) + gl_LocalInvocationIndex] = uvec4(floatBitsToUint(_37.x), floatBitsToUint(_37.y), floatBitsToUint(_37.z), floatBitsToUint(_37.w));
    vec4 _54 = uintBitsToFloat(_10._m0[(gl_GlobalInvocationID.x * 4u) + gl_LocalInvocationIndex]);
    _14._m0[((gl_GlobalInvocationID.x * 4u) + gl_LocalInvocationIndex) + 1u] = uvec4(floatBitsToUint(_54.x), floatBitsToUint(_54.y), floatBitsToUint(_54.z), floatBitsToUint(_54.w));
    vec4 _80 = uintBitsToFloat(_10._m0[((gl_GlobalInvocationID.x * 4u) + (3u * gl_LocalInvocationIndex)) + 4294967295u]);
    _14._m0[((gl_GlobalInvocationID.x * 4u) + (2u * gl_LocalInvocationIndex)) + 1u] = uvec4(floatBitsToUint(_80.x), floatBitsToUint(_80.y), floatBitsToUint(_80.z), floatBitsToUint(_80.w));
}


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