Как запросить доступную видеопамять с помощью DirectX?

16

Как вы запрашиваете количество VRAM, доступное при использовании DirectX?

Винсент Шейб
источник

Ответы:

8

Согласно Game Coding Complete 3, есть несколько способов:

  • GetAvailableVidMem () в DX7 - обычно довольно хорошо. Не очень хорошо работает на картах с общей памятью.
  • WMI (интерфейс управления Windows) имеет результат, аналогичный приведенному выше.
  • DxDiag использует оба, чтобы дать лучший результат.
  • D3D9 имеет функцию GetAvailableTextureMemory (), но может использоваться только в Windows Vista / 7.

Ищите образец DX в SDK 08 марта или позже под названием «VideoMemory».

Коммунистическая утка
источник
Образец DX для видеопамяти великолепен - должен был найти это, прежде чем спрашивать;)
Винсент Шейб
1
Учитывая, сколько компьютеров будет использовать общую память, я бы не рекомендовал версию DX7. И как версия D3D9 этого может быть доступна только на Vista +? D3D9 был там в XP ...
Bahbar
5

Для DX9EX в Vista и более поздних версиях:

IDXGIDevice * pDXGIDevice;
hr = g_pd3dDevice->QueryInterface(__uuidof(IDXGIDevice), (void **)&pDXGIDevice);
IDXGIAdapter * pDXGIAdapter;
pDXGIDevice->GetAdapter(&pDXGIAdapter);
DXGI_ADAPTER_DESC adapterDesc;
pDXGIAdapter->GetDesc(&adapterDesc);
return adapterDesc.DedicatedVideoMemory;

http://msdn.microsoft.com/en-us/library/bb174526(v=VS.85).aspx )

Винсент Шейб
источник
Не вызывая Release()на pDXGIDeviceпосле успешного вызова QueryInterface()приведет к утечке памяти.
Винз