Wine получил поддержку MESA_map_buffer_client_pointer для 32-битного OpenGL в WoW64
Инициатива 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
Комментарии
Войдите, чтобы комментировать.