Unterstützung für OpenGL 4.6 und OpenGL® ES 3.2
- Der M1 unterstützte lange Zeit nur OpenGL 4.1, unterstützt nun aber OpenGL® 4.6 und OpenGL® ES 3.2 vollständig.
- Für die neuesten Treiber der M1/M2-Serie muss lediglich Fedora installiert werden.
- Falls es bereits installiert ist, kann einfach mit dem Befehl
dnf upgrade --refresh aktualisiert werden.
- Anders als die nicht standardkonformen 4.1-Treiber der bisherigen Anbieter sind diese Open-Source-Linux-Treiber für aktuelle OpenGL-Versionen zertifiziert und versprechen breite Kompatibilität mit modernen OpenGL-Workloads wie Blender, Ryujinx und Citra.
Treiberzertifizierung und Standardunterstützung
- Zertifizierte 4.6/3.2-Treiber müssen mehr als 100.000 Tests bestehen, um Korrektheit zu gewährleisten.
- Die Liste der offiziell zertifizierten Treiber umfasst nun auch OpenGL 4.6 und ES 3.2.
- Anbieter unterstützen noch immer keine Grafikstandards wie modernes OpenGL, dieses Unternehmen hingegen schon.
- Das Unternehmen betont öffentlich seine Liebe zu interoperablen offenen Standards und möchte Nutzern und Entwicklern die Freiheit geben, Anwendungen ohne spezielle Portierungen dort auszuführen, wo sie möchten.
Neue Funktionen in OpenGL 4.6
- OpenGL 4.6 fügt gegenüber 4.1 Dutzende verpflichtende Funktionen hinzu:
- Robustness
- SPIR-V
- Clip control
- Cull distance
- Compute shaders
- Upgraded transform feedback
Kompatibilitätsprobleme des M1 mit Grafikstandards
- Der M1 passt nicht gut zu Grafikstandards, die neuer als OpenGL ES 3.1 sind.
- Vulkan macht einige Funktionen optional, aber in den Layern für DirectX und OpenGL fehlen benötigte Funktionen.
- Auf dem M1 gibt es keine bestehende Lösung, die über den OpenGL-4.1-Funktionsumfang hinausgeht.
Wie die 4.1-Barriere überwunden wurde
- Es waren neue Methoden erforderlich, um neue Funktionen ohne Hardware-Unterstützung zu implementieren.
- Geometrie-Shader, Tessellation und Transform Feedback werden durch Compute Shader ersetzt.
- Cull distance wird durch transformierte Interpolationswerte ersetzt.
- Clip control wird durch ein Vertex-Shader-Epilog ersetzt.
Herausforderungen bei der Robustness
- Traditionell priorisieren GPUs rohe Leistung gegenüber Sicherheit.
- Für Anwendungen wie Webbrowser ist dieser Trade-off nicht wünschenswert.
- Robustness-Funktionen können die Angriffsfläche verringern, indem sie Anwendungen erlauben, definiertes Verhalten bei Pufferzugriffen außerhalb des gültigen Bereichs in Shadern zu wählen, wobei dafür ein geringer Leistungsverlust in Kauf genommen wird.
Buffer-Robustness
- Andere APIs definieren unterschiedlich, was Ladevorgänge außerhalb des gültigen Buffer-Bereichs zurückgeben, wenn Robustness aktiviert ist.
- OpenGL legt fest, dass ein Ladevorgang außerhalb des Bereichs das letzte Element des Buffers zurückgibt.
- Zusätzliche Operationen für Robustness werden in die Präambel des Shaders verschoben, sodass für den Haupt-Shader keine zusätzlichen Kosten entstehen.
Image-Robustness
- Image-Robustness verlangt, dass Bild-Ladevorgänge außerhalb des gültigen Bereichs 0 zurückgeben.
- Auf der M1-GPU gibt es einen einzelnen Test, bei dem geladene gemippte Bilder fehlschlagen.
- Mögliche Workarounds für Robustness sind, nicht aus ungültigen Levels zu laden oder spekulativ zu laden und anschließend Vergleichs- und Auswahloperationen zu verwenden.
Meinung von GN⁺
- Dieser Artikel behandelt einen wichtigen Fortschritt bei der Unterstützung aktueller OpenGL-Standards auf M1-Geräten. Das dürfte Linux-Nutzern und Entwicklern breitere Kompatibilität und bessere Leistung bringen.
- Die neuen Funktionen von OpenGL 4.6 können Leistung und Robustheit von Grafik-Anwendungen deutlich verbessern, was besonders für Spieleentwicklung und High-Performance-Computing wichtig ist.
- Der Artikel ist ein gutes Beispiel dafür, wie Open-Source-Treiber im Vergleich zu kommerziellen Lösungen eine bessere Standardkonformität und Kompatibilität bieten können.
1 Kommentare
Hacker-News-Kommentare