29.11.2021

Реализация OpenGL поверх DirectX достигла совместимости с OpenGL 3.3 и принята в состав Mesa

Компания Collabora сообщила о принятии в основной состав Mesa Gallium-драйвера D3D12, реализующего прослойку для организации работы OpenGL поверх API DirectX 12 (D3D12). Одновременно объявлено об успешном прохождении драйвером тестов на совместимость с OpenGL 3.3 при работе поверх D3D12-драйверов WARP (программный растеризатор) и NVIDIA.

Драйвер может быть полезен для использования Mesa на устройствах с драйверами, поддерживающими только D3D12, а также в качестве стартовой позиции для портирования OpenGL-приложений для работы поверх API D3D12. В том числе драйвер можно будет использовать для организации работы графических приложений в окружениях под управлением подсистемы WSL (Windows Subsystem for Linux), обеспечивающей запуск исполняемых файлов Linux в Windows.

Разработка ведётся совместно с инженерами Microsoft, развивающими открытый инструментарий D3D11On12 для перевода игр с D3D11 на D3D12 и библиотеку D3D12TranslationLayer, реализующую типовые графические примитивы поверх D3D12. На базе рассматриваемого проекта компания Microsoft уже подготовила прослойку, дающую возможность запускать завязанные на OpenGL приложения на устройствах с Windows, не предоставляющих полную поддержку OpenGL. В частности, удалось обеспечить работу Photoshop на Windows-устройствах с процессорами ARM.

Реализация включает драйвер для Mesa и компилятор шейдеров NIR-to-DXIL (D3D12 runtime), преобразующий применяемое в Mesa промежуточное представление шейдеров NIR в бинарный формат DXIL (DirectX Intermediate Language), поддерживаемый в DirectX 12 и основанный на биткоде LLVM 3.7 (DirectX Shader Compiler от Microsoft является ответвлением от LLVM 3.7). Драйвер для Mesa использует интерфейс Gallium, принимает команды OpenGL и при помощи транслятора NIR-to-DXIL формирует команды D3D12, которые исполняются на GPU посредством системного драйвера D3D12. Отдельно развиваются компоненты для обеспечения работы OpenCL поверх D3D12, включающие компилятор OpenCL и OpenCL runtime.

Источник.