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 段) )中时,视频内存管理器通过在适当的时间从处理器缓存中刷新该分配内容来确保分配内容的一致性。

当驱动程序设置 缓存 并且还设置 ExistingSysMemExistingKernelSysMem 成员时,驱动程序会向视频内存管理器指示现有内存已映射可缓存。 如果现有内存已映射可缓存,但驱动程序无法设置 缓存 成员,则视频内存管理器无法确保数据一致性,并且会发生损坏。 驱动程序应为要由应用程序或用户模式显示驱动程序读取的分配设置 缓存 成员。 驱动程序不应为仅写分配设置 缓存 成员。

当驱动程序设置此成员时,驱动程序还必须设置 CpuVisible 成员。 驱动程序不得在主图面上设置 缓存

设置此成员等效于设置 32 位 Value 成员的第三位 (0x00000004) 。

Protected

[out]一个 UINT 值,该值指定是否应在内核内存中分配分配支持存储,而不是用户地址空间,以保护分配免受应用程序的潜在直接 CPU 访问。 驱动程序不能与 PermanentSysMem、ExistingSysMemExistingKernelSysMem 成员结合使用来设置此成员。 驱动程序不得在主图面上设置 Protected

设置此成员等效于设置 32 位 Value 成员的第四位 (0x00000008) 。

ExistingSysMem

[out]一个 UINT 值,该值指定视频内存管理器是否应将现有系统内存范围用作分配的后盾存储。 系统内存范围必须是当前进程的有效用户模式地址,才能分配大小。 系统内存范围也必须是页面对齐的,并且必须是大小为倍数的页面。

如果系统内存范围是可缓存的虚拟地址,驱动程序应将 缓存 成员设置为通知视频内存管理器,以确保分配上的缓存一致性。 如果未指定 缓存 成员,则视频内存管理器确定系统内存范围不可缓存、写入组合或可缓存;但是,在这种情况下,驱动程序要么确保缓存一致性,要么确定缓存一致性不是指定用法的问题。

请注意,这种类型的分配隐式具有与 在其中设置 PermanentSysMem 成员的分配相同的锁语义。

驱动程序无法将 ExistingSysMem 与 PermanentSysMemProtectedExistingKernelSysMem 成员结合使用。 驱动程序不得在主图面上设置 ExistingSysMem

设置此成员等效于设置 32 位 Value 成员的第五位 (0x00000010) 。

ExistingKernelSysMem

[out]一个 UINT 值,该值指定视频内存管理器是否应将现有系统内存范围用作分配的后盾存储。 系统内存范围必须是一个有效的内核模式地址,该地址在页面上对齐,并且页面大小为多个页。

如果系统内存范围是可缓存的虚拟地址,驱动程序应将 缓存 成员设置为通知视频内存管理器,以确保分配上的缓存一致性。 如果未指定 缓存 成员,则视频内存管理器确定系统内存范围不可缓存、写入组合或可缓存;但是,在这种情况下,驱动程序要么确保缓存一致性,要么确定缓存一致性不是指定用法的问题。

请注意,这种类型的分配隐式具有与 在其中设置 PermanentSysMem 成员的分配相同的锁语义。

驱动程序无法将 ExistingKernelSysMemPermanentSysMemProtectedExistingSysMem 成员结合使用。 驱动程序不得在主图面上设置 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 同步发生。 请注意,在发生第三级同步之前,覆盖通常会被销毁。 默认情况下,覆盖分配受到限制,不能占用超过最后 20% 的段。 如果在光圈段中分配覆盖分配,则显示微型端口驱动程序应将使用该光圈段作为逐出段的任何其他分配的大小限制为 80% 的段大小。 显示微型端口驱动程序指示分配可以通过为分配的DXGK_ALLOCATIONINFO结构的 EvictionSegmentSet 成员中的段指定适当的位来使用段进行逐出。 如果显示微型端口驱动程序不限制另一个分配的大小,则视频内存管理器无法通过段逐出该分配,因为固定的分配 (,覆盖分配) 占用逐出所需的区域。 在这种情况下,正在逐出的其他分配的内容将丢失,拥有丢失分配的应用程序无法再使用该分配呈现。

设置此成员等效于设置 32 位 Value 成员的第九位 (0x00000100) 。

Capture

[out]一个 UINT 值,该值指定是否将分配用于捕获操作。 捕获分配与覆盖分配类似,固定在内存中。 因此,应用于覆盖分配的问题也适用于捕获分配。 有关这些问题的详细信息,请参阅 覆盖 标志的说明。 请注意,在 发生第三级同步 之前,捕获通常会停止。

设置此成员等效于设置 32 位 Value 成员的第十位 (0x00000200) 。

CreateInVpr

[out]一个 UINT 值,该值指定是否应在视频保护范围内创建分配。 此成员用于 WDDM 版本 >= WDDM 2.1 中的硬件数字权限管理 (DRM) 。

设置此成员相当于设置 32 位 Value 成员的第 11 位 (0x00000400) 。

Reserved00

[in]对于早于 WDDM 2.1 的 WDDM 版本,此成员保留,应设置为零。

设置此成员相当于设置 32 位 Value 成员的第 11 位 (0x00000400) 。

DXGK_ALLOC_RESERVED17

[in]此成员保留,应设置为零。

设置此成员等效于设置 32 位 Value 成员的第十二位 (0x00000800) 。

Reserved02

[in]此成员保留,应设置为零。

设置此成员等效于设置 32 位 Value 成员的第 32 位 (0x00001000) 。

MapApertureCpuVisible

[in]设置后,指示驱动程序需要在 DxgkDdiBuildPagingBuffer 调用期间对内存进行 CPU 访问,以执行 DXGK_OPERATION_MAP_APERTURE_SEGMENT2 操作。 MapApertureCpuVisibleDxgkDdiBuildPagingBufferMapAperatureSegment2 功能的一部分,因此驱动程序必须设置 DXGK_VIDMMCAPS MapAperature2Supported 才能使用此字段。 如果未设置 MapAperature2Supported ,但驱动程序指定 MapApertureCpuVisible,则对 DxgkDdiCreateAllocation 的调用将失败。 有关详细信息,请参阅 IOMMU DMA 重新映射 。 从 Windows Server 2022 开始支持。

Reserved03

[in]此成员保留,应设置为零。

HistoryBuffer

[out]一个 UINT 值,该值指定用户模式显示驱动程序是否分配历史记录缓冲区。 显示微型端口驱动程序必须设置此标志,以指示用户模式驱动程序可以管理历史记录缓冲区的创建和销毁。

当显示微型端口驱动程序设置 HistoryBuffer 时,它还必须设置 CpuVisible 标志。 如果驱动程序支持缓存相干的光圈段,则还必须将 缓存,并且所有其他成员必须设置为零。

设置此成员等效于设置 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)

另请参阅

DXGK_ALLOCATIONINFO

DXGK_ALLOCATIONINFOFLAGS

DxgkDdiBuildPagingBuffer

pfnLockCb

pfnUnlockCb