groupshared uint gs_GpShared[1024];

// MainCS1 is a valid cs entry
[numthreads(1, 1, 1)]
void MainCS1() 
{
    gs_GpShared[0] = 1; 
}

// MainCS2 is a valid cs entry
[numthreads(8, 1, 1)]
void MainCS2() 
{
    gs_GpShared[0] = 1; 
}

// MainCS3 is a valid cs entry
[numthreads(16, 4, 1)]
void MainCS3() 
{
    gs_GpShared[0] = 1; 
}

// MainCS4 is a valid cs entry
[numthreads(1, 1, 64)]
void MainCS4() 
{
    gs_GpShared[0] = 1; 
}


struct VertexInput1  { 
    float3 m_position : POSITION;
    float  m_color[4] : COLOR;
};

struct VertexOutput1 { float4 m_position : SV_Position; };

// MainVS1 is a valid vs entry, but has no numthreads
VertexOutput1 MainVS1(VertexInput1 input, uint vtxIndex : SV_VertexID)
{
    VertexOutput1 output;
    output.m_position = float4(input.m_position, 1.0);
    return output;
}

