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

layout(set = 0, binding = 0) uniform texture3D _8;
layout(set = 0, binding = 0) uniform writeonly image3D _11;
layout(set = 0, binding = 0) uniform sampler _14;

void main()
{
    uint _34 = (gl_WorkGroupID.x * 4u) + ((gl_LocalInvocationID.x & 1u) | ((gl_LocalInvocationID.x >> 2u) << 1u));
    uint _48 = (gl_WorkGroupID.y * 4u) + (bitfieldExtract(gl_LocalInvocationID.x, int(1u), int(1u)) + (gl_LocalInvocationID.y * 2u));
    imageStore(_11, ivec3(uvec3(_34, _48, gl_GlobalInvocationID.z)), vec4(texture(sampler3D(_8, _14), vec3((float(_34) + 0.5) * 0.015625, (float(_48) + 0.5) * 0.015625, (float(gl_GlobalInvocationID.z) + 0.5) * 0.015625))));
}


#if 0
// SPIR-V disassembly
; SPIR-V
; Version: 1.3
; Generator: Unknown(30017); 21022
; Bound: 81
; Schema: 0
OpCapability Shader
OpCapability StorageImageWriteWithoutFormat
OpCapability ComputeDerivativeGroupLinearKHR
OpExtension "SPV_NV_compute_shader_derivatives"
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %3 "main" %18 %27 %49
OpExecutionMode %3 DerivativeGroupLinearKHR
OpExecutionMode %3 LocalSize 8 2 4
OpName %3 "main"
OpDecorate %8 DescriptorSet 0
OpDecorate %8 Binding 0
OpDecorate %11 DescriptorSet 0
OpDecorate %11 Binding 0
OpDecorate %11 NonReadable
OpDecorate %14 DescriptorSet 0
OpDecorate %14 Binding 0
OpDecorate %18 BuiltIn LocalInvocationId
OpDecorate %27 BuiltIn WorkgroupId
OpDecorate %49 BuiltIn GlobalInvocationId
%1 = OpTypeVoid
%2 = OpTypeFunction %1
%5 = OpTypeFloat 32
%6 = OpTypeImage %5 3D 0 0 0 1 Unknown
%7 = OpTypePointer UniformConstant %6
%8 = OpVariable %7 UniformConstant
%9 = OpTypeImage %5 3D 0 0 0 2 Unknown
%10 = OpTypePointer UniformConstant %9
%11 = OpVariable %10 UniformConstant
%12 = OpTypeSampler
%13 = OpTypePointer UniformConstant %12
%14 = OpVariable %13 UniformConstant
%15 = OpTypeInt 32 0
%16 = OpTypeVector %15 3
%17 = OpTypePointer Input %16
%18 = OpVariable %17 Input
%22 = OpConstant %15 1
%24 = OpConstant %15 2
%27 = OpVariable %17 Input
%28 = OpTypePointer Input %15
%30 = OpConstant %15 0
%33 = OpConstant %15 4
%49 = OpVariable %17 Input
%56 = OpConstant %5 0.5
%60 = OpConstant %5 0.015625
%65 = OpTypeSampledImage %6
%67 = OpConstant %5 0
%68 = OpTypeVector %5 4
%70 = OpTypeVector %5 3
%3 = OpFunction %1 None %2
%4 = OpLabel
OpBranch %79
%79 = OpLabel
%19 = OpLoad %16 %18
%20 = OpCompositeExtract %15 %19 0
%21 = OpBitwiseAnd %15 %20 %22
%23 = OpShiftRightLogical %15 %20 %24
%25 = OpShiftLeftLogical %15 %23 %22
%26 = OpBitwiseOr %15 %21 %25
%29 = OpAccessChain %28 %27 %30
%31 = OpLoad %15 %29
%32 = OpIMul %15 %31 %33
%34 = OpIAdd %15 %32 %26
%35 = OpLoad %16 %18
%36 = OpCompositeExtract %15 %35 0
%37 = OpCompositeExtract %15 %35 1
%38 = OpBitFieldUExtract %15 %36 %22 %22
%39 = OpIMul %15 %37 %24
%40 = OpIAdd %15 %38 %39
%41 = OpBitwiseAnd %15 %36 %22
%42 = OpShiftRightLogical %15 %36 %24
%43 = OpShiftLeftLogical %15 %42 %22
%44 = OpBitwiseOr %15 %41 %43
%45 = OpAccessChain %28 %27 %22
%46 = OpLoad %15 %45
%47 = OpIMul %15 %46 %33
%48 = OpIAdd %15 %47 %40
%50 = OpAccessChain %28 %49 %24
%51 = OpLoad %15 %50
%52 = OpConvertUToF %5 %34
%53 = OpConvertUToF %5 %48
%54 = OpConvertUToF %5 %51
%55 = OpFAdd %5 %52 %56
%57 = OpFAdd %5 %53 %56
%58 = OpFAdd %5 %54 %56
%59 = OpFMul %5 %55 %60
%61 = OpFMul %5 %57 %60
%62 = OpFMul %5 %58 %60
%63 = OpLoad %6 %8
%64 = OpLoad %12 %14
%66 = OpSampledImage %65 %63 %64
%71 = OpCompositeConstruct %70 %59 %61 %62
%69 = OpImageSampleImplicitLod %68 %66 %71 None
%72 = OpCompositeExtract %5 %69 0
%73 = OpCompositeExtract %5 %69 1
%74 = OpCompositeExtract %5 %69 2
%75 = OpCompositeExtract %5 %69 3
%76 = OpLoad %9 %11
%77 = OpCompositeConstruct %16 %34 %48 %51
%78 = OpCompositeConstruct %68 %72 %73 %74 %75
OpImageWrite %76 %77 %78
OpReturn
OpFunctionEnd
#endif
