2

我正在写这个关于directx的问题,以下问题是其中的一部分,但我意识到我需要将它们分开。

如果某些东西不在 GPU 上的“槽”(寄存器)中,是否必须将其重新传输到 GPU 才能再次使用,即如果将纹理 A 放入寄存器 t0,然后将纹理 B 放入寄存器 t0,是纹理 t0 在 GPU 上不再可用?还是它仍然驻留在 GPU 内存中,但我必须调用以将其加载到纹理寄存器中才能获取它?还是完全不同的东西?

以类似的方式调用 PSSetShaders、PSSetShaderResource 或 IASetVertexBuffers 等......在返回之前将数据阻塞并复制到 GPU,因此在调用之后可以更改甚至释放它们所基于的资源,因为它现在是驻留在 GPU 上?

我想这不仅仅是一个问题,但我希望如果我尝试在一天内提出太多 directx 问题,我会遇到麻烦(我认为这些确实是体面的问题,msdn 文档对此保持沉默,即使它们是所有新手问题)。

4

1 回答 1

2

如果将纹理 A 放入寄存器 t0,然后将纹理 B 放入寄存器 t0,GPU 上是否不再提供纹理 t0?

它不再绑定到纹理寄存器,因此不会应用于任何多边形。您必须再次将其绑定到纹理寄存器才能使用它。

还是它仍然驻留在 GPU 内存中,但我必须调用以将其加载到纹理寄存器中才能获取它?

通常,它们将保留在视频内存中,直到加载了足够的其他资源以使其需要回收内存。这在 DirectX 9 中更为明显,因为您必须指定将资源放置在哪个内存池中。现在一切都有效地在 Direct3D 9 中的 D3DPOOL_MANAGED 内存池中。当您将纹理寄存器设置为使用纹理时,它将很快只要纹理仍在视频内存中。

以类似的方式调用 PSSetShaders、PSSetShaderResource 或 IASetVertexBuffers 等......在返回之前将数据阻塞并复制到 GPU,因此在调用之后可以更改甚至释放它们所基于的资源,因为它现在是驻留在 GPU 上?

DirectX 为您管理资源,并尽可能长时间地将它们保存在视频内存中。

于 2011-06-21T23:30:28.933 回答