fde20db7ca
Note that the 2D cross product isn't defined. There are at least two possible interpretations of what that might mean. This name makes it clearer that we're asking for the length of the resulting vector, if we computed the 3D cross product (assuming Z == 0 for both vectors). It also eliminates name overlap between builtin functions and actual intrinsics. Change-Id: I24e8bc0ab2ec91aaace20f0dd3e8565c10bd44a0 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/484440 Reviewed-by: John Stiles <johnstiles@google.com> Commit-Queue: Brian Osman <brianosman@google.com>
28 lines
776 B
Metal
28 lines
776 B
Metal
#include <metal_stdlib>
|
|
#include <simd/simd.h>
|
|
using namespace metal;
|
|
struct Uniforms {
|
|
half2 ah;
|
|
half2 bh;
|
|
float2 af;
|
|
float2 bf;
|
|
};
|
|
struct Inputs {
|
|
};
|
|
struct Outputs {
|
|
half4 sk_FragColor [[color(0)]];
|
|
};
|
|
half cross_length_2d_hh2h2(half2 a, half2 b) {
|
|
return a.x * b.y - a.y * b.x;
|
|
}
|
|
float cross_length_2d_ff2f2(float2 a, float2 b) {
|
|
return a.x * b.y - a.y * b.x;
|
|
}
|
|
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
|
Outputs _out;
|
|
(void)_out;
|
|
_out.sk_FragColor.x = cross_length_2d_hh2h2(_uniforms.ah, _uniforms.bh);
|
|
_out.sk_FragColor.y = half(cross_length_2d_ff2f2(_uniforms.af, _uniforms.bf));
|
|
return _out;
|
|
}
|