xref: /aosp_15_r20/external/skia/tests/sksl/intrinsics/Unpack.hlsl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1cbuffer _UniformBuffer : register(b0, space0)
2{
3    uint _7_a : packoffset(c0);
4};
5
6
7static float4 sk_FragColor;
8
9struct SPIRV_Cross_Output
10{
11    float4 sk_FragColor : SV_Target0;
12};
13
14uint spvPackHalf2x16(float2 value)
15{
16    uint2 Packed = f32tof16(value);
17    return Packed.x | (Packed.y << 16);
18}
19
20float2 spvUnpackHalf2x16(uint value)
21{
22    return f16tof32(uint2(value & 0xffff, value >> 16));
23}
24
25uint spvPackUnorm4x8(float4 value)
26{
27    uint4 Packed = uint4(round(saturate(value) * 255.0));
28    return Packed.x | (Packed.y << 8) | (Packed.z << 16) | (Packed.w << 24);
29}
30
31float4 spvUnpackUnorm4x8(uint value)
32{
33    uint4 Packed = uint4(value & 0xff, (value >> 8) & 0xff, (value >> 16) & 0xff, value >> 24);
34    return float4(Packed) / 255.0;
35}
36
37uint spvPackSnorm4x8(float4 value)
38{
39    int4 Packed = int4(round(clamp(value, -1.0, 1.0) * 127.0)) & 0xff;
40    return uint(Packed.x | (Packed.y << 8) | (Packed.z << 16) | (Packed.w << 24));
41}
42
43float4 spvUnpackSnorm4x8(uint value)
44{
45    int SignedValue = int(value);
46    int4 Packed = int4(SignedValue << 24, SignedValue << 16, SignedValue << 8, SignedValue) >> 24;
47    return clamp(float4(Packed) / 127.0, -1.0, 1.0);
48}
49
50uint spvPackUnorm2x16(float2 value)
51{
52    uint2 Packed = uint2(round(saturate(value) * 65535.0));
53    return Packed.x | (Packed.y << 16);
54}
55
56float2 spvUnpackUnorm2x16(uint value)
57{
58    uint2 Packed = uint2(value & 0xffff, value >> 16);
59    return float2(Packed) / 65535.0;
60}
61
62uint spvPackSnorm2x16(float2 value)
63{
64    int2 Packed = int2(round(clamp(value, -1.0, 1.0) * 32767.0)) & 0xffff;
65    return uint(Packed.x | (Packed.y << 16));
66}
67
68float2 spvUnpackSnorm2x16(uint value)
69{
70    int SignedValue = int(value);
71    int2 Packed = int2(SignedValue << 16, SignedValue) >> 16;
72    return clamp(float2(Packed) / 32767.0, -1.0, 1.0);
73}
74
75void frag_main()
76{
77    float2 _14 = spvUnpackHalf2x16(_7_a);
78    sk_FragColor = float4(_14.x, _14.y, sk_FragColor.z, sk_FragColor.w);
79    float2 _23 = spvUnpackUnorm2x16(_7_a);
80    sk_FragColor = float4(_23.x, _23.y, sk_FragColor.z, sk_FragColor.w);
81    float2 _28 = spvUnpackSnorm2x16(_7_a);
82    sk_FragColor = float4(_28.x, _28.y, sk_FragColor.z, sk_FragColor.w);
83    sk_FragColor = spvUnpackUnorm4x8(_7_a);
84    sk_FragColor = spvUnpackSnorm4x8(_7_a);
85}
86
87SPIRV_Cross_Output main()
88{
89    frag_main();
90    SPIRV_Cross_Output stage_output;
91    stage_output.sk_FragColor = sk_FragColor;
92    return stage_output;
93}
94