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:
authorHans-Kristian Arntzen <post@arntzen-software.no>2021-09-27 14:09:33 +0300
committerGitHub <noreply@github.com>2021-09-27 14:09:33 +0300
commitdee35bf3cef8efa9bd903582a4b564f612dfa3ba (patch)
tree2b135883f6b4384222dbfd28fe7bc2c9b5f03beb /reference/opt/shaders-msl
parent05ac99ae2310bbfbbc3e28895dbc3159e4f5033d (diff)
parentba66a914020c2b00a353c23e495159a172cb965f (diff)
Merge pull request #1749 from billhollings/fastmath-quantize
MSL: Honor infinities in OpQuantizeToF16 when compiling using fast-math.
Diffstat (limited to 'reference/opt/shaders-msl')
-rw-r--r--reference/opt/shaders-msl/asm/comp/quantize.asm.comp19
1 files changed, 15 insertions, 4 deletions
diff --git a/reference/opt/shaders-msl/asm/comp/quantize.asm.comp b/reference/opt/shaders-msl/asm/comp/quantize.asm.comp
index 1839ec7a..b7e6f919 100644
--- a/reference/opt/shaders-msl/asm/comp/quantize.asm.comp
+++ b/reference/opt/shaders-msl/asm/comp/quantize.asm.comp
@@ -1,3 +1,5 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
#include <metal_stdlib>
#include <simd/simd.h>
@@ -11,11 +13,20 @@ struct SSBO0
float4 vec4_val;
};
+template <typename F> struct SpvHalfTypeSelector;
+template <> struct SpvHalfTypeSelector<float> { public: using H = half; };
+template<uint N> struct SpvHalfTypeSelector<vec<float, N>> { using H = vec<half, N>; };
+template<typename F, typename H = typename SpvHalfTypeSelector<F>::H>
+[[clang::optnone]] F spvQuantizeToF16(F val)
+{
+ return F(H(val));
+}
+
kernel void main0(device SSBO0& _4 [[buffer(0)]])
{
- _4.scalar = float(half(_4.scalar));
- _4.vec2_val = float2(half2(_4.vec2_val));
- _4.vec3_val = float3(half3(_4.vec3_val));
- _4.vec4_val = float4(half4(_4.vec4_val));
+ _4.scalar = spvQuantizeToF16(_4.scalar);
+ _4.vec2_val = spvQuantizeToF16(_4.vec2_val);
+ _4.vec3_val = spvQuantizeToF16(_4.vec3_val);
+ _4.vec4_val = spvQuantizeToF16(_4.vec4_val);
}