Freigeben über


DXGKDDI_RENDERKM Rückruffunktion (d3dkmddi.h)

Für Grafikkarten, die die GDI-Hardwarebeschleunigung unterstützen, generiert die DxgkDdiRenderKm-Funktion einen DMA-Puffer (Direct Memory Access) aus dem Befehlspuffer, den der Kernelmodus Canonical Display Driver (CDD) übergeben hat.

Syntax

DXGKDDI_RENDERKM DxgkddiRenderkm;

NTSTATUS DxgkddiRenderkm(
  [in]     IN_CONST_HANDLE hContext,
  [in/out] INOUT_PDXGKARG_RENDER pRenderKmArgs
)
{...}

Parameter

[in] hContext

Ein Handle für den Gerätekontext für die DMA- und Befehlspuffer. Die DxgkDdiCreateContext-Funktion des Anzeigeminiporttreibers hat dieses Handle zuvor im hContext-Element der DXGKARG_CREATECONTEXT-Struktur zurückgegeben, auf die der pCreateContext-Parameter von DxgkDdiCreateContext verweist.

Wenn der Treiber die Kontexterstellung nicht unterstützt, ersetzt das Microsoft DirectX-Grafikkernsubsystem das Handle durch den Kontext durch ein Handle für das Gerät. Die DxgkDdiCreateDevice-Funktion des Anzeigeminiporttreibers hat zuvor das Gerätehandle im hDevice-Element der DXGKARG_CREATEDEVICE-Struktur zurückgegeben, auf die der pCreateDevice-Parameter von DxgkDdiCreateDevice verweist.

[in/out] pRenderKmArgs

Ein Zeiger auf eine DXGKARG_RENDER Struktur, die Informationen zum DMA-Puffer und einen formatierten Befehlspuffer enthält.

Wenn der Anzeigeminiporttreiber die GDI-Hardwarebeschleunigung unterstützt, verweist pRenderKmArgs-pCommand> auf den DXGK_RENDERKM_COMMAND Befehlspuffer.

Der Treiber muss den Eingabebefehlspuffer in DMA-Pufferbefehle übersetzen und die Patchspeicherortliste erstellen.

Rückgabewert

DxgkDdiRenderKm gibt einen der folgenden Werte zurück:

Rückgabecode Beschreibung
STATUS_SUCCESS Der gesamte Befehlspuffer wurde übersetzt.
STATUS_NO_MEMORY DxgkDdiRenderKm konnte keinen Speicher zuordnen, der für die Vervollständigung erforderlich war.
STATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER Der aktuelle DMA-Puffer ist erschöpft.
STATUS_INVALID_PARAMETER DxgkDdiRenderKm erkannte Befehlsparameter, die Grafikhardware nicht unterstützen konnte; Die Grafikhardware kann jedoch die Anweisungen selbst unterstützen. Der Treiber ist nicht erforderlich, um diesen Fehlercode zurückzugeben. Stattdessen kann STATUS_ILLEGAL_INSTRUCTION zurückgegeben werden, wenn nicht unterstützte Befehlsparameter erkannt werden.
STATUS_INVALID_USER_BUFFER DxgkDdiRenderKm erkannte, dass Daten oder Anweisungen unter- oder überlaufen wurden. Das heißt, der Treiber erhielt weniger oder mehr Anweisungen oder Daten als erwartet. Der Treiber ist nicht erforderlich, um diesen Fehlercode zurückzugeben. Stattdessen kann STATUS_ILLEGAL_INSTRUCTION zurückgegeben werden, wenn Daten oder Anweisungen erkannt werden, die unter- oder überlaufen werden.
STATUS_INVALID_HANDLE DxgkDdiRenderKm hat ein ungültiges Handle im Befehlspuffer erkannt.
STATUS_GRAPHICS_GPU_EXCEPTION_ON_DEVICE Der Anzeigeminiporttreiber hat einen Fehler im DMA-Stream erkannt. Das Grafikkontextgerät befindet sich in einem verlorenen Zustand, wenn der Treiber diesen Fehlercode zurückgibt.

Hinweise

