Vulkan 1.3 in einem Monat auf dem M1 implementiert
Einführung des Honeykrisp-Treibers
- Honeykrisp-Treiber: Der erste Treiber, der die vollständige Vulkan-1.3-Spezifikation auf Apple-Hardware implementiert.
- Entwicklungsstand: Noch nicht für Endnutzer veröffentlicht; es werden weiterhin Funktionen hinzugefügt und die Leistung verbessert. Der Quellcode ist für Entwickler verfügbar.
Entwicklungsverlauf
2. April
- Beginn: Start der Entwicklung eines Vulkan-Treibers für den M1 auf Basis des NVK-Treibers.
3. April
- Descriptor-Sets: Die im Vergleich zu NVIDIA abweichenden Descriptor-Sets des M1 an NVK angepasst.
4. April
- Compute-Shader: Unterstützung zum Kompilieren von Compute-Shadern sowie zum Kopieren von Puffern und Bildern mit Vulkan-Befehlen implementiert.
6. April
- Verarbeitung des Grafikzustands: Code zur Verarbeitung des Grafikzustands geschrieben, dabei Code aus dem OpenGL-Treiber übernommen und mit NVK kombiniert.
7. April
- Dynamischer Zustand: Eine Strategie übernommen, bei der alle Zustände dynamisch verarbeitet werden; Code zum Kompilieren und Cachen von Prolog und Epilog hinzugefügt.
8. April
- Testergebnisse: Erste Testergebnisse: 149.770 bestanden, 7.741 fehlgeschlagen, 2.396 Abstürze.
9. April
- Vulkan 1.3: Nach einer Erfolgsquote von 99,6 % bei Vulkan 1.1 auf Vulkan 1.3 umgestellt und dort 98,3 % erreicht.
10. April bis 12. April
- Zusätzliche Tests: Funktion des Vulkan-Renderers in SuperTuxKart und Zink bestätigt, Test-Bugs behoben.
16. April bis 17. April
- Compiler-Bugs behoben: In Descriptor-Indexing-Tests entdeckte Compiler-Bugs behoben, Problem mit Endlosschleifen gelöst.
18. April
- Zero-Copy-Rendering: Die Erweiterung
EXT_image_drm_format_modifier für effiziente Oberflächen-Layouts implementiert.
22. April
- Überprüfung der Treiberarchitektur: Nach Prüfung der Treiberarchitektur Optimierungen durchgeführt; im
vkoverhead-Test 100 Millionen Draw-Calls pro Sekunde erreicht.
24. April bis 25. April
- YCbCr-Unterstützung: YCbCr-Funktionalität hinzugefügt, unter Verwendung von NVK-Code von Mohamed Ahmed.
- Kopieren von Queries: Unterstützung zum Kopieren von GPU-Queries implementiert.
26. April
- Rahmenfarbe: Die Erweiterung
EXT_custom_border_color für Direct3D-Kompatibilität implementiert und Probleme mit Rahmenfarben gelöst.
27. April
- Abschlusstests: Alle Tests bestanden, 686.930 bestanden, 0 fehlgeschlagen.
Zukünftige Pläne
- Unterstützung für DXVK und vkd3d-proton: Zusätzliche Funktionen für Direct3D-Layering sollen implementiert werden.
- Ausführung von Windows-Spielen: Geplant ist, Windows-Spiele auf Asahi Linux mit Wine und einem Open-Source-x86-Emulator auszuführen.
Meinung von GN⁺
- Technische Herausforderung: Die Implementierung von Vulkan 1.3 auf dem M1 ist technisch äußerst anspruchsvoll. Das liegt an der einzigartigen Architektur der Apple-Hardware.
- Nützlich für Spieleentwickler: Sobald der Vulkan-Treiber fertig ist, können Spieleentwickler ihre Spiele auf mehr Plattformen ausführen, was vorteilhaft ist.
- Leistungsoptimierung erforderlich: In der Anfangsphase kann eine Leistungsoptimierung nötig sein. Insbesondere muss das Problem des CPU-Overheads durch die Verarbeitung dynamischer Zustände gelöst werden.
- Beitrag der Community: Als Open-Source-Projekt sind Beiträge aus der Community wichtig. Tests und Feedback in unterschiedlichen Hardware- und Software-Umgebungen sind erforderlich.
- Konkurrenzprodukte: Neben DXVK und vkd3d-proton gibt es auch andere Kompatibilitätsschichten wie Wine. Es ist wichtig, die Vor- und Nachteile der einzelnen Produkte zu vergleichen und entsprechend zu wählen.
1 Kommentare
Hacker-News-Kommentare
Beeindruckende Arbeit, die den Wert gemeinsamer, wiederverwendbarer und offener Komponenten beweist. Ich frage mich, wie lange ein Port von Proton dauern wird. Wegen der Unterschiede in der GPU-Architektur und des Overheads durch die ARM-Übersetzung ist es möglich, dass viele Spiele nicht richtig laufen. Trotzdem bin ich optimistisch, dass mit der weiteren Verbreitung von SoCs mehr Spiele auf Unified Memory und ARM abzielen werden.
Ich frage mich, ob die Bemühungen, Vulkan zu Linux hinzuzufügen und DirectX unter Asahi Linux zu übersetzen, Auswirkungen auf Apples Traum haben werden, AAA-Spiele auf Apple Silicon zu bringen. Apple möchte, dass AAA-Entwickler ihre Spiele auf Metal portieren, damit sie auf iPhone, iPad, Mac und Vision Pro laufen. Es ist auch möglich, dass Mac-Gamer Asahi Linux installieren, um AAA-PC-Titel zu spielen.
Wenn man mit Vulkan 1.3 nicht vertraut ist, sich aber für die Arbeit mit Low-Level-Grafik-APIs interessiert, lohnt sich ein Blick darauf. Sobald man die ersten Hürden überwunden hat, macht die Arbeit damit Spaß. Mit vollständig dynamischem State und Render-Pässen ohne Presets wird die Arbeit deutlich einfacher. Es ist auf allen Desktop-Plattformen mit GPUs verfügbar, die nicht älter als 10 Jahre sind. Es gibt allerdings kein Framework mit „vernünftigen Standardwerten“, aber viele nützliche Helper-Bibliotheken in verschiedenen Sprachen.
Ich wünschte, meine Programmierfähigkeiten wären auch nur halb so gut wie ihre. Wirklich beeindruckend.
Alyssas erstaunliche Coding-Magie. Ich weiß nicht, wie sie das macht, aber ich freue mich, dass sie für die gute Sache kämpft.
Compiler-Bugs passieren niemals. Aber in diesem Fall war es tatsächlich ein Compiler-Bug. In meiner Laufbahn ist mir das noch nie passiert, aber auf dieser Abstraktionsebene scheint es weniger selten vorzukommen.
Ich habe gerade das ES-3.2-Support-Update bekommen, und es wirkt fast so, als wäre das M1 für Asahi gemacht worden. Ich habe macOS seit der Installation nur ein einziges Mal gebootet. Ich frage mich, ob Browser „Zero-Copy-Rendering“ unterstützen. Ich erinnere mich, dass ich bei WebGL2-Transform-Feedback an einem Problem festhing, bei dem ein Lesevorgang ausgelöst wurde.
Es gibt eine ungewöhnliche Shader-Struktur. Die Bedingung ist immer falsch, aber der Compiler weiß das nicht. Ich frage mich, welchen Zweck diese Struktur erfüllt.
Ob es innerhalb einer VM nutzbar ist. Ich entwickle unter macOS und nutze ein VMware-Image, um Ubuntu zu testen. Ich entwickle 3D-Grafik-Apps, weiß aber nicht, wie gut der Passthrough von VMware ist. Ich frage mich, ob die Apple-Silicon-GPU in einer VM virtualisiert wird und ob man mit dieser Distribution bessere Grafikleistung erzielen könnte.
Ich frage mich, ob jemand die Beziehung zu MoltenVK erklären kann. Ich frage mich, ob diese Arbeit die Notwendigkeit von MoltenVK beseitigt und ob es sich um einen nativen Treiber handelt.