我一直在研究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. Constant Buffer DirectX 11
- 4. Directx 11 2D ortho
- 5. directX 11 scale texture2D
- 6. 在DirectX 11
- 7. DirectX 11和FreeType
- 8. 內存管理
- 9. 內存管理
- 10. 內存管理
- 11. 內存管理
- 12. 內存管理
- 13. 內存管理
- 14. 內存管理
- 15. 內存管理
- 16. 內存管理
- 17. SlimDX和WPF(DirectX 11)
- 18. DirectX 11上的NURBS?
- 19. Directx 11 Bitblt備選
- 20. CoreData內存管理
- 21. NSMutableArray - 內存管理
- 22. mips內存管理
- 23. iPhone內存管理
- 24. iPhone內存管理
- 25. HttpClient內存管理
- 26. Windows內存管理
- 27. OSGi內存管理
- 28. MVC3內存管理
- 29. MSXML內存管理
- 30. Firefox內存管理