Язык ассемблера ARB - ARB assembly language

Язык ассемблера ARB низкоуровневый язык затенения, который можно охарактеризовать как язык ассемблера. Он был создан Совет по обзору архитектуры OpenGL (ARB) для стандартизации GPU инструкции по управлению оборудованием графический конвейер.

История

Инструменты Техаса создал первый программируемый графический процессор в 1985 году: TMS34010, что позволило разработчикам загружать и выполнять код на процессоре для управления пиксель вывод на видеодисплей. За этим последовали TMS34020 и TMS34082 в 1989 году, обеспечивающие программируемый вывод трехмерной графики.

NVIDIA выпустила свою первую видеокарту NV1 в 1995 году, который поддерживал квадратичное наложение текстуры. Затем последовал Riva 128 (NV3) в 1997 году, обеспечивая первое аппаратное ускорение для Direct3D.

Различные производители видеокарт выпустили свои собственные ускоренные платы, каждая со своим собственным набором инструкций для GPU операции. В Совет по обзору архитектуры OpenGL (ARB) была образована в 1992 году, отчасти чтобы установить стандарты для GPU промышленность.

АРБ и NVIDIA учредил ряд OpenGL расширения для стандартизации программирования на GPU:[1]

  • EXT_texture_env_combine - предоставлен программируемый метод объединения текстур.
  • NV_register_combiners - GeForce 256
  • NV_vertex_program - GeForce 3
  • NV_texture_shader - GeForce 3
  • NV_texture_shader3 - GeForce 4
  • NV_vertex_program2 - GeForce FX
  • NV_fragment_program - GeForce FX

Это завершилось ARB выпуск 2002 г.

  • ARB_vertex_program[2]
  • ARB_fragment_program[3]

Эти два расширения представляют собой отраслевой стандарт для языка ассемблера, который управляет GPU конвейер для свойств 3D-вершин и интерполированных пикселей соответственно.

Последующий высокий уровень языки затенения иногда компилировать по этому стандарту ARB. В то время как 3D-разработчики теперь чаще используют C-подобный высокоуровневый язык затенения для GPU При программировании, сборка ARB имеет то преимущество, что поддерживается широким спектром оборудования.

Обратите внимание, однако, что некоторые функции, такие как циклы и условные выражения, недоступны в сборке ARB, и их использование требует принятия либо расширения NV_gpu_program4, либо языка затенения GLSL.

Все основные производители видеокарт уже много лет поддерживают язык ассемблера ARB, так как NVIDIA Geforce FX серии, то AMD R300 карты (серия Radeon 9500 и выше), а Intel GMA 900.[4] Однако стандартный язык ассемблера ARB находится только на уровне Пиксельный шейдер 2.0 и предшествует GLSL, поэтому у него очень мало функций. Хотя nVidia сделала проприетарные расширения для языков сборки ARB, которые сочетают в себе высокую скорость компиляции сборки ARB с современными функциями OpenGL 3.x, представленными в GeForce 8 серии, большинство реализаций OpenGL, отличных от nVidia, не предоставляют проприетарные расширения nVidia для языка ассемблера ARB[5] и не предлагают никакого другого способа доступа ко всем функциям шейдера непосредственно в сборке, что вынуждает использовать GLSL даже для машинно-генерируемых шейдеров, где сборка была бы более подходящей.

подробности

ARB_vertex_program

Расширение ARB Vertex Program предоставляет API-интерфейсы для загрузки инструкций сборки ARBvp1.0, включения выбранных программ и установки различных параметров графического процессора.

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

ARB_fragment_program

Расширение ARB Fragment Program предоставляет API для загрузки инструкций сборки ARBfp1.0, включения выбранных программ и установки различных параметров графического процессора.

OpenGL фрагменты - это интерполированные определения пикселей. В GPU Вершинный процессор вычисляет все пиксели, контролируемые набором вершин, интерполирует их положение и другие свойства и передает их процессу фрагмента. Программы фрагментов позволяют разработчикам изменять эти свойства пикселей до того, как они будут отрисованы в буфер кадра для отображения.

Параметры OpenGL

  • Атриб параметры - это атрибуты вершин, такие как нормали вершин.
  • Местный параметры применяются ко всему набору данных программы для данного прохода шейдера.
  • Env параметры применяются ко всем программам.

Переменные ARB

Все переменные сборки ARB являются векторами с плавающей запятой, к которым можно обращаться с помощью суффиксов xyzw или rgba.

Регистры - это скалярные переменные, в которых может быть адресован только один элемент.

  • АДРЕС переменные - это регистры.
  • ATTRIB являются атрибутами вершины.
  • ПАРАМ это единые свойства - константы, Env или Local.
  • ТЕМП. временные переменные.
  • НИКНЕЙМЫ предоставляет альтернативные имена для переменных.
  • ВЫВОД обозначает переменные, которые передаются обратно в конвейер.

Атрибуты вершины

Сборка ARB поддерживает следующие суффиксы для атрибутов вершин:

  • должность
  • вес
  • нормальный
  • цвет
  • туманкоорд
  • Texcoord
  • matrixindex
  • аттриб

Матрицы состояний

Сборка ARB поддерживает следующие матрицы состояний:

  • просмотр модели
  • проекция
  • текстура
  • палитра
  • программа

Могут использоваться следующие модификаторы:

  • обратный
  • транспонировать
  • invtrans

Инструкция по сборке ARB

Сборка ARB поддерживает следующие инструкции:

  • АБС - абсолютная величина
  • ДОБАВИТЬ - Добавить
  • ARL - загрузка адресного регистра
  • DP3 - 3-х компонентный скалярное произведение
  • DP4 - 4-х компонентный скалярное произведение
  • DPH - однородный скалярное произведение
  • Летнее время - вектор расстояния
  • EX2 - экспоненциальная основа 2
  • EXP - экспоненциальная основа 2 (приблизительно)
  • FLR - этаж
  • FRC - дробная часть
  • LG2 - логарифм по основанию 2
  • LIT - вычислить световые коэффициенты
  • ЖУРНАЛ - логарифм по основанию 2 (приблизительно)
  • СУМАСШЕДШИЙ - умножить и сложить
  • МАКСИМУМ - максимум
  • MIN - минимум
  • MOV - шаг
  • MUL - умножить
  • Военнопленный - возводить в степень
  • RCP - взаимный
  • RSQ - обратный квадратный корень
  • SGE - установлено больше или равно
  • SLT - установлен менее чем
  • SUB - вычесть
  • SWZ - расширенный пить
  • TEX - Поиск текстуры
  • XPD - перекрестное произведение

Это только неполный список инструкций по сборке; ссылку можно найти здесь: Краткое руководство по языку сборки шейдеров (ARB / NV) для OpenGL.

Сборка ARB не содержит инструкций по управлению потоком или ветвлению. SGE и SLT могут использоваться для условной установки или очистки векторов или регистров.

Интерфейсы ARB не предоставляют этап компиляции для языка ассемблера.

GL_NV_fragment_program_option расширяет язык ARB_fragment_program дополнительными инструкциями. GL_NV_fragment_program2, GL_NV_vertex_program2_option и GL_NV_vertex_program3 расширяют его дальше.

Образец кода

Пример тривиального вершинного шейдера ARB

!! ARBvp1.0TEMP vertexClip; DP4 vertexClip.x, state.matrix.mvp.row [0], vertex.position; DP4 vertexClip.y, state.matrix.mvp.row [1], vertex.position; DP4 vertexClip. z, state.matrix.mvp.row [2], vertex.position; DP4 vertexClip.w, state.matrix.mvp.row [3], vertex.position; MOV result.position, vertexClip; MOV result.color, вершина .color; MOV result.texcoord [0], vertex.texcoord; END

Пример тривиального фрагментного шейдера ARB

!! ARBfp1.0TEMP color; MUL color, fragment.texcoord [0] .y, 2.0; ADD color, 1.0, -color; ABS color, color; ADD result.color, 1.0, -color; MOV result.color.a , 1.0; КОНЕЦ

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

использованная литература

  1. ^ Саймон Грин. «История программирования в OpenGL» (PDF).
  2. ^ ARB. "ARB_vertex_program".
  3. ^ ARB. "ARB_fragment_program".
  4. ^ Игры Wildfire. «Список видеокарт и средств визуализации OpenGL, поддерживающих язык ассемблера ARB».
  5. ^ Игры Wildfire. «Список видеокарт и средств визуализации OpenGL, поддерживающих расширения nVidia для языка ассемблера ARB».