D3D10_USAGE 枚举 (d3d10.h)
标识呈现期间的预期资源使用。 使用情况直接反映资源是否可以由 CPU 和/或 GPU 访问。
语法
typedef enum D3D10_USAGE {
D3D10_USAGE_DEFAULT = 0,
D3D10_USAGE_IMMUTABLE = 1,
D3D10_USAGE_DYNAMIC = 2,
D3D10_USAGE_STAGING = 3
} ;
常量
D3D10_USAGE_DEFAULT 值: 0 需要 GPU 读取和写入访问权限的资源。 这可能是最常见的用法选择。 |
D3D10_USAGE_IMMUTABLE 值:1 只能由 GPU 读取的资源。 它不能由 GPU 编写,并且完全不能由 CPU 访问。 此类资源必须在创建时进行初始化,因为创建后无法对其进行更改。 |
D3D10_USAGE_DYNAMIC 值: 2 GPU 和 CPU 都可访问的资源, (只写入) 。 对于每帧由 CPU 至少更新一次的资源,动态资源是不错的选择。 若要写入 CPU 上的动态资源,请使用 Map 方法。 可以使用 CopyResource 或 CopySubresourceRegion 写入 GPU 上的动态资源。 |
D3D10_USAGE_STAGING 值: 3 支持数据传输 (将) 从 GPU 复制到 CPU 的资源。 |
注解
应用程序标识资源的使用方式, (资源说明中的使用情况) 。 有几种用于创建资源的结构,包括: D3D10_TEXTURE1D_DESC、 D3D10_TEXTURE2D_DESC、 D3D10_TEXTURE3D_DESC、 D3D10_BUFFER_DESC和 D3DX10_IMAGE_LOAD_INFO。
Direct3D 9 和 Direct3D 10 之间的差异: 在 Direct3D 9 中,使用 D3DPOOL) 指定在资源创建时应 (创建资源的内存类型。 应用程序的工作是决定哪个内存池将提供功能和性能的最佳组合。 在 Direct3D 10 中,应用程序不再指定池 () 创建资源的内存类型。 而是指定资源的预期使用情况,让运行时与驱动程序和内存管理器 () 选择可实现最佳性能的内存类型。 |
资源使用限制
每个用法都决定了功能和性能之间的权衡。 通常,资源访问是使用以下 API 完成的。- 使用 ID3D10Buffer::Map、ID3D10Texture1D::Map、ID3D10Texture2D::Map 或 ID3D10Texture3D::Map 完成 CPU 访问
- GPU 访问是使用 CopySubresourceRegion、 CopyResource 或 UpdateSubresource 完成的。
资源使用情况 | Default | 动态 | 不可变 | 过渡 |
---|---|---|---|---|
GPU-Read | 是 | yes¹ | 是 | 是1, 2 |
GPU-Write | yes¹ | 是1, 2 | ||
CPU-Read | 是1, 2 | |||
CPU-Write | 是 | 是1, 2 |
- 1 - 这仅限于 CopySubresourceRegion、 CopyResource 和 UpdateSubresource。
- 2 - 不能是深度模具缓冲区或多采样呈现目标。
资源绑定选项
为了最大限度地提高性能,并非所有资源使用选项都可以用作管道的输入或输出资源。 此表标识了这些限制。资源可以绑定为 | Default | 动态 | 不可变 | 过渡 |
---|---|---|---|---|
对阶段的输入 | 是的 | yes⁴ | 是 | |
阶段的输出 | 是的 |
要求
要求 | 值 |
---|---|
Header | d3d10.h |