1static float4 FP32Out;
2static uint UNORM8;
3static uint SNORM8;
4static uint UNORM16;
5static uint SNORM16;
6static uint UNORM8Out;
7static float4 FP32;
8static uint SNORM8Out;
9static uint UNORM16Out;
10static uint SNORM16Out;
11
12struct SPIRV_Cross_Input
13{
14    nointerpolation uint SNORM8 : TEXCOORD0;
15    nointerpolation uint UNORM8 : TEXCOORD1;
16    nointerpolation uint SNORM16 : TEXCOORD2;
17    nointerpolation uint UNORM16 : TEXCOORD3;
18    nointerpolation float4 FP32 : TEXCOORD4;
19};
20
21struct SPIRV_Cross_Output
22{
23    float4 FP32Out : SV_Target0;
24    uint UNORM8Out : SV_Target1;
25    uint SNORM8Out : SV_Target2;
26    uint UNORM16Out : SV_Target3;
27    uint SNORM16Out : SV_Target4;
28};
29
30uint spvPackUnorm4x8(float4 value)
31{
32    uint4 Packed = uint4(round(saturate(value) * 255.0));
33    return Packed.x | (Packed.y << 8) | (Packed.z << 16) | (Packed.w << 24);
34}
35
36float4 spvUnpackUnorm4x8(uint value)
37{
38    uint4 Packed = uint4(value & 0xff, (value >> 8) & 0xff, (value >> 16) & 0xff, value >> 24);
39    return float4(Packed) / 255.0;
40}
41
42uint spvPackSnorm4x8(float4 value)
43{
44    int4 Packed = int4(round(clamp(value, -1.0, 1.0) * 127.0)) & 0xff;
45    return uint(Packed.x | (Packed.y << 8) | (Packed.z << 16) | (Packed.w << 24));
46}
47
48float4 spvUnpackSnorm4x8(uint value)
49{
50    int SignedValue = int(value);
51    int4 Packed = int4(SignedValue << 24, SignedValue << 16, SignedValue << 8, SignedValue) >> 24;
52    return clamp(float4(Packed) / 127.0, -1.0, 1.0);
53}
54
55uint spvPackUnorm2x16(float2 value)
56{
57    uint2 Packed = uint2(round(saturate(value) * 65535.0));
58    return Packed.x | (Packed.y << 16);
59}
60
61float2 spvUnpackUnorm2x16(uint value)
62{
63    uint2 Packed = uint2(value & 0xffff, value >> 16);
64    return float2(Packed) / 65535.0;
65}
66
67uint spvPackSnorm2x16(float2 value)
68{
69    int2 Packed = int2(round(clamp(value, -1.0, 1.0) * 32767.0)) & 0xffff;
70    return uint(Packed.x | (Packed.y << 16));
71}
72
73float2 spvUnpackSnorm2x16(uint value)
74{
75    int SignedValue = int(value);
76    int2 Packed = int2(SignedValue << 16, SignedValue) >> 16;
77    return clamp(float2(Packed) / 32767.0, -1.0, 1.0);
78}
79
80void frag_main()
81{
82    FP32Out = spvUnpackUnorm4x8(UNORM8);
83    FP32Out = spvUnpackSnorm4x8(SNORM8);
84    float2 _21 = spvUnpackUnorm2x16(UNORM16);
85    FP32Out = float4(_21.x, _21.y, FP32Out.z, FP32Out.w);
86    float2 _26 = spvUnpackSnorm2x16(SNORM16);
87    FP32Out = float4(_26.x, _26.y, FP32Out.z, FP32Out.w);
88    UNORM8Out = spvPackUnorm4x8(FP32);
89    SNORM8Out = spvPackSnorm4x8(FP32);
90    UNORM16Out = spvPackUnorm2x16(FP32.xy);
91    SNORM16Out = spvPackSnorm2x16(FP32.zw);
92}
93
94SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input)
95{
96    UNORM8 = stage_input.UNORM8;
97    SNORM8 = stage_input.SNORM8;
98    UNORM16 = stage_input.UNORM16;
99    SNORM16 = stage_input.SNORM16;
100    FP32 = stage_input.FP32;
101    frag_main();
102    SPIRV_Cross_Output stage_output;
103    stage_output.FP32Out = FP32Out;
104    stage_output.UNORM8Out = UNORM8Out;
105    stage_output.SNORM8Out = SNORM8Out;
106    stage_output.UNORM16Out = UNORM16Out;
107    stage_output.SNORM16Out = SNORM16Out;
108    return stage_output;
109}
110