1

在 D3D10 中,我将暂存纹理加载到我的 GPU 内存中,然后对其进行映射,以便在 CPU 上访问其纹理数据。这是在一个单独的线程上完成的,而不是我渲染的线程。我只是调用设备方法,它可以工作。

在 D3D11 中,我将暂存纹理加载到我的 GPU 上,但要访问它(即映射它),我需要使用上下文,而不是设备。不能使用即时上下文,因为即时上下文一次只能由单个线程使用。但我也不能使用延迟上下文从纹理读取到 CPU:

“如果在延迟上下文中调用 Map,则只能将 D3D11_MAP_WRITE_DISCARD、D3D11_MAP_WRITE_NO_OVERWRITE 或两者都传递给 MapType 参数。延迟上下文不支持其他 D3D11_MAP 类型的值。”

http://msdn.microsoft.com/en-us/library/ff476457.aspx

好的,那我现在该怎么办?使用纹理来存储某些数据(例如高度图)是很常见的,显然您必须能够访问该数据才能使其有用。我没有办法在 D3D11 的单独线程中执行此操作吗?

4

1 回答 1

0

您应该使用渲染线程上的直接上下文映射暂存纹理,然后在第二个线程上使用您希望的内容。即使在 D3D10 中,映射纹理以供读取的调用最终也会在命令缓冲区中放置一个同步点(请参阅本文),从而有效地序列化您的线程。D3D11 API 努力阻止像这样隐藏的性能成本。

于 2014-01-28T23:09:24.777 回答