Меса (компьютерная графика)

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

Меса
Оригинальный автор (ы) Брайан Пол
Разработчики) В настоящее время: Intel, AMD, VMware Ранее: Tungsten Graphics
Первый выпуск Февраль 1995 г.
Стабильный выпуск 21.2.3  Отредактируйте это в Викиданных / 29 сентября 2021 г. ; 18 дней назад ( 29 сентября 2021 г.)
Репозиторий
Написано в C, C ++, ассемблер
Операционная система Кроссплатформенность ( BSD, Haiku, Linux и т. Д.)
Тип Графическая библиотека
Лицензия Лицензия MIT
Веб-сайт mesa3d.org   Отредактируйте это в Викиданных

Mesa, также называемая Mesa3D и The Mesa 3D Graphics Library, представляет собой программную реализацию OpenGL, Vulkan и других спецификаций графического API с открытым исходным кодом. Mesa переводит эти спецификации в драйверы графического оборудования конкретных производителей.

Его наиболее важными пользователями являются два графических драйвера, которые в основном разрабатываются и финансируются Intel и AMD для соответствующего оборудования (AMD продвигает свои драйверы Mesa Radeon и RadeonSI вместо устаревших AMD Catalyst, а Intel поддерживает только драйвер Mesa). Проприетарные графические драйверы (например, драйвер Nvidia GeForce и Catalyst) заменяют все Mesa, обеспечивая собственную реализацию графического API. Попытка с открытым исходным кодом написать драйвер Mesa Nvidia под названием Nouveau в основном разрабатывается сообществом.

Помимо 3D - приложений, таких как игры, современные серверы отображения ( Гламурная X.org в или Wayland «s Weston ) использование OpenGL / EGL ; поэтому вся графика обычно проходит через Mesa.

Хостинг Mesa находится на сайте freedesktop.org, и он был инициирован в августе 1993 года Брайаном Полом, который до сих пор активно участвует в проекте. Впоследствии Mesa получила широкое распространение и теперь содержит многочисленные вклады от различных лиц и корпораций по всему миру, в том числе от производителей графического оборудования из Khronos Group, которые администрируют спецификацию OpenGL. Что касается Linux, разработка также частично велась за счет краудфандинга.

СОДЕРЖАНИЕ

  • 1 Обзор
    • 1.1 Реализации API рендеринга
      • 1.1.1 Таблица API рендеринга
      • 1.1.2 Вулкан
      • 1.1.3 Явное ограждение
      • 1.1.4 Общее управление буфером
    • 1.2 Реализации API-интерфейсов ускорения видео
    • 1.3 Драйверы устройств
    • 1.4 Инфраструктура прямого рендеринга (DRI)
    • 1.5 Программный рендерер
    • 1.6 Мега драйверы
    • 1.7 шейдер-БД
  • 2 Архитектура программного обеспечения
    • 2.1 Промежуточные представления Месы
      • 2.1.1 SPIR-V
      • 2.1.2 GLSL IR
      • 2.1.3 Меса ИК
      • 2.1.4 NIR
      • 2.1.5 TGSI
      • 2.1.6 LLVM IR
      • 2.1.7 RADV ACO IR
    • 2.2 компилятор GLSL от Mesa
  • 3 Галлий3D
    • 3.1 Архитектура программного обеспечения
      • 3.1.1 Отличия от классических графических драйверов
      • 3.1.2 Инфраструктура графических шейдеров Tungsten
      • 3.1.3 Использование LLVM
    • 3.2 Принятие
    • 3.3 История
      • 3.3.1 Основные этапы развития
  • 4 Производительность
  • 5 История
  • 6 См. Также
  • 7 ссылки
  • 8 Внешние ссылки
    • 8.1 Внешние ссылки для Gallium3D

Обзор

Видеоигры передают вычисления рендеринга графическому процессору через OpenGL в реальном времени. Шейдеры написаны на языке шейдеров OpenGL или SPIR-V и скомпилированы на CPU. Скомпилированные программы выполняются на графическом процессоре. Иллюстрация графического стека Linux : DRM и libDRM, Mesa 3D. Сервер отображения относится к оконной системе и не нужен, например, для игр.

Реализации API рендеринга

Бесплатные реализации Wayland полагаются на реализацию EGL в Mesa. Специальная библиотека под названием libwayland-EGL, написанная для обеспечения доступа к фреймбуферу, должна была быть устаревшей к выпуску EGL 1.5. На GDC 2014 AMD изучала изменение стратегии в отношении использования DRM вместо встроенного в ядро ​​blob.

Mesa известна как реализация графических API-интерфейсов. Исторически основным API, реализованным Mesa, является OpenGL, а также другие спецификации, связанные с Khronos Group (например, OpenVG, OpenGL ES или недавно выпущенный EGL ). Но Mesa может реализовывать другие API-интерфейсы, и это действительно было сделано с Glide (устаревшим) и Direct3D 9 с июля 2013 года. Mesa также не является специфическим для Unix-подобных операционных систем: например, в Windows Mesa предоставляет OpenGL API поверх DirectX.

Mesa реализует уровень трансляции между графическим API, таким как OpenGL, и драйверами графического оборудования в ядре операционной системы. Поддерживаемая версия различных графических API зависит от драйвера, потому что каждый драйвер оборудования имеет свою собственную реализацию (и, следовательно, статус). Это особенно верно для «классических» драйверов, в то время как драйверы Gallium3D используют общий код, который имеет тенденцию к гомогенизации поддерживаемых расширений и версий.

Mesa поддерживает матрицу поддержки со статусом текущего соответствия OpenGL, визуализированным в mesamatrix.net. Mesa 10 соответствует OpenGL 3.3 для оборудования Intel, AMD / ATI и Nvidia GPU. Было объявлено о выпуске Mesa 11 с некоторыми драйверами, совместимыми с OpenGL 4.1.

Mesa 12 содержит поддержку OpenGL 4.2 и 4.3 и Intel Vulkan 1.0.

Mesa 13 принесла поддержку Intel для OpenGL 4.4 и 4.5 (все функции, поддерживаемые для Intel Gen 8+, Radeon GCN, Nvidia (Fermi, Kepler), но не Khronos-Test для 4.5-Label) и экспериментальную поддержку AMD Vulkan 1.0 через драйвер сообщества РАДВ. OpenGL ES 3.2 возможен с Intel Skylake (Gen9).

1-я стабильная версия 2017 года - 17.0 (счет нового года). Готовые функции сертифицированы OpenGL 4.5, OpenGL 4.5 для Intel Haswell, OpenGL 4.3 для NVidia Maxwell и Pascal (GM107 +). Огромный прирост производительности был измерен с Maxwell 1 (GeForce GTX 750 Ti и другие с GM1xx). Карты Maxwell-2 (GeForce GTX 980 и другие с GM2xx) разгоняются без информации NVidia.

