У меня есть функция, которой передается необязательный MTLBuffer. Моя цель - итеративно изменять значения в этом буфере, используя индекс в типизированный указатель на тот же буфер. Однако когда я запускаю код, я получаю сообщение об ошибке «Поток 1: EXC_BAD_ACCESS (code = 2, address = 0x1044f1000)».
Правильно ли я преобразовываю в типизированный UnsafeMutablePointer?
Было бы лучше перевести в типизированный UnsafeMutableBufferPointer? Если это так, как мне преобразовать MTLBuffer в типизированный UnsafeMutableBufferPointer?
Любая идея, почему я получаю эту ошибку?
Примечание. Я удалил большинство защитных проверок, чтобы сохранить эту простоту. Я подтвердил, что MTLDevice (через устройство), размещение bufferA, dataPtr и floatPtr не равны нулю. floatPtr и dataPtr указывают на один и тот же адрес памяти.
Вот как я выделяю буфер:
bufferSize = 16384
bufferA = device?.makeBuffer(length: bufferSize, options: MTLResourceOptions.storageModeShared)`
Вот мой код, работающий с буфером:
guard let dataPtr = bufferA?.contents() else {
fatalError("error retrieving buffer?.contents() in generateRandomFloatData()")
}
let floatPtr = dataPtr.bindMemory(to: Float.self, capacity: bufferA!.length)
for index in 0...bufferSize - 1 {
floatPtr[index] = 1.0 // Float.random(in: 0...Float.greatestFiniteMagnitude)
}
Спасибо!