DXGKDDI_ACQUIRESWIZZLINGRANGE Rückruffunktion (d3dkmddi.h)

Die DxgkDdiAcquireSwizzlingRange-Funktion macht eine Zuordnung über die CPU-Blende (Central Processing Unit) für das angegebene Segment zugänglich.

Syntax

DXGKDDI_ACQUIRESWIZZLINGRANGE DxgkddiAcquireswizzlingrange;

NTSTATUS DxgkddiAcquireswizzlingrange(
  [in]     IN_CONST_HANDLE hAdapter,
  [in/out] INOUT_PDXGKARG_ACQUIRESWIZZLINGRANGE pAcquireSwizzlingRange
)
{...}

Parameter

[in] hAdapter

Ein Handle für einen Kontextblock, der einem Anzeigeadapter zugeordnet ist. Der Anzeigeminiporttreiber hat dieses Handle zuvor für das Microsoft DirectX-Grafikkernsubsystem im Ausgabeparameter MiniportDeviceContext der DxgkDdiAddDevice-Funktion bereitgestellt.

[in/out] pAcquireSwizzlingRange

Ein Zeiger auf eine DXGKARG_ACQUIRESWIZZLINGRANGE-Struktur , die Informationen enthält, um eine Zuordnung über die CPU-Blende zugänglich zu machen.

Rückgabewert

DxgkDdiAcquireSwizzlingRange gibt einen der folgenden Werte zurück:

Rückgabecode Beschreibung
STATUS_SUCCESS DxgkDdiAcquireSwizzlingRange hat die Zuordnung erfolgreich zugänglich gemacht.
STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNSUPPORTED DxgkDdiAcquireSwizzlingRange konnte den Schwenkbereich für die Zuordnung nicht programmieren. Der Videospeicher-Manager kann den Schwenkbereich nicht abrufen, ohne weitere Versuche zu unternehmen.
STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE DxgkDdiAcquireSwizzlingRange konnte den Schwenkbereich für die Zuordnung nicht programmieren, da ein anderer Schwenkbereich derzeit die erforderlichen GPU-Ressourcen (Graphics Processing Unit) verwendet. Der Videospeicher-Manager versucht, einen derzeit verwendeten Bereich freizugeben, und versucht dann, den Schwenkbereich erneut einzurichten.

Hinweise

Die DxgkDdiAcquireSwizzlingRange-Funktion wird aufgerufen, nachdem der Benutzermodusanzeigetreiber eine virtuelle Adresse anfordert, die auf die Bits einer Zuordnung verweist (d. h. nachdem der Benutzermodusanzeigetreiber die PfnLockCb-Funktion mit dem Bitfeldflag AcquireAperture im Flags-Member der D3DDDICB_LOCK-Struktur und während sich die Zuordnung derzeit in einem CPU-zugänglichen Speichersegment befindet). Wenn das AcquireAperture-Bitfeldflag im Aufruf von pfnLockCb nicht festgelegt ist, wird DxgkDdiAcquireSwizzlingRange nicht aufgerufen, und die Zuordnung muss in einem Format vorliegen, das der Benutzermodusanzeigetreiber oder eine Anwendung verarbeiten kann.

Wenn DxgkDdiAcquireSwizzlingRange aufgerufen wird, muss der Anzeigeminiporttreiber die angegebene Zuordnung (d. hAllocation-Member der DXGKARG_ACQUIRESWIZZLINGRANGE Struktur, auf die der pAcquireSwizzlingRange-Parameter verweist) über die CPU-Blende für das angegebene Segment (d. h. das SegmentId-Element von DXGKARG_ACQUIRESWIZZLINGRANGE) zugänglich machen. Die Zuordnung muss genau so angezeigt werden, wie sie im Arbeitsspeicher des Computers nach einer Entfernung angezeigt wird.

Nicht alle Anforderungen des Benutzermodusanzeigetreibers sind für den Anzeigeminiporttreiber zugänglich. Swizzling-Bereiche, die der Videospeicher-Manager erworben hat, werden basierend auf der Zuordnung, der sie zugeordnet sind, und den angegebenen privaten Daten zwischengespeichert. Bei der ersten Anforderung des Benutzermodusanzeigetreibers für den Zugriff auf eine Zuordnung wird die DxgkDdiAcquireSwizzlingRange-Funktion des Anzeigeminiporttreibers aufgerufen, um die Zuordnung zugänglich zu machen. Bei nachfolgenden Anforderungen mit übereinstimmenden privaten Daten wird die zuvor eingerichtete Zuordnung verwendet, um auf die Zuordnung zuzugreifen.

