2020-09-16 17:40:35 +00:00
|
|
|
|
|
|
|
out vec4 sk_FragColor;
|
Optimize swizzled multiple-argument constructors.
This will reorder constructors with swizzles applied, such as
`half4(1, 2, 3, 4).xxyz` --> `half4(1, 1, 2, 3)`
`half4(1, colRGB).yzwx` --> `half4(colRGB.x, colRGB.y, colRGB.z, 1)`
Note that, depending on the swizzle components, some elements of the
constructor may be duplicated and others may be eliminated. The
optimizer makes sure to leave the swizzle alone if it would duplicate
anything non-trivial, or if it would eliminate anything with a side
effect.
Change-Id: I470fda217ae8cf5828406b89a5696ca6aebf608d
Bug: skia:10954
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/335860
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-11-19 16:06:47 +00:00
|
|
|
float fn(float v) {
|
|
|
|
switch (int(v)) {
|
|
|
|
case 1:
|
|
|
|
return 2.0;
|
|
|
|
default:
|
|
|
|
return 3.0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
layout (set = 0) uniform vec3 colRGB;
|
2020-09-16 17:40:35 +00:00
|
|
|
void main() {
|
|
|
|
float v = sqrt(1.0);
|
|
|
|
sk_FragColor = vec4(v);
|
2020-11-19 21:25:49 +00:00
|
|
|
sk_FragColor = vec4(0.0, vec3(v));
|
|
|
|
sk_FragColor = vec4(0.0, 0.0, vec2(v));
|
|
|
|
sk_FragColor = vec4(1.0, 1.0, vec2(v));
|
|
|
|
sk_FragColor = vec4(vec2(v), 1.0, 1.0);
|
2020-11-18 16:10:38 +00:00
|
|
|
sk_FragColor = vec4(v);
|
|
|
|
sk_FragColor = vec4(vec2(v), 1.0, 1.0);
|
2020-09-16 17:40:35 +00:00
|
|
|
sk_FragColor = vec4(v);
|
Optimize swizzled multiple-argument constructors.
This will reorder constructors with swizzles applied, such as
`half4(1, 2, 3, 4).xxyz` --> `half4(1, 1, 2, 3)`
`half4(1, colRGB).yzwx` --> `half4(colRGB.x, colRGB.y, colRGB.z, 1)`
Note that, depending on the swizzle components, some elements of the
constructor may be duplicated and others may be eliminated. The
optimizer makes sure to leave the swizzle alone if it would duplicate
anything non-trivial, or if it would eliminate anything with a side
effect.
Change-Id: I470fda217ae8cf5828406b89a5696ca6aebf608d
Bug: skia:10954
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/335860
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-11-19 16:06:47 +00:00
|
|
|
sk_FragColor = vec3(fn(v), 123.0, 456.0).yyzz;
|
Flatten out constructors nested inside constructors.
- float4(float2(1, 2), 3, 4) --> float4(1, 2, 3, 4)
- half3(z, half2(fn(x), y*2)) --> half3(z, fn(x), y*2)
Single-argument constructors will be ignored by this optimization; these
might be casts or splats.
This had an unexpected side benefit of simplifying some Metal output,
as we need to output fewer Metal matrix construction helper functions
when matrices use more simple scalars for construction.
Change-Id: I0a161db060c107e35247901619291bf83801cb11
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/337400
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
2020-11-22 04:26:07 +00:00
|
|
|
sk_FragColor = vec3(fn(v), 123.0, 456.0).yyzz;
|
|
|
|
sk_FragColor = vec4(123.0, 456.0, 456.0, fn(v));
|
Optimize swizzled multiple-argument constructors.
This will reorder constructors with swizzles applied, such as
`half4(1, 2, 3, 4).xxyz` --> `half4(1, 1, 2, 3)`
`half4(1, colRGB).yzwx` --> `half4(colRGB.x, colRGB.y, colRGB.z, 1)`
Note that, depending on the swizzle components, some elements of the
constructor may be duplicated and others may be eliminated. The
optimizer makes sure to leave the swizzle alone if it would duplicate
anything non-trivial, or if it would eliminate anything with a side
effect.
Change-Id: I470fda217ae8cf5828406b89a5696ca6aebf608d
Bug: skia:10954
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/335860
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-11-19 16:06:47 +00:00
|
|
|
sk_FragColor = vec4(123.0, 456.0, 456.0, fn(v));
|
|
|
|
sk_FragColor = vec3(fn(v), 123.0, 456.0).yxxz;
|
Flatten out constructors nested inside constructors.
- float4(float2(1, 2), 3, 4) --> float4(1, 2, 3, 4)
- half3(z, half2(fn(x), y*2)) --> half3(z, fn(x), y*2)
Single-argument constructors will be ignored by this optimization; these
might be casts or splats.
This had an unexpected side benefit of simplifying some Metal output,
as we need to output fewer Metal matrix construction helper functions
when matrices use more simple scalars for construction.
Change-Id: I0a161db060c107e35247901619291bf83801cb11
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/337400
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
2020-11-22 04:26:07 +00:00
|
|
|
sk_FragColor = vec3(fn(v), 123.0, 456.0).yxxz;
|
Optimize swizzled multiple-argument constructors.
This will reorder constructors with swizzles applied, such as
`half4(1, 2, 3, 4).xxyz` --> `half4(1, 1, 2, 3)`
`half4(1, colRGB).yzwx` --> `half4(colRGB.x, colRGB.y, colRGB.z, 1)`
Note that, depending on the swizzle components, some elements of the
constructor may be duplicated and others may be eliminated. The
optimizer makes sure to leave the swizzle alone if it would duplicate
anything non-trivial, or if it would eliminate anything with a side
effect.
Change-Id: I470fda217ae8cf5828406b89a5696ca6aebf608d
Bug: skia:10954
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/335860
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-11-19 16:06:47 +00:00
|
|
|
sk_FragColor = vec4(1.0, 1.0, 2.0, 3.0);
|
Merge `foo.x, foo.y, foo.z` into `foo.xyz` when optimizing swizzles.
When values from the same argument are used consecutively by the outer
swizzle, they can be merged in the inner swizzle. Merging isn't always
possible, of course, but it will be used where it can be:
`half4(1, colRGB).yzwx` --> `half4(colRGB.xyz, 1)`
`half4(1, colRGB).yxzw` --> `half4(colRGB.x, 1, colRGB.yz)`
Change-Id: Id164b046bc15022ded331c06d722f1ae3605a3bd
Bug: skia:10954
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/335872
Commit-Queue: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-11-19 17:18:36 +00:00
|
|
|
sk_FragColor = vec4(colRGB, 1.0);
|
|
|
|
sk_FragColor = vec4(colRGB.x, 1.0, colRGB.yz);
|
2020-09-28 18:03:25 +00:00
|
|
|
sk_FragColor.xyzw = sk_FragColor;
|
|
|
|
sk_FragColor.wzyx = sk_FragColor;
|
|
|
|
sk_FragColor.xyzw.xw = sk_FragColor.yz;
|
|
|
|
sk_FragColor.wzyx.yzw = vec3(sk_FragColor.ww, 1.0);
|
2020-09-16 17:40:35 +00:00
|
|
|
}
|