# How do I query available video memory using DirectX?

How do you query the amount of VRAM available when using DirectX?

According to Game Coding Complete 3, there are a few ways:

• DX7's GetAvailableVidMem() - usually pretty good. Doesn't work too well on cards with shared memory.
• WMI (Windows Management Interface) has a similar result to the above.
• DxDiag uses both to give a better result.
• D3D9 has a GetAvailableTextureMemory() function, but can only be used on Windows Vista/7.

Look for a DX sample in March 08 or later SDK called 'VideoMemory'.

• DX Sample for Video Memory is great -- should have found that before asking ;) Oct 8 '10 at 17:38
• Considering how many computers will use shared memory, I would not recommend DX7's version. And how can the D3D9 version of this be only available on Vista+ ? D3D9 was there in XP... Oct 12 '10 at 20:57

For DX9EX on Vista and later:

IDXGIDevice * pDXGIDevice;
hr = g_pd3dDevice->QueryInterface(__uuidof(IDXGIDevice), (void **)&pDXGIDevice);

• Not calling Release() on pDXGIDevice after a successful call to QueryInterface() will lead to a memory leak.