2

私はdirectx についてこの質問を書いていて、次の質問はその一部でしたが、それらを分離する必要があることに気付きました。

何かが GPU の「スロット」(レジスタ) にない場合、再度使用するために GPU に再転送する必要がありますか。つまり、テクスチャ A をレジスタ t0 に入れ、後でテクスチャ B をレジスタ t0 に入れる場合は、次のようになります。テクスチャ t0 は GPU で利用できなくなりましたか? それとも、まだ GPU メモリに常駐していますが、それを取得するにはテクスチャ レジスタにロードする呼び出しを行う必要がありますか? それともまったく別のものですか?

同様に、PSSetShaders、または PSSetShaderResource、または IASetVertexBuffers などへの呼び出しを行います...戻る前にデータをブロックして GPU にコピーします。したがって、呼び出し後に、元のリソースを変更または解放することさえできます。 GPUに常駐?

これは複数の質問だと思いますが、1 日に directx に関する質問をしすぎると問題が発生することが予想されます (これらは、msdn のドキュメントがかなり沈黙している正直な質問だと思います。すべての初心者の質問)。

4

1 に答える 1

2

テクスチャ A をレジスタ t0 に配置し、後でテクスチャ B をレジスタ t0 に配置した場合、テクスチャ t0 は GPU で使用できなくなりますか?

テクスチャ レジスタにバインドされなくなったため、ポリゴンには適用されません。これを使用するには、テクスチャ レジスタに再度バインドする必要があります。

それとも、まだ GPU メモリに常駐していますが、それを取得するにはテクスチャ レジスタにロードする呼び出しを行う必要がありますか?

通常、メモリを再利用する必要がある十分な数の他のリソースが読み込まれるまで、ビデオ メモリに残ります。これは、リソースを配置するメモリ プールを指定する必要がある DirectX 9 でより明白でした。現在、すべてが実質的に Direct3D 9 の D3DPOOL_MANAGED メモリ プールにありました。テクスチャ レジスタをテクスチャを使用するように設定すると、次のように高速になります。テクスチャがまだビデオ メモリにある限り。

同様に、PSSetShaders、または PSSetShaderResource、または IASetVertexBuffers などへの呼び出しを行います...戻る前にデータをブロックして GPU にコピーします。したがって、呼び出し後に、元のリソースを変更または解放することさえできます。 GPUに常駐?

DirectX はリソースを管理し、可能な限りビデオ メモリに保持しようとします。

于 2011-06-21T23:30:28.933 に答える