2020-09-25 17:35:58 +00:00
|
|
|
#include <metal_stdlib>
|
|
|
|
#include <simd/simd.h>
|
|
|
|
using namespace metal;
|
2021-02-05 14:31:21 +00:00
|
|
|
struct Uniforms {
|
|
|
|
float4 colorGreen;
|
|
|
|
float4 colorRed;
|
|
|
|
};
|
2020-09-25 17:35:58 +00:00
|
|
|
struct Inputs {
|
|
|
|
};
|
|
|
|
struct Outputs {
|
|
|
|
float4 sk_FragColor [[color(0)]];
|
|
|
|
};
|
2021-02-05 14:31:21 +00:00
|
|
|
|
|
|
|
|
|
|
|
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
2021-01-19 18:07:55 +00:00
|
|
|
Outputs _out;
|
2021-01-22 03:24:28 +00:00
|
|
|
(void)_out;
|
2021-02-05 14:31:21 +00:00
|
|
|
bool4 v = bool4(bool(_uniforms.colorGreen.y));
|
2020-09-25 17:35:58 +00:00
|
|
|
bool4 result;
|
|
|
|
result = bool4(v.x, true, true, true);
|
|
|
|
result = bool4(v.xy, false, true);
|
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
|
|
|
result = bool4(v.x, true, true, false);
|
|
|
|
result = bool4(false, v.y, true, true);
|
2020-09-25 17:35:58 +00:00
|
|
|
result = bool4(v.xyz, true);
|
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
|
|
|
result = bool4(v.xy, true, true);
|
|
|
|
result = bool4(v.x, false, v.z, true);
|
|
|
|
result = bool4(v.x, true, false, false);
|
|
|
|
result = bool4(true, v.yz, false);
|
|
|
|
result = bool4(false, v.y, true, false);
|
|
|
|
result = bool4(true, true, v.z, false);
|
2020-09-25 17:35:58 +00:00
|
|
|
result = v;
|
|
|
|
result = bool4(v.xyz, true);
|
2020-11-19 21:25:49 +00:00
|
|
|
result = bool4(v.xy, false, v.w);
|
2020-09-25 17:35:58 +00:00
|
|
|
result = bool4(v.xy, true, false);
|
2020-11-19 21:25:49 +00:00
|
|
|
result = bool4(v.x, true, v.zw);
|
|
|
|
result = bool4(v.x, false, v.z, true);
|
|
|
|
result = bool4(v.x, true, true, v.w);
|
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
|
|
|
result = bool4(v.x, true, false, true);
|
2020-11-19 21:25:49 +00:00
|
|
|
result = bool4(true, v.yzw);
|
|
|
|
result = bool4(false, v.yz, true);
|
|
|
|
result = bool4(false, v.y, true, v.w);
|
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
|
|
|
result = bool4(true, v.y, true, true);
|
2020-11-19 21:25:49 +00:00
|
|
|
result = bool4(false, false, v.zw);
|
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
|
|
|
result = bool4(false, false, v.z, true);
|
|
|
|
result = bool4(false, true, true, v.w);
|
2021-02-05 14:31:21 +00:00
|
|
|
_out.sk_FragColor = any(result) ? _uniforms.colorGreen : _uniforms.colorRed;
|
2021-01-19 18:07:55 +00:00
|
|
|
return _out;
|
2020-09-25 17:35:58 +00:00
|
|
|
}
|