Поделиться через


этап Stream-Output

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

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

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

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

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

Существует два способа передачи выходных данных потока в конвейер.

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

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

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

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

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

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

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