As of macOS Big Sur and iOS/tvOS 14, the `discard_fragment()` function in MSL is defined to have demote semantics; that is, fragment shader output is discarded, but the fragment shader thread continues to run as a helper invocation. This is very useful for Direct3D emulation, since this is the semantic that HLSL `discard` has. Signed-off-by: Chip Davis <chip@holochip.com>