> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 网格着色器管线概述

> Mesh Shader 管线如何以可编程的放大 (Amplification) 和网格 (Mesh) 阶段取代输入装配器，在 XBOX Series X|S 上实现可扩展的几何处理。

RTX Turing 和 AMD RDNA 2.0 GPU 引入了一种新的几何处理管线。该管线包括两个新的可编程着色器阶段——放大着色器（Amplification Shader）和网格着色器（Mesh Shader），并且不使用输入装配器（Input Assembler）和曲面细分器硬件。这两个阶段都类似于计算着色器：暴露线程组、以生成的线程 ID 作为唯一提供的输入，同时也提供与提交几何处理相关的功能。

这种新范式的效果是将索引/顶点抓取卸载到可编程着色器中，使其能够随 GPU 核心数量和内存带宽扩展。这绕过了输入装配器日益凸显的瓶颈，能够以更高、更稳定的速率将工作提交到 GPU。它还提供了一种在多种粒度上早期剔除几何体的接口，可细化至逐图元级别，并通过片上内存以管线化的方式实现。

**图 1. 网格着色器管线的各个阶段。绿色调阶段是可编程的，蓝色调阶段是固定功能。**

<img src="https://mintcdn.com/microsoft-4404708b/6hkHc7s12mHcTMCE/images/gdk/features/graphics/ms_mesh_shader_pipeline.png?fit=max&auto=format&n=6hkHc7s12mHcTMCE&q=85&s=1bdf8c428560eef0a048ae32c01c9759" alt="网格着色器管线的阶段示意图" width="800" height="100" data-path="images/gdk/features/graphics/ms_mesh_shader_pipeline.png" />

## 网格着色器

网格着色器（MS）本质上是带有特定阶段内建函数的计算着色器，可将顶点、索引和图元数据导出到图元装配器。所有数据必须在着色器代码中显式地从常量缓冲区视图（CBV）和着色器资源视图（SRV）中获取。

这意味着开发者需要将对绘制调用的认知调整为更接近计算着色器的工作流。着色器编写者决定线程组的大小以及如何使用每个线程来完成工作负载。他们可以使用着色器波（wave）内建以及 groupshared 内存来共享数据，并高效地构建用于光栅化的图元列表。

**图 2. 在绑定了仅网格着色器管线的情况下，DispatchMesh(4, 1, 1) 调用所分派的 GPU 工作的可视化。与计算着色器类似，DispatchMesh 需要在 x、y 和 z 维度上指定线程组数量。这将分派指定数量的网格着色器线程组以执行。**

<img src="https://mintcdn.com/microsoft-4404708b/6hkHc7s12mHcTMCE/images/gdk/features/graphics/ms_pipeline.png?fit=max&auto=format&n=6hkHc7s12mHcTMCE&q=85&s=da9bfe92b2e4eb38fb3c7c45a4e84568" alt="使用仅网格着色器管线时 DispatchMesh 命令分派工作的可视化。" width="578" height="350" data-path="images/gdk/features/graphics/ms_pipeline.png" />

## 放大着色器

放大着色器（AS）是网格着色器阶段之前的一个可选阶段。该阶段同样类似于计算着色器，并具有动态分派一个网格着色器线程组集群的能力。每个线程组自行计算要分派的网格着色器线程组数量。每个线程组还包含最多 16 KB 的共享自定义载荷数据，可传递给其分派的网格着色器线程组。这些数据可以直接从 groupshared 内存中导出。

放大着色器的功能允许着色器程序基于自定义标准动态减少或放大其工作负载。这为高效的低粒度剔除或自定义曲面细分提供了可能。

**图 3. 分派 AS-MS 管线状态（PS）对象的可视化。一些 AS 线程组会选择分派 MS 线程组。另一些可能不分派任何 MS 线程组。**

<img src="https://mintcdn.com/microsoft-4404708b/6hkHc7s12mHcTMCE/images/gdk/features/graphics/ms_as_pipeline.png?fit=max&auto=format&n=6hkHc7s12mHcTMCE&q=85&s=8a1227f965a71d9e511a040e3651d7f8" alt="使用 AS-MS 管线时 DispatchMesh 命令分派工作的可视化。" width="953" height="350" data-path="images/gdk/features/graphics/ms_as_pipeline.png" />

## 本部分内容

## 另请参阅

[XBOX Series X|S 图形功能概述](/build/core-features/graphics/graphics-newfeatures-toc)
[图形概述](/build/core-features/graphics/overviews/graphics)
[图形](/build/core-features/graphics/gc-graphics-toc)


## Related topics

- [网格着色器管线 API 概述](/zh-CN/build/core-features/graphics/newfeatures/ms/ms-api-design.md)
- [为什么使用网格着色器？](/zh-CN/build/core-features/graphics/newfeatures/ms/ms-why.md)
- [Meshlets](/zh-CN/build/core-features/graphics/newfeatures/ms/ms-meshlet-render.md)
- [Meshlet 剔除示例](/zh-CN/build/core-features/graphics/newfeatures/ms/ms-meshlet-culling.md)
- [XBOX Series X|S 上的网格着色器与 Meshlet](/zh-CN/build/core-features/graphics/newfeatures/ms/index.md)
