DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 구조체(d3dkmddi.h)
DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 구조체는 할당에 대한 속성을 식별합니다.
구문
typedef struct _DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 {
union {
struct {
UINT CpuVisible : 1;
UINT PermanentSysMem : 1;
UINT Cached : 1;
UINT Protected : 1;
UINT ExistingSysMem : 1;
UINT ExistingKernelSysMem : 1;
UINT FromEndOfSegment : 1;
UINT DisableLargePageMapping : 1;
UINT Overlay : 1;
UINT Capture : 1;
UINT CreateInVpr : 1;
UINT Reserved00 : 1;
UINT DXGK_ALLOC_RESERVED17 : 1;
UINT Reserved02 : 1;
UINT MapApertureCpuVisible : 1;
UINT Reserved03 : 1;
UINT HistoryBuffer : 1;
UINT AccessedPhysically : 1;
UINT ExplicitResidencyNotification : 1;
UINT HardwareProtected : 1;
UINT CpuVisibleOnDemand : 1;
UINT DXGK_ALLOC_RESERVED16 : 1;
UINT DXGK_ALLOC_RESERVED15 : 1;
UINT DXGK_ALLOC_RESERVED14 : 1;
UINT DXGK_ALLOC_RESERVED13 : 1;
UINT DXGK_ALLOC_RESERVED12 : 1;
UINT DXGK_ALLOC_RESERVED11 : 1;
UINT DXGK_ALLOC_RESERVED10 : 1;
UINT DXGK_ALLOC_RESERVED9 : 1;
UINT DXGK_ALLOC_RESERVED4 : 1;
UINT DXGK_ALLOC_RESERVED3 : 1;
UINT DXGK_ALLOC_RESERVED2 : 1;
UINT DXGK_ALLOC_RESERVED1 : 1;
UINT DXGK_ALLOC_RESERVED0 : 1;
};
UINT Value;
};
} DXGK_ALLOCATIONINFOFLAGS_WDDM2_0;
멤버
CpuVisible
[out] CPU에서 할당에 직접 액세스할 수 있는지 여부를 지정하는 UINT 값입니다. 사용자 모드 디스플레이 드라이버가 할당 시 pfnLockCb 함수를 성공적으로 호출하려면 디스플레이 미니포트 드라이버가 이 플래그를 설정해야 합니다. 할당에서 이 플래그가 설정되지 않은 경우 pfnLockCb 에서 오류가 반환됩니다.
공유 할당을 만든 프로세스만 해당 할당을 잠글 수 있습니다.
이 멤버를 설정하는 것은 32비트 Value 멤버(0x00000001)의 첫 번째 비트를 설정하는 것과 같습니다.
PermanentSysMem
[out] 콘텐츠가 메모리 세그먼트에 있는 경우에도 할당 복사본을 시스템 메모리에 유지할지 여부를 지정하는 UINT 값입니다. 기본적으로 메모리 세그먼트에 할당을 전송할 때 Surface 시스템 메모리 백업 저장소가 손실됩니다. PermanentSysMem 플래그를 지정하고 메모리 세그먼트에서 할당을 제거하면 할당 내용이 삭제되고 할당이 더티 않으면 페이징되지 않습니다(즉, 할당이 페이징된 이후 쓰기 작업의 대상이 아님).
할당에서 pfnLockCb 를 호출하면 할당에 대한 시스템 메모리 백업 저장소가 항상 반환됩니다. 사용자 모드 표시 드라이버가 pfnUnlockCb를 호출할 때 할당이 메모리 세그먼트에 있는 경우 할당에 대한 메모리 세그먼트 리소스가 새 콘텐츠로 업데이트됩니다. 이 업데이트는 디스플레이 미니포트 드라이버에 DxgkDdiBuildPagingBuffer 함수를 통한 일반 페이징 작업으로 표시됩니다. 디스플레이 미니포트 드라이버에 페이징 작업에 대한 최소 지역 크기 또는 맞춤이 필요한 경우 이 요구 사항은 잠겨 있는 지역에 반영되어야 합니다. 드라이버가 PermanentSysMem을 설정하는 경우 드라이버도 CpuVisible 멤버를 설정해야 합니다. 드라이버는 기본 화면에서 PermanentSysMem 을 설정해서는 안 됩니다.
이 멤버를 설정하는 것은 32비트 Value 멤버(0x00000002)의 두 번째 비트를 설정하는 것과 같습니다.
Cached
[out] 할당 지원 저장소를 캐시된 메모리로 할당해야 하는지 여부를 지정하는 UINT 값입니다. 기본적으로 할당 지원 저장소는 쓰기 결합 메모리로 저장됩니다. 캐시된 메모리 할당이 캐시 일관성이 없는 세그먼트(예: 메모리 세그먼트 또는 AGP 세그먼트)에서 사용되는 경우 비디오 메모리 관리자는 적절한 시간에 프로세서의 캐시에서 플러시하여 할당 내용에 대한 일관성을 보장합니다.
드라이버가 캐시됨을 설정하고 ExistingSysMem 또는 ExistingKernelSysMem 멤버를 설정하는 경우 드라이버는 비디오 메모리 관리자에게 기존 메모리가 캐시 가능하도록 매핑되었음을 나타냅니다. 기존 메모리가 캐시 가능으로 매핑되었지만 드라이버가 캐시된 멤버를 설정하지 못한 경우 비디오 메모리 관리자는 데이터 일관성을 보장할 수 없으며 손상이 발생합니다. 드라이버는 애플리케이션 또는 사용자 모드 표시 드라이버에서 읽을 할당에 대해 캐시된 멤버를 설정해야 합니다. 드라이버는 쓰기 전용 할당에 대해 캐시된 멤버를 설정해서는 안 됩니다.
드라이버가 이 멤버를 설정하면 드라이버도 CpuVisible 멤버를 설정해야 합니다. 드라이버가 기본 화면에서 캐시됨 을 설정해서는 안 됩니다.
이 멤버를 설정하는 것은 32비트 Value 멤버(0x00000004)의 세 번째 비트를 설정하는 것과 같습니다.
Protected
[out] 애플리케이션의 잠재적 직접 CPU 액세스로부터 할당을 보호하기 위해 사용자 주소 공간 대신 커널 메모리에 할당 백업 저장소를 할당해야 하는지 여부를 지정하는 UINT 값입니다. 드라이버는 PermanentSysMem, ExistingSysMem 또는 ExistingKernelSysMem 멤버와 함께 이 멤버 를 설정할 수 없습니다. 드라이버는 기본 화면에서 보호됨을 설정해서는 안 됩니다.
이 멤버를 설정하는 것은 32비트 Value 멤버(0x00000008)의 네 번째 비트를 설정하는 것과 같습니다.
ExistingSysMem
[out] 비디오 메모리 관리자가 기존 시스템 메모리 범위를 할당에 대한 백업 저장소로 사용해야 하는지 여부를 지정하는 UINT 값입니다. 시스템 메모리 범위는 할당 크기에 대한 현재 프로세스의 유효한 사용자 모드 주소여야 합니다. 시스템 메모리 범위도 페이지 정렬이어야 하며 크기가 여러 페이지여야 합니다.
시스템 메모리 범위가 캐시 가능한 가상 주소인 경우 드라이버는 캐시된 멤버를 설정하여 비디오 메모리 관리자에게 할당에 대한 캐시 일관성을 보장하도록 해야 합니다. 캐시된 멤버를 지정하지 않으면 비디오 메모리 관리자는 시스템 메모리 범위가 캐시할 수 없거나, 쓰기가 결합되거나, 캐시할 수 없다고 결정합니다. 그러나 이 경우 드라이버는 캐시 일관성을 보장하거나 캐시 일관성이 지정된 사용에 문제가 되지 않는다고 결정합니다.
이 유형의 할당은 암시적으로 PermanentSysMem 멤버가 설정된 할당과 동일한 잠금 의미 체계를 가집니다.
드라이버는 PermanentSysMem, Protected 또는 ExistingKernelSysMem 멤버와 함께 ExistingSysMem을 설정할 수 없습니다. 드라이버는 기본 화면에서 ExistingSysMem 을 설정해서는 안 됩니다.
이 멤버를 설정하는 것은 32비트 Value 멤버(0x00000010)의 다섯 번째 비트를 설정하는 것과 같습니다.
ExistingKernelSysMem
[out] 비디오 메모리 관리자가 기존 시스템 메모리 범위를 할당에 대한 백업 저장소로 사용해야 하는지 여부를 지정하는 UINT 값입니다. 시스템 메모리 범위는 페이지에 정렬된 유효한 커널 모드 주소여야 하며 크기가 여러 페이지여야 합니다.
시스템 메모리 범위가 캐시 가능한 가상 주소인 경우 드라이버는 캐시된 멤버를 설정하여 비디오 메모리 관리자에게 할당에 대한 캐시 일관성을 보장하도록 해야 합니다. 캐시된 멤버를 지정하지 않으면 비디오 메모리 관리자는 시스템 메모리 범위가 캐시할 수 없거나, 쓰기가 결합되거나, 캐시할 수 없다고 결정합니다. 그러나 이 경우 드라이버는 캐시 일관성을 보장하거나 캐시 일관성이 지정된 사용에 문제가 되지 않는다고 결정합니다.
이 유형의 할당은 암시적으로 PermanentSysMem 멤버가 설정된 할당과 동일한 잠금 의미 체계를 가집니다.
드라이버는 PermanentSysMem, Protected 또는 ExistingSysMem 멤버와 함께 ExistingKernelSysMem을 설정할 수 없습니다. 드라이버는 기본 화면에서 ExistingKernelSysMem 을 설정해서는 안 됩니다.
이 멤버를 설정하는 것은 32비트 Value 멤버(0x00000020)의 여섯 번째 비트를 설정하는 것과 같습니다.
FromEndOfSegment
[out] 페이징하는 동안 세그먼트 끝에서 할당을 할당해야 하는지 여부를 지정하는 UINT 값입니다. 비디오 메모리 관리자는 세그먼트 주소 공간을 검색하고 세그먼트의 시작 부분에서 스캔하는 대신 세그먼트 끝에서 할당할 공간을 찾습니다(기본 동작임). 그러나 암시되고 선호되는 세그먼트 정보는 이 플래그보다 우선합니다.
이 멤버를 설정하는 것은 32비트 Value 멤버(0x00000040)의 일곱 번째 비트를 설정하는 것과 같습니다.
DisableLargePageMapping
[out] 할당에 대한 큰 페이지 매핑을 사용하지 않도록 설정할지 여부를 지정하는 UINT 값입니다. 드라이버에 대한 큰 페이지에 대한 지원이 WDDM2.1부터 추가되었습니다. 큰 페이지는 가상 주소를 변환할 때 사용됩니다. 여기서 가장 낮은 수준 페이지 테이블은 수준 0 페이지 테이블의 범위가 같은 큰 페이지로 바뀝니다. 이 플래그는 이를 사용하지 않도록 설정하고 주소 변환에 페이지 테이블을 사용합니다.
이 멤버를 설정하는 것은 32비트 Value 멤버(0x00000080)의 여덟 번째 비트를 설정하는 것과 같습니다.
Overlay
[out] 할당이 오버레이 작업에 대한 것인지 여부를 지정하는 UINT 값입니다. 오버레이 할당은 메모리에 고정되며 TDR(시간 제한 검색 및 복구) 프로세스, PnP(플러그 앤 플레이) 중지 또는 수준 3 동기화가 발생하지 않는 한 비디오 메모리 관리자는 이를 제거할 수 없습니다. 수준 3 동기화가 발생하기 전에 오버레이는 일반적으로 제거됩니다. 기본적으로 오버레이 할당은 제한되며 세그먼트의 마지막 20%를 초과할 수 없습니다. 오버레이 할당이 조리개 세그먼트에 할당된 경우 디스플레이 미니포트 드라이버는 해당 조리개 세그먼트를 제거 세그먼트로 사용하는 다른 할당의 크기를 세그먼트 크기의 80%로 제한해야 합니다. 표시 미니포트 드라이버는 할당에 대한 DXGK_ALLOCATIONINFO 구조체의 EvictionSegmentSet 멤버에서 세그먼트에 대한 적절한 비트를 지정하여 할당이 제거에 세그먼트를 사용할 수 있음을 나타냅니다. 디스플레이 미니포트 드라이버가 다른 할당의 크기를 제한하지 않는 경우 고정된 할당(즉, 오버레이 할당)이 제거에 필요한 영역을 차지하므로 비디오 메모리 관리자는 세그먼트를 통해 해당 할당을 제거할 수 없습니다. 이 경우 제거되는 다른 할당의 콘텐츠가 손실되고 손실된 할당을 소유하는 애플리케이션은 더 이상 해당 할당으로 렌더링할 수 없습니다.
이 멤버를 설정하는 것은 32비트 Value 멤버(0x00000100)의 9번째 비트를 설정하는 것과 같습니다.
Capture
[out] 할당이 캡처 작업에 사용되는지 여부를 지정하는 UINT 값입니다. 캡처 할당은 오버레이 할당과 유사하게 메모리에 고정됩니다. 따라서 오버레이 할당에 적용되는 문제는 캡처 할당에도 적용됩니다. 이러한 문제에 대한 자세한 내용은 오버레이 플래그에 대한 설명을 참조하세요. 수준 3 동기화가 발생하기 전에 캡처는 일반적으로 중지됩니다.
이 멤버를 설정하는 것은 32비트 Value 멤버(0x00000200)의 10번째 비트를 설정하는 것과 같습니다.
CreateInVpr
[out] 비디오 보호 범위에서 할당을 만들어야 하는지 여부를 지정하는 UINT 값입니다. 이 멤버는 WDDM 버전 >= WDDM 2.1의 하드웨어 DRM(디지털 권한 관리)에 사용됩니다.
이 멤버를 설정하는 것은 32비트 Value 멤버(0x00000400)의 11번째 비트를 설정하는 것과 같습니다.
Reserved00
[in] WDDM 2.1 이전 버전의 경우 이 멤버는 예약되어 있으며 0으로 설정해야 합니다.
이 멤버를 설정하는 것은 32비트 Value 멤버(0x00000400)의 11번째 비트를 설정하는 것과 같습니다.
DXGK_ALLOC_RESERVED17
[in] 이 멤버는 예약되어 있으며 0으로 설정해야 합니다.
이 멤버를 설정하는 것은 32비트 Value 멤버(0x00000800)의 12번째 비트를 설정하는 것과 같습니다.
Reserved02
[in] 이 멤버는 예약되어 있으며 0으로 설정해야 합니다.
이 멤버를 설정하는 것은 32비트 Value 멤버(0x00001000)의 13번째 비트를 설정하는 것과 같습니다.
MapApertureCpuVisible
[in] 가 설정되면 드라이버가 DXGK_OPERATION_MAP_APERTURE_SEGMENT2 작업에 대한 DxgkDdiBuildPagingBuffer 호출 중에 메모리에 대한 CPU 액세스가 필요했음을 나타냅니다. MapApertureCpuVisible 은 DxgkDdiBuildPagingBuffer의 MapAperatureSegment2 기능의 일부이므로 이 필드를 사용하려면 드라이버가 mapAperature2Supported를 DXGK_VIDMMCAPS 설정해야 합니다. MapAperature2Supported가 설정되지 않았지만 드라이버가 MapApertureCpuVisible을 지정하면 DxgkDdiCreateAllocation에 대한 호출이 실패합니다. 자세한 내용은 IOMMU DMA 다시 매핑 을 참조하세요. Windows Server 2022부터 지원됩니다.
Reserved03
[in] 이 멤버는 예약되어 있으며 0으로 설정해야 합니다.
HistoryBuffer
[out] 사용자 모드 표시 드라이버가 기록 버퍼를 할당하는지 여부를 지정하는 UINT 값입니다. 표시 미니포트 드라이버는 사용자 모드 드라이버가 기록 버퍼의 생성 및 소멸을 관리할 수 있음을 나타내기 위해 이 플래그를 설정해야 합니다.
디스플레이 미니포트 드라이버가 HistoryBuffer를 설정하는 경우 CpuVisible 플래그도 설정해야 합니다. 드라이버가 캐시 일관성 조리개 세그먼트를 지원하는 경우 캐시됨도 설정해야 하며 다른 모든 멤버는 0으로 설정해야 합니다.
이 멤버를 설정하는 것은 32비트 Value 멤버(0x00004000)의 15번째 비트를 설정하는 것과 같습니다.
AccessedPhysically
커널 모드 드라이버는 실제 주소로 액세스되는 할당에 플래그를 설정합니다. 이러한 할당은 GPU 메모리 세그먼트에서 연속적으로 할당됩니다. 시스템 메모리에서 할당할 때 할당은 연속되지 않습니다.
이 멤버를 설정하는 것은 32비트 값 멤버(0x00008000)의 16번째 비트를 설정하는 것과 같습니다.
ExplicitResidencyNotification
이 플래그를 지정하면 할당 보존이 변경(제거, 커밋됨)될 때 드라이버가 NotifyResidency 페이징 버퍼 작업을 받습니다. 플래그는 AccessedPhysically 플래그가 설정된 경우에만 설정할 수 있습니다.
이 멤버를 설정하는 것은 32비트 Value 멤버(0x00010000)의 17번째 비트를 설정하는 것과 같습니다.
HardwareProtected
이 멤버가 설정되면 할당은 하드웨어 DRM에 사용되는 콘텐츠를 보유합니다.
CpuVisibleOnDemand
이 멤버가 설정되면 비디오 메모리 관리자는 매핑/잠겨 있을 때 할당에 대한 가상 주소를 할당하려고 시도합니다. 이렇게 하면 할당에 영구 가상 주소가 없으므로 사용되는 가상 주소 공간의 양이 줄어듭니다. CPU에서 직접 액세스할 수 있는 할당이라는 측면에서 CpuVisible 플래그와 유사하게 동작하지만 영구적으로 할당되는 대신 "주문형"에 대한 가상 주소를 가져옵니다.
DXGK_ALLOC_RESERVED16
[in] 이 멤버는 예약되어 있으며 0으로 설정해야 합니다.
DXGK_ALLOC_RESERVED15
[in] 이 멤버는 예약되어 있으며 0으로 설정해야 합니다.
DXGK_ALLOC_RESERVED14
[in] 이 멤버는 예약되어 있으며 0으로 설정해야 합니다.
DXGK_ALLOC_RESERVED13
[in] 이 멤버는 예약되어 있으며 0으로 설정해야 합니다.
DXGK_ALLOC_RESERVED12
[in] 이 멤버는 예약되어 있으며 0으로 설정해야 합니다.
DXGK_ALLOC_RESERVED11
[in] 이 멤버는 예약되어 있으며 0으로 설정해야 합니다.
DXGK_ALLOC_RESERVED10
[in] 이 멤버는 예약되어 있으며 0으로 설정해야 합니다.
DXGK_ALLOC_RESERVED9
[in] 이 멤버는 예약되어 있으며 0으로 설정해야 합니다.
DXGK_ALLOC_RESERVED4
[in] 이 멤버는 예약되어 있으며 0으로 설정해야 합니다.
DXGK_ALLOC_RESERVED3
[in] 이 멤버는 예약되어 있으며 0으로 설정해야 합니다.
DXGK_ALLOC_RESERVED2
[in] 이 멤버는 예약되어 있으며 0으로 설정해야 합니다.
DXGK_ALLOC_RESERVED1
[in] 이 멤버는 예약되어 있으며 0으로 설정해야 합니다.
DXGK_ALLOC_RESERVED0
[in] 이 멤버는 예약되어 있으며 0으로 설정해야 합니다.
Value
[out] 할당의 속성을 식별하는 32비트 값을 보유할 수 있는 DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 포함된 공용 구조체의 멤버입니다.
설명
WDDM 버전 >= WDDM 2.0을 대상으로 하는 디스플레이 미니포트 드라이버는 이 구조를 사용하여 비디오 메모리 관리자에 대해 이러한 플래그를 지정합니다. WDDM 2.0 이전 버전의 WDDM을 대상으로 하는 드라이버는 DXGK_ALLOCATIONINFOFLAGS 사용해야 합니다.
32비트 Value 멤버에서 비트를 설정하거나 DXGK_ALLOCATIONINFOFLAGS 구조체에 포함된 공용 구조체의 개별 멤버를 설정하여 할당 속성을 지정할 수 있습니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 10 |
머리글 | d3dkmddi.h(D3dkmddi.h 포함) |