Jump to content

язык ассемблера АРБ

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

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

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

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

ARB и Nvidia разработали ряд расширений OpenGL для стандартизации программирования графических процессоров: [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_фрагмент_программа - GeForce FX

Кульминацией этого ARB стал выпуск в 2002 году

  • ARB_vertex_program [2]
  • ARB_фрагмент_программа [3]

Эти два расширения предоставили отраслевой стандарт для языка ассемблера, который управлял конвейером графического процессора для определения свойств трехмерных вершин и интерполированных пикселей соответственно.

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

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

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

Подробности

[ редактировать ]

ARB_vertex_program

[ редактировать ]

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

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

ARB_фрагмент_программа

[ редактировать ]

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

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

Параметры OpenGL

[ редактировать ]
  • Параметры атрибутов — это атрибуты каждой вершины, такие как нормали вершин.
  • Локальные параметры применяются ко всему набору данных программы для данного прохода шейдера.
  • Параметры Env применяются во всех программах.

Переменные ARB

[ редактировать ]

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

Регистры — это скалярные переменные, к которым можно обращаться только к одному элементу.

  • Переменные ADDRESS являются регистрами.
  • ATTRIB — это атрибуты вершин.
  • PARAM — это единые свойства — константы, Env или Local.
  • Временные переменные TEMP .
  • ALIAS предоставляет альтернативные имена для переменных.
  • OUTPUT обозначает переменные, которые передаются обратно в конвейер.

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

[ редактировать ]

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

  • позиция
  • масса
  • нормальный
  • цвет
  • туманкоорд
  • Текскорд
  • матричный индекс
  • атрибут

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

[ редактировать ]

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

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

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

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

Инструкция по сборке АРБ

[ редактировать ]

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

  • АБС – абсолютное значение
  • ДОБАВИТЬ - добавить
  • ARL — загрузка адресного регистра
  • DP3 — 3-компонентное скалярное произведение
  • DP4 — 4-компонентное скалярное произведение
  • DPH — однородное скалярное произведение
  • DST - вектор расстояния
  • EX2 - экспоненциальная система с основанием 2
  • EXP - экспоненциальная система по основанию 2 (приблизительная)
  • ФЛР - этаж
  • FRC - дробь
  • LG2 - логарифм по основанию 2
  • LIT — вычисление коэффициентов освещенности
  • LOG - логарифм по основанию 2 (приблизительный)
  • MAD – умножить и сложить
  • МАКС - максимум
  • МИН - минимум
  • МОВ – двигаться
  • МУЛ – умножить
  • POW - возводить в степень
  • РКП - взаимный
  • RSQ обратный квадратный корень
  • SGE – установлено больше или равно
  • SLT – установлен менее чем на
  • СУБ – вычесть
  • 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.0
TEMP 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, vertex.color;
MOV result.texcoord[0], vertex.texcoord;
END

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

[ редактировать ]
!!ARBfp1.0
TEMP 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;
END

См. также

[ редактировать ]
  1. ^ Саймон Грин. «История программирования в OpenGL» (PDF) .
  2. ^ АРБ. "ARB_vertex_program" .
  3. ^ АРБ. "ARB_фрагмент_программа" .
  4. ^ Лесные пожарные игры. «Список видеокарт и средств визуализации OpenGL, поддерживающих язык ассемблера ARB» .
  5. ^ Лесные пожарные игры. «Список видеокарт и средств визуализации OpenGL, поддерживающих расширения nVidia для языка ассемблера ARB» .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 945c727bbc38b88b5085c5f588a5afa8__1709322300
URL1:https://arc.ask3.ru/arc/aa/94/a8/945c727bbc38b88b5085c5f588a5afa8.html
Заголовок, (Title) документа по адресу, URL1:
ARB assembly language - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)