Der Videospeicher-Manager ruft die DxgkDdiReleaseSwizzlingRange-Funktion des Anzeigeminiporttreibers auf, um einen Schwenkbereich freizugeben, wenn eine Zuordnung entfernt oder zerstört wird oder wenn eine andere Zuordnung eine Blende erfordert. Eine Zuordnung kann einer beliebigen Anzahl von Schwenkbereichen zugeordnet werden (z. B. einer Blende pro MIP-Ebene).

Die Anzahl der von einem Adapter unterstützten Schwenkbereiche wird vom Treiber im NumberOfSwizzlingRanges-Member der DXGK_DRIVERCAPS-Struktur verfügbar gemacht, wenn die DxgkDdiQueryAdapterInfo-Funktion des Treibers aufgerufen wird. Alle Bereiche sind gleich (das heißt, jeder Bereich kann einen beliebigen Typ von Swizzling oder Tiling aufheben oder bis zu einer beliebigen Art von Swizzling oder Tiling). Der Videospeicher-Manager vermittelt die verfügbaren Schwenkbereiche zwischen allen Anwendungen, die sie benötigen.

Der Treiber muss memory-mapped E/A (MMIO) verwenden, um einen Schwenkbereich einzurichten. Diese Swizzling-Range-Zugriffe dürfen die Ausführung der GPU nicht beeinträchtigen (d. h. die GPU darf sich nicht im Leerlauf befinden, wenn DxgkDdiAcquireSwizzlingRange aufgerufen wird).

Alle Aufrufe von DxgkDdiAcquireSwizzlingRange werden untereinander serialisiert, aber nicht mit einer anderen DDI-Funktion.

Wenn die GPU Swizzling-Bereiche unterstützt, die CPU-Zugriffe auf Speichersegmente ohne CPU-Zugriff oder Systemspeicher umleiten, kann der Benutzermodusanzeigetreiber die Kombination von AcquireAperture - und UseAlternateVA-Bitfeldflags im Flags-Member der D3DDDICB_LOCK-Struktur in einem Aufruf der pfnLockCb-Funktion festlegen, um die Zuordnung zu sperren. In dieser Situation ruft der Videospeicher-Manager die DxgkDdiAcquireSwizzlingRange-Funktion des Anzeigeminiporttreibers auf, um einen Schwenkbereich für die Zuordnung zu erhalten, obwohl sich die Zuordnung in einem Speichersegment ohne CPU-Zugriff oder in einem Blendensegment befindet. Swizzling-Bereiche sind einigen GPU-Ressourcen (z. B. PCI-Blendenbereichen) zugeordnet, die der Treiber verwaltet und nicht für den Videospeicher-Manager zugänglich sind.

Ein Aufruf von DxgkDdiAcquireSwizzlingRange zum Abrufen eines Schwammbereichs schlägt möglicherweise fehl, weil eine vom Treiber verwaltete Ressource ausgelaufen ist. Obwohl der Schwarmbereich selbst frei ist, kann er aufgrund der fehlenden Ressource möglicherweise nicht verwendet werden. Der Treiber kann angeben, dass ein Schwenkbereich für den Videospeicher-Manager nicht verfügbar ist, indem er STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE von DxgkDdiAcquireSwizzlingRange zurückgibt. Der Videospeicher-Manager versucht als Nächstes, einen derzeit verwendeten Swizzlingbereich freizugeben, und ruft dann die DxgkDdiAcquireSwizzlingRange-Funktion des Treibers erneut auf, um den neuen Swizzling-Bereich einzurichten. Wenn alle Schwenkbereiche freigegeben werden und der Treiber weiterhin mit STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE fehlschlägt, kann der Videospeicher-Manager keinen Schwenkbereich für die Zuordnung abrufen.

DxgkDdiAcquireSwizzlingRange sollte seitenfähig gemacht werden.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista
Zielplattform Desktop
Kopfzeile d3dkmddi.h
IRQL PASSIVE_LEVEL

Weitere Informationen

D3DDDICB_LOCK

DXGKARG_ACQUIRESWIZZLINGRANGE

DXGK_DRIVERCAPS

DxgkDdiAddDevice

DxgkDdiCreateAllocation

DxgkDdiQueryAdapterInfo

DxgkDdiReleaseSwizzlingRange

pfnLockCb