Язык шейдеров высокого уровня
Язык шейдеров высокого уровня [1] или язык шейдеров высокого уровня [2] ( HLSL ) — это собственный язык шейдеров, разработанный Microsoft для Direct3D 9 API для расширения языка ассемблера шейдеров и впоследствии ставший обязательным языком шейдеров для унифицированной модели шейдеров Direct3D 10 и выше.
HLSL аналогичен языку шейдеров GLSL , используемому в стандарте OpenGL . Он очень похож на язык шейдеров Nvidia Cg , поскольку был разработан вместе с ним. Ранние версии двух языков считались идентичными, только продавались по-разному. [3] Шейдеры HLSL могут обеспечить значительное увеличение скорости и детализации, а также множество специальных эффектов как в 2D, так и в 3D компьютерной графике . [ нужна ссылка ]
Программы HLSL существуют в шести формах: пиксельные шейдеры (фрагменты в GLSL), вершинные шейдеры , геометрические шейдеры , вычислительные шейдеры , шейдеры тесселяции (шейдеры корпуса и домена) и шейдеры трассировки лучей (шейдеры генерации лучей, шейдеры пересечения, любое попадание/ближайшее попадание). /Мисс Шейдерс). Вершинный шейдер выполняется для каждой вершины, отправленной приложением, и в первую очередь отвечает за преобразование вершины из пространства объектов в пространство просмотра, генерацию координат текстуры и вычисление коэффициентов освещения, таких как векторы нормали, касательной и бикасательной вершины. Когда группа вершин (обычно 3, чтобы сформировать треугольник) проходит через вершинный шейдер, их выходное положение интерполируется для формирования пикселей внутри его области; этот процесс известен как растеризация .
При желании приложение, использующее интерфейс Direct3D 10/11/12 и оборудование Direct3D 10/11/12, также может указать геометрический шейдер. Этот шейдер принимает на вход некоторые вершины примитива (треугольник/линия/точка) и использует эти данные для генерации/вырождения (или тесселяции ) дополнительных примитивов или для изменения типа примитивов, каждый из которых затем отправляется в растеризатор.
В D3D11.3 и D3D12 представлена модель шейдера 5.1. [4] и позже 6.0. [5]
Сравнение моделей шейдеров
[ редактировать ]В списке указаны графические процессоры, которые первыми поддерживали данные спецификации. Производители обычно поддерживают все модели младших шейдеров через драйверы. Обратите внимание, что игры могут утверждать, что требуют определенной версии DirectX, но не обязательно требуют графического процессора, соответствующего полной спецификации этой версии, поскольку разработчики могут использовать более высокую версию 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) |
Побитовые операторы | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Да |
Собственные целые числа | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Да |
- PS 1.0 — неизданная версия 3dfx Rampage, DirectX 8
- PS 1.1 — GeForce 3 , DirectX 8
- PS 1.2 — вице-президент 3Dlabs Wildcat, DirectX 8.1
- PS 1.3 — GeForce 4 Ti , DirectX 8.1
- PS 1.4 — Radeon 8500-9250 , Matrox Parhelia , DirectX 8.1
- Модель шейдеров 2.0 — Radeon 9500-9800/X300-X600 , DirectX 9
- Shader Model 2.0a — модель, оптимизированная для GeForce FX/PCX , DirectX 9.0a.
- Shader Model 2.0b — Radeon X700-X850 , DirectX 9.0b шейдерная модель
- Модель шейдеров 3.0 — Radeon X1000 и GeForce 6 , DirectX 9.0c
- Модель шейдеров 4.0 — Radeon HD 2000 и GeForce 8 , DirectX 10
- Шейдерная модель 4.1 — Radeon HD 3000 и GeForce 200 , DirectX 10.1.
- Шейдерная модель 5.0 — Radeon HD 5000 и GeForce 400 , DirectX 11
- Модель шейдера 5.1 — GCN 1+ , Fermi+, DirectX 12 (11_0+) с WDDM 2.0
- Модель шейдеров 6.0 — GCN 1+, Kepler+, DirectX 12 (11_0+) с WDDM 2.1
- Модель шейдера 6.1 — GCN 1+, Kepler+, DirectX 12 (11_0+) с WDDM 2.3
- Модель шейдера 6.2 — GCN 1+, Kepler+, DirectX 12 (11_0+) с WDDM 2.4.
- Модель шейдера 6.3 — GCN 1+, Kepler+, DirectX 12 (11_0+) с WDDM 2.5.
- Модель шейдера 6.4 — GCN 1+, Kepler+, Skylake+, DirectX 12 (11_0+) с WDDM 2.6.
- Модель шейдера 6.5 — GCN 1+, Kepler+, Skylake+, DirectX 12 (11_0+) с WDDM 2.7.
- Модель шейдера 6.6 — GCN 4+, Maxwell+, DirectX 12 (11_0+) с WDDM 3.0.
- Модель шейдера 6.7 — GCN 4+, Maxwell+, DirectX 12 (12_0+) с WDDM 3.1.
«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 |
создания экземпляров геометрии Поддержка | Нет | Нет | Нет | Нет | Да | Да |
Побитовые операторы | Нет | Нет | Нет | Нет | Нет | Да |
Собственные целые числа | Нет | Нет | Нет | Нет | Нет | Да |
См. также
[ редактировать ]Сноски
[ редактировать ]- ^ «Написание шейдеров HLSL в Direct3D 9» . Документы Майкрософт . Проверено 22 февраля 2021 г.
- ^ «Язык шейдеров высокого уровня (HLSL)» . Документы Майкрософт . Проверено 22 февраля 2021 г.
- ^ «Fusion Industries :: Часто задаваемые вопросы по Cg и HLSL ::» . 24 августа 2012 г. Архивировано из оригинала 24 августа 2012 г.
- ^ «Объекты шейдерной модели 5.1» . Документы Майкрософт . Проверено 22 февраля 2021 г.
- ^ «Модель шейдера HLSL 6.0» . Документы Майкрософт . Проверено 22 февраля 2021 г.
- ^ Jump up to: а б с д и ж «Различия пиксельных шейдеров» . Документы Майкрософт . Проверено 22 февраля 2021 г.
- ^ Jump up to: а б с д и Пипер, Крейг; Митчелл, Джейсон Л. (июль 2003 г.). «Введение в язык шейдеров высокого уровня DirectX 9» . Документы Майкрософт . Проверено 22 февраля 2021 г.
- ^ Jump up to: а б с Шимпи, Ананд Лал . «NVIDIA представляет GeForce FX (NV30)» . АнандТех . Проверено 22 февраля 2021 г.
- ^ Уилсон, Дерек. «ATI Radeon X800 Pro и XT Platinum Edition: появление R420» . АнандТех . Проверено 22 февраля 2021 г.
- ^ Jump up to: а б Модель шейдеров 3.0, Ашу Реге, NVIDIA Developer Technology Group, 2004 г.
- ^ Jump up to: а б Система Direct3D 10, Дэвид Блайт, Microsoft Corporation, 2006 г.
- ^ Jump up to: а б «Регистры — ps_4_1» . Документы Майкрософт . Проверено 22 февраля 2021 г.
- ^ Jump up to: а б «Регистры — ps_5_0» . Документы Майкрософт . Проверено 22 февраля 2021 г.
- ^ Jump up to: а б с д «Различия вершинных шейдеров» . Документы Майкрософт . Проверено 22 февраля 2021 г.
Внешние ссылки
[ редактировать ]- Руководство по программированию для HLSL в Microsoft Docs
- Введение в язык шейдеров высокого уровня DirectX 9 (ATI) Центр разработчиков AMD
- Введение и руководство по HLSL от Riemer (включая образец кода). Архивировано 19 ноября 2008 г. на Wayback Machine.
- Введение в HLSL
- Спецификация промежуточного языка DirectX (DXIL)