uniform half4 colorRed, colorGreen, testInputs; half fn(half4 v) { // Add an un-inlinable construct to ensure that fn() remains a standalone function. for (int x=1; x<=2; ++x) { return v.x; } } half4 main() { half4 v = testInputs; v = v.rgba; v = v.rgb0.abgr; v = v.rgba.00ra; v = v.rgba.rrra.00ra.11ab; v = v.abga.gb11; v = v.abgr.abgr; v = half4(v.rrrr.bb, 1, 1); v = half4(v.ba.grgr); // The swizzle will not be optimized away to avoid eliminating fn(). v = half3(fn(v), 123, 456).yyzz; v = half3(fn(v), half2(123, 456)).yyzz; // The swizzle will be optimized away because fn() can be reordered. v = half3(fn(v), 123, 456).yzzx; v = half3(fn(v), half2(123, 456)).yzzx; // The swizzle will not be optimized away to avoid duplicating fn(). v = half3(fn(v), 123, 456).yxxz; v = half3(fn(v), half2(123, 456)).yxxz; // Swizzled constants. v = half4(1, 2, 3, 4).xxyz; // Swizzled uniforms mixed with constants. v = half4(1, colorRed.rgb).yzwx; v = half4(1, colorRed.rgb).yxzw; // Left-side swizzles. v.rgba = v; v.abgr = v; v.rgba.ra = v.gb; v.abgr.gba = v.aa1; return v == half4(1) ? colorGreen : colorRed; }