uniform half4 colorGreen; uniform half unknownInput; struct S { half4 ah4[1]; half ah[1]; half4 h4; half h; }; // Each helper function needs to reference the variable multiple times, because if it's only read // from once, it is inlined directly whether or not it is trivial. half4 funcb(bool b) { return half4(b, b, b, !b); } half4 func1(half h) { return h.xxxx * h.xxxx; } half4 func2(half2 h2) { return h2.xyxy * h2.yxyx; } half4 func3(half3 h3) { return h3.xyzx * h3.xyzx; } half4 func4(half4 h4) { return h4 * h4; } half4 main(float2 coords) { S s; s.ah4[0] = half4(unknownInput); s.ah[0] = unknownInput; s.h4 = half4(unknownInput); s.h = unknownInput; S as[1]; as[0].ah4[0] = half4(unknownInput); bool b = bool(unknownInput); int i = int(unknownInput); // These expressions are considered "trivial" and will be cloned directly into the inlined // function without a temporary variable. half4 var; var = func1(+s.h); var = funcb(b); var = func2(s.ah4[0].yw); var = func2(as[0].ah4[0].xy); var = func3(s.h4.zzz); var = func3(colorGreen.xyz); var = func3(s.h.xxx); var = func4(half4(s.h)); var = func4(s.ah4[0].xxxy); var = func4(colorGreen); // These expressions are considered "non-trivial" and will be placed in a temporary variable // when inlining occurs. var = func1(-s.h); var = funcb(!b); // var = func2(as[i].h4.yw); // indexing by non-constant expressions disallowed in ES2 var = func3(s.h4.yyy + s.h4.zzz); var = func4(s.h4.y001); return colorGreen; }