我需要大致确定系统的显卡有多少VRAM。我知道我不应该的所有原因,但我愿意。它不需要是完美的(有些卡可以说谎等等),但是我需要一个球场。在Mac上,通过核心图形和IOKit相当礼貌地询问显示器上连接了多少VRAM相当容易,但是我对Windows没有任何了解。我怀疑DirectX可以以某种方式告诉我,因为DxDiag有一个合理的猜测...
再说一次,我知道我不需要知道,但是我知道。
任何帮助将不胜感激。
最佳答案
简短的答案:没有可靠的方法来获取此信息。
长答案:
有许多不赞成使用的方法来获取此信息。就像打开旧的DirectDraw界面并查询可用的视频内存一样。但是,该数字可能包括AGP内存,统一内存,也可能不包括它。否则,您甚至可能会将虚拟值硬编码到驱动程序中。
我知道您已经知道查询此号码是个坏主意,但让我再次为其他读者总结一下:
您想先处理数字吗?作为一名应用程序程序员,您对视频存储器的使用方式只有非常有限的控制。您不会以任何方式分配或管理内存。驾驶员正在为您做这件事。使您的代码知道“伪造”的可用内存将导致严重的问题。
您可能会认为可以使用可用内存来确定视频存储器中可以容纳多少个纹理,但这是一个错误的假设。一些卡对如何使用内存有非常奇怪的要求。我知道一些细节的一张特殊卡片对于任何4kb的mipmap都具有最小的大小。
因此,如果您将8x8 8位纹理加载到内存中,则可能需要85个字节(8 * 8 + 4 + 4 + 2 + 2 + 1)。驱动程序完成上传作业后,大小将为12kb(4 * 4kb)。您的估计将超出一百倍。
顶点和索引缓冲区,渲染目标,着色器等也是如此。
这就是为什么此信息不再暴露给应用程序的原因。过去,它造成了许多问题。
关于c - 确定Windows上的VRAM大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1730738/