Stream-Output阶段

流输出阶段的目的是连续输出 (或流式传输) 来自 geometry-shader 阶段 (或顶点着色器阶段的顶点数据(如果 geometry-shader 阶段处于非活动状态) 内存中的一个或多个缓冲区, (入门Stream-Output阶段) )。

流输出阶段 (SO) 位于管道中,紧接在几何着色器阶段之后和光栅化阶段之前,如下图所示。

流输出阶段在管道中的位置图

流出到内存的数据可在后续渲染传递中读回到管道,也可复制到暂存资源(以便由 CPU 读取)中。 流出的数据量可能会有所不同; ID3D11DeviceContext::D rawAuto API 旨在处理数据,而无需 (GPU) 查询写入的数据量。

当三角形或线条带绑定到输入装配器阶段时,每个带区都会在流出之前转换为一个列表。顶点始终写出为完整的基元 (例如,三角形) 一次 3 个顶点;不完整的基元永远不会流出。带相邻的基元类型在流式传输数据之前会丢弃相邻数据。

将流输出数据馈送至管道的方式有两种:

  • 流输出数据可以馈送回输入装配器阶段。
  • 可编程着色器可以使用加载函数 ((如 加载) )读取流输出数据。

若要将缓冲区用作流输出资源,请使用 D3D11_BIND_STREAM_OUTPUT 标志创建缓冲区。 流输出阶段支持最多同时 4 个缓冲区。

  • 如果你将数据传入多个缓冲区,那么每个缓冲区仅可采集一个逐顶点元素(最多 4 个组件),隐含数据步幅等于各缓冲区中的元素宽度(兼容针对着色器阶段输入绑定单元素缓冲区的方式)。 此外,如果缓冲区的大小不同,那么在任何一个缓冲区的容量满时,写入即会停止。
  • 如果你将数据流式传入单个缓冲区,那么该缓冲区最多可采集 64 个逐顶点数据标量组件(256 字节或更少),而顶点步幅最高为 2048 字节。

在本节中

主题 说明
使用Stream-Output阶段入门
本部分介绍如何将几何着色器用于流输出阶段。

图形管道

管道阶段 (Direct3D 10)