D3DKMT_CREATEALLOCATIONFLAGS 구조체(d3dkmthk.h)
D3DKMT_CREATEALLOCATIONFLAGSD3DKMTCreateAllocation 함수에 대한 호출에서 할당을 만드는 방법을 지정하는 비트 필드의 구조입니다.
구문
typedef struct _D3DKMT_CREATEALLOCATIONFLAGS {
UINT CreateResource : 1;
UINT CreateShared : 1;
UINT NonSecure : 1;
UINT CreateProtected : 1;
UINT RestrictSharedAccess : 1;
UINT ExistingSysMem : 1;
UINT NtSecuritySharing : 1;
UINT ReadOnly : 1;
UINT CreateWriteCombined : 1;
UINT CreateCached : 1;
UINT SwapChainBackBuffer : 1;
UINT CrossAdapter : 1;
UINT OpenCrossAdapter : 1;
UINT PartialSharedCreation : 1;
UINT Zeroed : 1;
UINT WriteWatch : 1;
UINT StandardAllocation : 1;
UINT ExistingSection : 1;
UINT AllowNotZeroed : 1;
UINT PhysicallyContiguous : 1;
UINT NoKmdAccess : 1;
UINT SharedDisplayable : 1;
UINT NoImplicitSynchronization : 1;
#if ...
UINT Reserved : 9;
#elif
UINT Reserved : 10;
#elif
UINT Reserved : 11;
#elif
UINT Reserved : 13;
#elif
UINT Reserved : 14;
#elif
UINT Reserved : 16;
#elif
UINT Reserved : 21;
#else
UINT Reserved : 26;
#endif
} D3DKMT_CREATEALLOCATIONFLAGS;
멤버
CreateResource
디바이스별 리소스를 만들지 여부를 지정합니다. CreateShared를 설정하는 경우 CreateResource도 설정해야 합니다.
CreateShared
모든 디바이스에서 공유되는 리소스를 만들지 여부를 지정합니다. CreateShared를 설정하는 경우 CreateResource도 설정해야 합니다. CreateShared 사용에 대한 자세한 내용은 설명 섹션을 참조하세요.
NonSecure
모든 프로세스에서 열 수 있는 할당을 만들지 여부를 지정합니다. NonSecure가 설정된 경우 보안 및 비보안 프로세스가 할당을 열 수 있습니다.
CreateProtected
이 멤버는 예약되어 있으며 0으로 설정해야 합니다. Windows 7부터 지원됩니다.
RestrictSharedAccess
일부 제한 사항이 있지만 모든 디바이스에서 공유되는 리소스를 만들지 여부를 지정합니다. Windows 7부터 지원됩니다.
ExistingSysMem
이 멤버는 예약되어 있으며 0으로 설정해야 합니다. Windows 7부터 지원됩니다. ExistingSysMem의 제한 사항은 다음과 같습니다.
ExistingSystemMem 및 ExistingSection 은 둘 다 동일한 할당에 대해 설정할 수 없습니다. ExistingSysMem 이 설정되고 StandardAllocation 도 설정해야 합니다.
ExistingSysMem 을 올바르게 정렬해야 합니다. D3D 런타임이 커널에 제공하는 기존 시스템 메모리 버퍼는 페이지 정렬과 페이지 크기의 배수여야 합니다. 그렇지 않으면 커널이 D3DKMTCreateAllocation 호출에 실패합니다.
커널이 표준 할당의 D3DKMDT_STANDARDALLOCATION_GDISURFACE 형식을 만드는 경우:
런타임은 기존 시스템 버퍼의 크기를 제공합니다. 커널은 이 크기를 사용하여 KMD가 올바르게 이해하는 다음 매개 변수를 사용하여 GDISURFACE 형식의 표준 할당을 만듭니다.
D3DKMDT_GDISURFACEDATA::Width = Size of ExistingSysMem buffer D3DKMDT_GDISURFACEDATA::Height = 1 D3DKMDT_GDISURFACEDATA::Format = D3DDDIFMT_UNKNOWN D3DKMDT_GDISURFACEDATA::Type = D3DKMDT_GDISURFACE_TEXTURE_CROSSADAPTER
MemRotated인 DXGALLOCATION을 가리키는 ExistingSysMem 포인터로부터 보호
커널은 사용자 모드가 기존 DXGALLOCATION을 잠그고 결과 CPU 포인터를 사용하여 ExistingSysMem 표준 할당을 만드는 시나리오로부터 보호해야 합니다. DXGALLOCATION VAD가 MEM_ROTATE 경우( 즉, 할당이 VRAM에 있을 수 있는 경우)이 유효하지 않습니다. 커널은 ExistingSysMem 호출을 사용하여 표준 할당 만들기에서 다음 단계를 수행합니다.
- MemSecure ExistingSysMem 포인터입니다.
- VirtualQuery 메모리입니다. 특성에 MEM_ROTATE 포함되어 있으면 호출이 실패합니다.
- MemSecure는 메모리가 커널의 뒤로 변경되지 않도록 이 할당이 해제된 경우에만 해제됩니다.
NtSecuritySharing
할당이 NT 핸들과 공유되는지 여부를 지정합니다. 즉, 리소스에 대한 전역 D3DKMT_HANDLE 커널 모드 핸들이 없습니다.
NtSecuritySharing이 1(TRUE)로 설정된 경우:
- 할당은 D3DKMTShareObjects 함수를 사용하여 공유되지만 리소스에 대한 전역 D3DKMT_HANDLE 핸들이 없습니다.
- CreateShared를 1로 설정해야 합니다.
NtSecuritySharing 사용에 대한 자세한 내용은 설명 섹션을 참조하세요. Windows 8부터 지원됩니다.
ReadOnly
할당만 읽을 수 있는지 여부를 지정합니다. Windows 8부터 지원됩니다.
CreateWriteCombined
이 멤버는 예약되어 있으며 0으로 설정해야 합니다. Windows 8부터 지원됩니다.
CreateCached
이 멤버는 예약되어 있으며 0으로 설정해야 합니다. Windows 8부터 지원됩니다.
SwapChainBackBuffer
이 멤버는 예약되어 있으며 0으로 설정해야 합니다. Windows 8부터 지원됩니다.
CrossAdapter
설정된 경우 리소스가 공유 어댑터 간 리소스임을 나타냅니다.
OpenCrossAdapter
설정된 경우 는 크로스 어댑터 리소스를 열어 리소스가 생성되었음을 나타냅니다. 사용자 모드에서 할당을 만들 때 사용할 수 없습니다. Windows 8.1(WDDM 1.3)부터 지원됩니다.
PartialSharedCreation
할당이 부분 공유 할당으로 생성되는지 여부를 지정합니다. Windows 8.1(WDDM 1.3)부터 지원됩니다.
Zeroed
[out] 할당이 0 페이지로 처리된 시점을 설정합니다. Windows 8(WDDM 1.3)부터 지원됩니다.
WriteWatch
[in] 쓰기 감시를 사용하도록 설정된 할당을 만들지 여부를 나타냅니다. Windows 8.1(WDDM 1.3)부터 지원됩니다.
StandardAllocation
[in] 설정되면 pPrivateDriverData 대신 pStandardAllocation을 사용하여 표준 할당을 만들도록 Dxgkrnl에 지시합니다. StandardAllocation이 설정된 경우 ExistingSysMem 또는 ExistingSection(둘 다 아님)도 설정해야 합니다. 또한 StandardAllocation을 만들 때 CreateShared 및 CrossAdapter 플래그도 설정해야 합니다. Windows 10 버전 1709(WDDM 2.3)부터 지원됩니다.
ExistingSection
[in] 설정되면 시스템 메모리 포인터(pSystemMem) 대신 섹션 핸들(hSection)을 사용하도록 Dxgkrnl에 지시합니다. ExistingSystemMem 및 ExistingSection 은 둘 다 동일한 할당에 대해 설정할 수 없습니다. ExistingSection이 설정된 경우 StandardAllocation도 설정해야 합니다. Windows 10 버전 1709(WDDM 2.3)부터 지원됩니다.
AllowNotZeroed
[in] 페이지를 0으로 만들지 않고 할당을 만들 수 있음을 나타냅니다. Windows 10 버전 1903(WDDM 2.6)부터 지원됩니다.
PhysicallyContiguous
[in] 할당이 물리적으로 연속되어야 했음을 나타냅니다. Windows 10 버전 2004(WDDM 2.7)부터 지원됩니다.
NoKmdAccess
[in] KMD에 할당에 대한 알림이 표시되지 않음을 나타냅니다. Windows 10 버전 2004(WDDM 2.7)부터 지원됩니다.
SharedDisplayable
할당이 표시 가능한 공유 리소스임을 나타냅니다. Windows 11(WDDM 3.0)부터 지원됩니다.
NoImplicitSynchronization
Reserved
Windows 8부터 지원됩니다.
이 멤버는 예약되어 있으며 0으로 설정해야 합니다.
설명
D3DKMTShareObjects 함수를 사용하여 공유할 개체는 먼저 NtSecuritySharing 플래그 값 집합을 사용하여 만들어야 합니다. 이 플래그 값은 D3DKMT_CREATEALLOCATIONFLAGS, D3DKMT_CREATEKEYEDMUTEX2_FLAGS 및 D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS 구조에서 사용할 수 있습니다.
드라이버는 D3DKMT_CREATEALLOCATIONFLAGS 공유 플래그에 대한 다음 지침을 따라야 합니다.
- 할당이 공유되지 않으면 CreateShared 및 NtSecuritySharing을 모두 0으로 설정합니다.
- 할당이 D3DKMT_HANDLE 데이터 형식과 공유되는 경우 CreateShared = 1 및 NtSecuritySharing = 0을 설정합니다.
- 할당이 프로세스에 대한 NT 핸들과 공유되고 리소스에 대한 전역 D3DKMT_HANDLE 커널 모드 핸들이 없는 경우 CreateShared = 1 및 NtSecuritySharing = 1을 설정합니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista |
머리글 | d3dkmthk.h(D3dkmthk.h 포함) |