Этап потокового вывода
Этап вывода потока (SO) может передавать вершины в память непосредственно перед тем, как эти вершины поступают в средство растеризатора. Потоковые выходные данные работают как касание в конвейере. Это касание можно включить, даже если данные продолжают передаваться в средство растеризатора. Данные, отправляемые через потоковые выходные данные, объединяются в буферы. Эти буферы можно рециркулировать при последующих проходах в качестве входных данных конвейера.
Одно из ограничений, связанных с выходными данными потока, заключается в том, что они привязаны к геометрическому шейдеру, поскольку они должны быть созданы вместе (хотя может иметь значение NULL или off). Однако определенные буферы памяти, которые передаются в , не привязаны к определенной паре геометрических шейдеров и выходных потоков. К геометрическому шейдеру привязывается только описание частей данных вершин, передаваемых в потоковый вывод.
Выходные данные потока могут быть полезны для сохранения упорядоченных данных конвейера, которые будут использоваться повторно. Например, пакет вершин может быть "скинирован" путем передачи вершин в конвейер, как если бы они были независимыми точками (только для того, чтобы посетить их все один раз), применения операций скининга к каждой вершине и потоковой передачи результатов в память. Сохраненные "скинированные" вершины впоследствии доступны для использования в качестве входных данных.
Так как объем выходных данных, записываемых через потоковый вывод, является динамическим, требуется новый тип Draw( DrawAuto), чтобы разрешить повторное использование буферов вывода потока с помощью входного ассемблера без участия ЦП для определения объема фактически записанных данных. Кроме того, запросы необходимы для устранения переполнения потока, а также для извлечения объема данных, записанных в буферы вывода потока (D3D10DDI_QUERY_STREAMOVERFLOWPREDICATE и D3D10DDI_QUERY_STREAMOUTPUTSTATS перечисления D3D10DDI_QUERY ).
Среда выполнения Direct3D вызывает следующие функции драйвера для создания и настройки выходных данных потока:
CalcPrivateGeometryShaderWithStreamOutput