Высокоуровневый язык шейдеров

Язык затенения

Сцена, содержащая несколько различных 2D HLSL-шейдеров. Искажение статуи достигается чисто физически, в то время как текстура прямоугольной рамки рядом с ней основана на интенсивности цвета. Квадрат на заднем плане был преобразован и повернут . Частичная прозрачность и отражение воды на переднем плане добавляются шейдером, примененным в конечном итоге ко всей сцене.

Язык шейдеров высокого уровня [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.01.11.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]

Зависимый предел текстуры44468Неограниченный8НеограниченныйНеограниченный
Предел инструкций текстуры4446 * 232НеограниченныйНеограниченныйНеограниченныйНеограниченный
Предел арифметических инструкций8888 * 264НеограниченныйНеограниченныйНеограниченныйНеограниченный
Регистр позицийНетНетНетНетНетНетНетДаДа
Слоты для инструкций88 + 48 + 4(8 + 6) * 264 + 32512512≥ 512≥ 65536
Выполненные инструкции88 + 48 + 4(8 + 6) * 264 + 3251251265536Неограниченный
Текстурные косвенные указания44444Неограниченный4НеограниченныйНеограниченный
Интерполированные регистры2 + 42 + 42 + 42 + 62 + 82 + 82 + 81032
Инструкция предикацииНетНетНетНетНетДаНетДаНет
Регистры индексного вводаНетНетНетНетНетНетНетДаДа
Темп регистры22 + 43 + 4612-322232324096
Постоянные регистры888832323222416×4096
Произвольное выпиваниеНетНетНетНетНетДаНетДаДа
Инструкции по градиентуНетНетНетНетНетДаНетДаДа
Регистр количества цикловНетНетНетНетНетНетНетДаДа
Регистр лиц (двустороннее освещение)НетНетНетНетНетНетДаДаДа
Динамическое управление потокомНетНетНетНетНетНетНетДа (24)Да (64)
Побитовые операторыНетНетНетНетНетНетНетНетДа
Собственные целые числаНетНетНетНетНетНетНетНетДа
  • PS 1.0 — Невыпущенный 3dfx Rampage, DirectX 8
  • PS 1.1GeForce 3 , DirectX 8
  • PS 1.23Dlabs Wildcat VP, DirectX 8.1
  • PS 1.3GeForce 4 Ti , DirectX 8.1
  • PS 1.4Radeon 8500–9250 , Matrox Parhelia , DirectX 8.1
  • Модель шейдеров 2.0Radeon 9500–9800/X300–X600 , DirectX 9
  • Shader Model 2.0aGeForce FX/PCX -оптимизированная модель, DirectX 9.0a
  • Модель шейдера 2.0b — модель шейдера Radeon X700–X850 , DirectX 9.0b
  • Shader Model 3.0Radeon X1000 и GeForce 6 , DirectX 9.0c
  • Shader Model 4.0Radeon HD 2000 и GeForce 8 , DirectX 10
  • Модель шейдеров 4.1Radeon HD 3000 и GeForce 200 , DirectX 10.1
  • Shader Model 5.0Radeon HD 5000 и GeForce 400 , DirectX 11
  • Модель шейдера 5.1GCN 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
  • Модель шейдеров 6.8 — RDNA 1+, Maxwell 2+, DirectX 12 (12_0+) с WDDM 3.2


«32 + 64» для исполняемых инструкций означает «32 текстурные инструкции и 64 арифметические инструкции».

Сравнение вершинных шейдеров

Версия вершинного шейдера1.01.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]
# слотов инструкций128128256256≥ 512≥ 65536
Макс. количество выполненных инструкций12812810246553665536Неограниченный
Инструкция предикацииНетНетНетДаДаДа
Темп регистры12121216324096
# константные регистры≥ 96≥ 96≥ 256256≥ 25616×4096
Адресный регистрНетДаДаДаДаДа
Статическое управление потокомНетНетДаДаДаДа
Динамическое управление потокомНетНетНетДаДаДа
Глубина динамического управления потоком242464
Извлечение текстуры вершиныНетНетНетНетДаДа
# сэмплеров текстур4128
Поддержка экземпляров геометрииНетНетНетНетДаДа
Побитовые операторыНетНетНетНетНетДа
Собственные целые числаНетНетНетНетНетДа

Смотрите также

Сноски

  1. ^ "Написание шейдеров HLSL в Direct3D 9". Microsoft Docs . Получено 22 февраля 2021 г.
  2. ^ "High-level shader language (HLSL)". Microsoft Docs . Получено 22 февраля 2021 г.
  3. ^ "Fusion Industries :: Cg и HLSL FAQ ::". 24 августа 2012 г. Архивировано из оригинала 24 августа 2012 г.
  4. ^ "Shader Model 5.1 Objects". Microsoft Docs . Получено 22 февраля 2021 г.
  5. ^ "HLSL Shader Model 6.0". Microsoft Docs . Получено 22 февраля 2021 г.
  6. ^ abcdef "Pixel Shader Differences". Microsoft Docs . 19 августа 2020 г. Получено 22 февраля 2021 г.
  7. ^ abcde Peeper, Craig; Mitchell, Jason L. (июль 2003 г.). «Введение в язык шейдеров высокого уровня DirectX 9». Microsoft Docs . Получено 22 февраля 2021 г.
  8. ^ abc Shimpi, Anand Lal . "NVIDIA представляет GeForce FX (NV30)". AnandTech . Получено 22 февраля 2021 г.
  9. ^ Уилсон, Дерек. «ATI Radeon X800 Pro и XT Platinum Edition: появление R420». АнандТех . Проверено 22 февраля 2021 г.
  10. ^ ab Shader Model 3.0, Ашу Реге, NVIDIA Developer Technology Group, 2004.
  11. ^ ab Система Direct3D 10, Дэвид Блайт, Microsoft Corporation, 2006.
  12. ^ ab "Регистры - ps_4_1". Microsoft Docs . 23 августа 2019 г. Получено 22 февраля 2021 г.
  13. ^ ab "Регистры - ps_5_0". Microsoft Docs . 23 августа 2019 г. Получено 22 февраля 2021 г.
  14. ^ abcd "Vertex Shader Differences". Microsoft Docs . 19 августа 2020 г. Получено 22 февраля 2021 г.
  • Руководство по программированию для HLSL в Microsoft Docs
  • Введение в язык шейдеров высокого уровня DirectX 9 (ATI) AMD developer central
  • Введение и руководство по HLSL от Riemer (включая пример кода) Архивировано 19 ноября 2008 г. на Wayback Machine
  • Введение в HLSL
  • Спецификация промежуточного языка DirectX (DXIL)
Взято с "https://en.wikipedia.org/w/index.php?title=Высокоуровневый_язык_шейдеров&oldid=1258634545"