我读了很多关于Direct3D11的文章(包括这里的堆栈溢出!)在我所有的研究中,我一直未能确切地回答这个问题:
当创建一个Resource对象(即缓冲区或纹理对象)时,例如使用pDevice->CreateBuffer(),它存储在哪里?在系统RAM上还是在GPU的视频内存上?还是我完全误解了资源对象的本质?
显然,无论您用什么数据填充资源(例如顶点和索引数组),都存储在您--程序员--放置的任何地方,但是一旦您将该数据映射到资源,它在哪里复制呢?(我假设,由于资源必须映射和取消映射以保护读/写,因此映射的数据实际上是复制到VRAM中的)。此外,资源对象本身在哪里实例化?
提前感谢您的帮助!
发布于 2013-09-27 21:15:12
在资源创建期间,您的Create*调用经过D3D运行时、UMD (用户模式图形驱动程序)和KMD (内核模式)。KMD负责页面表管理(在共享虚拟内存的情况下,它可以与操作系统对话,但让我们忽略这一点)。如果您的资源不使用支持向量机,那么它将被裁剪到图形内存中。
处理器图形的图形内存(如Intel Iris)是您的系统RAM。因此,它实际上只是从应用程序虚拟地址空间复制到KMD。
对于离散显卡,数据驻留在您的卡的视频RAM中。该GPU只能与数据,它的视频RAM工作。(我不确定共享虚拟内存是如何用于离散图形的)
https://stackoverflow.com/questions/19059579
复制相似问题