Direct3D 10.1 功能

Direct3D 10.1 使用以下新功能扩展 Direct3D 10.0 的功能集:

  • 混合模式 - 每个渲染目标使用新的混合状态接口(请参阅 ID3D10BlendState1 接口)。 双源混合操作仅限于渲染目标槽 0;不能写入其他输出,或者有任何渲染目标绑定到槽 0 以外的槽。

  • 剔除行为 - 零面积的面会自动剔除;这仅影响线框渲染。

  • 浮点规则 - 对浮点操作使用相同的 IEEE-754 规则,但已收紧 32 位浮点操作,以产生无限精确结果的 0.5 单位末位 (0.5 ULP) 以内的结果。 这适用于加法、减法和乘法。 (乘法精度为 0.5 ULP,倒数精度为 1.0 ULP)。

  • 格式 - float16 混合的精度已增加到 0.5 ULP。 UNORM16/SNORM16/SNORM8 格式也需要混合。

  • 多重采样抗锯齿 - 多重采样已得到增强,使基于覆盖范围的透明度更加普遍,并使多重采样能更有效地与多通道渲染配合使用。 为了实现此目的,所有多重采样语义都定义为像素着色器在每个样本(采样频率)中总是运行一次,计算每个样本的单独颜色。 如果像素着色器不使用任何逐样本属性,则它将计算像素中每个覆盖样本的相同值。 在这种情况下,它相当于每个像素(像素频率)执行着色器的硬件,将结果复制到所有涵盖的样本。 当然,当属性以像素频率采样时,以像素频率运行的结果始终与以采样频率运行同一着色器的结果相同。 PSInvocations 管道统计信息以采样频率递增,除非着色器以像素频率运行。

  • 管道阶段带宽 - 增加了在着色器阶段之间可传递的数据量:

    资源 限制
    着色器阶段之间的寄存器 32(32 位 x 4 分量)
    顶点着色器输入寄存器 32
    输入装配器输入槽 32

     

  • 光栅化规则 - 光栅化规则已更改线条的光栅化规则,此外,还添加了新功能。

    • MultisampleEnable 仅影响线条光栅化(点和三角形不受影响),并用于选择线条绘制算法。 这意味着不再支持 Direct3D 10 中的一些多重采样光栅化。
    • 使用基元光栅化执行新的采样频率像素着色器。
  • 资源 - CopyResource 在两个新场景中启用:

    • 颜色和深度/模具 MSAA 图面现在都可以与 CopyResource 一起用作源或目标
    • 在 32/64/128 位预结构化、类型化资源和相同位宽度的压缩表示形式之间进行复制时,进行格式转换。
  • 纹理采样 - sample_c 和 sample_c_lz 指令定义为与 Texture2DArrays 和 TextureCubeArrays 配合使用,使用 Location 成员(alpha 组件)指定数组索引。

  • 视图 - TextureCube 和新的 TextureCubeArray(参见 D3D10_TEXCUBE_ARRAY_SRV1)不是实际资源,而是 Texture2DArray 资源上的新视图。 使用新的使用标 (D3D10_RESOURCE_MISC_TEXTURECUBE) 从 Texture2DArray 资源创建资源视图,请使用新的 ID3D10ShaderResourceView1 接口将多维数据集纹理视图绑定到管道。

新功能需要 10.1 设备类型(请参阅 ID3D10Device1 接口),可以通过调用 D3D10CreateDevice1 来创建设备,也可以通过调用 D3D10CreateDeviceAndSwapChain1 同时创建设备和交换链。

在 Windows Vista Service Pack 1 中,Direct3D 10.0 和 Direct3D 10.1 DLL 并行存在于系统中。 若要访问 10.1 功能,请执行以下操作之一:

访问 Vista Gold 和 Vista Service Pack 1 上的 10.1 功能

希望支持 Vista Gold 和 SP1 的开发人员必须考虑到 Vista Gold 上缺少新的 10.1 API 扩展。 DXUT 和 D3DX10 都将根据系统上可用的 DLL 和可用硬件(10.0 或 10.1)提供方便的功能来创建相应的设备。 10.1 设备继承自 10.0 设备,可以使用 QueryInterface() 进行检索。 建议每个应用程序跟踪设备类型,并维护指向 10.1 设备的指针(如果可用),以避免在需要 10.1 功能时频繁调用 QueryInterface。 同样,如果 10.1 资源视图和状态对象由应用程序的自定义类关联,则建议应用程序跟踪对象是 10.0 或 10.1 类型,以避免冗余的 QueryInterface() 调用。 D3DX10 包括一组实用工具函数以简化此过程(请参阅 D3DX10CreateDeviceD3DX10CreateDeviceAndSwapChain)。

仅访问 Vista Service Pack 1 上的 10.1 功能

某些开发人员可以选择要求 Vista Service Pack 1,这将广泛分发给最终用户,并包括 Direct3D 10.1 之外的一系列改进。 这些开发人员可以专门使用 Direct3D 10.1 标头和库,依赖于支持 10.0 和 10.1 硬件的 Direct3D 10.1 DLL(但是,在不支持新功能的 10.0 设备上,某些调用可能会失败)。

一些其他说明:

  • D3DX10.dll 中公开的 API 将同时接受 10.0 和 10.1 设备,并在可用时利用 10.1 功能。
  • D3D10SDKLayers.dll 支持 10.1 设备,并且可以输出适用于 10.1 功能的相应调试信息。
  • D3D10Ref.dll 会实现 10.0 和 10.1 软件设备。
  • D3DX10 和 FXC 支持更新后的 10.1 着色器模型,其目标如下:vs_4_1、gs_4_1、ps_4_ 1和 fx_4_1,可绑定到 10.1 设备。 10.1 设备支持着色器模型 4.0 和 4.1 着色器。
  • Direct3D 10.0 效果框架支持 10.0 和 10.1 设备,但是,包括着色器模型 4.1 着色器或新的 10.1 功能的任何技术都必须使用 10.1 设备。

Direct3D 10 编程指南