2013-09-27 110 views
0

我對Direct3D11(這裏包括堆棧溢出!)一直在閱讀了很多,在我所有的研究,我一直無法確鑿地回答這個問題:Direct3D11在哪裏分配資源對象?

當資源對象(即緩衝區或者一個Texture對象),例如用pDevice-> CreateBuffer()創建,它存儲在哪裏?在系統RAM上還是在GPU的視頻RAM上?還是我完全誤解了Resource對象的基本性質?

很顯然,無論您將何處填充資源(比如頂點和索引數組)都存儲在哪裏 - 程序員 - 將其放置在其中,但是一旦將該數據映射到資源的複製位置? (我假設,因爲資源必須被映射並且未被映射以用於讀/寫保護,所以映射的數據實際上被複制,可能被複制到VRAM)。而且,Resource對象本身在哪裏實例化?

在此先感謝您的幫助!

+0

事實上,你不知道也找不到是DirectX的核心。這使得它可以像使用軟件渲染器而不是GPU來處理事情,例如處理沒有足夠內存的視頻卡。你不想*知道這個問題的答案。抽象實現細節是任何好的API的核心。 –

+0

這是一個很好的觀點,在使用DirectX或任何其他API時,我一定會牢記這一點。謝謝!當然,這個問題與純粹的學術問題一樣,當然是:) –

回答

1

創建資源時,您的Create *調用會經過D3D運行時UMD(用戶模式圖形驅動程序)& KMD(內核模式)。 KMD負責頁表管理(它可以在共享虛擬內存的情況下與操作系統交談,但我們可以忽略它)。如果你的資源沒有使用SVM,那麼它會傳遞給圖形內存。

處理器圖形(如Intel Iris)的圖形內存是您的系統RAM。所以,它只是從應用程序虛擬地址空間到KMD的副本。

對於獨立顯卡,數據駐留在卡的視頻RAM中。 GPU只能與視頻RAM中的數據一起工作。 (我不確定共享虛擬內存如何適用於獨立顯卡)

+0

這是非常有意義的,這也是我懷疑的 - 但你的明確解釋有助於解決問題。非常感謝你的幫助! –

+0

沒問題。看看http://fgiesen.wordpress.com/2011/07/09/a-trip-through-the-graphics-pipeline-2011-index/ – Raja