> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# MakeResident

> 讓物件常駐於裝置。

讓物件常駐於裝置。

## 語法

```cpp theme={null}
HRESULT MakeResident(
    UINT NumObjects,
    ID3D12Pageable const  ppObjects
)
```

### 參數

*NumObjects*<br />類型：UINT

<i>ppObjects</i> 陣列中要常駐於裝置的物件數目。

*ppObjects \[in]*<br />類型：ID3D12Pageable \*const \*

記憶體區塊的指標，該區塊包含物件的 [ID3D12Pageable](/zh-TW/reference/graphics/d3d12/interfaces/id3d12pageable/id3d12pageable_public) 介面指標陣列。

雖然大部分 D3D12 物件都繼承自 [ID3D12Pageable](/zh-TW/reference/graphics/d3d12/interfaces/id3d12pageable/id3d12pageable_public)，但只有下列物件支援常駐變更：描述元堆積、堆積、認可的資源，以及查詢堆積

### 傳回值

類型：HRESULT

此方法會傳回其中一個 [Direct3D 12 傳回碼](https://learn.microsoft.com/en-us/windows/desktop/direct3d12/d3d12-graphics-reference-returnvalues)。

## 備註

**MakeResident** 會從磁碟載入與資源相關聯的資料，並從資源適當的記憶體集區重新配置記憶體。此方法應該在擁有實體記憶體的物件上呼叫。

使用此方法和 [Evict](/zh-TW/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_evict_public) 來管理 GPU 視訊記憶體。請注意，這在 D3D11 中是自動完成的，但在 D3D12 中現在必須由應用程式自行處理。

**MakeResident** 和 [Evict](/zh-TW/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_evict_public) 可協助應用程式在許多介面卡上管理常駐預算。**MakeResident** 會明確地將資料分頁載入，然後禁止分頁移出，讓 GPU 可以存取資料。**Evict** 則會啟用分頁移出。

某些 GPU 架構因為缺乏足夠的 GPU 虛擬位址空間，而無法從常駐操作中獲益。使用 [D3D12\_FEATURE\_DATA\_GPU\_VIRTUAL\_ADDRESS\_SUPPORT](/zh-TW/reference/graphics/d3d12/structs/d3d12_feature_data_gpu_virtual_address_support_public) 和 [IDXGIAdapter3::QueryVideoMemoryInfo](https://learn.microsoft.com/en-us/windows/desktop/api/dxgi1_4/nf-dxgi1_4-idxgiadapter3-queryvideomemoryinfo)，可辨識每個處理序的最大 GPU VA 空間何時太小，或與常駐預算的大小大致相同。對於這類架構，常駐預算一律會受到 GPU 虛擬位址空間量的限制。在這類系統上，[Evict](/zh-TW/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_evict_public) 不會釋放任何常駐預算。

即使看起來有足夠的常駐預算可用，應用程式仍必須處理 **MakeResident** 失敗的情況。實體記憶體分散和介面卡架構的特殊行為，可能會導致無法使用大型連續範圍。應用程式應先釋放更多常駐預算，然後再重試。

**MakeResident** 會進行參考計數，因此必須呼叫 [Evict](/zh-TW/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_evict_public) 與 **MakeResident** 相同的次數，**Evict** 才會生效。支援常駐的物件會在建立時成為常駐狀態，因此單一 **Evict** 呼叫實際上就會收回該物件。

應用程式必須使用柵欄，以確保 GPU 不會使用非常駐的物件。**MakeResident** 必須在 GPU 執行參考該物件的命令清單之前傳回。[Evict](/zh-TW/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_evict_public) 必須在 GPU 完成執行參考該物件的命令清單之後呼叫。

已收回的物件仍會使用相同的 GPU 虛擬位址和相同數量的 GPU 虛擬位址空間。因此，資源描述元和其他 GPU 虛擬位址參考在 [Evict](/zh-TW/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_evict_public) 之後不會失效。

## 需求

**標頭：** d3d12\_xs.h 或 d3d12\_x.h<br />**程式庫：** d3d12\_xs.lib 或 d3d12\_x.lib<br />**支援的平台**：XBOX Series 主機與 XBOX One 系列

## 另請參閱

[ID3D12Device](/zh-TW/reference/graphics/d3d12_x/interfaces/id3d12device/id3d12device)


## Related topics

- [EnqueueMakeResident](/zh-TW/reference/graphics/d3d12/interfaces/id3d12device3/methods/id3d12device3_enqueuemakeresident_public.md)
- [ID3D12Pageable](/zh-TW/reference/graphics/d3d12/interfaces/id3d12pageable/id3d12pageable_public.md)
- [Evict](/zh-TW/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_evict_public.md)
- [D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT](/zh-TW/reference/graphics/d3d12/structs/d3d12_feature_data_gpu_virtual_address_support_public.md)
- [D3D12_RESIDENCY_FLAGS](/zh-TW/reference/graphics/d3d12/enums/d3d12_residency_flags_public.md)
