DXGKARG_PATCH Struktur (d3dkmddi.h)

Die DXGKARG_PATCH-Struktur beschreibt einen DMA-Puffer (Direct Memory Access), der Patching erfordert (d. a. die Zuweisung physischer Adressen erfordert).

Syntax

typedef struct _DXGKARG_PATCH {
  union {
    [in] HANDLE hDevice;
    [in] HANDLE hContext;
  };
  [in] UINT                           DmaBufferSegmentId;
  [in] PHYSICAL_ADDRESS               DmaBufferPhysicalAddress;
  [in] VOID                           *pDmaBuffer;
  [in] UINT                           DmaBufferSize;
  [in] UINT                           DmaBufferSubmissionStartOffset;
  [in] UINT                           DmaBufferSubmissionEndOffset;
  [in] VOID                           *pDmaBufferPrivateData;
  [in] UINT                           DmaBufferPrivateDataSize;
  [in] UINT                           DmaBufferPrivateDataSubmissionStartOffset;
  [in] UINT                           DmaBufferPrivateDataSubmissionEndOffset;
  [in] const DXGK_ALLOCATIONLIST      *pAllocationList;
  [in] UINT                           AllocationListSize;
  [in] const D3DDDI_PATCHLOCATIONLIST *pPatchLocationList;
  [in] UINT                           PatchLocationListSize;
  [in] UINT                           PatchLocationListSubmissionStart;
  [in] UINT                           PatchLocationListSubmissionLength;
  [in] UINT                           SubmissionFenceId;
  [in] DXGK_PATCHFLAGS                Flags;
  [in] UINT                           EngineOrdinal;
} DXGKARG_PATCH;

Member

[in] hDevice

Wenn ein Treiber nicht mit mehreren Engines kompatibel ist (d. h. der Treiber unterstützt die Kontexterstellung nicht), ein Handle für das Anzeigegerät (Grafikkontext), von dem die Übermittlungsanforderung stammt. Ein Gerätehandle wird für die DxgkDdiPatch-Funktion des Treibers in der Union bereitgestellt, die DXGKARG_PATCH enthält.

Bei einigen Pagingvorgängen ist hDeviceNULL (z. B. Pagingvorgänge, die den Inhalt des gesamten Framepuffers während der Energieverwaltung entfernen). Pagingvorgänge werden durch das Bitfeldflag Paging im Flags-Element angegeben.

[in] hContext

Wenn der Treiber mehrere Engines kennt (d. h. der Treiber unterstützt die Kontexterstellung), ein Handle für den Gerätekontext, von dem die Übermittlungsanforderung stammt. Ein Kontexthandle wird für die DxgkDdiPatch-Funktion des Treibers in der Union bereitgestellt, die DXGKARG_PATCH enthält.

Bei einigen Pagingvorgängen ist hContextNULL (z. B. Pagingvorgänge, die den Inhalt des gesamten Framepuffers während der Energieverwaltung entfernen). Pagingvorgänge werden durch das Bitfeldflag Paging im Flags-Element angegeben.

[in] DmaBufferSegmentId

Der Bezeichner des Speichersegments, in dem der DMA-Puffer ausgelagert wurde.

Der Bezeichner kann 0 sein, wenn der Treiber angegeben hat, den DMA-Puffer nicht dem Segment zuzuordnen, indem er den DmaBufferSegmentSet-Member der DXGK_CONTEXTINFO-Struktur in einem Aufruf der DxgkDdiCreateContext-Funktion des Treibers auf 0 festlegt. Wenn DmaBufferSegmentId 0 ist, wurde der DMA-Puffer als zusammenhängender Block des Systemspeichers zugeordnet.

[in] DmaBufferPhysicalAddress

Ein PHYSICAL_ADDRESS Datentyp (definiert als LARGE_INTEGER), der die physische Adresse angibt, in der der DMA-Puffer ausgelagert wurde.

