1#include <metal_stdlib> 2#include <simd/simd.h> 3#ifdef __clang__ 4#pragma clang diagnostic ignored "-Wall" 5#endif 6using namespace metal; 7struct Uniforms { 8 half4 colorGreen; 9 half4 colorRed; 10 half4 testInputs; 11}; 12struct Inputs { 13}; 14struct Outputs { 15 half4 sk_FragColor [[color(0)]]; 16}; 17 18thread bool operator==(const half2x2 left, const half2x2 right); 19thread bool operator!=(const half2x2 left, const half2x2 right); 20 21thread bool operator==(const float2x2 left, const float2x2 right); 22thread bool operator!=(const float2x2 left, const float2x2 right); 23thread bool operator==(const half2x2 left, const half2x2 right) { 24 return all(left[0] == right[0]) && 25 all(left[1] == right[1]); 26} 27thread bool operator!=(const half2x2 left, const half2x2 right) { 28 return !(left == right); 29} 30half2x2 half2x2_from_half4(half4 x0) { 31 return half2x2(half2(x0.xy), half2(x0.zw)); 32} 33thread bool operator==(const float2x2 left, const float2x2 right) { 34 return all(left[0] == right[0]) && 35 all(left[1] == right[1]); 36} 37thread bool operator!=(const float2x2 left, const float2x2 right) { 38 return !(left == right); 39} 40float2x2 float2x2_from_float4(float4 x0) { 41 return float2x2(float2(x0.xy), float2(x0.zw)); 42} 43fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) { 44 Outputs _out; 45 (void)_out; 46 bool ok = true; 47 ok = ok && half2x2_from_half4(_uniforms.testInputs) == half2x2(half2(-1.25h, 0.0h), half2(0.75h, 2.25h)); 48 ok = ok && float2x2_from_float4(float4(_uniforms.testInputs)) == float2x2(float2(-1.25, 0.0), float2(0.75, 2.25)); 49 ok = ok && half2x2_from_half4(_uniforms.colorGreen) == half2x2(half2(0.0h, 1.0h), half2(0.0h, 1.0h)); 50 ok = ok && half2x2_from_half4(_uniforms.colorGreen) == half2x2(half2(0.0h, 1.0h), half2(0.0h, 1.0h)); 51 ok = ok && half2x2_from_half4(half4(int4(_uniforms.colorGreen))) == half2x2(half2(0.0h, 1.0h), half2(0.0h, 1.0h)); 52 ok = ok && half2x2_from_half4(_uniforms.colorGreen) == half2x2(half2(0.0h, 1.0h), half2(0.0h, 1.0h)); 53 ok = ok && half2x2_from_half4(_uniforms.colorGreen) == half2x2(half2(0.0h, 1.0h), half2(0.0h, 1.0h)); 54 ok = ok && half2x2_from_half4(half4(bool4(_uniforms.colorGreen))) == half2x2(half2(0.0h, 1.0h), half2(0.0h, 1.0h)); 55 ok = ok && half2x2_from_half4(_uniforms.colorGreen - _uniforms.colorRed) == half2x2(half2(-1.0h, 1.0h), half2(0.0h, 0.0h)); 56 ok = ok && half2x2_from_half4(_uniforms.colorGreen + 5.0h) == half2x2(half2(5.0h, 6.0h), half2(5.0h, 6.0h)); 57 _out.sk_FragColor = ok ? _uniforms.colorGreen : _uniforms.colorRed; 58 return _out; 59} 60