流输出阶段的目的是将几何着色器阶段(或顶点着色器阶段非活动时)持续输出(或流)顶点数据输出到内存中的一个或多个缓冲区(请参阅 Stream-Output 阶段入门)。
流输出阶段(SO)位于几何着色器阶段之后的管道中,就在光栅化阶段之前,如下图所示。
管道关系图
流式传输到内存的数据可以在后续呈现传递中读回到管道中,也可以复制到暂存资源(以便 CPU 可以读取)。 流出的数据量可能会有所不同;ID3D11DeviceContext::D rawAuto API 旨在处理数据,而无需查询(GPU)写入的数据量。
当三角形或线条条绑定到输入装配器阶段时,每个条带将转换为列表,然后再将其流出。顶点始终作为完整的基元写出(例如,三角形一次有 3 个顶点):从不流式传输不完整的基元。在流出数据之前,带相邻的基元类型放弃相邻数据。
有两种方法可将流输出数据馈送到管道中:
- 可将流输出数据馈送回输入汇编程序阶段。
- 可以使用负载函数(如 加载)通过可编程着色器读取流输出数据。
若要将缓冲区用作流输出资源,请使用 D3D11_BIND_STREAM_OUTPUT 标志创建缓冲区。 流输出阶段支持最多 4 个缓冲区。
- 如果要将数据流式传输到多个缓冲区,则每个缓冲区只能捕获每个顶点数据的单个元素(最多 4 个组件),隐含的数据步幅等于每个缓冲区中的元素宽度(与单个元素缓冲区可以绑定到着色器阶段的方式兼容)。 此外,如果缓冲区的大小不同,只要任一缓冲区已满,写入就会停止。
- 如果要将数据流式传输到单个缓冲区,则缓冲区最多可以捕获每个顶点数据的 64 个标量组件(256 字节或更少),或者顶点步幅最多可为 2048 字节。
在本部分中
主题 | 描述 |
---|---|
Stream-Output 阶段 入门 |
本部分介绍如何将几何图形着色器与流输出阶段配合使用。 |