Wenn DmaBufferSegmentId null ist, ist DmaBufferPhysicalAddress die physische Adresse im Systemspeicher, an der sich der DMA-Puffer befindet.

Wenn DmaBufferSegmentId nonzero ist, ist DmaBufferPhysicalAddress die physische Segmentadresse für den DMA-Puffer (d. h. DXGK_SEGMENTDESCRIPTOR. BaseAddress + DmaBuffer.SegmentOffset).

Beachten Sie, dass sich DmaBufferPhysicalAddress immer auf den Anfang des DMA-Puffers bezieht, auch wenn der Treiber möglicherweise erforderlich ist, um einen Abschnitt des DMA-Puffers zu patchen oder zu übermitteln, der nicht den Anfang des DMA-Puffers enthält (das heißt, wenn der DmaBufferSubmissionStartOffset-Member nichtzero ist).

[in] pDmaBuffer

Ein Zeiger auf den Anfang des DMA-Puffers (also die virtuelle Adresse des Anfangs des DMA-Puffers).

[in] DmaBufferSize

Die Größe des DMA-Puffers in Bytes, auf den pDmaBuffer verweist.

Beachten Sie, dass DmaBufferSize die gesamte Länge des DMA-Puffers darstellt. Die Anforderung zum Patchen oder Übermitteln kann sich jedoch nur auf einen Teil des DMA-Puffers beziehen.

[in] DmaBufferSubmissionStartOffset

Der Offset in Bytes vom Anfang des DMA-Puffers, den pDmaBuffer angibt, bis zum Anfang des Teils des DMA-Puffers, der patchen oder übermitteln muss. Der Offset, der zur Patchzeit empfangen wird, entspricht dem Offset, der zur Übermittlungszeit empfangen wird.

[in] DmaBufferSubmissionEndOffset

Der Offset in Bytes vom Anfang des DMA-Puffers, den pDmaBuffer angibt, bis zum Ende des Teils des DMA-Puffers, der patchen oder übermitteln muss. Der Offset, der zur Patchzeit empfangen wird, entspricht dem Offset, der zur Übermittlungszeit empfangen wird.

[in] pDmaBufferPrivateData

Ein Zeiger auf die vom Treiber ansässigen privaten Daten, die dem DMA-Puffer zugeordnet sind, auf den pDmaBuffer verweist.

Für Pagingvorgänge wird ein einzelner Pagingpuffer für mehrere unabhängige Übermittlungen verwendet. In diesem Szenario kann der Treiber durch Zurückgeben des entsprechenden datenzeiger privaten Treibers in einem Aufruf der DxgkDdiBuildPagingBuffer-Funktion angeben, dass er entweder einen privaten Treiberdatenbereich für alle Übermittlungen oder einen für jede Übermittlung hat.

[in] DmaBufferPrivateDataSize

Die Größe der privaten Treiberdaten in Bytes bei pDmaBufferPrivateData.

Beachten Sie, dass DmaBufferPrivateDataSize die gesamte Länge des privaten Treiberdatenpuffers darstellt. Der Teil, der der aktuellen Übermittlung zugeordnet ist, kann jedoch kleiner sein.

[in] DmaBufferPrivateDataSubmissionStartOffset

Der Offset in Bytes vom Anfang des privaten DMA-Puffers, den pDmaBufferPrivateData angibt, bis zum Anfang des Teils der privaten Daten, der der aktuellen Übermittlung zugeordnet ist. DmaBufferPrivateDataSubmissionStartOffset ist für eine Nicht-Anforderung immer 0.

[in] DmaBufferPrivateDataSubmissionEndOffset

Der Offset in Bytes vom Anfang des DMA-Puffers privater Daten, den pDmaBufferPrivateData angibt, bis zum Ende des Teils der privaten Daten, der der aktuellen Übermittlung zugeordnet ist.

[in] pAllocationList

Ein Zeiger auf ein Array von DXGK_ALLOCATIONLIST Strukturen für die Liste der Zuordnungen, die dem DMA-Puffer zugeordnet ist, auf den pDmaBuffer verweist.

Bei Pagingvorgängen ist pAllocationListNULL , da Pagingpuffer nicht Zuordnungslisten zugeordnet sind.

[in] AllocationListSize

Die Anzahl der Elemente im Array, die pAllocationList angibt.

Beachten Sie, dass AllocationListSize die Gesamtgröße der Zuordnungsliste darstellt. Der Teil der Zuordnungsliste, der der aktuellen Übermittlung zugeordnet ist, kann jedoch kleiner sein.

Beachten Sie, dass für Pagingvorgänge AllocationListSize null ist, da Pagingpuffer nicht Zuordnungslisten zugeordnet sind.

[in] pPatchLocationList

Ein Zeiger auf ein Array von D3DDDI_PATCHLOCATIONLIST Strukturen für die Liste der Patchspeicherorte, die dem DMA-Puffer zugeordnet ist, auf den pDmaBuffer verweist.

Beachten Sie, dass das Array mit einem Element beginnen kann, das sich vor dem Bereich befindet, der zum Patchen des DMA-Puffers verwendet wird.

Bei Pagingvorgängen ist pPatchLocationListNULL , da Pagingpuffer nicht Mit Patchspeicherlisten verknüpft sind.

[in] PatchLocationListSize

Die Anzahl der Elemente im Array, die pPatchLocationList angibt.

Beachten Sie, dass PatchLocationListSize die Gesamtgröße der Patchspeicherortliste darstellt. Der Bereich, den der Treiber verarbeiten muss, ist jedoch in der Regel kleiner.

Bei Pagingvorgängen ist PatchLocationListSize null, da Pagingpuffer nicht Mit Patch-Location-Listen verknüpft sind.

[in] PatchLocationListSubmissionStart

Der Index des ersten Elements in der Patch-Location-Liste, das pPatchLocationList angibt, das verarbeitet werden muss.

Für Pagingvorgänge ist PatchLocationListSubmissionStart 0.

[in] PatchLocationListSubmissionLength

Die Anzahl der Elemente in der Patch-Location-Liste, die pPatchLocationList angibt, die verarbeitet werden müssen.

Für Pagingvorgänge ist PatchLocationListSubmissionLength 0.

[in] SubmissionFenceId

Ein eindeutiger Bezeichner, den der Treiber in den Fence-Befehl am Ende des DMA-Puffers schreiben kann. Weitere Informationen zu diesem Bezeichnertyp finden Sie unter Bereitstellen von Zaunbezeichnern.

[in] Flags

Eine DXGK_PATCHFLAGS-Struktur , die Informationen zum DMA-Puffer identifiziert, für den patchen erforderlich ist.

[in] EngineOrdinal

Für die zukünftige Verwendung reserviert.

Bemerkungen

Der Anzeigeminiporttreiber gibt ein Array im pAllocationList-Member einer DXGKARG_PRESENT - oder DXGKARG_RENDER-Struktur aus seiner DxgkDdiPresent - oder DxgkDdiRender-Funktion zurück, nachdem er den Befehlspuffer in einen DMA-Puffer (Direct Memory Access) übersetzt hat. Der Videospeicher-Manager weist den PhysicalAddress-Membern der DXGK_ALLOCATIONLIST Strukturen im Array physische Adressen zu und übergibt dieses Array an die DxgkDdiPatch-Funktion des Treibers. DxgkDdiPatch-Patches werden im DMA-Puffer mit diesen physischen Adressen platziert.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista
Kopfzeile d3dkmddi.h (einschließlich D3dkmddi.h)

Weitere Informationen

D3DDDI_PATCHLOCATIONLIST

DXGKARG_PRESENT

DXGKARG_RENDER

DXGK_ALLOCATIONLIST

DXGK_CONTEXTINFO

DXGK_PATCHFLAGS

DxgkDdiBuildPagingBuffer

DxgkDdiCreateContext

DxgkDdiPatch

DxgkDdiPresent

DxgkDdiRender