Не удается использовать OpenGL 3.3+ в WSL (Windows 11)

Вопрос или проблема

Как моя GPU, так и CPU поддерживают версии до OpenGL 4.6, и мои драйвера актуальны. Однако мой Ubuntu 20.04 на WSL поддерживает только 3.3. Вот что говорит glxinfo:

glxinfo | grep "OpenGL"
Строка вендора OpenGL: Microsoft Corporation
Строка рендерера OpenGL: D3D12 (NVIDIA GeForce RTX 3080 Laptop GPU)
Строка версии профиля ядра OpenGL: 3.3 (Core Profile) Mesa 21.2.6
Строка версии языка шейдеров профиля ядра OpenGL: 3.30
Флаги контекста профиля ядра OpenGL: (нет)
Маска профиля профиля ядра OpenGL: core profile
Расширения профиля ядра OpenGL:
Строка версии OpenGL: 3.1 Mesa 21.2.6
Строка версии языка шейдеров OpenGL: 1.40
Флаги контекста OpenGL: (нет)
Расширения OpenGL:
Строка версии профиля OpenGL ES: OpenGL ES 3.0 Mesa 21.2.6
Строка версии языка шейдеров профиля OpenGL ES: OpenGL ES GLSL ES 3.00
Расширения профиля OpenGL ES:

Исправление: версия моего ядра: 5.10.60.1

Как указано в комментариях, при использовании программного рендеринга (LLVM) мои результаты показали, что профиль был 4.5.

После обновления моих драйверов nVidia (что я, похоже, не делал в течение некоторого времени), теперь я вижу то же самое, что и вы:

Строка рендерера OpenGL: D3D12 (NVIDIA GeForce RTX 2070 SUPER)
Строка версии профиля ядра OpenGL: 3.3 (Core Profile) Mesa 21.2.6

Тем не менее, согласно странице Mesa D3D12, драйвер поддерживает только 3.3, так что я считаю это ожидаемым.


Полные результаты:

~> glxinfo | grep "OpenGL"

Строка вендора OpenGL: Microsoft Corporation
Строка рендерера OpenGL: D3D12 (NVIDIA GeForce RTX 2070 SUPER)
Строка версии профиля ядра OpenGL: 3.3 (Core Profile) Mesa 21.2.6
Строка версии языка шейдеров профиля ядра OpenGL: 3.30
Флаги контекста профиля ядра OpenGL: (нет)
Маска профиля профиля ядра OpenGL: core profile
Расширения профиля ядра OpenGL:
Строка версии OpenGL: 3.1 Mesa 21.2.6
Строка версии языка шейдеров OpenGL: 1.40
Флаги контекста OpenGL: (нет)
Расширения OpenGL:
Строка версии профиля OpenGL ES: OpenGL ES 3.0 Mesa 21.2.6
Строка версии языка шейдеров профиля OpenGL ES: OpenGL ES GLSL ES 3.00
Расширения профиля OpenGL ES:

~> LIBGL_ALWAYS_SOFTWARE=1 glxinfo | grep "OpenGL"

Строка вендора OpenGL: Mesa/X.org
Строка рендерера OpenGL: llvmpipe (LLVM 12.0.0, 256 бит)
Строка версии профиля ядра OpenGL: 4.5 (Core Profile) Mesa 21.2.6
Строка версии языка шейдеров профиля ядра OpenGL: 4.50
Флаги контекста профиля ядра OpenGL: (нет)
Маска профиля профиля ядра OpenGL: core profile
Расширения профиля ядра OpenGL:
Строка версии OpenGL: 3.1 Mesa 21.2.6
Строка версии языка шейдеров OpenGL: 1.40
Флаги контекста OpenGL: (нет)
Расширения OpenGL:
Строка версии профиля OpenGL ES: OpenGL ES 3.2 Mesa 21.2.6
Строка версии языка шейдеров профиля OpenGL ES: OpenGL ES GLSL ES 3.20
Расширения профиля OpenGL ES:

Ответ или решение

Почему OpenGL 3.3+ недоступен в WSL (Windows 11)?

Если вы столкнулись с проблемой использования OpenGL 3.3 и выше в Windows Subsystem for Linux (WSL) на Windows 11, с учётом ваших возможностей аппаратного обеспечения и актуальности драйверов, важно разобраться в нескольких ключевых моментах.

Фон проблемы

Ваши графический процессор (GPU) и центральный процессор (CPU) поддерживают до OpenGL 4.6, и вы уверены, что драйвера обновлены. Однако, результаты команды glxinfo показывают, что вы имеете доступ только к OpenGL 3.3, что значительно ограничивает ваши возможности для разработки и использования графических приложений.

Результаты glxinfo

Вывод команды glxinfo, который вы привели, соответствует следующим данным:

OpenGL vendor string: Microsoft Corporation
OpenGL renderer string: D3D12 (NVIDIA GeForce RTX 3080 Laptop GPU)
OpenGL core profile version string: 3.3 (Core Profile) Mesa 21.2.6

Данный вывод указывает на то, что используемая реализация OpenGL основана на D3D12 от Microsoft, а не на нативном драйвере NVIDIA. Кроме того, версия Mesa 21.2.6, в свою очередь, подтверждает, что графические функции библиотек OpenGL поддерживаются только до версии 3.3.

Причины ограничения

1. Порог поддержки драйверов

Как упомянуто в документации Mesa D3D12, текущие драйвера для D3D12 не обеспечивают поддержку версий OpenGL выше 3.3. Это связано с тем, что в WSL 2 (версия подсистемы, которую вы, вероятно, используете) графические вызовы перенаправляются на DirectX, и в результате доступ к расширенным возможностям OpenGL ограничен.

2. Программное рендеринг

Когда вы использовали команду LIBGL_ALWAYS_SOFTWARE=1, чтобы проверить программный рендеринг, вы заметили, что версия OpenGL увеличилась до 4.5. Это подразумевает, что программный рендерер, такой как llvmpipe, действительно поддерживает более высокие версии OpenGL, но производительность сильно пострадает по сравнению с аппаратным рендерингом.

Решения и рекомендации

Чтобы устранить проблему использования OpenGL в WSL, вы можете рассмотреть следующие шаги:

1. Использование WSL 2 с графической поддержкой

Убедитесь, что вы используете WSL 2 и что в вашей системе включена поддержка графики. Это можно сделать, включив "Windows Features" для "Virtual Machine Platform" и "Windows Subsystem for Linux".

2. Аппаратное ускорение с помощью WSLg

WSLg (Windows Subsystem for Linux GUI) предлагает ускоренный графический интерфейс, который может обеспечить лучшую поддержку OpenGL. Убедитесь, что у вас установлена последняя версия WSL и WSLg.

3. Контроль за версиями драйверов

Постоянно проверяйте и обновляйте драйвера для вашего графического процессора. Иногда, новые версии драйверов могут улучшить совместимость с WSL.

4. Рассмотрение родного Linux

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

Заключение

Эта проблема с доступом к версиям OpenGL выше 3.3 в Ubuntu 20.04 на WSL является следствием ограничений в реализации драйверов и технологий перекрытия. Применяя предложенные решения, вы сможете улучшить свое взаимодействие с OpenGL на вашей платформе. Надеемся, что в будущем Microsoft и разработчики Mesa улучшат поддержку OpenGL в WSL, что откроет новые горизонты для разработчиков и пользователей.

Оцените материал
Добавить комментарий

Капча загружается...