skia2/tests/sksl/shared/golden/NumberCasts.metal
John Stiles ba4b0e93e3 Add support for number(boolean) and boolean(number) casts in SkSL.
Previously `number(boolean)` casts were converted to a ternary during
IR generation, and `boolean(number)` casts caused an error.

Metal and GLSL should support this cast as written. SPIR-V needed a
little bit of logic to handle converting the boolean to a number via
OpSelect.

Change-Id: I0069781e2b5a26a25c8625ab41c2392342bfd10d
Bug: skia:11131
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/349066
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2021-01-05 21:19:45 +00:00

46 lines
1.0 KiB
Metal

#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
struct Inputs {
};
struct Outputs {
float4 sk_FragColor [[color(0)]];
};
struct Globals {
bool BF;
bool BI;
bool BB;
float FF;
float FI;
float FB;
int IF;
int II;
int IB;
};
fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
Globals globalStruct{true, true, true, 1.2300000190734863, 1.0, 1.0, 1, 1, 1};
thread Globals* _globals = &globalStruct;
(void)_globals;
Outputs _outputStruct;
thread Outputs* _out = &_outputStruct;
_out->sk_FragColor.x = float(_globals->BF);
_out->sk_FragColor.x = float(_globals->BI);
_out->sk_FragColor.x = float(_globals->BB);
_out->sk_FragColor.x = _globals->FF;
_out->sk_FragColor.x = _globals->FI;
_out->sk_FragColor.x = _globals->FB;
_out->sk_FragColor.x = float(_globals->IF);
_out->sk_FragColor.x = float(_globals->II);
_out->sk_FragColor.x = float(_globals->IB);
return *_out;
}