Mit D7VK 2.1 setzt der Entwickler die Vervollkommnung der Direct3D‑7/6/5/3‑zu‑Vulkan‑Übersetzung fort. Die Aktualisierung konzentriert sich vor allem auf das Beschleunigen von Lade‑ und Startzeiten sowie auf eine Reihe von Spiel‑spezifischen Korrekturen. Außerdem wurden diverse interne Vereinfachungen vorgenommen, die den Code wartungsfreundlicher machen sollen.
Was D7VK 2.1 adressiert
D7VK fungiert als Kompatibilitätsschicht, die alte Direct3D‑APIs auf moderne Vulkan‑Aufrufe abbildet. Version 2.1 bringt mehrere Änderungen, die sich gemeinsam positiv auf den Start‑ und Ladeprozess auswirken: Reduzierter Overhead bei Objektanlage, optimierte Log‑Verwendung, besseres Caching von Geräteinformationen und gezielte Vermeidung unnötiger Speicherübertragungen.
Konkrete Performance‑Optimierungen
- Geringerer Overhead bei Objektlebenszyklen: Die Lifecycle‑Nachverfolgung wurde reduziert, wodurch die Kosten für das Erstellen von Objekten gesunken sind. Das zeigt sich in kürzeren Ladezeiten über mehrere unterstützte APIs hinweg.
- Device‑Caps und Enumeration: Kopien und Caching der device capabilities sowie die Geräteenumeration wurden optimiert. In Empire Earth (The Art of Conquest) verkürzt das den Start bis zur Intro‑Wiedergabe von rund 3–4 Sekunden auf etwa eine Sekunde.
- Weniger Log‑Overhead: Logging‑Aufrufe wurden entschärft, um CPU‑Last und Speicherbedarf zu reduzieren. Die Änderung soll besonders auf sehr langsamen CPUs spürbar helfen, ohne Benchmarks merklich zu beeinflussen.
- Surface‑Uploads/Downloads: Uploads und Downloads von Surfaces sind effizienter geworden; unnötige Transfers werden in manchen Fällen ausgelassen. Spieler profitieren etwa in Titeln mit aufwendigen Licht‑/Partikeleffekten.
Spielbezogene Verbesserungen und Fixes
D7VK 2.1 enthält mehrere Anpassungen, die gezielt Probleme bestimmter Titel beheben oder deren Spielbarkeit verbessern:
- Arx Fatalis: Ein Use‑after‑free‑Fehler beim Freigeben angehängter Depth‑Stencil‑Surfaces wurde behoben, wodurch ein Startcrash in manchen Builds verschwindet.
- Arx Fatalis – optionaler GetDC‑Pfad: Es wurde ein optionaler direkter Pfad für GetDC/ReleaseDC eingebaut. Bei stark frequentierten GetDC‑Aufrufen kann das die Framerate im Spiel um etwa 5–10 % steigern. Allerdings führt dieser Pfad in manchen Fällen zu schlechterer Performance beim Rendern des Hauptmenüs, sodass die Wirkung je nach Spiel unterschiedlich ausfällt.
- Blade of Darkness, Knight Rider, Silent Hunter II: Ein paar der Optimierungen bei Surface‑Transfers und das Ignorieren unnötiger Übertragungen liefern in diesen Titeln eine merkliche Verbesserung, vor allem bei Szenen mit aufwendiger Beleuchtung.
- Resident Evil 2 (Retail): Ein alternativer Pixel‑Center‑Konfigurationsschalter wurde ergänzt und eine feste Funktionalität zur Anpassung implementiert. Die Option verschiebt die Pixel‑Zentrierung um einen halben Texel und behebt so Hintergrundartefakte in dem Spiel. Hinweis: Die Einstellung ist ein Kompromiss und kann an anderen Stellen zu Bildfehlern führen, insbesondere bei gerendertem Text.
- Project I.G.I. und Sonic World DX: Die Nutzung verwalteter (managed) Vertex‑Buffers brachte insgesamt bessere Render‑Performance in den getesteten Szenen.
- Empire Earth: Suboptimale Zugriffs‑Muster auf Puffer wurden umgangen, was die CPU‑gebundene Performance bei vielen Einheiten auf dem Bildschirm verbessert.
- MechWarrior 3: Ein Problem mit fehlenden Hauptmenü‑Hintergründen wurde behoben.
Kompatibilität, ARM und 8‑Bit‑Farben
Auch bei weniger verbreiteten Zielplattformen und alten Farbformaten hat der Entwickler Anpassungen vorgenommen:
- ARM‑Fallback für ProcessVertices(): Es wurden non‑SSE2‑Helper hinzugefügt, die beim Kompilieren für ARM eingesetzt werden können. Diese Fallbacks sind langsamer und primär für Vergleiche oder Tests gedacht, verbessern aber die Portierbarkeit des Codes auf nicht‑x86‑Architekturen.
- R3G3B2 8‑Bit‑Surfaces: Unterstützung für 8‑Bit‑R3G3B2‑Flächen wurde ergänzt, allerdings standardmäßig deaktiviert. Gründe: In vielen Fällen zwingt fehlende 8‑Bit‑Unterstützung die Spiele in 16‑Bit‑Modi, was die Bildqualität verbessert. Zudem kann die/Ter Erstellung solcher Surfaces aufgrund einer WineD3D‑Limitation fehlschlagen.
- 8‑Bit‑Mode‑Masking: Die Config‑Option zur Maskierung von 8‑Bit‑Modi wurde erweitert, sodass bei der Anzeige‑Modus‑Enumeration gemeldete 8‑Bit‑Modi ausgefiltert werden können.
DDraw‑Forwarding und kleinere Eingriffe
D7VK dient in einigen Fällen als einfacher Weiterleitungsproxy für klassische DDraw‑Aufrufe, die dann komplett an WineD3D oder die Windows‑Native‑Implementierung durchgereicht werden. Hier wurde der Overhead reduziert, sodass DDraw‑only‑Titel und D3D‑bezogene DDraw‑Operationen insgesamt weniger Zusatzkosten erzeugen.
Codepflege und Perspektive
Der Entwickler weist darauf hin, dass einige der jüngsten Verbesserungen letzlich dem Abflachen der Rendite dienen: Die größten Leistungsgewinne sind bereits erzielt, weitere Optimierungen liefern tendenziell kleinere Zuwächse. Zugleich sei der Code durch die Aufräum‑ und Umstrukturierungsarbeiten deutlich wartungsfreundlicher geworden, was künftige Arbeiten erleichtert.
Fazit
D7VK 2.1 ist kein Release mit einem einzigen spektakulären Feature, sondern eine Sammlung gezielter Optimierungen und Fehlerbehebungen, die vor allem Retro‑Titel auf Wine/Proton messbar flüssiger starten lassen und in Einzelfällen auch die Laufzeitperformance verbessern. Wer ältere Direct3D‑Spiele unter Linux betreibt, profitiert von kürzeren Ladezeiten, besserer Stabilität in einigen Problemfällen und zusätzlichen Konfigurationsoptionen für spezielle Grafik‑Edge‑Cases.