【发布时间】:2019-10-30 00:46:29
【问题描述】:
我正在使用 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)]],
uint id [[thread_position_in_grid]] … )
我需要能够计算给定范围的 MTLBuffer。例如,是否可以从 50,000 值开始到 75,000 值结束运行计算内核?
好像 offset 参数可以让我指定起始位置,但它没有长度参数。
我看到有这个电话:
setBuffers(_:offsets:range:)
范围是否指定要运行缓冲区的哪个部分?似乎范围指定了使用的缓冲区,而不是要使用的值的范围。
【问题讨论】: