获取图形内存量

Soo*_*nts 5 c++ windows directx dxgi direct3d11

我知道DXGI_ADAPTER_DESC,但在32位版本中,Direct3D的SIZE_T类型长4个字节,所以我得到的是3GB而不是11GB.

有没有办法在32位构建中获得正确的值?

PS我需要该值来计算大型2D纹理数组的大小.虽然用户不太可能拥有带有11GB VRAM GPU的32位Windows,但很可能拥有带有32位操作系统的4GB VRAM,例如升级后.在这种情况下,我不想将我的数组限制为0.

use*_*447 2

根据我的研究,没有简单的方法可以实现这一目标。

相反,有多种(微软式的)完全不同的方法来实现这一点,每种方法都比另一种更复杂。

以前在DX9中有这个便利pd3dDevice->GetAvailableTextureMem(),但在DX11中就没有了。

在此 MSDN 代码示例中,您可以找到多种方法来查询可用视频 RAM(带有源代码)。我希望其中之一适合您。

  • 32 位应用程序无法访问所有 4 GB 以上的 VRAM,这就是为什么 32 位应用程序返回较低值的原因。您需要 64 位本机应用程序才能看到这一切。请参阅[本文](https://www.gamasutra.com/view/feature/3602/spoken_feature_ram_vram_and_.php) (2认同)
  • 事实上确实如此,尽管在现代 WDDM 中,他们利用窗口来尝试降低整体 VA 空间利用率。请参阅[为什么您的 Windows 游戏在 2,147,352,576 字节内无法运行](https://msdnshared.blob.core.windows.net/media/2017/04/Why-Your-Windows-Game-Wont-Run-In-2147352576 -Bytes.zip)来自 Gamefest 2007。您可以尝试在 x64 操作系统上运行时在 32 位应用程序中使用 LargeAddressAware,但如果您想使用大量 VRAM,则需要使用 x64 本机代码。 (2认同)