iOS Metal 执行顶点函数的设备存储无效"myFunction" 编码器:绘制:偏移:
iOS Metal Invalid device store executing vertex function "myFunction" encoder: draw: offset:
我有一个使用 Metal 渲染的项目,当我将一个金属缓冲区传递给着色器函数时它工作正常。但是,当我传递不同的缓冲区时,出现以下错误:
(IOAF code 11)
with "Shader validation enabled" scheme diagnostic flag:
Invalid device store executing vertex function "myFunction" encoder: draw: offset:
两个缓冲区都使用相同的函数进行初始化。持有缓冲区的第一个对象的生命周期比第二个长得多。
错误是由持有缓冲区的对象被释放引起的吗?
/// Initializes the buffer with zeros, the buffer is given an appropriate length based on the provided element count.
init(device: MTLDevice, count: Int, index: UInt32, label: String? = nil, options: MTLResourceOptions = []) {
guard let buffer = device.makeBuffer(length: MemoryLayout<Element>.stride * count, options: options) else {
fatalError("Failed to create MTLBuffer.")
}
self.buffer = buffer
self.buffer.label = label
self.count = count
self.index = Int(index)
}
//usage:
renderEncoder.setVertexBuffer(/*one of two buffers*/)
此问题是由于着色器函数试图在错误的索引处写入其计算的输出而引起的。 只要着色器引用从 0 到计数的缓冲区,任何缓冲区都可以正常工作。错误是由于着色器尝试使用错误的索引引用缓冲区,并退出缓冲区的范围。
我有一个使用 Metal 渲染的项目,当我将一个金属缓冲区传递给着色器函数时它工作正常。但是,当我传递不同的缓冲区时,出现以下错误:
(IOAF code 11)
with "Shader validation enabled" scheme diagnostic flag:
Invalid device store executing vertex function "myFunction" encoder: draw: offset:
两个缓冲区都使用相同的函数进行初始化。持有缓冲区的第一个对象的生命周期比第二个长得多。
错误是由持有缓冲区的对象被释放引起的吗?
/// Initializes the buffer with zeros, the buffer is given an appropriate length based on the provided element count.
init(device: MTLDevice, count: Int, index: UInt32, label: String? = nil, options: MTLResourceOptions = []) {
guard let buffer = device.makeBuffer(length: MemoryLayout<Element>.stride * count, options: options) else {
fatalError("Failed to create MTLBuffer.")
}
self.buffer = buffer
self.buffer.label = label
self.count = count
self.index = Int(index)
}
//usage:
renderEncoder.setVertexBuffer(/*one of two buffers*/)
此问题是由于着色器函数试图在错误的索引处写入其计算的输出而引起的。 只要着色器引用从 0 到计数的缓冲区,任何缓冲区都可以正常工作。错误是由于着色器尝试使用错误的索引引用缓冲区,并退出缓冲区的范围。