Практическое руководство. Индексирование нескольких выходных потоков
В модели шейдеров 5 геометрический шейдер может поддерживать до 4 отдельных потоков. Это означает, что один шейдер может выводить между одним и четырьмя выходными потоками в зависимости от количества объявленных потоков.
Индексирование нескольких выходных потоков
Определите поток данных с помощью типа шаблона потока.
inout PointStream<OutVertex1> myStream1,
Определите второй поток данных с помощью типа шаблона потока.
inout PointStream<OutVertex2> myStream2 )
Выводите данные в один из потоков (или оба) с использованием встроенных функций объекта вывода для потоков, таких как Append или RestartStrip.
void MyGS( InVertex verts[2], inout PointStream<OutVertex1> myStream1, inout PointStream<OutVertex2> myStream2 ) { OutVertex1 myVert1 = TransformVertex1( verts[0] ); OutVertex2 myVert2 = TransformVertex2( verts[1] ); myStream1.Append( myVert1 ); myStream2.Append( myVert2 ); }
При использовании одного выходного потока можно выдавать треугольники, полосы линий или списки точек. При хранении полос треугольников и линий в буфере потока они расширяются до треугольников и списков строк соответственно. Вы также можете растеризовать один поток и не отправлять его в буфер памяти.
При использовании нескольких выходных потоков все потоки должны содержать точки, а до одного выходного потока можно отправлять в растризатор. Чаще всего приложение не будет растеривать поток.
После потоковой передачи данных в буфер можно использовать эти данные для отрисовки любого примитивного типа, а не только примитивного типа, который использовался для заполнения буфера.
Общее количество выходных данных шейдера геометрии ограничено 1024 скалярами. При наличии нескольких потоков число скаляр вычисляется из наибольшего типа потока, умноженного на максимальное число вершин.
Различия между моделью шейдера 4 и моделью шейдера 5:
Модель шейдера 4:
- Максимальное количество скаляр для выходных данных потока равно 64.
- Маска регистра для каждого компонента должна соответствовать диапазону индекса.
- Максимальное число скаляров для вывода потока — 128.
- Маска регистра для каждого компонента не должна соответствовать диапазону индекса.
- Динамическое индексирование выходных данных должно быть законным для всех потоков.
- Режимы интерполяции не должны соответствовать потокам.