/*#pragma settings NoInline*/ uniform half uFloat; // Reference a pipeline I/O parameter and a global uniform. This tests that all parameter variations // are injected correctly. void various_parameter_types(half a, out half b, inout half c) { sk_FragColor = half4(a, b, c, uFloat); // `b` has an undefined value but should compile OK. b = a; c = uFloat; } void one_out_param(out half h) { h = 2; } void one_out_param_indirect(out half h) { one_out_param(h); } struct S { half4 v; }; void main() { // local float half x = 1; one_out_param(x); one_out_param_indirect(x); various_parameter_types(x + 1, x, x); // local vector half4 v; various_parameter_types(x + 1, v.x, v.x); various_parameter_types(x + 1, v.y, v.y); various_parameter_types(x + 1, v.x, v.y); // local struct S s; various_parameter_types(x + 1, s.v.x, x); various_parameter_types(x + 1, s.v.y, x); } // TODO(skia:13092): test the case in which a pipeline IO parameter is passed as out-param, // directly and indirectly // TODO(skia:13092): module-private out-param // TODO(skia:13092): access an IO parameter while also passing it as an out-param // TODO(skia:13092): mixing out params with in and inout // TODO(skia:13092): swizzle assignment when that's supported