DE102015109559A1 - Zuweisen von primitiven zu kacheln in einem graphikverarbeitungssystem - Google Patents

Zuweisen von primitiven zu kacheln in einem graphikverarbeitungssystem Download PDF

Info

Publication number
DE102015109559A1
DE102015109559A1 DE102015109559.9A DE102015109559A DE102015109559A1 DE 102015109559 A1 DE102015109559 A1 DE 102015109559A1 DE 102015109559 A DE102015109559 A DE 102015109559A DE 102015109559 A1 DE102015109559 A1 DE 102015109559A1
Authority
DE
Germany
Prior art keywords
primitives
tile
area
primitive
depth
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102015109559.9A
Other languages
English (en)
Inventor
Xile Yang
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Imagination Technologies Ltd
Original Assignee
Imagination Technologies Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Imagination Technologies Ltd filed Critical Imagination Technologies Ltd
Publication of DE102015109559A1 publication Critical patent/DE102015109559A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/20Perspective computation
    • G06T15/205Image-based rendering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/40Filling a planar surface by adding surface attributes, e.g. colour or texture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/04Texture mapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/30Clipping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/40Hidden part removal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/40Hidden part removal
    • G06T15/405Hidden part removal using Z-buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/10Constructive solid geometry [CSG] using solid primitives, e.g. cylinders, cubes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/30Polynomial surface description
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T19/00Manipulating 3D models or images for computer graphics
    • G06T19/20Editing of 3D images, e.g. changing shapes or colours, aligning objects or positioning parts
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T7/00Image analysis
    • G06T7/10Segmentation; Edge detection
    • G06T7/13Edge detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T7/00Image analysis
    • G06T7/50Depth or shape recovery
    • G06T7/507Depth or shape recovery from shading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T7/00Image analysis
    • G06T7/60Analysis of geometric attributes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/04Indexing scheme for image data processing or generation, in general involving 3D image data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/08Indexing scheme for image data processing or generation, in general involving all processing steps from image acquisition to 3D model generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/10Image acquisition modality
    • G06T2207/10004Still image; Photographic image
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/10Image acquisition modality
    • G06T2207/10028Range image; Depth image; 3D point clouds
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20004Adaptive image processing
    • G06T2207/20008Globally adaptive
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20021Dividing image into blocks, subimages or windows
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20112Image segmentation details
    • G06T2207/20132Image cropping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20172Image enhancement details
    • G06T2207/20192Edge enhancement; Edge preservation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/22Cropping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/36Level of detail
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2215/00Indexing scheme for image rendering
    • G06T2215/12Shadow map, environment map
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2219/00Indexing scheme for manipulating 3D models or images for computer graphics
    • G06T2219/20Indexing scheme for editing of 3D models
    • G06T2219/2016Rotation, translation, scaling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2219/00Indexing scheme for manipulating 3D models or images for computer graphics
    • G06T2219/20Indexing scheme for editing of 3D models
    • G06T2219/2021Shape modification

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • Geometry (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Algebra (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Physics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Architecture (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Generation (AREA)
  • Controls And Circuits For Display Device (AREA)

Abstract

Kachelungseinheit, die in einem Graphikverarbeitungssystem, dessen Rendering-Raum in mehrere Kacheln unterteilt ist, Primitive Kacheln zuweist. Ein Primitiv wird einer Kachel dadurch zugewiesen, dass eine Primitiv-ID des Primitivs in eine Anzeigeliste für die Kachel aufgenommen wird. Falls ein Primitiv oder ein Netz von Primitiven eine Kachel in der Weise vollständig bedeckt, dass alle vorhergehenden Primitive in der Kachel verborgen (d. h. verdeckt) sind, kann ein Startzeiger der Anzeigeliste verschoben werden, um dadurch die verborgenen Primitive zu überspringen. Auf diese Weise ruft ein Modul zur Entfernung verdeckter Flächen (HSR-Modul) die Primitive, die schließlich von dem Primitiv oder Netz, das das Gebiet vollständig bedeckt, verborgen würden, nicht ab. Somit verringert dieses Verfahren die Anzahl von Primitiven, die von dem HSR-Modul abgerufen werden.

Description

  • Hintergrund
  • Graphikverarbeitungssysteme werden zum Verarbeiten von Graphikdaten verwendet. Zum Beispiel kann es notwendig sein, dass eine Anwendung, die in einem Computersystem ausgeführt wird, ein Bild einer dreidimensionalen Szene (3D-Szene) zur Anzeige für einen Nutzer rendert. Die Anwendung kann Graphikdaten, üblicherweise in Form einer Folge von Primitiven, an ein Graphikverarbeitungssystem senden, das das Bild der Szene gemäß den Primitiven rendern kann.
  • 1 zeigt einige Elemente eines Graphikverarbeitungssystems 100, das zum Rendern eines Bilds einer 3D-Szene verwendet werden kann. Das Graphikverarbeitungssystem 100 umfasst eine Graphikverarbeitungseinheit (GPU) 102 und zwei Abschnitte eines Speichers 104 1 und 104 2. Es wird angemerkt, dass die zwei Abschnitte des Speichers 104 1 und 104 2 Teile desselben physischen Speichers sein können oder nicht sein können und dass sich beide Speicher 104 1 und 104 2 ”chipextern”, d. h. nicht auf demselben Chip wie die GPU 102, befinden können. Die Kommunikation zwischen den Speichern (104 1 und 104 2) und der GPU 102 kann über einen Kommunikationsbus im System 100 stattfinden.
  • In dem in 1 gezeigten Beispiel ist das Graphikverarbeitungssystem 100 ein kachelbasiertes System mit verzögertem Rendering, d. h., der Rendering-Raum des Systems 100 wird in mehrere Kacheln geteilt und an einem Primitivfragment wird eine Entfernung verdeckter Flächen ausgeführt, bevor an dem Primitivfragment eine Texturierung und/oder Schattierung ausgeführt wird, um die Szene zu rendern. Allerdings können Graphikverarbeitungssysteme in anderen Beispielen keine kachelbasierten Systeme und/oder keine Systeme mit verzögertem Rendering sein. Die GPU 102 umfasst ein Vorverarbeitungsmodul 106, eine Kachelungseinheit 108 und ein Rasterungsmodul 110, wobei das Rasterungsmodul 110 ein Modul 112 zur Entfernung verdeckter Flächen (HSR-Modul) und ein Texturierungs-/Schattierungsmodul 114 umfasst. Das Graphikverarbeitungssystem 100 ist so ausgelegt, dass bei dem Vorverarbeitungsmodul 106 eine Folge von Primitiven empfangen wird, die von einer Anwendung bereitgestellt werden. Das Vorverarbeitungsmodul 106 führt Funktionen wie etwa eine Geometrieverarbeitung einschließlich Clipping und Culling aus, um Primitive, die nicht in einer sichtbaren Ansicht liegen, zu entfernen. Außerdem kann das Vorverarbeitungsmodul 106 die Primitive in den Bildschirmraum projizieren. Außerdem kann das Vorverarbeitungsmodul 106 die empfangenen Primitive in Primitivblöcke legen.
  • Die Primitive (z. B. die Primitivblöcke), die von dem Vorverarbeitungsmodul 106 ausgegeben werden, werden an die Kachelungseinheit 108 übergeben, die bestimmt, welche Primitive innerhalb jeder der Kacheln des Rendering-Raums des Graphikverarbeitungssystems 100 vorhanden sind. Die Kachelungseinheit 108 weist Primitive zu Kacheln des Rendering-Raums zu, indem sie Anzeigelisten für die Kacheln erzeugt, wobei die Anzeigeliste für eine Kachel Angaben von Primitiven (d. h. Primitiv-IDs), die innerhalb der Kachel vorhanden sind, umfasst. Die Anzeigelisten und die Primitive (z. B. in Primitivblöcken) werden von der Kachelungseinheit 108 ausgegeben und in den Speicher 104 1 gespeichert. Der Rasterungsblock 110 ruft die Anzeigeliste für eine Kachel und die für diese Kachel relevanten Primitive aus dem Speicher 104 1 ab und das HSR-Modul 112 führt eine Entfernung verdeckter Flächen aus, um dadurch Fragmente von Primitiven, die in der Szene verdeckt sind, zu entfernen. Die verbleibenden Fragmente werden an das Texturierungs-/Schattierungsmodul 114 übergeben, das an den Fragmenten eine Texturierung und/oder Schattierung ausführt, um Pixelfarbwerte eines gerenderten Bilds zu bestimmen, die zur Speicherung in einem Rahmenpuffer an den Speicher 104 2 übergeben werden können. Der Rasterungsblock 110 verarbeitet Primitive in jeder der Kacheln, wobei das Bild aus dem Graphikverarbeitungssystem 100 ausgegeben und z. B. auf einer Anzeige angezeigt werden kann, wenn das gesamte Bild gerendert und im Speicher 104 2 gespeichert worden ist.
  • Typischerweise erhöht das Erhöhen der Anzahl der Primitive, die innerhalb einer Kachel vorhanden sind, die Anzahl von Primitiv-IDs, die in der Anzeigeliste für die Kachel umfasst sind. Das heißt, dass die Menge der in der Anzeigeliste umfassten Daten erhöht wird, wodurch eine größere Menge des Speichers 104 1 zum Speichern der Anzeigeliste verwendet wird und die Menge der Daten, die zwischen der Kachelungseinheit 108 und dem Speicher 104 1 übergeben werden, erhöht wird.
  • Darüber hinaus wird die Anzeigeliste von dem HSR-Modul 112 aus dem Speicher 104 1 gelesen und werden die Primitive, die in der Anzeigeliste angegeben sind, von dem HSR-Modul 112 aus dem Speicher 104 1 abgerufen. Die Kommunikation zwischen der GPU 102 und dem Speicher 104 1 ist (verglichen mit den in der GPU 102 ausgeführten Prozessen) ein verhältnismäßig langsamer Prozess, so dass es vorteilhaft sein kann, die Menge der Daten, die die GPU 102 in den Speicher 104 1 schreibt und/oder aus dem Speicher 104 1 liest, zu verringern.
  • Kurzfassung
  • Diese Kurzfassung wird bereitgestellt, um eine Auswahl von Konzepten, die im Folgenden in der ausführlichen Beschreibung weiter beschrieben sind, in vereinfachter Form einzuführen. Diese Kurzfassung soll weder Hauptmerkmale oder wesentliche Merkmale des beanspruchten Gegenstands identifizieren noch zur Beschränkung des Schutzbereichs des beanspruchten Gegenstands verwendet werden.
  • Es wird ein Verfahren zum Zuweisen von Primitiven zu Kacheln in einem Graphikverarbeitungssystem bereitgestellt, dessen Rendering-Raum in mehrere Kacheln unterteilt ist, wobei jede Kachel ein oder mehrere mehreckige (polygonale) Gebiete umfasst, wobei das Verfahren umfasst:
    Aufnehmen von Angaben von Primitiven, die innerhalb eines mehreckigen Gebiets der Kachel vorhanden sind, in eine Anzeigeliste für eine Kachel, um die Primitive dadurch der Kachel zuzuweisen;
    Empfangen eines Satzes eines oder mehrerer Primitive;
    für jedes des einen oder der mehreren mehreckigen Gebiete einer Kachel:
    • (i) Bestimmen, ob der Satz eines oder mehrerer Primitive das mehreckige Gebiet der Kachel vollständig bedeckt; und
    • (ii) falls bestimmt wird, dass der Satz eines oder mehrerer Primitive das mehreckige Gebiet der Kachel vollständig bedeckt, Vergleichen eines Tiefenschwellenwerts für das mehreckige Gebiet der Kachel mit einem Tiefenwert für wenigstens eines der empfangenen Primitive des Satzes, das innerhalb des mehreckigen Gebiets der Kachel vorhanden ist, um dadurch zu bestimmen, ob der Satz eines oder mehrerer Primitive vorhergehende Primitive im Gebiet, die in der Anzeigeliste für die Kachel umfasst sind, vollständig verbirgt; und falls bestimmt wird, dass der Satz eines oder mehrerer Primitive vorhergehende Primitive, die in der Anzeigeliste in allen des einen oder der mehreren Gebiete der Kachel enthalten sind, vollständig verbirgt, Setzen eines Anzeigelisten-Startzeigers, um anzugeben, dass eine Angabe eines der Primitive des Satzes ein Startpunkt in der Anzeigeliste für die Kachel ist.
  • Ferner kann das Verfahren für jedes des einen oder der mehreren mehreckigen Gebiete einer Kachel umfassen: (iii) Aktualisieren des Tiefenschwellenwerts für das Gebiet in Abhängigkeit von den Tiefenwerten empfangener Primitive, die innerhalb des Gebiets vorhanden sind und für die Angaben in der Anzeigeliste für die Kachel umfasst sind.
  • Der Satz eines oder mehrerer Primitive kann ein einzelnes Primitiv umfassen. Alternativ kann der Satz eines oder mehrerer Primitive mehrere Primitive, die ein Netz bzw. Gitter (engl. mesh) bilden, umfassen.
  • Es wird eine Kachelungseinheit bereitgestellt, die ausgelegt ist, in einem Graphikverarbeitungssystem, dessen Rendering-Raum in mehrere Kacheln unterteilt ist, Primitive Kacheln zuzuweisen, wobei jede Kachel ein oder mehrere mehreckige Gebiete umfasst, wobei die Kachelungseinheit ausgelegt ist, einen Satz eines oder mehrerer Primitive zu empfangen, wobei die Kachelungseinheit umfasst:
    • • eine Netzlogik, die ausgelegt ist, für jedes des einen oder der mehreren mehreckigen Gebiete einer Kachel zu bestimmen, ob der Satz eines oder mehrerer Primitive das mehreckige Gebiet der Kachel vollständig bedeckt; und
    • • eine Kachelungslogik, die ausgelegt ist zum: Aufnehmen von Angaben von Primitiven, die innerhalb eines mehreckigen Gebiets der Kachel vorhanden sind, in eine Anzeigeliste für eine Kachel, um die Primitive dadurch der Kachel zuzuweisen; für jedes des einen oder der mehreren mehreckigen Gebiete einer Kachel, falls bestimmt wird, dass der Satz eines oder mehrerer Primitive das mehreckige Gebiet der Kachel vollständig bedeckt, Vergleichen eines Tiefenschwellenwerts für das mehreckige Gebiet der Kachel mit einem Tiefenwert für wenigstens eines der empfangenen Primitive des Satzes, das innerhalb des mehreckigen Gebiets der Kachel vorhanden ist, um dadurch zu bestimmen, ob der Satz eines oder mehrerer Primitive vorhergehende Primitive im Gebiet, die in der Anzeigeliste für die Kachel umfasst sind, vollständig verbirgt; und falls bestimmt wird, dass der Satz eines oder mehrerer Primitive vorhergehende Primitive, die in der Anzeigeliste in allen des einen oder der mehreren Gebiete der Kachel umfasst sind, vollständig verbirgt, Setzen eines Anzeigelisten-Startzeigers, um anzugeben, dass eine Angabe eines der Primitive des Satzes ein Startpunkt in der Anzeigeliste für die Kachel ist.
  • Ferner kann die Kachelungseinheit eine Tiefenschwellenwert-Aktualisierungslogik umfassen, die ausgelegt ist, für jedes des einen oder der mehreren mehreckigen Gebiete einer Kachel den Tiefenschwellenwert für das Gebiet in Abhängigkeit von Tiefenwerten der empfangenen Primitive, die innerhalb des Gebiets vorhanden sind und für die Angaben in der Anzeigeliste für die Kachel umfasst sind, zu aktualisieren.
  • Außerdem kann computerlesbarer Code bereitgestellt werden, der ausgelegt ist, die Schritte irgendeines der hier beschriebenen Verfahren auszuführen, wenn der Code in einem Computer ausgeführt wird. Darüber hinaus kann computerlesbarer Code zum Erzeugen einer Kachelungseinheit gemäß einem der hier beschriebenen Beispiele bereitgestellt werden. Der computerlesbare Code kann in einem computerlesbaren Speichermedium codiert sein.
  • Wie für den Fachmann hervorgeht, können die obigen Merkmale soweit erforderlich kombiniert werden und können mit irgendwelchen der Aspekte der hier beschriebenen Beispiele kombiniert werden.
  • Kurzbeschreibung der Zeichnungen
  • Es werden nun Beispiele ausführlich anhand der beigefügten Zeichnungen beschrieben, in denen:
  • 1 eine schematische Darstellung eines Graphikverarbeitungssystems ist;
  • 2 eine schematische Darstellung eines Graphikverarbeitungssystems ist, die Komponenten einer Kachelungseinheit innerhalb des Graphikverarbeitungssystems zeigt;
  • 3a ein Beispiel eines ersten Primitivs zeigt, das innerhalb eines Gebiets einer Kachel vorhanden ist;
  • 3b die Tiefe des ersten Primitivs in einem ersten Beispiel darstellt;
  • 3c die Tiefe des ersten Primitivs in einem zweiten Beispiel darstellt;
  • 3d die Tiefe des ersten Primitivs in einem dritten Beispiel darstellt;
  • 4a ein Beispiel eines zweiten Primitivs zeigt, das ein Gebiet vollständig bedeckt;
  • 4b die Tiefe des zweiten Primitivs in einem Beispiel darstellt;
  • 4c ein Beispiel zeigt, wie ein Tiefenschwellenwert wegen des zweiten Primitivs aktualisiert wird;
  • 5 ein Beispiel eines ersten Netzes von Primitiven zeigt, das ein Gebiet vollständig bedeckt;
  • 6 ein Flussdiagramm ist, das ein erstes Verfahren zum Zuweisen von Primitiven zu Kacheln in einer Kachelungseinheit darstellt;
  • 7 ein Beispiel eines zweiten Netzes von Primitiven zeigt, das ein Gebiet nicht vollständig bedeckt;
  • 8 ein Beispiel eines dritten Netzes von Primitiven zeigt, das ein Gebiet vollständig bedeckt;
  • 9 ein Flussdiagramm ist, das ein zweites Verfahren zum Zuweisen von Primitiven zu Kacheln in einer Kachelungseinheit darstellt;
  • 10 eine Darstellung einer Anzeigeliste einer Kachel ist; und
  • 11 eine schematische Darstellung eines Computersystems ist.
  • Die beigefügten Zeichnungen veranschaulichen verschiedene Beispiele. Der Fachmann wird würdigen, dass die dargestellten Elementbegrenzungen (z. B. Kästen, Gruppen von Kästen oder andere Formen) in den Zeichnungen ein Beispiel der Begrenzungen darstellen. Es kann sein, dass ein Element in einigen Beispielen als mehrere Elemente ausgelegt sein kann oder dass mehrere Elemente als ein Element ausgelegt sein können. Gegebenenfalls sind überall in den Figuren zur Bezeichnung ähnlicher Merkmale gemeinsame Bezugszeichen verwendet.
  • Ausführliche Beschreibung
  • Mit Bezug auf das in 1 gezeigte Graphikverarbeitungssystem 100 wäre es vorteilhaft, falls die Primitiv-IDs von Primitiven, von denen schließlich von dem HSR-Modul 112 bestimmt wird, dass sie von anderen Primitiven verdeckt sind, nicht in die relevante Anzeigeliste für die Kachel aufgenommen würden. Dies würde die Menge der Daten in den Anzeigelisten verringern und würde außerdem die Menge an Primitivdaten verringern, die von dem HSR-Modul 112 abgerufen werden müssten. Hier beschriebene Beispiele beziehen sich auf eine Kachelungseinheit 208, die in einem (in 2 gezeigten und im Folgenden ausführlich beschriebenen) Graphikverarbeitungssystem 200 implementiert ist. Abgesehen von der Kachelungseinheit 208 ist das System 200 ähnlich dem in 1 gezeigten System 100. Um die Anzahl der Primitive zu verringern, die in den Anzeigelisten enthalten sind, kann die Kachelungseinheit 208 einige Primitive, von denen sie bestimmt, dass sie von anderen Primitiven im Bild verdeckt sind, aussondern. Da es für die Kachelungseinheit aufwendig wäre, ausreichend Speicher zu enthalten, um für den gesamten Rendering-Raum einen Tiefenpuffer mit voller Auflösung zu speichern, führt die Kachelungseinheit 208 keinen Test voller Tiefe mit der Abtastauflösung aus, mit der das HSR-Modul Tiefentests ausführt. Es wird angemerkt, dass das HSR-Modul einen Tiefenpuffer mit voller Auflösung für eine Kachel des Rendering-Raums, üblicherweise aber nicht für den gesamten Rendering-Raum, speichert. Da die Kachelungseinheit 208 bereits eine räumliche Sortierung (auch als Kachelung oder Binning bekannt) der Primitive ausgeführt hat, ist ein Tiefenpuffer mit voller Auflösung für nur eine einzelne Kachel im HSR-Modul eines kachelbasierten Systems möglich. Obwohl die Kachelungseinheit 208 keinen Tiefenpuffer mit voller Auflösung für den Rendering-Raum speichert, kann sie dennoch einige Tiefeninformationen speichern, die zum Aussondern einiger Primitive verwendet werden können. Primitive, die von der Kachelungseinheit 208 empfangen werden, sind möglicherweise nicht räumlich sortiert und können daher irgendeine Position im Rendering-Raum aufweisen. Somit müssen irgendwelche in der Kachelungseinheit 208 gespeicherte Tiefeninformationen den gesamten Rendering-Raum repräsentieren. Zum Beispiel ist der Rendering-Raum in mehrere Kacheln geteilt, die üblicherweise rechteckig sind (wobei z. B. jede Kachel einen Block von 32×32 oder 16×16 oder 32×16 Abtastwerten des Rendering-Raums umfassen kann, um einige Beispiele zu geben), wobei sie aber andere Formen und/oder Größen, z. B. dreieckig oder sechseckig, aufweisen können. Jede Kachel kann ein oder mehrere Gebiete umfassen, für die Tiefenvergleiche ausgeführt werden müssen, wobei die Gebiete Kacheln sind, falls jede Kachel nur ein Gebiet umfasst, und wobei die Gebiete innerhalb einer Kachel als ”Teilkacheln” bezeichnet werden, falls jede Kachel mehr als ein Gebiet umfasst. Die Kachelungseinheit 208 kann für jedes Gebiet einen Tiefenschwellenwert speichern, der eine Schwellentiefe angibt, wobei bestimmt werden kann, dass das Primitiv innerhalb des Gebiets verdeckt ist, falls ein Primitiv einen Tiefentest gegen den Tiefenschwellenwert nicht besteht. Falls ein Primitiv für alle des einen oder der mehreren Gebiete einer Kachel verdeckt ist, kann das Primitiv von der Kachel ausgesondert werden, d. h. die ID des Primitivs wird nicht in die Anzeigeliste für die Kachel aufgenommen.
  • Obwohl die Kachelungseinheit 208 keine Tiefenwerte mit voller Auflösung zuvor verarbeiteter Primitive speichert, kann der Tiefenschwellenwert für ein Gebiet, wie im Folgenden ausführlicher beschrieben wird, aktualisiert werden, falls ein Primitiv das gesamte Gebiet bedeckt. Allerdings werden Primitive allgemein kleiner, wenn Graphikdaten komplexer werden, so dass Primitive selten ein Gebiet vollständig bedecken. Das heißt, dass die Gelegenheiten zum Aktualisieren des Tiefenschwellenwerts für ein Gebiet auf der Grundlage dessen, dass ein Primitiv das Gebiet vollständig bedeckt, verringert sein können. Allerdings hat der Erfinder erkannt, dass Primitive häufig Teile von Netzen sind und dass der Tiefenschwellenwert für das Gebiet aktualisiert werden kann, falls ein Primitivennetz ein Gebiet vollständig bedeckt. Dies stellt viel mehr Gelegenheiten zum Aktualisieren des Tiefenschwellenwerts für ein Gebiet in der Kachelungseinheit 208 bereit. Dies bedeutet wiederum, dass viel mehr Primitive ausgesondert werden können, wodurch die Menge des von den Anzeigelisten verwendeten Speichers verringert wird und die Anzahl der Primitive, die das HSR-Modul abrufen muss, verringert wird. Das heißt, wenn ein Netz ein Gebiet vollständig bedeckt, kann der Tiefenschwellenwert so eingestellt werden, dass nachfolgende Primitive ausgesondert werden können, falls sie von den Primitiven des Netzes im Gebiet verdeckt sind. Zum Beispiel ist in Tests gezeigt worden, dass die Kachelungseinheit 208 in einigen Fällen näherungsweise 25% der bei der Kachelungseinheit 208 empfangenen Primitive aussondern kann, so dass gewürdigt werden kann, dass dies einen erheblichen Vorteil bereitstellen kann.
  • Wie im Folgenden beschrieben wird, kann darüber hinaus ein Startzeiger der Anzeigeliste verschoben werden, um dadurch die verborgenen Primitive zu überspringen, falls ein Primitiv oder ein Netz von Primitiven alle Gebiete der Kachel vollständig bedeckt, so dass alle vorhergehenden Primitive in der Kachel verborgen (d. h. verdeckt) sind. Auf diese Weise ruft das HSR-Modul die Primitive, die schließlich von dem Primitiv oder von dem Netz, das das Gebiet vollständig verdeckt, verdeckt würden, nicht ab. Somit verringert dieses Verfahren die Anzahl der Primitive, die von dem HSR-Modul abgerufen werden.
  • In den hier beschriebenen Beispielen gibt es Bezugnahmen darauf, dass es für jede Kachel eine Anzeigeliste gibt, wobei die Anzeigeliste für eine Kachel Angaben von Primitiven (d. h. Primitiv-IDs), die innerhalb der Kachel vorhanden sind, umfasst. In einigen Beispielen kann jede Kachel eine getrennte Anzeigeliste aufweisen, die als eine getrennte Datenstruktur gespeichert ist. Allerdings wird angemerkt, dass es in einigen anderen Beispielen nicht notwendig ist, dass es für jede getrennte Kachel eine getrennte Datenstruktur gibt, die als eine getrennte Anzeigeliste fungiert. Allerdings gibt es sogar in diesen Fällen für jede Kachel eine Anzeigeliste, die angibt, welche Primitive innerhalb der Kachel vorhanden sind, und in diesem Sinn gibt es eine Anzeigeliste für jede Kachel. Das heißt, dieselbe Datenstruktur kann Primitiv-IDs für mehr als eine Kachel mit Angaben, auf welche Kachel sich jede Primitiv-ID bezieht, umfassen, so dass die Datenstruktur als eine Anzeigeliste für mehr als eine Kachel fungieren kann. Mit anderen Worten, konzeptionell ist es sinnvoll, sich für jede Kachel eine getrennte Anzeigeliste vorzustellen, während die Anzeigelisten für mehrere Kacheln in der Realität in einigen Beispielen zu einer einzelnen Datenstruktur mit Angaben, auf welche Kachel sich jede Primitiv-ID in der Datenstruktur bezieht, kombiniert werden können. In dieser Anmeldung gibt es durchgängig Bezugnahmen auf Anzeigelisten für Kacheln, wobei diese Bezugnahmen Beispiele, in denen getrennte Anzeigelisten als getrennte Datenstrukturen implementiert sind, und ebenfalls Beispiele, in denen die Anzeigelisten für mehrere Kacheln mit Angaben, auf welche Kachel sich jede Primitiv-ID in der Datenstruktur bezieht, zu einer einzelnen Datenstruktur kombiniert sein können, umfassen sollen.
  • Es werden nun Ausführungsformen nur beispielhaft beschrieben.
  • Wie oben erwähnt wurde, zeigt 2 einige Elemente eines Graphikverarbeitungssystems 200, das zum Rendern eines Bilds einer 3D-Szene verwendet werden kann. Das Graphikverarbeitungssystem 200 umfasst eine GPU 202 und zwei Abschnitte eines Speichers 204 1 und 204 2. Es wird angemerkt, dass die zwei Abschnitte des Speichers 204 1 und 204 2 Teile desselben physischen Speichers sein können oder nicht sein können und dass sich beide Speicher 204 1 und 204 2 ”chipextern”, d. h. nicht auf demselben Chip wie die GPU 202, befinden können. Die Kommunikation zwischen den Speichern (204 1 und 204 2) und der GPU 202 kann über einen Kommunikationsbus im System 200 stattfinden. Das Graphikverarbeitungssystem 200 ist ein kachelbasiertes System mit verzögertem Rendering, d. h., der Rendering-Raum des Systems 200 ist in mehrere Kacheln geteilt und an einem Fragment wird eine HSR ausgeführt, bevor an dem Fragment eine Texturierung und/oder Schattierung ausgeführt wird, um die Szene zu rendern. Allerdings können Graphikverarbeitungssysteme in anderen Beispielen nicht kachelbasierte Systeme und/oder keine Systeme mit verzögertem Rendering sein. Die GPU 202 umfasst ein Vorverarbeitungsmodul 206, ein Kachelungsmodul 208 und ein Rasterungsmodul 210, wobei das Rasterungsmodul 210 ein Modul 212 zur Entfernung verdeckter Oberflächen (HSR-Modul) und ein Texturierungs-/Schattierungsmodul 214 umfasst. Die Kachelungseinheit 208 umfasst eine Kachelungslogik 216, eine Netzlogik 218, eine Tiefenschwellenwert-Aktualisierungslogik 220 und einen Tiefenschwellenwertspeicher 222. Wie der Fachmann auf dem Gebiet würdigen wird, kann das in 2 gezeigte Graphikverarbeitungssystem 200 Teil eines größeren Computersystems (z. B. eines Smartphones, eines Tablets, eines Laptops, eines PC, eines Fernsehgeräts, einer Set-Top-Box usw.) sein, das, wie im Folgenden anhand von 11 beschrieben wird, andere Elemente wie etwa eine Zentraleinheit (CPU), andere Speicher und andere Vorrichtungen (wie etwa eine Anzeige, Lautsprecher, ein Mikrophon, ein Tastenfeld usw.) umfassen kann, die in der Lage sein können, z. B. über einen Kommunikationsbus miteinander zu kommunizieren.
  • 3a zeigt ein Beispiel eines Rendering-Raums 302, der in vier Kacheln 304 1, 304 2, 304 3 und 304 4 unterteilt ist. Innerhalb der Kachel 304 2 ist ein Primitiv 306 vorhanden, wobei das Primitiv die Kachel 304 2 aber nicht vollständig bedeckt. In diesem Beispiel sind die Kacheln Gebiete, für die Tiefenschwellenwerte gespeichert sind und für die Tiefenvergleiche ausgeführt werden sollen. Die Kachelungseinheit 208 kann für jede der Kacheln 304 einen, zwei oder mehr Tiefenschwellenwerte speichern. Zum Beispiel kann die Kachelungseinheit 208 für jede Kachel 304 einen Schwellenwert maximaler Tiefe und einen Schwellenwert minimaler Tiefe speichern. Die verschiedenen Tiefenschwellenwerte können nützlich sein, wenn verschiedene Tiefenvergleichsbetriebsarten verwendet werden. Falls nur ein Tiefenvergleich verwendet wird, könnte die Kachelungseinheit 208 für jede Kachel nur einen Tiefenschwellenwert speichern. Ein Speichern sowohl eines Schwellenwerts maximaler Tiefe als auch eines Schwellenwerts minimaler Tiefe für ein Gebiet ermöglicht Änderungen der Tiefenvergleichsbetriebsart.
  • Das Graphikverarbeitungssystem 200 kann eine Vielzahl verschiedener Tiefenvergleichsbetriebsarten verwenden und kann zwischen ihnen umschalten. Die Tiefenvergleichsbetriebsart kann z. B. ”kleiner als” (DCM_LESS), ”kleiner oder gleich” (DCM_LESS_EQ), ”größer als” (DCM_GREATER), ”größer oder gleich” (DCM_GREATER_EQ), ”gleich” (DCM_EQ), ”ungleich” (DCM_NOT_EQ), ”immer” (DCM_ALWAYS) oder ”nie” (DCM_NEVER) sein.
  • Die DCM_LESS-Tiefenvergleichsbetriebsart ist eine übliche Tiefenvergleichsbetriebsart, da sie dem Rendering in einem Koordinatensystem entspricht, in dem der Tiefenwert mit zunehmender Entfernung von dem Betrachter zunimmt. Ein Primitiv oder Fragment eines Primitivs mit einem kleineren Tiefenwert als ein anderes Primitiv oder Fragment eines Primitivs ist näher zu dem Betrachter und wird somit vor dem anderen Primitiv gerendert. Andere Tiefenvergleichsbetriebsarten unterstützen alternative Koordinatensysteme oder andere Rendering-Wirkungen. Tiefenvergleichsbetriebsarten werden herkömmlich im HSR-Modul 212 für die Entfernung verdeckter Flächen mit voller Auflösung verwendet, müssen aber ebenfalls betrachtet werden, wenn in der Kachelungseinheit 208 das Aussondern von Primitiven (Primitiv-Culling) ausgeführt wird. In der DCM_LESS-Tiefenvergleichsbetriebsart bestimmt die Kachelungseinheit 208, dass das Primitiv 306 einen Tiefentest besteht, falls es im Gebiet 304 2 einen Tiefenwert aufweist, der kleiner als der Schwellenwert maximaler Tiefe ist. 3b zeigt ein erstes Beispiel der Tiefe des Primitivs 306. In dem in 3b gezeigten Beispiel verläuft der Bereich möglicher Tiefenwerte von 0,0 bis 1,0 und der Schwellenwert maximaler Tiefe und der Schwellenwert minimaler Tiefe für das Gebiet 304 2, die als ”Threshmax” bzw. ”Threshmin” bezeichnet sind, repräsentieren einen von zuvor gerenderten Primitiven festgesetzten Bereich von Tiefen. In dem in 3b gezeigten Beispiel weist das Primitiv 306 eine maximale Tiefe Primmax und einen minimalen Tiefenwert Primmin auf. In der DCM_LESS-Tiefenvergleichsbetriebsart testet die Kachelungseinheit 208, ob Primmin < Threshmax ist. In dem in 3b gezeigten Beispiel wird dieser Test bestanden, so dass das Primitiv nicht ausgesondert wird und seine ID in die Anzeigeliste für die Kachel aufgenommen wird. 3c zeigt ein zweites Beispiel, in dem das Primitiv 306 eine größere Tiefe als der Schwellenwert maximaler Tiefe für das Gebiet 304 2 aufweist. Somit besteht das Primitiv in dem in 3c gezeigten Beispiel den Test, ob Primmin < Threshmax ist, nicht. Das heißt, dass das Primitiv an jeder möglichen Position in der Kachel hinter einem anderen Primitiv, das bereits verarbeitet worden ist, verdeckt ist. Es kann nicht sichtbar sein. Da dieser Test nicht bestanden wurde, wird das Primitiv ausgesondert, so dass seine ID nicht in die Anzeigeliste für die Kachel aufgenommen wird. 3d zeigt ein drittes Beispiel, in dem die maximale Tiefe des Primitivs (Primmax) größer als der Maximumschwellenwert (Threshmax) ist, aber immer noch Primmin < Threshmax ist. Das heißt, dass das Primitiv an einigen Positionen in der Kachel sichtbar sein kann. Um die Sichtbarkeit genau zu bestimmen, ist ein Tiefentest mit voller Auflösung in dem HSR-Modul 112 erforderlich, so dass das Primitiv 306 in dem in 3d gezeigten Beispiel den Tiefentest besteht, nicht ausgesondert wird und seine ID in die Anzeigeliste für die Kachel 304 2 aufgenommen wird.
  • Falls die Tiefenvergleichsbetriebsart DCM_GREATER war, ist der relevante Test, um zu bestimmen, ob eine Primitiv-ID in die Anzeigeliste aufgenommen werden sollte, dass bestimmt wird, ob Primmax > Threshmin ist. Der Fachmann auf dem Gebiet versteht, welcher Test in verschiedenen Tiefenvergleichsbetriebsarten auszuführen ist, um zu bestimmen, ob ein Primitiv ausgesondert werden sollte oder nicht.
  • Da das Primitiv 306 die Kachel 304 2 nicht vollständig bedeckt, werden der Tiefenschwellenwert bzw. die Tiefenschwellenwerte für die Kachel 304 2 wegen des Primitivs 306 nicht aktualisiert.
  • Dagegen zeigt 4a ein anderes Beispiel, in dem ein Primitiv 406 ein Gebiet 404 vollständig bedeckt. Das Gebiet 404 kann eine Kachel oder eine Teilkachel sein. In diesem Beispiel ist das Primitiv 406 undurchsichtig und konvex. Die Kachelungseinheit 208 kann bestimmen, dass das konvexe Primitiv 406 das Gebiet 404 vollständig bedeckt, indem sie testet, ob jede der vier Ecken des Gebiets 404 (die in 4a mit 410 1, 410 2, 410 3 und 410 4 bezeichnet sind) innerhalb des Primitivs 406 liegt. In anderen Beispielen könnte ein Primitiv nicht konvex sein, wobei in diesem Fall ein anderer Test ausgeführt werden sollte, um zu bestimmen, ob das Primitiv das Gebiet vollständig bedeckt. Zum Beispiel kann für ein konkaves Primitiv ein ähnlicher Test wie der im Folgenden für ein konkaves Netz beschriebene ausgeführt werden. 4b stellt die Tiefe des Primitivs 406 im Gebiet 404 dar. In diesem Fall ist zu sehen, dass sowohl der maximale Tiefenwert als auch der minimale Tiefenwert des Primitivs 406 im Gebiet 404 (Primmin und Primmax) kleiner als der Schwellenwert Threshmax maximaler Tiefe für das Gebiet 404 ist. Somit wird das Primitiv 406 in der DCM_LESS-Tiefenvergleichsbetriebsart (da Primmin < Threshmax ist) nicht ausgesondert. Da Primmax < Threshmax ist und da das Primitiv 406 das gesamte Gebiet 404 bedeckt, kann darüber hinaus der Schwellenwert maximaler Tiefe für das Gebiet 404 so aktualisiert werden, dass er gleich der maximalen Tiefe des Primitivs 406 ist, d. h., Threshmax wird gleich Primmax gesetzt. Dies ist so, da bekannt ist, dass irgendein Pixel, das weiter als das Primitiv 406 entfernt ist, durch ein Pixel von dem Primitiv 406 ersetzt wird, nachdem das Primitiv 406 von dem HSR-Modul 212 verarbeitet worden ist. Somit gibt es in der Kachel keine Pixel mit einer größeren Tiefe als der maximalen Tiefe des Primitivs 406. 4c zeigt die Tiefenschwellenwerte für das Gebiet 404, nachdem der Schwellenwert maximaler Tiefe für das Gebiet aktualisiert worden ist. Da das Primitiv 406 das gesamte Gebiet 404 bedeckt, wird irgendein nachfolgendes Primitiv im Gebiet 404, das größere Tiefenwerte als die maximale Tiefe des Primitivs 406 aufweist, von dem Primitiv 406 verdeckt. Dadurch, dass der Schwellenwert maximaler Tiefe für das Gebiet 404 gleich der maximalen Tiefe des Primitivs 406 gesetzt wird (d. h. dadurch, dass Threshmax = Primmax gesetzt wird), kann der Tiefenschwellenwert zum Aussondern nachfolgender Primitive verwendet werden.
  • Es wird angemerkt, dass der Tiefenschwellenwert bzw. die Tiefenschwellenwerte für das Gebiet nur von Primitiven aktualisiert werden sollten, deren Tiefenwerte oder deren Anwesenheit nicht von dem Texturierungs- und Schattierungsmodul 214 geändert werden können. Zum Beispiel können der Tiefenschwellenwert bzw. die Tiefenschwellenwerte für das Gebiet von undurchsichtigen oder durchscheinenden Primitiven, aber nicht von Punch-through-Primitiven, für die die Sichtbarkeit der Pixel in den Primitiven Shader-abhängig ist, oder von Depth-Feedback-Primitiven, die Shader-abhängige Tiefenwerte aufweisen, aktualisiert werden.
  • Die oben anhand von 4a bis 4c beschriebene Aktualisierung des Tiefenschwellenwerts ist nützlich, aber auf Situationen beschränkt, in denen ein Primitiv ein Gebiet vollständig bedeckt. Wie oben erwähnt wurde, nimmt die durchschnittliche Größe von Primitiven, insbesondere in modernen 3D-Graphikinhalten, allgemein ab, während Graphikverarbeitungssysteme komplexer werden, und wird es weniger wahrscheinlich, dass ein einzelnes Primitiv eine Kachel vollständig bedeckt. Selbst falls die Gebiete Teilkacheln anstelle von Kacheln sind, kann es immer noch unwahrscheinlich sein, dass ein einzelnes Primitiv eine Teilkachel vollständig bedeckt. Somit sind die Gelegenheiten zum Aktualisieren des Tiefenschwellenwerts bzw. der Tiefenschwellenwerte für die Gebiete auf der Grundlage des Auftretens eines einzelnen Primitivs, das ein Gebiet vollständig bedeckt, beschränkt.
  • Allerdings sind Primitive häufig Teil größerer Primitivnetze. Zum Beispiel kann eine Anwendung ein Netz von Primitiven an das Graphikverarbeitungssystem 200 senden, wobei das Netz von Primitiven erzeugt worden ist, bevor es an das Graphikverarbeitungssystem 200 gesendet wird. Darüber hinaus kann eine komplexe Form durch eine Teilfläche (z. B. eine Bezierteilfläche) dargestellt werden, die eine Parameterfunktion ist, die durch einen Satz von Passpunkten definiert ist, die die Form einer Kurve beschreiben. Die Tessellation ist eine Technik, die das Zerlegen einer Teilfläche in mehrere tessellierte Primitive umfasst. Diese tessellierten Primitive bilden ein Netz. Eine Tessellation wie etwa diese erzeugt ein Netz von Primitiven ”on-the-fly”, während die Primitive von dem Graphikverarbeitungssystem 200 verarbeitet werden. Das oben anhand von 4a bis 4c beschriebene Verfahren kann in der Weise angepasst werden, dass der Tiefenschwellenwert bzw. die Tiefenschwellenwerte für ein Gebiet aktualisiert werden können, wenn ein Netz das Gebiet vollständig bedeckt, selbst falls keines der Primitive des Netzes, isoliert betrachtet, das Gebiet vollständig bedecken würde. Dies stellt mehr Gelegenheiten, den Tiefenschwellenwert bzw. die Tiefenschwellenwerte für ein Gebiet zu aktualisieren, bereit.
  • Zum Beispiel zeigt 5 ein Netz 506, das drei Primitive umfasst. Die in 5 gezeigten punktierten Linien (die mit 518 1 und 518 2 bezeichnet sind), repräsentieren gemeinsame Kanten der Primitive des Netzes 506. Falls zwei Primitive eine Kante gemeinsam haben, können sie als Teil eines Netzes angesehen werden. 5 zeigt ein Gebiet 504, das eine Kachel oder eine Teilkachel des Rendering-Raums des Graphikverarbeitungssystems 200 sein kann. In 5 ist zu sehen, dass kein einzelnes der drei Primitive des Netzes 506 das Gebiet vollständig bedeckt, dass das Netz 506 zusammen das Gebiet 504 aber vollständig bedeckt.
  • Anhand des in 6 gezeigten Flussdiagramms wird im Folgenden ein Verfahren beschrieben, um die Kachelungseinheit 208 in der Weise zu betreiben, dass auf der Grundlage der Bedeckung der Netze anstatt auf der Grundlage der Bedeckung einzelner Primitive mehr Gelegenheiten zum Aktualisieren des Tiefenschwellenwerts bzw. der Tiefenschwellenwerte eines Gebiets bereitgestellt werden.
  • Die Primitive werden bei dem Vorverarbeitungsmodul 206 der GPU 202 empfangen. Die Primitive können aus einer Anwendung empfangen werden, die in demselben Computersystem wie die GPU 202 ausgeführt wird. Das Vorverarbeitungsmodul 206 führt Funktionen wie etwa eine Geometrieverarbeitung einschließlich Clipping und Culling aus, um Primitive zu entfernen, die nicht in einer sichtbaren Ansicht liegen. Außerdem kann das Vorverarbeitungsmodul 206 die Primitive in den Bildschirmraum projizieren. Außerdem kann das Vorverarbeitungsmodul 206 die empfangenen Primitive in Primitivblöcke legen.
  • Die Primitive werden (z. B. in Primitivblöcken) aus dem Vorverarbeitungsmodul 206 ausgegeben und in Schritt S602 werden die Primitive bei der Kachelungseinheit 208 empfangen. Die Primitive werden an die Kachelungslogik 216, an die Netzlogik 218 und an die Tiefenschwellenwert-Aktualisierungslogik 220 der Kachelungseinheit 208 übergeben.
  • In Schritt S604 bestimmt die Netzlogik 218, dass die empfangenen Primitive ein Netz bzw. Gitter bilden, indem sie z. B. bestimmt, dass mehrere empfangene Primitive Primitivkanten gemeinsam haben. Zum Beispiel bestimmt die Netzlogik 218, dass die drei in 5 gezeigten Primitive ein Netz 506 bilden, indem sie bestimmt, dass die Primitive die Kanten 518 1 und 518 2 gemeinsam haben. Die Primitive können in Primitivblöcken empfangen werden und die Primitive innerhalb eines Primitivblocks können analysiert werden, um zu bestimmen, ob irgendwelche von ihnen Netze bilden. In anderen Beispielen kann im Strom von Primitiven eine Angabe des Anfangs und des Endes eines Netzes in der Folge von Primitiven enthalten sein, so dass die Netzlogik 218 leicht bestimmen kann, ob mehrere Primitive ein Netz bilden.
  • In Schritt S606 identifiziert die Netzlogik 218 externe Kanten des Netzes 506. Die externen Kanten des Netzes 506 beschreiben (vom Standpunkt des Rendering aus) die Außenkanten des von den mehreren Primitiven gebildeten Netzes. Zum Beispiel können die externen Kanten des Netzes 506 dadurch identifiziert werden, dass Primitivkanten identifiziert werden, die nicht mehrere Primitive des Netzes 506 gemeinsam haben. Wie in 5 zu sehen ist, sind die gemeinsamen Kanten 518 1 und 518 2 interne Kanten des Netzes 506 und sind die Kanten der Primitive des Netzes 506, die nicht mehr als eines der Primitive gemeinsam hat, die externen Kanten des Netzes 506. Es sind die externen Kanten des Netzes 506, die den Umfang der Bedeckung des Netzes 506 beschreiben.
  • Wenn die Netzlogik 218 die externen Kanten des Netzes 506 identifiziert hat, bestimmt die Netzlogik 218, ob das Netz 506 das Gebiet vollständig bedeckt. Um dies zu tun, verwendet die Netzlogik 218 Linien 508, die auf die Kanten des Gebiets 504 ausgerichtet sind (und von ihnen ausgehen). Es wird angemerkt, dass das Gebiet 504 ein mehreckiges Gebiet ist, so dass es durch mehrere gerade Kanten beschrieben ist. In dem in 5 gezeigten Beispiel ist das mehreckige Gebiet 504 ein Quadrat, wobei das Gebiet in anderen Beispielen aber andere mehreckige Formen, z. B. die eines Rechtecks, eines Dreiecks oder eines Sechsecks, aufweisen könnte. Da das Gebiet 504 mehreckig ist, weist es gerade Kanten auf, auf die Linien (z. B. die Linien 508 1, 508 2, 508 3 und 508 4) ausgerichtet sein können. Die Linie 508 1 ist auf die Oberkante des Gebiets 504 ausgerichtet; die Linie 508 2 ist auf die Unterkante des Gebiets 504 ausgerichtet; die Linie 508 3 ist auf die linke Kante des Gebiets 504 ausgerichtet; und die Linie 508 4 ist auf die rechte Kante des Gebiets 504 ausgerichtet. Im Schritt S608 identifiziert die Netzlogik 218 Schnittpunkte (z. B. die in 5 gezeigten Punkte 510 1, 510 2, 512 1, 512 2, 514 1, 514 2, 516 1 und 516 2), an denen sich die identifizierten externen Kanten des Netzes 506 mit den Linien 508 1, 508 2, 508 3 und 508 4 schneiden. Wie im Folgenden anhand des Schritts S614 beschrieben wird, werden diese Schnittpunkte verwendet, um zu bestimmen, ob das Netz 506 das Gebiet 504 vollständig bedeckt.
  • Während die Netzlogik 218 die Schritte S604, S606 und S608 ausführt, kann die Kachelungslogik 216 die Schritte S610 und S612 ausführen. Die Kachelungslogik 216 bestimmt für die Primitive des Netzes 506, die innerhalb des Gebiets 504 vorhanden sind, erste Tiefenwerte. In Schritt S610 vergleicht die Kachelungslogik 216 den ersten Tiefenwert jedes der empfangenen Primitive, die im Gebiet 504 vorhanden sind, mit einem Tiefenschwellenwert für das Gebiet 504. Zum Beispiel können der Schwellenwert maximaler Tiefe und/oder der Schwellenwert minimaler Tiefe (Threshmax und Threshmin) für das Gebiet 504 aus dem Tiefenschwellenwertspeicher 222 gelesen und mit Tiefenwerten der Primitive, die innerhalb des Gebiets 504 vorhanden sind, verglichen werden. Der Zweck dieses Vergleichs ist es zu bestimmen, ob ein Primitiv ausgesondert werden kann, da es von vorhergehenden Primitiven, die im Gebiet 504 vorhanden sind, verdeckt ist. Somit ist in der Kleiner-als-Tiefenvergleichsbetriebsart (DCM_LESS) oder in der Kleiner-oder-gleich-Tiefenvergleichsbetriebsart (DCM_LESS_EQ) der ”erste Tiefenwert” eines Primitivs der minimale Tiefenwert des Primitivs innerhalb des Gebiets, der als Primmin bezeichnet wird. Da die Primitive im hier beschriebenen Beispiel planar sind, ist der minimale Tiefenwert eines Primitivs innerhalb des Gebiets 504 das Minimum der Tiefenwerte des Primitivs bei einem von: (i) einem Schnittpunkt einer Kante des Primitivs mit einer Kante des Gebiets 504; (ii) der Position einer Ecke des Gebiets 504 innerhalb des Primitivs; und (iii) einem Knotenpunkt des Primitivs innerhalb des Gebiets 504.
  • In der Kleiner-als-Tiefenvergleichsbetriebsart (DCM_LESS) testet die Kachelungslogik in Schritt S610, ob Primmin < Threshmax ist. In der Kleiner-oder-gleich-Tiefenvergleichsbetriebsart (DCM_LESS_EQ) testet die Kachelungslogik in Schritt S610, ob Primmin ≤ Threshmax ist. Falls der Test bestanden wird, soll das Primitiv nicht ausgesondert werden, während das Primitiv ausgesondert werden soll, falls dieser Test nicht bestanden wird.
  • In der Größer-als-Tiefenvergleichsbetriebsart (DCM_GREATER) oder in der Größer-oder-gleich-Tiefenvergleichsbetriebsart (DCM_GREATER_EQ) ist der ”erste Tiefenwert” eines Primitivs der maximale Tiefenwert des Primitivs innerhalb des Gebiets, der als Primmax bezeichnet wird. Da die Primitive im hier beschriebenen Beispiel planar sind, ist der maximale Tiefenwert eines Primitivs innerhalb des Gebiets 504 das Maximum der Tiefenwerte des Primitivs bei einem von: (i) einem Schnittpunkt einer Kante des Primitivs mit einer Kante des Gebiets 504; (ii) der Position einer Ecke des Gebiets 504 innerhalb des Primitivs; und (iii) einem Knotenpunkt des Primitivs innerhalb des Gebiets 504.
  • In der Größer-als-Tiefenvergleichsbetriebsart (DCM_GREATER) testet die Kachelungslogik in Schritt S610, ob Primmax > Threshmin ist. In der Größer-oder-gleich-Tiefenvergleichsbetriebsart (DCM_GREATER_EQ) testet die Kachelungslogik in Schritt S610, ob Primmax ≥ Threshmin ist. Falls der Test bestanden wird, soll das Primitiv nicht ausgesondert werden, während das Primitiv ausgesondert werden soll, falls dieser Test nicht bestanden wird.
  • In Schritt S612 nimmt die Kachelungslogik 216 in Abhängigkeit von dem Ergebnis des Vergleichs in Schritt S610 wahlweise eine Angabe eines Primitivs in eine Anzeigeliste für die relevante Kachel auf. Die Aufnahme einer Primitiv-ID in die Anzeigeliste für eine Kachel bedeutet, dass das Primitiv nicht ausgesondert wird und dass das Primitiv der Kachel zugewiesen wird. Im Gegensatz dazu bedeutet die Nichtaufnahme der Primitiv-ID in die Anzeigeliste, dass das Primitiv, wenigstens in Bezug auf die aktuelle Kachel, ausgesondert werden kann. Die Anzeigelisten werden im Speicher 204 1 gespeichert und die Kachelungslogik 216 verarbeitet die Primitive, um Primitiv-IDs zu den im Speicher 204 1 gespeicherten Anzeigelisten hinzuzufügen.
  • Die Anzeigelisten sind in dem Sinn, dass sie angeben, welche Primitive innerhalb jeder Kachel vorhanden sind, auf die Kachel bezogen. Dies ist so, damit das HSR-Modul 212 eine Anzeigeliste für eine Kachel unabhängig davon wiedergewinnen kann, ob die Kachelungseinheit 208 mit Gebieten arbeitet, die Kacheln oder Teilkacheln sind. Allerdings werden die Tiefenschwellenwerte in dem Sinn, dass sich die Schwellenwerte maximaler und/oder minimaler Tiefe auf die Tiefen von Primitiven innerhalb eines bestimmten Gebiets beziehen, auf das Gebiet bezogen bestimmt. Falls die Gebiete Kacheln sind, beziehen sich die Tiefenschwellenwerte und die Anzeigelisten auf denselben Bereich des Rendering-Raums, während sich die Tiefenschwellenwerte und die Anzeigelisten nicht auf denselben Bereich des Rendering-Raums beziehen, falls die Gebiete Teilkacheln sind. Das heißt, dass das Primitiv immer noch innerhalb einer anderen Teilkachel derselben Kachel sichtbar sein kann und somit schließlich immer noch in die Anzeigeliste für die Kachel aufgenommen werden kann, falls ein Primitiv den Test gegenüber dem Tiefenschwellenwert für das Gebiet nicht besteht, wenn die Gebiete Teilkacheln sind. Aus diesem Grund ist es konzeptionell sinnvoll, den Schritt S612 als einen Schritt des Aufnehmens einer Primitiv-ID in eine Anzeigeliste für eine Kachel, wenn das Primitiv einen Tiefentest für ein Gebiet der Kachel in Schritt S610 besteht, anzusehen, anstatt den Schritt S612 als einen Schritt des Aussonderns eines Primitivs aus einer Kachel, wenn das Primitiv einen Tiefentest für ein Gebiet der Kachel in Schritt S610 nicht besteht, anzusehen.
  • In Schritt S614 verwendet die Netzlogik 218 die in Schritt S608 bestimmten Schnittpunkte, um zu bestimmen, ob das Netz 506 das Gebiet 504 vollständig bedeckt. In verschiedenen Beispielen können die Schnittpunkte auf verschiedene Arten verwendet werden, um zu bestimmen, ob das Netz 506 das Gebiet 504 vollständig bedeckt. Zum Beispiel kann die Netzlogik 218 bestimmen, ob das Netz das Gebiet 504 vollständig bedeckt, indem sie für jede Kante des Gebiets 504 bestimmt, ob ein Paar aufeinanderfolgender Schnittpunkte auf der auf die Kante ausgerichteten Linie 508 die Kante des Gebiets auf der Linie einschließen, wobei der Abschnitt zwischen den aufeinanderfolgenden Schnittpunkten auf der Linie innerhalb des Netzes 504 liegt. Falls für jede Kante des Gebiets 504 ein Paar aufeinanderfolgender Schnittpunkte die Kante des Gebiets 504 einschließt, wobei der Abschnitt zwischen den aufeinanderfolgenden Schnittpunkten auf der Linie 508 innerhalb des Netzes 506 liegt, wird bestimmt, dass das Netz 506 das Gebiet vollständig bedeckt.
  • Zum Beispiel sind die Schnittpunkte 510 1 und 510 2 auf der Linie 508 1 in dem Sinn aufeinanderfolgend, dass es zwischen den zwei Schnittpunkten 510 1 und 510 2 keine Schnittpunkte der Linie 508 1 mit den externen Kanten des Netzes 506 gibt. Darüber hinaus schließen die Schnittpunkte 510 1 und 510 2 die Oberkante des Gebiets 504 ein, d. h., zwischen den Schnittpunkten 510 1 und 510 2 gibt es keinen Teil der Oberkante des Gebiets 504, der außerhalb des Abschnitts der Linie 508 1 liegt. Darüber hinaus liegt der Abschnitt der Linie 508 1 zwischen den Schnittpunkten 510 1 und 510 2 innerhalb des Netzes 506 (d. h. nicht außerhalb des Netzes 506). Somit sind die Bedingungen für die Oberkante des Gebiets 504 erfüllt. Darüber hinaus sind die Bedingungen in dem in 5 gezeigten Beispiel für jede der Kanten des Gebiets 504 erfüllt. Das heißt, für die Unterkante des Gebiets 504 sind die Schnittpunkte 512 1 und 512 2 aufeinanderfolgend und schließen die Unterkante des Gebiets 504 auf einem Abschnitt der Linie 508 2, der innerhalb des Netzes 506 liegt, ein. Darüber hinaus sind für die linke Kante des Gebiets 504 die Schnittpunkte 514 1 und 514 2 aufeinanderfolgend und schließen die linke Kante des Gebiets 504 auf einem Abschnitt der Linie 508 3, der innerhalb des Netzes 506 liegt, ein. Darüber hinaus sind für die rechte Kante des Gebiets 504 die Schnittpunkte 516 1 und 516 2 aufeinanderfolgend und schließen die rechte Kante des Gebiets 504 auf einem Abschnitt der Linie 508 4, der innerhalb des Netzes 506 liegt, ein. Somit bestimmt die Netzlogik 218 in Schritt S614, dass das Netz 506 das Gebiet 504 vollständig bedeckt.
  • Als ein weiteres Beispiel dafür, wie die Schnittpunkte verwendet werden können, um zu bestimmen, ob das Netz 506 das Gebiet 504 vollständig bedeckt, kann die Netzlogik 218 bestimmen, ob es irgendwelche Schnittpunkte auf den Kanten des mehreckigen Gebiets 504 gibt, und bestimmen, dass wenigstens ein Punkt auf einer Kante des Gebiets 504 von dem Netz 506 bedeckt ist. Falls es keine Schnittpunkte auf den Kanten des Gebiets 504 gibt und falls wenigstens ein Punkt auf einer Kante des Gebiets 504 von dem Netz 506 bedeckt ist, bestimmt die Netzlogik 218, dass das Netz 506 das Gebiet 504 vollständig bedeckt. Zum Beispiel liegt keiner der Schnittpunkte (510 1, 510 2, 512 1, 512 2, 514 1, 514 2, 516 1 oder 516 2) auf der Kante des Gebiets 504 und ist wenigstens ein Punkt auf einer Kante des Gebiets von dem Netz 506 bedeckt, so dass bestimmt werden kann, dass das Netz 506 das Gebiet 504 vollständig bedeckt.
  • Es wird angemerkt, dass das oben in Bezug auf die Bestimmung, ob ein einzelnes Primitiv ein Gebiet vollständig bedeckt, beschriebene Verfahren auf Netze (die konkav sein können) nicht zuverlässig angewendet werden kann. Das heißt, die Bestimmung, ob alle vier Ecken des Gebiets 504 innerhalb des Netzes 506 liegen, bestimmt nicht, ob das Netz 506 das Gebiet 504 vollständig bedeckt.
  • Zum Beispiel zeigt 7 ein komplizierteres Netz 706, das ein Gebiet 704 teilweise, aber nicht vollständig bedeckt. Das Netz 706 umfasst sieben Primitive, wobei die gemeinsamen Kanten zwischen den Primitiven in 7 als punktierte Linien gezeigt sind. Es ist zu sehen, dass das Netz 706 konkav ist. Das heißt, es ist möglich, dass alle vier Ecken des Gebiets 704 innerhalb des Netzes 706 liegen, dass das Netz 706 das Gebiet 704 aber nicht vollständig bedeckt, was wie in 7 gezeigt der Fall ist. Für ein einzelnes konvexes Primitiv ist das nicht möglich. Somit würde das Verfahren zum Bestimmen, ob die vier Ecken des Gebiets 704 innerhalb des Netzes 706 liegen, fälschlicherweise bestimmen, dass das Netz 706 das Gebiet 704 vollständig bedeckt.
  • Um richtig zu bestimmen, ob das Netz 706 das Gebiet 704 vollständig bedeckt, bestimmt die Netzlogik 218 dagegen die Schnittpunkte der externen Kanten des Netzes 706 mit den Linien 708 1, 708 2, 708 3 und 708 4, die in dieser Reihenfolge auf die Oberkante, auf die Unterkante, auf die linke Kante und auf die rechte Kante des Gebiets 704 ausgerichtet sind. Die Schnittpunkte sind in 7 als mit 710 1, 710 2, 712 1, 712 2, 714 1, 714 2, 716 1, 716 2, 716 3 und 716 4 bezeichnete Punkte gezeigt. Es ist zu sehen, dass es für die rechte Kante des Gebiets 704 auf der Linie 708 4 kein Paar aufeinanderfolgender Schnittpunkte gibt, das die rechte Kante des Gebiets 704 vollständig einschließt. Es wird angemerkt, dass die Schnittpunkte 716 1 und 716 4 keine aufeinanderfolgenden Schnittpunkte sind, da auf der Linie 708 4 zwischen den Schnittpunkten 716 1 und 716 4 die Schnittpunkte 716 2 und 716 3 liegen. Somit kann aus diesem ersten Grund bestimmt werden, dass das Netz 706 das Gebiet 704 nicht vollständig bedeckt. Darüber hinaus ist zu sehen, dass die Schnittpunkte 716 2 und 716 3 an der rechten Kante des Gebiets 704 liegen. Somit kann aus diesem zweiten Grund bestimmt werden, dass das Netz 706 das Gebiet 704 nicht vollständig bedeckt. Die Verwendung der Schnittpunkte, um zu bestimmen, ob das Netz 706 das Gebiet 704 vollständig bedeckt, ist ein robusteres Verfahren als die Bestimmung, ob die vier Ecken des Gebiets 704 innerhalb des Netzes 706 liegen.
  • Falls die Netzlogik 218 bestimmt, dass das Netz 706 das Gebiet 704 nicht vollständig bedeckt, geht das Verfahren von Schritt S614 zu Schritt S620 über, der im Folgenden beschrieben wird. In diesem Fall stellt die Netzlogik 218 für die Tiefenschwellenwert-Aktualisierungslogik 220 ein Signal bereit, um anzugeben, dass das Netz 706 das Gebiet 704 nicht vollständig bedeckt, so dass die Tiefenschwellenwert-Aktualisierungslogik 220 den Tiefenschwellenwert bzw. die Tiefenschwellenwerte für das Gebiet 704 nicht zu aktualisieren versucht.
  • Dagegen geht das Verfahren von Schritt S614 zu Schritt S616 über, falls die Netzlogik 218 bestimmt, dass ein Netz ein Gebiet vollständig bedeckt. In diesem Fall stellt die Netzlogik 218 für die Tiefenschwellenwert-Aktualisierungslogik 220 ein Signal bereit, um anzugeben, dass das Netz das Gebiet vollständig bedeckt, so dass die Tiefenschwellenwert-Aktualisierungslogik 220 den Tiefenschwellenwert für das Gebiet 704 zu aktualisieren versucht. 8 zeigt ein weiteres Beispiel eines komplexen Netzes 806, das sehr ähnlich dem in 7 gezeigten Netz 706 ist und das sieben Primitive umfasst. Allerdings bedeckt das Netz 806 das Gebiet 804 vollständig, wobei zu sehen ist, dass das Verfahren der Bestimmung der Schnittpunkte der externen Kanten des Netzes 806 mit den Linien 808 1, 808 2, 808 3 und 808 4 bestimmt, dass das Netz 806 das Gebiet 804 vollständig bedeckt. Das Gebiet 804 kann irgendein geeignetes Gebiet des Rendering-Raums, z. B. eine Kachel oder eine Teilkachel, sein.
  • Wie im Folgenden beschrieben wird, empfängt die Tiefenschwellenwert-Aktualisierungslogik 220 die Primitive und bestimmt für wenigstens eines der Primitive des Netzes 806 innerhalb des Gebiets 804 einen zweiten Tiefenwert. Außerdem gewinnt die Tiefenschwellenwert-Aktualisierungslogik 220 den Tiefenschwellenwert bzw. die Tiefenschwellenwerte für das Gebiet 804 aus dem Tiefenschwellenwertspeicher 222 wieder. In Reaktion auf einen Empfang einer Angabe aus der Netzlogik 218, dass das Netz 806 das Gebiet 804 vollständig bedeckt, vergleicht die Tiefenschwellenwert-Aktualisierungslogik 220 in Schritt S616 den zweiten Tiefenwert für das wenigstens eine der Primitive des Netzes 806 innerhalb des Gebiets 804 mit dem Tiefenschwellenwert für das Gebiet 804. Zum Beispiel können der Schwellenwert maximaler Tiefe und/oder der Schwellenwert minimaler Tiefe (Threshmax und Threshmin) für das Gebiet 804 aus dem Tiefenschwellenwertspeicher 222 wiedergewonnen werden und mit Tiefenwerten der Primitive des Netzes 806, die innerhalb des Gebiets 804 vorhanden sind, verglichen werden. Der Zweck dieses Vergleichs ist es zu bestimmen, ob der Tiefenschwellenwert bzw. die Tiefenschwellenwerte für das Gebiet 804 aktualisiert werden müssen. Somit ist in der Kleiner-als-Tiefenvergleichsbetriebsart (DCM_LESS) oder in der Kleiner-oder-gleich-Tiefenvergleichsbetriebsart (DCM_LESS_EQ) der ”zweite Tiefenwert” der maximale Tiefenwert irgendeines der Primitive des Netzes 806 innerhalb des Gebiets 804 (der hier als ”Meshmax” bezeichnet wird). In diesen Tiefenvergleichsbetriebsarten umfasst der Schritt S616 das Bestimmen, ob Meshmax < Threshmax ist. Da die Primitive in dem hier beschriebenen Beispiel planar sind, ist der maximale Tiefenwert der Primitive des Netzes 806 innerhalb des Gebiets 804 (Meshmax) das Maximum der Tiefenwerte der Primitive des Netzes 806 bei einem von:
    • (i) einem Schnittpunkt einer Kante eines Primitivs des Netzes 806 (unabhängig davon, ob die Kante extern oder intern zu dem Netz 804 ist) mit einer Kante des Gebiets 804, wobei diese Schnittpunkte in 8 von den Punkten 812 1, 812 2, 812 3, 812 4, 812 5, 812 6 und 812 7 bezeichnet sind;
    • (ii) der Position einer Ecke des Gebiets 804 innerhalb eines Primitivs des Netzes 806, wobei diese Positionen in 8 von den Punkten 810 1, 810 2, 810 3 und 810 4 bezeichnet sind; und
    • (iii) einem Knotenpunkt eines Primitivs des Netzes 806 innerhalb des Gebiets 804, wobei diese Knotenpunkte in 8 von den Punkten 814 1 und 814 2 bezeichnet sind.
  • In Schritt S618 aktualisiert die Tiefenschwellenwert-Aktualisierungslogik 220 in Abhängigkeit von dem in Schritt S616 ausgeführten Vergleich einen Tiefenschwellenwert für das Gebiet 804. Zum Beispiel wird der Schwellenwert (Threshmax) maximaler Tiefe für das Gebiet 804 in der Kleiner-als-Tiefenvergleichsbetriebsart (DCM_LESS) oder in der Kleiner-oder-gleich-Tiefenvergleichsbetriebsart (DCM_LESS_EQ) so aktualisiert, dass er gleich Meshmax ist, falls Meshmax < Threshmax ist. Der aktualisierte Tiefenschwellenwert für das Gebiet 804 wird im Tiefenschwellenwertspeicher 222 gespeichert und kann von der Kachelungslogik 216 zum Aussondern (Culling) nachfolgender Primitive in den Schritten S610 und S612 verwendet werden.
  • Der ”zweite Tiefenwert” ist in der Größer-als-Tiefenvergleichsbetriebsart (DCM_GREATER) oder in der Größer-oder-gleich-Tiefenvergleichsbetriebsart (DCM_GREATER_EQ) der minimale Tiefenwert irgendeines der Primitive des Netzes 806 innerhalb des Gebiets 804 (der hier als ”Meshmin” bezeichnet wird). In diesen Tiefenvergleichsbetriebsarten umfasst der Schritt S616 ein Bestimmen, ob Meshmin < Threshmin ist. Da die Primitive in dem hier beschriebenen Beispiel planar sind, ist der minimale Tiefenwert der Primitive des Netzes 806 innerhalb des Gebiets 804 (Meshmin) ähnlich wie oben beschrieben das Minimum der Tiefenwerte der Primitive des Netzes 806 bei einem von:
    • (i) einem Schnittpunkt einer Kante eines Primitivs des Netzes 806 (unabhängig davon, ob die Kante extern oder intern zu dem Netz 804 ist) mit einer Kante des Gebiets 804, wobei diese Schnittpunkte in 8 durch die Punkte 812 1, 812 2, 812 3, 812 4, 812 5, 812 6 und 812 7 bezeichnet sind;
    • (ii) der Position eine Ecke des Gebiets 804 innerhalb eines Primitivs des Netzes 806, wobei diese Positionen in 8 durch die Punkte 810 1, 810 2, 810 3 und 810 4 bezeichnet sind; und
    • (iii) einem Knotenpunkt eines Primitivs des Netzes 806 innerhalb des Gebiets 804, wobei diese Knotenpunkte in 8 durch die Punkte 814 1 und 814 2 bezeichnet sind.
  • In der Größer-als-Tiefenvergleichsbetriebsart (DCM_GREATER) oder in der Größer-oder-gleich-Tiefenvergleichsbetriebsart (DCM_GREATER_EQ) aktualisiert die Tiefenschwellenwert-Aktualisierungslogik 220 in Schritt S618 den Schwellenwert minimaler Tiefe für das Gebiet 804. Falls Meshmin < Threshmin ist, wird Threshmin so aktualisiert, dass er gleich Meshmin ist. Der aktualisierte Tiefenschwellenwert für das Gebiet 804 wird in dem Tiefenschwellenwertspeicher 222 gespeichert und kann von der Kachelungslogik 216 zur Verwendung beim Aussondern (Culling) nachfolgender Primitive in den Schritten S610 und S612 aus dem Speicher 222 gelesen werden.
  • Es wird angemerkt, dass die Schritte S616 und S618 zum Aktualisieren der Tiefenschwellenwerte für das in 5 gezeigte Gebiet 504 ausgeführt würden, da das Gebiet 504 von dem Gebiet 506 vollständig bedeckt ist.
  • In Schritt S620 wird bestimmt, ob weitere Gebiete des Rendering-Raums mit den Primitiven des Netzes zu betrachten sind. Das heißt, es wird bestimmt, ob das Netz über andere Gebiete verläuft. Falls das Netz über andere Gebiete verläuft, kehrt das Verfahren zu Schritt S608 zurück und wird das Verfahren ab diesem Schritt für das nächste Gebiet wiederholt.
  • Falls keine weiteren Gebiete für das Netz zu betrachten sind, geht das Verfahren von Schritt S620 zu Schritt S622 über. In Schritt S622 wird bestimmt, ob bei der Kachelungseinheit 208 weitere Primitive, z. B. Primitive eines anderen Netzes, empfangen worden sind. Falls weitere Primitive empfangen worden sind, kehrt das Verfahren zu Schritt S604 zurück und wird das Verfahren ab diesem Punkt für die nächsten Primitive, z. B. des nächsten Netzes, wiederholt. Falls in der Kachelungseinheit 208 keine weiteren Primitive zu verarbeiten sind, geht das Verfahren von Schritt S622 zu Schritt S624 über, in dem das Verfahren endet. Wenn die Primitive für ein Bild verarbeitet worden sind, sind die Anzeigelisten im Speicher 204 1 für die Kacheln des Rendering-Raums für das Bild abgeschlossen. Darüber hinaus werden die Primitive (z. B. in Primitivblöcken) aus der Kachelungseinheit 208 ausgegeben und im Speicher 204 1 gespeichert. Daraufhin kann der Rasterungsblock 210 nachfolgend die Anzeigeliste für eine Kachel und die für diese Kachel relevanten Primitive aus dem Speicher 204 1 abrufen, so dass das HSR-Modul 212 die Entfernung verdeckter Flächen ausführen kann, um dadurch Fragmente von Primitiven, die in der Szene verdeckt sind, zu entfernen. Die verbleibenden Fragmente werden an das Texturierungs-/Schattierungsmodul 214 übergeben, das an den Fragmenten eine Texturierung und/oder Schattierung ausführt, um die Pixelfarbwerte eines gerenderten Bilds zu bestimmen, das zur Speicherung in einem Rahmenpuffer an den Speicher 204 2 übergeben werden kann. Der Rasterungsblock 210 verarbeitet jede der Kacheln, wobei das Bild aus dem Graphikverarbeitungssystem 200 ausgegeben werden kann und z. B. auf einer Anzeige angezeigt werden kann, wenn das gesamte Bild gerendert und im Speicher 204 2 gespeichert worden ist.
  • Somit wird gewürdigt werden, dass das oben anhand des in 6 gezeigten Flussdiagramms beschriebene Verfahren ermöglicht, dass die Kachelungseinheit 208 Primitive zu Kacheln des Rendering-Raums zuweist, indem sie Anzeigelisten für die Kacheln erzeugt, wobei der Tiefenschwellenwert bzw. die Tiefenschwellenwerte für ein Gebiet aktualisiert werden können, wenn ein Netz von Primitiven das Gebiet vollständig bedeckt. Ein Aktualisieren des Tiefenschwellenwerts bzw. der Tiefenschwellenwerte für das Gebiet ermöglicht, dass mehr Primitive von der Kachelungslogik 216 ausgesondert werden, was somit die Anzahl der in den Anzeigelisten umfassten Primitiv-IDs verringert. Es ist viel wahrscheinlicher, dass ein Netz von Primitiven ein Gebiet des Rendering-Raums vollständig bedeckt, als dass ein einzelnes Primitiv das Gebiet des Rendering-Raums vollständig bedeckt.
  • In dem in 6 gezeigten Flussdiagramm werden die Schritte S604, S606 und S608 vor den Schritten S610 und S612 ausgeführt. In anderen Beispielen können die Schritte S610 und S612 vor den Schritten S604, S606 und S608 ausgeführt werden und könnte die Netzlogik 218 nur die Schritte S604, S606 und S608 ausführen, um zu bestimmen, ob die empfangenen Primitive ein Netz bilden, das das Gebiet vollständig bedeckt, falls die IDs der Primitive in die Anzeigelisten aufgenommen worden sind. Dies weist den Vorteil auf, dass die den Schritten S604, S606 und S608 zugeordnete Verarbeitung für Primitive, die ausgesondert worden sind, vermieden wird, weist aber den Nachteil auf, dass die Schritte S604 und S606 für jedes Gebiet, in dem die Primitive vorhanden sind, wiederholt werden.
  • Anhand des in 9 gezeigten Flussdiagramms wird nun ein zweites Verfahren zum Zuweisen von Primitiven zu Kacheln in der Kachelungseinheit 208 beschrieben. Dieses Verfahren verwendet das Konzept des Bestimmens, ob ein Netz oder ein einzelnes Primitiv ein Gebiet des Rendering-Raums vollständig bedeckt, wobei diese Informationen in diesem Verfahren aber verwendet werden, um einen Startzeiger einer Anzeigeliste für eine Kachel zu verschieben, falls Primitive, deren IDs in der Anzeigeliste umfasst sind, von einem nachfolgenden Satz eines oder mehrerer Primitive (z. B. eines Netzes oder eines einzelnen Primitivs), der die Kachel vollständig bedeckt, verdeckt sind. Das heißt, falls ein Primitiv oder ein Netz von Primitiven alle Gebiete der Kachel vollständig bedeckt, so dass alle vorhergehenden Primitive in der Kachel verborgen (d. h. verdeckt) sind, kann ein Startzeiger der Anzeigeliste verschoben werden, um dadurch die verborgenen Primitive zu überspringen. Auf diese Weise ruft das HSR-Modul 212 die vorhergehenden Primitive, die schließlich von dem Satz eines oder mehrerer Primitive, der das Gebiet vollständig bedeckt, verdeckt würden, nicht ab. Somit verringert dieses Verfahren die Anzahl der Primitive, die von dem HSR-Modul 212 aus dem Speicher 204 1 abgerufen werden. Das Verfahren wird im Folgenden anhand des in 5 gezeigten Netzes von Primitiven 506 beschrieben, das das Gebiet 504 vollständig bedeckt, wäre aber ebenfalls auf das in 7 bzw. 8 gezeigte Netz von Primitiven 706 oder 806 anwendbar und wäre ebenfalls auf den Fall eines einzelnen Primitivs anwendbar, das das Gebiet bzw. die Gebiete einer Kachel vollständig bedeckt. Es wird angemerkt, dass das Netz 706 das Gebiet 704 nicht vollständig bedeckt, so dass in diesem Fall bestimmt wird, dass der Anzeigelisten-Startzeiger nicht verschoben werden kann.
  • Der Schritt S902 ist ähnlich dem oben anhand von 6 beschriebenen Schritt S602. Das heißt, in Schritt S902 werden bei der Kachelungseinheit 208 Primitive des Netzes 506 empfangen. In einigen Beispielen könnten die Primitive keine Netze bilden und können die im Folgenden beschriebenen Verfahren auf einzelne Primitive sowie auf Netze von Primitiven anwendbar sein. Im Allgemeinen können die im Folgenden beschriebenen Verfahren auf einen empfangenen Satz eines oder mehrerer Primitive anwendbar sein.
  • In Schritt S904 nimmt die Kachelungslogik 216 Angaben von Primitiven, die innerhalb des Gebiets 504 vorhanden sind, in die Anzeigeliste für die Kachel, von der das Gebiet 504 ein Teil ist, auf, um dadurch die Primitive der Kachel zuzuweisen. Der Schritt S904 kann Tiefentests wie etwa den oben beschriebenen umfassen, so dass einige Primitive ausgesondert werden und nicht in die Anzeigeliste für die Kachel aufgenommen werden, falls sie einen Tiefentest gegenüber einem Tiefenschwellenwert für das Gebiet 504 der Kachel nicht bestehen. Allerdings kann der Schritt S904 einfach das Zuweisen von Primitiven zu Kacheln auf der Grundlage dessen, ob die Primitive innerhalb der Kacheln vorhanden sind, unabhängig von den Tiefen der Primitive umfassen. Die Anzeigelisten werden im Speicher 204 1 gespeichert.
  • In dem Beispiel, in dem die empfangenen Primitive ein Netz bilden, bestimmt die Netzlogik 218 in Schritt S906 auf ähnliche Weise wie oben anhand von Schritt S604 beschrieben, z. B. durch Bestimmung, dass mehrere empfangene Primitive Primitivkanten gemeinsam haben, dass die empfangenen Primitive ein Netz bilden.
  • In dem Beispiel, in dem die empfangenen Primitive ein Netz bilden, identifiziert die Netzlogik 218 in Schritt S908 auf ähnliche Weise wie oben anhand des Schritts S606 beschrieben externe Kanten des Netzes 506. Die externen Kanten des Netzes 506 beschreiben die Außenkanten des von den mehreren Primitiven gebildeten Netzes. Zum Beispiel können die externen Kanten des Netzes 506 wie oben beschrieben dadurch identifiziert werden, dass Primitivkanten identifiziert werden, die nicht mehrere Primitive des Netzes 506 gemeinsam haben. Wie in 5 zu sehen ist, sind die gemeinsamen Kanten 518 1 und 518 2 interne Kanten des Netzes 506 und sind die Kanten der Primitive des Netzes 506, die nicht mehr als eines der Primitive gemeinsam hat, die externen Kanten des Netzes 506. Es sind die externen Kanten des Netzes 506, die das Ausmaß der Bedeckung des Netzes 506 beschreiben.
  • In dem Beispiel, in dem die empfangenen Primitive ein Netz bilden, identifiziert die Netzlogik 218 in Schritt S910 für jedes Gebiet einer Kachel (z. B. für das Gebiet 504) Schnittpunkte (z. B. die in 5 gezeigten Punkte 510 1, 510 2, 512 1, 512 2, 514 1, 514 2, 516 1 und 516 2), wobei sich die identifizierten externen Kanten des Netzes 506 mit den Linien (z. B. 508 1, 508 2, 508 3 und 508 4), die auf die Kanten des mehreckigen Gebiets 504 ausgerichtet sind (und von ihnen ausgehen), schneiden.
  • In Schritt S912 werden die in Schritt S910 bestimmten Schnittpunkte verwendet, um zu bestimmen, ob das Netz 506 das Gebiet 504 vollständig bedeckt. Dies erfolgt für jedes des einen oder der mehreren Gebiete einer Kachel. Wie oben beschrieben kann dies z. B. dadurch erfolgen, dass für jede Kante des Gebiets 504 bestimmt wird, ob ein Paar aufeinanderfolgender Schnittpunkte auf der auf die Kante ausgerichteten Linie 508 die Kante des Gebiets 504 auf der Linie 508 einschließt, wobei der Abschnitt zwischen den aufeinanderfolgenden Schnittpunkten auf der Linie 508 innerhalb des Netzes 506 liegt. Falls für jede Kante des mehreckigen Gebiets 504 ein Paar aufeinanderfolgender Schnittpunkte die Kante des Gebiets 504 einschließt, wobei der Abschnitt zwischen den aufeinanderfolgenden Schnittpunkten auf der Linie 508 innerhalb des Netzes 506 liegt, wird bestimmt, dass das Netz 506 das Gebiet 504 vollständig bedeckt. Alternativ können die identifizierten Schnittpunkte dazu verwendet werden zu bestimmen, ob das Netz 506 das mehreckige Gebiet 504 der Kachel vollständig bedeckt, indem bestimmt wird, ob es irgendwelche Schnittpunkte auf den Kanten des Gebiets 504 gibt, und indem bestimmt wird, dass wenigstens ein Punkt auf einer Kante des Gebiets 504 von dem Netz 506 bedeckt ist. Falls es auf den Kanten des Gebiets 504 keine Schnittpunkte gibt und falls wenigstens ein Punkt auf einer Kante des Gebiets 504 von dem Netz 506 bedeckt ist, wird bestimmt, dass das Netz 506 das Gebiet 504 vollständig bedeckt. In Beispielen, in denen einzelne konvexe Primitive betrachtet werden, wird daraufhin in Schritt S912 bestimmt, ob ein Primitiv das Gebiet 504 vollständig bedeckt. Wie oben beschrieben wurde, kann dies z. B. dadurch erfolgen, dass bestimmt wird, ob alle Ecken des Gebiets 504 innerhalb des einzelnen konvexen Primitivs liegen.
  • Falls das Netz 506 das Gebiet 504 vollständig bedeckt, geht das Verfahren zu Schritt S914 über und sendet die Netzlogik 218 an die Kachelungslogik 216 ein Signal, um anzugeben, dass das Netz 506 das gesamte Gebiet 504 bedeckt. Dasselbe trifft in allgemeineren Beispielen zu, in denen ein Satz eines oder mehrerer Primitive das Gebiet 504 vollständig bedeckt. Die folgende Beschreibung bezieht sich auf den Fall, dass das Netz 506 das Gebiet 504 vollständig bedeckt, wobei dieselben Prinzipien auch auf den Fall eines einzelnen Primitivs anwendbar sind, das das Gebiet 504 vollständig bedeckt. In Schritt S914 gewinnt die Kachelungslogik 216 aus dem Tiefenschwellenwertspeicher 222 einen Tiefenschwellenwert für das Gebiet 504 wieder. Außerdem bestimmt die Kachelungslogik 216 für wenigstens eines der Primitive des Netzes 506, das innerhalb des Gebiets 504 anwesend ist, einen Tiefenwert. Daraufhin vergleicht die Kachelungslogik 216 den Tiefenschwellenwert für das Gebiet 504 mit dem Tiefenwert für das wenigstens eine der empfangenen Primitive des Netzes 506. Dieser Vergleich dient zur Bestimmung, ob das Netz 506 vorhergehende Primitive im Gebiet 504 vollständig verbirgt, wobei die Kachelungslogik 216 in Schritt S916 bestimmt, ob das Netz 506 vorhergehende Primitive im Gebiet 504, die in der Anzeigeliste für die Kachel umfasst sind, vollständig verbirgt. Zum Beispiel kann das Netz 506 vollständig vor allen vorhergehenden Primitiven liegen, für die IDs in der Anzeigeliste für eine Kachel aufgenommen worden sind, so dass das Netz 506 die vorhergehenden Primitive im Gebiet 504 verbergen (d. h. verdecken) kann. Das heißt, wenn das HSR-Modul 212 für die im Gebiet 504 enthaltene Kachel die Entfernung verdeckter Flächen ausführt, bestimmt es, dass die vorhergehenden Primitive von dem Netz 506 im Gebiet 504 verdeckt sind.
  • Der Schritt S916 berücksichtigt den Typ der Primitive im Netz 506. Es wird angemerkt, dass ”Punch-Through”-Primitive hier als Primitive beschrieben sind, für die die Sichtbarkeit der Pixel in den Primitiven Shader-abhängig ist. Zum Beispiel können einige Typen von Primitiven (z. B. undurchsichtige Primitive) Primitive, die hinter ihnen liegen, vollständig verbergen, während einige andere Typen von Primitiven (z. B. durchscheinende oder Punch-through-Primitive) Primitive, die hinter ihnen liegen, nicht vollständig verbergen können. Somit kann die Kachelungslogik 216 bestimmen, dass das Netz 506 die vorhergehenden Primitive im Gebiet 504 vollständig verbirgt, falls die Primitive des Netzes 506, die das Gebiet 504 bedecken, undurchsichtige Primitive sind, aber nicht, falls die Primitive des Netzes 506, die das Gebiet 504 bedecken, durchscheinende Primitive oder Punch-through-Primitive oder Primitive mit Shader-abhängigen Tiefen sind. Die Anwesenheit von Fragmenten von Punch-through-Primitiven kann von dem Texturierungs- und Schattierungsmodul 214 geändert werden, d. h., das Texturierungs-/Schattierungsmodul 214 kann bestimmen, dass einige Fragmente von Punch-through-Primitiven nicht vorhanden sind, so dass sie die hinter ihnen liegenden Primitive nicht verbergen. Darüber hinaus können die Tiefenwerte von Fragmenten von Primitiven mit Shader-abhängigen Tiefen von dem Texturierungs- und Schattierungsmodul 214 geändert werden, das irgendeine Bestimmung, die die Kachelungseinheit 208 vornehmen kann, ob diese Primitive andere Primitive im Gebiet 504 verbergen, ändern kann. Somit bestimmt die Kachelungslogik 216 nicht, dass das Netz 506 die vorhergehenden Primitive im Gebiet 504, die in der relevanten Anzeigeliste umfasst sind, vollständig verbirgt, falls die Primitive des Netzes oder die vorhergehenden Primitive Shader-abhängige Tiefen aufweisen.
  • Ähnlich wie oben beschrieben wurde, ist der Tiefenwert für das wenigstens eine der Primitive des Netzes 506, der mit dem Tiefenschwellenwert für das Gebiet 504 verglichen wird, der Tiefenwert eines Primitivs des Netzes 506 im Gebiet 504 bei einem von:
    • (i) einem Schnittpunkt einer Kante des Primitivs mit einer Kante des Gebiets 504;
    • (ii) der Position einer Ecke des Gebiets 504 innerhalb des Primitivs; und
    • (iii) einem Knotenpunkt des Primitivs innerhalb des Gebiets.
  • Falls die Tiefenvergleichsbetriebsart die Kleiner-als-Vergleichsbetriebsart (DCM_LESS) oder die Kleiner-oder-gleich-Vergleichsbetriebsart (DCM_LESS_EQ) ist, ist der Tiefenwert für das wenigstens eine der empfangenen Primitive des Netzes 506 der maximale Tiefenwert irgendeines der Primitive des Netzes 506 innerhalb des Gebiets 504 (der hier als ”Meshmax” bezeichnet ist). Darüber hinaus bestimmt die Kachelungslogik 216, dass das Netz 506 vorhergehende Primitive im Gebiet 504 vollständig verbirgt, falls der maximale Tiefenwert (Meshmax) irgendwelcher der Primitive des Netzes 506 innerhalb des Gebiets 504 kleiner als der Schwellenwert (Threshmin) minimaler Tiefe für das Gebiet 504 der Kachel ist, falls die Tiefenvergleichsbetriebsart die Kleiner-als-Vergleichsbetriebsart (DCM_LESS) ist, da dies heißt, dass der höchste Tiefenwert des Netzes 506 innerhalb des Gebiets 504 kleiner als der minimale Tiefenwert irgendwelcher vorhergehenden Primitive im Gebiet 504 ist, so dass das Netz 506 die vorhergehenden Primitive im Gebiet 504 vollständig verbirgt. Falls die Tiefenvergleichsbetriebsart die Kleiner-oder-gleich-Vergleichsbetriebsart (DCM_LESS_EQ) ist, bestimmt die Kachelungslogik 216, dass das Netz 506 vorhergehende Primitive im Gebiet 504 vollständig verbirgt, falls der maximale Tiefenwert (Meshmax) irgendwelcher der Primitive des Netzes 506 innerhalb des Gebiets 504 kleiner oder gleich dem Schwellenwert (Threshmin) minimaler Tiefe für das Gebiet 504 der Kachel ist, da dies heißt, dass der höchste Tiefenwert des Netzes 506 innerhalb des Gebiets 504 kleiner oder gleich dem minimalen Tiefenwert irgendwelcher vorhergehenden Primitive im Gebiet 504 ist, so dass das Netz 506 die vorhergehenden Primitive im Gebiet 504 vollständig verbirgt.
  • Falls die Tiefenvergleichsbetriebsart die Größer-als-Vergleichsbetriebsart (DCM_GREATER) ist oder die Größer-oder-gleich-Vergleichsbetriebsart (DCM_GREATER_EQ) ist, ist der Tiefenwert für das wenigstens eine der empfangenen Primitive des Netzes 506 der minimale Tiefenwert irgendwelcher der Primitive des Netzes 506 innerhalb des Gebiets 504 (hier als ”Meshmin” bezeichnet). Darüber hinaus bestimmt die Kachelungslogik 216, dass das Netz 506 vorhergehende Primitive im Gebiet 504 vollständig verbirgt, falls der minimale Tiefenwert (Meshmin) irgendwelcher der Primitive des Netzes 506 innerhalb des Gebiets 504 größer als der Schwellenwert (Threshmax) maximaler Tiefe für das Gebiet 504 der Kachel ist, falls die Tiefenvergleichsbetriebsart die Größer-als-Vergleichsbetriebsart (DCM_GREATER) ist, da dies heißt, dass der niedrigste Tiefenwert des Netzes 506 innerhalb des Gebiets 504 größer als der maximale Tiefenwert irgendwelcher vorhergehenden Primitive im Gebiet 504 ist, so dass das Netz 506 die vorhergehenden Primitive im Gebiet 504 vollständig verbirgt. Falls die Tiefenvergleichsbetriebsart die Größer-oder-gleich-Vergleichsbetriebsart (DCM_GREATER_EQ) ist, bestimmt die Kachelungslogik 216, dass das Netz 506 vorhergehende Primitive im Gebiet 504 vollständig verbirgt, falls der minimale Tiefenwert (Meshmin) irgendeines der Primitive des Netzes 506 innerhalb des Gebiets 504 größer oder gleich dem Schwellenwert (Threshmax) maximaler Tiefe für das Gebiet 504 der Kachel ist, da dies heißt, dass der niedrigste Tiefenwert des Netzes 506 innerhalb des Gebiets 504 größer oder gleich dem maximalen Tiefenwert irgendwelcher vorhergehenden Primitive im Gebiet 504 ist, so dass das Netz 506 die vorhergehenden Primitive im Gebiet 504 vollständig verbirgt.
  • Falls die Kachelungslogik 216 bestimmt, dass das Netz 506 die vorhergehenden Primitive im Gebiet 504 vollständig verbirgt, geht das Verfahren daraufhin zu Schritt S918 über. Falls das Netz 506 die vorhergehenden Primitive in allen des einen oder der mehreren Gebiete der Kachel vollständig verbirgt, setzt die Kachelungslogik 216 in Schritt S918 einen Anzeigelisten-Startzeiger, um anzugeben, dass eine Angabe eines der Primitive des Netzes 506 ein Startpunkt in der Anzeigeliste für die Kachel ist. Der Anzeigelisten-Startzeiger kann eine Anzeigelisten-Startadresse sein, die diejenige Adresse innerhalb der Anzeigeliste angibt, die der Startpunkt in der Anzeigeliste für die Kachel sein soll.
  • 10 zeigt ein Beispiel einer Anzeigeliste 1002 für eine Kachel. Die Anzeigeliste 1002 umfasst einen Anfangsblock 1004 und einen Satz von Primitiv-IDs 1006, die die Primitive angeben, die innerhalb der Kachel vorhanden sind. Es wird angemerkt, dass in einigen Beispielen die Anzeigelisten für mehrere Kacheln in derselben Datenstruktur umfasst sein können, dass aber für jede Primitiv-ID in der Datenstruktur eine Angabe einer Kachel ermöglicht, dass die Anzeigelisten für die unterschiedlichen Kacheln identifiziert werden. 10 zeigt die Primitiv-IDs 1006, die für eine Kachel relevant sind. Wie in 10 gezeigt ist, kann ein Startzeiger anfangs auf die erste Primitiv-ID in der Anzeigeliste 1002 zeigen. Das heißt, wenn das HSR-Modul 212 die Anzeigeliste 1002 liest, würde es, wie von dem Startzeiger angegeben ist, bei der ersten Primitiv-ID in der Anzeigeliste 1002 beginnen und das identifizierte Primitiv abrufen und nachfolgend die nachfolgenden Primitive, die nachfolgend in der Anzeigeliste 1002 identifiziert sind, abrufen. Daraufhin würde das HSR-Modul 212 die Primitive in der Reihenfolge, in der sie in der Anzeigeliste 1002 angegeben sind, verarbeiten, um dadurch an den Primitiven in der Kachel eine Entfernung verdeckter Flächen auszuführen. Als ein Beispiel können die von den jeweiligen IDs in der Anzeigeliste 1002 gezeigten Primitive 7, 8 und 9 die Primitive sein, die das Netz 506 bilden, und können die von den jeweiligen IDs in der Anzeigeliste 1002 gezeigten Primitive 1, 3 und 4 vorhergehende Primitive sein, die in der Anzeigeliste 1002 umfasst sind, die aber von dem Netz 506 vollständig verborgen sind. Somit kann der Startzeiger für die Anzeigeliste 1002 in Schritt S918 so gesetzt werden, dass er auf die ID des Primitivs 7 (d. h. des ersten Primitivs des Netzes 506, das in der Anzeigeliste 1002 umfasst ist) zeigt. Wenn das HSR-Modul 212 die Anzeigeliste 1002 liest, beginnt es auf diese Weise bei der ID des Primitivs 7, so dass es die Primitive 1, 3 oder 4 nicht abruft. Die Primitive 1, 3 und 4 werden von dem HSR-Modul 212 nicht für die Verarbeitung der Kachel benötigt, da sie von dem Netz 506 in der Kachel vollständig verborgen sind. Somit kann dadurch, dass der Startzeiger für die Anzeigeliste 1002 verschoben wird, die Anzahl der Primitive, die von dem HSR-Modul 212 abgerufen werden, verringert werden. Dies kann die Menge an Daten verringern helfen, die zwischen der GPU 202 und den Speichern 204 übertragen werden.
  • In einigen Beispielen können die IDs verborgener Primitive in der Anzeigeliste 1002 gelassen werden. In anderen Beispielen können die IDs verborgener Primitive aus der Anzeigeliste 1002 entfernt werden, was die von der Anzeigeliste 1002 verbrauchte Menge an Speicher verringern würde.
  • Unabhängig davon, ob das Netz 506 das Gebiet 504 vollständig bedeckt, und unabhängig davon, ob das Netz 506 die vorhergehenden Primitive im Gebiet 504 vollständig verbirgt, umfasst das Verfahren den Schritt S920. In Schritt S920 aktualisiert die Tiefenschwellenwert-Aktualisierungslogik 220 in Abhängigkeit von Tiefenwerten empfangene Primitive, die innerhalb des Gebiets 504 vorhanden sind und für die Angaben in der Anzeigeliste 1002 für die Kachel umfasst sind, den Tiefenschwellenwert für das Gebiet. Der aktualisierte Tiefenschwellenwert wird im Tiefenschwellenwertspeicher 222 gespeichert. Zum Beispiel vergleicht die Tiefenschwellenwert-Aktualisierungslogik 220 in der Kleiner-als-Tiefenvergleichsbetriebsart (DCM_LESS) und in der Kleiner-oder-gleich-Tiefenvergleichsbetriebsart (DCM_LESS_EQ) die minimale Tiefe irgendwelcher der Primitive des Netzes 506 innerhalb des Gebiets 504 (Meshmin) mit dem Minimumschwellenwert für das Gebiet 504 (Threshmin), wobei der Tiefenschwellenwert Threshmin aktualisiert wird, so dass er gleich Meshmin ist, falls Meshmin < Threshmin ist. Auf diese Weise gibt der Tiefenschwellenwert für das Gebiet 504 die minimale Tiefe irgendeines Primitivs an, das innerhalb des Gebiets 504 vorhanden ist und das aktuell von einer Primitiv-ID in der Anzeigeliste 1002 identifiziert ist.
  • Ähnlich vergleicht die Tiefenschwellenwert-Aktualisierungslogik 220 in der Größer-als-Tiefenvergleichsbetriebsart (DCM_GREATER) und in der Größer-oder-gleich-Tiefenvergleichsbetriebsart (DCM_GREATER_EQ) die maximale Tiefe irgendwelcher der Primitive des Netzes 506 innerhalb des Gebiets 504 (Meshmax) mit dem Maximumschwellenwert (Threshmax) für das Gebiet 504, wobei der Tiefenschwellenwert Threshmax so aktualisiert wird, dass er gleich Meshmax ist, falls Meshmax > Threshmax ist. Auf diese Weise gibt der Tiefenschwellenwert für das Gebiet 504 die maximale Tiefe irgendeines Primitivs an, das innerhalb des Gebiets 504 vorhanden ist und das aktuell durch eine Primitiv-ID in der Anzeigeliste 1002 identifiziert ist.
  • In Schritt S922 wird bestimmt, ob weitere Kacheln des Rendering-Raums mit den Primitiven des Netzes 506 zu betrachten sind. Das heißt, es wird bestimmt, ob das Netz 506 über andere Kacheln verläuft. Falls das Netz 506 über andere Kacheln verläuft, kehrt das Verfahren zu Schritt S910 zurück und wird das Verfahren ab diesem Punkt für die nächste Kachel wiederholt.
  • Falls keine weiteren Kacheln für das Netz 506 zu betrachten sind, geht das Verfahren von Schritt S922 zu Schritt S924 über. In Schritt S924 wird bestimmt, ob bei der Kachelungseinheit 208 weitere Primitive, z. B. Primitive eines anderen Netzes, empfangen worden sind. Falls weitere Primitive empfangen worden sind, kehrt das Verfahren zu Schritt S904 zurück und wird das Verfahren ab diesem Punkt für die nächsten Primitive, z. B. des nächsten Netzes, wiederholt. Falls keine weiteren Primitive in der Kachelungseinheit 208 zu verarbeiten sind, geht das Verfahren von Schritt S924 zu Schritt S926 über, in dem das Verfahren endet.
  • Wie oben beschrieben wurde, sind die Anzeigelisten im Speicher 204 1 für die Kacheln des Rendering-Raums für das Bild abgeschlossen, wenn die Primitive für ein Bild verarbeitet worden sind. Darüber hinaus werden die Primitive (z. B. in Primitivblöcken) aus der Kachelungseinheit 208 gesendet und im Speicher 204 1 gespeichert. Nachfolgend kann der Rasterungsblock 210 die Anzeigeliste für eine Kachel und die für diese Kachel relevanten Primitive aus dem Speicher 204 1 wiedergewinnen, wobei das HSR-Modul 212 daraufhin an den von den Primitiv-IDs in der Anzeigeliste, wie sie in der Kachel vorhanden sind, angegebenen Primitiven eine Entfernung verdeckter Flächen ausführen kann, um dadurch Fragmente von Primitiven, die in der Szene verdeckt sind, zu entfernen. Die verbleibenden Fragmente werden an das Texturierungs-/Schattierungsmodul 214 übergeben, das an den Fragmenten eine Texturierung und/oder Schattierung ausführt, um Pixelfarbwerte eines gerenderten Bilds zu bestimmen, die zur Speicherung in einem Rahmenpuffer an den Speicher 204 2 übergeben werden können. Der Rasterungsblock 210 verarbeitet jede der Kacheln, wobei das Bild aus dem Graphikverarbeitungssystem 200 ausgegeben und z. B. auf einer Anzeige angezeigt werden kann, wenn das gesamte Bild gerendert und im Speicher 204 2 gespeichert worden ist.
  • Das oben anhand von 9 beschriebene Verfahren bezieht sich auf das in 5 gezeigte Beispiel, in dem das Netz 506 das Gebiet 504 vollständig bedeckt. Wie oben erwähnt wurde, kann das Verfahren ebenfalls in anderen Beispielen wie etwa in dem in 7 gezeigten Beispiel des Netzes 706, das das Gebiet 704 teilweise bedeckt (obwohl der Anzeigelisten-Startzeiger in diesem Fall nicht verschoben wird, da das Netz 706 das Gebiet 704 nicht vollständig bedeckt), oder in dem in 8 gezeigten Beispiel des Netzes 806, das das Gebiet 804 vollständig bedeckt, oder in einem Beispiel, in dem ein einzelnes Primitiv ein Gebiet vollständig bedeckt, angewendet werden.
  • Die Logikblöcke der Kachelungseinheit 208 (z. B. die Logikblöcke 216, 218 und 220) können in der GPU 202 in Hardware oder in Software oder in einer Kombination davon implementiert werden. Zum Beispiel können die Logikblöcke 216, 218 und 220, falls sie in Hardware implementiert werden, als bestimmte Anordnungen von Transistoren und anderen Hardwarekomponenten, die für die Ausführung der gewünschten Funktionen der Logikblöcke, wie sie hier beschrieben sind, geeignet sind, gebildet werden. Im Gegensatz dazu können die Logikblöcke 216, 218 und 220, falls sie in Software implementiert werden, Sätze von Computeranweisungen umfassen, die in einem Speicher gespeichert werden können und zur Ausführung darin der GPU 202 bereitgestellt werden können. Obwohl das Graphikverarbeitungssystem in den hier beschriebenen Beispielen eine GPU verwendet, könnte darüber hinaus in anderen Beispielen eine Universalverarbeitungseinheit, z. B. eine CPU, verwendet werden, um die Funktionalität, die hier als in der GPU 202 implementiert beschrieben ist, zu implementieren.
  • Das oben beschriebene Graphikverarbeitungssystem 200 kann in einem Computersystem implementiert werden. Zum Beispiel zeigt 11 ein Computersystem, das die GPU 202, eine CPU 1102 und einen Speicher 1104 umfasst, wobei der Speicher 1104 Speicherblöcke umfassen kann, die den oben beschriebenen Speichern 204 1 und 204 2 entsprechen. Außerdem umfasst das Computersystem andere Vorrichtungen 1106 wie etwa eine Anzeige 1108, Lautsprecher 1110, ein Mikrophon 1112 und ein Tastenfeld 1114. Die Komponenten des Computersystems können über einen Kommunikationsbus 1116 miteinander kommunizieren. In dem Speicher 1104 kann Computerprogrammcode für eine Anwendung gespeichert sein, wobei dieser z. B. in der CPU 1102 ausgeführt werden kann. Falls die Anwendung ein Bild einer 3D-Szene rendern muss, können die Primitive an die GPU 202 gesendet werden und kann die GPU 202 die Szene wie oben beschrieben rendern.
  • Allgemein können irgendwelche der oben beschriebenen Funktionen, Verfahren, Techniken oder Komponenten (z. B. die Kachelungseinheit 208 und ihre Komponenten) unter Verwendung von Software, Firmware, Hardware (z. B. fester Logikschaltungen) oder irgendeiner Kombination dieser Implementierungen in Modulen implementiert werden. Die Begriffe ”Modul”, ”Funktionalität”, ”Komponente”, ”Block”, ”Einheit” und ”Logik” werden hier zur allgemeinen Darstellung von Software, Firmware, Hardware oder irgendeiner Kombination davon verwendet.
  • Im Fall einer Softwareimplementierung repräsentiert das Modul, die Funktionalität, die Komponente, die Einheit oder die Logik Programmcode, der, wenn er in einem Prozessor (z. B. in einer oder in mehreren CPUs) ausgeführt wird, spezielle Aufgaben ausführt. In einem Beispiel können die beschriebenen Verfahren von einem Computer ausgeführt werden, der mit Software in maschinenlesbarer Form ausgelegt ist, die in einem computerlesbaren Medium gespeichert ist. Eine solche Konfiguration eines computerlesbaren Mediums ist ein Signalträgermedium und somit dafür ausgelegt, die Anweisungen (z. B. als eine Trägerwelle) wie etwa über ein Netzwerk an die Computervorrichtung zu senden. Außerdem kann das computerlesbare Medium als ein nicht vorübergehendes computerlesbares Speichermedium und somit nicht als ein Signalträgermedium ausgelegt sein. Beispiele eines computerlesbaren Speichermediums umfassen einen Schreib-Lese-Speicher (RAM), einen Nur-Lese-Speicher (ROM), eine optische Platte, einen Flash-Speicher, einen Festplattenspeicher und andere Speichervorrichtungen, die magnetische, optische und andere Techniken zum Speichern von Anweisungen oder anderen Daten verwenden können und auf die von einer Maschine zugegriffen werden kann.
  • Die Software kann die Form eines Computerprogramms, das Computerprogrammcode, um einen Computer dafür zu konfigurieren, die Bausteine der beschriebenen Verfahren auszuführen, umfasst, oder die Form eines Computerprogramms, das Computerprogrammcodemittel umfasst, die dafür ausgelegt sind, alle Schritte irgendwelcher der hier beschriebenen Verfahren auszuführen, wenn das Programm auf einem Computer ausgeführt wird, und wobei das Computerprogramm auf einem computerlesbaren Medium verkörpert sein kann, aufweisen. Der Programmcode kann in einem oder in mehreren computerlesbaren Medien gespeichert sein. Die Merkmale der hier beschriebenen Techniken sind plattformunabhängig, d. h., die Techniken können in einer Vielzahl von Computerplattformen mit einer Vielzahl von Prozessoren implementiert werden.
  • Außerdem erkennt der Fachmann auf dem Gebiet, dass die gesamte oder ein Teil der Funktionalität, Techniken oder Verfahren von einer dedizierten Schaltung, von einer anwendungsspezifischen integrierten Schaltung, von einer programmierbaren Logikanordnung, von einer frei programmierbaren logischen Anordnung oder dergleichen ausgeführt werden können. Zum Beispiel können das Modul, die Funktionalität, die Komponente, die Einheit oder die Logik (z. B. die Logikblöcke der Kachelungseinheit 208) Hardware in Form von Schaltungen umfassen. Solche Schaltungen können Transistoren und/oder andere Hardwareelemente, die in einem Fertigungsprozess verfügbar sind, umfassen. Beispielhaft können solche Transistoren und/oder andere Elemente verwendet werden, um Schaltungen oder Strukturen, die Speicher implementieren und/oder enthalten, wie etwa Register, Flipflops oder Zwischenspeicher, logische Operatoren wie etwa boolesche Operationen, mathematische Operatoren wie etwa Addierer, Multiplizierer oder Verschiebeeinrichtungen und Verdrahtungen zu bilden. Solche Elemente können als kundenangepasste Schaltungen oder Standardzellenbibliotheken, Makros oder auf anderen Abstraktionsebenen bereitgestellt werden. Solche Elemente können in einer speziellen Anordnung verbunden sein. Das Modul, die Funktionalität, die Komponente, die Einheit oder die Logik (z. B. die Logikblöcke der Kachelungseinheit 208) können Schaltungen, die eine feste Funktion sind, und Schaltungen, die programmiert werden können, um eine Funktion oder Funktionen auszuführen, umfassen; diese Programmierung kann von einer Firmware- oder Softwareaktualisierung oder von Steuermechanismen bereitgestellt werden. In einem Beispiel weist die Hardwarelogik Schaltungen auf, die einen Betrieb mit einer festen Funktion, eine Zustandsmaschine oder einen Prozess implementieren. Außerdem soll Software, die die Konfiguration von Hardware, die ein Modul, eine Funktionalität, eine Komponente, eine Einheit oder eine Logik, die oben beschrieben sind, implementiert, ”beschreibt” oder definiert, wie etwa HDL-Software (Hardwarebeschreibungssprachen-Software), wie sie für den Entwurf integrierter Schaltungen oder zum Konfigurieren programmierbarer Chips, damit sie die gewünschten Funktionen ausführen, verwendet wird, enthalten sein. Das heißt, es kann ein computerlesbares Speichermedium, auf dem computerlesbarer Programmcode codiert ist, um eine Kachelungseinheit zur Verwendung in einem Graphikverarbeitungssystem, das eine GPU umfasst, die dafür ausgelegt ist, irgendwelche der hier beschriebenen Verfahren auszuführen, zu erzeugen, oder um eine Kachelungseinheit zur Verwendung in einem Graphikverarbeitungssystem, das irgendeine hier beschriebene Vorrichtung umfasst, zu erzeugen, bereitgestellt werden. Zum Beispiel können auf einem nicht vorübergehenden computerlesbaren Speichermedium computerlesbare Anweisungen gespeichert sein, die, wenn sie bei einem Computersystem verarbeitet werden, um eine Manifestation einer integrierten Schaltung zu erzeugen, veranlassen, dass das Computersystem eine Manifestation einer Kachelungseinheit, wie sie in den vorliegenden Beispielen beschrieben ist, erzeugt. Die Manifestation der Kachelungseinheit könnte die Kachelungseinheit selbst oder eine Darstellung der Kachelungseinheit (z. B. eine Maske), die zum Erzeugen der Kachelungseinheit verwendet werden kann, sein.
  • Die Begriffe 'Prozessor' und 'Computer' werden hier zur Bezugnahme auf irgendeine Vorrichtung oder auf einen Teil davon mit Verarbeitungsfähigkeit, so dass sie bzw. er Anweisungen ausführen kann, oder auf eine dedizierte Schaltung, die die gesamte oder einen Teil der Funktionalität oder Verfahren oder irgendeine Kombination davon ausführen kann, verwendet.
  • Obwohl der Gegenstand in einer für strukturelle Merkmale und/oder methodologische Tätigkeiten spezifischen Sprache beschrieben worden ist, ist der in den beigefügten Ansprüchen definierte Gegenstand selbstverständlich nicht auf die oben beschriebenen speziellen Merkmale oder Tätigkeiten beschränkt. Vielmehr sind die oben beschriebenen speziellen Merkmale und Tätigkeiten als beispielhafte Formen zum Implementieren der Ansprüche offenbart. Selbstverständlich können sich die oben beschriebenen Vorteile und Vorzüge auf ein Beispiel oder auf mehrere Beispiele beziehen.
  • Wie für den Fachmann klar ist, kann irgendein gegebener Bereich oder Wert erweitert oder geändert werden, ohne die gewünschte Wirkung zu verlieren. Die hier beschriebenen Schritte der Verfahren können in irgendeiner geeigneten Reihenfolge oder gegebenenfalls gleichzeitig ausgeführt werden. Aspekte irgendwelcher der oben beschriebenen Beispiele können mit Aspekten irgendwelcher der anderen beschriebenen Beispiele kombiniert werden, um weitere Beispiele zu bilden, ohne dass die gewünschte Wirkung verlorengeht.

Claims (20)

  1. Verfahren zum Zuweisen von Primitiven zu Kacheln in einem Graphikverarbeitungssystem, dessen Rendering-Raum in mehrere Kacheln unterteilt ist, wobei jede Kachel ein oder mehrere mehreckige Gebiete umfasst, wobei das Verfahren umfasst: Aufnehmen von Angaben von Primitiven, die innerhalb eines mehreckigen Gebiets der Kachel vorhanden sind, in eine Anzeigeliste für eine Kachel, um die Primitive dadurch der Kachel zuzuweisen; Empfangen eines Satzes eines oder mehrerer Primitive; für jedes des einen oder der mehreren mehreckigen Gebiete einer Kachel: (i) Bestimmen, ob der Satz eines oder mehrerer Primitive das mehreckige Gebiet der Kachel vollständig bedeckt; und (ii) falls bestimmt wird, dass der Satz eines oder mehrerer Primitive das mehreckige Gebiet der Kachel vollständig bedeckt, Vergleichen eines Tiefenschwellenwerts für das mehreckige Gebiet der Kachel mit einem Tiefenwert für wenigstens eines der empfangenen Primitive des Satzes, das innerhalb des mehreckigen Gebiets der Kachel vorhanden ist, um dadurch zu bestimmen, ob der Satz eines oder mehrerer Primitive vorhergehende Primitive im Gebiet, die in der Anzeigeliste für die Kachel umfasst sind, vollständig verbirgt; und falls bestimmt wird, dass der Satz eines oder mehrerer Primitive vorhergehende Primitive, die in der Anzeigeliste in allen des einen oder der mehreren Gebiete der Kachel umfasst sind, vollständig verbirgt, Setzen eines Anzeigelisten-Startzeigers, um anzugeben, dass eine Angabe eines der Primitive des Satzes ein Startpunkt in der Anzeigeliste für die Kachel ist.
  2. Verfahren nach Anspruch 1, wobei der Satz eines oder mehrerer Primitive nur ein einzelnes Primitiv umfasst, wobei das einzelne Primitiv konvex ist und wobei das Bestimmen, ob das einzelne Primitiv das mehreckige Gebiet der Kachel vollständig bedeckt, ein Bestimmen umfasst, ob alle Ecken des mehreckigen Gebiets innerhalb des einzelnen Primitivs liegen.
  3. Verfahren nach Anspruch 1 oder 2, wobei bestimmt werden kann, dass der Satz eines oder mehrerer Primitive die vorhergehenden Primitive im Gebiet vollständig verbirgt, falls die Primitive des Satzes, die das Gebiet bedecken, undurchsichtige Primitive sind, aber nicht, falls die Primitive des Satzes, die das Gebiet bedecken, durchscheinende Primitive oder Primitive, für die die Sichtbarkeit von Pixeln in den Primitiven Shader-abhängig ist, oder Primitive mit Shader-abhängigen Tiefen sind.
  4. Verfahren nach einem vorhergehenden Anspruch, wobei entweder (i) jede Kachel ein mehreckiges Gebiet umfasst, so dass die mehreckigen Gebiete Kacheln sind, oder (ii) jede Kachel mehrere mehreckige Gebiete umfasst, so dass die mehreckigen Gebiete Teilkacheln sind.
  5. Kachelungseinheit, die ausgelegt ist, in einem Graphikverarbeitungssystem, dessen Rendering-Raum in mehrere Kacheln unterteilt ist, Primitive Kacheln zuzuweisen, wobei jede Kachel ein oder mehrere mehreckige Gebiete umfasst, wobei die Kachelungseinheit ausgelegt ist, einen Satz eines oder mehrerer Primitive zu empfangen, wobei die Kachelungseinheit umfasst: • eine Netzlogik, die ausgelegt ist, für jedes des einen oder der mehreren mehreckigen Gebiete einer Kachel zu bestimmen, ob der Satz eines oder mehrerer Primitive das mehreckige Gebiet der Kachel vollständig bedeckt; und • eine Kachelungslogik, die ausgelegt ist zum: Aufnehmen von Angaben von Primitiven, die innerhalb eines mehreckigen Gebiets der Kachel vorhanden sind, in eine Anzeigeliste für eine Kachel, um die Primitive dadurch der Kachel zuzuweisen; für jedes des einen oder der mehreren mehreckigen Gebiete einer Kachel, falls bestimmt wird, dass der Satz eines oder mehrerer Primitive das mehreckige Gebiet der Kachel vollständig bedeckt, Vergleichen eines Tiefenschwellenwerts für das mehreckige Gebiet der Kachel mit einem Tiefenwert für wenigstens eines der empfangenen Primitive des Satzes, das innerhalb des mehreckigen Gebiets der Kachel vorhanden ist, um dadurch zu bestimmen, ob der Satz eines oder mehrerer Primitive vorhergehende Primitive im Gebiet, die in der Anzeigeliste für die Kachel umfasst sind, vollständig verbirgt; und falls bestimmt wird, dass der Satz eines oder mehrerer Primitive vorhergehende Primitive, die in der Anzeigeliste in allen des einen oder der mehreren Gebiete der Kachel umfasst sind, vollständig verbirgt, Setzen eines Anzeigelisten-Startzeigers, um anzugeben, dass eine Angabe eines der Primitive des Satzes ein Startpunkt in der Anzeigeliste für die Kachel ist.
  6. Kachelungseinheit nach Anspruch 5, die ferner umfasst: • eine Tiefenschwellenwert-Aktualisierungslogik, die ausgelegt ist, den Tiefenschwellenwert für das Gebiet in Abhängigkeit von Tiefenwerten empfangener Primitive, die innerhalb des Gebiets vorhanden sind und für die Angaben in der Anzeigeliste für die Kachel umfasst sind, für jedes des einen oder der mehreren mehreckigen Gebiete einer Kachel zu aktualisieren.
  7. Kachelungseinheit nach Anspruch 5 oder 6, wobei der Satz eines oder mehrerer Primitive mehrere Primitive umfasst, die ein Netz bilden.
  8. Kachelungseinheit nach Anspruch 7, wobei die Netzlogik ferner ausgelegt ist, externe Kanten des Netzes zu identifizieren.
  9. Kachelungseinheit nach Anspruch 8, wobei die Netzlogik ferner ausgelegt ist, für jedes des einen oder der mehreren mehreckigen Gebiete einer Kachel: Schnittpunkte zu identifizieren, bei denen sich die identifizierten externen Kanten des Netzes mit Linien, die auf die Kanten des mehreckigen Gebiets der Kachel ausgerichtet sind, schneiden; und die identifizierten Schnittpunkte zu verwenden, um zu bestimmen, ob das Netz das mehreckige Gebiet der Kachel vollständig bedeckt.
  10. Kachelungseinheit nach Anspruch 9, wobei die Netzlogik ausgelegt ist, die identifizierten Schnittpunkte zu verwenden, um zu bestimmen, ob das Netz das mehreckige Gebiet der Kachel vollständig bedeckt, indem für jede Kante des mehreckigen Gebiets: bestimmt wird, ob ein Paar aufeinanderfolgender Schnittpunkte auf der Linie, die auf die Kante ausgerichtet ist, die Kante des Gebiets auf der Linie einschließt, wobei der Abschnitt zwischen den aufeinanderfolgenden Schnittpunkten auf der Linie innerhalb des Netzes liegt, wobei, falls, für jede Kante des mehreckigen Gebiets, ein Paar aufeinanderfolgender Schnittpunkte die Kante des Gebiets einschließt, wobei der Abschnitt zwischen den aufeinanderfolgenden Schnittpunkten auf der Linie innerhalb des Netzes liegt, dann bestimmt wird, dass das Netz das Gebiet vollständig bedeckt.
  11. Kachelungseinheit nach Anspruch 9, wobei die Netzlogik ausgelegt ist, die identifizierten Schnittpunkte zu verwenden, um zu bestimmen, ob das Netz das mehreckige Gebiet der Kachel vollständig bedeckt, durch: Bestimmen, ob es Schnittpunkte auf den Kanten des mehreckigen Gebiets gibt; und Bestimmen, dass wenigstens ein Punkt auf einer Kante des Gebiets von dem Netz bedeckt ist; wobei, falls es keine Schnittpunkte auf den Kanten des mehreckigen Gebiets gibt und falls wenigstens ein Punkt auf einer Kante des Gebiets von dem Netz bedeckt ist, dann bestimmt wird, dass das Netz das Gebiet vollständig bedeckt.
  12. Kachelungseinheit nach einem der Ansprüche 5 bis 11, wobei der Anzeigelisten-Startzeiger eine Anzeigelisten-Startadresse innerhalb der Anzeigeliste ist, die zu einem Startpunkt in der Anzeigeliste für die Kachel werden soll.
  13. Kachelungseinheit nach einem der Ansprüche 5 bis 12, wobei die Kachelungslogik ferner ausgelegt ist, Angaben verborgener Primitive aus der Anzeigeliste für die Kachel zu entfernen.
  14. Kachelungseinheit nach einem der Ansprüche 5 bis 13, wobei die Kachelungseinheit ausgelegt ist, die Anzeigeliste für die Kachel an einen Speicher zur Speicherung darin zu senden sowie zum nachfolgenden Abrufen aus dem Speicher durch ein Modul zum Entfernen verdeckter Flächen zum Durchführen einer Entfernung verdeckter Flächen auf den Primitiven, die durch die Angaben in der Anzeigeliste, wie sie in der Kachel vorhanden sind, angegeben sind.
  15. Kachelungseinheit nach einem der Ansprüche 5 bis 14, wobei die Kachelungslogik ferner ausgelegt ist, den Tiefenwert für das wenigstens eine der empfangenen Primitive des Satzes zu bestimmen, wobei der Tiefenwert für das wenigstens eine der empfangenen Primitive des Satzes innerhalb des mehreckigen Gebiets als der Tiefenwert eines Primitivs bestimmt wird bei einem von: (i) einem Schnittpunkt einer Kante des Primitivs mit einer Kante des Gebiets; (ii) der Position einer Ecke des Gebiets innerhalb des Primitivs; und (iii) einem Knotenpunkt des Primitivs innerhalb des Gebiets.
  16. Kachelungseinheit nach einem der Ansprüche 5 bis 15, wobei eine Tiefenvergleichsbetriebsart ist: (i) eine Kleiner-als-Vergleichsbetriebsart, oder (ii) eine Kleiner-oder-gleich-Vergleichsbetriebsart, wobei der Tiefenwert für das wenigstens eine der empfangenen Primitive des Satzes der maximale Tiefenwert eines der Primitive des Satzes innerhalb des Gebiets ist, und wobei, falls die Tiefenvergleichsbetriebsart die Kleiner-als-Vergleichsbetriebsart ist, dann die Kachelungslogik ausgelegt ist zu bestimmen, dass der Satz eines oder mehrerer Primitive vorhergehende Primitive im Gebiet vollständig verbirgt, falls der Tiefenwert für das wenigstens eine der empfangenen Primitive des Satzes kleiner als der Tiefenschwellenwert für das Gebiet der Kachel ist, und wobei, falls die Tiefenvergleichsbetriebsart die Kleiner-oder-gleich-Vergleichsbetriebsart ist, dann die Kachelungslogik ausgelegt ist zu bestimmen, dass der Satz eines oder mehrerer Primitive vorhergehende Primitive im Gebiet vollständig verdeckt, falls der Tiefenwert für das wenigstens eine der empfangenen Primitive des Satzes kleiner oder gleich dem Tiefenschwellenwert für das Gebiet der Kachel ist.
  17. Kachelungseinheit nach Anspruch 16, wenn abhängig von Anspruch 6, wobei die Tiefenschwellenwert-Aktualisierungslogik ausgelegt ist, den Tiefenschwellenwert für das Gebiet gleich dem minimalen Tiefenwert eines empfangenen Primitivs innerhalb des Gebiets zu aktualisieren, falls der minimale Tiefenwert des empfangenen Primitivs innerhalb des Gebiets kleiner als der Tiefenschwellenwert für das Gebiet ist.
  18. Kachelungseinheit nach Anspruch 6 oder nach einem der Ansprüche 7 bis 17, wenn abhängig von Anspruch 6, die ferner einen Speicher umfasst, wobei die Kachelungslogik ausgelegt ist, den Tiefenschwellenwert für ein mehreckiges Gebiet einer Kachel aus dem Speicher zu lesen, bevor sie den Tiefenschwellenwert für das mehreckige Gebiet der Kachel mit einem Tiefenwert für wenigstens eines der empfangenen Primitive des Satzes vergleicht; und wobei die Tiefenschwellenwert-Aktualisierungslogik ausgelegt ist, den Tiefenschwellenwert für das mehreckige Gebiet im Speicher zu speichern, falls der Tiefenschwellenwert für das mehreckige Gebiet aktualisiert wird.
  19. Computerlesbares Speichermedium, auf dem computerlesbarer Code codiert ist, der ausgelegt ist, die Schritte des Verfahrens nach einem der Ansprüche 1 bis 4 auszuführen, wenn der Code auf einem Computer ausgeführt wird.
  20. Computerlesbares Speichermedium, auf dem computerlesbarer Code zum Erzeugen einer Kachelungseinheit gemäß einem der Ansprüche 5 bis 18 codiert ist.
DE102015109559.9A 2014-06-17 2015-06-15 Zuweisen von primitiven zu kacheln in einem graphikverarbeitungssystem Pending DE102015109559A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB1410798.1 2014-06-17
GB1410798.1A GB2524120B (en) 2014-06-17 2014-06-17 Assigning primitives to tiles in a graphics processing system

Publications (1)

Publication Number Publication Date
DE102015109559A1 true DE102015109559A1 (de) 2015-12-17

Family

ID=51266736

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102015109559.9A Pending DE102015109559A1 (de) 2014-06-17 2015-06-15 Zuweisen von primitiven zu kacheln in einem graphikverarbeitungssystem

Country Status (4)

Country Link
US (1) US9684995B2 (de)
CN (2) CN105321140B (de)
DE (1) DE102015109559A1 (de)
GB (1) GB2524120B (de)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2526598B (en) * 2014-05-29 2018-11-28 Imagination Tech Ltd Allocation of primitives to primitive blocks
GB2546810B (en) * 2016-02-01 2019-10-16 Imagination Tech Ltd Sparse rendering
US9934548B2 (en) 2016-03-09 2018-04-03 Apple Inc. Hierarchical techniques for storing graphics primitives
CN106096559A (zh) * 2016-06-16 2016-11-09 深圳零度智能机器人科技有限公司 障碍物检测方法及系统以及运动物体
CN106355636B (zh) * 2016-08-30 2019-05-14 北京像素软件科技股份有限公司 虚拟现实三维水体渲染中水体网格的处理方法
US10275941B2 (en) * 2016-11-01 2019-04-30 Dg Holdings, Inc. Multi-layered depth and volume preservation of stacked meshes
US10930086B2 (en) 2016-11-01 2021-02-23 Dg Holdings, Inc. Comparative virtual asset adjustment systems and methods
KR102637736B1 (ko) 2017-01-04 2024-02-19 삼성전자주식회사 그래픽스 처리 방법 및 시스템
US11270471B2 (en) 2018-10-10 2022-03-08 Bentley Systems, Incorporated Efficient refinement of tiles of a HLOD tree
WO2020081347A1 (en) * 2018-10-14 2020-04-23 Bentley Systems, Incorporated Conversion of infrastructure model geometry to a tile format
EP3864626A1 (de) 2018-10-14 2021-08-18 Bentley Systems, Incorporated Dynamische frontend-gesteuerte erzeugung eines hlod-baumes
US11010954B2 (en) * 2018-12-11 2021-05-18 Samsung Electronics Co., Ltd. Efficient redundant coverage discard mechanism to reduce pixel shader work in a tile-based graphics rendering pipeline
CN111353928A (zh) 2018-12-21 2020-06-30 畅想科技有限公司 用于图形处理系统的经过变换的几何结构数据高速缓存
CN112116519B (zh) * 2019-06-19 2022-12-27 畅想科技有限公司 图形处理系统中的粗略深度测试
GB2586297B (en) * 2020-02-10 2022-03-02 Imagination Tech Ltd Data structures, methods and tiling engines for storing tiling information in a graphics processing system
US11416960B2 (en) 2020-11-06 2022-08-16 Samsung Electronics Co., Ltd. Shader accessible configurable binning subsystem
US20240005601A1 (en) * 2022-06-29 2024-01-04 Advanced Micro Devices, Inc. Hierarchical depth data generation using primitive fusion

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5088054A (en) * 1988-05-09 1992-02-11 Paris Ii Earl A Computer graphics hidden surface removal system
US5493637A (en) * 1992-12-04 1996-02-20 Network Computing Devices, Inc. Video buffer recycling method and apparatus
US6856320B1 (en) * 1997-11-25 2005-02-15 Nvidia U.S. Investment Company Demand-based memory system for graphics applications
US6246415B1 (en) * 1998-04-30 2001-06-12 Silicon Graphics, Inc. Method and apparatus for culling polygons
US6771264B1 (en) * 1998-08-20 2004-08-03 Apple Computer, Inc. Method and apparatus for performing tangent space lighting and bump mapping in a deferred shading graphics processor
US7064771B1 (en) * 1999-04-28 2006-06-20 Compaq Information Technologies Group, L.P. Method and apparatus for compositing colors of images using pixel fragments with Z and Z gradient parameters
GB2378108B (en) * 2001-07-24 2005-08-17 Imagination Tech Ltd Three dimensional graphics system
JP2003109032A (ja) * 2001-09-26 2003-04-11 Pioneer Electronic Corp 画像作成装置及びコンピュータプログラム
US6765588B2 (en) * 2002-01-08 2004-07-20 3Dlabs, Inc., Ltd. Multisample dithering with shuffle tables
JP3966832B2 (ja) * 2003-04-28 2007-08-29 株式会社東芝 描画処理装置、及び、描画処理方法
GB2406184B (en) * 2003-09-17 2006-03-15 Advanced Risc Mach Ltd Data processing system
EP1659538B1 (de) 2004-11-19 2008-01-09 Telefonaktiebolaget LM Ericsson (publ) Verfahren und Vorrichtung zur Erzeugung dreidimensionaler Bilder
GB0524804D0 (en) * 2005-12-05 2006-01-11 Falanx Microsystems As Method of and apparatus for processing graphics
KR100793990B1 (ko) * 2006-09-18 2008-01-16 삼성전자주식회사 타일 기반 3차원 렌더링에서의 조기 z 테스트 방법 및시스템
GB0710795D0 (en) * 2007-06-05 2007-07-18 Arm Norway As Method of and apparatus for processing graphics
GB0810311D0 (en) * 2008-06-05 2008-07-09 Advanced Risc Mach Ltd Graphics processing systems
GB0823468D0 (en) * 2008-12-23 2009-01-28 Imagination Tech Ltd Display list control stream grouping in tile based 3D computer graphics systems
GB2469525A (en) * 2009-04-17 2010-10-20 Advanced Risc Mach Ltd Graphics Filled Shape Drawing
US8707200B2 (en) * 2009-06-25 2014-04-22 Autodesk, Inc. Object browser with proximity sorting
GB2478909B (en) * 2010-03-19 2013-11-06 Imagination Tech Ltd Demand based texture rendering in a tile based rendering system
US8502818B1 (en) * 2010-07-12 2013-08-06 Nvidia Corporation System and method for surface tracking
US8902228B2 (en) * 2011-09-19 2014-12-02 Qualcomm Incorporated Optimizing resolve performance with tiling graphics architectures
US10089774B2 (en) * 2011-11-16 2018-10-02 Qualcomm Incorporated Tessellation in tile-based rendering
US8823736B2 (en) * 2012-01-20 2014-09-02 Intel Corporation Graphics tiling architecture with bounding volume hierarchies
US9183664B2 (en) * 2012-05-03 2015-11-10 Apple Inc. Tiled forward shading with improved depth filtering
US9483861B2 (en) * 2013-03-15 2016-11-01 Qualcomm Incorporated Tile-based rendering
KR102116708B1 (ko) * 2013-05-24 2020-05-29 삼성전자 주식회사 그래픽스 프로세싱 유닛

Also Published As

Publication number Publication date
GB201410798D0 (en) 2014-07-30
GB2524120B (en) 2016-03-02
CN112001898A (zh) 2020-11-27
CN105321140B (zh) 2020-09-04
GB2524120A (en) 2015-09-16
US20150363969A1 (en) 2015-12-17
CN105321140A (zh) 2016-02-10
US9684995B2 (en) 2017-06-20

Similar Documents

Publication Publication Date Title
DE102015109560A1 (de) Zuweisen von primitiven zu kacheln in einem graphikverarbeitungssystem
DE102015109559A1 (de) Zuweisen von primitiven zu kacheln in einem graphikverarbeitungssystem
DE102015107869A1 (de) Vergabe von Primitiven an Primitiv-Blöcke
DE102014015352B4 (de) Dynamikkompression
DE102015116953A1 (de) Weiterleitung von Tiefeninformation in einem Graphikverarbeitungssystem
DE102015101538A1 (de) Opazitätstest zur verarbeitung von primitiven in einem 3d-grafikverarbeitungssystem
DE102014004841B4 (de) Grafik auf Kachelbasis
DE69103408T2 (de) Technik zur durchführung einer digitalen bildskalierung durch logisches zusammensetzen oder vervielfältigen von pixeln in blöcken von unterschiedlichen gruppengrössen.
DE102019216136A1 (de) Verfahren und system zur 3d-rekonstruktion mit volumenbasierter filterung zur bildverarbeitung
DE102016007215B4 (de) Kontrollieren der Glattheit eines Übergangs zwischen Bildern
DE10296401B4 (de) Verbund-Rendering von 3-D-Graphikobjekten
DE102018006247A1 (de) Digitalbildvervollständigung unter Verwendung des Deep Learning
DE102016011877A1 (de) Enttrüben von Fotos und Videos unter Verwendung einer visuellen Artefaktunterdrückung
DE102014006734A1 (de) Eckpunktparameter-datenkompression
DE102017108096A1 (de) System, verfahren und computerprogrammprodukt zum rendern bei variablen abtastraten mittels projektiver geometrischer verzerrung
DE102015009820A1 (de) Bildsegmentierung für eine Kamera-Liveeinspielung
DE102012210521A1 (de) Unbeschnittene Zeit- und Linsen-Begrenzungen für verbesserte Probentest- Effizienz bei Bild-Rendering
DE102014018565A1 (de) Primitivenverarbeitung in einem grafikverarbeitungssystfm
DE102018125472B4 (de) Grafikprozessor, der Abtastungs-basiertes Rendering durchführt, und Verfahren zum Betreiben desselben
DE102017005964A1 (de) Techniken zum Auswählen von Objekten in Bildern
DE102014018567A1 (de) PRIMITIVENVERARBEITUNG IN EINEM GRAFlKVERARBEITUNGSSYSTEM
DE102015101543A1 (de) Verarbeitung von primitivblöcken in parallelen kachelungsmaschinen-pipes
DE102017113227A1 (de) Anzeigevorrichtung und anzeigesteuerverfahren zur anzeige von bildern
DE112015003626T5 (de) System und verfahren zum erhöhen der bittiefe von bildern
DE102019216979A1 (de) Oberflächenrekonstruktion für interaktive augmented reality

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

Representative=s name: WESTPHAL, MUSSGNUG & PARTNER PATENTANWAELTE MI, DE