Freigeben über


DXGKDDI_ACQUIRESWIZZLINGRANGE Rückruffunktion (d3dkmddi.h)

Die funktion DxgkDdiAcquireSwizzlingRange 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 zu einem Kontextblock, der einem Anzeigeadapter zugeordnet ist. Der Display-Miniporttreiber, der zuvor dieses Handle für das Microsoft DirectX-Grafikkernsubsystem im MiniportDeviceContext Ausgabeparameter des DxgkDdiAddDevice--Funktion bereitgestellt hat.

[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 die Zuordnung erfolgreich zugänglich gemacht.
STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNSUPPORTED DxgkDdiAcquireSwizzlingRange konnte den Schwarmbereich für die Zuordnung nicht programmieren. Der Videospeicher-Manager kann den Schwarmbereich nicht abrufen, ohne weitere Versuche vorzunehmen.
STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE DxgkDdiAcquireSwizzlingRange konnte den Schwarmbereich für die Zuordnung nicht programmieren, da derzeit ein anderer Schwarmbereich die erforderlichen GPU-Ressourcen (Graphics Processing Unit) verwendet. Der Videospeicher-Manager versucht, einen aktuell verwendeten Bereich freizugeben, und versucht dann erneut, den Schwarmbereich einzurichten.

Bemerkungen

Die DxgkDdiAcquireSwizzlingRange Funktion wird aufgerufen, nachdem der Anzeigetreiber für den Benutzermodus eine virtuelle Adresse anfordert, die auf die Bits einer Zuordnung verweist (d. nachdem der Anzeigetreiber für den Benutzermodus die pfnLockCb--Funktion mit der AcquireAperture- Bitfeldkennzeichnung aufgerufen hat, die im Flags Mitglied der D3DDDICB_LOCK-Struktur festgelegt ist und sich die Zuordnung derzeit in einem CPU-Speichersegment befindet). Wenn das AcquireAperture- Bitfeld-Flag nicht im Aufruf von pfnLockCbfestgelegt ist, DxgkDdiAcquireSwizzlingRange nicht aufgerufen wird, und die Zuordnung muss in einem Format vorliegen, das der Benutzermodusanzeigetreiber oder eine Anwendung verarbeiten kann.

Wenn DxgkDdiAcquireSwizzlingRange aufgerufen wird, Der Anzeigeminiporttreiber muss die angegebene Zuordnung (d. hAllocation element der DXGKARG_ACQUIRESWIZZLINGRANGE Struktur, auf die der pAcquireSwizzlingRange Parameter verweist) über die CPU-Blende für das angegebene Segment zugänglich machen (d. h. die SegmentId Mitglied von DXGKARG_ACQUIRESWIZZLINGRANGE). Die Zuordnung muss genau so angezeigt werden, wie sie im Computerspeicher angezeigt wird, nachdem eine entschlüsselte Entfernung aufgehoben wurde.

Nicht alle Anforderungen des Anzeigetreibers für den Benutzermodus sind für den Anzeigeminiporttreiber zugänglich. Swizzling ranges that the video memory manager acquired are cached based on the allocation that they are associated with and the specified private data. Bei der ersten Anforderung des Anzeigetreibers für den Benutzermodus für den Zugriff auf eine Zuordnung wird die dxgkDdiAcquireSwizzlingRange-Funktion 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 Schwarmbereich freizugeben, wenn eine Zuordnung entfernt oder zerstört wird oder wenn eine andere Zuordnung eine Blende erfordert. Eine Zuordnung kann einer beliebigen Anzahl von Schwarmbereichen zugeordnet werden (z. B. eine Blende pro MIP-Ebene).

Die Anzahl der swizzling-Bereiche, die ein Adapter unterstützt, wird vom Treiber in der NumberOfSwizzlingRanges Member der DXGK_DRIVERCAPS Struktur verfügbar gemacht, wenn die DxgkDdiQueryAdapterInfo--Funktion des Treibers aufgerufen wird. Alle Bereiche sind gleich (d. a. ein beliebiger Bereich kann sich entwizzle oder bis zu einem beliebigen Typ von Swizzling oder Tiling) befinden. Der Videospeicher-Manager arbitrat die verfügbaren Swizzling-Bereiche zwischen allen Anwendungen, die sie benötigen.

Der Treiber muss speicherzuordnungsfähige E/A (MMIO) verwenden, um einen Schwarmbereich einzurichten. Diese Schwarmbereichszugriffe dürfen die Ausführung der GPU nicht beeinträchtigen (d. a. die GPU darf nicht im Leerlauf sein, wenn DxgkDdiAcquireSwizzlingRange aufgerufen wird).

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

Wenn die GPU swizzling-Bereiche unterstützt, die CPU-Zugriffe auf nicht CPU zugängliche Speichersegmente oder Systemspeicher umleiten, kann der Anzeigetreiber für den Benutzermodus die Kombination aus AcquireAperture und UseAlternateVA Bitfeldflaggen im Flags Member der D3DDDICB_LOCK Struktur in einem Aufruf der pfnLockCb--Funktion festlegen, um die Zuordnung zu sperren. In diesem Fall ruft der Videospeicher-Manager die DxgkDdiAcquireSwizzlingRange-Funktion des Anzeigeminiporttreibers auf, um einen Schwarmbereich für die Zuordnung zu erhalten, auch wenn sich die Zuordnung in einem nicht CPU-zugänglichen Speichersegment oder einem Blendensegment befindet. Swizzling-Bereiche sind einigen GPU-Ressourcen (z. B. PCI-Blendenbereichen) zugeordnet, die der Treiber verwaltet und nicht vom Videospeicher-Manager verwaltet oder berücksichtigt wird.

Ein Aufruf von DxgkDdiAcquireSwizzlingRange zum Abrufen eines Schwarmbereichs kann fehlschlagen, da eine vom Treiber verwaltete Ressource nicht mehr ausgeführt wurde. 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 STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE von DxgkDdiAcquireSwizzlingRangezurückgegeben wird. Der Videospeicher-Manager versucht als Nächstes, einen derzeit verwendeten Schwarmbereich freizugeben, und ruft dann die DxgkDdiAcquireSwizzlingRange Funktion erneut auf, um den neuen Schwenkbereich einzurichten. Wenn alle Swizzlingbereiche freigegeben werden und der Treiber immer noch mit STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE fehlschlägt, kann der Videospeicher-Manager keinen Schwarmbereich für die Zuordnung abrufen.

DxgkDdiAcquireSwizzlingRange sollte seitenfähig gemacht werden.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows Vista
Zielplattform- Desktop
Header- d3dkmddi.h
IRQL- PASSIVE_LEVEL

Siehe auch

D3DDDICB_LOCK

DXGKARG_ACQUIRESWIZZLINGRANGE

DXGK_DRIVERCAPS

DxgkDdiAddDevice

DxgkDdiCreateAllocation-

DxgkDdiQueryAdapterInfo

DxgkDdiReleaseSwizzlingRange

pfnLockCb