Wie frage ich den verfügbaren Videospeicher mit DirectX ab?

16

Wie können Sie die Menge des verfügbaren VRAM abfragen, wenn Sie DirectX verwenden?

Vincent Scheib
quelle

Antworten:

8

Gemäß Game Coding Complete 3 gibt es einige Möglichkeiten:

  • GetAvailableVidMem () von DX7 - normalerweise ziemlich gut. Funktioniert bei Karten mit gemeinsamem Speicher nicht besonders gut.
  • WMI (Windows Management Interface) hat ein ähnliches Ergebnis wie oben.
  • DxDiag verwendet beides, um ein besseres Ergebnis zu erzielen.
  • D3D9 verfügt über eine GetAvailableTextureMemory () - Funktion, kann jedoch nur unter Windows Vista / 7 verwendet werden.

Suchen Sie im März 08 oder später nach einem DX-Beispiel mit dem Namen "VideoMemory".

Die kommunistische Ente
quelle
DX-Beispiel für Videospeicher ist großartig - hätte das vor dem Fragen herausfinden sollen;)
Vincent Scheib
1
In Anbetracht der Anzahl der Computer, die gemeinsam genutzten Speicher verwenden, würde ich die Version von DX7 nicht empfehlen. Und wie kann die D3D9-Version davon nur unter Vista + verfügbar sein? D3D9 war dort in XP ...
Bahbar
5

Für DX9EX unter Vista und höher:

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;

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

Vincent Scheib
quelle
Nicht Aufruf Release()an pDXGIDevicenach einem erfolgreichen AufrufQueryInterface() zu einem Speicherverlust führen wird.
Vinz