DXGKARG_SUBMITCOMMAND Struktur (d3dkmddi.h)

Die DXGKARG_SUBMITCOMMAND-Struktur beschreibt den DMA-Puffer (Direct Memory Access), den ein Anzeigeminiporttreiber während eines Aufrufs von DxgkDdiSubmitCommand an die Hardwarebefehlsausführungseinheit sendet.

Syntax

typedef struct _DXGKARG_SUBMITCOMMAND {
  union {
    HANDLE hDevice;
    HANDLE hContext;
  };
  UINT                           DmaBufferSegmentId;
  PHYSICAL_ADDRESS               DmaBufferPhysicalAddress;
  UINT                           DmaBufferSize;
  UINT                           DmaBufferSubmissionStartOffset;
  UINT                           DmaBufferSubmissionEndOffset;
  VOID                           *pDmaBufferPrivateData;
  UINT                           DmaBufferPrivateDataSize;
  UINT                           DmaBufferPrivateDataSubmissionStartOffset;
  UINT                           DmaBufferPrivateDataSubmissionEndOffset;
  UINT                           SubmissionFenceId;
  D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId;
  D3DDDI_FLIPINTERVAL_TYPE       FlipInterval;
  DXGK_SUBMITCOMMANDFLAGS        Flags;
  UINT                           EngineOrdinal;
  D3DGPU_VIRTUAL_ADDRESS         DmaBufferVirtualAddress;
  UINT                           NodeOrdinal;
} DXGKARG_SUBMITCOMMAND;

Member

hDevice

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

Bei einigen Pagingvorgängen ist hDevice NULL (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.

hContext

[in] 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 DxgkDdiSubmitCommand-Funktion des Treibers in der Union bereitgestellt, die DXGKARG_SUBMITCOMMAND enthält.

Bei einigen Pagingvorgängen ist hContext NULL (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.

DmaBufferSegmentId

[in] Der Bezeichner des Speichersegments, in das der DMA-Puffer ausgelagert wurde.

Der Bezeichner kann 0 sein, wenn der Treiber angegeben hat, dass er den DMA-Puffer nicht dem Segment zuordnen soll, indem er das DmaBufferSegmentSet-Element 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.

DmaBufferPhysicalAddress

[in] 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 nichtzero ist, ist DmaBufferPhysicalAddress die physische Segmentadresse für den DMA-Puffer. Das heißt, die Adresse verweist auf eine physische Adresse des Blendensegments , bei dem es sich um einen zusammenhängenden Adressraum handelt, der im physischen Speicher definiert ist (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).

DmaBufferSize

[in] Die Größe des DMA-Puffers in Bytes.

DmaBufferSize stellt die gesamte Länge des DMA-Puffers dar. Die Anforderung zum Patchen oder Übermitteln kann sich jedoch nur auf einen Teil des DMA-Puffers beziehen.

DmaBufferSubmissionStartOffset

[in] Der Offset in Bytes vom Anfang des DMA-Puffers bis zum Anfang des Teils des DMA-Puffers, für den ein Patchen oder Übermitteln erforderlich ist. Der Offset, der zur Patchzeit empfangen wird, entspricht dem Offset, der zur Übermittlungszeit empfangen wird.

DmaBufferSubmissionEndOffset

[in] Der Offset in Bytes vom Anfang des DMA-Puffers 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.

pDmaBufferPrivateData

[in] Ein Zeiger auf die treiberresidenten privaten Daten, die dem DMA-Puffer zugeordnet sind, der während der DxgkDdiRender-, DxgkDdiPresent- oder DxgkDdiPatch-Funktion gefüllt wurde.

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

DmaBufferPrivateDataSize

[in] Die Größe der privaten Treiberdaten, auf die pDmaBufferPrivateData verweist, in Bytes.

DmaBufferPrivateDataSize stellt die gesamte Länge des privaten Treiberdatenpuffers dar. Der Teil, der der aktuellen Übermittlung zugeordnet ist, kann jedoch kleiner sein.

KMD sollte die privaten Daten nicht überprüfen, wenn dieser Member 0 ist.

DmaBufferPrivateDataSubmissionStartOffset

[in] 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.

DmaBufferPrivateDataSubmissionEndOffset

[in] 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.

SubmissionFenceId

[in] Ein eindeutiger Bezeichner, den der Treiber in den Fence-Befehl im Ringpuffer schreiben kann. Hierbei handelt es sich um den Puffer, in dem DMA-Puffer für die Ausführung der Grafikverarbeitungseinheit (GRAPHICS Processing Unit, GPU) in die Warteschlange gestellt werden. Weitere Informationen zu diesen Bezeichnertypen finden Sie unter Bereitstellen von Zaunbezeichnern.

VidPnSourceId

[in] Die nullbasierte Identifikationsnummer der Videoquelle in einem Pfad einer VidPN-Topologie (Video Present Network) für einen Flip-Vorgang. Dieses Element ist nur gültig, wenn das Bitfeldflag Flip oder FlipWithNoWait im Flags-Element festgelegt ist.

FlipInterval

[in] Ein D3DDDI_FLIPINTERVAL_TYPE typisierter Wert, der das Flipintervall angibt (d. a. wenn die Synchronisierung nach null, 1, zwei, drei oder vier vertikalen Synchronisierungen erfolgt). FlipInterval ist nur gültig, wenn das Flip-Bitfeldflag (true) im Flags-Element festgelegt ist.

Flags

[in] Eine DXGK_SUBMITCOMMANDFLAGS Struktur, die Informationen zum zu übermittelnden DMA-Puffer identifiziert.

EngineOrdinal

[in] Reserviert für zukünftige Verwendung.

DmaBufferVirtualAddress

Dieser Member ist reserviert und sollte auf null festgelegt werden. Wird ab Windows 7 unterstützt.

NodeOrdinal

Der nullbasierte Index des Knotens, für den der Kontext erstellt wird. Gibt den Knoten an, wenn der Kontext NULL ist. Wird ab Windows 8 unterstützt.

Hinweise

Die DxgkDdiSubmitCommand-Funktion des Anzeigeminiporttreibers muss beachten, dass mehrere Prozesse gleichzeitig auf das Geräteobjekt zugreifen können, das das hDevice-Element angibt.

Anforderungen

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

Weitere Informationen

D3DDDI_FLIPINTERVAL_TYPE

DXGK_CONTEXTINFO

DXGK_SUBMITCOMMANDFLAGS

DxgkCbNotifyDpc

DxgkCbNotifyInterrupt

DxgkDdiBuildPagingBuffer

DxgkDdiCreateContext

DxgkDdiPatch

DxgkDdiPresent

DxgkDdiRender

DxgkDdiSubmitCommand