
网格着色器
网格着色器(MS)本质上是带有特定阶段内建函数的计算着色器,可将顶点、索引和图元数据导出到图元装配器。所有数据必须在着色器代码中显式地从常量缓冲区视图(CBV)和着色器资源视图(SRV)中获取。 这意味着开发者需要将对绘制调用的认知调整为更接近计算着色器的工作流。着色器编写者决定线程组的大小以及如何使用每个线程来完成工作负载。他们可以使用着色器波(wave)内建以及 groupshared 内存来共享数据,并高效地构建用于光栅化的图元列表。 图 2. 在绑定了仅网格着色器管线的情况下,DispatchMesh(4, 1, 1) 调用所分派的 GPU 工作的可视化。与计算着色器类似,DispatchMesh 需要在 x、y 和 z 维度上指定线程组数量。这将分派指定数量的网格着色器线程组以执行。
放大着色器
放大着色器(AS)是网格着色器阶段之前的一个可选阶段。该阶段同样类似于计算着色器,并具有动态分派一个网格着色器线程组集群的能力。每个线程组自行计算要分派的网格着色器线程组数量。每个线程组还包含最多 16 KB 的共享自定义载荷数据,可传递给其分派的网格着色器线程组。这些数据可以直接从 groupshared 内存中导出。 放大着色器的功能允许着色器程序基于自定义标准动态减少或放大其工作负载。这为高效的低粒度剔除或自定义曲面细分提供了可能。 图 3. 分派 AS-MS 管线状态(PS)对象的可视化。一些 AS 线程组会选择分派 MS 线程组。另一些可能不分派任何 MS 线程组。
