Direct3D11在哪里分配资源对象?

时间:2013-09-27 20:30:59

标签: c++ memory direct3d direct3d11

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

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

显然,你填充资源的数据(例如顶点和索引数组)会存储在程序员放置它的任何地方,但是一旦你将数据映射到资源,它会被复制到哪里? (我假设,因为必须映射和取消映射资源以进行读/写保护,所以映射的数据实际上是复制的,也许是复制到VRAM)。而且,Resource对象本身在哪里实例化?

提前感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:1)

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

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

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