我已经阅读了很多有关Direct3D11的文章(包括堆栈溢出!),在我的所有研究中,我都无法最终回答以下问题:
当创建资源对象(即Buffer或Texture对象)时,例如使用pDevice-> CreateBuffer(),它将存储在哪里?是在系统RAM上还是在GPU的Video-RAM上?还是我完全误解了资源对象是什么的基本性质?
显然,您用来填充资源的任何数据(例如顶点和索引数组)都存储在您(程序员)放置在任何地方的位置,但是一旦将数据映射到Resource上,就将其复制到哪里?(我假设,由于必须对资源进行映射和取消映射以进行读/写保护,因此实际上将映射的数据复制到了VRAM中)。此外,资源对象本身在哪里实例化?
在此先感谢您提供的所有帮助!
在创建资源期间,您的Create *调用将遍历D3D运行时,UMD(用户模式图形驱动程序)和KMD(内核模式)。KMD负责页表管理(在共享虚拟内存的情况下,它可以与OS通讯,但是可以忽略它)。如果您的资源不使用SVM,则将其渗入图形内存。
用于处理器图形的图形内存(例如Intel Iris)是您的系统RAM。因此,它实际上只是从应用程序虚拟地址空间到KMD的副本。
对于独立显卡,数据驻留在显卡的视频RAM中。GPU只能处理视频RAM中的数据。(我不确定共享虚拟内存如何用于离散图形)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句