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 成員時,驅動程式會向視訊記憶體管理員指出現有的記憶體已對應可快取。 如果現有的記憶體已對應可快取,但驅動程式無法設定快 取成員, 則視訊記憶體管理員無法確保數據一致性,而且會發生損毀。 驅動程式應該為應用程式或使用者模式顯示驅動程式讀取的配置設定快取成員。 驅動程式絕對不應該為僅寫入配置設定快取成員。
當驅動程式設定此成員時,驅動程式也必須設定 CpuVisible 成員。 驅動程式 不得在主要 介面上設定快取。
設定此成員相當於設定 32 位 Value 成員的第三個位 (0x00000004) 。
Protected
[out]UINT 值,指定配置支援存放區是否應該配置在核心記憶體中,而不是使用者位址空間,以保護配置不受應用程式的潛在直接 CPU 存取。 驅動程式無法結合 PermanentSysMem、ExistingSysMem 或 ExistingKernelSysMem 成員來設定此成員。 驅動程式不得在主要介面上設定 Protected 。
設定此成員相當於設定 32 位 Value 成員的第四個位 (0x00000008) 。
ExistingSysMem
[out]UINT 值,指定視訊記憶體管理員是否應該使用現有的系統記憶體範圍作為配置支援存放區。 系統記憶體範圍必須是目前進程的有效使用者模式位址,才能用於配置的大小。 系統記憶體範圍也必須是頁面對齊,而且必須是大小為倍數的頁面。
如果系統記憶體範圍是可快取的虛擬位址,驅動程式應該設定 Cached 成員,以通知視訊記憶體管理員,以確保配置上的快取一致性。 如果未指定 快取 成員,視訊記憶體管理員會判斷系統記憶體範圍無法快取、寫入合併或可快取;不過,在此情況下,驅動程式可確保快取一致性,或判斷快取一致性不是指定使用量的問題。
請注意,這種類型的配置會隱含地與 設定 PermanentSysMem 成員的配置具有相同的鎖定語意。
驅動程式無法將 ExistingSysMem 與 PermanentSysMem、 Protected 或 ExistingKernelSysMem 成員結合。 驅動程式不得在主要介面上設定 ExistingSysMem 。
設定此成員相當於設定 32 位 Value 成員的第五個位 (0x00000010) 。
ExistingKernelSysMem
[out]UINT 值,指定視訊記憶體管理員是否應該使用現有的系統記憶體範圍作為配置支援存放區。 系統記憶體範圍必須是一個有效的內核模式位址,該位址會對齊頁面和大小為倍數的頁面。
如果系統記憶體範圍是可快取的虛擬位址,驅動程式應該設定 Cached 成員,以通知視訊記憶體管理員,以確保配置上的快取一致性。 如果未指定 快取 成員,視訊記憶體管理員會判斷系統記憶體範圍無法快取、寫入合併或可快取;不過,在此情況下,驅動程式可確保快取一致性,或判斷快取一致性不是指定使用量的問題。
請注意,這種類型的配置會隱含地與 設定 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) 。
Capture
[out]UINT 值,指定配置是否用於擷取作業。 擷取配置會釘選在記憶體中,類似於重疊配置。 因此,套用至重迭配置的問題也適用於擷取配置。 如需這些問題的詳細資訊,請參閱 重迭 旗標的描述。 請注意,在 層級 3 同步 處理發生之前,通常會停止擷取。
設定此成員相當於設定 32 位 Value 成員的第十位 (0x00000200) 。
CreateInVpr
[out]UINT 值,指定是否應該在受視訊保護的範圍內建立配置。 此成員用於 WDDM 版本 >= WDDM 2.1 中的硬體數位版權管理 (DRM) 。
設定此成員相當於設定 32 位 Value 成員的第十一位 (0x00000400) 。
Reserved00
[in]對於WDDM 2.1 之前的 WDDM 版本,此成員是保留的,而且應該設定為零。
設定此成員相當於設定 32 位 Value 成員的第十一位 (0x00000400) 。
DXGK_ALLOC_RESERVED17
[in]這個成員是保留的,而且應該設定為零。
設定此成員相當於設定 32 位 Value 成員的第十二位 (0x00000800) 。
Reserved02
[in]這個成員是保留的,而且應該設定為零。
設定此成員相當於設定 32 位 Value 成員的第十三位 (0x00001000) 。
MapApertureCpuVisible
[in]設定時,表示驅動程式在針對DXGK_OPERATION_MAP_APERTURE_SEGMENT2作業呼叫 DxgkDdiBuildPagingBuffer 期間需要 CPU 存取記憶體。 MapApertureCpuVisible 是 DxgkDdiBuildPagingBuffer 的 MapAperatureSegment2 功能的一部分,因此驅動程式必須設定 DXGK_VIDMMCAPS MapAperature2Supported 才能使用此字段。 如果未設定 MapAperature2Supported ,但驅動程式指定 MapApertureCpuVisible, 則對 DxgkDdiCreateAllocation 的呼叫將會失敗。 如需詳細資訊,請參閱 IOMMU DMA 重新對應 。 從 Windows Server 2022 開始支援。
Reserved03
[in]這個成員是保留的,而且應該設定為零。
HistoryBuffer
[out]UINT 值,指定使用者模式顯示驅動程式是否配置歷程記錄緩衝區。 顯示迷你埠驅動程序必須設定此旗標,以指出使用者模式驅動程式可以管理歷程記錄緩衝區的建立和解構。
當顯示迷你埠驅動程式設定 HistoryBuffer 時,它也必須設定 CpuVisible 旗標。 如果驅動程序支援快取一致的光圈區段,它也必須設定 [ 快取],而且所有其他成員都必須設定為零。
設定此成員相當於設定 32 位 Value 成員的第十五位 (0x00004000) 。
AccessedPhysically
核心模式驅動程式會在配置上設定旗標,這些配置是由其實體位址存取。 這類配置將會從 GPU 記憶體區段連續配置。 從系統記憶體配置時,配置不會連續。
設定此成員相當於設定 32 位 Value 成員的第十六位 (0x00008000) 。
ExplicitResidencyNotification
當指定此旗標時,當配置落地變更 (認可) 時,驅動程式會收到 NotifyResidency 分頁緩衝區作業。 只有在已設定 AccessedPhysically 旗標時,才能設定旗標。
設定此成員相當於設定 32 位 Value 成員的第十七位 (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 (include D3dkmddi.h) |