我试图用参数创建一个内核
device int &errorC [[ buffer(2) ]]
,
并使用
设置缓冲区 [encoder setBytes:&count length:sizeof(int) atIndex: 2];
但是我收到一条错误消息,指出断言Compute Function: Bytes are being bound at index 2 to a shader argument with write access enabled.'
失败
为什么?看来我不应该使用setBytes。但是我该如何设置一个整数,内核才能写回它?
答案 0 :(得分:3)
-setBytes:...
方法只能提供constant
数据,而不能提供可写的device
数据。这种提供数据的方法比提供自己的缓冲区更有效,因为它可能(在后台)不使用可写缓冲区来保存数据。
在其他事情中,如果希望CPU能够读取写入errorC
的值,请注意,使用-setBytes:...
时是没有办法的。没有-getBytes...
方法。
如果希望数据可写,则确实需要使用-setBuffer:offset:atIndex:
方法提供一个缓冲区。