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