Virtual-Screen Abstürze:
Wie bereits hier erklärt gab es in letzter Zeit häufig Probleme mit den jeweils neuesten Versionen (FCPX 10.3, iMovie 10.1.4) von Apples Video Programmen, wenn die iGPU und eine dedizierte GPU gleichzeitig benutzt wurden. Das konkrete Problem war dabei immer ein VirtualScreenChange der nicht korrekt abgewickelt werden konnte. Grund dafür war relativ offensichtlich die so nicht vorhandene Hardwarekonfigurationen in Apples Geräten, welche nie über eine komplett funktionstüchtige iGPU und dazu dedizierte GPU verfügen. Obwohl Apple Geräte herstellt in denen ein Prozessor mit iGPU verbaut ist, welche zusätzlich eine ded. GPU besitzen (siehe iMac 15.1), funktioniert dort alles problemlos wobei bei diesen Modellen alle Anschlüsse immer an einer der beiden GPUs sitzen.
Quicksync
Jetzt könnte man sich fragen:
Wieso sollte man denn die iGPU aktiviert lassen wenn man eine richtige GPU besitzt? Dafür gibt es 2 Gründe:
- Manche ded. GPUs benötigen eine aktivierte iGPU zum booten (siehe RX Serie) (mit WhateverGreen.kext gefixt)
- Nur mit aktivierter iGPU kann auf Intels QuickSync Technologie zugegriffen werden. Diese ist beispielsweise dafür verantwortlich, dass ein iMac 5k häufig um längen schneller in FCPX rendert als ein maxed out Mac Pro, und ein MacBookPro manchmal schneller als ein starker Hackintosh. Intels Hardware Encoder ist hier sehr fortschrittlich und auch wenn über dessen Qualität für professionelle Videos debattiert werden kann, ist er zumindest für den Semi-Profi und den Normaluser ein riesen Plus bei jedem Videoschnittprogramm. Mit deaktivierter iGPU sind die Renderzeiten also komplett GPU bedingt. Die Lösung der Schnittprogramm lieg hier in der Mitte, wobei die ded. GPU für 3D Animationen und Effekte genutzt wird und die iGPU häufig für die Wiedergabe sowie das finale Rendern.
OS X Versionen im Vergleich
Interessant ist, dass die Quicksync Leistung bei Hackintoshs sich im Laufe der OS X Versionen verändert hat. El Capitan war der absolute Spitzenreiter was die QuicksyncLeistung betrifft und Sierra plötzlich, im Vergleich mit Vorgängerversionen, eindeutig am schlechtesten. Dies lässt sich besonders gut anhand des BruceX Benchmarks für FCPX sehen:
R9 280x + HD4600 unter Final Cut 10.2: (FCPX 10.3 stürzte ja ab)
- Yosemite: 20s
- El Capitan: 13s
- Sierra: 34s
Dies ist der Grund warum ich auch weiterhin jedem, der einen Hackintosh für FCPX/iMovie Videoschnitt baut, ausdrücklich zum Nutzen von El Capitan rate!
Interessant ist es das Sierra Ergebnis mit einem Ergebnis komplett ohne iGPU zu vergleichen, da die beiden Ergebnisse identisch sind. Die R9 280x braucht alleine ca. 35s zum Rendern, R9 280x+iGPU ebenfalls. Es schien also als würde auf meine Hackintosh Quicksync (vielleicht aufgrund der VirtualScreen Problematik) unter Sierra garnicht funktionieren.
Versuche
Ich hatte lange keine Idee, wie ich an das ganze herangehen könnte. Mein Ziel war es erstmal Quicksync zum laufen zu bringen. Das VirtualScreen Problem war mir erstmal egal, da ich mit FCPX 10.2 genauso zufrieden war. Den Usern mit dem VirtualScreen Problem wurde meist zur deaktivierung der iGPU geraten. Unter Usern welche die iGPU unbedingt brauchten (zB wegen AMD RX GPUs), machte sich der Tipp breit, die für die iGPU nötigen Grafikkexts unter S/L/E einfach zu löschen oder zu deaktivieren.
Das war auch mein erster Ansatz, aber natürlich funktionierte ohne Grafikbeschleunigung auch keine QuickSync-Beschleunigung. Daraufhin versuchte ich Grafikkexts aus El Capitan zu benutzen und zum laden zu überreden, was sogar funktionierte aber auch nichts nutzte. Testen konnte ich das ganz einfach anhand der BruceX Zeiten oder den Optionen, die im MacX Video Converter verfügbar waren, denn dieser hat unter Hardware Encoder eine Quicksync Option, welche nicht aktivierbar war.
Desweiteren probierte ich verschiedenste Kombinationen des manuellen Hardware Encoders, gesetzt mit Terminal sowie diverse DSDT Veränderungen bezüglich der iGPU.
Weiter ging es dann mit verschiedenen AAPL, ig-platform-ids. Ich hatte unter Ozmosis das Problem, das eine in der defaults.plist gesetzte Platform ID nicht übernommen wurde. Lösung war hier, die ig-platform-id zusätzlich in der DSDT zu setzen und hier ebenfalls zu modifizieren, wobei ich letztendlich auch auf die Lösung stieß.
Lösung HD 4600
Die Idee bestand darin eine platform ID zu setzen, die über keine Connectors verfügt. Diese ist im Fall der HD4600 die 0x04120004, im Fall der HD2500 die 0x01620007. Der Monitor muss ab dann natürlich an der GPU hängen!
Das ganze sollte im Optimalfall in der DSDT passieren: (Am Beispiel der HD4600)
Zudem sollte dabei die ADR Adresse im GFX0 Device in der DSDT wie folgt aussehen:
Als Alternative kann die ig-Platform-ID auch in der config oder defaults.plist gesetzt werden.
Nach einem Neustart sieht man jetzt dass die Kexte für die HD4600 weiterhin geladen werden,
Jedoch die Intel Iris nicht mehr im Systembericht erscheint.
In iStat Menus ist eine Anzeige für Speicher und Prozessorauslastung der iGPU verfügbar. Unter Luxmark ist die iGPU aber nicht explizit anzusprechen:
Mit diesem Schritt ist das VirtualScreenChange Problem gelöst. FinalCut 10.3 und iMovie in der neuesten Version funktionieren einwandfrei unter Sierra. Quicksync noch nicht zwingend.
Um Quicksync zu aktivieren wird jetzt noch eine Systemdefinition benötigt, die selber eine iGPU (und ded. GPU) besitzt. Bei mir bietet sich da der iMac 15.1 an. Sobald dieser in der defaults oder config gesetzt ist erscheint auch folgendes Bild im MacX Video Converter:
Der Encoder wird als unterstützt angezeigt und "Intel" ist ankreuzbar!
Zudem ist Airplay verfügbar, welches anscheinend ebenfalls auf QuickSync setzt.
Die jetzt möglichen Renderzeiten sprechen für sich. Das Konvertieren eines 5gb großen ProRes 422 Movies zu H.264 im MacX Converter braucht jetzt nicht mehr 2,37m wie zuvor sondern nur noch sagenhafte 60 Sekunden.
Der BruceX unter Sierra kommt zurück auf 22s, in etwa wie unter Yosemite. El Capitan bleibt ungeschlagen, QuickSync funktioniert jedoch!
Beim Rendern ist zudem die Auslastung der iGPU in iStat Menus eindeutig zu erkennen:
Soviel jetzt erstmal zu meinen Erkenntnissen der letzten Tage.
Das ganze geht natürlich auch mit anderen iGPUs (zB Skylake)...
- Hier findet ihr eine Anleitung für das ganze mit der HD 530: Quicksync, Virtual-Screen und iGPU+ded. GPU mit HD 530
- Und hier für die HD 630: Quicksync, Virtual-Screen und iGPU+ded. GPU mit HD 630