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 함수에 제공됩니다.
일부 페이징 작업의 경우 hDevice 는 NULL 입니다(예: 전원 관리 중에 전체 프레임 버퍼의 콘텐츠를 제거한 페이징 작업). 페이징 작업은 Flags 멤버의 페이징 비트 필드 플래그로 표시됩니다.
[in] hContext
드라이버가 다중 엔진을 인식하는 경우(즉, 드라이버가 컨텍스트 만들기를 지원함), 제출 요청이 시작된 디바이스 컨텍스트에 대한 핸들입니다. 컨텍스트 핸들은 DXGKARG_PATCH 포함된 공용 구조체에서 드라이버의 DxgkDdiPatch 함수에 제공됩니다.
일부 페이징 작업의 경우 hContext 는 NULL 입니다(예: 전원 관리 중에 전체 프레임 버퍼의 콘텐츠를 제거한 페이징 작업). 페이징 작업은 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 구조의 배열에 대한 포인터입니다.
페이징 작업의 경우 페이징 버퍼가 할당 목록과 연결되지 않으므로 pAllocationList 는 NULL 입니다.
[in] AllocationListSize
pAllocationList에서 지정하는 배열의 요소 수입니다.
AllocationListSize는 할당 목록의 총 크기를 나타냅니다. 그러나 현재 제출과 연결된 할당 목록의 부분은 더 작을 수 있습니다.
페이징 작업의 경우 페이징 버퍼가 할당 목록과 연결되지 않으므로 AllocationListSize 는 0입니다.
[in] pPatchLocationList
pDmaBuffer가 가리키는 DMA 버퍼와 연결된 패치 위치 목록에 대한 D3DDDI_PATCHLOCATIONLIST 구조체 배열에 대한 포인터입니다.
배열은 DMA 버퍼를 패치하는 데 사용되는 범위 앞에 있는 요소로 시작할 수 있습니다.
페이징 작업의 경우 페이징 버퍼가 패치 위치 목록과 연결되지 않으므로 pPatchLocationList 는 NULL 입니다.
[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 포함) |