-
HINTERGRUND
-
Gebiet:
-
Das Folgende bezieht sich auf Graphikverarbeitung, Graphikverarbeitungssysteme wie z. B. Graphikprozessoreinheiten (GPUs) und in speziellen Beispielaspekten Zusammensetzungs- und Bilderzeugungstechniken.
-
Stand der Technik:
-
Puffer, die verwendet werden, um Daten zu speichern, die darauf warten, dass sie an eine Anzeige ausgegeben werden, werden typischerweise ”Rahmenpuffer” genannt, die ein Konzept einer Anzeige eines Rahmens einer zeitlichen Sequenz von Rahmen hervorrufen, wobei ein ”Rahmen” ein vollständiger Satz von Pixeldaten ist. In einigen Rechenarchitekturen können Rahmenpuffer auch als Quelle von Daten dienen, die weiter verarbeitet werden sollen, wie z. B. durch eine GPU.
-
In einem solchen Fall kann eine GPU Daten aus einem Rahmenpuffer (z. B. einem Ort in einem Speicher, der Bilddaten wie z. B. ein Bitmap speichert) lesen und diese Daten zusammen mit anderen Daten verwenden, um ein zusammengesetztes Bild zu erzeugen. Die GPU schreibt dann Daten, die das ganze zusammengesetzte Bild darstellen, in einen Ausgangsrahmenpuffer. Eine Anzeigesteuereinheit kann das zusammengesetzte Bild aus dem Ausgangsrahmenpuffer lesen und bewirken, dass das zusammengesetzte Bild angezeigt wird. Folglich wird ein ganzer Pixeldatensatz gespeichert, um jeden anzeigbaren Rahmen darzustellen.
-
Als konkreteres Beispiel kann ein herkömmliches Wiedergabe- und Anzeigesystem eingerichtet werden, um eine Dreifachpuffermethode zu implementieren, bei der drei Speicherabschnitte reserviert sind, die jeweils unabhängig in der Lage sind, einen anzeigbaren Rahmen mit voller Auflösung zu halten (z. B. Puffer 0, 1 und 2), und in einer Umschaltkette angeordnet sind. Ein Graphikprozessor kann beispielsweise anzuzeigende aufeinander folgende Rahmen in die Puffer 0, 1 und 2 schreiben und dann erneut bei 0 beginnen. Ebenso liest eine Anzeigesteuereinheit die Puffer 0, 1 und 2, bevor sie zum erneuten Lesen des Puffers 0 zurückkehrt. Wenn Pixeldaten zwischen irgendeinem oder mehreren der Puffer 0, 1 und 2 gleich sind, werden diese Pixeldaten in allen Puffern, in denen sie erscheinen, wiederholt.
-
KURZFASSUNG
-
In Implementierungen gemäß der Offenbarung umfassen Daten, die mehrere Wiedergabeoberflächen (z. B. einen Rahmen von anzuzeigenden Pixeldaten) darstellen, einen jeweiligen Satz von Abbildungen zwischen Oberflächenbereichen und Speichersegmenten für diese Wiedergabeoberfläche. Jede Wiedergabeoberfläche kann als Kombination von Pixeldaten von Bereichen einer vorherigen Oberfläche und Bereichen von Pixeldaten, die als anders als Pixeldaten von der vorherigen Oberfläche bestimmt werden, dargestellt werden.
-
Als Beispiel umfasst ein Verfahren zur Wiedergabe das Speichern von Daten, die eine erste wiedergegebene Oberfläche darstellen, einschließlich Speichersegmenten, die Pixeldaten für jeweilige Bereiche der ersten wiedergegebenen Oberfläche speichern, und einer Abbildung zwischen den Bereichen und den jeweiligen Speichersegmenten. Das Verfahren umfasst auch ein Verfolgen einer Anzahl von wiedergegebenen Oberflächen, die Pixeldaten in jedem Speichersegment verwenden. Um Daten, die eine anschließende wiedergegebene Oberfläche darstellen, die Bereiche von Pixeldaten aufweist, die Bereichen von Pixeldaten in der ersten wiedergegebenen Oberfläche entsprechen, zu speichern, umfasst das Verfahren ein Bestimmen, welche Bereiche in der anschließenden wiedergegebenen Oberfläche Pixeldaten aufweisen, die von der ersten wiedergegebenen Oberfläche unverändert sind, und welche Bereiche andere Pixeldaten aufweisen. Für die Bereiche mit denselben Pixeldaten wird eine Abbildung für die anschließende wiedergegebene Oberfläche erzeugt, um einen Verweis auf dasselbe Speichersegment wie die erste Oberfläche einzuschließen. Für Bereiche mit unterschiedlichen Pixeldaten werden solche Pixeldaten in Speichersegmente geschrieben, die aus einer Sammlung von freien Segmenten erhalten werden, und Verweise auf diese in der Abbildung vorgesehen. Zählwerte aller Speicheroberflächen, die Pixeldaten für die zweite Oberfläche speichern, werden unterhalten/gepflegt, was ein Inkrementieren eines Zählers für alle umfassen kann.
-
Um eine gemäß des obigen Verfahrens gespeicherte Oberfläche zu lesen, greift eine Vorrichtung auf die Abbildung für die Oberfläche zu, um zu bestimmen, wo (z. B. in einem durch eine spezielle Speicheradresse identifiziertes Speichersegment) jeder Bereich von Pixeldaten für diese Oberfläche gespeichert ist. Die Vorrichtung greift auf die Pixeldaten zu und aktualisiert die Verfolgung der Anzahl von Oberflächen, die Pixeldaten von diesen Speichersegmenten verwenden. Speichersegmente mit Pixeldaten, die nicht mehr von irgendeiner Oberfläche verwendet werden, können freigegeben werden, um sie zu einer Sammlung von freien Speichersegmenten zurückzugeben, die verfügbar sind, um Pixeldaten für weitere wiedergegebene Oberflächen zu empfangen.
-
Vorrichtungen können Verfahren gemäß der Offenbarung implementieren und umfassen Vorrichtungen, die sowohl als Quellen von Pixeln (”Pixelquellen”) als auch Verbraucher von Pixeln (”Pixelsenken”) funktionieren. Quellen von Pixeln können einen Videocodierer und eine GPU umfassen, während Verbraucher von Pixeln beispielsweise eine GPU und eine Anzeigesteuereinheit umfassen können. Vorrichtungen, die als Pixelquellen funktionieren, würden folglich Teile der Offenbarung in Bezug auf die Erzeugung (und potentiell Speicherung) von Daten implementieren, die Sequenzen von Bildern beschreiben, und Pixelsenken würden die Teile der Offenbarung in Bezug auf die Verwendung der erzeugten Daten für Bildverarbeitungs- oder Anzeigeoperationen implementieren.
-
Vorrichtungen, die Oberflächen lesen können, die gemäß diesen Aspekten geschrieben werden, können eine Anzeigesteuereinheit umfassen, die einen Zusatzspeicher innerhalb einer Anzeige verwendet. In einer solchen Situation kann eine Anzeigesteuereinheit einen weiteren Rahmen für die Anzeige durch Aktualisieren von nur Abschnitten eines solchen Zusatzspeichers, die geändert wurden, vorbereiten. Ob ein Abschnitt geändert wurde oder nicht, wird dadurch bestimmt, wie der Rahmen codiert ist (Verweise auf vorher geschriebene Daten oder neue Daten, die in einen Bereich des Speichers geschrieben werden). Welche Abschnitte des Rahmens aktualisiert werden, kann dadurch bestimmt werden, wie der Zusatzspeicher in einer speziellen Implementierung adressiert wird.
-
KURZBESCHREIBUNG DER ZEICHNUNGEN
-
Verschiedene Merkmale und Aspekte der Offenbarung werden aus der folgenden ausführlichen Beschreibung besser ersichtlich, die in Verbindung mit den begleitenden Zeichnungen gelesen werden soll, in denen:
-
1 einen Überblick über Funktionselemente eines Systems darstellt, in dem hier offenbarte Verfahrens- und Strukturaspekte ausgeführt werden können;
-
2 einen zeitlichen Ablauf von anzeigbaren Rahmen darstellt, die aus einer oder mehreren Wiedergabeoberflächen (Oberfläche(n)) gemäß hier offenbarten Ausführungsformen konstruiert werden können;
-
3 eine Darstellung von Daten darstellt, die eine erste Oberfläche definieren, die in Bereiche unterteilt ist;
-
4 Beispielaspekte einer Pixelquelle, die eine Oberfläche wiedergibt und Bereiche der wiedergegebenen Oberfläche in Speichersegmenten speichert und eine Abbildung von Bereichen auf Speichersegmente erzeugt, und einer Pixelsenke, die Bereiche der wiedergegebenen Oberfläche verbraucht, darstellt;
-
5 eine Darstellung einer zweiten Oberfläche darstellt, einschließlich Bereichen, die mit der ersten Oberfläche gemeinsam sind;
-
6 Aspekte der Darstellung der zweiten Oberfläche unter Verwendung von Bereichen von Daten, die die erste Oberfläche darstellen, und einer modifizierten Abbildung von Bereichen auf Speichersegmente darstellt;
-
7 weitere Aspekte der Speicherung von Oberflächenbereichen in Speichersegmenten darstellt;
-
8 ein Beispielverfahren zum Bestimmen eines Satzes von Daten, die die zweite Oberfläche darstellen, auf der Basis von Daten, die die erste Oberfläche darstellen, und von Speichersegmenten, die Daten für Bereiche der zweiten Oberfläche mit anderen Pixeldaten als die erste Oberfläche speichern, darstellt;
-
9 einen Beispielprozess zum Zugreifen auf eine Oberfläche von Pixeldaten wie z. B. zum Erzeugen eines anzeigbaren Rahmens gemäß Aspekten der Offenbarung darstellt;
-
10 einen Beispieldatenfluss beim Implementieren des Prozesses von 9 darstellt;
-
11 Aspekte eines Systems darstellt, in dem offenbarte Aspekte ausgeführt werden können; und
-
12 Aspekte eines Beispielprozessors darstellt, der dazu ausgelegt sein kann, Aspekte der Offenbarung durchzuführen.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Viele übliche Rechenvorrichtungen wie z. B. ein Desktop, Laptop, Tablet oder Mobiltelefon, umfassen ein Graphikuntersystem, das graphische Daten für eine Anzeige wie z. B. eine Flüssigkristallanzeige (LCD) oder eine andere geeignete Anzeigetechnologie erzeugen kann. Die Anzeige weist eine Auflösung auf, die typischerweise als Anzahl von horizontalen und vertikalen Pixeln gekennzeichnet ist, wie z. B. eine 1080p-Anzeige, die 1920 horizontale Pixel (Spalten) und 1080 vertikale Pixel (Zeilen) aufweist. Eine Bildwiederholfrequenz bestimmt, wie oft sich ein Bild, das auf der Anzeige angezeigt wird, ändert. Jedes unterschiedliche Bild, das auf der Anzeige angezeigt wird, kann als anzeigbarer Rahmen betrachtet werden.
-
Im Zusammenhang mit dem Speichern von Bilddaten im Speicher kann es nützlich sein, eine Speicheroberfläche als Ebene mit Pixelstellen zu konzipieren, die auf der Ebene gemäß einem Muster verteilt sind. Jede Pixelstelle hätte eine Menge an Speicher, die zum Speichern der Daten, die dieses Pixel darstellen, zugewiesen ist. Folglich würde für eine 1080p-Anzeige die Speicheroberfläche 1920×1080 Pixel jeweils mit einer bestimmten Menge an zugewiesenem Speicherplatz wie z. B. 4 Bytes umfassen. Die physikalische Implementierung einer solchen Speicheroberfläche kann sich jedoch zwischen Implementierungen unterscheiden und muss nicht dem konzeptionellen Modell folgen. Im Zusammenhang mit der Offenbarung wird eine Wiedergabeoberfläche in Bereiche unterteilt und jeder Bereich enthält einige der Pixel in der Oberfläche. Ein Bereich kann beispielsweise ein quadratischer 8×8-Pixelblock, ein Rechteck, ein vertikaler oder horizontaler Streifen von Pixeln und so weiter sein. Allgemeiner kann ein Bereich eine beliebige Form sein, obwohl erwartet wird, dass die Form ein Rechteck ist, wobei eine Höhe und Breite jeweils ein oder mehrere Pixel sind und typischerweise wenigstens eine Abmessung mehrere Pixel sind. Ein Bereich könnte aus diskontinuierlichen Pixeln gebildet sein, der Einfachheit halber beschreibt jedoch diese Beschreibung Beispielimplementierungen unter einer Annahme, dass Pixelbereiche kontinuierlich sind.
-
Eine Anzahl von Pixeln in einem Bereich und eine Länge gegenüber der Breite eines Bereichs können auf der Basis von Systemarchitekturerwägungen ausgewählt werden. Ein Konstruktionsziel kann beispielsweise darin bestehen, eine Speicherseitengröße an eine Menge an Speicher anzupassen, die erforderlich ist, um einen Bereich von Pixeln zu speichern. Es besteht jedoch keine Anforderung, dass ein Bereich von Pixeln in einem zusammenhängenden Speicherabschnitt gespeichert wird. Vielmehr hätte jeder Bereich von Pixeln eine bekannte relative Position zu den anderen Bereichen von Pixeln in einer Speicheroberfläche, so dass alle Pixel in der Speicheroberfläche durch Anordnen der Pixel der Bereiche gemäß diesen relativen Positionen dargestellt werden können. An sich würde ein Fachmann verstehen, dass die Pixelbereiche innerhalb einer Oberfläche jeweils ein logisches Gebilde einer speziellen Gruppierung von Pixeln sind, die in der Oberfläche zu finden sind.
-
In einigen Situationen ist eine Wiedergabeoberfläche zu einem anzeigbaren Rahmen kongruent, während in anderen Situationen eine Wiedergabeoberfläche ein Teil eines anzeigbaren Rahmens sein kann, einen anzeigbaren Rahmen und ”bildschirmexterne” Pixel umfassen kann oder Bilddaten sein kann, die wiedergegeben werden sollen und im Speicher gespeichert sind, oder beides. Pixeldaten können beispielsweise an eine Oberfläche wiedergegeben und zur Verwendung als Textur gespeichert und angezeigt werden.
-
1 stellt eine konzeptionelle Ansicht einer Implementierung eines Systems 3 gemäß der Offenbarung dar. Das System 3 umfasst eine Pixelquelle 6 und eine Pixelsenke 7, die jeweils funktionieren, um Pixeldaten zu erzeugen und zu verbrauchen. Die Pixelquelle 6 kann aus einem Speicher 10 lesen und in diesen schreiben. Die Pixelquelle 6 kann Segmente des Pixelspeichers aus einer Sammlung von Speichersegmenten 12 lesen und schreiben (z. B. Schreiben und Lesen von Daten für Bereiche einer Speicheroberfläche, wie vorstehend eingeführt). Die Sammlung 12 kann mit einem zweckgebundenen Speicher wie z. B. einem in einen Graphikprozessor eingebetteten Speicher implementiert werden. Ein solcher Speicher kann für diesen Zweck zweckgebunden sein oder kann zugewiesen werden, wenn es erforderlich ist. Die Sammlung 12 kann auch unter Verwendung eines Speichers, der für einen Graphikprozessor privat ist, oder eines Speichers, der zwischen einem Graphikprozessor und anderen Funktionseinheiten geteilt wird, implementiert werden. Speicherresidente Steuerelemente wie z. B. Listen von freien Bereichen in der Sammlung 12 können auch im eingebetteten Speicher implementiert werden. Implementierungen können einen Teil der Sammlung 12 und speicherresidente Steuerelemente einbetten. In einem Beispiel kann die Sammlung von Segmenten 12 genügend Speicher sein, um wenigstens drei volle Rahmen von Pixeldaten mit einer aktuellen Betriebsanzeigeauflösung zu speichern, um eine Dreifachpufferung zu implementieren. Die Pixelquelle 6 kann auch aus einer Liste 14 von freien Segmenten lesen, die Identifizierer für Speichersegmente umfasst, die zum Speichern von Bereichen von Pixeldaten für irgendeine Oberfläche, die durch die Pixelquelle 6 bearbeitet wird, verfügbar sind. Falls die Pixelquelle 6 ein Speichersegment aus der Liste 14 von freien Segmenten verwendet, entfernt die Pixelquelle 6 an sich einen Identifizierer für dieses Speichersegment aus der Liste 14 von freien Segmenten. Die Pixelquelle 6 kann zum Aktualisieren einer Abbildung 16 von Speichersegmenten auf Oberflächenbereiche auch aus dem Speicher 10 lesen und in diesen schreiben. Die Abbildung 16 kann beispielsweise mit einer Liste von Bereichen für eine spezielle Speicheroberfläche und durch Identifizieren von Informationen für ein oder mehrere Speichersegmente, die Pixeldaten für jeden der aufgelisteten Bereiche speichern, implementiert werden. Mehrere derartige Abbildungen 16 können im Speicher 10 gespeichert werden, wobei jede Abbildung einer jeweiligen Oberfläche zugeordnet ist.
-
Wenn eine Oberfläche verwendet oder angezeigt werden soll, wird auf die Abbildung, die dieser speziellen Oberfläche zugeordnet ist, zugegriffen, um die Liste Speichersegmenten abzurufen, die Pixeldaten in dieser von Oberfläche speichern, wie nachstehend erläutert. Wie nachstehend erläutert wird, verwendet die Pixelsenke 7 eine ausgewählte Abbildung aus Abbildungen 16, um Speichersegmente auszuwählen, auf die zugegriffen werden soll, um eine spezielle Oberfläche zur Anzeige auszugeben (z. B. um einen anzeigbaren Rahmen zu erzeugen). Jede Abbildung Speichersegmente von irgendeiner oder mehreren verschiedenen kann auf Oberflächen verweisen, so dass Speichersegmente aus unterschiedlichen und diskontinuierlichen Speicherstellen gelesen werden können.
-
In einer Beispielanwendung umfasst die Pixelsenke 7 eine Anzeigesteuereinheit, die eine zeitliche Sequenz von anzeigbaren Rahmen ausgibt, wie z. B. in 2 dargestellt, in der anzeigbare Rahmen 20, 21 und 21 zur Ausgabe zur Anzeige auf einer Anzeige 25 gebildet sind. Diese Operation steht zur herkömmlichen Operation einer Anzeigesteuereinheit im Gegensatz, der ein Ort eines Startpunkts für einen anzuzeigenden Rahmen gegeben werden kann, und die kontinuierlich Daten von diesem Startpunkt zur Ausgabe eines Rahmens zur Anzeige liest. Anzeigesteuereinheiten können auch Streu/Sammel-Operationen unterstützen. Anzeigesteuereinheiten können auch eine Speichermanagementeinheit aufweisen, die die Virtualisierung des Speichers unterstützt (Zuführen eines zusammenhängenden Segments eines virtuellen Speichers, der durch verschiedene Abschnitte eines physikalischen Speichers implementiert wird). Als weiterer Kontrast können in Implementierungen der Offenbarung Pixeldaten, die in einem einzelnen Speichersegment gespeichert sind, von der Pixelsenke 7 beim Bilden von mehreren Rahmen zur Anzeige verwendet werden. Ein Bereich von Pixeldaten, die in einem gegebenen Speichersegment gespeichert sind, kann beispielsweise in zwei oder drei aufeinander folgenden Rahmen verwendet werden.
-
3 stellt eine Oberfläche 105 dar, die in Bereiche 110–114 unterteilt ist. Jeder Bereich weist eine definierte Anzahl von Zeilen und Spalten von Pixeln auf, so dass jeder Bereich eine definierte Anzahl von Pixeln aufweist. Eine Anzahl von Bereichen in horizontalen und vertikalen Richtungen wird durch die Bildschirmauflösung (für eine feste Bereichsgröße) bestimmt. Bereichsgrößen können für einen speziellen Zieltyp von Anzeige und auf der Basis von Erwägungen wie z. B. Eigenschaften der Pixelquelle 6 und -senke 7, Speicherschnittstelleneigenschaften und anderen im plementierungsspezifischen Kriterien ausgewählt werden. In einigen Implementierungen stellt die Oberfläche 105 eine Oberfläche einer Reihe von Oberflächen dar, die jeweils dieselbe Auflösung und Bereichsunterteilung aufweisen, so dass gesagt werden kann, dass jedes Pixel (oder jeder Bereich von Pixeln) in der Oberfläche 105 ein entsprechendes Pixel (einen entsprechenden Bereich) in anderen Oberflächen in dieser Reihe von Oberflächen aufweist.
-
4 stellt Aspekte der Operation des Systems 3 in 1 dar, um Pixeldaten für die Oberfläche 105 von 3 zu erzeugen. 4 stellt die Pixelquelle 6 dar, die Informationen zur Wiedergabe einer Oberfläche von Pixeln empfängt, solche Informationen können Daten, Einrichtungs- und Befehlsinformationen wie z. B. Grundelemente, Texturen, Beleuchtungsinformationen, Schattierungen und so weiter umfassen. Die Ausgaben der Pixelquelle 6 umfassen Abbildungen 127 zwischen Bereichen der Oberfläche 105 (z. B. den Bereichen 110–114) und Speichersegment-Identifizierern (”Ref”), die zur Erzeugung einer Abbildung 120 für alle Bereiche der Oberfläche 105 gespeichert werden.
-
Pixeldaten 128 für Bereiche werden erzeugt und in Speichersegmenten von der Sammlung 12 gespeichert. Segmente, die aus der Sammlung 12 ausgewählt werden, um Pixel für Bereiche 110–114 zu speichern, werden aus der Liste 14 von freien Segmenten identifiziert. Speicheradressen können beispielsweise als Segmentidentifizierer oder Teile von Speicheradressen verwendet werden. Eine 32-Bit- oder 64-Bit-Speicheradresse kann beispielsweise verwendet werden. Ein 1080p-Rahmen weist 2,0736 Millionen Pixel auf. Für Bereiche von 64 Pixeln hätte ein Rahmen 32400 Bereiche und ein Satz von 32-Bit-Verweisen würde etwa 130 KBytes Speicher erfordern. Eine andere Implementierung besteht darin, eine Basisspeicheradresse für die Sammlung von Speichersegmenten zu identifizieren, wie z. B. 64 Megabytes, die eine 24- oder 32-Bit-Farbe speichern können (z. B. 1 Byte für jede von RGB und einen Alphakanal für jedes Pixel), und die Indikatoren als Versätze von dieser Basisspeicheradresse zu konstruieren. Obwohl eine byteweise Adressierung von 64 Megabytes einen Adressenraum von 26 Bits erfordert, weist jeder Bereich eine Größe von 256 Bytes (für 4-Byte-Pixel) auf. Folglich würden die unteren 8 Bits konstant bleiben und 18 Bits können für jeden Indikator verwendet werden. Ein Beispiel einer anderen Methode zur Darstellung einer Oberfläche besteht darin, eine vorherige Oberfläche zu identifizieren und für jeden Bereich, von dem festgestellt wird, dass er andere Pixeldaten als ein entsprechender Bereich der vorherigen Oberfläche enthält, eine explizite Identifikation dieses Bereichs und ein Speichersegment, das Pixeldaten für diesen Bereich speichert, vorzusehen. Diese Beispiele sind erläuternd und nicht begrenzend.
-
Bei einer Methode stellt die Oberfläche 105 eine Oberfläche einer Reihe von Oberflächen desselben Formats und derselben Auflösung dar, so dass Daten, die die Abbildung 120 darstellen, eine Reihe von Verweisen wie z. B. Speicherverweisen in einer vordefinierten Reihenfolge sein können und jeder Bereich nicht explizit in Verbindung mit einem Verweis auf das Speichersegment identifiziert werden muss, das seine Pixelinformationen speichert. Die Pixelsenke 107 kann folglich auf Pixeldaten für eine Oberfläche durch Lesen der Speichersegmente, die Pixeldaten für jeden Bereich der Oberfläche speichern, zugreifen; die Reihenfolge der Verweise auf die Speichersegmente definiert implizit eine relative räumliche Anordnung der Bereiche von Pixeldaten (wie z. B. für die Anzeige). Eine Konvention kann wiederum für das Format der Pixeldaten innerhalb jedes Bereichs festgelegt werden.
-
In Verbindung mit dem Schreiben von Pixeldaten in ausgewählte Speichersegmente wird ein Satz von Zählwerten 13 für die Speichersegmente unterhalten, der, wie nachstehend erläutert, verfolgt, wie viele Oberflächen jedes Speichersegment als Quelle von Pixeldaten verwenden.
-
Die Liste 14 von freien Segmenten wird aktualisiert, um die Speichersegmente zu entfernen, die verwendet werden, um Pixeldaten 128 zu speichern. Dieses Beispiel zeigt eine separate Liste 14 von freien Segmenten, die freie Segmente identifiziert, die bereit sind, Pixeldaten zu empfangen. Andere Implementierungen können jedoch die Zählwerte direkt verwenden und identifizieren, welche Speichersegmente Zählwerte mit einem Wert von 0 aufweisen, und zu verwendende Speichersegmente auf dieser Basis auswählen.
-
Folglich stellt 4 dar, dass die Abbildung 120 einen Satz von Speichersegmenten identifiziert, die die Pixeldaten speichern, die die Oberfläche 105 definieren, und gemeinsam die Abbildung 120 und dieser Satz von Speichersegmenten die wiedergegebenen Pixeldaten der Oberfläche 105 darstellen. Jede Abbildung, z. B. die Abbildung 120, kann durch einen Zeiger oder eine Speicheradresse identifiziert werden. Eine solche Adresse oder ein solcher Zeiger kann für die Pixelsenke 7 vorgesehen sein, die die dadurch identifizierte Abbildung verwendet, um irgendeine Anzahl von unterschiedlichen Speichersegmenten zu bestimmen, von denen Pixeldaten für eine Oberfläche abgerufen werden können. Folglich würde eine Umschaltkette für eine Dreifachpuffersituation eine Sequenz von Zeigern oder Speicheradressen für drei Abbildungen umfassen. Diese Methode passt das Streichen von einer der Oberflächen in der Sequenz durch Entfernen eines entsprechenden Zeigers oder einer entsprechenden Speicheradresse aus der Sequenz und Dekrementieren von Zählwerten, die Speichersegmenten zugeordnet sind, die Pixeldaten für diese Oberfläche speichern, an. Wie nachstehend beschrieben, wird daher, falls die Oberfläche 105 zur Anzeige ausgegeben oder bei der Weiterverarbeitung verwendet werden soll, dann auf die Abbildung 120 zugegriffen, um die Speichersegmente zu identifizieren, die die Pixeldaten für die Oberfläche 105 speichern, und dann werden die Pixeldaten aus diesen Speichersegmenten gelesen. Bevor solche Operationen beschrieben werden, wird jedoch die Speicherung von Daten, die weitere wiedergegebene Oberflächen darstellen, direkt nachstehend beschrieben.
-
5 stellt eine Oberfläche 106 als Sammlung von Bereichen von Pixeldaten dar, einschließlich Bereichen, die in der Oberfläche 105 existieren (d. h. die Pixeldaten in diesen Bereichen sind dieselben wie in den entsprechenden Bereichen der Oberfläche 105). Einige Bereiche der Oberfläche 106 unterscheiden sich jedoch von der Oberfläche 105 und insbesondere sind die Bereiche 116, 117 und 118 anders.
-
6 stellt dar, dass die Abbildung 120, die abbildet, wo Bereiche von Pixeldaten für die Oberfläche 105 gespeichert sind, auf eine Abbildung 121 kopiert wird. Ein freies Speichersegment für jeden Bereich von Pixeldaten, die von der Oberfläche 105 verschieden sind, wird aus der Liste 14 von freien Segmenten erhalten und Pixeldaten werden in diesen Speichersegmenten gespeichert. Die Abbildung 122 kann durch Aktualisieren der Abbildung 121 erzeugt werden, um die Identifizierer für Speichersegmente, die Pixeldaten für die Oberfläche 105 speichern, gegen die neu erhaltene Speichersegmente, die nun Pixeldaten für Bereiche der Oberfläche 106 speichern, auszutauschen. Wie dargestellt, weisen nun die Bereiche 116–118 entsprechende Speichersegmentverweise auf, die in der Abbildung 122 aufgelistet sind.
-
Außerdem werden Zählwerte 13 für Speichersegmente unterhalten, wie mit Bezug auf 7A erläutert. 7A stellt eine Sammlung 12 von Speichersegmenten dar, die gemeinsam Pixeldaten für wiedergegebene Oberflächen speichern. Nun speichern bestimmte Speichersegmente Pixeldaten für sowohl die Oberfläche 105 als auch für die Oberfläche 106, insbesondere sind die Pixeldaten in den Bereichen 110 und 111 dieselben und die Speichersegmente, die solche Daten speichern, die belegt wurden, als die Oberfläche 105 geschrieben wurde, werden beim Definieren der Oberfläche 106 verwendet. Die Zählwerte 13 werden inkrementiert, um widerzuspiegeln, dass die Daten für diese Speichersegmente nun verwendet werden, um zwei Oberflächen zu identifizieren. Zählwerte können in einigen Implementierungen in einem zweckgebundenen Speicherabschnitt bewahrt/gepflegt werden; ein Prozessor, der so ausgelegt ist, dass er zur Dreifachpufferung in der Lage ist, kann beispielsweise eine Speicherablage vorsehen, die groß genug ist, um eine 3-Tiefen-Umschaltkette (2-Bit-Zähler) für eine maximale unterstützte Auflösung und eine maximale Granularität der Bereichsgröße unterzubringen. In einer 1080p-Anzeige und 64-Pixel-Bereichen können beispielsweise etwa 64k Bits für einen solchen Speicher zugewiesen werden. In einigen Fällen kann die Bereichsgröße in der Architektur fest sein. Eine maximale Auflösung kann jedoch variabel sein. Wenn jedoch mehrere Anzeigen mit einer zweckgebundenen Umschaltkette unterstützt werden sollen oder andere Arbeitswiedergabeoberflächen in einem Speicher gemäß der Offenbarung dargestellt werden sollen, müsste ein solcher Speicher dementsprechend bemessen werden. In einigen Beispielen kann eine Speichersteuereinheit eine vorbestimmte Speichergröße zum Speichern von bis zu einer vorbestimmten Anzahl von Rahmen mit voller Auflösung zuweisen. Cachespeichertechniken können ebenso in einem solchen Speicher verwendet werden.
-
7B stellt ein Beispiel dar, in dem jedes Speichersegment aus mehreren Abschnitten bestehen kann, die potentiell in diskontinuierlichen Speicherbereichen angeordnet sind; insbesondere ist das Segment, das Pixeldaten für den Bereich 116 speichert, als aus Abschnitten 116A–C bestehend dargestellt.
-
8 stellt ein Beispielverfahren zum Speichern von Pixeldaten für wiedergegebene Oberflächen gemäß der Offenbarung dar. 8 stellt das Empfangen 205 von Quellendaten, um Pixeldaten bei der Wiedergabe einer Oberfläche zu erzeugen, und das Erzeugen 207 von solchen Pixeldaten dar. In einigen Implementierungen können die Pixeldaten in Bereichen wie z. B. den für die Oberflächen 105 und 106 vorstehend dargestellten erzeugt werden. Falls die Pixeldaten nicht erzeugt werden oder ansonsten in Bereiche unterteilt werden, dann werden die Pixeldaten in Bereiche unterteilt 209. Bei 211 wird eine Entscheidung getroffen, ob die wiedergegebene Oberfläche unter Verwendung von Daten von einer vorher wiedergegebenen Oberfläche dargestellt werden soll. Wenn Bereiche von Pixeldaten der wiedergegebenen Oberfläche dieselben wie eine vorher wiedergegebene Oberfläche sind, dann können im Allgemeinen Bereiche von dieser vorher wiedergegebenen Oberfläche beim Definieren der wiedergegebenen Oberfläche verwendet werden, und, wie vorher eingeführt, wird eine Abbildung (z. B. Abbildung 120) für die vorherige Oberfläche kopiert (213) und für jeden Bereich der wiedergegebenen Oberfläche wird eine Bestimmung (215), ob die Pixeldaten dieselben wie oder von einem entsprechenden Bereich der vorherigen Oberfläche verschieden sind, durchgeführt. Falls die Pixeldaten für diesen Bereich nicht geändert sind (217), dann wird die Abbildung für die wiedergegebene Oberfläche mit einem Identifizierer für das Speichersegment, in dem die Pixeldaten für den unveränderten Bereich gespeichert werden sollen, aktualisiert (231) und bei 232 werden die Zählwerte 13 aktualisiert.
-
Falls sich Pixeldaten in dem Bereich geändert haben, dann wird bei 225 ein Speichersegment identifiziert (wie z. B. aus der Liste 14 von freien Segmenten) und verwendet, um die wiedergegebenen Pixeldaten für diesen Bereich zu schreiben (227). Bei 229 wird die Abbildung für die wiedergegebene Oberfläche aktualisiert, um den Bereich und das Speichersegment, das Pixeldaten für diesen Bereich speichert, zu korrelieren. Bei 230 werden Zählwerte 13 aktualisiert.
-
In jedem Fall kann ein Fortschritt (233) zu einem anschließenden zu betrachtenden Bereich durchgeführt werden. Jeder Bereich der wiedergegebenen Oberfläche kann gemäß dem vorstehend beschriebenen Ablauf verarbeitet werden, was durch eine Schleife zu 215 dargestellt ist, um den anschließenden Bereich zu betrachten. Im Zusammenhang mit einer Mehrfachpufferung (z. B. Dreifachpufferung) wird, um eine der Oberflächen zu streichen, eine Speicheradresse oder ein Zeiger für die Abbildung für diese Oberfläche aus einer Sequenz entfernt und die Zählwerte für Speichersegmente, die Bereiche von Pixeldaten in dieser gestrichenen Oberfläche gespeichert haben.
-
Falls jedoch Pixeldaten für die vorherige Oberfläche nicht beim Definieren der wiederzugebenden Oberfläche verwendet werden sollen, dann werden bei 219 Speichersegmente zum Speichern von Bereichen von Pixeldaten erhalten, bei 221 werden Pixeldaten für Bereiche in entsprechende Speichersegmente geschrieben und bei 223 wird eine Abbildung zwischen den Bereichen und den Speichersegmenten erzeugt.
-
Folglich stellt 8 dar, dass für eine gegebene wiedergegebene Oberfläche (oder allgemeiner für eine durch gespeicherte Pixeldaten darzustellende Oberfläche) diese Oberfläche unter Verwendung von Speichersegmenten, die Pixeldaten für Bereiche einer existierenden Oberfläche speichern, mit der Speicherung von Pixeldaten, die von dieser existierenden Oberfläche verschieden sind, und einer Abbildung, die erläutert, wo jeder Bereich von Pixeldaten zu finden ist, dargestellt werden kann. In diesen Beispielen werden Bereiche von Pixeldaten für eine existierende Oberfläche verwendet, um eine wiedergegebene Oberfläche zu definieren; in anderen Implementierungen können jedoch Pixeldaten von mehreren existierenden Oberflächen verwendet werden.
-
Eine Vielfalt von Methoden kann implementiert werden, um festzustellen, ob ein gegebener Bereich andere Pixeldaten im Vergleich zu einem entsprechenden Bereich einer existierenden Oberfläche umfasst. In einem Beispiel kann eine zyklische Redundanzprüfung (CRC) oder ein Hash der Pixeldaten im entsprechenden Bereich erzeugt und gespeichert werden. Pixeldaten und eine CRC für einen Bereich einer anschließenden Oberfläche können erzeugt werden. Die CRCs können verglichen werden, und falls sie nicht übereinstimmen, dann werden die Bereiche als unterschiedlich bestimmt. In einem anderen Beispiel kann ein pixelweiser Vergleich durchgeführt werden, wie z. B. in einer Hardware-EXKLUSIV-ODER-Einheit. Eine noch andere Heuristik kann implementiert werden. Beispielsweise kann es Methoden geben, um im Voraus zu bestimmen, ob gegebene Bereiche einer Oberfläche garantiert nicht unterschiedlich sind. Im Zusammenhang mit der Zusammensetzung von zwei Oberflächen (z. B. wenn eine Benutzerschnittstelle über einen Hintergrund wie z. B. ein Bild überlagert wird) kann die Benutzerschnittstelle beispielsweise bekannte Grenzen aufweisen, so dass Bereiche von Pixeldaten außerhalb der bekannten Grenzen unverändert sind. Anwendungsprogrammierungsschnittstellenaufrufe können beispielsweise Informationen über Grenzen einer durch den Aufruf betroffenen Oberfläche aufweisen, wie z. B. ein glscissor()-Aufruf, was den Ausschluss von Bereichen von Pixeldaten, die nicht von solchen Schnittstellenaufrufen betroffen sind, ermöglichen würde.
-
In einem speziellen Zusammenhang mit Wiedergabearchitekturen, die Kachelmethoden verwenden, wobei eine Geometrie, von der festgestellt wird, dass sie in einer Kachel des Bildschirmraums existiert, zusammen verarbeitet wird (anstatt die Geometrie in der exakten Eingabereihenfolge ungeachtet dessen zu verarbeiten, wo jedes Element der Geometrie auf den Bildschirmraum abgebildet wird). In einem Beispiel erhält, wenn eine Pixelquelle Pixeldaten für eine Reihe von Oberflächen erzeugt, wobei diese Oberflächen in mehrere Kacheln organisiert sind, die Pixelquelle eine Schreibsperre an einer Speicherstelle, die Pixeldaten für jede Kachel speichern soll, bevor die Pixelquelle diese Pixeldaten schreibt. Während der Erzeugung der Pixeldaten schreibt die Pixelquelle oder ein anderes Element im System Pixeldaten in jeweilige Speicherstellen für irgendeine Kachel, die Pixeldaten aufweist, die von einer entsprechenden Kachel in einer vorher wiedergegebenen Oberfläche verschiedene sind. Das Erhalten der Schreibsperre durch die Pixelquelle ist folglich ein Hinweis an eine Pixelsenke, dass die Pixeldaten in dieser speziellen Kachel aktualisiert wurden und gelesen werden müssen, um diese Oberfläche (z. B. zur Anzeige) zusammenzusetzen. Für andere Speicherstellen, für die die Pixelquelle keine Schreibsperre erhalten hat, kann jedoch eine Pixelsenke diese Informationen verwenden, um abzuleiten, dass die Pixeldaten dieselben wie eine vorher wiedergegebene Oberfläche sind, und erhält Pixeldaten für jene Kacheln von entsprechenden Kacheln der vorher wiedergegebenen Oberfläche.
-
In einer Implementierung kann ein Satz von Speicherstellen für die ganze Oberfläche vorab zugewiesen werden, aber nur mit Pixeldaten für Kacheln belegt werden, die geänderte Pixeldaten aufweisen. Als Nebenprodukt einer solchen Zuweisung kann eine Entsprechung zwischen Kacheln und Speicherstellen hergestellt werden und durch (eine) Pixelquelle(n) und Pixelsenke(n) darauf verwiesen werden. In einer anderen Implementierung werden Speicherstellen für alle Kacheln eines Rahmens nicht vorab zugewiesen; vielmehr können sie nach Bedarf zugewiesen werden. Um variable Kachelschreibanforderungen und die variable Wartezeit der Zuweisung zu berücksichtigen, kann eine Teilmenge von vorab zugewiesenen Speicherstellen aufrechterhalten werden (z. B. können 4, 8 oder 16 Stellen aufrechterhalten werden). Im Zuweisungsprozess werden Seitenbanddaten unterhalten, die identifizieren, von welcher Kachel Pixeldaten in jeder Stelle gespeichert werden. In der letzteren Implementierung ist die Tatsache, dass der Speicher für Pixeldaten für eine identifizierte Kachel zugewiesen wurde, ein Hinweis an (eine) Pixelsenke(n), dass die Pixeldaten für diese Kachel aktualisiert wurden.
-
Die obige Beschreibung zeigt, wie eine Pixelquelle Daten erzeugen kann, die wiedergegebene Oberflächen in einer Weise beschreiben, die Lese- und Schreibspeicherbandbreite bewahrt und insgesamt die Effizienz von Operationen erhöhen kann, wie z. B. Zusammensetzungsoperationen. Ein ganzer Bereich eines Ausgangsrahmens kann beispielsweise zusammengesetzt werden oder nur ein Bereich, von dem bekannt ist, dass er eine gewisse Möglichkeit einer Modifikation aufweist. Als Beispiel können während der Wiedergabe einer Oberfläche oder eines Teils davon Zusammensetzungsdaten, die sich auf jedes Pixel auswirken, aufrechterhalten werden (z. B. Tiefensortierungs- und Mischoperationen). Während der Zusammensetzung wie z. B. während der Tiefensortierung (ohne Durchsichtigkeit) kann eine Quelle von Bilddaten für jedes Pixel bestimmt werden. In einer Fensterumgebung wird beispielsweise, ob ein Pixel von einem gegebenen Fenster oder einem Hintergrund beschaffen werden soll, bestimmt. Für jeden Bereich kann ein Flag unterhalten werden, das einen laufenden Zähler der Quelle von Pixeldaten für Pixel in diesem Bereich beibehält. Falls festgestellt wird, dass sich irgendein Pixel von einem entsprechenden Pixel unterscheidet, dann kann der Bereich, der dieses Pixel enthält, gekennzeichnet werden, so dass Pixeldaten für diesen Bereich gespeichert werden können. In einigen Implementierungen kann, welche Bildkomponenten sich auf ein gegebenes Pixel oder einen Satz von Pixeln auswirken, zu verschiedenen Zeiten verfügbar sein. In einem 8×8-Block kann beispielsweise ein Verweis auf eine sichtbare Oberfläche für jedes Pixel verfügbar sein. Beim Zusammensetzen eines Fensters über einem Hintergrund können beispielsweise sowohl das Fenster als auch der Hintergrund durch jeweilige Paare von Dreieckgrundelementen im Speicher dargestellt werden, die auf eine Textur abgebildet werden, die das Fenster oder den Hintergrund darstellt. Diese Daten können vorher durch den Prozessor 75 oder durch den Videodecodierer 70 erzeugt worden sein oder von irgendeiner anderen Quelle zur Verfügung gestellt werden. Grundelemente für jedes des Fensters und des Hintergrundes können Identifizierer innerhalb eines bestimmten Bereichs aufweisen und eine Hardwaremaske kann bestimmen, ob alle Pixelidentifizierer in einer Pixelzeile einen Identifizierer in einem gegebenen Bereich aufweisen oder nicht (z. B. UND-Operation von Ausgaben einer bitweisen Maske jeder Pixel-ID).
-
Eine Quellenidentifikation kann auch während der Texturierung als Nebenprodukt der Bestimmung einer Texturquelle durchgeführt werden. In vielen Fällen ist die Texturierung ein pixelweiser Prozess, so dass, wenn jedes Pixel texturiert wird, das Quellenflag aktualisiert werden kann. Implementierungen können ein frühes Aus für jede Quellenprüfung haben; falls beispielsweise irgendein Pixel oder eine Gruppe von Pixeln als eine Aktualisierung in Bezug auf ein Referenzbild erfordernd bestimmt wurde, dann müssen die restlichen Pixel in dieser Kachel nicht geprüft werden, da Pixeldaten für die ganze Kachel ausgegeben werden, selbst falls ein Pixel unterschiedlich ist.
-
9 und 10 werden verwendet, um einen Beispielprozess zum Zugreifen auf eine Oberfläche von Pixeldaten, die gemäß der Offenbarung dargestellt sind, zu erläutern. Bei 305 wird eine Bestimmung zum Zugreifen oder Ausgeben einer Oberfläche durchgeführt (z. B. die Oberfläche 105, wie in 10 wiedergegeben), um beispielsweise eine Zusammensetzungsoperation durchzuführen oder um einen anzeigbaren Rahmen auszugeben und zu erzeugen. Bei 307 umfasst der Prozess ein Auswählen und Abrufen der Abbildung für die Oberfläche (z. B. Abbildung 120). Bei 309 werden unter Verwendung der Abbildung Speichersegmente, die Pixeldaten für die Oberfläche speichern, identifiziert. Durch Verweis auf die Abbildung 120 werden beispielsweise Speichersegmente für Bereiche 110–114 identifiziert und bei 311 werden Pixeldaten für diese Bereiche aus der Sammlung 12 abgerufen. Bei 313 wird jeder Zähler (der Zähler 13) für ein Speichersegment, das bei 311 gelesen wurde, dekrementiert. Bei 315 werden irgendwelche Zähler, die 0 erreicht haben, identifiziert (z. B. Zähler für Speichersegmente, die Pixeldaten für Bereiche 112–114 speichern) und befreit, damit sie zur Liste 14 von freien Segmenten zurückgegeben werden.
-
Falls die Pixeldaten für die Anzeige gelesen werden, können weitere Beispielprozessteile bei 319 das vorübergehende Speichern der Pixeldaten umfassen und bei 320 können diese Pixeldaten in einem für die Anzeige geeigneten Format ausgegeben werden (wie z. B. in 10 gezeigt). Eine Anzeigesteuereinheit kann den Prozess von 9 implementieren; z. B. kann die Pixelsenke 7 eine Anzeigesteuereinheit umfassen. In anderen Beispielen kann der Prozess von 9 durch einen Prozessor wie z. B. einen Graphikprozessor implementiert werden, um Pixeldaten für eine Oberfläche zu erhalten und weitere Graphikoperationen unter Verwendung der Pixeldaten durchzuführen, und in noch anderen Implementierungen können sowohl ein Graphikprozessor als auch eine Anzeigesteuereinheit einen Prozess gemäß 9 implementieren.
-
11 stellt Elemente eines Beispielsystems dar, in dem offenbarte Aspekte ausgeführt werden können. In 11 ist die Pixelquelle 6 (aus 1) durch den Prozessor 75 dargestellt und die Pixelsenke 7 ist durch die Anzeigesteuereinheit (85) dargestellt, obwohl, wie vorstehend offenbart, der Prozessor 75 ebenso auch als Pixelsenke funktionieren kann, und andere Quellen von Pixeldaten als der Prozessor 75 vorliegen können. Außerdem können ein Videodecodierer 70 und ein Speicher 10 mit dem Prozessor 75 über Busse 20 gekoppelt werden. Die Anzeige 25 kann mit der Anzeigesteuereinheit 85 gekoppelt werden.
-
Eine API 50 und ein Treiber 52 für den Prozessor 75 können vorgesehen sein, um den Prozessor 75 mit Software wie z. B. einem Betriebssystem 45 und einer Anwendung 40 über eine Schnittstelle zu koppeln. Die Anwendung 40 kann Eingaben 35 empfangen und Daten, eine Einrichtung und Befehle erzeugen, die für die Wiedergabe einer Oberfläche verwendet werden. Andere Wiedergabeeingaben können Beschleunigungsstrukturen 66, Texturen 67, eine Geometrie 68 und einen Schattierungscode 69 umfassen, auf die durch den Treiber 52 oder durch die Anwendung 40 oder beide zugegriffen werden kann. Das Betriebssystem 45 kann auch Eingaben von der Benutzerschnittstelle 30 empfangen, die beispielsweise eine oder mehrere eines visuellen UI-Elements 31, einer Tastatur 32 und einer Maus 33 umfassen kann. Die Anwendung 40 kann beispielsweise mit dem Prozessor 75 unter Verwendung von einem oder mehreren von OpenGL®, OpenCL®, OpenRL®, DirectX® oder einer anderen geeigneten API über eine Schnittstelle gekoppelt werden. Der Treiber 52 kann API-Aufrufe von der Anwendung 40 empfangen und solche Aufrufe in ein Rechen-Setup umwandeln, das für den Prozessor 75 geeignet ist.
-
Die Anwendung 40 kann ein OS 45 betreiben, das API-Aufrufe vorsehen kann, die eine Größenänderung und Bewegung eines Fensters innerhalb eines verfügbaren Bildschirmraums ermöglichen können, und kann Effekte wie z. B. Durchsichtigkeit vorsehen. An sich kann der Fensterprozess 47 Orte und Abmessungen für alle Fenster und beliebige andere Elemente, die zur Anzeige verfügbar sind, verfolgen, wie z. B. Bildsymbole auf einem Desktop, einen Bildschirmschoner, einen Bildschirmhintergrund und so weiter.
-
Die Anwendung 40 kann Eingaben empfangen, die von UI-Elementen erzeugt werden, einschließlich beispielsweise eines visuellen UI-Elements 25 (z. B. ein Menü auf dem Bildschirm, das eine Berührungseingabe hervorrufen kann), einer Tastatur 26 oder einer Maus 27. Solche Eingaben können durch das OS 45 verarbeitet werden und auf die Anwendung 40 gerichtet werden. Die Anwendung 40 kann auch eine API verwenden, um mit dem OS 45 zu kommunizieren. Das OS 45 kann eine Vielfalt von verschiedenen Funktionen für die Anwendung 40 durch eine solche API zur Verfügung stellen.
-
Der Prozessor 75 kann Oberflächen unter Verwendung einer verzögerten Schattierungsmethode wiedergeben, wobei eine Texturierung und andere pixelorientierte Operationen bis nach Bestimmungen der sichtbaren Oberfläche verzögert werden. Bereiche einer Oberfläche (z. B. Oberfläche 105) können in einer Wiedergabevorrichtung auf Kachelbasis wiedergegeben werden; in einem Beispiel besteht eine 1:1-Entsprechung zwischen Kacheln und Bereichen.
-
Die Anzeigesteuereinheit 85 liest Speichersegmente, die unter Verwendung von Abbildungen identifiziert werden, von denen jedes einer zum Lesen verfügbaren Oberfläche entspricht. Die Anzeigesteuereinheit 85 kann einen temporären Puffer aufweisen oder steuern, der verfügbar ist, um Pixeldaten aus Speichersegmenten zusammenzusetzen, die gelesen werden. In einigen Vorrichtungen kann die Anzeigesteuereinheit 85 auch Funktionen wie z. B. Skalierung, Drehung, Beschneidung und Mehrfachmonitorbetrieb durchführen können. Daher impliziert die Offenbarung nicht, dass von der Anzeigesteuereinheit 85 gelesene Pixeldaten unmodifiziert angezeigt werden müssen. Einige Implementierungen können eine Anzeigesteuereinheit schaffen, die gemäß der Beschreibung arbeitet, die jedoch einen dauerhaften Speicher steuern kann, der bei einer Anzeige resident ist (z. B. Zusatzspeicher für eine Anzeige wie z. B. eine LCD). Eine solche Anzeigesteuereinheit kann beispielsweise bewirken, dass Bereiche eines solchen Zusatzspeichers für einen speziellen Rahmen aktualisiert werden, während andere Bereiche des Speichers für diesen Rahmen nicht geändert werden.
-
12 stellt Aspekte einer Beispielkonstruktion des Prozessors 75 mit einem gewissen Zusammenhang dar. Der Prozessor 75 kann einen programmierbaren Rechencluster 156, einen Satz von Coprozessoren 157 und ein Steuerprogramm (Scheduler) 155 umfassen. Jede von diesen Einheiten oder ein gewisser Teil davon kann mit einer Cache-Hierarchie 150 kommunizieren, die wiederum mit einem Speicherbus 160 kommuniziert. Eine Vielfalt von Datenmastern können eine zu planende und im Prozessor 75 auszuführende Berechnung einrichten; Beispiele umfassen einen Scheiteldatenmaster 151, einen Pixeldatenmaster 152 und einen Universaldatenmaster 153. Eine Hauptrechner-Schnittstelle 158 kann mit dem Prozessor 75 durch eine Steuerung und einen Bus 161 kommunizieren. Der Speicherbus 160 und der Steuer- und Registerbus 161 können Teil der Busse 20 von 1 sein. Eine Systemspeicherschnittstelle 162 koppelt den Speicherbus 160 über eine Schnittstelle mit einer Systemspeicher-Hierarchie 164.
-
Jedes der in 12 dargestellten Elemente kann Bestandteilselemente aufweisen, die der Deutlichkeit halber nicht dargestellt sind. Ein programmierbarer Rechencluster 156 kann beispielsweise mehrere Rechencluster jeweils mit einem lokalen Steuerprogramm aufweisen und das Steuerprogramm 155 kann global eine Berechnung unter diesen Clustern zuweisen. Coprozessoren 170 können Texturcoprozessoren oder Coprozessoren für andere Arten von Algorithmen (oder Teile davon) umfassen, die vorteilhafterweise in einer Hardware mit fester Funktion im Gegensatz zur Ausführung im programmierbaren Cluster 165 implementiert werden können. Der Speicher 10 kann beispielsweise durch eine Anzahl von verschiedenen physikalischen Speichern gebildet sein, einschließlich Arbeitsspeicher, die in den Figuren nicht explizit identifiziert sind. Die vorstehend beschriebenen Zählwerte können beispielsweise in einem für den Prozessor 75 lokalen Arbeitsspeicher gespeichert werden, der eine Hardware mit fester oder teilweise fester Funktion aufweisen kann, die diese Zählwerte bewahrt/pflegt.
-
Für die Deutlichkeit der Beschreibung wurden herkömmliche Elemente nicht beschrieben oder wurden abstrakt beschrieben. Die beschriebene Funktionalität kann für verschiedene Implementierungen unterschiedlich implementiert werden, so dass verschiedene Implementierungen Komponenten aufweisen können, die verschiedene und unterschiedliche Gruppierungen von Funktionalität implementieren. Als Beispiel kann der Speicher, der Pixeldaten speichert, in einem Speicher implementiert werden, der mit einem Speicher gemeinsam genutzt wird, der Berechnungsthreads und für andere Zwecke zugewiesen ist. In einigen Implementierungen kann ein zweckgebundener Videospeicher zum Speichern von Pixeldaten vorhanden sein, während ein Arbeitsspeicher für Anwendungen und Threads in einem separaten Speicher oder separaten Speichern vorgesehen sein kann. Die Speicher können gemeinsame Elemente einer Speicherhierarchie verwenden, wie z. B. einen gemeinsam genutzten Hauptspeicher. Die verschiedenen dargestellten Datenstrukturen und Datentypen können sich auch im gleichen physikalischen Speicher befinden.
-
Quellen von solchen Daten können Netzverbindungen und Puffer innerhalb Netzvorrichtungen umfassen. Die vorstehend offenbarten Beispiele bezogen sich am direktesten auf eine Situation, in der ein Graphikprozessor wie z. B. ein 3-D-Graphikprozessor (der durch eine oder mehrere einer Graphikprozessoreinheit oder eines Universalprozessors, der dazu programmiert ist, eine Graphikverarbeitung durchzuführen, implementiert werden kann), eine Pixelquelle ist und wobei eine Anzeigesteuereinheit eine Pixelsenke ist.
-
In verschiedenen Ausführungsformen in Bezug auf eine Graphikverarbeitungseinheit können Pixelquellen einen Videodecodierer (z. B. Verarbeitungselemente, die einen komprimierten Videostrom eingeben und Oberflächen von Pixeldaten zur Anzeige ausgeben können) und einen drahtlosen Anzeigeempfänger umfassen. Drahtlose Anzeigesender können Pixelsenken sein. In einigen Implementierungen können sich Pixelquellen und -senken innerhalb desselben Systems oder innerhalb desselben Systems auf einem Chip oder derselben Vorrichtung befinden, während in anderen Implementierungen Pixelquellen und Pixelsenken durch ein oder mehrere Netze getrennt sein können oder zeitlich getrennt sein können oder Kombinationen davon. Ein Graphikprozessor und ein Videodecodierer können beispielsweise durch Schreiben von Pixeldaten zu einem Zeitpunkt und Zurücklesen dieser Pixeldaten zu einem späteren Zeitpunkt sowohl eine Pixelquelle als auch -senke sein.
-
Wie aus der Offenbarung ersichtlich wäre, können einige der offenbarten Komponenten und Funktionalität in Hardware, Software, Firmware oder einer Kombination davon implementiert werden. Falls sie in Firmware und/oder Software implementiert werden, können die Funktionen als ein oder mehrere Befehle oder ein Code auf einem maschinenlesbaren Medium gespeichert werden. In einem Beispiel sind die Medien nichtflüchtig. Beispiele umfassen ein computerlesbares Medium, das mit einer Datenstruktur codiert ist, und ein computerlesbares Medium, das mit einem Computerprogramm codiert ist. Andere Arten von Medien umfassen Übertragungsmedien. Ein nichtflüchtiges Medium kann ein beliebiges konkretes Medium sein, auf das durch eine Maschine zugegriffen werden kann. Als Beispiel und nicht zur Begrenzung können Medien RAM, ROM, EEPROM, CD-ROM oder einen anderen optischen Plattenspeicher, einen Magnetplattenspeicher oder andere magnetische Speichervorrichtungen oder irgendein anderes Medium, das verwendet werden kann, um einen gewünschten Programmcode in Form von Befehlen oder Datenstrukturen zu speichern, und auf das durch eine Maschine zugegriffen werden kann, umfassen.
-
Zusätzlich zu Hardware-Ausführungsformen (z. B. in oder mit einer Zentraleinheit (”CPU”), einem Mikroprozessor, Mikrocontroller, Digitalsignalprozessor, Prozessorkern, System auf einem Chip (”SOC”) oder irgendeiner anderen programmierbaren oder elektronischen Vorrichtung gekoppelt) können Implementierungen auch in Software (z. B. computerlesbarer Code, Programmcode, Befehle und/oder Daten, die in irgendeiner Form angeordnet sind, wie z. B. Quellen-, Objekt- oder Maschinensprache) verkörpert sein, die beispielsweise in einem vom Computer verwendbaren (z. B. lesbaren) Medium angeordnet ist, das dazu ausgelegt ist, die Software zu speichern. Eine solche Software kann beispielsweise die Funktion, Herstellung, Modellierung, Simulation, Beschreibung und/oder Prüfung der hier beschriebenen Vorrichtungen und Verfahren ermöglichen. Dies kann beispielsweise durch die Verwendung von allgemeinen Programmiersprachen (z. B. C, C++), GDSII-Datenbanken, Hardwarebeschreibungssprachen (HDL), einschließlich Verilog HDL, VHDL, SystemC Register Transfer Level (RTL) und so weiter, oder andere verfügbare Programme, Datenbanken und/oder Schaltungs-(d. h. schematische)Erfassungswerkzeuge durchgeführt werden. Ausführungsformen können in einem maschinennutzbaren Medium angeordnet sein, einschließlich nichtflüchtiger Speicher wie z. B. Speicher unter Verwendung eines Halbleiter-, Magnetplatten-, optischen Platten-, Eisen-, Widerstandsspeichers, Flash-Speichers und so weiter. Auf solche maschinenlesbaren Informationen kann über Netze von einem am Netz angebrachten Speicher, von Speicherbereichsnetzen, von entfernten Dateiservern und so weiter zugegriffen werden.
-
Verschiedene erläuternde Komponenten, Blöcke, Module, Schaltungen und Schritte wurden vorstehend im Allgemeinen hinsichtlich ihrer Funktionalität beschrieben. Ob eine solche Funktionalität als Hardware oder Software implementiert wird, hängt von der speziellen Anwendung und Konstruktionseinschränkungen, die dem Gesamtsystem auferlegt sind, ab. Der Fachmann kann die beschriebene Funktionalität in variierenden Weisen für jede spezielle Anwendung implementieren, aber solche Implementierungsentscheidungen sollten nicht dahingehend interpretiert werden, dass sie eine Abweichung vom Schutzbereich der vorliegenden Erfindung verursachen.
-
Die Beschreibung der Aspekte und Merkmale ist vorgesehen, um irgendeinem Fachmann auf dem Gebiet zu ermöglichen, die Systeme, Vorrichtungen herzustellen und zu verwenden und die offenbarten Verfahren durchzuführen. Verschiedene Modifikationen sind für den Fachmann auf dem Gebiet leicht ersichtlich und die in diesem Dokument beschriebenen Prinzipien können auf andere Aspekte angewendet werden, ohne vom Gedanken oder Schutzbereich der Offenbarung abzuweichen. Folglich soll die Beschreibung nicht die Ansprüche begrenzen. Vielmehr soll den Ansprüchen ein Umfang zugestanden werden, der mit den hier offenbarten Prinzipien und neuen Merkmalen konsistent ist.
-
In Bezug auf Beispielprozesse umfassen die Zeichnungen eine relative Ordnung von Prozesskomponenten nur als Hilfe beim Verständnis der Beschreibung. Eine solche relative Ordnung ist keine implizite Offenbarung irgendeiner spezifischen Begrenzung für die Ordnung oder Anordnung von Prozesskomponenten. Im Allgemeinen können Prozessbegrenzungen sequentiell ausgetauscht werden, ohne vom Schutzbereich der Offenbarung abzuweichen, und Mittel-plus-Funktions-Bestimmungen in den Ansprüchen sollen die beschriebenen Strukturen als die angeführte Funktion durchführend abdecken, die nicht nur strukturelle Äquivalente, sondern auch äquivalente Strukturen umfassen.
-
Ferner wurden bestimmte Unterteilungen von Komponenten und Prozessen ausgewählt, aber diese Implementierungen gemäß der Offenbarung müssen diese Unterteilungen nicht aufrechterhalten, und können Funktionen anders zuweisen oder gruppieren. Eine solche Funktionalität kann beispielsweise anders verteilt sein oder in anderen Komponenten als, zusätzlich zu oder weniger als den hier identifizierten durchgeführt werden. Vielmehr sind die beschriebenen Merkmale und Schritte als Beispiele von Komponenten von Systemen und Verfahren innerhalb des Schutzbereichs der beigefügten Ansprüche offenbart.