Этап Stream-Output

Задача этапа потокового вывода заключается в непрерывном выводе (или потоковой передаче) данных вершин из этапа геометрического шейдера (или этапа вершинного шейдера, если этап геометрического шейдера неактивен) в один или несколько буферов в памяти (см. начало работы с этапом Stream-Output).

Этап потокового вывода (SO) находится в конвейере сразу после этапа геометрического шейдера и непосредственно перед этапом растеризации, как показано на следующей схеме.

схема расположения этапа потокового вывода в конвейере

Данные поточно переданные в память можно считать обратно в конвейер в последующем проходе отрисовки или скопировать в промежуточный ресурс (для его считывания центральным процессором). Объем передаваемых данных может отличаться; API ID3D11DeviceContext::D rawAuto предназначен для обработки данных без необходимости запрашивать объем записанных данных (GPU).

Когда треугольник или полоса линий привязана к этапу сборщика входных данных, каждая полоса преобразуется в список перед потоковой передачей. Вершины всегда записываются как полные примитивы (например, 3 вершины за раз для треугольников); неполные примитивы никогда не передаются потоком. Примитивные типы с смежностью удаляют данные смежности перед потоковой передачей данных.

Существует два способа подать данные потокового вывода в конвейер:

  • Потоковые выходные данные могут передаваться обратно на этап ассемблеера ввода.
  • Потоковые выходные данные могут считываться программируемыми шейдерами с помощью функций загрузки (например , Load).

Чтобы использовать буфер в качестве ресурса потокового вывода, создайте буфер с флагом D3D11_BIND_STREAM_OUTPUT . Этап потокового вывода поддерживает до 4 буферов одновременно.

  • Если вы выполняете потоковую передачу данных в несколько буферов, каждый буфер можно записать только один элемент (до 4 компонент) данных каждой вершины, с шагом подразумеваемых данных равным ширине элемента в каждом буфере (это совместимо со способом, которым буферы одного элемента можно привязать для ввода в этапы шейдеров). Кроме того, если буферы имеют различные размеры, запись будет остановлена, как только заполнится один из буферов.
  • Если вы выполняете потоковую передачу данных в один буфер, то он может сохранить до 64 скалярных компонент индивидуальных данных вершины (256 байт или меньше) или же шаг вершины может иметь размер до 2048 байт.

В этом разделе

Раздел Описание
начало работы с этапом Stream-Output
В этом разделе описывается использование геометрического шейдера с этапом вывода потока.

Графический конвейер

Этапы конвейера (Direct3D 10)