skia2/resources/sksl/shared/SwizzleOpt.sksl

49 lines
1.2 KiB
Plaintext
Raw Normal View History

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;
}