ID3D12Device::MakeResident 方法 (d3d12.h)
讓裝置的物件成為駐留物件。
語法
HRESULT MakeResident(
UINT NumObjects,
[in] ID3D12Pageable * const *ppObjects
);
參數
NumObjects
類型: UINT
要讓裝置駐留的 ppObjects 陣列中物件數目。
[in] ppObjects
類型: ID3D12Pageable*
記憶體區塊的指標,其中包含 物件的 ID3D12Pageable 介面指標數位列。
即使大部分的 D3D12 對象繼承自 ID3D12Pageable,但只有下列物件才支援落地變更:描述元堆積、堆積、認可資源及查詢堆積
傳回值
類型: HRESULT
這個方法會傳回其中一個 Direct3D 12 傳回碼。
備註
MakeResident 會從磁碟載入與資源相關聯的數據,並從資源的適當記憶體集區重新配置記憶體。 這個方法應該在擁有實體記憶體的物件上呼叫。
使用此方法和 收回來管理 GPU 視訊記憶體,指出這已在 D3D11 中自動完成,但現在必須由 D3D12 中的應用程式完成。
MakeResident 和 Evict 可協助應用程式管理許多適配卡上的落地預算。 MakeResident 會明確分頁數據,然後排除頁面輸出,讓 GPU 可以存取數據。 收回 會啟用分頁。
由於缺乏足夠的 GPU 虛擬位址空間,某些 GPU 架構無法受益於落地操作。 使用 D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT 和 IDXGIAdapter3::QueryVideoMemoryInfo 來辨識每個進程的最大 GPU VA 空間太小或大致上與落地預算大小相同。 對於這類架構,落地預算一律受限於 GPU 虛擬位址空間的數量。 收回 不會釋出這類系統上的任何落地預算。
應用程式必須處理 MakeResident 失敗,即使有足夠的落地預算可用也一樣。 實體記憶體片段和配接器架構Quirk 可排除大型連續範圍的使用率。 應用程式應該先釋出更多落地預算,然後再試一次。
MakeResident 是 ref 計數,因此在收回生效之前,必須呼叫與 MakeResident 相同的次數。 支援落地的物件會在建立期間進行駐留,因此單一 收回 呼叫實際上會收回物件。
應用程式必須使用柵欄,以確保 GPU 不會使用非駐留物件。 MakeResident 必須在 GPU 執行參考物件的命令清單之前傳回。 在 GPU 完成執行參考物件的命令清單之後,必須呼叫收回。
收回的物件仍會取用相同的 GPU 虛擬位址和相同數量的 GPU 虛擬位址空間。 因此, 收回之後,資源描述元和其他 GPU 虛擬地址參考不會失效。
規格需求
需求 | 值 |
---|---|
目標平台 | Windows |
標頭 | d3d12.h |
程式庫 | D3D12.lib |
Dll | D3D12.dll |