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) |