Collabora развивает надстройку для работы OpenCL и OpenGL поверх DirectX

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

Предложенный драйвер позволяет использовать Mesa на устройствах, изначально не поддерживающих OpenCL и OpenGL, а также в качестве стартовой позиции для портирования OpenGL/OpenCL-приложений для работы поверх D3D12. Для производителей GPU подсистема даёт возможность предоставить поддержку OpenCL и OpenGL, при наличии драйверов только с поддержкой D3D12.

Из ближайших планов отмечается достижение полного прохождения тестов на совместимость OpenCL 1.2 и OpenGL 3.3, проверка совместимости с приложениями и включение наработок в основной состав Mesa. Разработка ведётся совместно с инженерами Microsoft, развивающими открытый инструментарий D3D11On12 для перевода игр с D3D11 на D3D12 и библиотеку D3D12TranslationLayer, реализующую типовые графические примитивы поверх D3D12.

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

Исходные тексты с расширениями OpenCL компилируются при помощи clang в промежуточный псевдокод LLVM (LLVM IR), который затем преобразуется в промежуточное представление OpenCL-ядер в формате SPIR-V. Ядра в представлении SPIR-V передаются в Mesa, транслируются в формат NIR, оптимизируются и передаются в NIR-to-DXIL для генерации вычислительных шейдеров в формате DXIL, пригодном для выполнения на GPU c использованием runtime на базе DirectX 12. Вместо Clover, применяемой в Mesa реализации OpenCL, предложен новый OpenCL runtime, допускающий больше прямых преобразований в API DirectX 12.

OpenCL и OpenGL драйверы подготовлены с использованием предоставляемого в Mesa интерфейса Gallium, позволяющего при создании драйверов не углубляться в специфичные для OpenGL детали и транслировать вызовы OpenGL в сущности, более близкие к графическим примитивам, которыми оперируют современные GPU. Gallium-драйвер, принимает команды OpenGL и при привлечении транслятора NIR-to-DXIL формирует буферы команд, которые исполняются на GPU, используя драйвер D3D12.

Источник: http://www.opennet.ru/opennews/art.shtml?num=52625