输入装配器阶段

输入装配器 (IA) 通过将源几何图形数据从 1D 缓冲区中拉取,将三角形、线条或点引入渲染管道。

顶点数据可以来自多个缓冲区,并且可以从每个缓冲区以结构数组的方式访问。 每个缓冲区都绑定到单个输入槽,并给定一个结构步幅。 跨所有缓冲区的数据布局由输入声明指定,其中每个条目定义一个 元素。 元素包含管道) 中第一个活动着色器的输入槽、结构偏移量、数据类型和目标寄存器 (。

给定的顶点序列是从缓冲区提取的数据构造的。 数据在固定函数状态和各种 Draw* () DDI 调用的组合定向的遍历中获取。 各种基元拓扑 (例如点列表、行列表、三角形列表和三角形带) 可用于使顶点数据序列表示基元序列。

可以通过以下两种方式之一生成顶点数据。 生成顶点数据的第一种方法是 非索引 呈现,这是包含顶点数据的缓冲区的顺序遍历。 顶点数据源自每个缓冲区绑定的起始偏移量。 生成顶点数据的第二种方法是 索引 呈现,这是包含标量整数索引的单个缓冲区的顺序遍历。 索引源自缓冲区的起始偏移量。 每个索引指示从包含顶点数据的缓冲区中提取数据的位置。 索引值与它们引用的缓冲区的特征无关。 缓冲区由声明描述。 非索引和索引呈现,每个呈现都以自己的方式生成地址,从中获取内存中的顶点数据,然后将结果组合到顶点和基元中。

通过允许在非索引呈现或索引呈现中,顺序遍历在每个顶点缓冲区内循环, (非索引大小写) 或索引缓冲区 (索引大小写) 来启用实例化几何图形呈现。 可以将缓冲区绑定标识为 实例数据顶点数据。 此标识指定在执行实例化呈现时如何使用绑定缓冲区。 非索引或索引呈现生成的地址用于提取顶点数据,这也考虑了运行时执行实例化呈现时的循环。 另一方面,始终从每个缓冲区偏移量开始按顺序遍历实例数据,其频率等于每个实例一个步骤 (例如,在) 遍历实例中的顶点数后向前一步。 实例数据的步进速率也可以选择为实例频率 (的子调和,即,每个其他实例向前一步,每三个实例) ,依此类推。

IA 的另一个特殊情况是,它可以读取流输出阶段写入的缓冲区。 此类方案启用一种新型的绘制操作 DrawAutoDrawAuto 允许在不涉及 CPU 的情况下重复使用写入流输出缓冲区的动态输出量,以确定实际写入的数据量。

除了从缓冲区生成顶点数据外,IA 还可以自动生成三个标量计数器值:VertexID、PrimitiveID 和 InstanceID,以便输入到呈现管道中的着色器阶段。

在带状拓扑(如三角形带)的索引呈现中,提供了一种机制,用于使用单个 *Draw* () 调用 (绘制多个条带,即) 剪切条带的 *cut 命令。

Direct3D 运行时调用以下驱动程序函数来创建、设置和销毁 IA:

CalcPrivateElementLayoutSize

CreateElementLayout

DestroyElementLayout

IaSetIndexBuffer

IaSetInputLayout

IaSetTopology

IaSetVertexBuffers