[英]How does Metal Shader Language's (MSL) atomic_uint bridge to Swift?
在我的 Swift iOS 金属应用程序中,我想要一个金属着色语言 (MSL) kernel,如下所示:
kernel void someKernel(device atomic_uint &counter [[buffer(0)]], ...)
{
...
}
我有两个问题:
感谢您的帮助
要回答您最初的问题:
atomic_uint
映射到 Swift 中的UInt32
类型。MemoryLayout<UInt32>.stride
来分配。 并且补充一点:原子在 CPU 和 GPU 之间不会是原子的。 意思是,您不能在 CPU 上原子地更改 memory 并在 GPU 上原子地查看此更改,反之亦然。 所以最后,这就是它只映射到UInt32
的原因。 为确保 CPU 看到 GPU 更改,您需要通过添加完成处理程序或通过在MTLSharedEvent
时间轴上发出 MTLSharedEvent 信号并在 CPU 代码中为该事件创建侦听器来等待缓冲区完成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.