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는 제로 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가 2이면 루트 페이지 테이블의 크기를 동적으로 조정할 수 있으며 페이지 테이블의 크기는 DxgkDdiGetRootPageTableSize를 통해 결정됩니다. PageTableLevelCount가 2보다 크면 모든 페이지 테이블 수준에는 고정 크기가 있으며 이는 DXGK_PAGE_TABLE_LEVEL_DESC::P ageTableSizeInBytes를 통해 설명됩니다.
LegacyBehaviors
LegacyBehaviors.SourcePageTableVaInTransfer
1로 설정하면 비디오 메모리 관리자는 할당 제거 중에 TransferVirtual에서 SourcePageTable 주소를 설정합니다.
LegacyBehaviors.Reserved
예약되어 있으므로 사용하지 마세요.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 10 |
지원되는 최소 서버 | Windows Server 2016 |
머리글 | d3dkmddi.h(D3dkmddi.h 포함) |