4

我知道这在技术上是不受支持的(据我所知,这是未定义的行为),但是从也被写入的纹理中采样真的是一件非常可怕的事情吗?

我问是因为我需要从我还需要写入的深度纹理中读取,如果我不能这样做,这意味着我将不得不复制深度纹理,如果这不是什么大不了的事,我不会没有看到简单地复制它的危害吗?

谢谢你的帮助!

4

2 回答 2

3

是的,它是致命的并且会触发未定义的行为。只需制作一个副本并从副本中读取。

解释很简单。由于片段以未指定的顺序并行处理,您可能正在从已写入的纹素或原始值纹素中读取,并且无法知道您正在阅读什么。复制并从中读取可确保您读取正确的值。

于 2010-11-01T03:29:25.217 回答
2

Matias 和 Goz 涵盖了最重要的部分。让我补充几个有趣的事实:

  • 当您将其底层资源绑定为渲染目标时,Direct3D 运行时会主动取消绑定纹理(因此您无法在此处创建循环)。
  • Direct3D 11 中的 UAV 实际上允许对格式子集(不需要类型转换的格式)进行读-修改-写操作。但是,它们不保证任何操作顺序。这是许多执行与订单无关的透明度的算法所使用的,特别是(重新排序是手动完成的)。
于 2010-11-02T12:24:15.127 回答