

groupshared uint gs_ua;
groupshared uint gs_ub;
groupshared uint gs_uc;
groupshared uint2 gs_ua2;
groupshared uint2 gs_ub2;
groupshared uint2 gs_uc2;
groupshared uint3 gs_ua3;
groupshared uint3 gs_ub3;
groupshared uint3 gs_uc3;
groupshared uint4 gs_ua4;
groupshared uint4 gs_ub4;
groupshared uint4 gs_uc4;

float PixelShaderFunctionS(float inF0, float inF1, float inF2, uint inU0, uint inU1)
{
    uint out_u1;

    bool r000 = all(inF0);
    float r001 = abs(inF0);
    float r002 = acos(inF0);
    bool r003 = any(inF0);
    float r004 = asin(inF0);
    int r005 = asint(inF0);
    uint r006 = asuint(inF0);
    float r007 = asfloat(inU0);
    // asdouble(inU0, inU1);  // TODO: enable when HLSL parser used for intrinsics
    float r009 = atan(inF0);
    float r010 = atan2(inF0, inF1);
    float r011 = ceil(inF0);
    float r012 = clamp(inF0, inF1, inF2);
    clip(inF0);
    clip(r005);
    float r014 = cos(inF0);
    float r015 = cosh(inF0);
    int r016 = countbits(7);
    float r017 = ddx(inF0);
    float r018 = ddx_coarse(inF0);
    float r019 = ddx_fine(inF0);
    float r020 = ddy(inF0);
    float r021 = ddy_coarse(inF0);
    float r022 = ddy_fine(inF0);
    float r023 = degrees(inF0);
    // EvaluateAttributeAtCentroid(inF0);
    // EvaluateAttributeAtSample(inF0, 0);
    // TODO: EvaluateAttributeSnapped(inF0, int2(1,2));
    float r027 = exp(inF0);
    float r028 = exp2(inF0);
    uint r029 = firstbithigh(7);
    uint r030 = firstbitlow(7);
    float r031 = floor(inF0);
    // TODO: fma(inD0, inD1, inD2);
    float r033 = fmod(inF0, inF1);
    float r034 = frac(inF0);
    float r036 = fwidth(inF0);
    bool r037 = isinf(inF0);
    bool r038 = isnan(inF0);
    float r039 = ldexp(inF0, inF1);
    float r039a = lerp(inF0, inF1, inF2);
    float r040 = log(inF0);
    float r041 = log10(inF0);
    float r042 = log2(inF0);
    float r043 = max(inF0, inF1);
    float r044 = min(inF0, inF1);
    float r045 = pow(inF0, inF1);
    float r046 = radians(inF0);
    float r047 = rcp(inF0);
    uint r048 = reversebits(2);
    float r049 = round(inF0);
    float r050 = rsqrt(inF0);
    float r051 = saturate(inF0);
    float r052 = sign(inF0);
    float r053 = sin(inF0);
    sincos(inF0, inF1, inF2);
    float r055 = sinh(inF0);
    float r056 = smoothstep(inF0, inF1, inF2);
    float r057 = sqrt(inF0);
    float r058 = step(inF0, inF1);
    float r059 = tan(inF0);
    float r060 = tanh(inF0);
    // TODO: sampler intrinsics, when we can declare the types.
    float r061 = trunc(inF0);

    return 0.0;
}

float1 PixelShaderFunction1(float1 inF0, float1 inF1, float1 inF2)
{
    // TODO: ... add when float1 prototypes are generated
    return 0.0;
}

