Язык шейдеров высокого уровня [1] или язык шейдеров высокого уровня [2] ( HLSL ) — это фирменный язык шейдеров, разработанный корпорацией Microsoft для API Direct3D 9 с целью дополнения языка ассемблера шейдеров и ставший обязательным языком шейдеров для унифицированной модели шейдеров Direct3D 10 и выше.
HLSL аналогичен языку шейдеров GLSL , используемому со стандартом OpenGL . Он очень похож на язык шейдеров Nvidia Cg , поскольку был разработан вместе с ним. Ранние версии двух языков считались идентичными, только продавались по-разному. [3] Шейдеры HLSL могут обеспечить значительное увеличение скорости и детализации, а также множество спецэффектов как в 2D, так и в 3D компьютерной графике . [ требуется ссылка ]
Программы HLSL бывают шести видов: пиксельные шейдеры (фрагмент в GLSL), вершинные шейдеры , геометрические шейдеры , вычислительные шейдеры , шейдеры тесселяции (шейдеры Hull и Domain) и шейдеры трассировки лучей (шейдеры генерации лучей, шейдеры пересечения, шейдеры любого попадания/близкого попадания/промаха). Вершинный шейдер выполняется для каждой вершины, отправленной приложением, и в первую очередь отвечает за преобразование вершины из пространства объектов в пространство вида, генерацию координат текстуры и вычисление коэффициентов освещения, таких как векторы нормали, касательной и бикасательной вершины. Когда группа вершин (обычно 3, чтобы сформировать треугольник) проходит через вершинный шейдер, их выходное положение интерполируется для формирования пикселей в его области; этот процесс известен как растеризация .
При желании приложение, использующее интерфейс Direct3D 10/11/12 и оборудование Direct3D 10/11/12, может также указать геометрический шейдер. Этот шейдер принимает в качестве входных данных некоторые вершины примитива (треугольник/линия/точка) и использует эти данные для генерации/вырождения (или тесселяции ) дополнительных примитивов или для изменения типа примитивов, каждый из которых затем отправляется в растеризатор.
В D3D11.3 и D3D12 была представлена Shader Model 5.1 [4] и более поздняя версия 6.0. [5]
Перечисленные графические процессоры — это оборудование, которое первым поддерживало данные спецификации. Производители обычно поддерживают все более низкие модели шейдеров через драйверы. Обратите внимание, что игры могут заявлять о необходимости определенной версии DirectX, но не обязательно требуют GPU, соответствующего полной спецификации этой версии, поскольку разработчики могут использовать более высокую версию DirectX API для таргетинга на оборудование с более низкими характеристиками Direct3D; например, DirectX 9 раскрывает возможности оборудования уровня DirectX7, которые DirectX7 не раскрывал, ориентируясь на их конвейер T&L с фиксированными функциями.
Версия пиксельного шейдера | 1.0 | 1.1 | 1.2 1.3 [6] | 1.4 [6] | 2.0 [6] [7] | 2.0а [6] [7] [8] | 2.0б [6] [7] [9] | 3.0 [6] [10] | 4.0 [11] 4.1 [12] 5.0 [13] |
---|---|---|---|---|---|---|---|---|---|
Зависимый предел текстуры | 4 | 4 | 4 | 6 | 8 | Неограниченный | 8 | Неограниченный | Неограниченный |
Предел инструкций текстуры | 4 | 4 | 4 | 6 * 2 | 32 | Неограниченный | Неограниченный | Неограниченный | Неограниченный |
Предел арифметических инструкций | 8 | 8 | 8 | 8 * 2 | 64 | Неограниченный | Неограниченный | Неограниченный | Неограниченный |
Регистр позиций | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Да | Да |
Слоты для инструкций | 8 | 8 + 4 | 8 + 4 | (8 + 6) * 2 | 64 + 32 | 512 | 512 | ≥ 512 | ≥ 65536 |
Выполненные инструкции | 8 | 8 + 4 | 8 + 4 | (8 + 6) * 2 | 64 + 32 | 512 | 512 | 65536 | Неограниченный |
Текстурные косвенные указания | 4 | 4 | 4 | 4 | 4 | Неограниченный | 4 | Неограниченный | Неограниченный |
Интерполированные регистры | 2 + 4 | 2 + 4 | 2 + 4 | 2 + 6 | 2 + 8 | 2 + 8 | 2 + 8 | 10 | 32 |
Инструкция предикации | Нет | Нет | Нет | Нет | Нет | Да | Нет | Да | Нет |
Регистры индексного ввода | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Да | Да |
Темп регистры | 2 | 2 + 4 | 3 + 4 | 6 | 12-32 | 22 | 32 | 32 | 4096 |
Постоянные регистры | 8 | 8 | 8 | 8 | 32 | 32 | 32 | 224 | 16×4096 |
Произвольное выпивание | Нет | Нет | Нет | Нет | Нет | Да | Нет | Да | Да |
Инструкции по градиенту | Нет | Нет | Нет | Нет | Нет | Да | Нет | Да | Да |
Регистр количества циклов | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Да | Да |
Регистр лиц (двустороннее освещение) | Нет | Нет | Нет | Нет | Нет | Нет | Да | Да | Да |
Динамическое управление потоком | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Да (24) | Да (64) |
Побитовые операторы | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Да |
Собственные целые числа | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Да |
«32 + 64» для исполняемых инструкций означает «32 текстурные инструкции и 64 арифметические инструкции».
Версия вершинного шейдера | 1.0 | 1.1 [14] | 2.0 [7] [14] [8] | 2.0а [7] [14] [8] | 3.0 [10] [14] | 4,0 [11] 4,1 [12] 5,0 [13] |
---|---|---|---|---|---|---|
# слотов инструкций | 128 | 128 | 256 | 256 | ≥ 512 | ≥ 65536 |
Макс. количество выполненных инструкций | 128 | 128 | 1024 | 65536 | 65536 | Неограниченный |
Инструкция предикации | Нет | Нет | Нет | Да | Да | Да |
Темп регистры | 12 | 12 | 12 | 16 | 32 | 4096 |
# константные регистры | ≥ 96 | ≥ 96 | ≥ 256 | 256 | ≥ 256 | 16×4096 |
Адресный регистр | Нет | Да | Да | Да | Да | Да |
Статическое управление потоком | Нет | Нет | Да | Да | Да | Да |
Динамическое управление потоком | Нет | Нет | Нет | Да | Да | Да |
Глубина динамического управления потоком | — | — | — | 24 | 24 | 64 |
Извлечение текстуры вершины | Нет | Нет | Нет | Нет | Да | Да |
# сэмплеров текстур | — | — | — | — | 4 | 128 |
Поддержка экземпляров геометрии | Нет | Нет | Нет | Нет | Да | Да |
Побитовые операторы | Нет | Нет | Нет | Нет | Нет | Да |
Собственные целые числа | Нет | Нет | Нет | Нет | Нет | Да |