CN105321140B - 向图形处理***中的区片分配图元 - Google Patents
向图形处理***中的区片分配图元 Download PDFInfo
- Publication number
- CN105321140B CN105321140B CN201510338624.9A CN201510338624A CN105321140B CN 105321140 B CN105321140 B CN 105321140B CN 201510338624 A CN201510338624 A CN 201510338624A CN 105321140 B CN105321140 B CN 105321140B
- Authority
- CN
- China
- Prior art keywords
- tile
- primitive
- primitives
- region
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/10—Geometric effects
- G06T15/20—Perspective computation
- G06T15/205—Image-based rendering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/40—Filling a planar surface by adding surface attributes, e.g. colour or texture
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/04—Texture mapping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/10—Geometric effects
- G06T15/30—Clipping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/10—Geometric effects
- G06T15/40—Hidden part removal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/10—Geometric effects
- G06T15/40—Hidden part removal
- G06T15/405—Hidden part removal using Z-buffer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/10—Constructive solid geometry [CSG] using solid primitives, e.g. cylinders, cubes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/30—Polynomial surface description
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T19/00—Manipulating 3D models or images for computer graphics
- G06T19/20—Editing of 3D images, e.g. changing shapes or colours, aligning objects or positioning parts
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/10—Segmentation; Edge detection
- G06T7/13—Edge detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/50—Depth or shape recovery
- G06T7/507—Depth or shape recovery from shading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/60—Analysis of geometric attributes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/04—Indexing scheme for image data processing or generation, in general involving 3D image data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/08—Indexing scheme for image data processing or generation, in general involving all processing steps from image acquisition to 3D model generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/10—Image acquisition modality
- G06T2207/10004—Still image; Photographic image
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/10—Image acquisition modality
- G06T2207/10028—Range image; Depth image; 3D point clouds
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/20—Special algorithmic details
- G06T2207/20004—Adaptive image processing
- G06T2207/20008—Globally adaptive
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/20—Special algorithmic details
- G06T2207/20021—Dividing image into blocks, subimages or windows
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/20—Special algorithmic details
- G06T2207/20112—Image segmentation details
- G06T2207/20132—Image cropping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/20—Special algorithmic details
- G06T2207/20172—Image enhancement details
- G06T2207/20192—Edge enhancement; Edge preservation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/22—Cropping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/36—Level of detail
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2215/00—Indexing scheme for image rendering
- G06T2215/12—Shadow map, environment map
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2219/00—Indexing scheme for manipulating 3D models or images for computer graphics
- G06T2219/20—Indexing scheme for editing of 3D models
- G06T2219/2016—Rotation, translation, scaling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2219/00—Indexing scheme for manipulating 3D models or images for computer graphics
- G06T2219/20—Indexing scheme for editing of 3D models
- G06T2219/2021—Shape 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)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Mathematical Physics (AREA)
- Pure & Applied Mathematics (AREA)
- Algebra (AREA)
- Architecture (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Image Generation (AREA)
- Controls And Circuits For Display Device (AREA)
Abstract
一种向图形处理***中的区片分配图元的分片单元,该图形处理***具有被细分为多个区片的渲染空间。通过将图元的图元ID包括在区片的显示列表中而将该图元分配给该区片。如果图元或图元的网格完全覆盖一个区片而使得该区片中的所有先前图元都被遮挡(即,隐藏),则该显示列表的起始指针能能够被移动从而跳过被遮挡的图元。以这种方式,隐藏表面去除(HSR)模块将不会取得将最终被完全覆盖区域的图元或网格所隐藏的图元。该方法因此减少了HSR模块所取得的图元的数量。
Description
背景技术
图形处理***被用来处理图形数据。例如,在计算***上运行的应用可能需要对三维(3D)场景的图像进行渲染以便对用户进行显示。该应用能够向图形处理***发送通常为图元序列形式的图形数据,该图形处理***能够依据该图元渲染该场景的图像。
图1示出了可以被用来渲染3D场景的图像的图形处理***100的一些部件。图形处理***100包括图形处理单元(GPU)102以及两个存储器部分1041和1042。注意到,这两个存储器部分1041和1042可以是或可以不是相同物理存储器的部分,并且存储器1041和1042可能“脱离芯片”进行定位,即并不处于与GPU 102相同的芯片上。存储器(1041和1042)与GPU102之间的通信可以通过***100中的通信总线来进行。
在图1所示的示例中,图形处理***100是基于区片的延迟渲染***,这意味着***100的渲染空间被划分为多个区片并且在图元片段上执行纹理和/或着色以便渲染场景之前在该图元片段上执行隐藏表面去除。然而,在其它示例中,图形处理***可以是非基于区片的和/或不是延迟渲染***。GPU 102包括预处理模块106、分片单元108和栅格化模块110,其中栅格化模块110包括隐藏表面去除(HSR)模块112和纹理/着色模块114。图形处理***100被布置为使得应用所提供的图元序列在预处理模块106处被接收。预处理模块106执行诸如包括剪裁和剔除的几何处理的功能以去除并未落入可见视图中的图元。预处理模块106还可以将图元投射到屏幕空间之中。预处理模块106还可以将所接收到的图元放入图元块中。
从预处理模块106输出的图元(例如,在图元块中)被送至分片单元108,分片单元108确定哪些图元存在于图形处理***100的渲染空间的每个区片内。分片单元108通过针对区片创建显示列表而向渲染空间的区片分配图元,其中针对区片的显示列表包括存在于该区片内的图元的指示(即,图元ID)。显示列表和图元(例如,图元块中)从分片单元108输出并且被存储在存储器1041之中。栅格化模块110从存储器1041取得针对区片的显示列表以及与该区片有关的图元,并且HSR模块112执行隐藏表面去除以由此去除在场景中隐藏的图元的片段。其余片段被送至纹理/着色模块114,纹理/着色模块114在该片段上执行纹理/着色以确定能够被送至存储器1042以便在帧缓冲器中进行存储的渲染图像的像素颜色值。栅格化模块110对每个区片中的图元进行处理并且当整个图像已经被渲染并且存储在存储器1042中时,图像能够从图形处理***100被输出并且例如被显示在显示器上。
增加存在于区片内的图元的数量通常将增加包括在针对该区片的显示列表中的图元ID的数量。这意味着显示列表中所包括的数据量被增加,由此使用更大数量的存储器1041来存储该显示列表并且增加了在分片单元108和存储器1041之间传送的数据量。此外,该显示列表由HSR模块112从存储器1041进行读取,并且在显示列表中指示的图元由HSR模块112从存储器1041所取得。GPU 102和存储器1041之间的通信是相对缓慢的过程(与GPU102上执行的过程相比),因此减少GPU 102向存储器1041写入和/或从存储器1041读取的数据量会是有利的。
发明内容
提供该发明内容而以简化形式对下面在具体实施方式中进一步进行描述的概念的选择进行介绍。该发明内容并非意在标识所请求保护主题的关键特征或必要特征,也并非意在被用来限制所请求保护主题的范围。
提供了一种向图形处理***中的区片分配图元的方法,该图形处理***具有被细分为多个区片的渲染空间,其中每个区片包括一个或多个多边形区域,该方法包括:
在针对区片的显示列表中包括存在于该区片的多边形区域内的图元的指示以由此将该图元分配给该区片;
接收一个或多个图元的集合;
针对区片的一个或多个多边形区域中的每一个多边形区域:
(i)确定一个或多个图元的集合是否完全覆盖该区片的多边形区域;以及
(ii)如果确定一个或多个图元的集合完全覆盖该区片的多边形区域,则将针对该区片的多边形区域的深度阈值与针对存在于该区片的多边形区域内的集合的至少一个所接收图元的深度值进行比较,以由此确定该一个或多个图元的集合是否完全遮挡被包括在针对该区片的显示列表中的区域中的先前图元;以及
如果确定该一个或多个图元的集合完全遮挡该区片的全部一个或多个区域中的显示列表中所包括的先前图元,则设置显示列表起始指针以指示该集合中的图元之一的指示是针对该区片的显示列表中的起始点。
该方法可以进一步包括,针对区片的一个或多个多边形分区中的每一个:(iii)依据出现在该分区内并且其指示包括在该区片的显示列表中的所接收图元的深度数值更新该分区的深度阈值。
该一个或多个图元的集合可以包括单个图元。可替换地,该一个或多个图元的集合可以包括形成网格的多个图元。
提供了一种分片单元,被配置为向具有被细分为多个区片的渲染空间的图形处理***中的区片分配图元,其中每个区片包括一个或多个多边形区域,该分片单元被配置为接收一个或多个图元的集合,其中该分片单元包括:
网格逻辑,被配置为针对区片的一个或多个多边形区域中的每一个多边形区域,确定一个或多个图元的集合是否完全覆盖该区片的多边形区域;以及
分片逻辑,被配置为:
在针对区片的显示列表中包括存在于该区片的多边形区域内的图元的指示,以由此将该图元分配给该区片;
针对区片的一个或多个多边形区域中的每一个多边形区域,如果确定一个或多个图元的集合完全覆盖该区片的多边形区域,则将针对该区片的多边形区域的深度阈值与存在于该区片的多边形区域内的集合中的至少一个所接收图元的深度值进行比较,以由此确定该一个或多个图元的集合是否完全遮挡被包括在该区片的显示列表中的区域中的先前图元;以及
如果确定该一个或多个图元的集合完全遮挡该区片的全部一个或多个区域中的显示列表中所包括的先前图元,则设置显示列表起始指针以指示该集合中的图元之一的指示是针对该区片的显示列表中的起始点。
该分片单元可以进一步包括:深度阈值更新逻辑,被配置为针对区片的一个或多个多边形区域中的每一个多边形区域,依据存在于该区域内并且针对其指示被包括在针对该区片的显示列表中的所接收图元的深度值来更新针对该区域的深度阈值。。
还提供了一种计算机可读代码,当该代码在计算机上运行时其适于执行本文所描述的示例的任意方法的步骤。此外,可以提供一种用于生成根据本文所描述的示例的任意示例的分片单元的计算机可读代码。该计算机可读代码可以被编码在计算机可读存储介质上。
如对本领域技术人员而言显而易见的,以上特征可以被适当组合并且可以与本文所描述示例的任意方面进行组合。
附图说明
现在将参考附图对实施例进行详细描述,其中:
图1是图形处理***的示意图;
图2是图形处理***的示意图,其示出了该图形处理***内的分片单元的组件;
图3a示出了存在于区片的一个区域内的第一图元的示例;
图3b图示了第一示例中的第一图元的深度;
图3c图示了第二示例中的第一图元的深度;
图3d图示了第三示例中的第一图元的深度;
图4a示出了完全覆盖一个区域的第二图元的示例;
图4b图示了一个示例中的第二图元的深度;
图4c示出了深度阈值如何由于第二图元而被更新的示例;
图5示出了完全覆盖一个区域的图元的第一网格的示例;
图6是图示在分片单元处向区片分配图元的第一方法的流程图;
图7示出了并未完全覆盖一个区域的图元的第二网格的示例;
图8示出了完全覆盖一个区域的图元的第三网格的示例;
图9是图示在分片单元处向区片分配图元的第二方法的流程图;
图10是区片的显示列表的表示;和
图11是计算机***的示意图。
附图图示了各个示例。本领域技术人员将会意识到,附图中所图示的要素划界(例如,方框、方框群组或者其它形状)表示划界的一个示例。可以一些示例中,一个要素可以被设计为多个要素或者多个要素可以被设计为一个要素。在适当的情况下,贯穿附图使用共同的附图标记来指示相似的特征。
具体实施方式
参考图1所示的图形处理***100,如果最终将被HSR模块112确定为被其它图元所隐藏的图元并不使得其图元ID被包括在针对区片的有关显示列表之中则会是有利的。这将减少显示列表中的数据量并且也将减少将要被HSR模块112所取得的图元数据的数量。本文所描述的示例涉及图形处理***200(在图2中示出并且在以下详细描述)中所实施的分片(tiling)单元208。除分片单元208之外,***200类似于图1所示的***100。为了减少包括于显示列表中的图元数量,分片单元208能够剔除其确定被图像中的其它图元所隐藏的一些图元。分片单元208并不以HSR模块以其执行深度测试的样本分辨率来执行完整的深度测试,因为对于分片单元来说,包括充足的存储器以存储针对整个渲染空间的全分辨率深度缓冲器将会是高成本的。注意到,HSR模块针对渲染空间的区片,但是通常不是针对整个渲染空间,存储全分辨率深度缓冲器。仅针对单个区片的全分辨率深度缓冲器在基于区片的***的HSR模块中是可能的,因为分片单元208已经执行了图元的空间存储(也被称作分片或装仓(binning))。虽然分片单元208并不存储针对渲染空间的全分辨率深度缓冲器,但是其仍然能够存储能够被用来剔除一些图元的一些深度信息。分片单元208所接收的图元可能并未已经被空间存储并且因此可能具有渲染空间中的任意位置。因此,分片单元208中所存储的任何深度信息都必须表示整个渲染空间。例如,渲染空间被划分为通常为矩形的多个区片(例如,为了给出一些示例,每个区片可以包括32×32或16×16或32×16个渲染空间样本),但是其也可以是其它形状和/或大小,例如三角形或六边形。每个区片可以包括要针对其执行深度比较的一个或多个区域,其中如果每个区片仅包括一个区域,则该区域就是区片,并且其中如果每个区片包括多于一个的区域,则区片内的区域被称作“子区片”。针对每个区域,分片单元208能够存储指示阈值深度的深度阈值,其中如果图元相对于深度阈值并未通过深度测试,则能够确定该图元在该区域内被隐藏。如果图元针对区片的一个或多个区域的全部都被隐藏,则该图元能够从该区片中被剔除,即该图元的ID并不包括在针对该区片的显示列表中。
虽然分片单元208并不存储之前处理过的图元的全分辨率深度值,但是如以下更为详细描述的,在图元覆盖整个区域的情况下能够更新针对该区域的深度阈值。然而,图元通常随着图形数据变得更为复杂而变得更小,从而图元并非经常完全覆盖一个区域。这意味着基于完全覆盖该区域的图元而更新针对该区域的深度阈值的机会可能有所减少。然而,发明人已经意识到,图元经常是网格的一部分,并且如果图元网格完全覆盖一个区域则针对该区域的深度阈值就可以被更新。这提供了更多的机会在分片单元208中更新针对一个区域的深度阈值。进而,这意味着能够剔除掉更多的图元,由此减少被显示列表所使用的存储器数量并且减少HSR模块将要取得的图元的数量。也就是说,当网格完全粘附一个区域时,深度阈值可以被设置为使得后续图元能够在它们被该区域中的网格的图元所隐藏的情况下被剔除。例如,在测试中已经显示分片单元208在一些情况下能够剔除掉在分片单元208所接收的大约25%的图元,所以能够意识到这能够提供显著的益处。
此外,如以下所描述的,如果图元或图元网格完全覆分片片的所有区域,而使得该区片中所有之前的图元都被遮挡(即,被隐藏),则显示列表的起始指针能够移动从而跳过被遮挡的图元。以这种方式,HSR模块将不会取得将最终被完全覆盖该区域的图元或网格所隐藏的图元。该方法因此减少了HSR模块所取得的图元的数量。
在本文所描述的示例中提到了每个区片都有显示列表,其中区片的显示列表包括存在于该区片内的图元的指示(即,图元ID)。在一些示例中,每个区片可以具有作为单独数据结构进行存储的单独显示列表。然而,注意到在一些其它的示例中,单独数据结构并非必然用作每个单独区片的单独显示列表。然而,即使在这些情况下,针对每个区片还是存在指示哪些图元存在于该区片内的显示列表,并且就此意义而言,针对每个区片存在显示列表。也就是说,相同数据结构可以利用指示每个图元ID涉及到哪个区片而包括多于一个的区片的图元ID,而使得该数据结构能够用作多于一个区片的显示列表。换句话说,在概念上认为针对每个区片具有单独显示列表是有意义的,而实际上在一些示例中,多个区片的显示列表可以利用指示该数据结构中的每个图元ID涉及到哪个区片而被组合为单个数据结构。贯穿本申请提到针对区片的显示列表,并且这样的引用意在覆盖其中单独显示列表被实施为单独数据结构的示例以及其中多个区片的显示列表利用指示该数据结构中的每个图元ID涉及到哪个区片而被组合为单个数据结构的示例。
现在将仅通过示例对实施例进行描述。
如以上所提到的,图2示出了可以被用来渲染3D场景的图像的图形处理***200的一些部件。图形处理部件200包括GPU 202以及两个存储器部分2041和2042。注意到,这两个存储器部分2041和2042可以是或不是相同物理存储器的部分,并且两个存储器2041和2042都可以“脱离芯片”进行定位,即并不与GPU 202处于相同的芯片上。存储器(2041和2042)和GPU 202之间的通信可以通过***200中的通信总线来进行。图形处理***200是基于区片的延迟渲染***,这意味着***200的渲染空间被划分为多个区片,并且在对片段执行纹理和/或着色以便渲染该场景之前对片段执行HSR。然而,在其它示例中,图形处理***可以是非基于区片的和/或不是延迟渲染***。GPU 202包括预处理模块206、分片模块208和栅格化模块210,其中栅格化模块210包括隐藏表面去除(HSR)模块212和纹理/着色模块214。分片模块20包括分片逻辑216、网格逻辑218、深度阈值更新逻辑220和深度阈值存储器222。如本领域技术人员将会意识到的,图2所示的图形处理***200可以是更大的计算机***(例如,智能电话、平板电脑、膝上计算机、PC、电视、机顶盒等)的一部分,如以下参考图11所描述的,后者可以包括诸如中央处理器(CPU)、其它存储器和其它设备(诸如显示器、扬声器、麦克风、小键盘等)的其它部件,它们例如能够通过通信总线互相进行通信。
图3a示出了渲染空间302的示例,其被细分为四个区片3041,3042,3043和3044。图元306存在于区片3042内,但是该图元并未完全覆分片片3042。在该示例中,区片是针对其存储深度阈值并且要针对其执行深度比较的区域。分片单元208能够针对每个区片304形成一个、两个或更多的深度阈值。例如,分片单元208可以针对每个区片304存储最大深度阈值和最小深度阈值。不同深度阈值在使用不同深度比较模式时可能是有用的。如果仅使用一个深度比较,则分片单元208可能仅针对每个区片存储一个深度阈值。针对一个区域存储最大和最小深度阈值允许深度比较模式有所变化。
图形处理***200能够使用各种不同的深度比较模式,并且可以在它们之间进行切换。例如,深度比较模式可以是以下各项中的一项:“小于”(DCM_LESS)、“小于或等于”(DCM_LESS_EQ)、“大于”(DCM_GREATER)、“大于或等于”(DCM_GREATER_EQ)、“等于”(DCM_EQ)、“不等于”(DCM_NOT_EQ)、“始终”(DCM_ALWAYS)或“从不”(DCM_NEVER)。
DCM_LESS深度比较模式是一种常见的深度比较模式,因为其对应于在深度值随着距观看者的距离增加而增大的坐标***中进行渲染。深度值小于另一个图元或图元片段的深度值的图元或图元片段更接近于观看者,并且因此在其它图元之前进行渲染。其它深度比较模式支持可替换的坐标***或者其它渲染效果。深度比较模式在传统上被用于HSR模块212中的全分辨率隐藏表面去除,但是也必须在分片单元208中执行图元剔除时被加以考虑。在DCM_LESS深度比较模式中,分片单元208将在图元306具有小于区域3042中的最大深度阈值的深度值的情况下确定其通过了深度测试。图3b示出了图元306的深度的第一示例。在图3b所示的示例中,可能深度值的范围从0.0延伸至1.0,并且分别被表示为“Threshmax”和“Threshmin”的区域3042的最大和最小深度阈值表示之前渲染的图元所建立的深度范围。在图3b所示的示例中,图元306具有最大深度Primmax和最小深度值Primmin。在DCM_LESS深度比较模式中,分片单元208测试是否Primmin<Threshmax。在图3b所示的示例中通过了该测试,从而图元并未被剔除并且其ID被包括在该区片的显示列表中。图3c示出了第二示例,其中图元306具有比区域3042中的最大深度阈值更大的深度。因此,在图3c所示的示例中,图元将无法通过是否Primmin<Threshmax的测试。这意味着,在该区片中的每个可能位置,该图元都被隐藏在已经被处理的一些其它图元之后。其可能是无法看到的。由于并未通过该测试,所以该图元被剔除而使得其ID并未被包括在该区片的显示列表中。图3d示出了第三示例,其中图元的最大深度(Primmax)大于最大阈值(Threshmax),但是仍然是Primmin<Threshmax的情形。这意味着,在该区片中的一些位置,该图元是可见的。将需要HSR模块112中的全分辨率深度测试以准确确定可见性,从而在图3d所示的示例中,图元306通过该深度测试,其并不被剔除并且其ID被包括在区片3042的显示列表之中。
如果深度模式为DCM_GREATER,则用来确定图元ID是否应当被包括在显示列表中的相关测试是要确定是否Primmax>Threshmin。本领域技术人员将会理解不同深度比较模式中要执行何种测试来确定图元是否应当被剔除。
由于图元306并未完全覆分片片3042,则区片3042的(多个)深度阈值并未由于图元306而被更新。
然而,图4a示出了其中图元406完全覆盖区域404的另一个示例。区域404可以是区片或子区片。在该示例中,图元406是不透明的并且是外凸的。分片单元208可以通过测试区域404的四个角(在图4a中表示为4101,4102,4103和4104)中的每一个是否处于图元406之内来确定外凸图元406完全覆盖区域404。在其它示例中,图元可能并不是外凸的,在这种情况下,应当执行不同测试来确定图元是否完全覆盖该区域。例如,针对内凹图元可以执行类似于以下针对内凹网格所描述的测试。图4b表示区域404中的图元406的深度。能够看到,在这种情况下,区域404中的图元406的最大和最小深度值(Primmin和Primmax)小于区域404的最大深度阈值Threshmax。因此,在DCM_LESS比较模式中,图元406并未被剔除(因为Primmin<Threshmax)。此外,由于Primmax<Threshmax并且由于图元406覆盖了整个区域404,所以区域404的最大深度阈值能够被更新为等于图元406的最大深度,即Threshmax被设置为等于Primmax。这是因为已知在图元406已经被HSR模块212所处理之后,比图元406更远的任意像素都将已经被来自图元406的像素所替代。因此,在该区片中将没有深度值大于图元406的最大深度的像素。图4c示出了已经对区域的最大深度值进行更新之后的区域404的深度阈值。由于图元406覆盖了整个区域404,所以区域404中具有大于图元406的最大深度的深度值的任何后续图元都将被图元406所隐藏。通过将区域404的最大深度阈值设置为等于图元405的最大深度(即,通过设置Threshmax=Primmax),深度阈值能够被用来剔除后续图元。
注意到,区域的(多个)深度阈值仅应当由无法使得其深度值或其存在被纹理和着色模块214所改变的图元进行更新。例如,区域的(多个)深度阈值可以被非透明或透明图元所更新,而并不被图元中的像素可见度依赖于着色器的穿通图元或者深度值依赖于着色器的深度反馈图元所更新。
以上参考图4a至4c所描述的深度阈值的更新是有用的,但是其局限于图元完全覆盖区域的情形。如以上所提到的,随着图形处理***更为复杂,图元的平均大小一般有所下降,特别是在现代3D图形内容中,并且单个图元将变得不太可能完全覆盖一个区片。即使区域是子区片而不是区片,单个图元仍然不可能完全覆盖一个子区片。因此,基于出现完全覆盖一个区域的单个图元而更新区域的(多个)深度阈值的机会是有限的。
然而,图元经常是较大的图元网格的一部分。例如,应用可以向图形处理***200发送图元网格,其中该图元网格在被发送至图形处理***200之前已经产生。此外,复杂的形状能够由补丁(例如,Bezier补丁)所表示,该补丁是描述曲线形状的控制点集合所定义的参数函数。镶嵌是一种包含将补丁拆分为多个镶嵌图元的技术。这些进行镶嵌的图元将形成网格。诸如此类的镶嵌在图形处理***200对图元进行处理的时候“即时地(on-the-fly)”创建了图元的网格。以上参考图4a至4c所描述的方法能够进行调适而使得区域的(多个)深度阈值可以在网格完全覆盖该区域时被更新,即使该网格中在被单独考虑时并没有完全覆盖该区域的图元。这提供了更多的机会来更新区域的(多个)深度阈值。
例如,图5示出了包括三个图元的网格506。图5中所示的虚线(表示为5181和5182)表示网格506的图元的共享边缘。如果两个图元共享一条边缘,则它们可以被认为是网格的一部分。图5示出了可以是图形处理***200的渲染空间中的区片或子区片的区域504。在图5中能够看到,网格506中的三个图元中并没有单独的一个完全覆盖该区域,但是网格506总体上完全覆盖了区域504。
参考图6所示的流程图,在以下描述了对分片单元208进行操作的方法从而基于网格的覆盖而不是基于单独图元的覆盖而提供更多更新区域的(多个)深度阈值的机会。
图元在GPU 202的预处理模块206被接收。可以从在与GPU 202相同的计算机***中运行的应用接收该图元。预处理模块206执行诸如包括剪裁和剔除在内的几何处理的功能以去除并未落入可见视图之中的图元。预处理模块206还可以将图元投影到屏幕空间之中。预处理模块206还可以将所接收到的图元置入图元块。
图元(例如,在图元块中)从预处理模块206被输出,并且在步骤S602,该图元在分片单元208被接收。图元被送至分片单元208的分片逻辑216、网格逻辑218和深度阈值更新逻辑220。
在步骤S604,网格逻辑218例如通过确定图元边缘被多个所接收的图元所共享而确定所接收到的图元形成网格。例如,网格逻辑218通过确定边缘5181和5182被图元所共享而确定图5中所示的三个图元形成网格506。图元可以在图元块中被接收并且图元块内的图元能够被分析以确定它们中的任何图元是否形成网格。在其它示例中,图元序列中的网格的起始和结束的指示可以被包括在图元流中,而使得网格逻辑218能够轻易地确定多个图元是否形成网格。
在步骤S606,网格逻辑218识别网格506的外部边缘。网格506的外部边缘描述了多个图元所形成的网格的外侧边缘(从渲染的视点来看)。例如,网格506的外部边缘可以通过识别并未被网格506的多个图元所共享而被识别。如能够在图5中所看到的,被共享的边缘5181和5182是网格506的内部边缘,并且网格506中并未被多于一个的图元所共享的网格506的图元的边缘是网格506的外部边缘。正是网格506的外部边缘描述了网格506的覆盖程度。
当网格逻辑218已经识别出网格506的外部边缘时,网格逻辑218随后确定网格506是否完全覆盖了该区域。为了如此,网格逻辑218使用与区域504的边缘对准(并且从那里延伸)的直线508。注意到,区域504是多边形区域而使得其由多条直线边缘所描述。在图5所示的示例中,多边形区域504是正方形,但是在其它示例中,该区域可以为其它多边形形状,例如矩形、三角形或六边形。由于区域504是多边形,所以其具有直线(例如,直线5081,5082,5083和5084)能够与之对准的直线边缘。直线5081与区域504的顶部边缘对准;直线5082与区域504的底部边缘对准;直线5083与区域504的左侧边缘对准;并且直线5084与区域504的右侧边缘对准。在步骤S608,网格逻辑218识别网格506被识别的外部边缘与直线5081,5082,5083和5084相交的交点(例如,如图5所示的点5101,5102,5121,5122,5141,5142,5161和5162)。如以下参考步骤S614所描述的,这些交点被用来确定网格506是否完全覆盖区域504。
在网格逻辑218执行步骤S604、S606和S608的同时,分片逻辑216能够执行步骤S610和S612。分片逻辑216确定存在于区域504内的网格506的图元的第一深度值。在步骤S610中,分片逻辑216将存在于区域504中每个所接收图元的第一深度值与区域504的深度阈值进行比较。例如,区域504的最大和最小深度阈值(Threshmax和Threshmin)的一个或两个能够从深度阈值存储器222进行读取并且与存在于区域504内的图元的深度值进行比较。该比较的目的是确定图元是否能够因为其被之前存在于区域504中的图元所隐藏而被剔除。因此,在小于深度比较模式(DCM_LESS)或者小于或等于深度比较模式(DCM_LESS_EQ)中,图元的“第一深度值”是该区域内的该图元的最小深度值,被称作Primmin。由于在本文所描述的示例中,图元是平面的,所以区域504内的图元的最小深度值将是以下其中之一处的图元的深度值的最小值:(i)图元边缘与区域504的边缘的交点;(ii)区域504的角在图元内的位置;和(iii)区域504内的图元的顶点。
在小于深度比较模式(DCM_LESS)中,在步骤S610中,分片逻辑测试是否Primmin<Threshmax。在小于或等于深度比较模式(DCM_LESS_EQ)中,在步骤S610中,分片逻辑测试是否Primmin≤Threshmax。如果通过该测试,则图元并不被剔除,但是如果并未通过该测试,则该图元就要被剔除。
在大于深度比较模式(DCM_GREATER)或者大于或等于深度比较模式(DCM_GREATER_EQ)中,图元的“第一深度值”是该区域内的该图元的最大深度值,被称作Primmax。由于在本文所描述的示例中,图元是平面的,所以区域504内的图元的最大深度值将是以下其中之一处的图元的深度值的最大值:(i)图元边缘与区域504的边缘的交点;(ii)区域504的角在图元内的位置;和(iii)区域504内的图元的顶点。
在大于深度比较模式(DCM_GREATER)中,在步骤S610中,分片逻辑测试是否Primmax>Threshmin。在大于或等于深度比较模式(DCM_GREATER_EQ)中,在步骤S610中,分片逻辑测试是否Primmax≥Threshmin。如果通过该测试,则图元并不被剔除,但是如果并未通过该测试,则该图元就要被剔除。
在步骤S612,分片逻辑216依据步骤S610中的比较结果有选择地将图元的指示包括在有关区片的显示列表中。将图元ID包括在区片的显示列表中意味着该图元并未被剔除并且该图元被分配给该区片。与之相比,并未将图元ID包括在显示列表中则意味着该图元可能至少关于当前区片被剔除。显示列表被存储在存储器2041中并且分片逻辑216对图元进行处理以将图元ID添加至存储在存储器2041中的显示列表。
就该显示列表指示哪些图元存在于每个区片之内的意义而言,显示列表是以每区片计的。这样使得HSR模块212能够在并不依赖于分片单元208是否随作为区片或子区片的区域进行操作的情况下取回区片的显示列表。然而,就最大和/或最小深度阈值是指图元在特定区域内的深度的意义而言,深度阈值是以每个区域来确定的。如果区域是区片,则该深度阈值和显示列表表示渲染空间中的相同区域,但是如果区域是子区片,则深度阈值和显示列表并非表示渲染空间中的相同区域。这意味着当区域是子区片时,如果图元并未通过针对区域的深度阈值的测试,则该图元在相同区片的另一个子区片内可能仍然能够看到并且因此可能最终仍然包括在该区片的显示列表中。出于该原因,在图元在步骤S610中通过了针对区片的区域的深度测试时在概念上将步骤S612认为是将图元ID包括在区片的显示列表中的步骤,而并不是在图元在步骤S610中未通过针对区片的区域的深度测试时将步骤S612认为是从区片剔除图元的步骤是有意义的。
在步骤S614,网格逻辑218使用在步骤S608所确定的交点来确定网格506是否完全覆盖区域504。在不同示例中,该交点可以被用来以不同方式确定网格506是否完全覆盖区域504。例如,网格逻辑218可以通过针对区域504的每个边缘确定与该边缘对准的直线508上的一对连续交点是否包含了该直线上的区域边缘来确定网格是否完全覆盖区域504,其中该直线上的连续交点之间的部分处于网格506内。针对区域504的每个边缘,如果一对连续交点包含了区域504的边缘,其中直线508上的该连续交点之间的部分处于网格506内,则确定网格506完全覆盖了该区域。
例如,在直线5081上,就直线5081与网格506的外部边缘在两个交点5101和5102之间没有交点的意义而言,交点5101和5102是连续交点。此外,交点5101和5102包含了区域504的顶部边缘,即区域504的顶部边缘中并没有处于直线5081在交点5101和5102之间的部分以外的部分。此外,直线5081在交点5101和5102之间的部分处于网格506之内(即,并非处于网格506之外)。因此,对于区域504的顶部边缘而言,该条件得以满足。此外,在图5所示的示例中,该条件针对区域504的每个边缘都满足。也就是说,对于区域504的底部边缘而言,交点5121和5122是连续的并且在处于网格506内的直线5082的部分上包含了区域504的底部边缘。此外,对于区域504的左侧边缘而言,交点5141和5142是连续的并且在处于网格506内的直线5083的部分上包含了区域504的左侧边缘。此外,对于区域504的右侧边缘而言,交点5161和5162是连续的并且在处于网格506内的直线5084的部分上包含了区域504的右侧边缘。因此,在步骤S614,网格逻辑218确定网格506完全覆盖了区域504。
作为交点可以如何被用来确定网格506是否完全覆盖区域504的另一个示例,网格逻辑218可以确定在多边形区域504的边缘上是否存在任何交点,并且确定区域504的边缘上的至少一个点被网格506所覆盖。如果在区域504的边缘上没有交点并且区域504的边缘上的至少一个点被网格506所覆盖,则网格逻辑218确定网格506完全覆盖了区域504。例如,交点(5101,5102,5121,5122,5141,5142,5161或5162)都不在区域504的边缘上并且该区域的边缘能上的至少一个点被网格506所覆盖,所以能够确定网格506完全覆盖了区域504。
注意到,以上关于确定单个图元是否完全覆盖一个区域所描述的方法无法可靠地应用于网格(其可能是内凹的)。也就是说,确定区域504的所有四个角是否处于网格506之内并非确定网格506是否完全覆盖了区域504。
例如,图7示出了部分而非全部覆盖区域704的更为复杂的网格706。网格706包括七个图元并且图元之间的共享边缘在图7中被示为虚线。能够看到网格706是内凹的。这意味着区域704的所有四个角都可能处于网格706之内,但是对于网格706却并未完全覆盖704,这就是如图7所示的情形。这对于单一、外凸的图元而言是不可能的。因此,确定区域704的四个角是否处于网格706内的方法将不正确地确定网格706完全覆盖区域704。
然而,为了正确确定网格706是否完全覆盖区域704,网格逻辑218确定网格706的外部边缘与分别和区域704的顶部、底部、左侧和右侧边缘对准的直线7081,7082,7083和7084的交点。交点在图7中被示为表示为7101,7102,7121,7122,7141,7142,7161,7162,7163和7164的点。能够看到的是,针对区域704的右侧边缘,直线7084上并没有完全包含区域704的右侧边缘的一对连续交点。注意到,交点7161和7164并不是连续交点,因为交点7162和7163在直线7084上处于交点7161和7164之间。因此,出于该第一个原因,能够确定网格706并未完全覆盖区域704。此外,能够看到交点7162和7163在处于区域704的右侧边缘上。因此,出于该第二原因,也能够确定网格706并未完全覆盖区域704。使用交点来确定网格706是否完全覆盖区域704与确定区域704的四个角是否处于网格706之内相比是更为鲁棒的方法。
如果网格逻辑218确定网格706并未完全覆盖区域704,则该方法从步骤S614进行至步骤S620,步骤S620在随后进行描述。在这种情况下,网格逻辑218向深度阈值更新逻辑220提供信号以指示网格706并未完全覆盖区域704,而使得深度阈值更新逻辑220并不尝试更新区域704的(多个)深度阈值。
然而,如果网格逻辑218确定了网格完全覆盖了区域,则该方法从步骤S614进行至步骤S616。在这种情况下,网格逻辑218向深度阈值更新逻辑220提供信号以指示网格完全覆盖区域,而使得深度阈值更新逻辑220尝试更新区域704的深度阈值。图8示出了复杂网格806的另一个示例,其与图7所示的网格706非常相似并且包括七个图元。然而,网格806完全覆盖了区域804,并且能够看到,确定网格806的外部边缘与直线8081,8082,8083和8084的交点的方法将确定网格806完全覆盖了区域804。区域804可以是渲染空间的任意适当区域,例如区片或子区片。
如以下所描述的,深度阈值更新逻辑220接收图元并且确定区域804内的网格806的至少一个图元的第二深度值。深度阈值更新逻辑220还从深度阈值存储器222取回区域804的(多个)深度阈值。响应于从网格逻辑218接收到网格806完全覆盖区域804的指示,在步骤S616中,深度阈值更新逻辑220将区域804内的网格806的至少一个图元的第二深度值与区域804的深度阈值进行比较。例如,区域804的最大和最小深度阈值(Threshmax和Threshmin)之一或二者能够从深度阈值存储器222取回并且与存在于区域804内的网格806的图元的深度值进行比较。该比较的目的是确定是否更新区域804的(多个)深度阈值。因此,在小于深度比较模式(DCM_LESS)或者小于或等于深度比较模式(DCM_LESS_EQ)中,“第二深度值”是区域804内的网格806中的任意图元的最大深度值(其在本文被称作“Meshmax”)。在这些深度比较模式中,步骤S616涉及确定是否Meshmax<Threshmax。由于在本文所描述的示例中,图元是平面的,所以区域804内的网格806的图元的最大深度值(Meshmax)将是以下其中之一处的图元的深度值的最大值:
(i)网格806的图元边缘(无论该边缘处于网格804的外部还是内部)与区域804的边缘的交点,其中这样的交点在图8中由点8121,8122,8123,8124,8125,8126和8127进行表示;
(ii)区域804的角在网格806的图元内的位置,这样的位置在图8中由点8101,8102,8103和8104进行表示;和
(iii)区域804内的网格806的图元的顶点,其中这样的顶点在图8中由点8141和8142进行表示。
在步骤S618中,深度阈值更新逻辑220依据在步骤S616中所执行的比较而更新区域804的深度阈值。例如,在小于深度比较模式(DCM_LESS)或者小于或等于深度比较模式(DCM_LESS_EQ)中,如果Meshmax<Threshmax,则区域804的最大深度阈值(Threshmax)被更新为等于Meshmax。区域804经更新的深度阈值被存储在深度阈值存储器222中并且能够由分片逻辑216用于在步骤S610和S612中剔除后续图元。
在大于深度比较模式(DCM_GREATER)或者大于或等于深度比较模式(DCM_GREATER_EQ)中,“第二深度值”是区域804内的网格806中的任意图元的最小深度值(其在本文被称作“Meshmin”)。在这些深度比较模式中,步骤S616涉及确定是否Meshmin<Threshmin。类似于以上所描述的,由于在本文所描述的示例中,图元是平面的,所以区域804内的网格806的图元的最小深度值(Meshmin)将是以下其中之一处的图元的深度值的最小值:
(i)网格806的图元边缘(无论该边缘处于网格804的外部还是内部)与区域804的边缘的交点,其中这样的交点在图8中由点8121,8122,8123,8124,8125,8126和8127进行表示;
(ii)区域804的角在网格806的图元内的位置,这样的位置在图8中由点8101,8102,8103和8104进行表示;和
(iii)区域804内的网格806的图元的顶点,其中这样的顶点在图8中由点8141和8142进行表示。
在大于深度比较模式(DCM_GREATER)或者大于或等于深度比较模式(DCM_GREATER_EQ)中,在步骤S618中,深度阈值更新逻辑220更新区域804的深度阈值。如果Meshmin<Threshmax,则Threshmin被更新为等于Meshmin。区域804经更新的深度阈值被存储在深度阈值存储器222中并且能够由分片逻辑216从存储器222进行读取以用于在步骤S610和S612中剔除后续图元。
注意到,由于区域504完全被区域506所覆盖,所以步骤S616和S618将被执行以便更新图5所示的区域504的深度阈值。
在步骤S620,确定渲染空间中是否还有另外的区域要随网格的图元进行考虑。也就是说,确定网格是否在其它区域上进行延伸。如果网格并未在其它区域上进行延伸,则该方法返回步骤S608并且该方法从该步骤针对下一个区域进行重复。
如果针对该网格没有另外的区域要考虑,则该方法从步骤S620进行至步骤S622。在步骤S622,确定在分片单元208是否接收了更多的图元,例如另一个网格的图元。如果已经接收了更多的图元,则该方法返回至步骤S604并且该方法从那里针对如下一个网格的下一个图元进行重复。如果分片单元208中没有更多的图元要处理,则该方法从步骤S622进行至步骤S624,该方法在那里结束。当已经对图像的图元进行了处理,则针对图像的渲染空间中的该区片在存储器2041中完成了显示列表。此外,图元(例如,在图元块中)从分片单元208被输出并且存储在存储器2041中。栅格化模块210随后能够从存储器2041取得一个区片的显示列表以及与该区片相关的图元,而使得HSR模块212能够执行隐藏表面去除从而去除在场景中被隐藏的图元片段。剩余片段被送至纹理/着色模块214,纹理/着色模块214在该片段上执行纹理和/或着色以确定所渲染图像的像素颜色值,该颜色值被送至存储器2042用于存储在帧缓冲器中。栅格化模块210对每个区片进行处理,并且在整个图像都已经被渲染并存储在存储器2042中时,该图像能够从图形处理***200被输出并且例如在显示器上进行显示。
因此,能够意识到的是,以上参考图6所示的流程图所描述的方法允许分片单元208通过为区片创建显示列表而向渲染空间的区片分配图元,其中区域的(多个)深度阈值能够在图元的网格完全覆盖该区域时被更新。更新区域的(多个)深度阈值将允许更多的图元被分片逻辑216所剔除,这因此将会减少显示列表中所包括的图元ID的数量。与单个图元将完全覆盖渲染空间的区域相比,图元网格将更可能完全覆盖渲染空间的该区域。
在图6所示的流程图中,步骤S604、S606和S608在步骤S610和S612之前执行。在其它示例中,步骤S610和S612可以在步骤S604、S606和S608之前执行,并且如果图元的ID已经包括在区片的显示列表中,网格逻辑618可以仅执行步骤S604、S606和S608以确定所接收的图元是否形成完全覆盖区域的网格。这样的优势在于避免了针对被剔除的图元的进行与步骤S604、S606和S608相关联的处理,但是这样的缺陷在于针对其中出现图元的每个区域都重复步骤S604和S606。
参考图9所示的流程图,现在对在分片单元208处向区片分配图元的第二方法进行描述。该方法使用的概念是确定网格或单个图元是否完全覆盖渲染空间的一个区域,但是在该方法中,如果其ID包括在显示列表中的图元被完全覆盖该区片的一个或多个图元的后续集合(例如,网格或单个图元)所隐藏,则该信息被用来移动针对区片的显示列表的起始指针。也就是说,如果图元或图元网格完全覆盖了区片的所有区域,而使得该区片中所有之前的图元的全部都被遮挡(即,被隐藏),则显示列表的起始指针能够移动从而跳过被遮挡的图元。以这种方式,HSR模块212将并不会取得最终将被完全覆盖区域的一个或多个图元的集合所隐藏的先前图元。该方法因此减少了HSR模块212从存储器2041所取得的图元的数量。该方法在以下参考图5所示的完全覆盖区域504的图元网格506进行描述,但是其也将分别应用于图7和图8所示的图元网格706或806,并且还将应用于单个图元完全覆分片片的(多个)区域的情形。注意到,网格706并未完全覆盖区域704,并且因此在该情况下,将确定显示列表的开始指针无法进行移动。
步骤S902类似于以上参考图6所描述的步骤S602。也就是说,在步骤S902,在分片单元208接收网格506的图元。在一些示例中,图元可能并未形成网格,并且以下所描述的方法能够应用于单个图元以及图元的网格。通常,以下所描述的方法能够应用于所接收到的一个或多个图元的集合。
在步骤S904,分片逻辑216在区域504作为其一部分的区片的显示列表中包括存在于区域504内的图元的指示,从而将该图元分配给该区片。步骤S904可以包括诸如以上所描述的深度测试,而使得一些图元在它们并未通过针对该区片的区域504的深度阈值的深度测试的情况下被剔除并且不包括在该区片的显示列表中。然而,步骤S904可以简单地包括基于图元是否存在于区片内而向该区片分配图元,而并不考虑图元的深度。该显示列表被存储在存储器2041中。
在其中所接收的图元形成网格的示例中,在步骤S906,网格逻辑218以类似于以上参考步骤S604所描述的方式,例如通过确定图元边缘被多个所接收图元所共享,而确定所接收的图元形成网格。
在其中所接收的图元形成网格的示例中,在步骤S908,网格逻辑218以类似于以上参考步骤S606所描述的方式识别网格506的外部边缘。网格506的外部边缘描述了多个图元所形成的网格的外边缘。例如,如以上所描述的,网格506的外部边缘可以通过识别并未被网格506的多个图元所共享的图元边缘而被识别。如能够在图5中所看到的,被共享的边缘5181和5182是网格506的内部边缘并且网格506中并未被多于一个的图元所共享的图元边缘是网格506的外部边缘。正是网格506的外部边缘描述了网格506的覆盖范围。
在其中所接收的图元形成网格的示例中,在步骤S910,针对区片的每个区域(例如,针对区域504),网格逻辑218识别网格506的所识别的外部边缘与和多边形区域504的边缘对准(并且从那里延伸)的直线(例如,5081,5082,5083和5084)相交的交点(例如,图5所示的点5101,5102,5121,5122,5141,5142,5161和5162)。
在步骤S912,在步骤S910所确定的交点被用来确定网格506是否完全覆盖了区域504。对于区片的一个或多个区域中的每一个如此进行。这能够如以上所描述地进行,例如,通过针对区域504的每个边缘确定与该边缘对准的直线508上的一对连续交点是否包含了直线508上的区域504的边缘,其中直线508上的连续交点之间的部分处于网格506内。针对多边形区域504的每个边缘,如果一对连续交点包含了区域504的边缘,其中直线508上的该连续交点之间的部分处于网格506内,则确定网格506完全覆盖了区域504。可替换地,所识别的交点能够被用来通过确定在区域504的边缘上是否存在任何交点,并且确定区域504的边缘上的至少一个点被网格506所覆盖而确定网格506是否完全覆盖了区片的多边形区域504。如果在区域504的边缘上没有交点并且区域504的边缘上的至少一个点被网格506所覆盖,则确定网格506完全覆盖了区域504。在考虑单个外凸图元的示例中,则在步骤S912确定图元是否完全覆盖了区域504。这例如能够如以上所描述的通过确定区域504的所有角是否都处于单个外凸图元内来实现。
如果网格506完全覆盖了区域504,则该方法进行至步骤S914,并且网格逻辑218向分片逻辑216发送信号以指示网格506覆盖了整个区域504。这同样在其中一个或多个图元的集合完全覆盖了区域504的更为一般的示例中应用。以下描述涉及网格506完全覆盖了区域504的情形,但是相同的原则也将应用于单个图元完全覆盖区域504的情形。在步骤S914,分片逻辑216从深度阈值存储器222取回区域504的深度阈值。分片逻辑216还确定存在于区域504内的网格506的至少一个图元的深度值。分片逻辑216随后将区域504的深度阈值与网格506的至少一个所接收图元的深度值进行比较。该比较是为了确定网格506是否完全遮挡了区域504中之前的图元,并且在步骤S916中,区片逻辑216确定网格506是否完全遮挡了区域504中包括在该区片的显示列表之中的先前图元。例如,网格506可能完全处于其ID已经包括在区片的显示列表之中的所有先前图元的前方,从而网格506可以遮挡(即,隐藏)区域504中的先前图元。这意味着当HSR模块212针对包括区域504的区片执行隐藏表面去除时,其将确定先前图元在区域504中被网格506所隐藏。
步骤S916考虑到网格506中的图元的类型。注意到,如本文所描述的“穿通”图元是图元中的像素的可见度依赖于着色器的图元。例如,一些类型的图元(例如,不透明图元)可能完全遮挡处于其后方的图元,而一些其它类型的图元(例如,透明或穿通图元)则可能并不完全遮挡处于它们后方的图元。因此,分片逻辑216能够在覆盖区域504的网格506中的图元是不透明图元的情况下确定网格506完全遮挡了区域504中先前的图元,但是在覆盖区域504的网格506的图元是透明或穿通图元或者具有依赖于着色器的深度的图元的情况下则并非如此。穿通图元的片段能够使得其存在被纹理和着色模块214所改变,即纹理/着色模块214能够确定穿通图元的一些片段并不存在从而它们并不遮挡处于它们后方的图元。此外,具有依赖于着色器的深度的图元片段能够使得其深度值被纹理和着色模块214所改变,这会改变分片单元208关于这些图元是否遮挡区域504中的其它图元所作出的任意确定。因此,分片逻辑216在网格的图元或先前图元具有依赖于着色器的深度的情况下确定网格506并未完全遮挡区域504中包括在相关显示列表中的先前图元。
类似于以上所描述的,网格506中与区域504的深度阈值进行比较的至少一个图元的深度值是在以下之一处的区域504的网格506的图元的深度值:
(i)图元边缘与区域504的边缘的交点;
(ii)区域504的角在图元内的位置;和
(iii)图元的顶点在区域内的位置。
如果深度比较模式是小于深度比较模式(DCM_LESS)或者小于或等于深度比较模式(DCM_LESS_EQ),则网格506的至少一个所接收图元的深度值是区域504内的网格506的任意图元的最大深度值(其在本文被称作“Meshmax”)。此外,如果深度比较模式是小于深度比较模式(DCM_LESS),则分片逻辑216在区域504内的网格506的任意图元的最大深度值(Meshmax)小于该区片的区域504的最小深度阈值(Threshmin)的情况下确定网格506完全遮挡了区域504中的先前图元,因为这意味着区域504内的网格506的最高深度值小于区域504中的任意先前图元的最小深度值,从而网格506完全遮挡了区域504中的先前图元。如果深度比较模式是小于或等于深度比较模式(DCM_LESS_EQ),则分片逻辑216在区域504内的网格506的任意图元的最大深度值(Meshmax)小于或等于该区片的区域504的最小深度阈值(Threshmin)的情况下确定网格506完全遮挡了区域504中的先前图元,因为这意味着区域504内的网格506的最高深度值小于或等于区域504中的任意先前图元的最小深度值,从而网格506完全遮挡了区域504中的先前图元。
如果深度比较模式是大于深度比较模式(DCM_GREATER)或者大于或等于深度比较模式(DCM_GREATER_EQ),则网格506的至少一个所接收图元的深度值是区域504内的网格506的任意图元的最小深度值(其在本文被称作“Meshmin”)。此外,如果深度比较模式是大于深度比较模式(DCM_GREATER),则分片逻辑216在区域504内的网格506的任意图元的最小深度值(Meshmin)大于该区片的区域504的最大深度阈值(Threshmax)的情况下确定网格506完全遮挡了区域504中的先前图元,因为这意味着区域504内的网格506的最低深度值大于区域504中的任意先前图元的最大深度值,从而网格506完全遮挡了区域504中的先前图元。如果深度比较模式是大于或等于深度比较模式(DCM_GREATER_EQ),则分片逻辑216在区域504内的网格506的任意图元的最小深度值(Meshmin)大于或等于该区片的区域504的最大深度阈值(Threshmax)的情况下确定网格506完全遮挡了区域504中的先前图元,因为这意味着区域504内的网格506的最低深度值大于或等于区域504中的任意先前图元的最大深度值,从而网格506完全遮挡了区域504中的先前图元。
如果分片逻辑216确定网格506完全遮挡了区域504中的先前图元,则该方法进行至步骤S918。如果网格506完全遮挡了区片的一个或多个区域的全部中的先前图元,则在步骤S918中,分片逻辑216设置显示列表起始指针以指示网格506的图元之一的指示是该区片的显示列表中的起始点。显示列表起始指针可以是指示该显示列表内要作为该区片的显示列表的起始点的地址的显示列表起始地址。
图10示出了一个区片的显示列表1002的示例。显示列表1002包括报头1004以及指示存在于该区片中的图元的图元ID集合1006。注意到,在一些示例中,多个区片的显示列表可以包括在相同数据结构中,但是针对该数据结构中的每个图元ID,区片的指示允许不同区片的显示列表得以被识别。图10示出了与区片相关的图元ID1006。最初,如图10所示,起始指针可以指向显示列表1002中的第一图元ID。这意味着,当HSR模块212读取显示列表1002,其将如起始指针所指示的在显示列表1002中的第一图元ID处开始,并且将取得所识别的图元,并且随后取得在显示列表1002中后续识别的后续图元。HSR模块212随后将按照它们在显示列表1002中被指示的顺序对图元进行处理以由此对区片中的图元执行隐藏表面去除。作为示例,由显示列表1002中的相应ID所示出的图元7、8和9可以是形成网格506的图元,而由显示列表1002中的相应ID所示出的图元1、3和4可以是包括在显示列表1002中的先前图元,但是它们完全被网格506所遮挡。因此,在步骤S918,显示列表1002的起始指针可以被设置为指向图元7(即,包括在显示列表1002中的网格506的第一图元)的ID。以这种方式,当HSR模块212读取显示列表1002时,其将在图元7的ID开始,而使得其将并不取得图元1、3或4。HSR模块212对该区片进行处理并不需要图元1、3或4,因为它们完全被该区片中的网格506所遮挡。因此,通过移动显示列表1002的起始指针,被HSR模块212所取得的图元的数量可以有所减少。这能够有助于减少在GPU 202和存储器204之间进行传输的数据量。
在一些示例中,被遮挡的图元ID可以留在显示列表1002中。在其它示例中,被遮挡的图元ID可以从显示列表1002中移除,这将减少显示列表1002所使用的存储器数量。
无论网格506是否完全覆盖了区域504并且无论网格506是否完全遮挡了区域504中的先前图元,该方法都包括步骤S920。在步骤S920,深度阈值更新逻辑220依据存在于区域504内并且其指示包括在该区片的显示列表1002中的所接收图元的深度值而更新该区域的深度阈值。经更新的深度阈值被存储在深度阈值存储器222中。例如,在小于深度比较模式(DCM_LESS)或者小于或等于深度比较模式(DCM_LESS_EQ)中,深度阈值更新逻辑220将区域504内的网格506的任意图元的最小深度(Meshmin)与区域504的最小阈值(Threshmin)进行比较,并且如果Meshmin<Threshmin,则深度阈值Threshmin被更新为等于Meshmin。以这种方式,区域504的深度阈值指示存在于区域504内并且当前被显示列表1002中的图元ID所识别的任意图元的最小深度。
类似地,在大于深度比较模式(DCM_GREATER)或者大于或等于深度比较模式(DCM_GREATER_EQ)中,深度阈值更新逻辑220将区域504内的网格506的任意图元的最大深度(Meshmax)与区域504的最大阈值(Threshmax)进行比较,并且如果Meshmax>Threshmax,则深度阈值Threshmax被更新为等于Meshmax。以这种方式,区域504的深度阈值指示存在于区域504内并且当前被显示列表1002中的图元ID所识别的任意图元的最大深度。
在步骤S922,确定渲染空间中是否还有更多的区片要随网格506的图元进行考虑。也就是说,确定网格506是否在其它区域上延伸。如果网格506在其它区域上进行延伸,则该方法返回步骤S910并且该方法从该点针对下一个区片进行重复。
如果针对该网格506没有更多的区域要考虑,则该方法从步骤S922进行至步骤S924。在步骤924,确定是否在分片单元208已经接收了更多的图元,例如另一个网格的图元。如果已经接收了更多的图元,则该方法返回步骤S904并且该方法从那里针对例如下一个网格的下一个图元进行重复。如果没有更多图元要在分片单元208中进行处理,则该方法从步骤S924进行至步骤S926,该方法在那里结束。
如以上所描述的,当图像的图元已经被处理时,则在存储器2041.中针对该图像的渲染空间的区片完成了显示列表。此外,图元(例如,在图元块中)从分片单元208被发送并且存储在存储器2041.中。栅格化模块210随后能够从存储器2041取回一个区片的显示列表以及与该区片相关的图元,并且HSR模块212随后能够对被显示列表中的图元ID指示为存在于区片之中的图元执行隐藏表面去除,从而去除在场景中被隐藏的图元片段。剩余片段被送至纹理/着色模块214,纹理/着色模块214对该片段执行纹理和/或着色以确定所渲染图像的像素颜色值,像素颜色值被送至存储器2042以便存储在帧缓冲器中。栅格化模块210对每个区片进行处理,并且在整个图像都已经被渲染并存储在存储器2042中时,该图像能够从图形处理***200被输出并且例如在显示器上进行显示。
以上参考图9所描述的方法涉及到图5所示的网格506完全覆盖区域504的示例。如以上所提到的,该方法还可以在其它示例中应用,诸如在图7所示的网格706部分覆盖区域704的示例(虽然在这种情况下,显示列表起始指针将由于网格706并未完全覆盖区域704而不会移动)或者图8所示的网格806完全覆盖区域804的示例中应用,或者在单个图元完全覆盖一个区域的示例中应用。
分片单元208的逻辑块(例如,逻辑块216、218和220)可以以硬件或软件或者它们的组合在GPU 202上实施。例如,如果逻辑块216、218和220以硬件实施,则它们可以被形成为晶体管以及适于执行本文所描述的逻辑块的所期望功能的其它硬件组件的特定布置形式。与之相比,如果逻辑块216、218和220以软件实施,则它们可以包括计算机指令的集合,其能够存储在存储器中并且能够被提供至GPU 202用于在其上执行。此外,虽然在本文所描述的示例中,图形处理***使用了GPU,但是在其它示例中,能够使用例如CPU的通用目的处理单元来实施在本文被描述为在GPU 202上实施的功能。
以上所描述的图形处理***200能够在计算机***中实施。例如,图11示出了包括GPU 202、CPU 1102和存储器1104的计算机***,其中存储器1104可以包括对应于以上所描述的存储器2041和2042的存储器块。该计算机***还包括其它设备1106,诸如显示器1108、扬声器1110、麦克风1112和小键盘1114。计算机***的组件能够经由通信总线1116互相通信。应用的计算机程序代码可以存储在存储器1104中,并且例如可以在CPU 1102上执行。如果应用需要渲染3D场景的图像,则图元能够被发送至GPU 202,并且GPU 202能够如以上所描述地渲染该场景。
通常,以上所描述的任意功能、方法、技术或组件(例如分片单元208和其组件)能够使用软件、固件、硬件(例如固定逻辑电路)或者这些实施方式的任意组合以模块来实施。术语“模块”、“功能”、“组件”、“块”、“单元”和“逻辑”在本文被用来总体上表示软件、固件、硬件或者其任意组合。
在软件实施方式的情况下,模块、功能、组件、块、单元或逻辑表示当在处理器(例如,一个或多个CPU)上执行时实施具体任务的程序代码。在一个示例中,所描述的方法可以由利用存储在计算机可读介质上的机器可读形式的软件进行配置的计算机来执行。一种这样的计算机可读介质的配置是信号承载介质并且因此被配置为诸如经由网络而向计算设备传送指令(例如,作为载波)。计算机可读介质还可以被配置为非暂态的计算机可读存储介质并且因此并不是信号承载介质。计算机可读存储介质的示例包括随机访问存储器(RAM)、只读存储器(ROM)、光盘、闪存、硬盘存储器以及可以使用磁的、光的和其它技术来存储指令和其它数据并且能够被机器访问的其它存储器设备。
软件可以为包括用于对计算机进行配置以执行所描述方法的组成部分的计算机程序代码的计算机程序的形式,或者为包括适于在程序在计算机上运行时并且在计算机程序可以体现于计算机可读介质上的情况下执行本文所描述的任意方法的所有步骤的计算机程序代码方式的计算机程序的形式。程序代码可以存储在一个或多个计算机可读媒体上。本文所描述的技术的特征是独立于平台的,这意味着该技术可以在具有各种处理器的各种计算平台上实施。
本领域技术人员还将意识到的是,所有或部分的功能、技术或方法可以由专用电路、专用集成电路、可编程逻辑阵列、现场可编程门阵列等来实施。例如,模块、功能、组件、单元或逻辑(例如分片单元208的逻辑块)可以包括电路形式的硬件。这样的电路可以包括晶体管和/或制造过程中可用的其它硬件部件。这样的晶体管和/或其它部件可以被用来形成实施和/或包含存储器的电路或结构,作为示例,诸如寄存器、触发电路或锁存器、逻辑运算器(诸如布尔运算、数学运算器、诸如加法器、乘法器或移位器)以及互连。这样的部件可以作为定制电路或标准单元库、宏或者其它抽象级别来提供。这样的部件可以以具体布置形式进行互连。模块、功能、组件、单元或逻辑(例如分片单元208的逻辑块)可以包括固定功能的电路以及能够进行编程而执行一种或多种功能的电路;这样的编程可以通过固件或软件更新来提供或者通过控制机制来提供。在一个示例中,硬件逻辑具有实施固定功能操作、状态机或过程的电路。
还意在涵盖“描述”或定义实施以上所描述的模块、功能、组件、单元或逻辑的硬件的配置的软件,诸如用于设计集成电路或者用于配置可编程芯片以执行所期望功能的HDL(硬件描述语言)软件。也就是说,可以提供计算机可读存储介质,其具有在其上进行编码的计算机可读程序代码以便生成分片单元用于在包括被配置为执行本文所描述的任意方法的GPU的图形处理***中使用,或者用于生成分片单元以便在包括本文所描述的任意装置的图形处理***中使用。例如,非瞬态计算机可读存储介质可以具有存储于其上的计算机可读指令,当在用于生成集成电路的表现形式的计算机***进行处理时,其使得该计算机***生成如本文的示例中所描述的分片单元的表现形式。该分片单元的表现形式可以是分片单元自身,或者是能够被用来生成分片单元的分片单元(例如,掩膜)的表示形式。
术语“处理器”和“计算机”在本文被用来指代具有处理能力而使得其能够执行指令的任意设备或其部分,或者能够执行全部或部分功能或方法或者它们的任意组合的专用电路。
虽然已经以特定于结构特征和/或方法动作的语言对主题进行了描述,但是所要理解的是,所附权利要求中所限定的主题并非必然被局限于以上所描述的具体特征或动作。相反,以上所描述的具体特征和动作作为实施权利要求的示例形式被公开。将要理解的是,以上所描述的益处和优势可能涉及到一个示例或者可能涉及到若干示例。
如本领域技术人员将会显而易见的,本文所给出的任意范围或值可以进行扩展或改变而并不失所寻求的效果。本文所描述的方法的步骤可以以任意适当顺序执行或者在适当的情况下同时执行。以上所描述的任意示例的各方面可以与所描述的任意其它示例的方面进行组合以形成另外的示例而并不失所寻求的效果。
Claims (21)
1.一种向图形处理***中的区片分配图元的方法,所述图形处理***具有被细分为多个区片的渲染空间,其中每个区片包括一个或多个多边形区域,所述方法包括:
在针对区片的显示列表中包括存在于所述区片的多边形区域内的图元的指示以由此将所述图元分配给所述区片;
接收一个或多个图元的集合;
针对区片的所述一个或多个多边形区域中的每一个多边形区域:
(i)确定一个或多个图元的所述集合是否完全覆盖所述区片的所述多边形区域;以及
(ii)如果确定所述一个或多个图元的所述集合完全覆盖所述区片的所述多边形区域,则将针对所述区片的所述多边形区域的深度阈值与针对存在于所述区片的所述多边形区域内的所述集合的至少一个所接收图元的深度值进行比较,以由此确定一个或多个图元的所述集合是否完全遮挡被包括在针对所述区片的所述显示列表中的所述区域中的先前图元;以及
如果确定一个或多个图元的所述集合完全遮挡所述区片的全部所述一个或多个区域中的所述显示列表中所包括的先前图元,则设置显示列表起始指针以指示所述集合中的所述图元之一的指示是针对所述区片的所述显示列表中的起始点。
2.根据权利要求1所述的方法,其中一个或多个图元的所述集合仅包括一个单个图元,其中所述单个图元是外凸的,并且其中所述确定所述单个图元是否完全覆盖所述区片的所述多边形区域包括确定所述多边形区域的所有角是否在所述单个图元内。
3.根据权利要求1或2所述的方法,其中在覆盖所述区域的所述集合中的所述图元是不透明图元的情况下能够确定所述一个或多个图元的集合完全遮挡所述区域中的所述先前图元,但是在覆盖所述区域的所述集合中的所述图元是透明图元、或者针对其而言所述图元的像素可视性是依赖于着色器的图元、或者具有依赖于着色器的深度的图元的情况下则并非如此。
4.根据权利要求1或2所述的方法,其中或者(i)每个区片包括一个多边形区域而使得所述多边形区域是区片,或者(ii)每个区片包括多个多边形区域而使得所述多边形区域是子区片。
5.根据权利要求3所述的方法,其中或者(i)每个区片包括一个多边形区域而使得所述多边形区域是区片,或者(ii)每个区片包括多个多边形区域而使得所述多边形区域是子区片。
6.一种分片单元,被配置为向具有被细分为多个区片的渲染空间的图形处理***中的区片分配图元,其中每个区片包括一个或多个多边形区域,所述分片单元被配置为接收一个或多个图元的集合,其中所述分片单元包括:
网格逻辑,被配置为针对区片的所述一个或多个多边形区域中的每一个多边形区域,确定一个或多个图元的所述集合是否完全覆盖所述区片的所述多边形区域;以及
分片逻辑,被配置为:
在针对区片的显示列表中包括存在于所述区片的多边形区域内的图元的指示,以由此将所述图元分配给所述区片;
针对区片的所述一个或多个多边形区域中的每一个多边形区域,如果确定所述一个或多个图元的集合完全覆盖所述区片的所述多边形区域,则将针对所述区片的所述多边形区域的深度阈值与存在于所述区片的所述多边形区域内的所述集合中的至少一个所接收图元的深度值进行比较,以由此确定所述一个或多个图元的集合是否完全遮挡被包括在所述区片的所述显示列表中的所述区域中的先前图元;以及
如果确定所述一个或多个图元的集合完全遮挡所述区片的全部所述一个或多个区域中的所述显示列表中所包括的先前图元,则设置显示列表起始指针以指示所述集合中的所述图元之一的指示是针对所述区片的所述显示列表中的起始点。
7.根据权利要求6所述的分片单元,进一步包括:
深度阈值更新逻辑,被配置为针对区片的所述一个或多个多边形区域中的每一个多边形区域,依据存在于所述区域内并且针对其指示被包括在针对所述区片的所述显示列表中的所接收图元的深度值来更新针对所述区域的所述深度阈值。
8.根据权利要求6或7所述的分片单元,其中一个或多个图元的所述集合包括形成网格的多个图元。
9.根据权利要求8所述的分片单元,其中所述网格逻辑进一步被配置为识别所述网格的外部边缘。
10.根据权利要求9所述的分片单元,其中所述网格逻辑进一步被配置为针对区片的所述一个或多个多边形区域中的每一个多边形区域:
识别所述网格的所识别的外部边缘与和所述区片的所述多边形区域的边缘对准的直线相交的交点;以及
使用所识别的交点来确定所述网格是否完全覆盖所述区片的所述多边形区域。
11.根据权利要求10所述的分片单元,其中所述网格逻辑被配置为针对所述多边形区域的每个边缘通过以下操作而使用所识别的交点来确定所述网格是否完全覆盖所述区片的所述多边形区域:
确定与所述边缘对准的所述直线上的一对连续交点是否将所述区域的所述边缘包含在所述直线上,其中所述直线上的所述连续交点之间的部分处于所述网格内,其中针对所述多边形区域中的每个边缘,如果一对连续交点利用处于所述网格内的所述直线上的连续交点之间的部分而包含了所述区域的所述边缘,则确定所述网格完全覆盖所述区域。
12.根据权利要求10所述的分片单元,其中所述网格逻辑被配置为通过以下操作而使用所识别的交点来确定所述网格是否完全覆盖所述区片的所述多边形区域:
确定所述多边形区域的所述边缘上是否存在任何交点;以及
确定所述区域的边缘上的至少一个点被所述网格覆盖;
其中如果所述多边形区域的所述边缘上没有交点并且所述区域的边缘上的至少一个点被所述网格覆盖,则确定所述网格完全覆盖所述区域。
13.根据权利要求6至7中任一项所述的分片单元,其中所述显示列表起始指针是所述显示列表内要作为针对所述区片的所述显示列表中的起始点的显示列表起始地址。
14.根据权利要求6至7中任一项所述的分片单元,其中所述分片逻辑进一步被配置为从针对所述区片的所述显示列表中去除被遮挡图元的指示。
15.根据权利要求6至7中任一项所述的分片单元,其中所述分片单元被配置为将针对所述区片的所述显示列表发送至存储器用于存储在其中,并且用于随后由隐藏表面去除模块从所述存储器中取回,以用于在被所述显示列表中的所述指示指示为存在于所述区片中的所述图元上执行隐藏表面去除。
16.根据权利要求6至7中任一项所述的分片单元,其中所述分片逻辑进一步被配置为确定针对所述集合中的至少一个所接收图元的所述深度值,其中针对所述多边形区域内的所述集合中的所述至少一个所接收图元的所述深度值被确定为在以下各项之一处的图元的所述深度值:
(i)所述图元的边缘与所述区域的边缘的交点;
(ii)所述区域的角在所述图元内的位置;以及
(iii)所述区域内的所述图元的顶点。
17.根据权利要求6至7中任一项所述的分片单元,其中深度比较模式是:(i)小于比较模式,或者(ii)小于或等于比较模式,
其中针对所述集合中的所述至少一个所接收图元的所述深度值是所述区域内的所述集合中的所述图元中的任何一个图元的最大深度值,并且
其中如果所述深度比较模式是所述小于比较模式,则所述分片逻辑被配置为在针对所述集合中的所述至少一个所接收图元的所述深度值小于针对所述区片的所述区域的所述深度阈值的情况下确定一个或多个图元的所述集合完全遮挡所述区域中的先前图元,并且其中如果所述深度比较模式是所述小于或等于比较模式,则所述分片逻辑被配置为在针对所述集合中的所述至少一个所接收图元的所述深度值小于或等于针对所述区片的所述区域的所述深度阈值的情况下确定一个或多个图元的所述集合完全遮挡所述区域中的先前图元。
18.根据权利要求17所述的分片单元,当引用权利要求6时,其中所述深度阈值更新逻辑被配置为在所述区域内的所接收图元的最小深度值小于针对所述区域的所述深度阈值的情况下,将针对所述区域的所述深度阈值更新为等于所述区域内的所接收图元的所述最小深度值。
19.根据权利要求7所述的分片单元,进一步包括存储器,
其中所述分片逻辑被配置为在将区片的多边形区域的所述深度阈值与针对所述集合中的至少一个所接收图元的深度值进行比较之前,从所述存储器读取针对所述区片的所述多边形区域的所述深度阈值;以及
其中所述深度阈值更新逻辑被配置为在针对所述多边形区域的所述深度阈值被更新的情况下将针对所述多边形区域的所述深度阈值存储在所述存储器中。
20.一种计算机可读存储介质,具有在其上被编码的计算机可读代码,所述代码当在计算机上运行时适于执行根据权利要求1至5中任一项所述的方法中的步骤。
21.一种计算机可读存储介质,具有在其上被编码的计算机可读代码,所述代码用于生成根据权利要求6至19中任一项所述的分片单元。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010808120.XA CN112001898A (zh) | 2014-06-17 | 2015-06-17 | 向图形处理***中的区片分配图元 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1410798.1A GB2524120B (en) | 2014-06-17 | 2014-06-17 | Assigning primitives to tiles in a graphics processing system |
GB1410798.1 | 2014-06-17 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010808120.XA Division CN112001898A (zh) | 2014-06-17 | 2015-06-17 | 向图形处理***中的区片分配图元 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105321140A CN105321140A (zh) | 2016-02-10 |
CN105321140B true CN105321140B (zh) | 2020-09-04 |
Family
ID=51266736
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010808120.XA Pending CN112001898A (zh) | 2014-06-17 | 2015-06-17 | 向图形处理***中的区片分配图元 |
CN201510338624.9A Active CN105321140B (zh) | 2014-06-17 | 2015-06-17 | 向图形处理***中的区片分配图元 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010808120.XA Pending CN112001898A (zh) | 2014-06-17 | 2015-06-17 | 向图形处理***中的区片分配图元 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9684995B2 (zh) |
CN (2) | CN112001898A (zh) |
DE (1) | DE102015109559A1 (zh) |
GB (1) | GB2524120B (zh) |
Families Citing this family (17)
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 | 北京像素软件科技股份有限公司 | 虚拟现实三维水体渲染中水体网格的处理方法 |
US10930086B2 (en) | 2016-11-01 | 2021-02-23 | Dg Holdings, Inc. | Comparative virtual asset adjustment systems and methods |
US10275941B2 (en) * | 2016-11-01 | 2019-04-30 | Dg Holdings, Inc. | Multi-layered depth and volume preservation of stacked meshes |
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 (en) | 2018-10-14 | 2021-08-18 | Bentley Systems, Incorporated | Dynamic frontend-driven generation of an hlod tree |
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 |
EP4345732A3 (en) | 2018-12-21 | 2024-06-05 | Imagination Technologies Limited | Primitive block generator for graphics processing systems |
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)
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 |
ATE383627T1 (de) | 2004-11-19 | 2008-01-15 | Ericsson Telefon Ab L M | 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 | 삼성전자 주식회사 | 그래픽스 프로세싱 유닛 |
-
2014
- 2014-06-17 GB GB1410798.1A patent/GB2524120B/en active Active
-
2015
- 2015-05-21 US US14/718,623 patent/US9684995B2/en active Active
- 2015-06-15 DE DE102015109559.9A patent/DE102015109559A1/de active Pending
- 2015-06-17 CN CN202010808120.XA patent/CN112001898A/zh active Pending
- 2015-06-17 CN CN201510338624.9A patent/CN105321140B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
GB2524120A (en) | 2015-09-16 |
DE102015109559A1 (de) | 2015-12-17 |
CN105321140A (zh) | 2016-02-10 |
GB201410798D0 (en) | 2014-07-30 |
CN112001898A (zh) | 2020-11-27 |
US9684995B2 (en) | 2017-06-20 |
US20150363969A1 (en) | 2015-12-17 |
GB2524120B (en) | 2016-03-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105184730B (zh) | 向图形处理***中的区片分配图元 | |
CN105321140B (zh) | 向图形处理***中的区片分配图元 | |
US11481952B2 (en) | Allocation of primitives to primitive blocks | |
CN108734624B (zh) | 包括多个处理级的图形处理流水线及其操作方法与介质 | |
US9558585B2 (en) | Hidden surface removal in graphics processing systems | |
KR102101834B1 (ko) | 영상 처리 장치 및 방법 | |
US11790480B2 (en) | Tiling a primitive in a graphics processing system by edge-specific testing of a subset of tiles in a rendering space | |
US10242482B2 (en) | Tiling a primitive in a graphics processing system | |
CN112116519A (zh) | 图形处理***中的粗略深度测试 | |
US9607390B2 (en) | Rasterization in graphics processing system | |
CN114723598A (zh) | 图形处理***和方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |