Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/KhronosGroup/SPIRV-Cross.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBill Hollings <bill.hollings@brenwill.com>2021-09-24 21:41:15 +0300
committerBill Hollings <bill.hollings@brenwill.com>2021-09-24 21:41:15 +0300
commita2671e35b07474cdf87fc9a695c07f33f6e06e38 (patch)
treec2a0098a5c469965fe20447bb8711147a9fc865c /reference/opt/shaders-msl
parent5742047b244fb4ad2163ae46104b29dfab64c0f7 (diff)
MSL: Consolidate spvQuantizeToF16() functions into a single template function.
Adjust SPIRV-Cross unit test reference shaders to accommodate these changes.
Diffstat (limited to 'reference/opt/shaders-msl')
-rw-r--r--reference/opt/shaders-msl/asm/comp/quantize.asm.comp31
1 files changed, 11 insertions, 20 deletions
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 <typename F> struct SpvHalfTypeSelector;
+template <> struct SpvHalfTypeSelector<float> { public: using H = half; };
+template <> struct SpvHalfTypeSelector<float2> { public: using H = half2; };
+template <> struct SpvHalfTypeSelector<float3> { public: using H = half3; };
+template <> struct SpvHalfTypeSelector<float4> { public: using H = half4; };
+template<typename F, typename H = typename SpvHalfTypeSelector<F>::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);
}