我需要大致确定一个系统的显卡有多少VRAM。我知道我不该做的所有理由,但我做了。它不需要是完美的(有些卡片会说谎等等)但我需要一个大概的数字。在mac上,通过核心显卡和IOKit很容易礼貌地询问显示器上连接了多少VRAM,但我对windows一无所知。我怀疑DirectX可以告诉我,因为DxDiag有一个合理的猜测...
再说一次,我知道我不需要知道,但我知道。
任何帮助都将不胜感激。
发布于 2009-11-14 01:49:02
简而言之:没有可靠的方法来获取这些信息。
长长的答案:
有许多不推荐使用的方法来获取此信息。比如打开一个旧的DirectDraw接口并查询可用的视频内存。然而,该数字可以包括AGP存储器、统一存储器,也可以不包括它。或者你甚至可以得到一个硬编码到驱动程序中的虚拟值。
我知道你已经知道查询这个数字不是一个好主意,但让我再为其他读者总结一下:
首先,你想用这个数字做什么?作为一名应用程序程序员,您对如何使用显存的控制非常有限。您不需要以任何方式分配或管理内存。驱动程序会为您执行此操作。让您的代码意识到“伪造”的可用内存将导致严重的问题。
您可能认为可以使用可用内存来确定视频内存中可以容纳多少纹理,但这是一个错误的假设。有些卡对内存的使用有非常奇怪的要求。据我所知,有一张卡的最小尺寸为4kb的mipmap。
因此,如果您要将一个8x8 8位纹理加载到内存中,您可能会期望它占用85字节(8*8+4+4+2+2+1)。在驱动程序完成上传作业之后,它的大小将是12kb (4 * 4kb)。你的估计会有超过一百倍的误差。
这同样适用于顶点和索引缓冲区、渲染目标、着色器等。
这就是为什么这些信息不再向应用程序公开的原因。它在过去造成了许多问题。
https://stackoverflow.com/questions/1730738
复制相似问题