blob: 558875600767f7e5616d2a9a6d21a365efa93ce1 [file] [log] [blame]
/*#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