DXGKARG_SUBMITCOMMAND 구조체(d3dkmddi.h)

DXGKARG_SUBMITCOMMAND 구조는 DxgkDdiSubmitCommand를 호출하는 동안 디스플레이 미니포트 드라이버가 하드웨어 명령 실행 단위에 제출하는 DMA(직접 메모리 액세스) 버퍼를 설명합니다.

구문

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;

멤버

hDevice

[in] 드라이버가 다중 엔진을 인식하지 않는 경우(즉, 드라이버가 컨텍스트 생성을 지원하지 않음) hDevice 는 제출 요청이 시작된 디스플레이 디바이스(그래픽 컨텍스트)에 대한 핸들입니다. 디바이스 핸들은 DXGKARG_SUBMITCOMMAND 포함된 공용 구조체에서 드라이버의 DxgkDdiSubmitCommand 함수에 제공됩니다.

일부 페이징 작업의 경우 hDevice 는 NULL입니다(예: 전원 관리 중에 전체 프레임 버퍼의 콘텐츠를 제거한 페이징 작업). 페이징 작업은 Flags 멤버의 페이징 비트 필드 플래그로 표시됩니다.

hContext

[in] 드라이버가 다중 엔진을 인식하는 경우(즉, 드라이버가 컨텍스트 만들기를 지원함), 제출 요청이 시작된 디바이스 컨텍스트에 대한 핸들입니다. 컨텍스트 핸들은 DXGKARG_SUBMITCOMMAND 포함된 공용 구조체에서 드라이버의 DxgkDdiSubmitCommand 함수에 제공됩니다.

일부 페이징 작업의 경우 hContext 는 NULL입니다(예: 전원 관리 중에 전체 프레임 버퍼의 콘텐츠를 제거한 페이징 작업). 페이징 작업은 Flags 멤버의 페이징 비트 필드 플래그로 표시됩니다.

DmaBufferSegmentId

[in] DMA 버퍼가 페이징된 메모리 세그먼트의 식별자입니다.

드라이버가 드라이버의 DxgkDdiCreateContext 함수를 호출할 때 DXGK_CONTEXTINFO 구조체의 DmaBufferSegmentSet 멤버를 0으로 설정하여 DMA 버퍼를 세그먼트에 매핑하지 않도록 표시된 경우 식별자는 0일 수 있습니다. DmaBufferSegmentId가 0이면 DMA 버퍼가 시스템 메모리의 연속 블록으로 할당되었습니다.

DmaBufferPhysicalAddress

[in] DMA 버퍼가 페이징된 실제 주소를 나타내는 PHYSICAL_ADDRESS 데이터 형식(LARGE_INTEGER 정의됨)입니다.

DmaBufferSegmentId가 0이면 DmaBufferPhysicalAddress는 DMA 버퍼가 있는 시스템 메모리의 실제 주소입니다.

DmaBufferSegmentId가 0이 아닌 경우 DmaBufferPhysicalAddress는 DMA 버퍼의 세그먼트 물리적 주소입니다. 즉, 주소는 실제 메모리(DXGK_SEGMENTDESCRIPTOR에 정의된 연속 주소 공간인 조리개 세그먼트의 실제 주소를 가리킵니다. BaseAddress + DmaBuffer.SegmentOffset).

DmaBufferPhysicalAddress는 드라이버가 DMA 버퍼의 시작을 포함하지 않는 DMA 버퍼의 섹션(즉, DmaBufferSubmissionStartOffset 멤버가 0이 아닌 경우)을 패치하거나 제출해야 하는 경우에도 항상 DMA 버퍼의 시작을 나타냅니다.

DmaBufferSize

[in] DMA 버퍼의 크기(바이트)입니다.

DmaBufferSize 는 DMA 버퍼의 전체 길이를 나타냅니다. 그러나 패치 또는 제출 요청은 DMA 버퍼의 일부만 참조할 수 있습니다.

DmaBufferSubmissionStartOffset

[in] DMA 버퍼의 시작부터 패치 또는 제출이 필요한 DMA 버퍼 부분의 시작 부분까지의 오프셋(바이트)입니다. 패치 시간에 수신되는 오프셋은 제출 시 수신되는 오프셋과 일치합니다.

DmaBufferSubmissionEndOffset

[in] DMA 버퍼의 시작부터 패치 또는 제출이 필요한 DMA 버퍼 부분의 끝까지 오프셋(바이트)입니다. 패치 시간에 수신되는 오프셋은 제출 시 수신되는 오프셋과 일치합니다.

