Этап Stream-Output
Задача этапа потокового вывода заключается в непрерывном выводе (или потоковой передаче) данных вершин из этапа геометрического шейдера (или этапа вершинного шейдера, если этап геометрического шейдера неактивен) в один или несколько буферов в памяти (см. начало работы с этапом Stream-Output).
Этап потокового вывода (SO) находится в конвейере сразу после этапа геометрического шейдера и непосредственно перед этапом растеризации, как показано на следующей схеме.
Данные поточно переданные в память можно считать обратно в конвейер в последующем проходе отрисовки или скопировать в промежуточный ресурс (для его считывания центральным процессором). Объем передаваемых данных может отличаться; API ID3D11DeviceContext::D rawAuto предназначен для обработки данных без необходимости запрашивать объем записанных данных (GPU).
Когда треугольник или полоса линий привязана к этапу сборщика входных данных, каждая полоса преобразуется в список перед потоковой передачей. Вершины всегда записываются как полные примитивы (например, 3 вершины за раз для треугольников); неполные примитивы никогда не передаются потоком. Примитивные типы с смежностью удаляют данные смежности перед потоковой передачей данных.
Существует два способа подать данные потокового вывода в конвейер:
- Потоковые выходные данные могут передаваться обратно на этап ассемблеера ввода.
- Потоковые выходные данные могут считываться программируемыми шейдерами с помощью функций загрузки (например , Load).
Чтобы использовать буфер в качестве ресурса потокового вывода, создайте буфер с флагом D3D11_BIND_STREAM_OUTPUT . Этап потокового вывода поддерживает до 4 буферов одновременно.
- Если вы выполняете потоковую передачу данных в несколько буферов, каждый буфер можно записать только один элемент (до 4 компонент) данных каждой вершины, с шагом подразумеваемых данных равным ширине элемента в каждом буфере (это совместимо со способом, которым буферы одного элемента можно привязать для ввода в этапы шейдеров). Кроме того, если буферы имеют различные размеры, запись будет остановлена, как только заполнится один из буферов.
- Если вы выполняете потоковую передачу данных в один буфер, то он может сохранить до 64 скалярных компонент индивидуальных данных вершины (256 байт или меньше) или же шаг вершины может иметь размер до 2048 байт.
В этом разделе
Раздел | Описание |
---|---|
начало работы с этапом Stream-Output |
В этом разделе описывается использование геометрического шейдера с этапом вывода потока. |