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


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

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

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

Вершинный идентификатор

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

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

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

PrimitiveID

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

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

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

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

InstanceID

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

Этап IA добавит идентификатор экземпляра в каждую вершину, если объявление входных шейдеров вершин включает семантику идентификатора экземпляра. Для каждого индексированного вызова рисования идентификатор экземпляра увеличивается на 1. Все остальные вызовы рисования не изменяют значение идентификатора экземпляра. Если идентификатор экземпляра переполняется (превышает 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

 

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

Input-Assembler этап