pDmaBufferPrivateData

[in] DxgkDdiRender, DxgkDdiPresent 또는 DxgkDdiPatch 함수 중에 채워진 DMA 버퍼와 연결된 드라이버 상주 프라이빗 데이터에 대한 포인터 입니다.

페이징 작업의 경우 단일 페이징 버퍼가 여러 독립 제출에 사용됩니다. 이 시나리오에서 드라이버는 DxgkDdiBuildPagingBuffer 함수에 대한 호출에서 적절한 프라이빗 드라이버 데이터 포인터를 반환하여 모든 제출에 대한 단일 드라이버 프라이빗 데이터 범위 또는 각 제출에 대해 하나의 드라이버 프라이빗 데이터 범위를 갖도록 나타낼 수 있습니다.

DmaBufferPrivateDataSize

[in] pDmaBufferPrivateData 가 가리키는 프라이빗 드라이버 데이터의 크기(바이트)입니다.

DmaBufferPrivateDataSize 는 프라이빗 드라이버 데이터 버퍼의 전체 길이를 나타냅니다. 그러나 현재 제출과 연결된 부분은 더 작을 수 있습니다.

KMD는 이 멤버가 0일 때 프라이빗 데이터의 유효성을 검사해서는 안 됩니다.

DmaBufferPrivateDataSubmissionStartOffset

[in] pDmaBufferPrivateData 가 지정하는 DMA 버퍼 프라이빗 데이터의 시작부터 현재 제출과 연결된 프라이빗 데이터 부분의 시작 부분까지의 오프셋(바이트)입니다. DmaBufferPrivateDataSubmissionStartOffset 은 비페이징 요청에 대해 항상 0입니다.

DmaBufferPrivateDataSubmissionEndOffset

[in] pDmaBufferPrivateData 가 지정하는 DMA 버퍼 프라이빗 데이터의 시작부터 현재 제출과 연결된 프라이빗 데이터 부분의 끝까지의 오프셋(바이트)입니다.

SubmissionFenceId

[in] 드라이버가 링 버퍼의 펜스 명령에 쓸 수 있는 고유 식별자입니다. 이 버퍼는 GPU(그래픽 처리 장치)를 실행하기 위해 DMA 버퍼가 큐에 대기되는 버퍼입니다. 이러한 유형의 식별자에 대한 자세한 내용은 펜스 식별자 제공을 참조하세요.

VidPnSourceId

[in] 대칭 이동 작업을 위한 VidPN(비디오 현재 네트워크) 토폴로지 경로에 있는 비디오 원본의 0부터 시작하는 식별 번호입니다. 이 멤버는 Flip 또는 FlipWithNoWait 비트 필드 플래그가 Flags 멤버에 설정된 경우에만 유효합니다.

FlipInterval

[in] 대칭 이동 간격(즉, 0, 1, 2, 3 또는 4 세로 동기화 후에 대칭 이동이 발생하는 경우)을 나타내는 D3DDDI_FLIPINTERVAL_TYPE 형식의 값입니다. FlipIntervalFlags 멤버에서 Flip 비트 필드 플래그(즉, TRUE)가 설정된 경우에만 유효합니다.

Flags

[in] 제출할 DMA 버퍼에 대한 정보를 식별하는 DXGK_SUBMITCOMMANDFLAGS 구조체입니다.

EngineOrdinal

[in] 향후 사용을 위해 예약되어 있습니다.

DmaBufferVirtualAddress

이 멤버는 예약되어 있으며 0으로 설정해야 합니다. Windows 7부터 지원됩니다.

NodeOrdinal

컨텍스트가 만들어지는 노드의 인덱스(0부터 시작)입니다. 컨텍스트가 NULL일 때 노드를 식별합니다. Windows 8 부터 지원합니다.

설명

디스플레이 미니포트 드라이버의 DxgkDdiSubmitCommand 함수는 여러 프로세스가 hDevice 멤버가 동시에 지정하는 디바이스 개체에 액세스할 수 있음을 알고 있어야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista(WDDM 1.0)
머리글 d3dkmddi.h(D3dkmddi.h 포함)

추가 정보

D3DDDI_FLIPINTERVAL_TYPE

DXGK_CONTEXTINFO

DXGK_SUBMITCOMMANDFLAGS

DxgkCbNotifyDpc

DxgkCbNotifyInterrupt

DxgkDdiBuildPagingBuffer

DxgkDdiCreateContext

DxgkDdiPatch

DxgkDdiPresent

DxgkDdiRender

DxgkDdiSubmitCommand