【问题标题】:Failed test for detecting video memory size检测视频内存大小的测试失败
【发布时间】:2010-11-04 15:45:02
【问题描述】:

我有一个基于 .net/DirectX 的渲染库。在程序启动时,我们尝试找出物理视频 RAM 的数量。检测物理视频内存的数量很重要,要知道有多少可以用于纹理(如果你做过认真的directX,你可能已经知道了)。

通过执行以下 WMI 代码检测到视频 RAM:

var searcher = new ManagementObjectSearcher("Select * from Win32_VideoController");

foreach(ManagementObject videoCard in searcher.Get())
{
    _numVideoCards++;
    foreach (PropertyData propertyData in videoCard.Properties)
    {
        if (propertyData.Name == "AdapterRAM" && propertyData.Value != null)
        {
            _adapterRAM = Math.Max( (UInt32)(propertyData.Value), _adapterRAM );
        }
    }
}

这段代码是几年前比我更了解directX 的人编写的。

问题是此调用现在在客户硬件上意外失败(代码完成后 _adapterRAM == 0,并记录了异常)。

我想更改测试,但我犹豫了,因为我认为以这种方式直接通过 DirectX 检测显存是有原因的。

我的问题有两个:

  • 有谁知道您为什么要使用 WMI 和/或
  • 您知道一种更可靠的方法来检测物理视频 RAM 的数量吗?

P.S.:我们对共享内存显卡(例如 Intel)不感兴趣。如果有什么不同,我们会使用 SlimDX。

【问题讨论】:

    标签: .net directx wmi video-memory


    【解决方案1】:

    仅仅是因为 D3D9 不会公开设备上的物理内存量。据我所知,WMI 是唯一独立于供应商的选项。

    使用 D3D10 和 D3D11(使用 DXGI),您可以使用结构 DXGI_ADAPTER_DESC 的字段 DedicatedVideoMemory 检索它,然后瞧。 因此,如果您的目标是 Vista 或 7 操作系统,这应该可以工作。

    一种选择(但不是很好)是使用 OpenGL 和专有扩展,如 GL_ATI_meminfo,或使用专有 IHV api,如 NVAPI,并使用 C++/CLI 围绕它们进行薄包装。

    【讨论】:

      猜你喜欢
      • 2016-11-13
      • 2011-03-22
      • 2016-05-23
      • 1970-01-01
      • 2022-07-09
      • 1970-01-01
      • 2019-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多