Я заполняю MTLBuffer векторами float2.Буфер создается и заполняется следующим образом:
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]
В моем металлическом файле доступ к буферу осуществляется следующим образом:
struct Particle {
float2 position;
...
};
kernel void compute(device Particle *particles [[buffer(0)]],
uint id [[thread_position_in_grid]] … )
Мне нужно иметь возможность вычислить заданный диапазонMTLBuffer.Например, возможно ли запустить вычислительное ядро, скажем, начиная со значения 50 000 и заканчивая значением 75 000?
Кажется, что параметр смещения позволяет мне указать начальную позицию, но у него нетПараметр длины.
Я вижу, что есть этот вызов:
setBuffers(_:offsets:range:)
Указывает ли диапазон, какую часть буфера запустить?Похоже, диапазон определяет используемые буферы, а не диапазон значений для использования.