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