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


Стадия сборщика входных данных

API Direct3D 10 и более поздних версий разделяет функциональные области конвейера на этапы. первым этапом конвейера является этап входного ассемблер (IA).

Задача этапа сборщика входных данных — считывать примитивные данные (точки, линии и(или) треугольники) из заполненных пользователем буферов и собирать данные в примитивы, которые будут использоваться другими этапами конвейера. Этап сборщика входных данных может объединять вершины в несколько различных типов примитивов, таких как списки линий, полосы треугольников или примитивы со смежностью. Для поддержки геометрического шейдера добавлены новые примитивные типы (например, список строк с примыканиями или список треугольников с примыканиями).

Информация о смежности доступна приложению только в шейдере геометрии. Если шейдер геометрии вызывается, например с помощью треугольника со смежностью, входные данные будут содержать 3 вершины для каждого треугольника и 3 вершины для данных о смежности для каждого треугольника.

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

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

Как показано на схеме блоков конвейера, после того как этап IA считывает данные из памяти (собирает данные в примитивы и присоединяет системные значения), данные будут выводиться на этап вершинного шейдера.

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

Раздел Описание
начало работы с этапом Input-Assembler
Для инициализации этапа сборщика входных данных (IA) необходимо выполнить несколько шагов. Например, необходимо создать ресурсы буфера с данными вершин, которые необходимы конвейеру, сообщить этапу IA, где находятся буферы и какой тип данных они содержат, а также указать тип примитивов для сборки из данных.
Примитивные топологии
Direct3D 10 и более поздних версий поддерживает несколько примитивных типов (или топологий), представленных D3D_PRIMITIVE_TOPOLOGY перечисляемым типом. Эти типы определяют, как вершины интерпретируются и отрисовываются конвейером.
Использование этапа Input-Assembler без буферов
Создание и привязка буферов не требуется, если шейдеры не требуют буферов. В этом разделе приведен пример простых вершинных и пиксельных шейдеров, которые рисуют один треугольник.
Использование System-Generated значений
Системные значения создаются этапом IA (на основе пользовательской семантики ввода), чтобы обеспечить определенную эффективность операций шейдера.

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

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