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