float2 PixelShaderFunction2(float2 inF0, float2 inF1, float2 inF2, uint2 inU0, uint2 inU1)
{
    uint2 out_u2;

    bool r000 = all(inF0);
    float2 r001 = abs(inF0);
    float2 r002 = acos(inF0);
    bool r003 = any(inF0);
    float2 r004 = asin(inF0);
    int2 r005 = asint(inF0);
    uint2 r006 = asuint(inF0);
    float2 r007 = asfloat(inU0);
    // asdouble(inU0, inU1);  // TODO: enable when HLSL parser used for intrinsics
    float2 r009 = atan(inF0);
    float2 r010 = atan2(inF0, inF1);
    float2 r011 = ceil(inF0);
    float2 r012 = clamp(inF0, inF1, inF2);
    clip(inF0);
    clip(inU0);
    float2 r013 = cos(inF0);
    float2 r015 = cosh(inF0);
    int2 r016 = countbits(int2(7,3));
    float2 r017 = ddx(inF0);
    float2 r018 = ddx_coarse(inF0);
    float2 r019 = ddx_fine(inF0);
    float2 r020 = ddy(inF0);
    float2 r021 = ddy_coarse(inF0);
    float2 r022 = ddy_fine(inF0);
    float2 r023 = degrees(inF0);
    // EvaluateAttributeAtCentroid(inF0);
    // EvaluateAttributeAtSample(inF0, 0);
    // TODO: EvaluateAttributeSnapped(inF0, int2(1,2));
    float r026 = distance(inF0, inF1);
    float r027 = dot(inF0, inF1);
    // EvaluateAttributeAtCentroid(inF0);
    // EvaluateAttributeAtSample(inF0, 0);
    // TODO: EvaluateAttributeSnapped(inF0, int2(1,2));
    float2 r028 = exp(inF0);
    float2 r029 = exp2(inF0);
    float2 r030 = faceforward(inF0, inF1, inF2);
    uint2 r031 = firstbithigh(uint2(7,8));
    uint2 r032 = firstbitlow(uint2(7,8));
    float2 r033 = floor(inF0);
    // TODO: fma(inD0, inD1, inD2);
    float2 r035 = fmod(inF0, inF1);
    float2 r036 = frac(inF0);
    float2 r038 = fwidth(inF0);
    bool2 r039 = isinf(inF0);
    bool2 r040 = isnan(inF0);
    float2 r041 = ldexp(inF0, inF1);
    float2 r039a = lerp(inF0, inF1, inF2);
    float r042 = length(inF0);
    float2 r043 = log(inF0);
    float2 r044 = log10(inF0);
    float2 r045 = log2(inF0);
    float2 r046 = max(inF0, inF1);
    float2 r047 = min(inF0, inF1);
    float2 r048 = normalize(inF0);
    float2 r049 = pow(inF0, inF1);
    float2 r050 = radians(inF0);
    float2 r051 = rcp(inF0);
    float2 r052 = reflect(inF0, inF1);
    float2 r053 = refract(inF0, inF1, 2.0);
    uint2 r054 = reversebits(uint2(1,2));
    float2 r055 = round(inF0);
    float2 r056 = rsqrt(inF0);
    float2 r057 = saturate(inF0);
    float2 r058 = sign(inF0);
    float2 r059 = sin(inF0);
    sincos(inF0, inF1, inF2);
    float2 r060 = sinh(inF0);
    float2 r061 = smoothstep(inF0, inF1, inF2);
    float2 r062 = sqrt(inF0);
    float2 r063 = step(inF0, inF1);
    float2 r064 = tan(inF0);
    float2 r065 = tanh(inF0);
    // TODO: sampler intrinsics, when we can declare the types.
    float2 r066 = trunc(inF0);

    // TODO: ... add when float1 prototypes are generated
    return float2(1,2);
}

