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