【问题标题】:DirectX RenderContext RAM/VRAMDirectX RenderContext RAM/VRAM
【发布时间】:2018-09-17 13:56:42
【问题描述】:
在分配(创建)时,我有 8GB 或 Vram (Gpu) 和 16GB 普通 RAM,可以说我最终用完了 Vram 的大型 4096x4096 纹理。但是从我所见,然后在 ram 上创建它。当您需要渲染(使用或渲染)它时..它接缝将渲染上下文从 ram 传输到 vram 以执行此操作。在每一帧(60fps 等)上运行正常访问许多渲染上下文时,PC 会因为它试图来回传输非常大量的数据而滞后。但是,只要每秒引用新的(最近未使用的渲染上下文(等仍在 ram 上而不是 vram 上))的数量.. 应该没有问题(性能方面)。问题是这些信息是否正确?
【问题讨论】:
标签:
memory
directx
ram
vram
【解决方案1】:
DirectX 将从视频 RAM 和/或 PCIe 孔径 RAM 中分配 DEFAULT 池资源,这些资源都可以由 GPU 直接访问。渲染目标通常必须在视频 RAM 中,并且通常视频 RAM 是更快的内存——尽管它在很大程度上取决于显卡的确切架构。
您所描述的是“过度提交”场景,您分配的资源超出了 GPU 可访问资源的实际容量。在这种情况下,DirectX 11 做出了“尽力而为”,通常涉及更改虚拟内存映射以渲染场景,但与更正常的情况相比,性能显然很差。
DirectX 12 将“过度提交”的处理留给应用程序处理,就像 DirectX 12 的其他所有内容一样,通常“运行时魔术行为”已被删除。有关此行为的详细信息,请参阅 docs,以及 this sample