D3D11_MAP枚举 (d3d11.h)

标识要由 CPU 进行读取和写入访问的资源。 应用程序可以合并其中一个或多个标志。

语法

typedef enum D3D11_MAP {
  D3D11_MAP_READ = 1,
  D3D11_MAP_WRITE = 2,
  D3D11_MAP_READ_WRITE = 3,
  D3D11_MAP_WRITE_DISCARD = 4,
  D3D11_MAP_WRITE_NO_OVERWRITE = 5
} ;

常量

 
D3D11_MAP_READ
值:1
资源已映射以供读取。 必须已创建具有读取访问权限的资源
(请参阅 D3D11_CPU_ACCESS_READ) 。
D3D11_MAP_WRITE
值: 2
资源已映射以供写入。 必须已使用写入创建资源
访问 (请参阅 D3D11_CPU_ACCESS_WRITE) 。
D3D11_MAP_READ_WRITE
值: 3
资源映射用于读取和写入。 必须创建具有读取和写入权限的资源
访问 (请参阅 D3D11_CPU_ACCESS_READ和D3D11_CPU_ACCESS_WRITE) 。
D3D11_MAP_WRITE_DISCARD
值: 4
资源映射用于写入;资源以前的内容将未定义。 必须已创建具有写入访问权限的资源
和动态使用情况 (请参阅 D3D11_CPU_ACCESS_WRITED3D11_USAGE_DYNAMIC) 。
D3D11_MAP_WRITE_NO_OVERWRITE
值: 5
资源映射用于写入;无法覆盖资源的现有内容, (请参阅备注) 。 此标志仅在顶点和
索引缓冲区。 必须已创建具有写入访问权限的资源, (请参阅 D3D11_CPU_ACCESS_WRITE) 。
不能在使用 D3D11_BIND_CONSTANT_BUFFER 标志创建的资源上使用。

注意Direct3D 11.1 运行时从 Windows 8 开始提供,支持使用 D3D11_MAP_WRITE_NO_OVERWRITE (SRV) 动态缓冲区映射动态常量缓冲区和着色器资源视图。 Direct3D 11 及更早的运行时限制到顶点或索引缓冲区的映射。 若要确定 Direct3D 设备是否支持这些功能,请使用 D3D11_FEATURE_D3D11_OPTIONS 调用 ID3D11Device::CheckFeatureSupportCheckFeatureSupport 使用设备的功能填充 D3D11_FEATURE_DATA_D3D11_OPTIONS 结构的成员。 此处的相关成员是 MapNoOverwriteOnDynamicConstantBufferMapNoOverwriteOnDynamicBufferSRV

 

注解

此枚举用于 ID3D11DeviceContext::Map

D3D11_MAP_WRITE_NO_OVERWRITE的含义

D3D11_MAP_WRITE_NO_OVERWRITE 表示应用程序承诺不会写入输入汇编程序 (IA) 阶段使用的数据。 GPU 允许应用程序写入同一缓冲区的其他部分。 应用程序必须确保它不会写入 IA 阶段使用的任何数据。

例如,请考虑下图中所示的缓冲区。 如果已发出使用顶点 4-6 的 Draw 调用,则在此缓冲区上调用 Map 的应用程序必须确保它不会写入 绘图 调用在呈现期间访问的顶点。

包含不同使用阶段顶点的缓冲区示意图 但是,确保这一点可能很困难,因为 GPU 在 CPU 当前正在处理的帧方面通常落后许多帧。 跟踪由于 2 到 5 帧前调用而使用的资源的哪些部分很难且容易出错。 因此,建议应用程序在使用 D3D11_MAP_WRITE_NO_OVERWRITE 时仅写入资源的未初始化部分。

D3D11_MAP_WRITE_DISCARD与 D3D11_MAP_WRITE_NO_OVERWRITE 的常见用法

D3D11_MAP_WRITE_DISCARDD3D11_MAP_WRITE_NO_OVERWRITE 通常与动态索引/顶点缓冲区结合使用。 D3D11_MAP_WRITE_DISCARD 还可以与动态纹理一起使用。 但是, D3D11_MAP_WRITE_NO_OVERWRITE 不能与动态纹理一起使用。

这两个标志的常见用法涉及使用可从相机当前位置看到的几何图形填充动态索引/顶点缓冲区。 首次将数据输入给定帧上的缓冲区时,使用 D3D11_MAP_WRITE_DISCARD 调用 Map;这样做会使缓冲区的先前内容失效。 然后,用所有可用数据填充缓冲区。

对同一帧内缓冲区的后续写入应使用 D3D11_MAP_WRITE_NO_OVERWRITE。 只要遵守前面所述的限制,CPU 就会访问 GPU 可能正在使用的资源。

要求

要求
Header d3d11.h

另请参阅

资源枚举