DXGKARG_PATCH 구조체(d3dkmddi.h)

DXGKARG_PATCH 구조는 패치가 필요한 DMA(직접 메모리 액세스) 버퍼를 설명합니다(즉, 실제 주소를 할당해야 합니다).

구문

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;

멤버

[in] hDevice

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

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

[in] hContext

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

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

[in] DmaBufferSegmentId

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

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

[in] DmaBufferPhysicalAddress

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

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

DmaBufferSegmentId가 0이 아닌 경우 DmaBufferPhysicalAddress는 DMA 버퍼(즉, DXGK_SEGMENTDESCRIPTOR)의 세그먼트 물리적 주소입니다. BaseAddress + DmaBuffer.SegmentOffset).

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

[in] pDmaBuffer

DMA 버퍼의 시작 부분(즉, DMA 버퍼 시작 부분의 가상 주소)에 대한 포인터입니다.

[in] DmaBufferSize

pDmaBuffer가 가리키는 DMA 버퍼의 크기(바이트)입니다.

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

[in] DmaBufferSubmissionStartOffset

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

[in] DmaBufferSubmissionEndOffset

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

[in] pDmaBufferPrivateData

pDmaBuffer가 가리키는 DMA 버퍼와 연결된 드라이버 상주 프라이빗 데이터에 대한 포인터입니다.

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

[in] DmaBufferPrivateDataSize

pDmaBufferPrivateData의 프라이빗 드라이버 데이터의 크기(바이트)입니다.

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

[in] DmaBufferPrivateDataSubmissionStartOffset

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

[in] DmaBufferPrivateDataSubmissionEndOffset

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

[in] pAllocationList

pDmaBuffer가 가리키는 DMA 버퍼와 연결된 할당 목록에 대한 DXGK_ALLOCATIONLIST 구조의 배열에 대한 포인터입니다.

페이징 작업의 경우 페이징 버퍼가 할당 목록과 연결되지 않으므로 pAllocationListNULL 입니다.

[in] AllocationListSize

pAllocationList에서 지정하는 배열의 요소 수입니다.

AllocationListSize는 할당 목록의 총 크기를 나타냅니다. 그러나 현재 제출과 연결된 할당 목록의 부분은 더 작을 수 있습니다.

페이징 작업의 경우 페이징 버퍼가 할당 목록과 연결되지 않으므로 AllocationListSize 는 0입니다.

[in] pPatchLocationList

pDmaBuffer가 가리키는 DMA 버퍼와 연결된 패치 위치 목록에 대한 D3DDDI_PATCHLOCATIONLIST 구조체 배열에 대한 포인터입니다.

배열은 DMA 버퍼를 패치하는 데 사용되는 범위 앞에 있는 요소로 시작할 수 있습니다.

페이징 작업의 경우 페이징 버퍼가 패치 위치 목록과 연결되지 않으므로 pPatchLocationListNULL 입니다.

[in] PatchLocationListSize

pPatchLocationList가 지정하는 배열의 요소 수입니다.

PatchLocationListSize는 패치 위치 목록의 총 크기를 나타냅니다. 그러나 드라이버가 처리해야 하는 범위는 일반적으로 더 작습니다.

페이징 작업의 경우 페이징 버퍼가 패치 위치 목록과 연결되지 않으므로 PatchLocationListSize 는 0입니다.

[in] PatchLocationListSubmissionStart

pPatchLocationList가 처리해야 한다고 지정하는 패치 위치 목록의 첫 번째 요소 인덱스입니다.

페이징 작업의 경우 PatchLocationListSubmissionStart 는 0입니다.

[in] PatchLocationListSubmissionLength

pPatchLocationList가 처리해야 한다고 지정하는 패치 위치 목록의 요소 수입니다.

페이징 작업의 경우 PatchLocationListSubmissionLength 는 0입니다.

[in] SubmissionFenceId

드라이버가 DMA 버퍼 끝에 있는 펜스 명령에 쓸 수 있는 고유 식별자입니다. 이러한 유형의 식별자에 대한 자세한 내용은 펜스 식별자 제공을 참조하세요.

[in] Flags

패치가 필요한 DMA 버퍼에 대한 정보를 식별하는 DXGK_PATCHFLAGS 구조체입니다.

[in] EngineOrdinal

다음에 사용하도록 예약됩니다.

설명

디스플레이 미니포트 드라이버는 명령 버퍼를 DMA(직접 메모리 액세스) 버퍼로 변환한 후 DxgkDdiPresent 또는 DxgkDdiRender 함수에서 DXGKARG_PRESENT 또는 DXGKARG_RENDER 구조체의 pAllocationList 멤버에 있는 배열을 반환합니다. 비디오 메모리 관리자는 배열에 있는 DXGK_ALLOCATIONLIST 구조체의 PhysicalAddress 멤버에 물리적 주소를 할당하고 이 배열을 드라이버의 DxgkDdiPatch 함수에 전달합니다. DxgkDdiPatch 패치는 이러한 물리적 주소를 사용하여 DMA 버퍼에 배치됩니다.

요구 사항

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

추가 정보

D3DDDI_PATCHLOCATIONLIST

DXGKARG_PRESENT

DXGKARG_RENDER

DXGK_ALLOCATIONLIST

DXGK_CONTEXTINFO

DXGK_PATCHFLAGS

DxgkDdiBuildPagingBuffer

DxgkDdiCreateContext

DxgkDdiPatch

DxgkDdiPresent

DxgkDdiRender