xref: /aosp_15_r20/external/skia/resources/sksl/wgsl/OutParams.sksl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker/*#pragma settings NoInline*/
2*c8dee2aaSAndroid Build Coastguard Workeruniform half uFloat;
3*c8dee2aaSAndroid Build Coastguard Worker
4*c8dee2aaSAndroid Build Coastguard Worker// Reference a pipeline I/O parameter and a global uniform. This tests that all parameter variations
5*c8dee2aaSAndroid Build Coastguard Worker// are injected correctly.
6*c8dee2aaSAndroid Build Coastguard Workervoid various_parameter_types(half a, out half b, inout half c) {
7*c8dee2aaSAndroid Build Coastguard Worker    sk_FragColor = half4(a, b, c, uFloat);  // `b` has an undefined value but should compile OK.
8*c8dee2aaSAndroid Build Coastguard Worker    b = a;
9*c8dee2aaSAndroid Build Coastguard Worker    c = uFloat;
10*c8dee2aaSAndroid Build Coastguard Worker}
11*c8dee2aaSAndroid Build Coastguard Worker
12*c8dee2aaSAndroid Build Coastguard Workervoid one_out_param(out half h) {
13*c8dee2aaSAndroid Build Coastguard Worker    h = 2;
14*c8dee2aaSAndroid Build Coastguard Worker}
15*c8dee2aaSAndroid Build Coastguard Worker
16*c8dee2aaSAndroid Build Coastguard Workervoid one_out_param_indirect(out half h) {
17*c8dee2aaSAndroid Build Coastguard Worker    one_out_param(h);
18*c8dee2aaSAndroid Build Coastguard Worker}
19*c8dee2aaSAndroid Build Coastguard Worker
20*c8dee2aaSAndroid Build Coastguard Workerstruct S {
21*c8dee2aaSAndroid Build Coastguard Worker    half4 v;
22*c8dee2aaSAndroid Build Coastguard Worker};
23*c8dee2aaSAndroid Build Coastguard Worker
24*c8dee2aaSAndroid Build Coastguard Workervoid main() {
25*c8dee2aaSAndroid Build Coastguard Worker    // local float
26*c8dee2aaSAndroid Build Coastguard Worker    half x = 1;
27*c8dee2aaSAndroid Build Coastguard Worker    one_out_param(x);
28*c8dee2aaSAndroid Build Coastguard Worker    one_out_param_indirect(x);
29*c8dee2aaSAndroid Build Coastguard Worker    various_parameter_types(x + 1, x, x);
30*c8dee2aaSAndroid Build Coastguard Worker
31*c8dee2aaSAndroid Build Coastguard Worker    // local vector
32*c8dee2aaSAndroid Build Coastguard Worker    half4 v;
33*c8dee2aaSAndroid Build Coastguard Worker    various_parameter_types(x + 1, v.x, v.x);
34*c8dee2aaSAndroid Build Coastguard Worker    various_parameter_types(x + 1, v.y, v.y);
35*c8dee2aaSAndroid Build Coastguard Worker    various_parameter_types(x + 1, v.x, v.y);
36*c8dee2aaSAndroid Build Coastguard Worker
37*c8dee2aaSAndroid Build Coastguard Worker    // local struct
38*c8dee2aaSAndroid Build Coastguard Worker    S s;
39*c8dee2aaSAndroid Build Coastguard Worker    various_parameter_types(x + 1, s.v.x, x);
40*c8dee2aaSAndroid Build Coastguard Worker    various_parameter_types(x + 1, s.v.y, x);
41*c8dee2aaSAndroid Build Coastguard Worker}
42*c8dee2aaSAndroid Build Coastguard Worker
43*c8dee2aaSAndroid Build Coastguard Worker// TODO(skia:13092): test the case in which a pipeline IO parameter is passed as out-param,
44*c8dee2aaSAndroid Build Coastguard Worker//                   directly and indirectly
45*c8dee2aaSAndroid Build Coastguard Worker// TODO(skia:13092): module-private out-param
46*c8dee2aaSAndroid Build Coastguard Worker// TODO(skia:13092): access an IO parameter while also passing it as an out-param
47*c8dee2aaSAndroid Build Coastguard Worker// TODO(skia:13092): mixing out params with in and inout
48*c8dee2aaSAndroid Build Coastguard Worker// TODO(skia:13092): swizzle assignment when that's supported
49