// Assume we are in SM4+, which has 8 color outputs

void VS_ClearFloat( in float3  inPosition :    POSITION,  in float4  inColor : COLOR,
                   out float4 outPosition : SV_POSITION, out float4 outColor : COLOR)
{
    outPosition = float4(inPosition, 1.0f);
    outColor = inColor;
}

struct PS_OutputFloat
{
    float4 color0 : SV_TARGET0;
    float4 color1 : SV_TARGET1;
    float4 color2 : SV_TARGET2;
    float4 color3 : SV_TARGET3;
    float4 color4 : SV_TARGET4;
    float4 color5 : SV_TARGET5;
    float4 color6 : SV_TARGET6;
    float4 color7 : SV_TARGET7;
};

PS_OutputFloat PS_ClearFloat(in float4 inPosition : SV_POSITION, in float4 inColor : COLOR)
{
    PS_OutputFloat outColor;
    outColor.color0 = inColor;
    outColor.color1 = inColor;
    outColor.color2 = inColor;
    outColor.color3 = inColor;
    outColor.color4 = inColor;
    outColor.color5 = inColor;
    outColor.color6 = inColor;
    outColor.color7 = inColor;
    return outColor;
}


void VS_ClearUint( in float3  inPosition :    POSITION,   in uint4  inColor : COLOR,
                   out float4 outPosition : SV_POSITION, out uint4 outColor : COLOR)
{
    outPosition = float4(inPosition, 1.0f);
    outColor = inColor;
}

struct PS_OutputUint
{
    uint4 color0 : SV_TARGET0;
    uint4 color1 : SV_TARGET1;
    uint4 color2 : SV_TARGET2;
    uint4 color3 : SV_TARGET3;
    uint4 color4 : SV_TARGET4;
    uint4 color5 : SV_TARGET5;
    uint4 color6 : SV_TARGET6;
    uint4 color7 : SV_TARGET7;
};

PS_OutputUint PS_ClearUint(in float4 inPosition : SV_POSITION, in uint4 inColor : COLOR)
{
    PS_OutputUint outColor;
    outColor.color0 = inColor;
    outColor.color1 = inColor;
    outColor.color2 = inColor;
    outColor.color3 = inColor;
    outColor.color4 = inColor;
    outColor.color5 = inColor;
    outColor.color6 = inColor;
    outColor.color7 = inColor;
    return outColor;
}


void VS_ClearSint( in float3  inPosition :    POSITION,   in int4  inColor : COLOR,
                   out float4 outPosition : SV_POSITION, out int4 outColor : COLOR)
{
    outPosition = float4(inPosition, 1.0f);
    outColor = inColor;
}

struct PS_OutputSint
{
    int4 color0 : SV_TARGET0;
    int4 color1 : SV_TARGET1;
    int4 color2 : SV_TARGET2;
    int4 color3 : SV_TARGET3;
    int4 color4 : SV_TARGET4;
    int4 color5 : SV_TARGET5;
    int4 color6 : SV_TARGET6;
    int4 color7 : SV_TARGET7;
};

PS_OutputSint PS_ClearSint(in float4 inPosition : SV_POSITION, in int4 inColor : COLOR)
{
    PS_OutputSint outColor;
    outColor.color0 = inColor;
    outColor.color1 = inColor;
    outColor.color2 = inColor;
    outColor.color3 = inColor;
    outColor.color4 = inColor;
    outColor.color5 = inColor;
    outColor.color6 = inColor;
    outColor.color7 = inColor;
    return outColor;
}
