SPIRV-Cross/reference/opt/shaders-msl/asm/comp/quantize.asm.comp
Bill Hollings 5742047b24 MSL: Honor infinities in OpQuantizeToF16 when compiling using fast-math.
Add spvQuantizeToF16() family of synthetic functions to convert
from float to half and back again, and add function attribute
[[clang::optnone]] to honor infinities during conversions.

Adjust SPIRV-Cross unit test reference shaders to accommodate these changes.
2021-09-24 11:22:05 -04:00

44 lines
842 B
Plaintext

#pragma clang diagnostic ignored "-Wmissing-prototypes"
#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
struct SSBO0
{
float scalar;
float2 vec2_val;
float3 vec3_val;
float4 vec4_val;
};
[[clang::optnone]] float spvQuantizeToF16(float val)
{
return float(half(val));
}
[[clang::optnone]] float2 spvQuantize2ToF16(float2 val)
{
return float2(half2(val));
}
[[clang::optnone]] float3 spvQuantize3ToF16(float3 val)
{
return float3(half3(val));
}
[[clang::optnone]] float4 spvQuantize4ToF16(float4 val)
{
return float4(half4(val));
}
kernel void main0(device SSBO0& _4 [[buffer(0)]])
{
_4.scalar = spvQuantizeToF16(_4.scalar);
_4.vec2_val = spvQuantize2ToF16(_4.vec2_val);
_4.vec3_val = spvQuantize3ToF16(_4.vec3_val);
_4.vec4_val = spvQuantize4ToF16(_4.vec4_val);
}