static const uint3 gl_WorkGroupSize = uint3(8u, 4u, 2u);

static uint3 gl_WorkGroupID;
static uint3 gl_LocalInvocationID;
static uint3 gl_GlobalInvocationID;
static uint gl_LocalInvocationIndex;
struct SPIRV_Cross_Input
{
    uint3 gl_WorkGroupID : SV_GroupID;
    uint3 gl_LocalInvocationID : SV_GroupThreadID;
    uint3 gl_GlobalInvocationID : SV_DispatchThreadID;
    uint gl_LocalInvocationIndex : SV_GroupIndex;
};

void comp_main()
{
    uint3 local_id = gl_LocalInvocationID;
    uint3 global_id = gl_GlobalInvocationID;
    uint local_index = gl_LocalInvocationIndex;
    uint3 work_group_size = gl_WorkGroupSize;
    uint3 work_group_id = gl_WorkGroupID;
}

[numthreads(8, 4, 2)]
void main(SPIRV_Cross_Input stage_input)
{
    gl_WorkGroupID = stage_input.gl_WorkGroupID;
    gl_LocalInvocationID = stage_input.gl_LocalInvocationID;
    gl_GlobalInvocationID = stage_input.gl_GlobalInvocationID;
    gl_LocalInvocationIndex = stage_input.gl_LocalInvocationIndex;
    comp_main();
}
