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]UINT 值,指定 CPU 是否可以直接存取配置。 顯示迷你埠驅動程序必須設定此旗標,使用者模式顯示驅動程式才能在配置上成功呼叫 pfnLockCb 函式。 如果未在配置上設定此旗標,pfnLockCb 會傳回錯誤。
請注意,只有建立共用配置的程式可以鎖定該配置。
設定這個成員相當於設定 32 位 Value 成員的第一個位 (0x00000001)。
PermanentSysMem
[out]UINT 值,指定即使內容位於記憶體區段中,配置複本是否應該保留在系統記憶體中。 根據預設,將配置傳輸至記憶體區段時,介面系統記憶體備份存放區會遺失。 當指定 PermanentSysMem 旗標,並從記憶體區段收回配置時,配置的內容會被捨棄,如果配置不是髒的,則不會分頁(也就是說,配置不是寫入作業的目標,因為它已分頁)。
對配置 pfnLockCb 的呼叫一律會傳回配置的系統記憶體備份存放區。 如果使用者模式顯示驅動程式呼叫 pfnUnlockCb 時,配置位於記憶體區段,則配置的記憶體區段資源會以新的內容更新。 這項更新會顯示為顯示迷你埠驅動程式,透過 DxgkDdiBuildPagingBuffer 函式進行一般分頁作業。 請注意,如果顯示迷你埠驅動程式需要分頁作業的最小區域大小或對齊方式,則此需求應該反映在鎖定的區域。 當驅動程式設定 PermanentSysMem時,驅動程式也必須設定 CpuVisible 成員。 驅動程式不得在主要介面上設定 PermanentSysMem。
設定此成員相當於設定 32 位 Value 成員的第二個位 (0x00000002)。
Cached
[out]UINT 值,指定配置備份存放區是否應配置為快取記憶體;根據預設,配置備份存放區會儲存為寫入合併的記憶體。 當快取記憶體配置用於不快取連貫的區段中時(例如記憶體區段或 AGP 區段),視訊記憶體管理員會在適當時間從處理器的快取中排清該配置內容,以確保配置內容的一致性。
當驅動程式設定 Cached,同時設定 ExistingSysMem 或 ExistingKernelSysMem 成員時,驅動程式會向視訊記憶體管理員指出現有的記憶體已對應可快取。 如果現有的記憶體已對應可快取,但驅動程式無法設定 快取 成員,則視訊記憶體管理員無法確保數據一致性,而且會發生損毀。 驅動程式應該針對要由應用程式或使用者模式顯示驅動程式讀取的配置,設定 Cached 成員。 驅動程式絕對不應該為唯寫配置設定 Cached 成員。
當驅動程式設定此成員時,驅動程式也必須設定 CpuVisible 成員。 驅動程式不得在主要介面上設定快取 。
設定此成員相當於設定 32 位 Value 成員的第三位 (0x00000004)。
Protected
[out]UINT 值,指定配置支援存放區是否應該配置在核心記憶體中,而不是使用者位址空間,以保護配置不受應用程式的潛在直接 CPU 存取。 驅動程式無法將這個成員與 PermanentSysMem、ExistingSysMem或 ExistingKernelSysMem 成員結合。 驅動程式不得在主要介面上設定 Protected。
設定這個成員相當於設定 32 位 Value 成員的第四位 (0x00000008)。
ExistingSysMem
[out]UINT 值,指定視訊記憶體管理員是否應該使用現有的系統記憶體範圍作為配置備份存放區。 系統記憶體範圍必須是目前進程之配置大小的有效使用者模式位址。 系統記憶體範圍也必須對齊頁面,而且必須是大小為倍數的頁面。
如果系統記憶體範圍是可快取的虛擬位址,驅動程式應設定 Cached 成員,以通知影片記憶體管理員,以確保配置上的快取一致性。 如果未指定 快取 成員,視訊記憶體管理員會判斷系統記憶體範圍無法快取、寫入合併或可快取;不過,在此情況下,驅動程式會確保快取一致性,或判斷快取一致性不是指定使用量的問題。
請注意,這種類型的配置隱含具有與設定永久SysMem 成員 相同的鎖定語意。
驅動程式無法設定 ExistingSysMem 與 PermanentSysMem、Protected或 ExistingKernelSysMem 成員。 驅動程式不得在主要介面上設定 ExistingSysMem。
設定這個成員相當於設定 32 位 Value 成員的第五位 (0x00000010)。
ExistingKernelSysMem
[out]UINT 值,指定視訊記憶體管理員是否應該使用現有的系統記憶體範圍作為配置備份存放區。 系統記憶體範圍必須是有效的內核模式位址,且該位址的大小會對齊頁面和頁面倍數。
如果系統記憶體範圍是可快取的虛擬位址,驅動程式應設定 Cached 成員,以通知影片記憶體管理員,以確保配置上的快取一致性。 如果未指定 快取 成員,視訊記憶體管理員會判斷系統記憶體範圍無法快取、寫入合併或可快取;不過,在此情況下,驅動程式會確保快取一致性,或判斷快取一致性不是指定使用量的問題。
請注意,這種類型的配置隱含具有與設定永久SysMem 成員 相同的鎖定語意。
驅動程式無法設定 ExistingKernelSysMem 與 PermanentSysMem、Protected或 ExistingSysMem 成員。 驅動程式不得在主要介面上設定 ExistingKernelSysMem。
設定這個成員相當於設定 32 位 Value 成員的第六位 (0x00000020)。
FromEndOfSegment
[out]UINT 值,指定在分頁期間是否應該從區段結尾配置配置。 視訊記憶體管理員會掃描區段位址空間,並尋找區段結尾的配置空間,而不是從區段開頭掃描(這是預設行為)。 不過,提示和慣用區段資訊會優先於此旗標。
設定此成員相當於設定 32 位 Value 成員的第七位 (0x00000040)。
DisableLargePageMapping
[out]UINT 值,指定是否應該停用配置的大型頁面對應。 從WDDM2.1 開始,已新增驅動程式的大型頁面支援。 轉譯虛擬位址時會使用大型頁面,其中最低層級頁面數據表會取代為包含層級 0 頁面數據表之涵蓋範圍相等的大型頁面。 此旗標會停用該旗標,並使用頁面表進行位址轉譯。
設定此成員相當於設定 32 位 Value 成員的第八位 (0x00000080)。
Overlay
[out]UINT 值,指定配置是否用於重迭作業。 重疊配置會釘選在記憶體中,除非發生逾時偵測和復原 (TDR) 進程、隨插即用 (PnP) 停止,或發生第三層同步處理 ,否則視訊記憶體管理員無法收回它們。 請注意,在發生第三層同步處理之前,重疊通常會終結。 根據預設,重迭配置會受到限制,且不能佔用超過最後 20% 的區段。 如果重疊配置是在光圈區段中配置,則顯示迷你埠驅動程式應將使用該光圈區段做為收回區段的任何其他配置大小限制為區段大小的 80%。 顯示迷你埠驅動程式表示配置可以使用區段進行收回,方法是為配置 EvictionSegmentSet 中的區段指定適當的位, 配置之 DXGK_ALLOCATIONINFO 結構的成員。 如果顯示迷你埠驅動程式未限制另一個配置的大小,視訊記憶體管理員就無法透過區段收回該配置,因為釘選的配置(也就是重疊配置)佔用收回所需的區域。 在此情況下,正在收回之其他配置的內容會遺失,且擁有遺失配置的應用程式無法再使用該配置轉譯。
設定這個成員相當於設定 32 位 Value 成員的第九位 (0x00000100)。
Capture
[out]UINT 值,指定配置是否用於擷取作業。 擷取配置會釘選在記憶體中,類似於重疊配置。 因此,套用至重迭配置的問題也適用於擷取配置。 如需這些問題的詳細資訊,請參閱重疊 旗標 的描述。 請注意,層級 3 同步處理 發生之前,通常會停止擷取。
設定這個成員相當於設定 32 位 Value 成員的第十位 (0x00000200)。
CreateInVpr
[out]UINT 值,指定是否應該在影片保護範圍中建立配置。 此成員用於 WDDM 版本中的硬體數位版權管理 (DRM)>= WDDM 2.1。
設定此成員相當於設定 32 位 Value 成員的第十一位 (0x00000400)。
Reserved00
[in]對於WDDM 2.1 之前的 WDDM 版本,此成員是保留的,而且應該設定為零。
設定此成員相當於設定 32 位 Value 成員的第十一位 (0x00000400)。
DXGK_ALLOC_RESERVED17
[in]這個成員是保留的,而且應該設定為零。
設定這個成員相當於設定 32 位 Value 成員的第 12 位 (0x00000800)。
Reserved02
[in]這個成員是保留的,而且應該設定為零。
設定此成員相當於設定 32 位 Value 成員的第 32 位 (0x00001000)。
MapApertureCpuVisible
[in]設定時,表示驅動程式在 DxgkDdiBuildPagingBuffer 呼叫 DXGK_OPERATION_MAP_APERTURE_SEGMENT2 作業時,需要 CPU 存取記憶體。 MapApertureCpuVisible 是 DxgkDdiBuildPagingBufferMapAperatureSegment2 功能的一部分,因此驅動程式必須設定 DXGK_VIDMMCAPS MapAperature2Supported 才能使用此字段。 如果未設定 MapAperature2Supported,但驅動程式會指定 mapApertureCpuVisible ,則呼叫 dxgkDdiCreateAllocation 將會失敗。 如需詳細資訊,請參閱 IOMMU DMA 重新對應。 從 Windows Server 2022 開始支援。
Reserved03
[in]這個成員是保留的,而且應該設定為零。
HistoryBuffer
[out]UINT 值,指定使用者模式顯示驅動程式是否配置歷程記錄緩衝區。 顯示迷你埠驅動程序必須設定此旗標,以指出使用者模式驅動程式可以管理記錄緩衝區的建立和破壞。
當顯示迷你埠驅動程序設定 HistoryBuffer時,它也必須設定 CpuVisible 旗標。 如果驅動程序支援快取連貫的光圈區段,它也必須設定 Cached,而且所有其他成員都必須設定為零。
設定這個成員相當於設定 32 位 Value 成員的第 15 位 (0x00004000)。
AccessedPhysically
核心模式驅動程式會在配置上設定旗標,這些配置是由其實體位址存取。 這類配置會從 GPU 記憶體區段連續配置。 從系統記憶體配置時,配置不會連續。
設定這個成員相當於設定 32 位 Value 成員的第 16 位 (0x00008000)。
ExplicitResidencyNotification
指定此旗標時,當配置落地變更時,驅動程式會收到 NotifyResidency 分頁緩衝區作業(已收回、認可)。 只有在設定 AccessedPhysically 旗標時,才能設定旗標。
設定此成員相當於設定 32 位 Value 成員的第 17 位 (0x00010000)。
HardwareProtected
設定此成員時,配置會保留用於硬體DRM的內容。
CpuVisibleOnDemand
設定此成員時,影片記憶體管理員會嘗試在對應/鎖定時配置配置的虛擬位址。 這會導致配置沒有永久虛擬位址,這可減少所使用的虛擬位址空間量。 其行為類似於 CpuVisible 旗標,因為它是 CPU 直接存取的配置,但它只會取得其「隨選」的虛擬位址,而不是永久指派。
DXGK_ALLOC_RESERVED16
[in]這個成員是保留的,而且應該設定為零。
DXGK_ALLOC_RESERVED15
[in]這個成員是保留的,而且應該設定為零。
DXGK_ALLOC_RESERVED14
[in]這個成員是保留的,而且應該設定為零。
DXGK_ALLOC_RESERVED13
[in]這個成員是保留的,而且應該設定為零。
DXGK_ALLOC_RESERVED12
[in]這個成員是保留的,而且應該設定為零。
DXGK_ALLOC_RESERVED11
[in]這個成員是保留的,而且應該設定為零。
DXGK_ALLOC_RESERVED10
[in]這個成員是保留的,而且應該設定為零。
DXGK_ALLOC_RESERVED9
[in]這個成員是保留的,而且應該設定為零。
DXGK_ALLOC_RESERVED4
[in]這個成員是保留的,而且應該設定為零。
DXGK_ALLOC_RESERVED3
[in]這個成員是保留的,而且應該設定為零。
DXGK_ALLOC_RESERVED2
[in]這個成員是保留的,而且應該設定為零。
DXGK_ALLOC_RESERVED1
[in]這個成員是保留的,而且應該設定為零。
DXGK_ALLOC_RESERVED0
[in]這個成員是保留的,而且應該設定為零。
Value
[out]等位中的成員,DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 包含可保存識別配置屬性的32位值。
言論
以任何 WDDM 版本為目標的顯示迷你埠驅動程式 >= WDDM 2.0 會使用此結構來指定視訊記憶體管理員的這些旗標。 以 WDDM 2.0 之前的 WDDM 版本為目標的驅動程式應該使用 DXGK_ALLOCATIONINFOFLAGS。
您可以在 32 位 Value 成員中設定位,或在 DXGK_ALLOCATIONINFOFLAGS 結構所包含的等位中設定結構個別成員,以指定配置的屬性。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows 10 |
標頭 | d3dkmddi.h (包括 D3dkmddi.h) |