我需要确定系统显卡的VRAM大小。我知道我不应该做的所有原因。它不需要是完美的(一些卡片等等)但我需要一个球场。在Mac上,通过核心图形和IOKit相当容易,只是礼貌地询问VRAM附加到显示器上的数量,但我对Windows没有任何线索。我怀疑DirectX可以告诉我,因为DxDiag有一个公平的猜测...
而且,我知道我不应该知道,但我知道。
任何帮助都会非常感激。
答案 0 :(得分:1)
简短回答:没有可靠的方法来获取这些信息。
答案很长:
获取此信息的方法有很多,已弃用。就像打开旧的DirectDraw界面并查询可用的视频内存一样。但是,该数字可能包括AGP内存,统一内存或者可能不包括它。或者你甚至可以将一个虚拟值硬编码到驱动程序中。
我知道你已经知道查询这个号码是一个坏主意,但让我再次为其他读者总结一下:
您想在第一时间使用该号码做什么?作为应用程序编程人员,您对视频内存的使用控制非常有限。您不以任何方式分配或管理内存。司机正在为你做这件事。让你的代码意识到“伪造的”可用内存将导致严重的问题。
您可能认为可以使用可用内存来决定适合视频内存的纹理数量,但这是一个错误的假设。有些卡对内存的使用方式有很奇怪的要求。我知道一些细节的特定卡片对于任何4kb的mipmap都具有最小尺寸。
因此,如果您将8x8 8位纹理加载到内存中,您可能需要85字节(8 * 8 + 4 + 4 + 2 + 2 + 1)。在驱动程序完成上传工作后,它的大小将为12kb(4 * 4kb)。你的估计会超过百分之一。
这同样适用于顶点和索引缓冲区,渲染目标,着色器等。
这就是为什么这些信息不再暴露给应用程序的原因。它在过去遇到了很多问题。