ID3D12Device::MakeResident-Methode (d3d12.h)

Stellt Objekte für das Gerät ein.

Syntax

HRESULT MakeResident(
       UINT           NumObjects,
  [in] ID3D12Pageable * const *ppObjects
);

Parameter

NumObjects

Typ: UINT

Die Anzahl der Objekte im ppObjects-Array , die für das Gerät resident werden sollen.

[in] ppObjects

Typ: ID3D12Pageable*

Ein Zeiger auf einen Speicherblock, der ein Array von ID3D12Pageable-Schnittstellenzeigern für die Objekte enthält.

Obwohl die meisten D3D12-Objekte von ID3D12Pageable erben, werden Residenzänderungen nur für die folgenden Objekte unterstützt: Descriptor-Heaps, Heaps, Commit Resources und Abfrageheaps

Rückgabewert

Typ: HRESULT

Diese Methode gibt einen der Direct3D 12-Rückgabecodes zurück.

Hinweise

MakeResident lädt die einer Ressource zugeordneten Daten vom Datenträger und weist den Arbeitsspeicher aus dem entsprechenden Speicherpool der Ressource neu zu. Diese Methode sollte für das Objekt aufgerufen werden, das den physischen Arbeitsspeicher besitzt.

Verwenden Sie diese Methode und Evict, um den GPU-Videospeicher zu verwalten. Beachten Sie dabei, dass dies in D3D11 automatisch erfolgt ist, jetzt aber von der App in D3D12 ausgeführt werden muss.

MakeResident und Evict können Anwendungen dabei unterstützen, das Residency-Budget für viele Adapter zu verwalten. MakeResident explizit seitenbasierte Daten und schließt dann das Ausblättern aus, damit die GPU auf die Daten zugreifen kann. Auslagerung aktiviert das Ausblättern.

Einige GPU-Architekturen profitieren aufgrund des Mangels an ausreichendem virtuellen GPU-Adressraum nicht von der Manipulation der Residenz. Verwenden Sie D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT und IDXGIAdapter3::QueryVideoMemoryInfo , um zu erkennen, wenn der maximale GPU-VA-Speicherplatz pro Prozess zu klein oder ungefähr die gleiche Größe wie das Residency-Budget ist. Bei solchen Architekturen wird das Residency-Budget immer durch die Menge des virtuellen GPU-Adressraums eingeschränkt. Durch die Entfernung werden keine Residenzbudgets für solche Systeme frei.

Anwendungen müssen MakeResident-Fehler behandeln, auch wenn anscheinend genügend Residenzbudget verfügbar ist. Physische Speicherfragmentierung und Adapterarchitektur-Macken können die Verwendung großer zusammenhängender Bereiche ausschließen. Anwendungen sollten mehr Residency-Budget freigeben, bevor sie es erneut versuchen.

MakeResident ist ref-counted, sodass Evict genauso oft aufgerufen werden muss wie MakeResident , bevor Evict wirksam wird. Objekte, die die Residenz unterstützen, werden während der Erstellung als resident festgelegt, sodass ein einzelner Evict-Aufruf das Objekt tatsächlich entfernt.

Anwendungen müssen Zäune verwenden, um sicherzustellen, dass die GPU keine nicht residenten Objekte verwendet. MakeResident muss zurückgegeben werden, bevor die GPU eine Befehlsliste ausführt, die auf das Objekt verweist. Evict muss aufgerufen werden, nachdem die GPU die Ausführung einer Befehlsliste abgeschlossen hat, die auf das Objekt verweist.

Entfernte Objekte verbrauchen weiterhin dieselbe virtuelle GPU-Adresse und dieselbe Menge an virtuellem GPU-Adressraum. Daher werden Ressourcendeskriptoren und andere Verweise auf virtuelle GPU-Adressen nach der Entfernung nicht ungültig.

Anforderungen

Anforderung Wert
Zielplattform Windows
Kopfzeile d3d12.h
Bibliothek D3D12.lib
DLL D3D12.dll

Weitere Informationen

ID3D12Device