簡體   English   中英

Directx 11內存管理

[英]Directx 11 Memory Management

我一直在研究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用緩沖區做什么(復制/設置?)。

一般的答案是“它就是司機想要的地方”。 對於“DYNAMIC”資源,它們通常被放入CPU和GPU都可訪問的內存中(在現代PC上,這是通過PCIe總線共享的)。 對於“STATIC”資源,它們可以位於只能通過“共享”存儲器窗口復制的GPU可訪問的視頻RAM上,或者如果空間有限,則將它們放入“共享”存儲器窗口。 渲染目標通常也放在視頻RAM中。

有關Direct3D視頻內存管理的更深入了解,請查看“為什么您的Windows游戲無法在2,147,352,576中運行?” 它不再在MSDN下載中,但可以在我的博客上找到。

如果您需要詳細的硬件詳細信息,請閱讀驅動程序編寫者的文檔

您還可以在MSDN代碼庫教育中找到視頻內存示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM