- Вопрос или проблема
- Ответ или решение
- Почему OpenGL 3.3+ недоступен в WSL (Windows 11)?
- Фон проблемы
- Результаты glxinfo
- Причины ограничения
- 1. Порог поддержки драйверов
- 2. Программное рендеринг
- Решения и рекомендации
- 1. Использование WSL 2 с графической поддержкой
- 2. Аппаратное ускорение с помощью WSLg
- 3. Контроль за версиями драйверов
- 4. Рассмотрение родного Linux
- Заключение
Вопрос или проблема
Как моя 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, что откроет новые горизонты для разработчиков и пользователей.