Использование системных значений
Системные значения создаются этапом сборщика ввода (IA) (на основе семантики ввода, предоставленной пользователем), чтобы обеспечить определенную эффективность в операциях шейдера. При присоединении данных, таких как идентификатор экземпляра (видимый на этапе шейдера вершин (VS), идентификатор вершины (видимый для VS) или примитивный идентификатор (видимый для этапа/ шейдера пикселей геометрии (GS), последующий этап шейдера может искать эти системные значения для оптимизации обработки на этом этапе.
Например, этап VS может искать идентификатор экземпляра, чтобы получить дополнительные данные о вершинах для шейдера или выполнить другие операции; Этапы GS и PS могут использовать примитивный идентификатор для захвата данных на один и тот же способ.
Вершинный идентификатор
Идентификатор вершины используется каждым этапом шейдера для идентификации каждой вершины. Это 32-разрядное целое число без знака, значение по умолчанию которого равно 0. Он назначается вершине, когда примитив обрабатывается этапом сборщика входных данных (IA). Подключите семантику вершины к объявлению входных данных шейдера, чтобы сообщить этапу IA, чтобы создать идентификатор вершины.
IA добавит идентификатор вершины к каждой вершине для использования этапами шейдера. Для каждого вызова рисования идентификатор вершины увеличивается на 1. Во время индексированных вызовов рисования счетчик сбрасывается обратно в начальное значение. Если переполнение идентификатора вершины (превышает 2 КАЖДОЕ– 1), оно будет обтекаться до 0.
Для всех примитивных типов вершины имеют идентификатор вершины, связанный с ними (независимо от прилагания).
PrimitiveID
Примитивный идентификатор используется каждым этапом шейдера для идентификации каждого примитива. Это 32-разрядное целое число без знака, значение по умолчанию которого равно 0. Он назначается примитиву, когда примитив обрабатывается этапом сборщика входных данных (IA). Чтобы сообщить этапу IA, чтобы создать примитивный идентификатор, прикрепить семантику примитивного идентификатора к объявлению входных данных шейдера.
Этап IA добавит примитивный идентификатор к каждому примитиву для использования этапом геометрического шейдера (GS) или этапом шейдера вершин (VS), который является первым этапом, активным после этапа IA. При каждом вызове индексированного рисования примитивный идентификатор увеличивается на 1, однако примитивный идентификатор сбрасывается до 0 при каждом запуске нового экземпляра. Все остальные вызовы рисования не изменяют значение идентификатора экземпляра. Если идентификатор экземпляра переполняется (превышает 2fx–1), он упаковывается в значение 0.
Этап шейдера пикселей (PS) не имеет отдельных входных данных для примитивного идентификатора, однако любые входные данные шейдера пикселей, указывающие примитивный идентификатор, использует режим интерполяции констант.
Нет поддержки автоматического создания примитивного идентификатора для смежных примитивов. Для примитивных типов с примежаемостью, таких как полоса треугольника с прияжностью, примитивный идентификатор поддерживается только для внутренних примитивов (не смежных примитивов), как и набор примитивов в полосе треугольника без прилежания.
InstanceID
Идентификатор экземпляра используется каждым этапом шейдера для идентификации экземпляра геометрии, которая в настоящее время обрабатывается. Это 32-разрядное целое число без знака, значение по умолчанию которого равно 0.
Этап сборщика входных данных (IA) добавит идентификатор экземпляра в каждую вершину, если объявление входных данных вершинного шейдера включает семантику идентификатора экземпляра. Для каждого вызова индексированного рисования идентификатор экземпляра увеличивается на 1. Все остальные вызовы рисования не изменяют значение идентификатора экземпляра. При переполнении идентификатора экземпляра (превышает 2fx–1), он упаковывается в значение 0.
Пример
На следующем рисунке показано, как системные значения присоединены к экземплярной полосе треугольника на этапе сборщика входных данных (IA).
В этих таблицах показаны системные значения, созданные для обоих экземпляров одной полосы треугольника. Первый экземпляр (экземпляр U) отображается синим цветом, второй экземпляр (экземпляр V) отображается зеленым цветом. Сплошные линии соединяют вершины в примитивах, дефишированные линии соединяют смежные вершины.
В следующих таблицах показаны системные значения для экземпляра U.
данные вершин | C, U | D, U | E, U | F,U | G, U | H, U | I,U | J,U | K,U | L,U |
---|---|---|---|---|---|---|---|---|---|---|
Вершинный идентификатор | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
InstanceID | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Экземпляр полосы треугольника U имеет три примитива треугольников со следующими системными значениями:
Значение 1 | Значение 2 | Значение 3 | |
---|---|---|---|
PrimitiveID | 0 | 1 | 2 |
InstanceID | 0 | 0 | 0 |
В следующих таблицах показаны системные значения для экземпляра V.
данные вершин | C, V | D,V | E,V | F,V | G, V | H, V | I,V | J,V | K, V | L,V |
---|---|---|---|---|---|---|---|---|---|---|
Вершинный идентификатор | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
InstanceID | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Экземпляр полосы треугольника V содержит три примитива треугольников со следующими системными значениями:
Значение 1 | Значение 2 | Значение 3 | |
---|---|---|---|
PrimitiveID | 0 | 1 | 2 |
InstanceID | 1 | 1 | 1 |
Этап сборщика входных данных (IA) создает идентификаторы (вершины, примитивы и экземпляры); обратите внимание, что каждый экземпляр получает уникальный идентификатор экземпляра. Данные заканчиваются срезом полосы, которая отделяет каждый экземпляр полосы треугольника.
Связанные темы