Graphics 在directx中,如果重用插槽,gpu是否会在其内存中保留以前的资源?还可以安全地更改原始处理器资源吗?

Graphics 在directx中,如果重用插槽,gpu是否会在其内存中保留以前的资源?还可以安全地更改原始处理器资源吗?,graphics,directx,gpu,directx-11,Graphics,Directx,Gpu,Directx 11,我在写关于directx的文章,下面的问题是其中的一部分,但我意识到我需要把它们分开 如果某个东西不在GPU上的“插槽”(寄存器)中,它是否必须重新传输到GPU以再次使用,即如果将纹理a放入寄存器t0,然后将纹理B放入寄存器t0,纹理t0是否不再在GPU上可用?或者它仍然驻留在GPU内存中,但我必须调用将其加载到纹理寄存器中才能获取它?或者完全是别的什么 以类似的方式调用PSSetShaders、PSSetShaderResource或IASetVertexBuffers等。。。。在返回之前阻止

我在写关于directx的文章,下面的问题是其中的一部分,但我意识到我需要把它们分开

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

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

我想这不仅仅是一个问题,但我想如果我在一天内问太多directx问题,我会遇到麻烦的(我认为这些问题都是非常体面的问题,msdn文档对此保持沉默,即使它们都是新手问题)。

如果在regsiter t0中添加纹理A,然后稍后将纹理B放入寄存器t0中,纹理t0是否不再在GPU上可用

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

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

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

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

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