DXGKARG_BUILDPAGINGBUFFER 구조체(d3dkmddi.h)
DXGKARG_BUILDPAGINGBUFFER 구조는 메모리 전송 작업에 사용할 페이징 버퍼를 빌드하는 DxgkDdiBuildPagingBuffer** 콜백에 대한 매개 변수를 설명합니다.
구문
typedef struct _DXGKARG_BUILDPAGINGBUFFER {
VOID *pDmaBuffer;
UINT DmaSize;
VOID *pDmaBufferPrivateData;
UINT DmaBufferPrivateDataSize;
DXGK_BUILDPAGINGBUFFER_OPERATION Operation;
UINT MultipassOffset;
union {
struct {
HANDLE hAllocation;
UINT TransferOffset;
SIZE_T TransferSize;
struct {
UINT SegmentId;
union {
LARGE_INTEGER SegmentAddress;
MDL *pMdl;
};
} Source;
struct {
UINT SegmentId;
union {
LARGE_INTEGER SegmentAddress;
MDL *pMdl;
};
} Destination;
DXGK_TRANSFERFLAGS Flags;
UINT MdlOffset;
} Transfer;
struct {
HANDLE hAllocation;
SIZE_T FillSize;
UINT FillPattern;
struct {
UINT SegmentId;
LARGE_INTEGER SegmentAddress;
} Destination;
} Fill;
struct {
HANDLE hAllocation;
DXGK_DISCARDCONTENTFLAGS Flags;
UINT SegmentId;
PHYSICAL_ADDRESS SegmentAddress;
} DiscardContent;
struct {
UINT SegmentId;
PHYSICAL_ADDRESS PhysicalAddress;
} ReadPhysical;
struct {
UINT SegmentId;
PHYSICAL_ADDRESS PhysicalAddress;
} WritePhysical;
struct {
HANDLE hDevice;
HANDLE hAllocation;
UINT SegmentId;
SIZE_T OffsetInPages;
SIZE_T NumberOfPages;
PMDL pMdl;
DXGK_MAPAPERTUREFLAGS Flags;
ULONG MdlOffset;
} MapApertureSegment;
struct {
HANDLE hDevice;
HANDLE hAllocation;
UINT SegmentId;
SIZE_T OffsetInPages;
SIZE_T NumberOfPages;
PHYSICAL_ADDRESS DummyPage;
} UnmapApertureSegment;
struct {
HANDLE hAllocation;
UINT TransferOffset;
SIZE_T TransferSize;
struct {
UINT SegmentId;
union {
LARGE_INTEGER SegmentAddress;
MDL *pMdl;
};
} Source;
struct {
UINT SegmentId;
union {
LARGE_INTEGER SegmentAddress;
MDL *pMdl;
};
} Destination;
DXGK_TRANSFERFLAGS Flags;
UINT SwizzlingRangeId;
UINT SwizzlingRangeData;
} SpecialLockTransfer;
struct {
HANDLE hAllocation;
struct {
UINT SegmentId;
union {
LARGE_INTEGER SegmentAddress;
MDL *pMdl;
};
PVOID VirtualAddress;
D3DGPU_VIRTUAL_ADDRESS GpuVirtualAddress;
} Destination;
} InitContextResource;
DXGK_BUILDPAGINGBUFFER_TRANSFERVIRTUAL TransferVirtual;
DXGK_BUILDPAGINGBUFFER_FILLVIRTUAL FillVirtual;
DXGK_BUILDPAGINGBUFFER_UPDATEPAGETABLE UpdatePageTable;
DXGK_BUILDPAGINGBUFFER_FLUSHTLB FlushTlb;
DXGK_BUILDPAGINGBUFFER_COPYPAGETABLEENTRIES CopyPageTableEntries;
DXGK_BUILDPAGINGBUFFER_UPDATECONTEXTALLOCATION UpdateContextAllocation;
DXGK_BUILDPAGINGBUFFER_NOTIFYRESIDENCY NotifyResidency;
DXGK_BUILDPAGINGBUFFER_SIGNALMONITOREDFENCE SignalMonitoredFence;
struct {
HANDLE hDevice;
HANDLE hAllocation;
UINT SegmentId;
SIZE_T OffsetInPages;
SIZE_T NumberOfPages;
DXGK_ADL Adl;
DXGK_MAPAPERTUREFLAGS Flags;
ULONG AdlOffset;
PVOID CpuVisibleAddress;
} MapApertureSegment2;
DXGK_BUILDPAGINGBUFFER_NOTIFY_FENCE_RESIDENCY NotifyFenceResidency;
DXGK_BUILDPAGINGBUFFER_MAPMMU MmapMmu;
DXGK_BUILDPAGINGBUFFER_UNMAPMMU UnmapMmu;
DXGK_BUILDPAGINGBUFFER_NOTIFYRESIDENCY2 NotifyResidency2;
DXGK_BUILDPAGINGBUFFER_NOTIFYALLOC NotifyAllocation;
struct {
UINT Reserved[64];
} Reserved;
};
HANDLE hSystemContext;
D3DGPU_VIRTUAL_ADDRESS DmaBufferGpuVirtualAddress;
UINT DmaBufferWriteOffset;
} DXGKARG_BUILDPAGINGBUFFER;
멤버
pDmaBuffer
[in/out] 페이징 버퍼에서 사용 가능한 첫 번째 바이트에 대한 가상 주소입니다. 드라이버가 새 페이징 버퍼로 처음 호출되면 이 가상 주소는 4KB에 맞춰집니다. 드라이버는 페이징 버퍼가 가득 차서 새 페이징 버퍼를 사용할 때까지 페이징 버퍼에서 작업을 단단히 압축합니다. 따라서 GPU(그래픽 처리 장치)에 페이징 버퍼 제출을 위한 특정 맞춤이 필요한 경우 드라이버는 페이징 버퍼에 쓰는 작업을 패딩하여 이 맞춤을 적용해야 합니다. DxgkDdiBuildPagingBuffer 함수가 반환되기 전에 드라이버는 페이징 버퍼에 기록된 마지막 바이트를 가리키도록 pDmaBuffer를 업데이트해야 합니다.
DmaSize
[in/out] pDmaBuffer 가 지정하는 페이징 버퍼의 크기(바이트)입니다.
pDmaBufferPrivateData
[in/out] pDmaBuffer 가 지정하는 DMA(직접 메모리 액세스) 버퍼(즉, 페이징 버퍼)와 연결된 드라이버 상주 프라이빗 데이터 구조에 대한 포인터입니다.
DmaBufferPrivateDataSize
[in/out] pDmaBufferPrivateData 가 현재 작업에 대해 가리키는 프라이빗 데이터 구조에 남아 있는 바이트 수입니다.
Operation
[in] 수행할 메모리 작업의 형식을 나타내는 DXGK_BUILDPAGINGBUFFER_OPERATION 형식의 값입니다.
MultipassOffset
[in/out] 여러 페이징 버퍼가 필요한 경우 페이징 작업의 진행률을 지정하는 UINT 값입니다. 드라이버는 두 개 이상의 전송 작업을 위해 여러 페이징 버퍼로 분할을 나타내도록 이 값을 설정합니다. 예를 들어 드라이버는 페이징 기반 전송을 위해 마지막으로 전송된 페이지 번호를 저장할 수 있습니다.
Transfer
[in] 전송 작업을 설명하는 구조체입니다.
Transfer.hAllocation
[in] 드라이버의 DxgkDdiCreateAllocation 함수가 이전에 DXGKARG_CREATEALLOCATION 구조체의 pAllocationInfo 멤버의 일부인 DXGK_ALLOCATIONINFO구조체의 hAllocation 멤버에 반환된 할당에 대한 핸들입니다. 할당 핸들은 전송을 위한 프라이빗 드라이버 데이터가 포함된 버퍼를 가리킵니다.
Transfer.TransferOffset
[in] 전송되는 할당 내의 첫 번째 페이지의 오프셋(바이트)입니다. 이 오프셋은 세그먼트 위치가 설명하는 위치에만 적용됩니다. 이 오프셋은 메모리 범위에 대한 MDL 설명에는 적용되지 않습니다. 드라이버가 전송을 완료하는 데 둘 이상의 페이징 버퍼가 필요한 경우(즉, 드라이버가 DxgkDdiBuildPagingBuffer 함수에서 STATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER 반환함) TransferOffset 은 이 전송을 위해 DxgkDdiBuildPagingBuffer 를 호출할 때마다 동일합니다.
Transfer.TransferSize
[in] 전송할 메모리 정보의 크기(바이트)입니다.
Transfer.Source
[in] 원본 할당을 설명하는 구조체입니다. 이 구조체에는 SegmentId 멤버와 원본 할당 세그먼트(SegmentAddress)에 대한 오프셋 또는 원본(pMdl)에 대한 MDL에 대한 포인터가 포함된 공용 구조체가 포함됩니다.
Transfer.Source.SegmentId
[in] 원본 할당 내의 세그먼트 식별자이거나 원본 할당이 Source에 포함된 공용 구조체의 pMdl 멤버에 의해 설명된 경우 0입니다.
Transfer.Source.SegmentAddress
[in] Source의 SegmentId 멤버가 0이 아닌 경우 원본 세그먼트 주소입니다. DirectX 그래픽 커널 하위 시스템은 세그먼트 주소()를 세그먼트 오프셋의 합계 및 세그먼트의 SegmentAddress = SegmentOffset + Segment.BaseAddr
기본 주소로 계산합니다.
Transfer.Source.pMdl
[in] Source의 SegmentId 멤버가 0인 경우 원본의 시스템 메모리 페이지를 설명하는 MDL 구조가 포함된 버퍼에 대한 포인터입니다.
Transfer.Destination
[in] 대상 할당을 설명하는 구조체입니다. 이 구조체에는 대상 할당 세그먼트(SegmentAddress)에 대한 오프셋 또는 대상(pMdl)에 대한 MDL에 대한 포인터가 포함된 SegmentId 멤버 및 공용 구조체가 포함됩니다.
Transfer.Destination.SegmentId
[in] 대상 할당 내의 세그먼트 식별자이거나 대상 할당이 대상에 포함된 공용 구조체의 pMdl 멤버에 의해 설명된 경우 0입니다.
Transfer.Destination.SegmentAddress
[in] 대상의 SegmentId 멤버가 0이 아닌 경우 대상 세그먼트 주소입니다. DirectX 그래픽 커널 하위 시스템은 세그먼트 주소()를 세그먼트 오프셋의 합계 및 세그먼트의 SegmentAddress = SegmentOffset + Segment.BaseAddr
기본 주소로 계산합니다.
Transfer.Destination.pMdl
[in] Destination의 SegmentId 멤버가 0인 경우 대상의 시스템 메모리 페이지를 설명하는 MDL 구조가 포함된 버퍼에 대한 포인터입니다.
Transfer.Flags
[in] 수행할 특수 잠금 전송 작업의 형식을 비트 필드 플래그에서 식별하는 DXGK_TRANSFERFLAGS 구조체입니다.
Transfer.MdlOffset
[in] 시스템 메모리 페이지의 pMdl 멤버가 가리키는 MDL 구조 내에서 현재 작업의 첫 번째 시스템 메모리 페이지에 대한 오프셋입니다. 드라이버는 다음과 같이 [MmGetMdlPfnArray](/windows-hardware/drivers/kernel/mm-bad-pointer#mmgetmdlpfnarray 함수를 호출하여 첫 번째 시스템 메모리 페이지의 실제 주소를 가져올 수 있습니다.
MmGetMdlPfnArray(pMdl)[MdlOffset];
Fill
[in] 채우기 작업을 설명하는 구조체입니다.
Fill.hAllocation
[in] 채울 콘텐츠가 포함된 할당에 대한 핸들입니다.
Fill.FillSize
[in] 채울 메모리 정보의 크기(바이트)입니다.
Fill.FillPattern
[in] 대상을 채울 패턴입니다. 비디오 메모리 관리자는 이 정보를 사용하여 콘텐츠가 없는 할당이 처음 페이징되는 경우 비디오 메모리를 특정 패턴으로 초기화합니다. 이 경우 채우기 요청에 대한 원본이 없으며 대상만 존재합니다.
Fill.Destination
[in] 채우기 작업의 대상 할당을 설명하는 구조체입니다.
Fill.Destination.SegmentId
[in] 대상 할당 내의 세그먼트 식별자입니다.
Fill.Destination.SegmentAddress
[in] 대상 세그먼트 주소입니다. DirectX 그래픽 커널 하위 시스템은 세그먼트 주소()를 세그먼트 오프셋의 합계 및 세그먼트의 SegmentAddress = SegmentOffset + Segment.BaseAddr
기본 주소로 계산합니다.
DiscardContent
[in] 삭제 콘텐츠 작업을 설명하는 구조체입니다.
DiscardContent.hAllocation
[in] 삭제할 콘텐츠가 포함된 할당에 대한 핸들입니다.
DiscardContent.Flags
[in] 비트 필드 플래그에서 수행할 삭제 콘텐츠 작업의 형식을 식별하는 DXGK_DISCARDCONTENTFLAGS 구조체입니다.
DiscardContent.SegmentId
[in] 콘텐츠를 삭제할 할당 내 세그먼트의 식별자입니다.
DiscardContent.SegmentAddress
[in] 세그먼트 주소를 나타내는 PHYSICAL_ADDRESS 데이터 형식(LARGE_INTEGER 정의됨)입니다. DirectX 그래픽 커널 하위 시스템은 세그먼트 주소()를 세그먼트 오프셋의 합계 및 세그먼트의 SegmentAddress = SegmentOffset + Segment.BaseAddr
기본 주소로 계산합니다. 이 위치는 콘텐츠가 삭제되는 위치입니다.
ReadPhysical
[in] 읽기-물리적 작업을 설명하는 구조체입니다.
ReadPhysical.SegmentId
[in] 데이터를 읽는 세그먼트의 식별자입니다.
ReadPhysical.PhysicalAddress
[in] SegmentId 가 지정하는 세그먼트 내에서 데이터를 읽는 실제 주소를 나타내는 PHYSICAL_ADDRESS 데이터 형식(LARGE_INTEGER 정의됨)입니다.
WritePhysical
[in] 쓰기 물리적 작업을 설명하는 구조체입니다.
WritePhysical.SegmentId
[in] 데이터가 기록되는 세그먼트의 식별자입니다.
WritePhysical.PhysicalAddress
[in] SegmentId 가 지정하는 세그먼트 내에서 데이터가 기록되는 실제 주소를 나타내는 PHYSICAL_ADDRESS 데이터 형식(LARGE_INTEGER 정의됨)입니다.
MapApertureSegment
[in] MDL을 사용하는 map-aperture-segment 작업을 설명하는 구조체입니다.
MapApertureSegment.hDevice
[in] hAllocation 이 지정하는 할당을 소유하는 디바이스에 대한 핸들로 , SegmentId 가 지정하는 조리개 세그먼트에 매핑됩니다.
공유 할당의 경우 hDevice 는 비디오 메모리 관리자가 할당의 소유자로 결정한 디바이스로 설정됩니다.
hDevice 는 기본 할당에 대한 NULL 입니다.
MapApertureSegment.hAllocation
[in] SegmentId 가 지정하는 조리개 세그먼트에 매핑되는 할당에 대한 핸들입니다.
드라이버에서 DMA 버퍼를 명시적으로 만들지 않으므로 DMA 버퍼가 조리개 세그먼트에 매핑될 때 hAllocation은 NULL입니다.
MapApertureSegment.SegmentId
[in] 구성할 조리개 세그먼트의 식별자입니다.
MapApertureSegment.OffsetInPages
[in] 세그먼트의 시작부터 매핑할 첫 번째 페이지까지의 오프셋(페이지)입니다.
MapApertureSegment.NumberOfPages
[in] 매핑할 페이지 수입니다.
MapApertureSegment.pMdl
[in] 조리개 세그먼트에 매핑할 물리적 시스템 메모리 페이지를 설명하는 MDL 구조를 포함하는 버퍼에 대한 포인터입니다.
MapApertureSegment.Flags
[in] 수행할 map-aperture-segment 작업의 형식을 비트 필드 플래그로 식별하는 DXGK_MAPAPERTUREFLAGS 구조체입니다.
MapApertureSegment.MdlOffset
[in] 시스템 메모리 페이지의 pMdl 멤버가 가리키는 MDL 구조 내에서 현재 작업의 첫 번째 시스템 메모리 페이지에 대한 오프셋입니다. 드라이버는 다음과 같이 [MmGetMdlPfnArray](/windows-hardware/drivers/kernel/mm-bad-pointer#mmgetmdlpfnarray 함수를 호출하여 첫 번째 시스템 메모리 페이지의 실제 주소를 가져올 수 있습니다.
MmGetMdlPfnArray(pMdl)[MdlOffset];
UnmapApertureSegment
[in] unmap-aperture-segment 작업을 설명하는 구조체입니다.
UnmapApertureSegment.hDevice
[in] hAllocation 에서 SegmentId 가 지정하는 조리개 세그먼트에서 매핑되지 않은 할당을 소유하는 디바이스에 대한 핸들입니다.
공유 할당의 경우 hDevice 는 비디오 메모리 관리자가 할당의 소유자로 결정한 디바이스로 설정됩니다.
hDevice 는 기본 할당에 대한 NULL 입니다.
UnmapApertureSegment.hAllocation
[in] SegmentId 가 지정하는 조리개 세그먼트에서 매핑되지 않은 할당에 대한 핸들입니다.
드라이버에서 DMA 버퍼를 명시적으로 만들지 않으므로 DMA 버퍼가 조리개 세그먼트에서 매핑되지 않은 경우 hAllocation은 NULL입니다.
UnmapApertureSegment.SegmentId
[in] 구성할 조리개 세그먼트의 식별자입니다.
UnmapApertureSegment.OffsetInPages
[in] 세그먼트의 시작부터 매핑 해제할 첫 번째 페이지까지의 오프셋(페이지)입니다.
UnmapApertureSegment.NumberOfPages
[in] 매핑을 해제할 페이지 수입니다.
UnmapApertureSegment.DummyPage
[in] 드라이버가 매핑되지 않은 범위를 매핑해야 하는 자리 표시자 페이지의 실제 주소를 나타내는 PHYSICAL_ADDRESS 데이터 형식(LARGE_INTEGER 정의됨)입니다.
SpecialLockTransfer
[in] 특수 잠금 전송 작업을 설명하는 구조체입니다.
SpecialLockTransfer.hAllocation
[in] 드라이버의 DxgkDdiCreateAllocation 함수가 이전에 DXGKARG_CREATEALLOCATION 구조체의 pAllocationInfo 멤버의 일부인 DXGK_ALLOCATIONINFO구조체의 hAllocation 멤버에 반환된 할당에 대한 핸들입니다. 할당 핸들은 특수 잠금 전송에 대한 프라이빗 드라이버 데이터가 포함된 버퍼를 가리킵니다.
SpecialLockTransfer.TransferOffset
[in] 전송되는 할당 내의 첫 번째 페이지의 오프셋(바이트)입니다. 이 오프셋은 세그먼트 위치가 설명하는 위치에만 적용됩니다. 이 오프셋은 메모리 범위에 대한 MDL 설명에는 적용되지 않습니다. 드라이버가 전송을 완료하는 데 둘 이상의 페이징 버퍼가 필요한 경우(즉, 드라이버가 DxgkDdiBuildPagingBuffer 함수에서 STATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER 반환함) TransferOffset 은 이 전송을 위해 DxgkDdiBuildPagingBuffer 를 호출할 때마다 동일합니다.
SpecialLockTransfer.TransferSize
[in] 전송할 메모리 정보의 크기(바이트)입니다.
SpecialLockTransfer.Source
[in] 원본 할당을 설명하는 구조체입니다. 이 구조체에는 SegmentId 멤버와 원본 할당 세그먼트(SegmentAddress)에 대한 오프셋 또는 원본(pMdl)에 대한 MDL에 대한 포인터가 포함된 공용 구조체가 포함됩니다.
SpecialLockTransfer.Source.SegmentId
[in] 원본 할당 내의 세그먼트 식별자이거나 원본 할당이 Source에 포함된 공용 구조체의 pMdl 멤버에 의해 설명된 경우 0입니다.
SpecialLockTransfer.Source. (명명되지 않은 공용 구조체)
[in] 원본 할당 세그먼트에 대한 오프셋(SegmentAddress) 또는 원본(pMdl)에 대한 MDL에 대한 포인터를 포함하는 공용 구조체입니다.
SpecialLockTransfer.Source.SegmentAddress
[in] Source의 SegmentId 멤버가 0이 아닌 경우 원본 세그먼트 주소입니다. DirectX 그래픽 커널 하위 시스템은 세그먼트 주소()를 세그먼트 오프셋의 합계 및 세그먼트의 SegmentAddress = SegmentOffset + Segment.BaseAddr
기본 주소로 계산합니다.
SpecialLockTransfer.Source.pMdl
[in] Source의 SegmentId 멤버가 0인 경우 원본의 시스템 메모리 페이지를 설명하는 MDL 구조가 포함된 버퍼에 대한 포인터입니다.
SpecialLockTransfer.Destination
[in] 대상 할당을 설명하는 구조체입니다. 이 구조체에는 대상 할당 세그먼트(SegmentAddress)에 대한 오프셋 또는 대상(pMdl)에 대한 MDL에 대한 포인터가 포함된 SegmentId 멤버 및 공용 구조체가 포함됩니다.
SpecialLockTransfer.Destination.SegmentId
[in] 대상 할당 내의 세그먼트 식별자이거나 대상 할당이 대상에 포함된 공용 구조체의 pMdl 멤버에 의해 설명된 경우 0입니다.
SpecialLockTransfer.Destination. (명명되지 않은 공용 구조체)
[in] 대상 할당의 세그먼트(SegmentAddress)에 대한 오프셋 또는 대상(pMdl)에 대한 MDL에 대한 포인터를 포함하는 공용 구조체입니다.
SpecialLockTransfer.Destination.SegmentAddress
[in] 대상의 SegmentId 멤버가 0이 아닌 경우 대상 세그먼트 주소입니다. DirectX 그래픽 커널 하위 시스템은 세그먼트 주소()를 세그먼트 오프셋의 합계 및 세그먼트의 SegmentAddress = SegmentOffset + Segment.BaseAddr
기본 주소로 계산합니다.
SpecialLockTransfer.Destination.pMdl
[in] Destination의 SegmentId 멤버가 0인 경우 대상의 시스템 메모리 페이지를 설명하는 MDL 구조가 포함된 버퍼에 대한 포인터입니다.
SpecialLockTransfer.Flags
[in] 수행할 특수 잠금 전송 작업의 형식을 비트 필드 플래그에서 식별하는 DXGK_TRANSFERFLAGS 구조체입니다.
SpecialLockTransfer.SwizzlingRangeId
[in] 스위즐링 범위를 식별하는 UINT 값입니다.
SpecialLockTransfer.SwizzlingRangeData
[in] 스위즐링 범위 데이터를 지정하는 UINT 값입니다.
InitContextResource
[in] 컨텍스트 초기화 작업을 설명하는 구조체입니다. Windows 8 시작합니다.
InitContextResource.hAllocation
[in] 드라이버가 DxgkCbCreateContextAllocation을 호출할 때 만들어진 컨텍스트 할당에 대한 핸들입니다. 이 할당에 대한 핸들은 DXGKARGCB_CREATECONTEXTALLOCATION 구조체의 hAllocation 멤버에 반환됩니다. 드라이버는 DxgkCbCreateContextAllocation을 호출할 때 ContextAllocation 매개 변수에서 이 구조체에 대한 포인터를 전달합니다.
InitContextResource.Destination
[in] 대상 컨텍스트 할당을 설명하는 구조체입니다. 이 구조체에는 SegmentId 멤버와 대상 컨텍스트 할당 세그먼트(SegmentAddress)의 세그먼트에 대한 오프셋 또는 대상(pMdl)에 대한 MDL에 대한 포인터가 포함된 공용 구조체가 포함됩니다.
InitContextResource.Destination.SegmentId
[in] 대상 컨텍스트 할당 내 세그먼트의 식별자이거나 대상 컨텍스트 할당이 대상에 포함된 공용 구조체의 pMdl 멤버에 의해 설명된 경우 0입니다.
InitContextResource.Destination. (명명되지 않은 공용 구조체)
[in] 대상 컨텍스트 할당(SegmentAddress)의 세그먼트로 오프셋을 포함하거나 대상(pMdl)에 대한 MDL에 대한 포인터를 포함하는 공용 구조체입니다.
InitContextResource.Destination.SegmentAddress
[in] 대상의 SegmentId 멤버가 0이 아닌 경우 대상 세그먼트 주소입니다. DirectX 그래픽 커널 하위 시스템은 세그먼트 주소()를 세그먼트 오프셋의 합계 및 세그먼트의 SegmentAddress = SegmentOffset + Segment.BaseAddr
기본 주소로 계산합니다.
InitContextResource.Destination.pMdl
[in] Destination의 SegmentId 멤버가 0인 경우 대상의 시스템 메모리 페이지를 설명하는 MDL 구조가 포함된 버퍼에 대한 포인터입니다.
InitContextResource.Destination.VirtualAddress
[in] 대상 컨텍스트 할당의 가상 주소입니다. 이 주소는 컨텍스트 할당의 수명 동안 유효합니다.
DxgkCbCreateContextAllocation 항목의 대상 컨텍스트 할당에 대한 가상 주소 섹션의 절차에 따라 가상 주소가 유효한지 확인합니다.
InitContextResource.Destination.GpuVirtualAddress
초기화할 컨텍스트 리소스의 GPU 가상 주소입니다.
TransferVirtual
메모리의 위치 간에 할당 콘텐츠를 전송하는 데 사용되는 작업을 설명하는 DXGK_BUILDPAGINGBUFFER_TRANSFERVIRTUAL 구조체입니다.
FillVirtual
할당을 패턴으로 채우는 데 사용되는 작업을 설명하는 DXGK_BUILDPAGINGBUFFER_FILLVIRTUAL 구조체입니다.
UpdatePageTable
페이지 테이블을 업데이트하는 데 사용되는 작업을 설명하는 DXGK_BUILDPAGINGBUFFER_UPDATEPAGETABLE 구조체입니다.
FlushTlb
변환 보기 버퍼를 플러시하는 데 사용되는 작업을 설명하는 DXGK_BUILDPAGINGBUFFER_FLUSHTLB 구조체입니다.
CopyPageTableEntries
사용된 복사 페이지 테이블 항목을 한 위치에서 다른 위치로 복사하는 작업을 설명하는 DXGK_BUILDPAGINGBUFFER_COPYPAGETABLEENTRIES 구조체입니다.
UpdateContextAllocation
컨텍스트 또는 디바이스 할당의 콘텐츠를 업데이트하는 데 사용되는 작업을 설명하는 DXGK_BUILDPAGINGBUFFER_UPDATECONTEXTALLOCATION 구조체입니다.
NotifyResidency
상주 할당 변경 작업을 설명하는 DXGK_BUILDPAGINGBUFFER_NOTIFYRESIDENCY 구조체입니다.
SignalMonitoredFence
[in] 페이징 모니터링 펜스 개체를 DMA 버퍼에 신호하는 GPU 명령을 설명하는 DXGK_BUILDPAGINGBUFFER_SIGNALMONITOREDFENCE 구조체입니다. Windows 10 버전 1703(WDDM 2.2)부터 사용할 수 있습니다.
MapApertureSegment2
MapApertureSegment2.hDevice
[in] hAllocation 이 지정하는 할당을 소유하는 디바이스에 대한 핸들로 , SegmentId 가 지정하는 조리개 세그먼트에 매핑됩니다.
공유 할당의 경우 hDevice 는 비디오 메모리 관리자가 할당의 소유자로 결정한 디바이스로 설정됩니다.
hDevice 는 기본 할당에 대한 NULL 입니다.
MapApertureSegment2.hAllocation
[in] SegmentId 가 지정하는 조리개 세그먼트에 매핑되는 할당에 대한 드라이버 핸들입니다.
드라이버에서 DMA 버퍼를 명시적으로 만들지 않으므로 DMA 버퍼가 조리개 세그먼트에 매핑될 때 hAllocation은 NULL입니다.
MapApertureSegment2.SegmentId
[in] 구성할 조리개 세그먼트의 식별자입니다.
MapApertureSegment2.OffsetInPages
[in] 세그먼트의 시작부터 매핑할 첫 번째 페이지까지의 오프셋(페이지)입니다.
MapApertureSegment2.NumberOfPages
[in] 할당 내에서 매핑되는 범위의 크기(페이지)입니다.
MapApertureSegment2.Adl
[in] 할당 메모리에 대한 논리적 주소 매핑(페이지)을 설명하는 ADL(주소 설명자 목록)이 있는 DXGK_ADL 구조체입니다. 이 ADL은 연속 배열이거나 페이지 배열일 수 있습니다. 드라이버는 두 경우를 모두 처리할 수 있어야 합니다.
MapApertureSegment2.Flags
[in] 수행할 map-aperture-segment 작업의 형식을 비트 필드 플래그로 식별하는 DXGK_MAPAPERTUREFLAGS 구조체입니다.
MapApertureSegment2.AdlOffset
[in] 시스템 메모리 페이지에 지정된 현재 작업에 대해 매핑되는 논리 주소 범위의 시작 부분에 대한 ADL 내의 오프셋입니다. ADL이 연속 ADL인 경우 ADL의 BasePageNumber 멤버는 인접한 메모리 범위의 시작 주소입니다. 그렇지 않으면 연속 메모리가 아닌 메모리에 ADL의 Pages 멤버를 사용합니다.
MapApertureSegment2.CpuVisibleAddress
MapApertureCpuVisible 플래그 집합을 사용하여 드라이버 할당을 만든 경우 CpuVisibleAddress는 DXGK_OPERATION_MAP_APERTURE_SEGMENT2 작업에 대한 시스템 매핑 커널 모드 가상 주소에 대한 null이 아닌 포인터입니다. 이 주소는 할당이 조리개 세그먼트에 매핑되고 동일한 할당에 대한 해당 DXGK_OPERATION_UNMAP_APERTURE_SEGMENT 호출 직후 해제되는 한 유효합니다.
MapApertureCpuVisible를 지정하지 않으면 cpuVisibleAddress는 DXGK_OPERATION_MAP_APERTURE_SEGMENT2 작업에 대해 NULL입니다.
NotifyFenceResidency
MmapMmu
UnmapMmu
NotifyResidency2
NotifyAllocation
Reserved
이 멤버는 예약되어 있으며 사용하지 않아야 합니다.
Reserved.Reserved[64]
이 멤버는 예약되어 있으며 사용하지 않아야 합니다.
hSystemContext
[in] 페이징 작업에 대한 시스템 컨텍스트에 대한 핸들입니다.
DmaBufferGpuVirtualAddress
DMA 버퍼가 페이징된 가상 주소를 나타내는 D3DGPU_VIRTUAL_ADDRESS 데이터 형식입니다. 실제 주소가 0이면 DMA 버퍼가 올바르게 페이징되지 않습니다.
DmaBufferWriteOffset
DMA 버퍼의 시작부터 현재 작업 오프셋(바이트)입니다.
설명
MDL은 WDM(Windows 드라이버 모델) 설명서에 정의되어 있습니다.
WDDM 동기화 클래스:
- BuildPagingBuffer 제출 유형에 대한 첫 번째 수준 GPU Scheduler 클래스입니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista부터 지원됩니다. |
머리글 | d3dkmddi.h(D3dkmddi.h 포함) |
추가 정보
DXGKARGCB_CREATECONTEXTALLOCATION
DXGK_BUILDPAGINGBUFFER_COPYPAGETABLEENTRIES
DXGK_BUILDPAGINGBUFFER_FILLVIRTUAL
DXGK_BUILDPAGINGBUFFER_FLUSHTLB
DXGK_BUILDPAGINGBUFFER_NOTIFYRESIDENCY
DXGK_BUILDPAGINGBUFFER_TRANSFERVIRTUAL
DXGK_BUILDPAGINGBUFFER_UPDATECONTEXTALLOCATION
DXGK_BUILDPAGINGBUFFER_UPDATEPAGETABLE
[MmGetMdlPfnArray] (/windows-hardware/drivers/kernel/mm-bad-pointer#mmgetmdlpfnarray