float3 PixelShaderFunction3(float3 inF0, float3 inF1, float3 inF2, uint3 inU0, uint3 inU1)
{
    uint3 out_u3;
    
    bool r000 = all(inF0);
    float3 r001 = abs(inF0);
    float3 r002 = acos(inF0);
    bool r003 = any(inF0);
    float3 r004 = asin(inF0);
    int3 r005 = asint(inF0);
    uint3 r006 = asuint(inF0);
    float3 r007 = asfloat(inU0);
    // asdouble(inU0, inU1);  // TODO: enable when HLSL parser used for intrinsics
    float3 r009 = atan(inF0);
    float3 r010 = atan2(inF0, inF1);
    float3 r011 = ceil(inF0);
    float3 r012 = clamp(inF0, inF1, inF2);
    clip(inF0);
    clip(inU0);
    float3 r013 = cos(inF0);
    float3 r014 = cosh(inF0);
    uint3 r015 = countbits(uint3(7,3,5));
    float3 r016 = cross(inF0, inF1);
    float3 r017 = ddx(inF0);
    float3 r018 = ddx_coarse(inF0);
    float3 r019 = ddx_fine(inF0);
    float3 r020 = ddy(inF0);
    float3 r021 = ddy_coarse(inF0);
    float3 r022 = ddy_fine(inF0);
    float3 r023 = degrees(inF0);
    float r024 = distance(inF0, inF1);
    float r025 = dot(inF0, inF1);
    // EvaluateAttributeAtCentroid(inF0);
    // EvaluateAttributeAtSample(inF0, 0);
    // TODO: EvaluateAttributeSnapped(inF0, int2(1,2));
    float3 r029 = exp(inF0);
    float3 r030 = exp2(inF0);
    float3 r031 = faceforward(inF0, inF1, inF2);
    uint3 r032 = firstbithigh(uint3(2,3,4));
    uint3 r033 = firstbitlow(uint3(2,3,4));
    float3 r034 = floor(inF0);
    // TODO: fma(inD0, inD1, inD2);
    float3 r036 = fmod(inF0, inF1);
    float3 r037 = frac(inF0);
    float3 r039 = fwidth(inF0);
    bool3 r040 = isinf(inF0);
    bool3 r041 = isnan(inF0);
    float3 r042 = ldexp(inF0, inF1);
    float3 r039a = lerp(inF0, inF1, inF2);
    float3 r039b = lerp(inF0, inF1, 0.3); // test vec,vec,scalar lerp
    float r043 = length(inF0);
    float3 r044 = log(inF0);
    float3 r045 = log10(inF0);
    float3 r046 = log2(inF0);
    float3 r047 = max(inF0, inF1);
    float3 r048 = min(inF0, inF1);
    float3 r049 = normalize(inF0);
    float3 r050 = pow(inF0, inF1);
    float3 r051 = radians(inF0);
    float3 r052 = rcp(inF0);
    float3 r053 = reflect(inF0, inF1);
    float3 r054 = refract(inF0, inF1, 2.0);
    uint3 r055 = reversebits(uint3(1,2,3));
    float3 r056 = round(inF0);
    float3 r057 = rsqrt(inF0);
    float3 r058 = saturate(inF0);
    float3 r059 = sign(inF0);
    float3 r060 = sin(inF0);
    sincos(inF0, inF1, inF2);
    float3 r061 = sinh(inF0);
    float3 r062 = smoothstep(inF0, inF1, inF2);
    float3 r063 = sqrt(inF0);
    float3 r064 = step(inF0, inF1);
    float3 r065 = tan(inF0);
    float3 r066 = tanh(inF0);
    // TODO: sampler intrinsics, when we can declare the types.
    float3 r067 = trunc(inF0);

    // TODO: ... add when float1 prototypes are generated
    return float3(1,2,3);
}