Набор тестов Khronos CTS для OpenGL 4.4, 4.5 и OpenGL ES 3.0+ сейчас (2017-01-24) с открытым исходным кодом, и все тесты для Mesa 13 и 17 теперь доступны бесплатно.

Вторая стабильная версия 2017 года, 17.1.0, вышла 10 мая 2017 года с некоторыми интересными улучшениями. OpenGL 4.2+ для Intel Ivy Bridge и OpenGL 3.3+ для Intel Open SWR Rasterizer - два основных момента.

Обратите внимание, что из-за модульной природы OpenGL Mesa может фактически поддерживать расширения из более новых версий OpenGL, не претендуя на полную поддержку таких версий. Например, в июле 2016 года Mesa поддерживала OpenGL ES 3.1, а также все расширения OpenGL ES 3.2, за исключением пяти, а также ряд расширений, не входящих в какую-либо версию OpenGL или OpenGL ES.

Открытый вопрос для Mesa и Linux - High Dynamic Range (HDR). Многие проблемы и открытые точки находятся в стадии разработки для чистой и базовой реализации.

Третья версия 17.2 доступна с сентября 2017 года с некоторыми новыми функциями OpenGL 4.6 и улучшениями скорости в 3D для Intel и AMD. Только 1,4% тестов не проходят для OpenGL 4.5 в Nouveau для Kepler.

4-я версия 17.3 готова с декабря 2017 года. Доступно множество улучшений для многих драйверов. OpenGL 4.6 почти полностью доступен (Spir-V не готов). AMD Vulkan Driver RADV теперь полностью совместим с Khronos-Test.

Первая версия 2018 года - 18.0 и доступна с марта 2018 года по той же схеме в 2017 году. Полная поддержка OpenGL 4.6 не готова, но многие функции и улучшения были успешно протестированы в RC3. 10-битная поддержка Intel i965 в цвете также является изюминкой. Новым является поддержка Intel Cannon Lake и AMD Vega с актуальной версией Linux. Чипы AMD Evergreen (RV800 или R900) близки к поддержке OpenGL 4.5. Старые чипы AMD R600 или RV700 могут поддерживать только OpenGL 3.3 с некоторыми функциями OpenGL 4.x. Freedreno - это драйвер для оборудования Adreno и почти поддержка OpenGL 3.3.

Вторая версия 2018 года - 18.1 и доступна с мая. Целью является Vulkan 1.1.72 в драйвере Intel ANV и AMD RADV. OpenGL 4.6 с spir-V также является основной целью. Возможна постоянная работа, завершение функций и оптимизация драйверов для более старого оборудования, такого как AMD R600 / Evergreen, Nvidia Tesla и ранее, Fermi, Kepler или Intel Sandybridge, Ivybridge, Haswell или Broadwell. Архитектура ARM также значительно улучшила Adreno 3xx / 4xx / 5xx и Broadwell VC4 / VC5 для Raspi с основной целью OpenGL ES.

Третья версия 2018 года - 18.2 и доступна в стабильном календаре в сентябре. OpenGL 4.6 с spir-V и Vulkan 1.1.80 находятся в WIP. Программный драйвер для виртуальных машин VIRGL готов для OpenGL 4.3 и OpenGL ES 3.2. RadeonSI также готов к OpenGL ES 3.2. Поддержка сжатия текстур ASTC и поддержка режима совместимости для OpenGL 4.4 (3.1 из 18.1) - это другие особенности RadeonSI для карт AMD GCN. Доступен новый Vulkan 1.1 и другие функции для Intel и AMD. См. Дополнительные сведения о Вулкане в Месаматриксе.

Четвертая версия 2018 года - 18.3 и выпущена как стабильная версия 18.3.1 в декабре 2018 года. Многие функции в деталях и поддержка нового оборудования являются основными частями. Полная поддержка OpenGL 4.6 не готова.

1-я версия 2019 года - 19.0 и была выпущена в марте. Полная поддержка OpenGL 4.6 не готова, но многие улучшения на этом пути есть во всех драйверах.

Вторая версия 2019 года - 19.1. Переход TGSI на NIR является здесь одной из основных функций на пути к OpenGL 4.6 с Spir-V и другими OpenCL. RadeonSI хорошо работает в версии для разработчиков с NIR.

Третья версия 2019 года - 19.2. OpenGL 4.6 готов к бета-версии для нового драйвера Intel Iris.

4-я версия 2019 года - 19.3. OpenGL 4.6 готов для Intel i965 и опционально для нового драйвера Iris.

Первая версия 2020 года - 20.0. Vulkan 1.2 готов для AMD RADV и Intel ANV. Intel Iris используется по умолчанию для Intel Broadwell Gen 8+. Драйвер RadeonSI по умолчанию переключился на использование NIR вместо TGSI.

Вторая версия 2020 года - 20.1. Многие улучшения готовы во многих драйверах. Zink - это новый виртуальный драйвер для OpenGL поверх Vulkan.

Третья версия 2020 года - 20.2. OpenGL 3.0 для Zink - одна новая функция. LLVMpipe будет поддерживать OpenGL 4.3+ (4.5+ в 20.3). ARM Panfrost в основном улучшен многими модулями. Совместно используемая виртуальная память возможна для OpenCL в Nouveau с Паскалем и выше.

4-я версия 2020 года - 20.3. v3d и v3dv - это новые драйверы для OpenGL и Vulkan 1.0 с оборудованием Broadcom, таким как Raspberry Pi 4. OpenCL 1.2 полностью поддерживается в модуле Clover. Zink поддерживает OpenGL 3.3+. Виртуальный драйвер LLVMpipe теперь поддерживает OpenGL 4.5+ с версией 4.6. VALLIUM as Vulkan Tree компании LLVMpipe объединен.

В Mesa 21.0 d3d12 будет объединен с OpenGL 3.0 в 3.3. Microsoft и Collabora разрабатывают новую эмуляцию d3d12 в WSL2 для Windows 10 с Direct 3D 12. OpenCL 1.2 также нацелен на d3d12. Ускорение от 2 до 5 раз выполняется в Benchmark SPECviewperf с улучшенным кодом OpenGL. Многие функции Mesa 21.0 повышают производительность. Новая версия 21.0.0 общедоступна с 11 марта 2021 года.

Mesa 21.1 - второй выпуск 2021 года. Для Zink доступны OpenGL 4.6+ и OpenGL ES 3.1+. AMD Driver 600g может переключаться на NIR с расширенными возможностями для старых карт Radeeon HD 5000 и 6000. Qualcomm Turnip достигает Vulkan 1.1+ и программной эмуляции Lavapipe Vulkan 1.1+. Драйвер графического процессора Google VirtIO Venus с Vulkan 1.2+ объединен в экспериментальном состоянии с низкой производительностью в основном дереве mesa.

Mesa 21.2 - это третий выпуск в 2021 году. Будет официально представлен Google Virtual Vulkan IO Driver Venus с полной поддержкой Vulkan 1.2+ (подробнее mesamatrix). ARM Panfrost: доступна поддержка OpenGL ES 3.1+, а panVK - новый драйвер Vulkan. Первоначальная поддержка началась для ARM Apple M1 с новым драйвером Asahi. 21.2 доступен с 4 августа 2021 года.

