Freigeben über


PFND3DDDI_MAKERESIDENTCB Rückruffunktion (d3dumddi.h)

pfnMakeResidentCb wird verwendet, um das Betriebssystem anzuweisen, der Geräteaufbewahrungsliste eine Ressource hinzuzufügen und die Residency-Referenzanzahl für diese Zuordnung zu erhöhen.

Syntax

PFND3DDDI_MAKERESIDENTCB Pfnd3dddiMakeresidentcb;

HRESULT Pfnd3dddiMakeresidentcb(
  HANDLE hDevice,
  D3DDDI_MAKERESIDENT *unnamedParam2
)
{...}

Parameter

hDevice

Ein Handle für das Anzeigegerät.

unnamedParam2

pData- [in, out]

Ein Zeiger auf eine D3DDDI_MAKERESIDENT-Struktur, die die Speicherseiten beschreibt, um sich zu residentieren.

Rückgabewert

pfnMakeResidentCb einen der folgenden Werte zurück:

Rückgabecode Beschreibung
S_OK Alle Zuordnungen wurden beim Beenden dieser Funktion auf der GPU gespeichert und können sofort darauf zugreifen.
E_PENDING Die Zuordnungen wurden der Anforderungsliste für die Geräteaufbewahrung hinzugefügt, müssen jedoch noch ausstehende Auslagerungsvorgänge ausführen, bevor sie erfolgreich aufgerufen werden können. In diesem Fall muss der Benutzermodustreiber auf den PagingFenceValue für das überwachte Zaunsynchronisierungsobjekt warten, das hPagingQueue zugeordnet ist, bevor Befehlspuffer übermittelt werden, die auf Zuordnungen verweisen oder ein GPU-Seitenfehler auftreten kann.
E_OUTOFMEMORY Der Videospeicher-Manager kann nicht jede angeforderte Zuordnung resident machen. In diesem Fall wird in der angegebenen Liste keine Zuweisung der Residency-Anzahl geändert. Anders ausgedrückt ist dies ein atomer Vorgang, bei dem entweder alle Zuweisungen ihre Residency-Anzahl erhöhen oder keiner davon. Außerdem gibt NumBytesToTrim dem Treiber an, wie viele Bytes aus der Geräteaufbewahrungsanforderungsliste gekürzt werden müssen, indem pfnEvictCbaufgerufen wird, bevor versucht wird, die fehlgeschlagenen Zuordnungen erneut zu erstellen.
Das speicherbudget, das einer Anwendung zugeordnet ist, kann asynchron mit der ausgeführten Anwendung geändert werden. Aus diesem Grund garantiert das Kürzen der angeforderten Anzahl von Bytes nicht, dass der nächste Versuch, den Satz von Zuweisungen resident zu machen, erfolgreich ist, da das Speicherbudget für die Anwendung möglicherweise verringert wurde. Aus diesem Grunde sollte ein Treiber sicherstellen, dass er die Residency-Anforderung in einer Schleife versucht, zu kürzen zwischen den einzelnen Iterationen, bis die Anforderung erfolgreich ist oder der Treiber alles gekürzt hat, was möglicherweise möglich ist, um einen Fortschritt für einen einzelnen Vorgang durchzuführen und die erforderliche Ressource für diesen endgültigen Versuch zu verwenden. Wenn dieser letzte Versuch fehlschlägt, wird das zugrunde liegende Gerät fehlerhaft, und der Benutzermodustreiber sollte die Anforderung abbrechen und zurück zur Anwendung zurückkehren. Vom Kernel werden keine weiteren Übermittlungen an einen der Kontexte zugelassen, die zu einem Gerät gehören.
Für den DirectX 12.0-Benutzermodustreiber verhält sich pfnMakeResidentCb etwas anders, da es nicht mehr für das Kürzen oder Paging in Zuordnungen verantwortlich ist. Dies erfolgt, um sicherzustellen, dass der Status aller Zuordnungen nach der Rückgabe vom Anruf unverändert bleibt wie vor dem Anruf. Dies bedeutet, dass E_OUTOFMEMORY von der Funktion zurückgegeben wird:
- Alle Zuweisungen verbleiben in ihrem ursprünglichen Zustand.
- Die Zuweisungen wurden nicht ansässig.
- PagingFenceValue sollte ignoriert werden.
Wenn der Treiber pfnMakeResidentCb-Aufrufe in mehreren Batches ausführen muss, um die Übersetzung von Ressourcen zu berücksichtigen, sollte der Treiber alle vorherigen Aufrufe von pfnMakeResidentCb mit entsprechenden Aufrufen von pfnEvictCbrückgängig machen und den Fehlercode an die Laufzeit weitergeben.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows 10
mindestens unterstützte Server- Windows Server 2016
Zielplattform- Desktop
Header- d3dumddi.h (include D3dumddi.h)

Siehe auch

D3DDDI_MAKERESIDENT

pfnEvictCb