Skip to main content
使对象为设备驻留。

语法

参数

NumObjects
类型:UINT
要为设备驻留的 ppObjects 数组中的对象数量。 ppObjects [in]
类型:ID3D12Pageable *const *
指向内存块的指针,该内存块包含对象的 ID3D12Pageable 接口指针数组。 尽管大多数 D3D12 对象都继承自 ID3D12Pageable,但驻留更改仅在以下对象上受支持:描述符堆、堆、提交资源和查询堆

返回值

类型:HRESULT 此方法返回 Direct3D 12 返回代码 之一。

备注

MakeResident 从磁盘加载与资源关联的数据,并从资源相应的内存池重新分配内存。应在拥有物理内存的对象上调用此方法。 使用此方法和 Evict 管理 GPU 显存,请注意,在 D3D11 中这是自动完成的,但现在在 D3D12 中必须由应用程序完成。 MakeResidentEvict 可以帮助应用程序在许多适配器上管理驻留预算。MakeResident 显式地页入数据,然后阻止页出,以便 GPU 可以访问数据。Evict 启用页出。 由于缺乏足够的 GPU 虚拟地址空间,某些 GPU 架构不会从驻留操作中受益。使用 D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORTIDXGIAdapter3::QueryVideoMemoryInfo 识别每个进程的最大 GPU VA 空间何时太小或大致与驻留预算相同大小。对于此类架构,驻留预算将始终受 GPU 虚拟地址空间量的限制。在此类系统上,Evict 不会释放任何驻留预算。 应用程序必须处理 MakeResident 失败,即使似乎有足够的驻留预算可用。物理内存碎片和适配器架构的怪异现象可能会阻止利用大型连续范围。应用程序应在重试之前释放更多驻留预算。 MakeResident 是引用计数的,因此在 Evict 生效之前必须调用 Evict 的次数与 MakeResident 的次数相同。支持驻留的对象在创建期间就成为驻留状态,因此单次 Evict 调用实际上会逐出对象。 应用程序必须使用围栏来确保 GPU 不使用非驻留对象。MakeResident 必须在 GPU 执行引用该对象的命令列表之前返回。Evict 必须在 GPU 完成执行引用该对象的命令列表之后调用。 被逐出的对象仍消耗相同的 GPU 虚拟地址和相同数量的 GPU 虚拟地址空间。因此,在 Evict 之后,资源描述符和其他 GPU 虚拟地址引用不会失效。

要求

头文件: d3d12_xs.h 或 d3d12_x.h
库: d3d12_xs.lib 或 d3d12_x.lib
支持的平台:XBOX Series 主机和 XBOX One 系列

另请参阅

ID3D12Device
最后修改于 2026年8月13日