Windows XP: Klare Fronten mangels Konkurrenz
Das GDI spielt bis einschließlich Windows XP die zentrale Rolle bei der Ausgabe aller 2D-Inhalte,was sich anhand des (leicht vereinfachten) Schemas erkennen lässt. Wir wollen nun den Ablauf anhand der Entstehung und Ausgabe einer Linie nachvollziehen. Unsere Mausbewegungen für das Zeichnen einer Linie gehen als Information zunächst an win32k.sys, der zentrale Anlaufstelle für alle möglichen Ereignisse. Egal ob Maus- bzw. Tastatureingaben oder alle grafischen Aufgaben, hier werden Informationen gesammelt und zielgerichtet weiterverteilt. Unsere Anwendung erhält nun diese Information und setzt diese in einen GDI-Zeichenbefehl um. Dieser landet in der GDI und damit wiederum bei win32k.sys. Folgen wir einfach den lila Pfeilen.
Unter XP ist die alte 2D-Welt also noch in Ordnung. Anhand dieses einfachen Schemas ist auch ersichtlich, warum die 2D-Hardarebeschleunigung recht einfach umzusetzen ist, vorausgesetzt natürlich, die eingesetzte Grafikkarte verfügt auch über die entsprechenden Fähigkeiten. Der blaue Pfeil kennzeichnet übrigens die Rückinformation an das Programm, damit dieses weiß, dass sich Fensterinhalte geändert haben (z.B. wenn ein anderes Fenster nicht mehr Teile verdeckt) und dass der Inhalt vom Programm neu gezeichnet werden muss.
Bis einschließlich der Radeon HD1xxx Serie bei ATI und der Geforce 7xxx bei Nvidia besitzen auch alle Consumer-Grafikkarten eine separate 2-Einheit. Diese fiel mit der Einführung der DX10-Karten mit der Unified-Shader-Architektur bei beiden Herstellern weg.
Vista: CPU statt GPU – Puffer statt Direktlieferung
Unter Windows Vista wurde, wie bereits im ersten Teil erklärt, ein völlig neuer Weg beschritten. Um das Ganze besser zu verstehen, müssen wir es weiter vereinfachen. Bis zur GDI erfolgt das Zeichnen analog zu XP, die Aufgabe der win32k.sys, die Fenster zu verwalten, übernimmt aber nun der DWM (Dynamic Window Manager). Hinzu kommt, dass ab Windows Vista die Fensterverwaltung komplett über Direct3D geschieht. Das Fenster jeder Anwendung wird deshalb im Texturspeicher der Grafikkarte als 3D-Textur abgelegt. Eigentlich eine praktische Angelegenheit, aber das GDI kann diese Inhalte nicht mehr direkt ansprechen. Die Kommunikationskette scheint demnach unterbrochen. An dieser Stelle kommt nun die bereits erwähnte doppelte Pufferung ins Spiel.
Speicherverschwendung und Umwege führen zur subjektiv empfundenen Trägheit von Vista
Was passiert genau? Betrachten wir die roten Pfeile. An Stelle des eigentlichen Grafiktreibers (unter XP der DDI Display Treiber) wird der neue CDD (Canonical Display Driver) angesprochen, der grafikkartenunabhängig ein direkter Bestandteil von Vista ist. Während sich der endgültige Fensterinhalt bereits als Textur im Speicher der Grafikkarte befindet, muss für jedes Fenster nun zusätzlich ein äquivalenter Puffer im Systemspeicher angelegt werden (Fensterbreite x Fensterhöhe x 4 Byte für die Farbe). Im Systemspeicherpuffer wird die spätere Fensteransicht zunächst als Bitmap nach der herkömmlichen Methode erzeugt und erst danach als Endprodukt in den Videospeicher als Textur übernommen. Der DWM wiederum verwaltet die Fenster und erstellt die Inhalte über Direct3D. Der DWM erhält auch die Informationen, wenn sich in einem Fenster ein Bereich geändert hat und dieses damit neu zu zeichnen ist (blauer Pfeil). In diesem Moment kopiert der DWM die Inhalte des Systemspeichers in den Videospeicher und lässt das Fenster über Dirct3D (D3D) neu rendern. Das Programm selbst muss (im Gegensatz zu der Lösung unter XP) die Inhalte nicht mehr erneut zeichnen.
Wir stellen sehr schnell fest, dass bei diesen Umwegen keine Hardwarebeschleunigung mehr möglich ist und dass auch das direkte Zeichnen im Vergleich zu XP erheblich an Performance einbüßt. Dies alles äußert sich dann in den bekannten Symptomen, anhand derer man Vista schnell eine gewisse Trägheit und vor allem hohen Speicherbedarf unterstellt.
Windows 7: Hardwarebeschleunigung in homöopathischen Dosen
Wir hatten es ja bereits erwähnt, dass Windows 7 Teile der GDI-Befehle wieder per Hardwarebeschleunigung unterstützen lassen kann, solange WDDM 1.1-Treiber verwendet werden. Fehlen diese, so wie bei einigen älteren Intel-Grafiklösungen, verhält sich Windows 7 wieder so ähnlich wie Vista. Was bedeutet das für uns nun genau? Wichtig ist, dass nicht mehr zwangsläufig für jedes Fenster ein doppelter Puffer angelegt werden muss. An die Stelle des Systemspeichers tritt der sogenannte „non local memory“ (auch „aperture space“ genannt). Hierbei handelt es sich um einen bestimmten Bereich des normalen Systemspeichers, auf den auch die Grafikkarte direkt zugreifen kann. Ändert sich nun ein Fensterbereich durch Verschieben oder Einblenden, wird der Inhalt dieses Bereiches einfach und ohne Umwege in den Videospeicher der Grafikkarte kopiert.
Im Vergleich zu XP können jedoch nur wenige GDI-Befehle auf die Unterstützung durch die GPU hoffen: Das Rendern von Text, ColorFill, BitBlt mit den Standard-ROPS, AlphaBlend, TransparentBlt und StretchBlt. Kurzum für Nicht-Insider: Das Ausgeben von Text, die Vollflächenfüllung mit einfachen Farben, das Kopieren von Bildinhalten und Transparenzen. Während das Zeichnen von geometrischen Figuren überhaupt nicht unterstützt wird, können das Kopieren von Bildinhalten und die Füllung sogar direkt am „aperture space“ vorbeigeschleust und direkt ausgegeben werden.
Zwischenfazit
Windows 7 verringert den Speicherbedarf durch die Abschaffung der doppelten Pufferung. Selbst Vista profitiert im Nachhinein vom neuen Treibermodell. So ist die Hardwarebeschleunigung seit dem Plattformupdate (mit dem auch DirectX11 Einzug hielt) analog zu Windows 7 wieder möglich. Der Nachteil liegt jedoch in der Komplexität und den möglichen Treiberproblemen. Diesen wiederum waren wir ja auf der Spur.
7 Antworten
Kommentar
Lade neue Kommentare
Urgestein
1
Urgestein
1
Neuling
Urgestein
Urgestein
Alle Kommentare lesen unter igor´sLAB Community →