Wine получил поддержку MESA_map_buffer_client_pointer для 32-битного OpenGL в WoW64

· Linux и open source
В Wine влили поддержку расширения Mesa, которое позволяет эффективнее отображать буферы OpenGL для 32-битных Windows-приложений, работающих поверх 64-битных системных библиотек. Изменения войдут в Wine 11.21.

cover.svg

Инициатива CodeWeavers, начатая в этом году, принесла результат: в Wine объединили код, который улучшает поддержку OpenGL в режиме WoW64. Этот режим позволяет запускать 32-битные Windows-приложения и игры, используя 64-битные системные библиотеки.

В чём проблема

Расширение OpenGL MESA_map_buffer_client_pointer предложили ещё в феврале, специально для 32-битных Windows-программ, работающих в Wine с 64-битными библиотеками. До сих пор Wine создавал для буфера отдельное хранилище в памяти CPU и копировал из него содержимое при вызове glUnmapBuffer. Для постоянных отображений (persistent maps) использовалось совместное использование ресурсов через Vulkan.

Однако старые приложения и игры сами управляют загрузкой данных в буферы. Чтобы так называемые унаследованные отображения (legacy maps) работали с приемлемой скоростью, понадобился иной механизм.

Как работает расширение

MESA_map_buffer_client_pointer позволяет Wine передать драйверу диапазоны 32-битных адресов, на которые затем отображаются буферные объекты. Благодаря этому 32-битный код получает доступ к буферу напрямую, без промежуточного копирования.

Само расширение приняли в Mesa в марте. Поддержку на стороне Wine влили только сейчас: соответствующий merge request реализует отображение буферов OpenGL в WoW64 в 32-битном коде OpenGL.

Когда и где заработает

Нововведение появится в Wine 11.21, выпуск которого ожидается в пятницу. Со стороны драйверов картина пока неполная. Поддержку расширения уже принял Zink, для драйвера RadeonSI Gallium3D открыт merge request. Для остальных драйверов Mesa заявок на реализацию пока нет.


Источник: Phoronix

Комментарии

Войдите, чтобы комментировать.

  • Пока нет комментариев.