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) |