← На главную

UTM показала Triton: аппаратный DirectX 11 для Windows-гостей в QEMU

08.08.2026 13:33 · hackernews

Разработчики UTM представили Triton — новый Windows-драйвер, который вместе с ранее созданным слоем Neptune даёт полноценное аппаратное ускорение DirectX 11 для Windows-гостей в QEMU. Проект уже запускает Crash Bandicoot Trilogy на Windows 11 ARM64, виртуализованной в macOS. Triton решает проблему, с которой сталкивались прошлые попытки: нельзя просто подменить системные d3d11.dll и dxgi.dll на свои версии, потому что Windows без них не работает, античиты детектят подмену, а композитёр DWM копирует кадры через CPU, убивая производительность. Вместо этого Triton реализует не DirectX API, а DDI — Device Driver Interface. В Windows приложение общается с d3d11.dll, а та вызывает пользовательский драйвер UMD. Triton — это и есть UMD, который преобразует DDI-вызовы обратно в обычные DirectX API-вызовы, а затем отдаёт их в Neptune. Neptune сериализует их через VirtIO и пересылает в QEMU, где virglrenderer передаёт их хостовому DirectX-рендереру. Такой обратный трансформатор требует восстановления метаданных DXContainer из сырого DXBC-байткода — это самое хрупкое место реализации, но зато не нужно разбирать и заново компилировать шейдеры.

Для работы на macOS было три кандидата в бэкенды хостового рендеринга. DXVK c MoltenVK работает, но нестабильно. DXMT переводит D3D11 сразу в Metal и уже форкнут для поддержки общих текстур и фенсов. D3DMetal — проприетарный фреймворк Apple из Game Porting Toolkit, он показывает лучшую производительность, но его лицензия запрещает использование вне разработки игр для Apple-устройств и не допускает включение в приложения. Для обмена текстурами между процессами используется shm_open с отображением в MTLBuffer — это работает благодаря UMA на Apple Silicon. Синхронизацию эмулируют через GPU-запись значения в разделяемую память с помощью ClearUnorderedAccessViewUint, а потребитель опрашивает её с CPU. Всё это уже работает в QEMU и virglrenderer, код открыт, разработчики планируют включить поддержку в UTM.

Читать оригинал →