我正在用 float2 向量填充 MTLBuffer。缓冲区正在创建和填充,如下所示:
struct Particle {
var position: float2
...
}
let particleCount = 100000
let bufferSize = MemoryLayout<Particle>.stride * particleCount
particleBuffer = device.makeBuffer(length: bufferSize)!
var pointer = particleBuffer.contents().bindMemory(to: Particle.self, capacity: particleCount)
pointer = pointer.advanced(by: currentParticles)
pointer.pointee.position = [x, y]
在我的 Metal 文件中,缓冲区的访问方式如下:
struct Particle {
float2 position;
...
};
kernel void compute(device Particle *particles [[buffer(0)]], … )
我需要在我的 Metal 计算内核中使用半精度浮点数。在 Metal 方面,只需为数据类型指定 half2 即可。
在 CPU 方面,用半精度浮点数填充缓冲区的最佳方法是什么?