DXGK_GPUMMUCAPS 구조체(d3dkmddi.h)
DXGK_GPUMMUCAPS 구조는 커널 모드 드라이버에서 가상 메모리 주소 지정 기능을 표현하는 데 사용됩니다.
통사론
typedef struct _DXGK_GPUMMUCAPS {
union {
struct {
UINT ReadOnlyMemorySupported : 1;
UINT NoExecuteMemorySupported : 1;
UINT ZeroInPteSupported : 1;
UINT ExplicitPageTableInvalidation : 1;
UINT CacheCoherentMemorySupported : 1;
UINT PageTableUpdateRequireAddressSpaceIdle : 1;
UINT LargePageSupported : 1;
UINT DualPteSupported : 1;
UINT AllowNonAlignedLargePageAddress : 1;
UINT SysMem64KBPageSupported : 1;
UINT InvalidTlbEntriesNotCached : 1;
UINT SysMemLargePageSupported : 1;
UINT CachedPageTables : 1;
#if ...
UINT Reserved : 19;
#elif
UINT Reserved : 20;
#elif
UINT Reserved : 21;
#elif
UINT Reserved : 22;
#else
UINT Reserved : 24;
#endif
};
UINT Value;
};
DXGK_PAGETABLEUPDATEMODE PageTableUpdateMode;
UINT VirtualAddressBitCount;
UINT LeafPageTableSizeFor64KPagesInBytes;
UINT PageTableLevelCount;
struct {
UINT SourcePageTableVaInTransfer : 1;
UINT Reserved : 31;
} LegacyBehaviors;
} DXGK_GPUMMUCAPS;
회원
ReadOnlyMemorySupported
1로 설정하면 드라이버는 메모리 페이지에서 읽기 전용 보호를 지원합니다.
NoExecuteMemorySupported
1로 설정하면 드라이버는 메모리 페이지에서 실행 보호를 지원하지 지원합니다.
ZeroInPteSupported
1로 설정하면 GPU는 Zero DXGK_PTE 플래그를 지원합니다. 이는 모든 페이지 테이블 수준에 적용됩니다.
ExplicitPageTableInvalidation
페이지 테이블 또는 페이지 디렉터리의 모든 항목이 해제되기 전에 UpdatePageTable 통해 명시적으로 잘못된 상태로 전환되어야 했음을 나타냅니다. 기본적으로 비디오 메모리 관리자는 이러한 항목이 더 이상 필요하지 않은 경우 이전에 유효한 항목을 포함하는 페이지 테이블을 해제할 수 있습니다(예: 큰 GPU 가상 주소 범위를 해제하면 기본 페이지 테이블이 삭제됨).
메모
이 플래그는 일반적으로 페이지 테이블을 에뮬레이트해야 하며 페이지 테이블 항목별로 정보를 추적해야 하며 모든 페이지 테이블 항목 업데이트에 대해 명확한 init/deinit 쌍이 필요한 소프트웨어 드라이버에서 사용됩니다.
CacheCoherentMemorySupported
드라이버가 페이지 테이블 항목에서 CacheCoherent 비트를 지원하고 I/O를 시스템 메모리로 일관되게 전송할 수 있음을 나타냅니다.
PageTableUpdateRequireAddressSpaceIdle
GPU가 페이지 테이블 항목 업데이트 또는 현재 엔진에서 사용 중인 주소 공간에 대한 번역 보기 버퍼 무효화를 지원하지 않음을 나타냅니다. 이 플래그가 설정되면 비디오 메모리 관리자는 페이지 테이블 항목이 수정되고 번역 보기 버퍼가 무효화될 때 주소 공간을 공유하는 모든 컨텍스트가 일시 중단되도록 합니다.
LargePageSupported
1로 설정하면 리프 테이블을 제외한 모든 수준의 페이지 테이블이 큰 페이지(DXGK_PTELargePage 비트)를 지원합니다.
DualPteSupported
1로 설정하면 GPU는 수준 1 페이지 테이블(4KB 페이지 테이블 및 64KB 페이지 테이블)의 페이지 테이블에 대한 두 개의 포인터를 지원합니다.
AllowNonAlignedLargePageAddress
1로 설정하면 큰 페이지 항목의 실제 주소가 리프 페이지 테이블 검사에 정렬되지 않은 경우 운영 체제에서 LargePage 플래그를 설정할 수 있습니다. Windows 10 버전 1607(WDDM 2.1)부터 사용할 수 있습니다.
SysMem64KBPageSupported
드라이버는 64KB의 메모리 세그먼트 관리를 제공합니다. Windows 10 버전 1607(WDDM 2.1)부터 사용할 수 있습니다.
InvalidTlbEntriesNotCached
이 비트가 설정되면 드라이버는 잘못된 상태에서 유효한 상태로 전환되는 VA 범위에 대한 FlushTlb 요청에 대한 DxgkDdiBuildPagingBuffer 호출을 받지 않습니다. 하드웨어의 TLB가 잘못된 번역을 캐시하지 않을 것으로 예상됩니다.
Windows 10 버전 1903(WDDM 2.6)부터 사용할 수 있습니다.
SysMemLargePageSupported
드라이버는 큰 페이지 지원을 제공합니다. Windows Server 2022(WDDM 2.9)부터 사용할 수 있습니다.
CachedPageTables
캐시된 페이지 테이블이 지원됩니다. WDDM 3.1부터 사용할 수 있습니다.
Reserved
시스템 사용을 위해 예약됨; 사용하지 마세요.
Value
정수로 표현된 공용 구조체의 값입니다.
PageTableUpdateMode
DxgkDdiUpdatePageTable 작업에 사용되는 주소 유형을 정의합니다. DXGK_PAGETABLEUPDATE_GPU_VIRTUAL 설정되면 시스템 컨텍스트의 가상 주소 공간에서 모든 페이징 작업이 발생합니다. 페이지 디렉터리를 로컬 GPU 메모리 세그먼트에 있는 경우 업데이트 모드를 DXGK_PAGETABLEUPDATE_CPU_VIRTUAL설정할 수 없습니다.
VirtualAddressBitCount
GPU 가상 주소의 비트 수입니다.
LeafPageTableSizeFor64KPagesInBytes
64KB 페이지를 사용하는 경우 리프 페이지 테이블의 크기입니다. 크기는 CPU 페이지 크기의 배수여야 합니다(4096).
PageTableLevelCount
지원되는 페이지 테이블 수준 수입니다. 최소값은 2(DXGK_MIN_PAGE_TABLE_LEVEL_COUNT로 정의됨)입니다. 최대값은 DXGK_MAX_PAGE_TABLE_LEVEL_COUNT.
pageTableLevelCount 경우 루트 페이지 테이블의 크기를 동적으로 조정할 수 있으며 페이지 테이블의 크기는 DxgkDdiGetRootPageTableSize통해 결정됩니다. PageTableLevelCount 2보다 크면 모든 페이지 테이블 수준의 크기가 고정되어 있습니다. 이 크기는 DXGK_PAGE_TABLE_LEVEL_DESC::P ageTableSizeInBytes통해 설명됩니다.
LegacyBehaviors
LegacyBehaviors.SourcePageTableVaInTransfer
1로 설정하면 비디오 메모리 관리자는 할당 제거 중에 SourcePageTable 주소를 TransferVirtual 설정합니다.
LegacyBehaviors.Reserved
예약; 사용하지 마세요.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 10 |
지원되는 최소 서버 | Windows Server 2016 |
헤더 | d3dkmddi.h(D3dkmddi.h 포함) |