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


Практическое руководство. Индексирование нескольких выходных потоков

В модели шейдера 5 шейдер геометрии может поддерживать до 4 отдельных потоков. Это означает, что один шейдер может выводить от одного до четырех выходных потоков в зависимости от количества объявленных потоков.

Индексирование нескольких выходных потоков

  1. Определите поток данных с помощью типа шаблона потока.

        inout PointStream<OutVertex1> myStream1, 
    
  2. Определите второй поток данных с помощью типа шаблона потока.

        inout PointStream<OutVertex2> myStream2 )
    
  3. Вывод данных в один или оба потока с помощью встроенных функций объекта вывода потока (таких как 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.
  • Маска регистра для каждого компонента должна совпадать в диапазоне индекса.
Модель шейдера 5:
  • Максимальное число скаляров для потокового вывода — 128.
  • Маска регистра для каждого компонента не должна совпадать в диапазоне индекса.
  • Динамическое индексирование выходных данных должно быть допустимым для всех потоков.
  • Режимы интерполяции не должны соответствовать потокам.

Возможности геометрического шейдера