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 中的應用程式完成。

MakeResidentEvict 可協助應用程式管理許多適配卡上的落地預算。 MakeResident 會明確分頁數據,然後排除頁面輸出,讓 GPU 可以存取數據。 收回 會啟用分頁。

由於缺乏足夠的 GPU 虛擬位址空間,某些 GPU 架構無法受益於落地操作。 使用 D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORTIDXGIAdapter3::QueryVideoMemoryInfo 來辨識每個進程的最大 GPU VA 空間太小或大致上與落地預算大小相同。 對於這類架構,落地預算一律受限於 GPU 虛擬位址空間的數量。 收回 不會釋出這類系統上的任何落地預算。

應用程式必須處理 MakeResident 失敗,即使有足夠的落地預算可用也一樣。 實體記憶體片段和配接器架構Quirk 可排除大型連續範圍的使用率。 應用程式應該先釋出更多落地預算,然後再試一次。

MakeResident 是 ref 計數,因此在收回生效之前,必須呼叫與 MakeResident 相同的次數。 支援落地的物件會在建立期間進行駐留,因此單一 收回 呼叫實際上會收回物件。

應用程式必須使用柵欄,以確保 GPU 不會使用非駐留物件。 MakeResident 必須在 GPU 執行參考物件的命令清單之前傳回。 GPU 完成執行參考物件的命令清單之後,必須呼叫收回。

收回的物件仍會取用相同的 GPU 虛擬位址和相同數量的 GPU 虛擬位址空間。 因此, 收回之後,資源描述元和其他 GPU 虛擬地址參考不會失效。

規格需求

需求
目標平台 Windows
標頭 d3d12.h
程式庫 D3D12.lib
Dll D3D12.dll

另請參閱

ID3D12Device