我一直在研究Directx 11一段時間了,但我仍然對Directx 11如何管理內存感到困惑。例如,如果我使用ID3D11Device :: CreateBuffer創建一個頂點緩衝區,那麼新的緩衝區在哪裏存儲?我知道它返回一個指向緩衝區的指針,這意味着它必須存儲在CPU RAM上嗎?但是,我認爲這會使ID3D11DeviceContext :: IASetVertexBuffers成爲一個非常緩慢的過程,因爲它必須將CPU RAM中的緩衝區複製到GPU RAM中。但是,如果使用ID3D11Device:CreateBuffer創建的所有緩衝區都存儲在GPU RAM中,那麼GPU RAM會不會很快填滿?基本上我想知道:當我創建一個緩衝區時,數據在哪裏存儲?在CPU RAM或GPU RAM中?此外,什麼是ID3D11DeviceContext :: IASetVertexBuffers與緩衝區(複製/設置?)。Directx 11內存管理
5
A
回答
7
一般的答案是「它是駕駛員想要的地方」。對於「DYNAMIC」資源,它們通常放置在CPU和GPU均可訪問的內存中(在現代PC上,這是通過PCIe總線共享的)。對於「靜態」資源,它們可以放在只能通過「共享」存儲器窗口複製的GPU訪問的視頻RAM中,或者如果空間有限,則放入「共享」存儲器窗口中。渲染目標通常也放在視頻RAM中。
想要深入瞭解Direct3D視頻內存管理,請查看「爲什麼Windows遊戲不會在2,147,352,576中運行?」這不再在MSDN下載,但可以在我的blog找到。
如果您需要詳細的硬件詳細信息,請閱讀driver writer's documentation。
您也可以在MSDN代碼庫教育中找到Video Memory示例。
相關問題
- 1. DirectX 11着色器資源管理
- 2. Directx 11寄存器
- 3. DirectX 11內存釋放錯誤
- 4. C++中lambda的內存管理11
- 5. Directx 11紋理映射
- 6. Directx 11 Compatiblilty
- 7. directX 11 scale texture2D
- 8. DirectX 11覆蓋
- 9. Directx 11球體
- 10. DirectX 11和FreeType
- 11. 在DirectX 11
- 12. Directx 11 2D ortho
- 13. Constant Buffer DirectX 11
- 14. 內存管理
- 15. 內存管理
- 16. 內存管理
- 17. 內存管理
- 18. 內存管理
- 19. 內存管理
- 20. 內存管理
- 21. 內存管理
- 22. 內存管理
- 23. 內存管理
- 24. 內存管理
- 25. 內存管理
- 26. 內存管理
- 27. 在directx中渲染多個紋理11
- 28. Directx 11 - 僅部分顯示紋理
- 29. SlimDX和WPF(DirectX 11)
- 30. Directx 11 Bitblt備選