xref: /aosp_15_r20/external/skia/DATA/skia_resources/sksl/intrinsics/Reflect.sksl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1uniform half4 I, N;
2uniform half4 colorGreen, colorRed;
3
4half4 main(float2 xy) {
5    // Ensure that constant-evaluation is safe even when the expression cannot be optimized.
6    half expectedX = reflect(2245222*222*2, -2e34);
7
8    const half4 constI    = half4(1, -2, 3, -4);
9    const half4 constN    = half4(-5, 6, -7, 8);
10
11          expectedX    = half (-49);
12    half2 expectedXY   = half2(-169, 202);
13    half3 expectedXYZ  = half3(-379, 454, -529);
14    half4 expectedXYZW = half4(-699, 838, -977, 1116);
15
16    return (reflect(I.x,         N.x        ) == expectedX    &&
17            reflect(I.xy,        N.xy       ) == expectedXY   &&
18            reflect(I.xyz,       N.xyz      ) == expectedXYZ  &&
19            reflect(I.xyzw,      N.xyzw     ) == expectedXYZW &&
20            reflect(constI.x,    constN.x   ) == expectedX    &&
21            reflect(constI.xy,   constN.xy  ) == expectedXY   &&
22            reflect(constI.xyz,  constN.xyz ) == expectedXYZ  &&
23            reflect(constI.xyzw, constN.xyzw) == expectedXYZW) ? colorGreen
24                                                               : colorRed;
25}
26