引擎版本:UE 5.8
面向读者:UE 图形程序员

UE 的 D3D12 显存管理并不是一个分配器解决所有问题。资源类型、大小、对齐、生命周期、CPU 可见性和驻留粒度不同,最终会把请求送入不同的分配路径。理解这些路径,可以帮助我们判断一次分配为什么落在 Committed Resource、Placed Resource、共享 Buffer 池或 Reserved Resource,也能解释显存统计、碎片和回收延迟为何常常与资源逻辑大小不同。

完整图文版从一次资源创建请求出发,依次拆解以下内容:

  • 资源落点与路由依据:Committed、Placed、共享 Buffer 子分配和 Reserved Resource 分别解决什么问题。
  • Buffer 与 Texture 分配:尺寸阈值、对齐规则、池化条件,以及 RT、DS、UAV 等特殊资源为什么走不同路径。
  • UPLOAD 与 READBACK:UploadHeapAllocator、Buddy、FastAllocator、FastConstantAllocator 和回读资源之间的职责边界。
  • RDG Transient Resource:Transient Heap 如何利用资源生命周期做内存别名,以及资源对象缓存如何减少重复创建。
  • Reserved Resource:虚拟地址、Backing Heap 与 Tile Mapping 如何组合,UE 目前在哪些场景使用它。
  • 释放、整理与驻留:Fence 延迟回收、池碎片整理、Heap 增长策略和 Residency 粒度。
  • 数值与 CVar 速查:常见阈值、池尺寸、对齐值和调试开关,便于结合源码与运行时数据定位问题。

文中包含分配器关系图、尺寸阈值图、Buddy 与 Bump 分配示意、Transient 生命周期别名图、Reserved Resource 映射图以及源码索引。适合先建立完整心智模型,再沿着具体类和调用点深入源码。

打开完整图文版:UE5.8 D3D12 显存分配全景 →