Das DirectX-Grafikkernsubsystem ruft die DxgkDdiRenderKm-Funktion des Anzeigeminiporttreibers auf, um einen DMA-Puffer aus dem Befehlspuffer zu generieren, der vom vom Betriebssystem bereitgestellten CdD (Canonical Display Driver) im Kernelmodus übergeben wird. Zusätzlich zum Ausgabe-DMA-Puffer sollte der Anzeigeminiporttreiber auch eine Liste der Ausgabepatchspeicherorte generieren. Der Videospeicher-Manager verwendet diese Liste, um DMA-Puffer entsprechend aufzuteilen und zu patchen.

Der Zugriff auf die Kernelpuffer erfordert keinen Codeschutz try/except .

Der Anzeigeminiporttreiber muss keine Informationen verwenden, die der CDD bereitstellt, wenn er die Informationen optimaler neu erstellen kann. Wenn der pRender-pPatchLocationListIn-Member> beispielsweise leer ist, weil der Benutzermodusanzeigetreiber keine Eingabepatch-Location-Liste bereitgestellt hat, kann der Anzeigeminiporttreiber stattdessen den Inhalt des pRender-pPatchLocationListOut-Members> basierend auf dem Inhalt des Befehlspuffers generieren.

Zusätzlich zum gerätespezifischen Handle stellt das DirectX-Grafikkernsubsystem dem Display-Miniporttreiber die letzte bekannte GPU-Segmentadresse für jede Zuordnung zur Verfügung. Wenn der Zuordnungsindex N derzeit ausgelagert ist, legt das DirectX-Grafikkernsubsystem das SegmentId-Element des Nth-Elements des pAllocationList-Elements von DXGKARG_RENDER auf 0 fest. Wenn das SegmentId-Element des Nth-Elements der Zuordnungsliste nicht auf Null festgelegt ist, muss der Anzeigeminiporttreiber den generierten DMA-Puffer mit den angegebenen Segmentadresseninformationen patchen, bevor das DirectX-Grafikkernsubsystem die DxgkDdiPatch-Funktion aufruft, um den DMA-Puffer erneut zu patchen. Der Treiber muss dieses anfängliche Patching ausführen, wenn er angefordert wird, da das DirectX-Grafikkernsubsystem möglicherweise die DxgkDdiPatch-Funktion für einen DMA-Puffer nicht aufruft, den der Treiber ordnungsgemäß gepatcht haben sollte.

Obwohl die DxgkDdiRenderKm-Funktion des Treibers das anfängliche DMA-Pufferpatching wie weiter oben beschrieben ausführt, muss der Treiber dennoch alle Verweise auf Zuordnungen in die Ausgabepatch-Location-Liste einfügen, die das pPatchLocationListOut-Mitglied von DXGKARG_RENDER angibt. Diese Liste muss alle Verweise enthalten, da sich die Adressen der Zuordnungen ändern können, bevor der DMA-Puffer an die GPU übermittelt wird. Daher ruft das DirectX-Grafikkernsubsystem die DxgkDdiPatch-Funktion auf, um den DMA-Puffer erneut zu patchen.

Zum Aufheben der Bindung einer Zuordnung kann der Anzeigeminiporttreiber ein Element in der Zuordnungsliste angeben, das auf ein NULL-Handle verweist, und dann ein Patch-Location-Element verwenden, das auf diese NULL-Zuordnung verweist. In der Regel sollte der Treiber das erste Element der Zuordnungsliste (Element 0) als NULL-Element verwenden.

Wenn der Anzeigeminiporttreiber im garantierten Vertrags-DMA-Modus einen Befehlspuffer in einen DMA-Puffer übersetzt, muss der CDD genügend Ressourcen für den Übersetzungsbefehl garantieren. Wenn nicht genügend Ressourcen für die Übersetzung vorhanden sind, muss der Anzeigeminiporttreiber den DMA-Puffer ablehnen. Weitere Informationen finden Sie unter Verwenden des DMA-Puffermodells für garantierte Verträge.

DxgkDdiRenderKm sollte seitenfähig gemacht werden.

Anforderungen

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

Weitere Informationen

D3DDDI_ALLOCATIONLIST

DXGKARG_CREATECONTEXT

DXGKARG_CREATEDEVICE

DXGK_ALLOCATIONLIST

DXGK_RENDERKM_COMMAND

DxgkDdiCreateContext

DxgkDdiCreateDevice

DxgkDdiOpenAllocation

DxgkDdiPatch

DxgkDdiRender