进程驻留预算
在 Windows 显示驱动程序模型 (WDDM) v2 中,将为进程分配预算,用于保留其驻留的内存量。 此预算可能会随时间而变化,但通常仅在系统面临内存压力时才施加。 在 Microsoft Direct3D 12 之前,预算由用户模式驱动程序以 剪裁 通知和 MakeResident 故障的形式 处理STATUS_NO_MEMORY。 TrimToBudget 通知、 Evict 和失败的 MakeResident 调用均以整数 NumBytesToTrim 值的形式返回最新预算,该值指示需要剪裁多少才能适应新预算。
对于 Direct3D 12 应用程序,预算完全由应用程序处理。 预算大小旨在提供提示,让应用程序知道要调整自己的大小。 通过使用预算大小作为提示,应用程序可以决定保留驻留的资源数、要保留的分辨率和资源质量。
若要正确管理这些预算,内核需要知道哪些内存应参与预算。 DXGK_SEGMENTFLAGS2 结构中有一个新的 ApplicationTarget 位,需要在内核模式驱动程序希望包含在预算逻辑中的段上设置。 例如,在一个离散图形处理单元上, (GPU) 具有 1 段适合应用程序使用的 VRAM,以及 1 段自动用于特殊用途资源的 VRAM,驱动程序可能只会将主要 VRAM 段标记为 ApplicationTarget。 对于集成 GPU,main光圈段通常是标记的。 可以标记为 ApplicationTarget 的段数没有限制。 内核会将这些聚合在一起,并使用统一大小呈现应用程序。