如何在内核函数中将可写整数定义为参数?

时间:2019-07-13 00:42:17

标签: metal

我试图用参数创建一个内核

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。但是我该如何设置一个整数,内核才能写回它?

1 个答案:

答案 0 :(得分:3)

-setBytes:...方法只能提供constant数据,而不能提供可写的device数据。这种提供数据的方法比提供自己的缓冲区更有效,因为它可能(在后台)不使用可写缓冲区来保存数据。

在其他事情中,如果希望CPU能够读取写入errorC的值,请注意,使用-setBytes:...时是没有办法的。没有-getBytes...方法。

如果希望数据可写,则确实需要使用-setBuffer:offset:atIndex:方法提供一个缓冲区。