2017-10-24 3 views
1

Ich arbeite an einem erweitern Grafiktreiber für MacOS, und verwenden Sie IOFrameBuffer-Klasse, um eine lineare Frame-Puffer-Gerät zu veröffentlichen. In meinem Treiber verwenden wir getVRAMRange(), um die Video-RAM-Adressinformationen für das gesamte Speicherfenster des Framepuffergeräts zurückzugeben.IOFramebuffer kann nicht auf VRAM Framebuffer in Mac OS 10.13 zugreifen

Die Frage ist: Der Treiber kann gut auf MacOS 10.12 funktionieren, aber sobald ich das System auf MacOS 10.13 High Sierra umgerüstet habe, kann ich nicht mehr auf Video-RAM-Daten zugreifen. Hast du Tipps zu diesem Thema? Vielen Dank!

Außerdem bin ich auch verwirrt, warum der Treiber gut mit dem abgesicherten Modus funktioniert?

Antwort

0

Dieses Problem wurde mit dem Metal Compositor in Mac OS 10.13 eingeführt. Ich habe es Apple schon früh im Beta-Zyklus gemeldet, aber bisher habe ich noch keine Antwort erhalten, und es ist sicherlich nicht behoben worden.

Der Inhalt der Anzeige wird irgendwo in WindowsServer gezeichnet, Sie können darauf zugreifen, indem Sie einen Screenshot (im Benutzerbereich) mit CGDisplayCreateImage() erstellen. Je nachdem, was du versuchst, könnte das für dich funktionieren?

Der Grund, warum das Problem im abgesicherten Modus nicht existiert, ist, dass das hardwarebeschleunigte Compositing (Quartz Extreme) im abgesicherten Modus deaktiviert ist, sodass der Metal-Compositor nicht verwendet wird. Das Problem tritt auch nicht auf älteren Macs auf, die kein Metal unterstützen.

+0

Vielen Dank für Ihre hilfreiche Antwort. Ich denke auch, dass es von Metall beeinflusst wurde. Ich habe versucht, CGDislplayCreateImage() -Funktion im Benutzerraum zu verwenden, aber die Leistung ist zu schlecht, um unsere Anforderungen zu erfüllen. Wie ich weiß, der neueste Treiber von DisplayLink (http://www.displaylink.com/downloads/file?id=1033) kann gut unter MacOS 10.13, so denke ich, auf jeden Fall gibt es eine Möglichkeit, auf die Video-RAM-Daten. Hättest du noch andere Vorschläge? –

+0

Soweit ich weiß, ist 'CGDislplayCreateImage()' die einzige Methode, die momentan funktioniert. Es ist definitiv möglich, damit Echtzeit-Performance zu erzielen, obwohl es sicherlich eine zusätzliche Framebuffer-Kopie hinzufügt. Richte einen Fehler (Radar) bei Apple ein, um ihn zu ermutigen, ihn zu reparieren. – pmdj

Verwandte Themen