Windows-API-Nachbau: Wine 6.0 mit Vulkan-Renderer für Direct 3D

Neben dem experimentellen Vulkan-Backend für WineD3D bringt die Laufzeitumgebung DirectShow mit, und die Core-Module liegen jetzt im PE-Format vor.

In Pocket speichern vorlesen Druckansicht 119 Kommentare lesen

(Bild: Nok Lek / Shutterstock.com)

Lesezeit: 4 Min.
Von
  • Rainald Menge-Sonnentag
Inhaltsverzeichnis

Ein Jahr nach Wine 5.0 ist nun Version 6.0 des Windows-Kompatibilitäts-Layers für Linux, macOS, ReactOS und Android erschienen. Das Release bringt ein Vulkan-Backend für WineD3D mit und erweitert die Umsetzung der Konsole und die Integration des Media-Foundation-Frameworks. Außerdem setzt es die Umstellung der Libraries in das Windows-Binärformat Portable Executable (PE) fort.

Die Umsetzung von Direct3D-Aufrufen über die Grafikschnittstelle Vulkan steht bereits seit Längerem auf der Wunschliste und befindet sich seit zwei Jahren in Arbeit. Bisher nutzt Wine OpenGL für die Umsetzung über den Translation-Layer WineD3D. Das aktuelle Release bringt einen derzeit noch als experimentell gekennzeichneten Vulkan-Renderer für WineD3D mit. Wer ihn aktivieren möchte, muss den in HKEY_CURRENT_USER\Software\Wine\Direct3D abgelegten Registry-Eintrag renderer auf vulkan setzen.

Das Backend benötigt die Shader Library vkd3d zum Übersetzen der Direct3D-Shader in die SPIR-V-Shader (Standard Portable Intermediate Representation). Im ersten Anlauf sind die Shader für den Vulkan-Renderer auf Shader Model 4 und 5 begrenzt. Ersteres kam mit DirectX 10 und Letzteres mit DirectX 11. Damit lassen sich lediglich Anwendungen, die auf Direct3D 10 oder 11 zielen sinnvoll mit dem Backend nutzen.

In Wine 5.0 hat das Team die Umstellung von DLLs vom Executable and Linkable Format (ELF) in das PE-Format begonnen. Das aktuelle Release hat sämtliche Core-DLLs wie NTDLL, KERNEL32, GDI32, USER32 im PE-Format an Bord. Das soll laut der Ankündigung vor allem im Zusammenspiel mit Kopierschutzmechanismen helfen, die den Inhalt des Speichers mit dem der DLL-Dateien vergleichen.

Außerdem lassen sich nun Unix-Libraries PE-Modulen zuordnen, damit Letztere die Funktionen aus der Bibliothek aufrufen können, die sich nicht über die Win32-API realisieren lassen. Wine sucht nach den Libraries als Varianten der PE-Module mit einer auf ".so" geänderten Dateiendung und erwartet sie im selben Verzeichnis wie die PE-Variante. Beispielsweise wäre das Pendant zu "ntdll.dll" als "ntdll.so" zu speichern.

Die Library libwine kommt in Wine 6.0 nicht mehr zum Einsatz. Allerdings bringt das aktuelle Release sie weiterhin mit, um ältere Winelib-Module verwenden zu können. Durch die neue Architektur ohne Einbindung von "libwine.so" laufen für Wine 6 erstellte Module nicht mit älteren Wine-Versionen.

Einige Ergänzungen betreffen die zweidimensionale Grafik: Unter anderem ist nun das Zeichnen von Bögen, Ellipsen und abgerundeten Rechtecken über die Direct2D-API implementiert. Der Null Display Driver lässt sich als regulärer Display-Treiber verwenden, falls kein UI benötigt ist. Außerdem kann WindowsCodecs nun Bilder im JPEG-XR- oder DDS-Format (DirectDraw Surface) dekodieren und im GIF-Format enkodieren.

Die Umsetzung des Media-Foundation-Frameworks bringt ebenfalls einige Neuerungen mit, darunter die Integration des Media-Session-Objekts und der SAR-Pipeline (Streaming Audio Renderer). Außerdem bringt Wine 6.0 eine Implementierung des File-Writer-Filters von DirectShow und einen Wrapper für DirectX Media Objects (DMO) mit.

Textkonsolen haben die Wine-Entwickler unter Berücksichtigung der jüngeren Windows-Architektur neu umgesetzt, da sie näher an der Arbeitsweise von Unix-Konsolen als die alte Windows-Herangehensweise ist. Unter anderem bringt Wine 6.0 eine Pseudokonsole als Äquivalent zu Pseudoterminals (Pseudo TTYs) in Unix mit.

Das gesamte Handling der Konsolensteuerung erfolgt über den Prozess ConHost. Die Entwickler haben die WineConsole im Zuge der Umstellung zum Wrapper des Prozesses degradiert. Da ConHost sich auch um die Verarbeitung von VT-Escapesequenzen kümmert, kann Wine dafür auf die UNIX-Curses-Library verzichten.

Weitere Neuerungen in Wine 6.0 wie die Einbindung von Eingabegeräten über DirectInput lassen sich der Ankündigung entnehmen. Dort sind der Sourcecode und binäre Pakete verlinkt. Wie bereits in Version 5.0 hat die Community einen Verlust zu beklagen und widmet das Release dem kurz vor Weihnachten verstorbenen Ken Thomases, der maßgeblich für den macOS-Support in Wine verantwortlich war.

(rme)