Freigeben über


PFND3DDDI_MAKERESIDENTCB Rückruffunktion (d3dumddi.h)

pfnMakeResidentCb wird verwendet, um das Betriebssystem anzuweisen, der Geräteresidenzliste 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 [ein, aus]

Ein Zeiger auf eine D3DDDI_MAKERESIDENT Struktur, die die Speicherseiten beschreibt, die resident werden sollen.

Rückgabewert

pfnMakeResidentCb gibt einen der folgenden Werte zurück:

Rückgabecode Beschreibung
S_OK Alle Zuordnungen wurden beim Beenden dieser Funktion auf der GPU residiert und können sofort darauf zugegriffen werden.
E_PENDING Die Zuordnungen wurden der Anforderungsliste der Geräteresidenz hinzugefügt, müssen aber noch ausstehende Pagingvorgänge abschließen, bevor auf sie erfolgreich zugegriffen werden kann. In diesem Fall muss der Benutzermodustreiber warten, bis der PagingFenceValue für das überwachte Synchronisierungsobjekt des Zauns, das hPagingQueue zugeordnet ist, vor dem Übermitteln von Befehlspuffern signalisiert wird, dass Referenzzuordnungen oder ein GPU-Seitenfehler auftreten können.
E_OUTOFMEMORY Der Videospeicher-Manager kann nicht jede angeforderte Zuordnung als resident festlegen. Wenn dies geschieht, wird die Anzahl der Wohnsitze bei keiner Zuordnung in der bereitgestellten Liste geändert. Mit anderen Worten, dies ist ein atomarer Vorgang, bei dem entweder die gesamte Zuordnung ihre Anzahl der Wohnsitze erhöht, oder keiner von ihnen. Darüber hinaus gibt NumBytesToTrim dem Treiber an, wie viele Bytes aus der Anforderungsliste der Geräteresidenz gekürzt werden müssen, indem pfnEvictCb aufgerufen wird, bevor versucht wird, die fehlerhaften Zuordnungen erneut zu residentieren.
Das Speicherbudget, das einer Anwendung zugeordnet ist, kann sich asynchron mit der ausgeführten Anwendung ändern. Dies hat zur Folge, dass das Kürzen der angeforderten Anzahl von Bytes nicht garantiert, dass der nächste Versuch, den Satz der Zuordnungen resident zu machen, erfolgreich ist, da das Speicherbudget für die Anwendung möglicherweise verringert wurde. Aus diesem Gründen sollte ein Treiber sicherstellen, dass er die Residenzanforderung in einer Schleife versucht und zwischen den einzelnen Iterationen gekürzt wird, bis die Anforderung entweder erfolgreich ist oder der Treiber alles, was möglich ist, gekürzt hat, um den Fortschritt für einen einzelnen Vorgang zu machen und die erforderliche Ressource bei diesem letzten 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 Anwendung zurückkehren. Der Kernel erlaubt keine weiteren Übermittlungen an einen der Kontexte, die zu einem Gerät gehören.
Für den DirectX 12.0-Benutzermodustreiber verhält sich pfnMakeResidentCb etwas anders, da er nicht mehr für das Kürzen oder Paging in Zuordnungen verantwortlich ist. Dies geschieht, um sicherzustellen, dass der Zustand aller Zuordnungen nach der Rückgabe vom Aufruf derselbe wie vor dem Aufruf bleibt. Dies bedeutet, dass, wenn E_OUTOFMEMORY von der Funktion zurückgegeben wird:
- Alle Zuordnungen bleiben in ihrem ursprünglichen Zustand.
- Die Zuordnungen wurden nicht ansässig gemacht.
– PagingFenceValue sollte ignoriert werden.
Wenn der Treiber pfnMakeResidentCb-Aufrufe in mehreren Batches ausführen muss, um die Übersetzung von Ressourcen zur Zuordnung zu ermöglichen, sollte der Treiber alle vorherigen Aufrufe von pfnMakeResidentCb mit entsprechenden Aufrufen von pfnEvictCb rückgängig machen und den Fehlercode zurück an die Runtime weitergeben.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 10
Unterstützte Mindestversion (Server) Windows Server 2016
Zielplattform Desktop
Kopfzeile d3dumddi.h (include D3dumddi.h)

Weitere Informationen

D3DDDI_MAKERESIDENT

pfnEvictCb