Input-Assembler 阶段

Direct3D 10 及更高 API 将管道的功能区域分为阶段;管道中的第一个阶段是输入汇编程序 (IA) 阶段。

输入装配器阶段的目的是从用户填充的缓冲区读取基元数据(点、线条和/或三角形),并将数据组合到其他管道阶段将使用的基元中。 IA 阶段可以将顶点组合到多个不同的 基元类型(如线条列表、三角形条或相邻的基元)。 添加了新的基元类型(例如具有相邻的线条列表或具有相邻的三角形列表),以支持几何着色器。

相邻信息仅在几何着色器中对应用程序可见。 例如,如果使用三角形(包括相邻)调用几何着色器,则输入数据将包含每个三角形的 3 个顶点,每个三角形的相邻数据包含 3 个顶点。

当请求输入汇编程序阶段输出相邻数据时,输入数据必须包含相邻数据。 这可能需要提供虚拟顶点(形成退化的三角形),或者通过标记在顶点属性之一中(无论顶点是否存在)。 这还需要由几何着色器检测和处理,尽管剔除退化的几何图形将在光栅器阶段发生。

在组装基元时,IA 的次要用途是附加 系统生成的值 以帮助提高着色器的效率。 系统生成的值是也称为语义的文本字符串。 这三个着色器阶段都是从通用着色器核心构造的,着色器核心使用系统生成的值(例如基元 ID、实例 ID 或顶点 ID),以便着色器阶段只能将处理减少到尚未处理的基元、实例或顶点。

管道块关系图所示,一旦 IA 阶段从内存中读取数据(将数据组装成基元并附加系统生成的值),数据就会输出到 顶点着色器阶段

在本部分中

主题 描述
Input-Assembler 阶段 入门
初始化输入汇编程序 (IA) 阶段需要执行几个步骤。 例如,需要使用管道所需的顶点数据创建缓冲区资源,告诉 IA 阶段缓冲区的位置及其包含的数据类型,并指定要从数据中组装的基元的类型。
基元拓扑
Direct3D 10 及更高版本支持由 D3D_PRIMITIVE_TOPOLOGY 枚举类型表示的多种基元类型(或拓扑)。 这些类型定义管道解释和呈现顶点的方式。
使用不带缓冲区的 Input-Assembler 阶段
如果着色器不需要缓冲区,则不需要创建和绑定缓冲区。 本部分包含绘制单个三角形的简单顶点和像素着色器的示例。
使用 System-Generated 值
系统生成的值由 IA 阶段(基于用户提供的输入 语义)生成,以允许着色器作的某些效率。

图形管道

管道阶段(Direct3D 10)