Использование System-Generated значений

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

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

VertexID

Идентификатор вершины используется на каждом этапе шейдера для идентификации каждой вершины. Это 32-разрядное целое число без знака, значение по умолчанию — 0. Он назначается вершине, когда примитив обрабатывается этапом IA. Прикрепите семантику vertex-id к объявлению входных данных шейдера, чтобы сообщить этапу IA о создании идентификатора каждой вершины.

IA добавит идентификатор вершины к каждой вершине для использования этапами шейдера. Для каждого вызова draw идентификатор вершины увеличивается на 1. При индексированных вызовах метода рисования счетчик сбрасывается обратно в начальное значение. Для ID3D11DeviceContext::D rawIndexed и ID3D11DeviceContext::D rawIndexedInstanced идентификатор вершины представляет значение индекса. Если идентификатор вершины переполнен (превышает 2²–1), он преобразуется в 0.

Для всех примитивных типов вершины имеют идентификатор вершины, связанный с ними (независимо от смежности).

PrimitiveID

Идентификатор примитива используется на каждом этапе шейдера для идентификации каждого примитива. Это 32-разрядное целое число без знака, значение по умолчанию — 0. Он назначается примитиву, когда примитив обрабатывается этапом IA. Чтобы сообщить этапу IA о создании примитивного идентификатора, прикрепите семантику primitive-id к объявлению входных данных шейдера.

Этап IA добавит идентификатор примитива к каждому примитиву для использования геометрическим шейдером или этапом пиксельного шейдера (в зависимости от того, какой этап является первым активным после этапа IA). Для каждого проиндексированного вызова draw идентификатор-примитив увеличивается на 1, однако идентификатор-примитив сбрасывается до 0 при каждом запуске нового экземпляра. Все остальные вызовы draw не изменяют значение идентификатора экземпляра. Если идентификатор экземпляра переполнен (превышает 2²–1), он преобразуется в 0.

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

Автоматическое создание идентификатора-примитива для смежных примитивов не поддерживается. Для примитивных типов с смежностью, таких как полоса треугольника с смежностью, идентификатор примитива поддерживается только для внутренних примитивов (несмежных примитивов), как и для набора примитивов в полосе треугольника без смежности.

InstanceID

Идентификатор экземпляра используется на каждом этапе шейдера для идентификации экземпляра геометрии, который обрабатывается в данный момент. Это 32-разрядное целое число без знака, значение по умолчанию — 0.

Этап IA добавит идентификатор экземпляра к каждой вершине, если объявление входных данных шейдера вершин включает семантику идентификатора экземпляра. Для каждого проиндексированного вызова draw идентификатор экземпляра увеличивается на 1. Все остальные вызовы draw не изменяют значение идентификатора экземпляра. Если идентификатор экземпляра переполнен (превышает 2²–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
VertexID 0 1 2 3 4 5 6 7 8 9
InstanceID 0 0 0 0 0 0 0 0 0 0

 

Значение Значение Значение
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
VertexID 0 1 2 3 4 5 6 7 8 9
InstanceID 1 1 1 1 1 1 1 1 1 1

 

Значение Значение Значение
PrimitiveID 0 1 2
InstanceID 1 1 1

 

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

Этап сборщика входных данных