다음을 통해 공유


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 포함)