| 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(float2 coords) { |
| 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; |
| } |