float4 PixelShaderFunction(float4 inF0, float4 inF1, float4 inF2, uint4 inU0, uint4 inU1)
{
    uint4 out_u4;

    bool r000 = all(inF0);
    float4 r001 = abs(inF0);
    float4 r002 = acos(inF0);
    bool r003 = any(inF0);
    float4 r004 = asin(inF0);
    int4 r005 = asint(inF0);
    uint4 r006 = asuint(inF0);
    float4 r007 = asfloat(inU0);
    // asdouble(inU0, inU1);  // TODO: enable when HLSL parser used for intrinsics
    float4 r009 = atan(inF0);
    float4 r010 = atan2(inF0, inF1);
    float4 r011 = ceil(inF0);
    float4 r012 = clamp(inF0, inF1, inF2);
    clip(inF0);
    clip(inU0);
    float4 r013 = cos(inF0);
    float4 r014 = cosh(inF0);
    uint4 r015 = countbits(uint4(7,3,5,2));
    float4 r016 = ddx(inF0);
    float4 r017 = ddx_coarse(inF0);
    float4 r018 = ddx_fine(inF0);
    float4 r019 = ddy(inF0);
    float4 r020 = ddy_coarse(inF0);
    float4 r021 = ddy_fine(inF0);
    float4 r022 = degrees(inF0);
    float r023 = distance(inF0, inF1);
    float r024 = dot(inF0, inF1);
    float4 r025 = dst(inF0, inF1);
    // EvaluateAttributeAtCentroid(inF0);
    // EvaluateAttributeAtSample(inF0, 0);
    // TODO: EvaluateAttributeSnapped(inF0, int2(1,2));
    float4 r029 = exp(inF0);
    float4 r030 = exp2(inF0);
    float4 r031 = faceforward(inF0, inF1, inF2);
    uint4 r032 = firstbithigh(uint4(7,8,9,10));
    uint4 r033 = firstbitlow(uint4(7,8,9,10));
    float4 r034 = floor(inF0);
    // TODO: fma(inD0, inD1, inD2);
    float4 r036 = fmod(inF0, inF1);
    float4 r037 = frac(inF0);
    float4 r039 = fwidth(inF0);
    bool4 r040 = isinf(inF0);
    bool4 r041 = isnan(inF0);
    float4 r042 = ldexp(inF0, inF1);
    float4 r039a = lerp(inF0, inF1, inF2);
    float r043 = length(inF0);
    float4 r044 = log(inF0);
    float4 r045 = log10(inF0);
    float4 r046 = log2(inF0);
    float4 r047 = max(inF0, inF1);
    float4 r048 = min(inF0, inF1);
    float4 r049 = normalize(inF0);
    float4 r050 = pow(inF0, inF1);
    float4 r051 = radians(inF0);
    float4 r052 = rcp(inF0);
    float4 r053 = reflect(inF0, inF1);
    float4 r054 = refract(inF0, inF1, 2.0);
    uint4 r055 = reversebits(uint4(1,2,3,4));
    float4 r056 = round(inF0);
    float4 r057 = rsqrt(inF0);
    float4 r058 = saturate(inF0);
    float4 r059 = sign(inF0);
    float4 r060 = sin(inF0);
    sincos(inF0, inF1, inF2);
    float4 r061 = sinh(inF0);
    float4 r062 = smoothstep(inF0, inF1, inF2);
    float4 r063 = sqrt(inF0);
    float4 r064 = step(inF0, inF1);
    float4 r065 = tan(inF0);
    float4 r066 = tanh(inF0);
    // TODO: sampler intrinsics, when we can declare the types.
    float4 r067 = trunc(inF0);

    // TODO: ... add when float1 prototypes are generated
    return float4(1,2,3,4);
}

// TODO: for mats:
//    asfloat(inU0); \
//    asint(inF0); \
//    asuint(inF0); \

// TODO: FXC doesn't accept this with (), but glslang doesn't accept it without.
#define MATFNS(MT)                          \
    bool r000 = all(inF0);                  \
    MT r001 = abs(inF0);                    \
    acos(inF0);                             \
    bool r003 = any(inF0);                  \
    MT r004 = asin(inF0);                   \
    MT r005 = atan(inF0);                   \
    MT r006 = atan2(inF0, inF1);            \
    MT r007 = ceil(inF0);                   \
    clip(inF0);                             \
    MT r008 = clamp(inF0, inF1, inF2);      \
    MT r009 = cos(inF0);                    \
    MT r010 = cosh(inF0);                   \
    MT r011 = ddx(inF0);                    \
    MT r012 = ddx_coarse(inF0);             \
    MT r013 = ddx_fine(inF0);               \
    MT r014 = ddy(inF0);                    \
    MT r015 = ddy_coarse(inF0);             \
    MT r016 = ddy_fine(inF0);               \
    MT r017 = degrees(inF0);                \
    float r018 = determinant(inF0);         \
    MT r019 = exp(inF0);                    \
    MT R020 = exp2(inF0);                   \
    MT r021 = floor(inF0);                  \
    MT r022 = fmod(inF0, inF1);             \
    MT r023 = frac(inF0);                   \
    MT r025 = fwidth(inF0);                 \
    MT r026 = ldexp(inF0, inF1);            \
    MT r026a = lerp(inF0, inF1, inF2);      \
    MT r027 = log(inF0);                    \
    MT r028 = log10(inF0);                  \
    MT r029 = log2(inF0);                   \
    MT r030 = max(inF0, inF1);              \
    MT r031 = min(inF0, inF1);              \
    MT r032 = pow(inF0, inF1);              \
    MT r033 = radians(inF0);                \
    MT r034 = round(inF0);                  \
    MT r035 = rsqrt(inF0);                  \
    MT r036 = saturate(inF0);               \
    MT r037 = sign(inF0);                   \
    MT r038 = sin(inF0);                    \
    sincos(inF0, inF1, inF2);               \
    MT r039 = sinh(inF0);                   \
    MT r049 = smoothstep(inF0, inF1, inF2); \
    MT r041 = sqrt(inF0);                   \
    MT r042 = step(inF0, inF1);             \
    MT r043 = tan(inF0);                    \
    MT r044 = tanh(inF0);                   \
    transpose(inF0);                        \
    MT r046 = trunc(inF0);

