D3DKMT_CREATEALLOCATIONFLAGS 結構 (d3dkmthk.h)
D3DKMT_CREATEALLOCATIONFLAGS 是位欄位的結構,指定如何在 呼叫 D3DKMTCreateAllocation 函式中建立配置。
語法
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
這個成員是保留的,而且應該設定為零。 從 Windows 7 開始支援。
RestrictSharedAccess
指定是否要建立跨所有裝置共享的資源,但有一些限制。 從 Windows 7 開始支援。
ExistingSysMem
這個成員是保留的,而且應該設定為零。 從 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
這個成員是保留的,而且應該設定為零。 從 Windows 8 開始支援。
CreateCached
這個成員是保留的,而且應該設定為零。 從 Windows 8 開始支援。
SwapChainBackBuffer
這個成員是保留的,而且應該設定為零。 從 Windows 8 開始支援。
CrossAdapter
如果設定,表示資源是共用 的交叉配接器資源。
OpenCrossAdapter
如果設定,表示資源是藉由開啟交叉配接器資源來建立的。 從使用者模式建立配置時無法使用。 從 Windows 8.1 (WDDM 1.3) 開始支援。
PartialSharedCreation
指定配置是否建立為部分共享配置。 從 Windows 8.1 (WDDM 1.3) 開始支援。
Zeroed
[out]設定配置以零頁完成時。 從 Windows 8 (WDDM 1.3) 開始支援。
WriteWatch
[in]指出是否要建立已啟用寫入監看式的配置。 從 Windows 8.1 (WDDM 1.3) 開始支援。
StandardAllocation
[in]設定時,會指示 Dxgkrnl 使用 pStandardAllocation 建立標準配置,而不是 pPrivateDriverData。 如果已設定 StandardAllocation,則必須先設定 ExistingSysMem 或 ExistingSection (,但不能同時同時設定) 。 此外,建立 StandardAllocation 時,也必須設定 CreateShared 和 CrossAdapter 旗標。 從 Windows 10 版本 1709 (WDDM 2.3) 開始支援。
ExistingSection
[in]設定時,會指示 Dxgkrnl 使用區段句柄 (hSection) ,而不是 (pSystemMem) 的系統記憶體指標。 ExistingSystemMem 和 ExistingSection 不能同時針對相同的配置進行設定。 如果已設定 ExistingSection ,則也必須設定 StandardAllocation 。 從 Windows 10 版本 1709 (WDDM 2.3) 開始支援。
AllowNotZeroed
[in]表示可以建立配置,而不需要零頁。 從 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 開始支援。
這個成員是保留的,而且應該設定為零。
備註
必須先使用 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) |