我有一个Direct3D 9应用程序,我想监视内存使用情况.有没有工具可以知道Direct3D使用了多少系统和视频内存?理想情况下,它还会报告为纹理,顶点缓冲区,索引缓冲区分配了多少......
您可以使用旧的DirectDraw界面查询总内存和可用内存.
你这样得到的数字虽然不可靠.
可用内存可能在任何时刻发生变化,可用内存通常会考虑AGP内存(严格来说不是视频内存).您可以使用这些数字来猜测应用程序/游戏的默认纹理分辨率和细节级别,但就是这样.
您可能想知道为什么没有办法获得更好的数字,毕竟它不能很难跟踪资源使用情况.
从应用程序的角度来看,这是正确的.您可能认为视频内存只包含曲面,纹理,索引和顶点缓冲区以及一些着色器程序,但在低级别上并非如此.
还有很多其他资源.所有这些都由Direct3D驱动程序创建和管理,以尽可能快地进行渲染.其中包括hirarchical z-buffer加速结构,预编译的命令列表(例如,以GPU理解的格式呈现某些内容所需的数据).驱动程序还可以预先对多个帧的渲染命令进行排队,以使帧速率均匀并增加GPU和CPU之间的并行性.
司机也为你做了很多工作.启发式用于检测具有静态几何和常量渲染设置的绘图调用.在这些情况下,驱动程序可能决定优化几何体以获得更好的缓存使用.这一切都是在驾驶员的控制下并行发生的.所有这些东西都需要空间,因此可用内存可能随时发生变化.
但是,驱动程序也会对您的资源进行缓存,因此您不需要首先了解资源使用情况.
如果你需要比可用空间更多的空间,那没问题.驱动程序将为您在system-ram,AGP-memory和video ram之间移动数据.在实践中,您永远不必担心视频内存不足.当然 - 一旦你需要比可用的更多的视频内存,性能将受到影响,但这就是生活:-)