zurück zum Artikel

Direct3D-9-Unterstützung für Open-Source-Grafiktreiber

Thorsten Leemhuis

Durch experimentelle Erweiterungen für Mesa 3D und Wine können mit Wine ausgeführte Windows-Anwendungen die 3D-Beschleunigung mancher Open-Source-Grafiktreiber nutzen, ohne dass die Direct3D-9-Befehle erst in OpenGL gewandelt werden müssen.

Christoph Bumiller hat Patches für Wine und Mesa 3D veröffentlicht [1], durch die Wine Direct3D-9-Befehle direkt an das Gallium-3D-Framework von Mesa 3D übergeben kann. Dadurch braucht Wine die Direct3D-9-Befehle nicht mehr in OpenGL-Befehle umsetzen, wie es derzeit WineD3D macht [2], damit Direct3D-9-Anwendungen unter Wine die 3D-Beschleunigung von Grafikkernen nutzen können. Das Entfallen dieser Wandlung kann die Performance verbessern; bei einigen groben Schnelltests lieferten einige Spiele laut Bumiller doppelt so hohe Bildraten.

Hauptbestandteil der Patches [3] ist ein Direct3D-9-State-Tracker [4] für Mesa 3D, durch den dessen Gallium-3-Framework Direct3D-9-Befehle annehmen und interpretieren kann; auf Gallium 3D aufbauende 3D-Grafiktreiber können sie dann weiterverarbeiten und an die Grafikhardware übergeben. Die in Mesa 3D enthaltenen und bei Linux-Distributionen meist standardmäßig genutzten Open-Source-3D-Treiber für Grafikkerne von AMD und Nvidia sind solche Treiber; der für Intel-Hardware ist es ebenso wenig wie die proprietären Linux-Grafiktreiber von AMD und Nvidia. Bumiller hat den State-Tracker nicht komplett selbst entworfen, sondern vor drei Jahren von Joakim Sindholt gestarteten Code aufgegriffen und verbessert.

Ein zweiter Satz Patches [5] von Bumiller ändert Wine, damit das den Direct3D-9-State-Tracker von Gallium 3D nutzt und sich die Umwandlung in OpenGL spart. Der auch durch seine Arbeit am freien Nvidia-Treiber Nouveau bekannte Bumiller hat zudem ein kurzes Dokument geschrieben [6], das erläutert, wie man seine Patches einsetzt. In der Ankündigung nennt er zudem einige Gründe, warum er nicht einen unfertigen Direct3D-10/11-State-Tracker verbessert hat – so nutze dieser nicht C++ sondern C und der DIrect3D-9-State-TGracker arbeite bereits mit echten Applikationen.

Es ist derweil noch ungewiss, ob Bumillers Direct3D-State-Tracker in das von allen Mainstream-Linux-Distributionen verwendete Mesa 3D einzieht; Marek Olšák, der unter anderem an den freien Radeon-Treibern mitarbeitet, hat sich deutlich für die Aufnahme ausgesprochen und den State-Tracker als das wichtigste Projekt seit Mesa 1.0 bezeichnet [7]. (thl [8])


URL dieses Artikels:
https://www.heise.de/-1920593

Links in diesem Artikel:
[1] http://article.gmane.org/gmane.comp.video.mesa3d.devel/60445
[2] http://wiki.winehq.org/WineD3D
[3] https://github.com/chrisbmr/Mesa-3D/tree/gallium-nine
[4] http://dri.freedesktop.org/doxygen/gallium/statetracker.html
[5] https://github.com/chrisbmr/wine/tree/d3dadapter9-wip
[6] https://github.com/chrisbmr/Mesa-3D/blob/gallium-nine/src/gallium/state_trackers/nine/README
[7] http://thread.gmane.org/gmane.comp.video.mesa3d.devel/60445/focus%3D60568
[8] mailto:thl@ct.de