Этап потокового вывода (SO)
Этап вывода потока (SO) непрерывно выводит данные вершин (или потоков) из предыдущей активной стадии в один или несколько буферов в памяти. Поток данных, поступающих в память, можно повторно распространять обратно в конвейер в виде входных данных или обратного чтения из ЦП.
Назначение и использование
Этап потокового вывода передает примитивные данные из конвейера в память на пути к растризатору. Данные из предыдущего этапа можно передавать в память и /или передавать в растризатор. Поток данных, поступающих в память, можно повторно распространять обратно в конвейер в виде входных данных или обратного чтения из ЦП.
Данные, которые передаются в память, можно считывать обратно в конвейер в последующем проходе отрисовки или копировать в промежуточный ресурс (чтобы его можно было считывать ЦП). Объем потоковых данных может отличаться; Direct3D предназначен для обработки данных без необходимости запрашивать (GPU) объем записанных данных.-->
Существует два способа передачи выходных данных потока в конвейер.
- Выходные данные потока можно передать обратно на этап сборщика входных данных (IA).
- Потоковые выходные данные можно считывать с помощью программируемых шейдеров с помощью функций Load .
Ввод
Данные вершин из предыдущего этапа шейдера.
Выходные данные
Этап вывода потока (SO) непрерывно выводит данные вершин (или потоков) из предыдущей активной стадии, например этап геометрии шейдера (GS) в один или несколько буферов в памяти. Если этап шейдера геометрии (GS) неактивен, этап вывода потока (SO) непрерывно выводит данные вершин из этапа шейдера домена (DS) в буферы в памяти (или если DS также неактивен, из этапа шейдера вершин (VS).
Когда треугольник или полоса линии привязана к этапу входного сборщика (IA), каждая полоса преобразуется в список перед их передачей. Вершины всегда записываются как полные примитивы (например, 3 вершины за раз для треугольников); неполные примитивы никогда не передаются. Примитивные типы с примежаемостью отменяют данные зависимостей перед потоковой передачей данных.
Этап потокового вывода поддерживает до 4 буферов одновременно.
- При потоковой передаче данных в несколько буферов каждый буфер может записывать только один элемент (до 4 компонентов) данных на вершинах с подразумеваемым шагом, равным ширине элемента в каждом буфере (совместим с тем, как буферы одного элемента могут быть привязаны для ввода в этапы шейдера). Кроме того, если буферы имеют разные размеры, запись останавливается, как только любой из буферов заполнен.
- Если вы выполняете потоковую передачу данных в один буфер, буфер может записывать до 64 скалярных компонентов данных на вершины (256 байт или меньше), или вершина может превышать 2048 байт.
Связанные темы