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


Этап вершинного шейдера

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

Вершинный шейдер

Каждая входная вершина шейдера вершин может состоять из 16 32-разрядных векторов (до 4 компонентов в каждом), а каждая выходная вершина может состоять из 16 32-разрядных 4-компонентных векторов. Все вершинные шейдеры должны иметь как минимум один вход и один выход, который может быть всего лишь одним скалярным значением.

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

Шейдеры вершин всегда выполняются над всеми вершинами, включая смежные вершины во входных топологиях примитивов со смежностью. Количество выполнений вершинного шейдера можно запросить из ЦП с помощью статистики конвейера VSInvocations.

Вершинный шейдер может выполнять операции загрузки и выборки текстур, где производные от экранного пространства не требуются (с помощью встроенных функций HLSL: Sample (Объект текстуры DirectX HLSL), SampleCmpLevelZero (Объект текстуры DirectX HLSL) и SampleGrad (Объект текстуры DirectX HLSL)).