繁体   English   中英

Metal Shader Language (MSL) atomic_uint 如何连接到 Swift?

[英]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)]], ...)
{
    ...
}

我有两个问题:

  1. MSL 的 atomic_uint 如何桥接到 Swift?
  2. memory 中 atomic_uint 的大小是多少,以便我可以决定为 Swift/App 端的 MTLBuffer 保留多少字节?

感谢您的帮助

要回答您最初的问题:

  1. atomic_uint映射到 Swift 中的UInt32类型。
  2. 这将是 4 个字节或MemoryLayout<UInt32>.stride来分配。

并且补充一点:原子在 CPU 和 GPU 之间不会是原子的。 意思是,您不能在 CPU 上原子地更改 memory 并在 GPU 上原子地查看此更改,反之亦然。 所以最后,这就是它只映射到UInt32的原因。 为确保 CPU 看到 GPU 更改,您需要通过添加完成处理程序或通过在MTLSharedEvent时间轴上发出 MTLSharedEvent 信号并在 CPU 代码中为该事件创建侦听器来等待缓冲区完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM