xref: /aosp_15_r20/external/skia/resources/sksl/compute/Raytrace.compute (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Workerlayout(local_size_x = 16, local_size_y = 16) in;
2*c8dee2aaSAndroid Build Coastguard Worker
3*c8dee2aaSAndroid Build Coastguard Workerlayout(rgba32f, binding=0) writeonly texture2D dest;
4*c8dee2aaSAndroid Build Coastguard Worker
5*c8dee2aaSAndroid Build Coastguard Workervoid main () {
6*c8dee2aaSAndroid Build Coastguard Worker    half4 pixel = half4(0.0, 0.0, 0.0, 1.0);
7*c8dee2aaSAndroid Build Coastguard Worker
8*c8dee2aaSAndroid Build Coastguard Worker    float max_x = 5.0;
9*c8dee2aaSAndroid Build Coastguard Worker    float max_y = 5.0;
10*c8dee2aaSAndroid Build Coastguard Worker    float x = (float(sk_GlobalInvocationID.x * 2 - textureWidth(dest)) / float(textureWidth(dest)));
11*c8dee2aaSAndroid Build Coastguard Worker    float y = (float(sk_GlobalInvocationID.y * 2 - textureHeight(dest)) / float(textureHeight(dest)));
12*c8dee2aaSAndroid Build Coastguard Worker    float3 ray_origin = float3(0.0, 0.0, -1.0);
13*c8dee2aaSAndroid Build Coastguard Worker    float3 ray_target = float3(x * max_x, y * max_y, 0.0);
14*c8dee2aaSAndroid Build Coastguard Worker
15*c8dee2aaSAndroid Build Coastguard Worker    float3 sphere_center = float3(0.0, 0.0, -10.0);
16*c8dee2aaSAndroid Build Coastguard Worker    float sphere_radius = 1.0;
17*c8dee2aaSAndroid Build Coastguard Worker
18*c8dee2aaSAndroid Build Coastguard Worker    float3 t_minus_c = ray_target - sphere_center;
19*c8dee2aaSAndroid Build Coastguard Worker    float b = dot(ray_origin, t_minus_c);
20*c8dee2aaSAndroid Build Coastguard Worker    float c = dot(t_minus_c, t_minus_c) - sphere_radius * sphere_radius;
21*c8dee2aaSAndroid Build Coastguard Worker    float bsqmc = b * b - c;
22*c8dee2aaSAndroid Build Coastguard Worker
23*c8dee2aaSAndroid Build Coastguard Worker    if (bsqmc >= 0.0) {
24*c8dee2aaSAndroid Build Coastguard Worker        pixel = half4(0.4, 0.4, 1.0, 1.0);
25*c8dee2aaSAndroid Build Coastguard Worker    }
26*c8dee2aaSAndroid Build Coastguard Worker
27*c8dee2aaSAndroid Build Coastguard Worker    textureWrite(dest, sk_GlobalInvocationID.xy, pixel);
28*c8dee2aaSAndroid Build Coastguard Worker}
29