f5c1d04ab2
- 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>
43 lines
1.5 KiB
Metal
43 lines
1.5 KiB
Metal
#include <metal_stdlib>
|
|
#include <simd/simd.h>
|
|
using namespace metal;
|
|
struct Inputs {
|
|
};
|
|
struct Outputs {
|
|
float4 sk_FragColor [[color(0)]];
|
|
};
|
|
fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
|
Outputs _outputStruct;
|
|
thread Outputs* _out = &_outputStruct;
|
|
bool4 v = bool4(sqrt(1.0) == 1.0);
|
|
bool4 result;
|
|
result = bool4(v.x, true, true, true);
|
|
result = bool4(v.xy, false, true);
|
|
result = bool4(v.x, true, true, false);
|
|
result = bool4(false, v.y, true, true);
|
|
result = bool4(v.xyz, true);
|
|
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);
|
|
result = v;
|
|
result = bool4(v.xyz, true);
|
|
result = bool4(v.xy, false, v.w);
|
|
result = bool4(v.xy, true, false);
|
|
result = bool4(v.x, true, v.zw);
|
|
result = bool4(v.x, false, v.z, true);
|
|
result = bool4(v.x, true, true, v.w);
|
|
result = bool4(v.x, true, false, true);
|
|
result = bool4(true, v.yzw);
|
|
result = bool4(false, v.yz, true);
|
|
result = bool4(false, v.y, true, v.w);
|
|
result = bool4(true, v.y, true, true);
|
|
result = bool4(false, false, v.zw);
|
|
result = bool4(false, false, v.z, true);
|
|
result = bool4(false, true, true, v.w);
|
|
_out->sk_FragColor = any(result) ? float4(1.0) : float4(0.0);
|
|
return *_out;
|
|
}
|