// TODO: turn on non-square matrix tests when protos are available.

float2x2 PixelShaderFunction2x2(float2x2 inF0, float2x2 inF1, float2x2 inF2)
{
    // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without.
    MATFNS(float2x2);

    // TODO: ... add when float1 prototypes are generated
    return float2x2(2,2,2,2);
}

float3x3 PixelShaderFunction3x3(float3x3 inF0, float3x3 inF1, float3x3 inF2)
{
    // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without.
    MATFNS(float3x3);

    // TODO: ... add when float1 prototypes are generated
    return float3x3(3,3,3,3,3,3,3,3,3);
}

float4x4 PixelShaderFunction4x4(float4x4 inF0, float4x4 inF1, float4x4 inF2)
{
    // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without.
    MATFNS(float4x4);

    // TODO: ... add when float1 prototypes are generated
    return float4x4(4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4);
}

#define TESTGENMUL(ST, VT, MT) \
    ST r0 = mul(inF0,  inF1);  \
    VT r1 = mul(inFV0, inF0);  \
    VT r2 = mul(inF0,  inFV0); \
    ST r3 = mul(inFV0, inFV1); \
    VT r4 = mul(inFM0, inFV0); \
    VT r5 = mul(inFV0, inFM0); \
    MT r6 = mul(inFM0, inF0);  \
    MT r7 = mul(inF0, inFM0);  \
    MT r8 = mul(inFM0, inFM1);


void TestGenMul2(float inF0, float inF1,
                float2 inFV0, float2 inFV1,
                float2x2 inFM0, float2x2 inFM1)
{
    TESTGENMUL(float, float2, float2x2);
}

void TestGenMul3(float inF0, float inF1,
                float3 inFV0, float3 inFV1,
                float3x3 inFM0, float3x3 inFM1)
{
    TESTGENMUL(float, float3, float3x3);
}

void TestGenMul4(float inF0, float inF1,
                float4 inFV0, float4 inFV1,
                float4x4 inFM0, float4x4 inFM1)
{
    TESTGENMUL(float, float4, float4x4);
}

// Test some non-square mats
void TestGenMulNxM(float inF0, float inF1,
                   float2 inFV2, float3 inFV3,
                   float2x3 inFM2x3, float3x2 inFM3x2,
                   float3x3 inFM3x3, float3x4 inFM3x4,
                   float2x4 inFM2x4)
{
    float  r00 = mul(inF0,  inF1);  // S=S*S
    float2 r01 = mul(inFV2, inF0);  // V=V*S
    float3 r02 = mul(inFV3, inF0);  // V=V*S
    float2 r03 = mul(inF0,  inFV2); // V=S*V
    float3 r04 = mul(inF0,  inFV3); // V=S*V
    float  r05 = mul(inFV2, inFV2); // S=V*V
    float  r06 = mul(inFV3, inFV3); // S=V*V
    float3 r07 = mul(inFV2, inFM2x3); // V=V*M (return V dim is Mcols)
    float2 r08 = mul(inFV3, inFM3x2); // V=V*M (return V dim is Mcols)
    float2 r09 = mul(inFM2x3, inFV3); // V=M*V (return V dim is Mrows)
    float3 r10 = mul(inFM3x2, inFV2); // V=M*V (return V dim is Mrows)
    float2x3 r11 = mul(inFM2x3, inF0);
    float3x2 r12 = mul(inFM3x2, inF0);
    float2x2 r13 = mul(inFM2x3, inFM3x2);
    float2x3 r14 = mul(inFM2x3, inFM3x3);
    float2x4 r15 = mul(inFM2x3, inFM3x4);
    float3x4 r16 = mul(inFM3x2, inFM2x4);
}

struct PS_OUTPUT { float4 color : SV_Target0; };

PS_OUTPUT main()
{
    PS_OUTPUT ps_output;
    ps_output.color = 1.0;
    return ps_output;
};
