0

我一直在阅读 Direct3D11 的很多内容(包括这里的堆栈溢出!),在我所有的研究中,我都无法最终回答这个问题:

当一个 Resource 对象(即一个 Buffer 或一个 Texture 对象)被创建时,例如使用 pDevice->CreateBuffer(),它存储在哪里?在系统 RAM 上还是在 GPU 的 Video-RAM 上?还是我完全误解了 Resource 对象的基本性质?

显然,无论您使用什么数据填充资源(例如顶点和索引数组)都存储在您(程序员)放置它的任何位置,但是一旦您将这些数据映射到 Resource,它会复制到哪里?(我假设,由于必须映射和取消映射资源以进行读/写保护,因此映射的数据实际上被复制了,可能复制到了 VRAM)。此外,Resource 对象本身在哪里实例化?

提前感谢您的任何帮助!

4

1 回答 1

1

在资源创建期间,您的 Create* 调用会经过 D3D 运行时、UMD(用户模式图形驱动程序)和 KMD(内核模式)。KMD 负责页表管理(在共享虚拟内存的情况下它可以与操作系统对话,但我们忽略它)。如果您的资源不使用 SVM,那么它会被传送到图形内存。

处理器图形(例如 Intel Iris)的图形内存是您的系统 RAM。因此,它实际上只是从应用程序虚拟地址空间到 KMD 的副本。

对于独立显卡,数据驻留在显卡的视频 RAM 中。GPU 只能处理视频 RAM 中的数据。(我不确定共享虚拟内存如何用于独立显卡)

于 2013-09-27T21:15:12.550 回答