From a2671e35b07474cdf87fc9a695c07f33f6e06e38 Mon Sep 17 00:00:00 2001 From: Bill Hollings Date: Fri, 24 Sep 2021 14:41:15 -0400 Subject: MSL: Consolidate spvQuantizeToF16() functions into a single template function. Adjust SPIRV-Cross unit test reference shaders to accommodate these changes. --- .../opt/shaders-msl/asm/comp/quantize.asm.comp | 31 ++++++++-------------- 1 file changed, 11 insertions(+), 20 deletions(-) (limited to 'reference/opt/shaders-msl') diff --git a/reference/opt/shaders-msl/asm/comp/quantize.asm.comp b/reference/opt/shaders-msl/asm/comp/quantize.asm.comp index 70faec50..81a1a89b 100644 --- a/reference/opt/shaders-msl/asm/comp/quantize.asm.comp +++ b/reference/opt/shaders-msl/asm/comp/quantize.asm.comp @@ -13,31 +13,22 @@ struct SSBO0 float4 vec4_val; }; -[[clang::optnone]] float spvQuantizeToF16(float val) +template struct SpvHalfTypeSelector; +template <> struct SpvHalfTypeSelector { public: using H = half; }; +template <> struct SpvHalfTypeSelector { public: using H = half2; }; +template <> struct SpvHalfTypeSelector { public: using H = half3; }; +template <> struct SpvHalfTypeSelector { public: using H = half4; }; +template::H> +[[clang::optnone]] F spvQuantizeToF16(F 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)); + return F(H(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); + _4.vec2_val = spvQuantizeToF16(_4.vec2_val); + _4.vec3_val = spvQuantizeToF16(_4.vec3_val); + _4.vec4_val = spvQuantizeToF16(_4.vec4_val); } -- cgit v1.2.3