Старый план состоит в том, чтобы разделить старые драйверы в классическое дерево с множеством преимуществ в программировании, поддержке и исправлении ошибок для современной части с галлием 3D. Одной из проблем здесь является Intel i965 с поддержкой популярного старого оборудования для Intel Haswell, а ранее также с поддержкой Windows 10. Новый драйвер Gallium3D Crocus для графики Intel Gen 4 для Haswell находится здесь в разработке, чтобы завершить здесь область gallium3D с возможным разделением в следующее время 2021 года. Crocus является необязательным и доступен в версии 21.2.

Таблица API рендеринга

Версия Mesa Дата первого выпуска Последнее обновление Вулкан OpenCL OpenGL OpenGL ES OpenVG EGL GLX Direct3D
1.2.193 2021-09-21 3.0 2020-11-30 4.6 2017-07-31 3.2.6 2019-07-10 1.1 2008-12-03 1.5 2014-03-19 1,4 2005-12-16 12 2015-07-29
Последняя предварительная версия будущего выпуска: 21,2 2021-08-04 21.2.2 1.2.175 (Intel Gen8 +, AMD GCN Gen2 +, Google Venus), 1.0+ (AMD GCN1, Broadcom v3dv), 1.1+ (Lavapipe, Qualcomm Turnip) 1.0, 1.1, 1.2 (полная поддержка), 3.0 (wip, некоторые функции в 21.1) 4.6 (19.3: Intel Gen 8+, 20.0: AMD GCN, 21.1: Zink, llvmpipe, 21.2: Intel Gen 7.5) 3.2 (20.3: 3.2: Intel i965, AMD radeonsi, llvmpipe, VirGL, freedreno; 3.1: AMD r600, Nvidia nvC0, softpipe, Broadcom v3d, Zink (21.1), ARM Panfrost (21.2) N / A 1.5 1.4 9.0c
Текущая стабильная версия: 21,1 2021-05-05 21.1.8 1.2.168 (Intel Gen8 +, AMD GCN Gen2 +), 1.0+ (AMD GCN1, Broadcom v3dv), 1.1+ (Lavapipe, Qualcomm Turnip)
Старая версия, больше не поддерживается: 21,0 2021-03-11 21.0.3 1.2.162 (Intel Gen8 +, AMD GCN Gen2 +), 1.0+ (AMD GCN1, Broadcom v3dv)
Старая версия, больше не поддерживается: 20,3 2020-12-03 20.3.5 1.2.158 (Intel Gen8 +, AMD GCN Gen2 +), 1.0+ (AMD GCN1, Broadcom v3dv)
Старая версия, больше не поддерживается: 20,2 2020-09-28 20.2.6 1.2.145 (Intel Gen8 +, AMD GCN Gen2 +), 1.0+ (AMD GCN1) 1.0, 1.1, 1.2 (WIP) несколько неудачных тестов на соответствие
Старая версия, больше не поддерживается: 20,1 2020-05-27 20.1.10 1.2.139 (Intel Gen8 +, AMD GCN Gen2 +), 1.0+ (AMD GCN1)
Старая версия, больше не поддерживается: 20,0 2020-02-19 20.0.8 1.2+ (Intel Gen8 +, AMD GCN Gen2 +)
Старая версия, больше не поддерживается: 19,3 2019-12-11 19.3.5 1.1+ (Intel Gen8 +, AMD GCN Gen2 +) (19.1: 1.1.104 19.0: 1.1.102, 18.3: 1.1.90, 18.2: 1.1.84)
Старая версия, больше не поддерживается: 19,2 2019-09-25 19.2.8 4.5
Старая версия, больше не поддерживается: 19,1 2019-06-11 19.1.8
Старая версия, больше не поддерживается: 19.0 2019-03-13 19.0.8
Старая версия, больше не поддерживается: 18,3 2018-12-07 18.3.6
Старая версия, больше не поддерживается: 18,2 2018-09-07 18.2.8
Старая версия, больше не поддерживается: 18,1 2018-05-18 18.1.9 1.1 (Intel Gen8 +, AMD GCN Gen2 +) (1.1.73)
Старая версия, больше не поддерживается: 18.0 2018-03-27 18.0.5 1.0+ (1.0.66)
Старая версия, больше не поддерживается: 17,3 2017-12-08 17.3.9 1.0 (ПК: только ANV Intel Gen7 + Ivy Bridge, RADV AMD GCN) (заголовок: 17.3: 1.0.63, 17.2: 1.0.54, 17.1: 1.0.42, 17.0: 1.0.38, 13.0: 1.0.6, 12.0: 1.0.3) в dev. от Gallium Compute (Clover): некоторые тесты CTS терпят неудачу в 1.0 и 1.1, 1.2 (WIP), поэтому 1.0, 1.1, 1.2 неполные
Старая версия, больше не поддерживается: 17,2 2017-09-04 17.2.8
Старая версия, больше не поддерживается: 17,1 2017-05-10 17.1.10
Старая версия, больше не поддерживается: 17.0 2017-02-13 17.0.7
Старая версия, больше не поддерживается: 13,0 2016-11-01 13.0.6 4,4 (4,5 без этикетки)
Старая версия, больше не поддерживается: 12.0 2016-07-08 12.0.6 4.3 3.1
Старая версия, больше не поддерживается: 11.2 2016-04-04 11.2.2 N / A 4.1 (Intel 3.3+)
Старая версия, больше не поддерживается: 11.1 2015-12-15 11.1.4 3.0
Старая версия, больше не поддерживается: 11.0 2015-09-12 11.0.9
Старая версия, больше не поддерживается: 10,6 2015-06-15 10.6.9 3.3 1.4
Старая версия, больше не поддерживается: 10,5 2015-03-06 10.5.9 1.1
Старая версия, больше не поддерживается: 10,4 2014-12-14 10.4.7
Старая версия, больше не поддерживается: 10,3 2014-09-19 10.3.7 N / A
Старая версия, больше не поддерживается: 10.2 2014-06-06 10.2.9
Старая версия, больше не поддерживается: 10.1 2014-03-04 10.1.6
Старая версия, больше не поддерживается: 10.0 2013-11-30 10.0.5
Старая версия, больше не поддерживается: 9.0 2012-10-08 9.0.3, 9.1.7, 9.2.5 N / A 3.1 2.0
Старая версия, больше не поддерживается: 8.0 2012-02-08 8.0.5 3.0
Старая версия, больше не поддерживается: 7.0 2007-06-22 7.0.4,..., 7.11.2 2.1 N / A N / A N / A
Старая версия, больше не поддерживается: 6.0 2004-01-06 6.0.1 1.5 1.3
Старая версия, больше не поддерживается: 5.0 2002-11-13 5.0.2 1.4
Старая версия, больше не поддерживается: 4.0 2001-10-22 4.0.4 1.3
Старая версия, больше не поддерживается: 3.0 1998-09 3.1, 3.2.1, 3.4.2.1 1.2
Старая версия, больше не поддерживается: 2.0 1996-10 2,6 1.1
Старая версия, больше не поддерживается: 1.0 1995-02 1.2.8 1.0
Легенда: Старая версия Старая версия, все еще поддерживается Последняя версия Последняя предварительная версия Будущий выпуск

Вулкан

Группа Khronos официально анонсировала Vulkan API в марте 2015 года и официально выпустила Vulkan 1.0 16 февраля 2016 года. Vulkan нарушает совместимость с OpenGL и полностью отказывается от своей концепции монолитного конечного автомата. Разработчики Gallium3D назвали Vulkan чем-то вроде Gallium3D 2.0 - Gallium3D отделяет код, реализующий конечный автомат OpenGL, от кода, специфичного для оборудования.

Когда Gallium3D принимает TGSI, Vulkan принимает SPIR-V ( стандартная переносимая версия промежуточного представления «V», как в «Vulkan»).

Intel выпустила свою реализацию драйвера Vulkan для своего оборудования в день официального выпуска спецификации, но она была запущена только в апреле и поэтому стала частью Mesa 12.0, выпущенной в июле 2016 года. Хотя драйвер i965 уже не был написан в соответствии с спецификации Gallium3D, для драйвера Vulkan еще меньше смысла устанавливать фланец поверх Gallium3D. Точно так же нет никаких технических причин использовать его с NIR, но, тем не менее, сотрудники Intel реализовали свой драйвер Vulkan таким образом.

Ожидается, что собственный проприетарный драйвер Vulkan от AMD, выпущенный в марте и объявленный в будущем как бесплатное программное обеспечение с открытым исходным кодом и интегрированный в Mesa, также откажется от Gallium3D.

RADV - это бесплатный проект для AMD, доступный с версии 13. Соответствие Khronos-Test появилось в версии 17.3. Актуально Полная поддержка Vulkan 1.0 и 1.1, начиная с Mesa 18.1.

Nvidia выпустила свой проприетарный драйвер GeForce с поддержкой Vulkan в день запуска, а Imagination Technologies (PowerVR), Qualcomm (Adreno) и ARM (Mali) сделали то же самое или, по крайней мере, анонсировали проприетарные драйверы Vulkan для Android и других операционных систем. Но когда и появятся ли дополнительные бесплатные реализации Vulkan с открытым исходным кодом для этих графических процессоров, еще неизвестно.

Программный драйвер Mesa VIRGL начинает разработку Vulkan в 2018 году с проектов GSOC для поддержки виртуальных машин.

Lavapipe - это драйвер Software Vulkan на базе ЦП и брат LLVMpipe. Mesa Version 21.1 поддерживает Vulkan 1.1+.

Google представляет драйвер Venus Vulkan для виртуальных машин в Mesa 21.1 с полной поддержкой Vulkan 1.2+.

Qualcomm Turnip и Broadcom v3dv - это новые драйверы для оборудования Qualcomm Adreno и Broadcom Raspberry 4. Репа - это Vulkan брат freedreno для OpenGL. V3dv поддерживает Vulkan 1.0+, начиная с Mesa 20.3. В версии 21.1 Репа поддерживает Vulkan 1.1+.

Явное ограждение

Своеобразный барьер памяти, отделяющий один буфер от остальной памяти, называется забором. Ограничения существуют, чтобы гарантировать, что буфер не будет перезаписан до того, как с ним будут завершены операции рендеринга и отображения. Неявное ограждение используется для синхронизации между графическими драйверами и аппаратным обеспечением графического процессора. Забор сигнализирует, когда буфер больше не используется одним компонентом, поэтому он может работать или повторно использоваться другим. В прошлом ядро ​​Linux имело неявный механизм ограждения, когда ограждение непосредственно прикреплялось к буферу (см. Дескрипторы GEM и FD), но пользовательское пространство не осознает этого. Явное ограждение создает ограждение для пользовательского пространства, где пользовательское пространство ограждается как подсистемой Direct Rendering Manager (DRM), так и графическим процессором. Явное ограждение требуется для Vulkan и дает преимущества при трассировке и отладке.

Ядро Linux 4.9 добавило структуру синхронизации Android в основную линию.

Общее управление буфером

Generic Buffer Management (GBM) - это API, который предоставляет механизм для выделения буферов для графического рендеринга, привязанного к Mesa. GBM предназначен для использования в качестве собственной платформы для EGL с DRM или openwfd. Созданный им дескриптор может использоваться для инициализации EGL и для создания буферов целевого объекта рендеринга.

Mesa GBM - это абстракция API-интерфейсов управления буфером для конкретных графических драйверов (например, различных библиотек libdrm_ *), реализованных внутри путем вызова драйверов Mesa GPU.

Например, композитор Wayland Weston выполняет рендеринг с использованием OpenGL ES 2, который он инициализирует, вызывая EGL. Поскольку сервер работает на «голом драйвере KMS », он использует платформу EGL DRM, которую действительно можно было бы назвать платформой GBM, поскольку она полагается на интерфейс Mesa GBM.

На XDC2014 сотрудник Nvidia Энди Ритгер предложил усовершенствовать EGL, чтобы заменить GBM. Сообщество не восприняло это положительно, и Nvidia в конце концов передумала и выбрала другой подход.

Реализации API ускорения видео

Есть три возможных способа выполнения вычислений, необходимых для кодирования и декодирования видеопотоков:

  1. использовать программную реализацию алгоритма сжатия или декомпрессии видео (обычно называемого CODEC) и запускать это программное обеспечение на C PU
  2. использовать программную реализацию алгоритма сжатия или декомпрессии видео (обычно называемого CODEC) и запускать это программное обеспечение на G PU ( движке 3D-рендеринга )
  3. использовать полную (или частичную) аппаратную реализацию алгоритма сжатия или распаковки видео; стало обычным делом интегрировать такие ASIC в микросхему GPU / CPU / APU / SoC, и поэтому они широко доступны; по маркетинговым причинам компании создали бренды для своих ASIC, такие как PureVideo (Nvidia), Unified Video Decoder (AMD), Video Coding Engine (AMD), Quick Sync Video (Intel), DaVinci (Texas Instruments), CedarX (Allwinner), Crystal HD (Broadcom); некоторые ASIC доступны для лицензирования в качестве ядра интеллектуальной собственности полупроводников ; обычно разные версии реализуют разные алгоритмы сжатия видео и / или распаковки видео; поддержка таких ASIC обычно принадлежит драйверу ядра, для инициализации оборудования и выполнения работ низкого уровня. Mesa, работающая в пользовательском пространстве, содержит реализации нескольких API для программного обеспечения, например медиаплеер VLC, GStreamer, HandBrake и т. Д., Для удобного доступа к таким ASIC:

Например, Nouveau, который был разработан как часть Mesa, но также включает компонент ядра Linux, который разрабатывается как часть ядра Linux, поддерживает ASIC под торговой маркой PureVideo и обеспечивает доступ к ним через VDPAU и частично через XvMC..

Бесплатный драйвер Radeon поддерживает Unified Video Decoder и Video Coding Engine через VDPAU и OpenMAX.

Обратите внимание, что V4L2 - это интерфейс между ядром и пользовательским пространством для потокового видео, передаваемого веб-камерами или ТВ-тюнерами.

Драйверы устройств

Основная статья: Бесплатный драйвер графического устройства с открытым исходным кодом Драйверы графических устройств реализованы с использованием двух компонентов: UMD (драйвер пользовательского режима) и KMD (драйвер режима ядра). Начиная с ядра Linux 4.2 AMD Catalyst и Mesa будут использовать один и тот же драйвер ядра Linux: amdgpu. Amdgpu предоставляет интерфейсы, определенные DRM и KMS.

Доступные бесплатные драйверы устройств с открытым исходным кодом для графических наборов микросхем «контролируются» Mesa (поскольку существующие бесплатные и открытые реализации API-интерфейсов разрабатываются внутри Mesa). В настоящее время существует два фреймворка для написания графических драйверов: «классический» и Gallium3D. Обзор по некоторым (но не все) из драйверов, доступных в Меса дается в mesamatrix.net.

Существуют драйверы устройств для карт AMD / ATI от R100 до R800, Intel и Nvidia с 3D-ускорением. Ранее существовали драйверы для APU IBM / Toshiba / Sony Cell для наборов микросхем PlayStation 3, S3 Virge amp; Savage, наборов микросхем VIA, Matrox G200 и G400 и других.

Бесплатные драйверы с открытым исходным кодом конкурируют с проприетарными драйверами с закрытым исходным кодом. В зависимости от наличия документации по оборудованию и трудозатрат бесплатный драйвер с открытым исходным кодом более или менее отстает в поддержке 3D-ускорения нового оборудования. Кроме того, производительность 3D-рендеринга обычно была значительно ниже, за некоторыми заметными исключениями. Сегодня это все еще верно для Nouveau для большинства графических процессоров NVIDIA, в то время как на графических процессорах AMD Radeon открытый драйвер теперь в основном соответствует производительности проприетарного драйвера или превышает ее.

Инфраструктура прямого рендеринга (DRI)

Основная статья: Инфраструктура прямого рендеринга

В то время, когда 3D- видеокарты стали более популярными для ПК, люди, частично поддерживаемые некоторыми компаниями, начали работать над добавлением дополнительной поддержки аппаратного ускорения 3D-рендеринга в Mesa. Direct Rendering Infrastructure (DRI) был один из этих подходов к интерфейсу Mesa, OpenGL и другие 3D - рендеринга библиотеки API с драйверами устройств и оборудования. После достижения базового уровня удобства в Mesa была официально добавлена ​​поддержка DRI. Это значительно расширило доступный диапазон аппаратной поддержки, достижимой при использовании библиотеки Mesa.

С адаптацией к DRI библиотека Mesa, наконец, взяла на себя роль интерфейсного компонента полномасштабной структуры OpenGL с различными внутренними компонентами, которые могли предлагать различные степени аппаратной поддержки 3D, не теряя при этом возможности полного программного рендеринга. В общей системе использовалось множество различных программных компонентов.

Хотя дизайн требует, чтобы все эти компоненты тщательно взаимодействовали, интерфейсы между ними относительно фиксированы. Тем не менее, поскольку большинство компонентов, взаимодействующих со стеком Mesa, имеют открытый исходный код, экспериментальная работа часто выполняется путем изменения сразу нескольких компонентов, а также интерфейсов между ними. Если такие эксперименты окажутся успешными, их можно будет включить в следующий основной или второстепенный выпуск. Это относится, например, к обновлению спецификации DRI, разработанной в период 2007-2008 годов. Результат этого эксперимента, DRI2, работает без блокировок и с улучшенной поддержкой обратного буфера. Для этого была создана специальная ветка Git Mesa.

DRI3 поддерживается драйвером Intel с 2013 года и используется по умолчанию в некоторых дистрибутивах Linux с 2016 года, чтобы включить поддержку Vulkan и многое другое. С конца 2016 года он также используется по умолчанию на оборудовании AMD (X.Org Server 1.18.3 и новее).

Программный рендерер

Mesa также содержит реализацию программного рендеринга, называемого swrast, которая позволяет шейдерам запускаться на ЦП в качестве запасного варианта, когда отсутствуют графические аппаратные ускорители. Программный растеризатор Gallium известен как softpipe или когда он построен с поддержкой LLVM llvmpipe, который генерирует код ЦП во время выполнения. Начиная с Mesa 10.x, OpenGL 3.3+ поддерживается для Softpipe (10.3) и LLVMpipe (10.2). Фактически около 80% возможностей OpenGL 4.x реализованы в Mesa 17.3 (см. Mesamatrix).

В Mesa 12.0 доступен новый Intel Rasterizer OpenSWR с высокими преимуществами в кластерах для больших наборов данных. Он больше ориентирован на инженерную визуализацию, чем на игровые или художественные изображения, и может работать только на процессорах x86. С другой стороны, теперь поддерживается OpenGL 3.1+. В некоторых примерах были измерены значения ускорения от 29 до 51, относящиеся к LLVMPIPE. OpenGL 3.3+ поддерживается OpenSWR, начиная с Mesa 17.1.

VirGL - это растеризатор для виртуальных машин, реализованный в Mesa 11.1 с 2015 года с поддержкой OpenGL 3.3 и показанный в Mesamatrix с Mesa 18. Фактически новая Mesa 18.2 поддерживает больше, чем другие с OpenGL 4.3 и OpenGL ES 3.2. Около 80% функций OpenGL 4.4 и 4.5 теперь готовы. Vulkan Development начинает с проектов GSOC 2018.

D3d12 - это проект Microsoft для WSL2-эмуляции OpenGL 3.3+ и OpenCL 1.2+ с Direct3D 12. D3D12 объединен в 21.0.

Venus - это новый драйвер Vulkan VirtIO GPU для GPU в виртуальных машинах от Google. Венера объединена в 21.1 и представлена ​​публике в 21.2.

Мега драйверы

Идея объединения нескольких драйверов в один «мега» драйвер была предложена Эммой Анхольт. Он позволяет использовать одну копию общего кода Mesa для нескольких драйверов (вместо того, чтобы существовать в каждом драйвере отдельно) и предлагает лучшую производительность, чем отдельная общая библиотека, благодаря удалению интерфейса внутренней библиотеки. Государственные трекеры для VDPAU и XvMC стали отдельными библиотеками.

шейдер-БД

shader-db - это набор из около 20 000 шейдеров, собранных из различных компьютерных игр и тестов, а также несколько скриптов для их компиляции и сбора некоторой статистики. Shader-db предназначен для проверки оптимизации.

Было замечено, что неожиданное количество шейдеров не написано вручную, а сгенерировано. Это означает, что эти шейдеры изначально были написаны на HLSL, а затем переведены в GLSL какой-либо программой-переводчиком, например, HLSL2GLSL. Проблема в том, что сгенерированный код зачастую далек от оптимального. Мэтт Тернер сказал, что было намного проще исправить это в программе-переводчике, чем заставлять компилятор Mesa нести бремя работы с такими раздутыми шейдерами.

shader-db нельзя рассматривать как бесплатное программное обеспечение с открытым исходным кодом. Чтобы использовать его легально, необходимо иметь лицензию на все компьютерные игры, частью которых являются шейдеры.

Архитектура программного обеспечения

Графический драйвер состоит из реализации конечного автомата OpenGL и стека компиляции для компиляции шейдеров в машинный язык графического процессора. Эта компиляция, как и многое другое, выполняется на CPU, затем скомпилированные шейдеры отправляются на GPU и выполняются им. (SDL = простой уровень DirectMedia ). Промежуточные представления (ИПС) в Mesa: GLSL ИК, ИК - Меса, TGSI и LLVM ИК. Отсутствуют HIR, LIR и NIR. Mesa IR подлежит полному удалению.

Так называемые «драйверы графических устройств пользовательского режима» (UMD) в Mesa имеют очень мало общего с тем, что обычно называется драйвером устройства. Есть несколько отличий:

  • они предназначены для работы поверх дополнительно существующих драйверов графических устройств режима ядра, которые, например, доступны как часть ядра Linux, находящегося в исходном коде в разделе /drivers/gpu/drm/Каждый UMD взаимодействует со своим аналогом режима ядра с помощью специальной библиотеки, имя libdrm_specific и общий, названный libdrm. Этот раздел должен смотреть исключительно на часть пользовательского режима над libdrm.
  • существует некоторая реализация конечного автомата, как определено, например, OpenGL; эта реализация конечного автомата OpenGL может совместно использоваться несколькими UMD или нет
  • они представляют собой большую часть своего рода компилятора, который принимает, например, GLSL и в конечном итоге выводит машинный код. Парсеры могут быть общими для нескольких UMD или быть конкретными.

Промежуточные представления Месы

Одна из целей Mesa - оптимизация кода, который должен выполняться соответствующим графическим процессором. Другой - совместное использование кода. Вместо того, чтобы документировать части программного обеспечения, которые делают то или это, эта статья в Википедии должна вместо этого рассматривать промежуточные представления, используемые в процессе компиляции и оптимизации. См. Разделы Абстрактное синтаксическое дерево (AST) и Статическая форма однократного назначения (форма SSA).

СПИР-В

SPIR-V - это определенная версия стандартного переносимого промежуточного представления. Идея состоит в том, что графические приложения выводят SPIR-V вместо GLSL. В отличие от последнего, SPIR-V является двоичным, чтобы избежать различий в реализации между интерфейсами компилятора GLSL для разных реализаций драйверов, поскольку это было основным источником несовместимости приложений и ошибок. Также двоичный файл SPIR-V обычно также проходил некоторые общие оптимизации. Также в некоторой степени двоичное представление SPIR-V предлагает некоторую степень запутывания, которая может понравиться некоторым поставщикам программного обеспечения как форма защиты интеллектуальной собственности; однако SPIR-V содержит достаточно информации для размышлений, и существуют инструменты, которые переводят SPIR-V обратно в высококачественный, читаемый человеком код высокого уровня. UMD необходимо применить только те оптимизации, которые относятся к поддерживаемому оборудованию.

GLSL IR

Меса ИК

NIR

NIR (новое внутреннее представление) было введено для преодоления ограничений TGSI. NIR был расширен в последних и текущих выпусках в качестве основы для поддержки Spir-V и с 2016 года является основным направлением развития. LLVMpipe, i965, RadeonSI, Nouveau, freedreno, vc4 заменены на NIR с TGSI. RADV, Zink и другие новые драйверы начинаются с NIR. Все драйверы с полной поддержкой OpenGL 4.6 связаны с NIR поддержкой SPIR-V. Также AMD r600 имеет вилку с NIR для лучшей поддержки серий HD5000 и HD6000. Эта опция для r600 используется по умолчанию, начиная с Mesa 21.0.

TGSI

Основная статья: Инфраструктура графических шейдеров Tungsten

Инфраструктура графических шейдеров Tungsten (TGSI) была представлена ​​в 2008 году компанией Tungsten Graphics. Все UMD в стиле Gallium3D принимают TGSI. NIR теперь является основной областью разработки, поэтому TGSI предназначен только для более старых драйверов, таких как инфраструктура по умолчанию r300g, и через несколько лет будет устаревать.

LLVM IR

Основная статья: Промежуточное представление LLVM

UMD radeonsiи llvmpipeне выводят машинный код, а вместо этого выводят LLVM IR. С этого момента LLVM выполняет оптимизацию и компиляцию в машинный код. Это означает, что также должна быть установлена ​​определенная минимальная версия LLVM.

РАДВ АКО ИК

RADV ACO использует собственный IR, близкий к NIR, для оптимизации и генерации конечного двоичного кода для шейдеров Vulkan SPIR-V поверх графических процессоров Radeon (GCN 1+, также известный как GFX6 +). Начиная с версии 20.1.0 ACO используется только в RADV (драйвер Vulkan) и еще не используется в RadeonSI.

Компилятор GLSL от Mesa

Компилятор GLSL от Mesa генерирует свой собственный IR. Поскольку у каждого драйвера очень разные требования от LIR, он различает HIR (высокоуровневый IR) и LIR (низкоуровневый IR).

Галлий3D

Галлий3D
Оригинальный автор (ы) Tungsten Graphics (теперь VMware )
Предварительный выпуск 0.4 / 24 апреля 2010 г. ; 11 лет назад ( 24.04.2010)
Репозиторий
Написано в C, C ++, ассемблер
Операционная система Кроссплатформенность
Тип Графическая библиотека
Лицензия Лицензия MIT
Веб-сайт www.freedesktop.org / wiki / Software / gallium /

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

Матрица функций предоставляется на сайте mesamatrix.net, а усилия по написанию бесплатных драйверов устройств с открытым исходным кодом для графических чипов отдельно документируются в Wikipedia: Бесплатные драйверы графических устройств с открытым исходным кодом.

Разработка Gallium3D началась в 2008 году в компании Tungsten Graphics, и реализация доступна в виде бесплатного программного обеспечения с открытым исходным кодом как часть Mesa 3D, размещенного на сайте freedesktop.org. Основная цель - упростить разработку драйверов, объединить в одной точке дублированный код нескольких разных драйверов и поддерживать современные аппаратные архитектуры. Это достигается за счет лучшего разделения труда, например, оставляя управление памятью драйверу DRI ядра.

Gallium3D является частью Mesa с 2009 года и в настоящее время используется бесплатным графическим драйвером с открытым исходным кодом для Nvidia ( новый проект), для AMD R300 - R900, драйвера Intel Iris для iGPU поколения 8+ и для других бесплатных и драйверы устройств GPU с открытым исходным кодом.

Архитектура программного обеспечения

Gallium3D упрощает программирование драйверов устройств, разделяя драйвер графического устройства на три части. Это достигается путем введения двух интерфейсов : Gallium3D государственного Tracker интерфейс и Gallium3D WINSYS интерфейса. Эти три компонента называются:

Отслеживание состояния Gallium3D

  • Каждый графический API, с помощью которого обращается к драйверу устройства, имеет свой собственный трекер состояния, например, есть трекер состояния Gallium3D для OpenGL и другой для Direct3D или GLX. Каждый State Tracker содержит реализацию интерфейса State Tracker Gallium3D и уникален, это означает, что он используется всеми существующими драйверами устройств Gallium3D.

Драйвер устройства Gallium3D

  • Это фактический код, который специфичен для базового ускорителя 3D-графики, но только в той мере, в какой это позволяет интерфейс Gallium3D WinSys. Для каждого доступного графического чипа существует уникальный аппаратный драйвер устройства Gallium3D, и каждый из них реализует интерфейс отслеживания состояния Gallium3D, а также интерфейс Gallium3D WinSys. Драйвер устройства Gallium3D понимает только TGSI (Tungsten Graphics Shader Infrastructure), промежуточный язык для описания шейдеров. Этот код транслировал шейдеры, переведенные из GLSL в TGSI, в набор инструкций, реализуемых графическим процессором.

Gallium3D WinSys

  • Это специфично для базового ядра в операционной системе и каждый из них реализует Gallium3D WINSYS интерфейс к интерфейсу со всеми имеющимися драйверами Gallium3D аппаратных устройств.
VC4 и freedreno могут использовать NIR напрямую (и возвращаться к tgsi_to_nir для шейдеров, которые не используют glsl_to_nir). Иллюстрация графического стека Linux Mesa / DRI и Gallium3D имеют разные модели драйверов. Оба имеют много бесплатного и открытого кода. Возможный пример матрицы при реализации модели драйвера Gallium3D. Благодаря введению интерфейса Gallium3D Tracker и интерфейса Gallium3D WinSys требуется только 18 модулей вместо 36. Каждый модуль WinSys может работать с каждым модулем драйвера устройства Gallium3D и с каждым модулем State Tracker.

Отличия от классических графических драйверов

Gallium3D предоставляет унифицированный API, предоставляющий стандартные аппаратные функции, такие как шейдерные блоки, имеющиеся на современном оборудовании. Таким образом, для 3D API, таких как OpenGL 1.x / 2.x, OpenGL 3.x, OpenVG, инфраструктура GPGPU или даже Direct3D (как на уровне совместимости Wine ), потребуется только один сервер, называемый трекером состояния, ориентированный на Gallium3D API. Напротив, драйверы устройств DRI классического стиля требуют разных серверных компонентов для каждой аппаратной платформы, а несколько других API-интерфейсов нуждаются в переводе в OpenGL за счет дублирования кода. Все драйверы устройств от поставщиков, из-за их патентованной природы и с закрытым исходным кодом, написаны таким образом, что означает, например, что AMD Catalyst реализует как OpenGL, так и Direct3D, а драйверы поставщиков для GeForce имеют свои реализации.

В Gallium3D драйверы ядра Direct Rendering Manager (DRM) будут управлять памятью, а драйверы Direct Rendering Interface (DRI2) будут больше ориентированы на обработку GPU. В период перехода от настройки режима пространства пользователя к настройке режима пространства ядра некоторые драйверы Mesa 3D, такие как драйвер Radeon или драйверы Intel, в конечном итоге стали поддерживать как DRI1, так и DRI2 и использовали DRI2, если он доступен в системе. Gallium3D дополнительно требует уровня поддержки шейдеров, который недоступен на более старых картах, таких как, например, ATi r100-r200, поэтому пользователям этих карт необходимо продолжать использовать Mesa 3D с DRI2 для использования в 3D.

Инфраструктура графических шейдеров Tungsten

Инфраструктура графических шейдеров Tungsten ( TGSI ) - это промежуточное представление, такое как промежуточное представление LLVM или новое стандартное переносимое промежуточное представление (SPIR), которое будет использоваться Vulkan API и OpenCL 2.1. Шейдеры, написанные на языке шейдеров OpenGL, должны быть переведены / скомпилированы в TGSI, затем произведена оптимизация, а затем шейдеры TGSI компилируются в шейдеры для набора инструкций используемого графического процессора.

NIR - это новое представление слоев в Mesa с полной поддержкой SPIR-V и с 2019 года основной областью разработки всех новых драйверов с поддержкой OpenGL 4.6.

Использование LLVM

GlassyMesa - это стек компилятора на основе LLVM для шейдеров, написанных на GLSL. Информацию о SSA см. В статье Статическая форма единого назначения.

Кроме того, с использованием модульной структуры Gallium3D предпринимаются попытки использовать пакет компилятора LLVM и создать модуль для оптимизации кода шейдера « на лету».

Библиотека представляет каждую программу шейдера с использованием расширяемого двоичного промежуточного представления, называемого Tungsten Graphics Shader Infrastructure (TGSI), которое LLVM затем преобразует в шейдеры GLSL, оптимизированные для целевого оборудования.

Принятие

Несколько бесплатных драйверов графических устройств с открытым исходным кодом, которые были или пишутся на основе информации, полученной в результате обратного проектирования чистой комнаты, приняли модель драйвера, предоставленную Gallium3D, например, nouveau и другие ( см. Бесплатное графическое устройство с открытым исходным кодом драйвер для полного списка). Основная причина может заключаться в том, что модель драйвера Gallium3D уменьшает объем кода, который необходимо написать. Конечно, имея лицензию на свободное программное обеспечение, этот код может в любое время быть переписан кем угодно для реализации модели драйвера DRI или какой-либо другой.

История

Первоначальными авторами Gallium3D были Кейт Уитвелл и Брайан Пол из Tungsten Graphics (приобретена VMware в 2008 году).

Вехи

По состоянию на осень 2011 года насчитывалось не менее 10 известных, зрелых и работающих драйверов Gallium3D. Драйверы с открытым исходным кодом для видеокарт Nvidia от имени команды Nouveau разрабатывают свои драйверы с использованием фреймворка Gallium3D.

2008-07-13: Разработка Nouveau ведется исключительно для фреймворка Gallium. Старый драйвер DRI был удален из основной ветки репозитория Mesa на Freedesktop.org.

2009-02-11: Ветвь галлия-0.2 была объединена с основной ветвью Master компании Mesa. Разработка ведется в основной ветке Mesa.

2009-02-25: Gallium3D может работать как под Linux, так и с ядрами FreeBSD.

2009-05-01: Зак Русин из Tungsten Graphics добавил трекер состояния OpenVG в Mesa 3D, который позволяет аппаратно ускорять масштабируемую векторную графику с помощью любого драйвера на основе Gallium3D.

2009-07-17: Выпущена Mesa3D 7.5, первая версия, включающая Gallium3D.

2010-09-10: В драйвер r600g добавлена ​​начальная поддержка графических процессоров Evergreen.

2010-09-21: Существуют два драйвера Gallium3D для оборудования ATI, известные как r300g и r600g для графических процессоров R300-R500 и R600-Evergreen соответственно.

2010-09-21: В код были внесены основные изменения для поддержки Direct3D 10 и 11. Со временем это может дать возможность использовать последние реализации Direct3D в системах Linux.

2011-11-30: Драйверы Intel 965g и Cell Gallium были удалены из основной ветви Mesa как не обслуживаемые и сломанные.

30.11.2013: Mesa 10 с OpenGL 3.2, 3.3 и OpenCL 1.0+

2014-11-18: В код для поддержки Direct3D 9 внесены серьезные изменения.

2015-09-15: Mesa 11 с OpenGL 4.0, 4.1 и OpenCL 1.2 (неполный)

2015-12-15: Драйвер Mesa 11.1 VIRGL для виртуальных машин с OpenGL 3.3

2016-07-08: Mesa 12 с OpenGL 4.2, 4.3 и Vulkan 1.0 (Intel ANV и AMD RADV)

2016-11-01: Mesa 13 с OpenGL 4.4 и OpenGL ES 3.2

2017-02-13: Mesa 17.0 с OpenGL 4.5 и драйвер freedreno с OpenGL 3.0 и 3.1

2017-05-10: Mesa 17.1 OpenGL 4.2+ для Intel Ivy Bridge (больше, чем драйвер Intel для Windows, OpenGL 3.3+ для Intel Open SWR Rasterizer (важно для кластерного компьютера для масштабных симуляций)

2017-12-08: Драйвер Mesa 17.3 AMD Vulkan RADV полностью соответствует требованиям Khronos Test of Vulkan 1.0

2018-05-18: Mesa 18.1 с Vulkan 1.1 (Intel ANV и AMD RADV)

2018-09-07: Mesa 18.2 с OpenGL 4.3 для программного драйвера VIRGL (важно для виртуальных машин в облачном кластерном компьютере), OpenGL ES 3.1 для Freedreno с Adreno A5xx

2019-06-11: Выпущен Mesa 19.1 с графическим драйвером Intel iris следующего поколения для iGPU поколения 8+

2019-12-11: Mesa 19.3 выпустила OpenGL 4.6 с Intel i965 поколения 7+ и опциональным Iris Gen 8+

2020-03-18: Mesa 20.0 выпустила OpenGL 4.6 с AMD GCN и Vulkan 1.2 для Intel

2020-05-27: Mesa 20.1 выпустила поддержку векторизации NIR и поддержку общей виртуальной памяти для OpenCL в Clover

2020-11-30: Mesa 20.3 полностью поддерживает OpenCL 1.2 в Clover

2021-03-11: Первоначальная поддержка Mesa 21.0 D3D12: Direct 3D 12 для WSL2 в Windows 10 с OpenGL 3.3+, ARM Freedreno: OpenGL 3.3+

2021-05-05: Начальная поддержка Mesa 21.1 драйвера графического процессора Google VirtIO «Venus» с Vulkan 1.2+; Zink: OpenGL 4.6+, OpenGL ES 3.1+; Qualcomm Репа, Lavapipe: Vulkan 1.1+

2021-08-04: Первоначальная поддержка Mesa 21.2 нового драйвера Intel Crocus OpenGL 4.6 на основе gallium3D до Intel Sandy Bridge и Haswell для старого i965, Vulkan Driver panVK для ARM Panfrost

Представление

История

Инициатор проекта Брайан Пол увлекался графикой. Он подумал, что было бы забавно реализовать простую библиотеку трехмерной графики с использованием OpenGL API, которую он затем мог бы использовать вместо VOGL (очень обычная библиотека GL Like). Начиная с 1993 года, он потратил восемнадцать месяцев на разработку неполный рабочий день, прежде чем он выпустил программное обеспечение в Интернете в феврале 1995 года. Программное обеспечение было хорошо принято, и люди начали вносить свой вклад в его разработку. Mesa начала с рендеринга всей трехмерной компьютерной графики на центральном процессоре. Несмотря на это, внутренняя архитектура Mesa была спроектирована так, чтобы быть открытой для подключения к ускоренному графическому процессору 3D-рендерингу. На этом первом этапе рендеринг выполнялся косвенно на сервере отображения, в результате чего оставались некоторые накладные расходы и заметное отставание скорости от теоретического максимума. Diamond Monster 3D, используя Voodoo Graphics набор микросхем, был одним из первых устройств, поддерживаемых 3D - Меса.

Первая аппаратная поддержка Истинных график была добавлена в Мес в 1997 году, на основе API Glide для нового тогда 3dfx Voodoo I / II графических карт и их наследники. Основной проблемой использования Glide в качестве ускоряющего слоя была привычка Glide работать в полноэкранном режиме, что подходило только для компьютерных игр. Кроме того, Glide заблокировал экранную память, и, таким образом, сервер отображения был заблокирован от выполнения любых других задач графического интерфейса.

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

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

внешние ссылки

Внешние ссылки для Gallium3D

Различные уровни в Linux, также демонстрирующие разделение между пользовательским пространством и пространством ядра.
Пользовательский режим Пользовательские приложения bash, LibreOffice, GIMP, Blender, 0 AD, Mozilla Firefox,...
Системные компоненты Демоны : Systemd, runit, udevd, polkitd, SSHD, Smbd. .. Оконный менеджер : X11, Wayland, SurfaceFlinger (Android) Графика: Mesa, AMD Catalyst,... Другие библиотеки: GTK, Qt, EFL, SDL, SFML, FLTK, GNUstep,...
Стандартная библиотека C fopen , execv , malloc , memcpy , localtime , pthread_create ... (до 2000 подпрограмм ) Glibc цели, чтобы быть быстрой, MUSL и uClibc целевых встроенные системы, бионические, написанные для Android и т.д. Все стремятся быть POSIX / SUS -Совместимы.
Режим ядра Ядро Linux stat , splice , dup , read , open , ioctl , write , mmap , close , exit И т.д. (около 380 системных вызовов) Ядро Linux Интерфейс системных вызовов (SCI, цели быть POSIX / SUS -Совместим)
Подсистема планирования процессов Подсистема IPC Подсистема управления памятью Подсистема виртуальных файлов Сетевая подсистема
Другие компоненты: ALSA, DRI, evdev, LVM, устройство картографа, Linux Network Scheduler, Netfilter Модули безопасности Linux : SELinux, Tomoyo, AppArmor, Хлопайте
Аппаратное обеспечение ( ЦП, основная память, устройства хранения данных и т. Д.)
Последняя правка сделана 2024-01-02 08:08:38
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте