Freigeben über


DXGKARG_PATCH Struktur (d3dkmddi.h)

In der DXGKARG_PATCH-Struktur wird ein DMA-Puffer (Direct Memory Access) beschrieben, der Patching erfordert (d. a. die Zuordnung physischer Adressen).

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;

Angehörige

[in] hDevice

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

Bei einigen Auslagerungsvorgängen ist hDevice-NULL- (z. B. Auslagerungsvorgänge, die den Inhalt des gesamten Framepuffers während der Energieverwaltung entfernen). Pagingvorgänge werden durch das Paging- Bitfeld-Flag im Flags Member angegeben.

[in] hContext

Wenn der Treiber mehrere Engines kennt (d. h. der Treiber unterstützt die Kontexterstellung), wird ein Handle für den Gerätekontext ausgeführt, 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 Auslagerungsvorgängen ist hContext-NULL- (z. B. Pagingvorgänge, die den Inhalt des gesamten Framepuffers während der Energieverwaltung entfernen). Pagingvorgänge werden durch das Paging- Bitfeld-Flag im Flags Member angegeben.

[in] DmaBufferSegmentId

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

Der Bezeichner kann null sein, wenn der Angegebene Treiber den DMA-Puffer nicht in das Segment zuordnen soll, indem der DmaBufferSegmentSet Member der DXGK_CONTEXTINFO-Struktur in einem Aufruf der DxgkDdiCreateContext--Funktion des Treibers auf 0 festgelegt wird. Wenn DmaBufferSegmentId null ist, wurde der DMA-Puffer als zusammenhängender Speicherblock zugewiesen.

[in] DmaBufferPhysicalAddress

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

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

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

Beachten Sie, dass DmaBufferPhysicalAddress immer auf den Anfang des DMA-Puffers verweist, auch wenn der Treiber möglicherweise zum Patchen oder Übermitteln eines Abschnitts des DMA-Puffers erforderlich ist, der nicht den Anfang des DMA-Puffers enthält (d. r., wenn der DmaBufferSubmissionStartOffset Member ungleich Null ist).

[in] pDmaBuffer

Ein Zeiger auf den Anfang des DMA-Puffers (d. a. 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 jedoch nur auf einen Teil des DMA-Puffers verweisen.

[in] DmaBufferSubmissionStartOffset

Der Offset (in Byte) vom Anfang des DMA-Puffers, der pDmaBuffer angibt, an den 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 Byte) vom Anfang des DMA-Puffers, der 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 privaten Treiberdaten, die dem DMA-Puffer zugeordnet sind, auf den pDmaBuffer verweist.

Bei Pagingvorgängen wird ein einzelner Pagingpuffer für mehrere unabhängige Übermittlungen verwendet. In diesem Szenario kann der Treiber angeben , indem er den entsprechenden privaten Treiberdatenzeiger in einem Aufruf seiner DxgkDdiBuildPagingBuffer--Funktion zurückgibt, um entweder einen einzelnen privaten Treiberdatenbereich für alle Übermittlungen oder eine für jede Übermittlung zu haben.

[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, ist jedoch möglicherweise kleiner.

[in] DmaBufferPrivateDataSubmissionStartOffset

Der Offset (in Byte) vom Anfang der privaten DMA-Pufferdaten, die pDmaBufferPrivateData gibt den Anfang des Teils der privaten Daten an, der der aktuellen Übermittlung zugeordnet ist. DmaBufferPrivateDataSubmissionStartOffset ist immer null für eine nicht zuordnende Anforderung.

[in] DmaBufferPrivateDataSubmissionEndOffset

Der Offset (in Byte) vom Anfang der privaten DMA-Pufferdaten, die pDmaBufferPrivateData angibt, bis zum Ende des Teils der privaten Daten, die der aktuellen Übermittlung zugeordnet sind.

[in] pAllocationList

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

Bei Pagingvorgängen ist "pAllocationList"-NULL-, 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 Auslagerungsvorgä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 sind , 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 pPatchLocationList-NULL-, da Pagingpuffer nicht mit Patchspeicherortlisten 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 Auslagerungsvorgängen ist PatchLocationListSize null, da Pagingpuffer nicht mit Patchspeicherortlisten verknüpft sind.

[in] PatchLocationListSubmissionStart

Der Index des ersten Elements in der Patchspeicherortliste, das pPatchLocationList angibt, dass verarbeitet werden muss.

Bei Pagingvorgängen ist PatchLocationListSubmissionStart null.

[in] PatchLocationListSubmissionLength

Die Anzahl der Elemente in der Patchspeicherortliste, die pPatchLocationList angibt, dass verarbeitet werden muss.

Bei Pagingvorgängen ist PatchLocationListSubmissionLength null.

[in] SubmissionFenceId

Ein eindeutiger Bezeichner, den der Treiber am Ende des DMA-Puffers in den Zaunbefehl schreiben kann. Weitere Informationen zu diesem Bezeichnertyp finden Sie unter Supplying Fence Identifiers.

[in] Flags

Eine DXGK_PATCHFLAGS Struktur, die Informationen zum DMA-Puffer identifiziert, die Patching erfordert.

[in] EngineOrdinal

Reserviert für die zukünftige Verwendung.

Bemerkungen

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

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows Vista
Header- d3dkmddi.h (einschließlich D3dkmddi.h)

Siehe auch

D3DDDI_PATCHLOCATIONLIST

DXGKARG_PRESENT

DXGKARG_RENDER

DXGK_ALLOCATIONLIST

DXGK_CONTEXTINFO

DXGK_PATCHFLAGS

DxgkDdiBuildPagingBuffer-

DxgkDdiCreateContext-

DxgkDdiPatch-

DxgkDdiPresent-

DxgkDdiRender