Hi there!
I’m using simd_half3 in both sides: swift SIMD3<Float16>
and Metal half3
but when I want to define a struct in a header file I can’t:
#import <simd/simd.h>
typedef struct {
simd_half3 pos; // ERROR
} Particle;
Any idea?
Thanks in advance
There is no half
in Swift, unfortunately.
I’ve never done it, but you could try something like this: swift - Populating MTLBuffer with 16-bit Floats - Stack Overflow
From last swift version has half
:
https://developer.apple.com/documentation/swift/float16
isn’t it ?
My issue is define a half
type in the header file
Oh my! I didn’t know this or forgot it - thank you!
Oliver on Twitter has the answer:
https://twitter.com/olsibob/status/1294260015491145731?s=20
I quickly tested it by adding a half test
to the Light structure and putting a color in there, and it worked.
In Common.h:
#import <simd/simd.h>
#ifndef __METAL_VERSION__
#import <Foundation/Foundation.h>
#define half float16_t
#endif
typedef struct {
vector_float3 position;
... etc
float coneAttenuation;
half test;
} Light;
In Swift:
light.test = Float16(0.5)
In shader:
return float4(lights[0].test, 0, 0, 1);
(Not available on macOS though)
1 Like
Wow!! super!!! Works fine to me.
Thank you very much @caroline
But… why does not exist a float16x3_t
?!?!? and float16x4_t
yes
Maybe it will appear this WWDC 
2 Likes