在iOS上读写同一个MTLTexture

3
< p > texture2d access::read_write 限定符似乎只在OSX上可用。 是否有一种方法可以在kernel(或其他)金属功能中读/写相同的纹理?

原因是所写入的纹理值可能不是最终值,并且可以由其他线程更新。


3
可能可以在“device”地址空间中使用缓冲区,结合原子函数来实现,但是有许多注意事项(缓冲区必须为“int”或“uint”类型;弱内存序保证;如果出现争用可能会导致性能下降)。你到底想要做什么? - warrenm
我需要计算笔画宽度,以便可以多次更新单个像素,但只有具有较低值的像素应该被存储(因此我需要读取先前的值)。 - user187676
1个回答

1
感谢 @warrenm 的提示。使用原子缓冲区可以解决问题。
device atomic_uint *buf [[ buffer(0) ]]

执行以下步骤:

  1. 我在操作之前的一个单独的内核函数中初始化原子缓冲区。
  2. 下一个内核使用atomic_fetch_min_explicit(buf[pos], val, memory_order_relaxed)计算特定坐标的最小值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接