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