Совсем недавно Выпущено разработчиков Collabora через сообщение в блоге новый контроллер Gallium для Mesa, который реализует промежуточный уровень организовать OpenCL 1.2 и OpenGL 3.3 API о драйверах с поддержкой DirectX 12 (D3D12) и о том, что их исходный код выпущен под лицензией MIT.
Предлагаемый контроллер будет позволяет использовать Mesa на устройствах которые изначально не совместимы с OpenCL и OpenGL а также в качестве отправной точки для переноса приложений OpenGL / OpenCL для работы на D3D12. Для производителей графических процессоров подсистема позволяет обеспечить поддержку OpenCL и OpenGL, причем драйверы поддерживают только D3D12.
В своем блоге разработчики делятся:
В течение последних нескольких месяцев мы работали над двумя захватывающими новыми проектами в Collabora, и, наконец, пришло время поделиться информацией о них со всем миром ...
Ближайших плановнаблюдается достижение полного одобрения испытаний Поддержка OpenCL 1.2 и OpenGL 3.3, проверка совместимости с приложениями и включение лучших практик в основной состав Mesa.
О новом контроллере
Разработка нового драйвера ведется совместно с инженерами Microsoft. для разработки инструментов D3D11On12 для наборов передачи D3D11 и библиотеки D3D12TranslationLayer D3D12, а также стандартных графических примитивов поверх D3D12.
Реализация включает драйвер Gallium, компилятор OpenCL, среда выполнения OpenCL и компилятор шейдеров NIR-to-DXIL, который преобразует промежуточное представление шейдеров NIR, используемых в Mesa, в двоичный формат DXIL (промежуточный язык DirectX), совместимый с DirectX 12 и основанный на битовом коде LLVM 3.7 (Microsoft's DirectX Shader Compiler - это, по сути, расширенная вилка LLVM 3.7). Компилятор OpenCL был подготовлен на основе опыта проекта LLVM и инструментария SPIRV-LLVM.
Эта работа основана на многих предыдущих работах. Прежде всего, мы создаем это с помощью Mesa 3D, с интерфейсом Gallium в качестве основы для слоя OpenGL и NIR в качестве основы для компилятора OpenCL. Мы также используем LLVM и транслятор Khronos SPIRV-LLVM в качестве компилятора.
Кроме того, мы используем опыт Microsoft в создании уровня перевода D3D12, а также наш собственный опыт в разработке Zink.
Исходный код OpenCL компилируется с clang в промежуточный псевдокод LLVM (LLVM IR), который затем преобразуется в промежуточное представление ядра OpenCL в формате SPIR-V.
Ядра в представлении SPIR-V перенесены в Mesa, переведены в формат NIR, оптимизированы и переданы в NIR-to-DXIL для создания подходящих вычислительных шейдеров DXIL. для выполнения на графическом процессоре с использованием среды выполнения на основе DirectX 12. Вместо использования Clover в реализации OpenCL Mesa предлагается новая среда выполнения OpenCL, которая позволяет выполнять более прямые преобразования в API DirectX 12.
Драйверы OpenCL и OpenGL подготавливаются с использованием интерфейса Gallium. предоставляется в Mesa, что позволяет обходить специфику OpenGL при создании драйверов и преобразовывать вызовы OpenGL в сущности, которые ближе к графическим примитивам, с которыми работают современные графические процессоры.
Драйвер Gallium принимает команды OpenGL и с участием переводчика NIR-to-DXIL создает буферы команд, которые выполняются на графическом процессоре с использованием драйвера D3D12.
Наконец, разработчики упоминают, что это ранняя работа и что они ожидают, что контроллер со временем улучшится:
Это всего лишь объявление, и предстоит еще много работы. У нас есть кое-что, что в некоторых случаях работает на данный момент, но мы только начинаем царапать поверхность.
Прежде всего, нам нужно достичь того уровня функций, к которому мы стремимся. В настоящее время наша цель - пройти тестирование на соответствие OpenCL 1.2 и OpenGL 3.3. Нам предстоит пройти долгий путь, но я уверен, что приложив немного усилий и потрудившись, мы добьемся этого.
Если вам интересно узнать об этом больше, вы можете проверить исходную заметку в следующая ссылка или для тех, кто заинтересован в проверке исходного кода, могут это сделать по этой ссылке.
Будьте первым, чтобы комментировать