CN106067187B - 在图形处理系统中对基元分块 - Google Patents
在图形处理系统中对基元分块 Download PDFInfo
- Publication number
- CN106067187B CN106067187B CN201610162795.5A CN201610162795A CN106067187B CN 106067187 B CN106067187 B CN 106067187B CN 201610162795 A CN201610162795 A CN 201610162795A CN 106067187 B CN106067187 B CN 106067187B
- Authority
- CN
- China
- Prior art keywords
- tile
- tiles
- primitive
- subset
- edge
- 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
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- 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
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- 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
- 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/16—Indexing scheme for image data processing or generation, in general involving adaptation to the client's capabilities
-
- 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/12—Bounding box
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Image Generation (AREA)
Abstract
本申请涉及在图形处理系统中对基元分块。在基于图块的图形处理系统中,分块单元确定基元在渲染空间的哪些图块中,以使得图块中的基元可以被渲染。可以针对图块的子集执行分块测试,而非针对用于基元的边界框中的每个图块执行分块计算。然后针对图块的子集的分块测试的结果可以用来确定该基元是否在位于以该子集中的图块中的两个或更多个图块为边界的区域内的其他图块中。以这种方式,可以在不针对用于基元的边界框中的图块中的所有图块执行分块计算的情况下实现分块过程。减少分块计算的数目可以帮助提高图形处理系统渲染基元(在速度和功耗方面)的效率。
Description
技术领域
本申请的各实施例涉及在图形处理系统中对基元分块。
背景技术
图形处理系统被用来处理图形数据。例如,在计算系统上运行的应用可能需要渲染三维(3D)场景的图像以供向用户显示。应用可以将待渲染的图形数据发送到图形处理系统,其中图形数据描述待渲染的多个基元(primitive)。如在本领域中已知的,基元通常是凸多边形,诸如三角形或凸四边形,其中基元通常在图形处理系统的渲染空间中具有由其顶点的位置定义的其位置,并且可以具有由诸如颜色或纹理属性之类的其他属性定义的其外观。场景中的对象可以由一个或多个基元表示。随着图形处理系统进步,它们渲染复杂图像的能力提高,并且因此应用利用这一点并且提供更加复杂的图像以供图形处理系统渲染。这意味着图像中的基元的数目倾向于增加,所以图形处理系统高效处理基元的能力变得更加重要。
一种提高图形处理系统的效率的已知方式是以基于图块(tile)的方式渲染图像。以这种方式,基元将被渲染到其中的渲染空间被划分为多个图块,这多个图块然后可以被相互独立地渲染。为了渲染基元,渲染单元使用存储器来存储不同样本位置的中间结果(例如,深度值和基元标识符等)。如果渲染单元一次对一个图块进行操作,则大多数(或者全部)的该存储器可以位于“片上”,即,在图形处理单元(GPU)上,这在整个渲染空间被立即渲染的情况下可能不是可行的。因此,在基于图块的图形系统中,GPU与片外存储器(即,其可被称作“系统存储器”的)之间的读和写操作的数目与非基于图块的图形系统相比通常被减少。因为GPU与系统存储器之间的读和写操作通常极慢并且使用许多功率(与在GPU内执行的操作相比),因此基于图块的图形系统经常比非基于图块的图形系统更加高效(在功率和速度方面)。基于图块的图形系统包括用于对基元分块的分块单元。也就是说,分块单元针对基元确定该基元在渲染空间的多个图块中的哪些中。然后,当渲染单元渲染图块时,其可以被给予指示哪些基元应当用来渲染该图块的信息。
例如,图1示出了可以用来渲染3D场景的图像的基于图块的图形处理系统100的一些元件。图形处理系统100包括图形处理单元(GPU)102和两部分存储器1041和1042。注意,两部分存储器1041和1042可以是或者可以不是同一物理存储器的部分,并且存储器1041和1042两者可以位于“片外”,即,与GPU 102不在同一芯片上。存储器(1041和1042)与GPU 102之间的通信可以在系统100中的通信总线上发生。
GPU 102包括预处理模块106、分块单元108和渲染单元110。分块单元108包括处理逻辑112和数据存储(data store)114,并且渲染单元110包括隐藏表面移除(HSR)模块116和纹理化/阴影化模块118。图形处理系统100被布置为使得应用所提供的描述基元序列的图形数据在预处理模块106处被接收到。预处理模块106执行诸如包括裁剪和剔除的几何处理之类的功能以除去未落入可见视图的基元。预处理模块106也可以将基元投射到屏幕空间中。预处理模块106将基元输出到分块单元108。
分块单元108接收来自预处理模块106的基元并且确定在图形处理系统100的渲染空间的图块中的每个图块内存在这些基元中的哪些基元。基元可以位于渲染空间的图块中的一个或多个图块中。分块单元108通过创建用于图块的显示列表将基元指派给渲染空间的图块,其中用于图块的显示列表包括对在图块中存在的基元的指示(即,基元ID)。显示列表和基元被从分块单元108输出并被存储在存储器1041中。渲染单元从存储器1041取回用于图块的显示列表和与该图块有关的基元,并且HSR模块116执行隐藏表面除去从而除去在场景中隐藏的基元的片段。剩余片段被传递给纹理化/阴影化模块118,纹理化/阴影化模块118对片段执行纹理化和/或阴影化以确定可以被传递到存储器1042以供存储在帧缓冲器中的渲染的图像的像素颜色值。渲染单元110处理图块中的每个图块中的基元,并且当整个图像已被渲染并存储在存储器1042中时,图像可以被从图形处理系统100输出并且例如被显示在显示器上。在图1中示出的示例中,基于图块的图形处理系统100是延迟渲染系统,意味着渲染单元110在对基元片段执行纹理化和/或阴影化以渲染场景之前对基元片段执行隐藏表面除去。然而,在其他示例中,图形处理系统可能不是延迟渲染系统,从而使得在对基元执行隐藏表面除去之前对基元片段执行纹理化和/或阴影化。
图2示出了已被划分为图块204的8×12阵列的渲染空间202,其中第m行和第n列的图块被称作204mn。基元206被示出。分块单元108进行操作以确定基元206在哪些图块204中。如果基元206与图块204至少部分地重叠,则基元206在该图块204“中”。分块单元108通过寻找基元206的三个顶点的最小和最大x和y坐标并且根据这些坐标形成框208来确定边界框208。分块单元108从而可以确定基元206不位于不在边界框208中的任何图块204中。如果图块204与边界框208至少部分地重叠,则图块204在边界框208“中”。在一些示例中,可以按照图块分辨率确定边界框,由此可以增加边界框的尺寸以使得边界框的边缘落在图块边界上。在图2中,有点的图块(即,渲染空间202中的顶部行和底部行的图块、第一列和最后两列的图块)位于边界框208外部,因此,基于这点,分块单元108可以确定基元206不在那些图块中。在极简单的实现方式中,分块单元108可以仅指示基元在边界框208中的所有图块中。然而,这意味着基元被指示为在其实际上不在其中的一些图块中。这可能导致由于在存储器1041中存储不必要的基元和/或基元ID而引起的附加的存储器消耗,以及渲染单元110中的低效率,这是因为针对在其中基元是不可见的图块从存储器1041中读取基元并且对基元进行处理。因此,通常优选的是,分块单元108确定基元位于边界框208中的哪些图块中。
针对边界框208中的每个图块(例如,图2中的白色图块中的每个白色图块),可以执行分块计算以确定基元206是否在该图块中。例如,用来确定基元206是否在图块204中的分块计算可能包括针对基元的每个边缘的计算。例如,如在图3中示出的,表示定义基元206的边缘的边缘线(3021、3022和3023)的等式使用基元206的顶点(3041、3042和3043)的位置而被确定。然后,针对每个边缘线302,可以执行测试以通过将图块中的测试点的位置与边缘线302的等式相比较来确定图块204是在相应边缘线302内部还是外部。针对关于不同边缘的测试,图块中的测试点可以是不同的,即,测试点可以是特定于边缘的。例如,为了测试图块是否在边缘线3021内部,测试点在图块的左下中;为了测试图块是否在边缘线3022内部,测试点在图块的左上中;并且为了测试图块是否在边缘线3023内部,测试点在图块的右下中。如果确定图块在所有边缘线302内部,则确定基元在该图块中。然而,如果确定图块在任何边缘线302外部,则确定基元不在该图块中。
可以针对边界框208中的图块中的每个图块执行分块计算以便确定基元是否在相应图块中。对于基元的每个边缘,并且对于边界框中的每个图块,特定于边缘的测试点在图块中的位置与适当边缘线的等式的比较通常涉及执行一个或多个浮点运算。浮点运算执行起来是昂贵的(在时间和功耗方面)。这可能造成问题,特别是由于图像中的基元的数目倾向于增加,因为分块过程中涉及的浮点运算的数目可能变得大到足以显著地不利影响图形处理系统100的性能。因此,减少在分块过程中消耗的时间和功率通常将是有益的。
发明内容
提供这一发明内容而以简化形式对下面在具体实施方式中进一步描述的概念的选择进行介绍。这一发明内容并非意在标识所请求保护主题的关键特征或必要特征,也并非旨在用来对所请求保护主题的范围加以限制。
在这里描述了与在上面的背景技术部分中描述的现有技术示例相比可以减少为了对基元分块而执行的分块计算(例如,包括浮点运算)的数目的示例。这可以帮助提高图形处理系统渲染基元(例如,在速度和功率方面)的效率。
在这里描述了一种在图形处理系统中处理基元的方法,该方法包括对基元分块以确定该基元在渲染空间中的多个图块中的哪些图块中,所述对基元分块包括:针对图块的子集中的每个图块,执行分块测试以确定该基元是否在该图块中;以及使用针对子集中的图块中的两个或更多个图块的分块测试的结果来确定该基元是否在位于以子集中的图块中的两个或更多个图块为边界的区域内的至少一个其他图块中。
在这里描述了一种图形处理系统,其包括用于对基元分块以确定该基元在渲染空间中的多个图块中的哪些图块中的分块单元,该分块单元被配置为:针对图块的子集中的每个图块,执行分块测试以确定该基元是否在该图块中;以及使用针对子集中的图块中的两个或更多个图块的分块测试的结果来确定该基元是否在位于以子集中的图块中的两个或更多个图块为边界的区域内的至少一个其他图块中。
还可以提供计算机可读代码,当该代码在计算机上运行时其适于执行在这里描述的任意示例的方法的步骤。此外,可以提供用于生成根据在这里描述的任何示例的图形处理系统的计算机可读代码。计算机可读代码可以被编码在计算机可读存储介质上。
如对本领域技术人员将是显而易见的,以上特征可以被视情况组合并且可以与在这里描述的示例的任意方面进行组合。
附图说明
现在将参考附图详细描述示例,在附图中:
图1是图形处理系统的示意图;
图2示出了渲染空间中的图块中的基元;
图3图示了定义基元的边缘的边缘线;
图4a和图4b示出了图示了在图形处理系统中处理基元的第一方法的流程图;
图5a示出了渲染空间中的单个图块中的基元的示例;
图5b示出了渲染空间中的图块的行中的基元的示例;
图5c示出了其边界框已经被裁剪至渲染空间的边缘的三个基元;
图6示出了渲染空间中的2×2图块正方形中的三个图块中的基元。
图7a示出了渲染空间中的2×8图块长方形中的基元;
图7b示出了延伸超过包括4×8图块阵列的渲染空间的边缘的基元;
图8示出了图块中针对相应边缘取向的特定于边缘的测试点;
图9示出了渲染空间中的9×14图块长方形中的一些图块中的基元的示例;
图10示出了图示了在图形处理系统中处理基元的第二方法的流程图;
图11a至图11d图示了第二方法的分块处理的四个不同阶段;以及
图12是计算机系统的示意图。
附图例示了各种示例。本领域技术人员将会意识到的是,附图中所例示的要素边界(例如,方框、方框群组或者其它形状)表示边界的示例。可能的是,在一些示例中,一个要素可以被设计为多个要素或者多个要素可以被设计为一个要素。在适当的情况下,贯穿附图使用共同的参考标号来指示相似的特征。
具体实施方式
现在将经仅通过示例方式描述实施例。
在图1中示出的图形处理系统100可以用来实现在这里描述的示例的方法。如上所述,图形处理系统100是基于图块的延迟渲染图形处理系统,其包括GPU 102和两部分存储器1041和1042。如在上面提到的,两部分存储器1041和1042可以是或者可以不是同一物理存储器的部分,并且存储器1041和1042两者可以位于“片外”,即,与GPU 102不在同一芯片上。存储器(1041和1042)与GPU 102之间的通信可以在系统100中的通信总线上发生。GPU 102包括预处理模块106、分块单元108和渲染单元110。分块单元108包括处理逻辑112和数据存储114,并且渲染单元110包括隐藏表面除去(HSR)模块116和纹理化/阴影化模块118。
在操作中,图形处理系统100接收描述基元序列的(例如,来自应用)图形数据。预处理模块106执行诸如包括裁剪和剔除的几何处理之类的功能以除去未落入可见视图的基元。预处理模块106也可以将基元投射到屏幕空间中。预处理模块106将基元输出到分块单元108。
参考在图4a和图4b中示出的流程图,图形处理系统100可以如何处理基元的示例被描述。可以针对图块的子集执行分块测试,而非针对用于基元的边界框中的每个图块执行分块计算。然后针对图块的子集的分块测试的结果可以用来确定该基元是否在位于以该子集中的图块中的两个或更多个图块为边界的区域内的其他图块中。注意,“其他图块”不在对其执行分块测试的图块的子集中。以这种方式,可以在不针对用于基元的边界框中的图块中的所有图块执行分块计算的情况下实现分块过程。减少分块计算的数目可以帮助提高图形处理系统渲染基元(在速度和功耗方面)的效率。
在步骤S402中,分块单元108从预处理模块106接收基元。分块单元108的操作参考在图4a和图4b中示出的流程图被详细描述,但是概括地说分块单元108确定在图形处理系统100的渲染空间的图块中的每个图块内存在这些基元中的哪些基元。分块单元108的处理逻辑112执行在这里描述的分块单元108的操作,并且数据存储114存储分块过程的中间结果的数据,诸如分块计算的结果和部分填充的显示列表。处理逻辑112可以被实现在专门设计用于执行分块单元108的操作的专用硬件中。备选地,处理逻辑112可以通过在处理器上执行软件来实现,其中该软件被编写为使得当其被执行时其使得处理器执行分块单元108的操作。
分块单元108考虑第一基元。在步骤S404中,针对该基元确定边界框。在这里详细描述的示例中,边界框是轴对齐的边界框,即,它们与渲染空间中的图块的网格的轴对齐;但是在其他示例中,边界框可能不是轴对齐的,即,它们相对于图块的网格可能成角度。如果基元延伸超过渲染空间的边缘,则边界框被裁剪以使得其不延伸超过渲染空间的边缘。例如,边界框可以被裁剪以使得其具有在渲染空间的边缘上的边缘。边界框可以按照图块的分辨率而被确定以使得边界框的边缘在图块边界上(因为在这些示例中,边界框是轴对齐的)。如果是这种情况,则即使通过促使边界框边缘向内可以找到更接近的图块边界也将边界框的边缘向外延伸到下一图块边界。以这种方式,边界框被保守地确定以使得其包括基元所位于的图块中的所有图块。备选地,边界框可以按照比图块分辨率更精细的分辨率而被确定,例如,在图2中示出的边界框208不是按照图块分辨率。在这些示例中,如果图块与边界框至少部分地重叠,则该图块被确定为在该边界框中。
在步骤S406中,分块单元108确定边界框在x和y方向两者上是否延伸多于一个图块。如果不是这种情况(即,如果边界框在x和y方向中的任一个方向或者两个方向上延伸仅一个图块),那么,除非其是例外情况(例如,在下面描述的例外情况之一),否则基元将在边界框中的图块中的所有图块中。例如,图5a示出了基元504的一例,其位于仅一个单个图块502中。在渲染空间中存在未在图5a中示出的其他图块,但是基元504不与那些其他图块重叠。在这种情况下,图块502是边界框中仅有的图块,所以边界框在x方向或y方向上不延伸多于一个图块。显然的是,基元504在图块502中并且不在渲染空间中的其他图块中。因此,在这种情况下,为了确定基元504在哪一个或哪些图块中,分块单元108无需执行涉及用来将基元504的边缘线与图块中的测试点相比较的浮点运算的任何分块计算。因此,用于基元504的分块过程可以被极高效地执行。
类似地,图5b示出了位于一行图块5061、5062、5063和5064中的基元508的示例。在渲染空间中存在未在图5b中示出的其他图块,但是基元508不与那些其他图块重叠。基元508的边界框在x方向上延伸四个图块,但是在y方向上不延伸多于一个图块。在这种情况下,图块5061、5062、5063和5064是边界框中仅有的图块,并且显然的是,基元508在图块5061、5062、5063和5064中并且不在渲染空间的其他图块中。因此,在这种情况下,为了确定基元508在哪一个或哪些图块中,分块单元108无需执行涉及用来将基元508的边缘线与图块中的测试点相比较的浮点运算的任何分块计算。因此,基元508的分块过程可以被极高效地执行。
如果用于基元的边界框在x和y方向两者上不延伸多于一个图块,则方法从步骤S406转到步骤S408,在步骤S408中确定边界框是否为例外情况。在图5a和图5b中示出的示例不是意外情况。意外情况在以下情况时发生:
(i)用于基元的边界框已被根据渲染空间的边缘裁剪,并且边界框的裁剪后的边缘延伸多于一个图块;或者
(ii)用于基元的边界框已被在两个方向上裁剪。
例如,图5c示出了包括按照3×7布置方式布置并且在图5c中被标记为0至20的21个图块的渲染空间内的被表示为510、514和518的三个基元。基元510具有已被根据渲染空间的边缘裁剪的边界框512,并且边界框512延伸图块0、1、2、3、4和5的部分。因此边界框512在y方向(垂直方向)上不延伸多于一个图块,但是边界框512的裁剪后的边缘(边界框512的上边缘)在x方向(水平方向)上延伸多于一个图块,故边界框512是例外情况。可以见到,基元510不是在边界框512的图块中的所有图块中。在这一例外情况下,将对边界框512中的图块执行分块计算以便确定基元510在边界框512中的哪些图块中。因此,在诸如此的例外情况下,方法从步骤S408转到在下面被更详细描述的步骤S412。
作为另一示例,基元514具有已被根据渲染空间的边缘裁剪的边界框516,并且边界框516延伸图块8和15的部分。因此边界框516在x方向上不延伸多于一个图块,并且具体而言边界框516的裁剪后的边缘(边界框516的下边缘)不延伸多于一个图块(裁剪后的边缘仅在图块15中)。另外,边界框516未被在两个方向上裁剪。因此,边界框516根据在上面给出的规则不是意外情况。可以见到,基元514在边界框516的图块中的所有图块中。因此,无需对边界框516中的图块执行分块计算以便确定基元514在边界框516中的哪些图块中。因此,在诸如此的非例外情况下,方法从步骤S408转到在下面被更详细描述的步骤S410。注意,(如在上面参考图5a和图5b描述的示例中)未被裁剪的边界框不是例外情况,故在那些情况下方法从步骤S408转到步骤S410。
作为另一示例,基元518具有已被在两个方向上裁剪的边界框520。因此边界框520根据在上面给出的规则是意外情况。可以见到,基元518不在边界框520的图块中。因为这是例外情况,因此将对边界框520中的图块(图块20)执行分块计算以便确定基元518是否在边界框520的图块(图块20)中。因此,在这种情况下,方法从步骤S408转到步骤S412。
注意,在一些示例中,例外情况的检测和处理可以是可选的。如果例外的基元(例如,510、514或518)不被分离地对待则可能招致效率损失,这是因为例外的基元可能随后被添加到多于必需的图块的显示列表。然而,这不导致渲染错误,故其可能是可接受的。如果例外情况不被分离地处理,则步骤S408中涉及的处理可以被避免,代价是在比严格必需更多的显示列表中包括一些例外的基元。
对于渲染空间中的每个图块,在分块单元108处理基元的时,分块单元108创建显示列表,该显示列表可以被存储在例如存储114中。用于图块的显示列表包括指示哪些基元在该图块中的基元标识符。在步骤S410中,对于非例外情况,分块单元108将当前正被处理的基元的基元标识符添加到用于边界框中的一个或多个相应图块的一个或多个显示列表。例如,在图5a中示出的示例中,用于基元504的基元标识符将被添加到用于图块502的显示列表,但是不被添加到用于渲染空间中的其他图块的显示列表。类似地,在图5b中示出的示例中,用于基元508的基元标识符将被添加到用于图块5061、5062、5063和5064的显示列表,但是不被添加到用于渲染空间中的其他图块的显示列表。类似地,在图5c中示出的示例中,用于基元514的基元标识符将被添加到用于图块8和15的显示列表,但是不被添加到用于渲染空间中的其他图块的显示列表。以这种方式,可以在不如在上面提到对边缘等式执行分块计算的情况下极高效地对基元分块。注意,在一些测试中,发现普通场景中的超过70%的基元可以被以这种方式分块,而不对边缘等式执行分块计算。方法从步骤S410转到在下面被描述的步骤S430。
如果在步骤S406中确定边界框的确在x和y方向两者上延伸多于一个图块,则方法从步骤S406转到步骤S412。在步骤S412中,分块单元108标识基元的顶点所位于的图块,由此确定基元在标识的图块中。注意,基元的多于一个顶点可以在同一图块中。标识顶点所位于的图块是简单的,这是因为顶点位置已被用来确定边界框。步骤S412可以被高效地执行(在时间和功耗方面),而不执行用于确定基元是否在标识的图块中的另外的分块测试。例如,图6示出了基元604,其中基元604的边界框包括被表示为60211、60212、60221和60222的2×2图块组。图6中用阴影线示出的图块(图块60212、60221和60222)在步骤S412中被标识,这是因为它们各自包括基元604的顶点。因此分块单元108可以容易地确定基元在阴影线的图块中,而例如不对用于基元604的边缘等式执行分块计算。
在步骤S414中,基元标识符被添加到用于标识的图块的显示列表。
在步骤S416中,分块单元108确定边界框中是否存在更多待处理的图块。如果尚未确定基元是否在一个图块中,则该图块仍待处理。例如,如果边界框中的图块中的所有图块都包括基元的顶点,则已经确定基元在边界框中的图块中的所有图块中,故边界框中不存在更多待处理的图块。在这种情况下,方法从步骤S416转到步骤S430。然而,如果边界框中存在更多待处理的图块(即尚未针对其确定基元是否在该图块中的更多图块),则处理转到步骤S418。例如,参考图6,仍未确定基元604是否在图块60211中,故方法转到步骤S418。
在步骤S418中,针对图块的至少子集中的每个图块,如果尚未被确定,则分块单元108确定基元是否在该图块中。例如,在边界框包括多于四个图块的情况下,图块的子集可以包括在边界框的角落中的角图块。这种情况的示例在图7a中被示出,图7a示出了基元704,其具有包括图块702的2×8阵列的边界框。角图块在图7a中被用阴影线示出,并且被表示为70211、70218、70221和70228。
基元704的一个顶点在图块70211中,并且基元704的另一个顶点在图块70228中,故分块单元108已经确定基元704在角图块70211和70228中。在步骤S418中,分块单元108通过执行分块计算来确定基元704是否在图块70218和70221中。为了对用于图块的基元执行分块计算,针对基元的每个边缘,描述基元的边缘的边缘等式被用来确定图块中的特定于边缘的测试点是在边缘的内部还是外部。如果针对边缘中的任何边缘确定特定于相应边缘的测试点在边缘的外部,则基元被确定为在图块的外部。图块的测试点根据被测试的边缘的取向而异,这是因为如果基元的任何部分在图块的任何部分的内部则该基元应当被确定为在该图块内部。因此,图块中针对边缘的特定于边缘的测试点是图块中根据边缘的取向最有可能在边缘的内部的点。例如,图8示出了用于不同边缘取向的测试点。图8(a)示出了,对于向上倾斜的边缘(其中在边缘的外部的点在边缘下方和/或在边缘右边),特定于边缘的测试点804在图块802的左上角中(例如,图块802内的左上样本位置)。可以认识到,如果测试点804在边缘的外部,则图块802中的所有其他点也是如此。类似地,图8(b)示出了,对于向上倾斜的边缘(其中在边缘的外部的点在边缘上方和/或在边缘左边),特定于边缘的测试点808在图块806的右下角中(例如,图块806内的右下样本位置)。可以认识到,如果测试点808在边缘的外部,则图块806中的所有其他点也是如此。类似地,图8(c)示出了,对于向下倾斜的边缘(其中在边缘的外部的点在边缘下方和/或在边缘左边),特定于边缘的测试点812在图块810的右上角中(例如,图块810内的右上样本位置)。可以认识到,如果测试点812在边缘的外部,则图块810中的所有其他点也是如此。类似地,图8(d)示出了,对于向下倾斜的边缘(其中在边缘的外部的点在边缘上方和/或在边缘右边),特定于边缘的测试点816在图块814的左下角中(例如,图块814内的左下样本位置)。可以认识到,如果测试点816在边缘的外部,则图块814中的所有其他点也是如此。
因此,再次参考图7a,对于子集中的每个图块(例如,角图块70211、70218、70221和70228),分块测试已被执行以确定基元704是否在相应图块中。如上所述,分块测试可以包括确定基元704具有在图块中的一个或多个顶点,或者分块测试可以包括执行分块计算以确定基元是否在图块中。如果基元在图块中,则基元标识符被添加到用于该图块的适当显示列表。
在步骤S420中,分块单元108确定在边界框中是否存在更多待处理的图块。如果尚未确定基元是否在图块中,则该图块仍待处理。如果在边界框中不存在更多待处理的图块,则方法从步骤S420转到步骤S430。然而,如果在边界框中存在更多待处理的图块(即,尚未针对其确定基元是否在该图块中的更多图块),则方法转到步骤S422。例如,参考图7a,仍未确定基元704是否在不包括基元704的顶点的非角图块中,故方法转到步骤S422。
在步骤S422中,分块单元108分析已经针对其执行了分块测试的图块的子集。这一分析被执行以确定是否可以根据针对图块的子集中的两个或更多个图块的分块测试的结果来推断对边界框中的至少一个其他图块分块的结果,而不需要针对所述至少一个其他图块执行分块测试。在这里描述的示例中,基元已知是凸形的,所以可以根据针对图块的子集中的两个或更多个图块的分块测试的结果来正确地推断对边界框中的至少一个其他图块分块的结果。在一些示例中,所有基元可能已知是凸形的(例如,所有基元可以是三角形的),但是在一些其他示例中,传入的基元可能不一定是严格的凸形,并且在这些示例中方法可以涉及确定基元是否为凸形的,其中如果基元是凸形的则方法可以如在这里描述地被执行以基于对于图块的子集中的两个或更多个图块的分块结果来推断对于图块的分块结果;而如果基元不是凸形的,则其他方法可被用来对基元执行分块。
在步骤424中,如果分析指示其是可能的,则针对子集中的图块中的两个或更多个图块的分块测试的结果被用来确定基元是否在至少一个其他图块中。该至少一个其他图块不在针对其执行分块测试的图块的子集中。具体而言,至少一个其他图块位于以子集中的图块中的两个或更多个图块为边界的区域内。如果特定图块被来自子集的都具有相同分块测试结果的图块包围,则可以推断该特定图块也将具有相同结果。图块可以在一维上被“包围”,即,图块可以位于一行或一列的图块中的子集中的两个图块之间。也就是说,同一行或者同一列的图块中的子集中的两个图块可被用来推断用于该子集中的两个图块之间(即,以这两个图块为边界的区域中)的同一行或同一列的图块中的图块的分块结果。另外,图块可以在二维上被“包围”,即,图块可以位于以子集中的四个图块为边界的区域中。也就是说,渲染空间内按照长方形布置的四个图块可被用来推断用于以这四个图块为边界的区域中(即,在角落中具有这四个图块的长方形中)的图块的分块结果。注意,术语“长方形”包括“正方形”。
注意,虽然被包括基元的图块所包围的图块允许推断出该图块也包括该基元,但是仅基于图块被不包括基元的图块所包围的确定推断不出该图块不包括该基元。然而,当两个或更多个图块因为它们都在基元的同一边缘的外部而不包括该基元时,那么可以推断出它们所包围的任何图块也在该边缘的外部,并且因而也在基元的外部。因此,可以针对子集中不包括基元的图块确定根据边缘的结果。以这种方式,当图块被子集中不包括基元的两个或更多个图块包围时,可以检查那些周围图块在基元的同一边缘的外部,并且在那种情况下推断出被包围的图块也在基元的外部。然而,如果周围图块在基元的不同边缘的外部,则推断不出被包围的图块也在基元的外部。注意,当推断出图块包括基元时,该问题由于包括基元的事实而被简化,图块被确定为在所有边缘内部。因此,不需要基于确定子集中的周围图块包括基元来将根据边缘的结果用于推断图块包括该基元。
如果图块的子集包括边界框的角图块(如在图7a中),则如果针对图块的子集的分块测试的结果指示基元在边界框的所有角图块中(如在图7a中),则那些结果被用来确定基元(例如,图7a中的704)在边界框的所有图块中。以这种方式,在图7a中示出的示例中,针对图块中的十二个图块的分块测试的结果可以被推断出,而不需要专门针对那些图块中的每个图块执行分块测试。
类似地,在图7b中图示的示例示出了包括按照4×8网格布置的32个图块的渲染空间。大基元708在渲染空间中的所有图块706中。用于基元708的边界框将根据渲染空间的边缘而被裁剪。在这一示例中,分块单元确定基元708是否在图7b中用阴影线示出的角图块70611、70618、70641和70648中。这四个图块组成这一示例中的图块的子集。针对图块70611的分块测试涉及确定基元708的顶点在图块70611中,而针对图块70618、70641和70648的分块测试涉及基于如上所述的基元708的边缘等式来执行分块计算以确定基元708是否在相应的图块706中。通过分析针对四个角图块的分块测试的结果,分块单元108在这一示例中可以确定,因为基元在四个角图块中,则基元也在渲染空间中的所有其他图块中,而不需要针对渲染空间中的相应的其他图块执行分块计算。如上所述,如果基元被确定为在图块中,则基元标识符被添加到用于相应图块的显示列表。
方法继续进行到步骤S426,其中分块单元108确定边界框中是否存在更多待处理的图块。如果尚未确定基元是否在图块中,则该图块仍待处理。如果在边界框中不存在更多待处理的图块(如在图7a和图7b中示出的示例中一样),则方法从步骤S426转到步骤S430。然而,如果在边界框中存在更多待处理的图块(即,尚未针对其确定基元是否在该图块中的更多图块),则方法转到步骤S428。在步骤S428中,针对每个剩余图块(即,针对尚未针对其确定基元是否在该图块中的每个图块),分块计算被执行以确定基元是否在该图块中,并且如果是,则基元标识符被添加到用于该图块的显示列表。如上所述,针对特定图块的分块计算包括将用于基元的边缘的线等式与特定图块中的特定于边缘的测试点相比较。因此,在步骤S428之后,已经针对渲染空间中的所有图块确定了基元是否在该图块中,并且基元标识符已被相应地添加到用于相应图块的显示列表。方法然后转到步骤S430。
在步骤S430中,分块单元108确定在当前渲染中是否存在要分块的更多基元。每次渲染将很可能包括许多基元(例如,数千或者数百万的基元)。渲染例如可被执行以根据3维模型来生成将被显示在屏幕上或者将被用作其他渲染中的纹理的图像。如果存在要分块的更多基元,则方法转回步骤S404并且针对下一基元重复。一旦当前渲染中的所有基元已被分块,则方法将从步骤S430转到步骤S432,在步骤S432中用于图块的显示列表被从分块单元108输出并被存储在存储器1041中。如上所述,在这里描述的示例中,在显示列表正被创建的同时,它们可被存储在位于分块单元108内部的存储114中。在一些示例中,一旦用于渲染的所有基元已被分块,则显示列表是完整的并且它们被传递到片外存储器1041以用于存储在其中。在其他示例中,分块单元108可能不包括供在存储显示列表时使用的内部存储(诸如存储114),并且基元标识符在分块被执行时作为代替可以被直接写入到存储器1041中的显示列表。在一些另外的示例中,内部存储114可被实现在分块单元108中,但是内部存储114可能未大到足以立刻存储用于所有图块的所有显示列表。因此,内部存储114在分块被执行时可被用来收集分块结果,分块结果然后可以按照块(chunk)(或者“批(batch)”)而被写出到存储器1041。这可以在基元被写入到存储器1041中的不同显示列表时避免低效的存储器存取模式。
渲染单元110然后可以根据显示列表渲染每个图块中的基元。为了渲染用于图块的基元,在步骤S434中,渲染单元110从存储器1041取回用于该图块的适当显示列表。渲染单元110然后可以取回被显示列表指示为位于当前正被渲染的图块中的基元。这些基元可以被从存储器1041取回。渲染单元110然后渲染图块中的基元。在图1中示出的示例中,渲染单元110实现延迟渲染,由此隐藏表面除去在纹理化和/或阴影化之前被执行。因此,HSR模块116执行隐藏表面除去以由此除去在场景中被隐藏的基元的片段。剩余片段被传递到纹理化/阴影化模块118,纹理化/阴影化模块118对这些片段执行纹理化和/或阴影化以确定渲染的结果,例如,以确定经渲染图像的像素颜色值。在步骤S436中,渲染的结果被输出并且可以被传递到存储器1042,例如,以供存储在帧缓冲器中。渲染单元110处理每个图块中的基元,并且当整个图像已被渲染并存储在存储器1042中时,该图像可以被从图形处理系统100输出并且例如被显示在显示器上。注意,在其他示例中,渲染单元可能是非延迟渲染单元,由此可以在隐藏表面除去之前对基元执行纹理化和/或阴影化。
在上面描述的示例中,可以见到,通过执行分块测试来确定基元是否在图块的子集中,那些分块测试的结果可以被用来确定该基元是否在位于以子集中的一些图块为边界的区域内的其他图块中。在图7a和图7b中示出的示例示出了作为边界框中的角图块的图块的子集。在其他示例中,图块的子集可以是边界框内的不同图块。例如,在图块的子集中的子集之间可能存在规则的间隔。例如,图块的子集可以包括来自渲染空间中的多个N×M图块框中的每个图块框的相应图块,其中N和M是整数。图9示出了其中N=M=2的示例。也就是说,在图9中,对2×2图块网格执行分块测试以使得来自每个2×2图块框的一个图块在对其执行分块测试的图块的子集中。
图9示出了基元904,其中9×14的图块组在基元904的边界框中并且在图9中被示出。行编号(1至9)和列编号(1至14)在图9中被示出。基元904的顶点的位置被用来确定基元904在第一行的第十四个图块(图块T1,14)中、在第二行的第四个图块(图块T2,4)中并且在第九行的第一个图块(图块T9,1)中(在步骤S412中)。这三个图块在图9中用向下倾斜的阴影线示出。不需要针对这三个图块执行涉及将边缘等式与测试点相比较的分块计算。
在图9中,图块的子集中的图块被用向上倾斜的阴影线示出(除了第九行的第一个图块(图块T9,1)之外,其在子集中但是因为顶点位于该图块中而具有向下倾斜的阴影线),例如包括图块90211(图块T1,1)。子集中的图块包括来自边界框中的图块的第一、第三、第五、第七和第九行的第一个、第三个、第五个、第七个、第九个、第十一个和第十三个图块。可以认识到,由于基元904的顶点的位置,分块单元108已经确定基元在第九行的第一个图块(图块T9,1)中。对于子集中的其他图块,分块计算(在步骤S418中)被执行以确定基元904是否在这些图块中。如上所述通过将基元904的边缘等式与图块中的测试点相比较来执行这些分块计算。通过针对子集中的每个图块指示基元904是在该图块“内(in)”还是在该图块“外(out)”来在图9中示出对图块的子集执行的分块测试的结果。
针对图块的子集的分块测试的结果(包括根据边缘的结果,其如上所述供在推断图块是否不包括基元时使用)然后可以(在步骤S422中)被分析以确定是否存在在角落中具有来自图块的子集的图块的3×3的图块框,其中子集中的那些图块具有相同的分块测试结果。如果是这种情况,则3×3框中的剩余五个图块可以(在步骤S424中)被指派与子集中的相关图块相同的结果,而不对那五个图块执行特定分块计算。例如,在图9中示出的在边界框的左上角中的3×3的图块框(即,边界框的头三行中的头三个图块)在四个角中包括子集中的图块(图块T1,1、T1,3、T3,1和T3,3),其分块测试结果指示基元904在那些图块外部并且尤其指示基元904因为那些图块全部在基元904的同一边缘外部(例如,如在图9中示出在基元904的左边缘外部)而在那些块外部。因此,根据该图块的子集的分块结果可以推断出基元904在该3×3框中的在以子集中的四个图块为边界的区域中的其他五个图块(图块T1,2、T2,1、T2,2、T2,3和T3,2)的外部,而不对那五个图块执行任何进一步的分块测试。类似地,图9中示出的在边界框的第五至第七行和第三至第五列中的3×3的图块框在四个角中包括子集中的图块(图块T5,3、T5,5、T7,3和T7,5),针对其的分块测试结果指示基元904在那些图块内部。因此,可以根据用于图块的子集的分块结果来推断出基元904在该3×3框中的在以子集中的四个图块为边界的区域中的其他五个图块(图块T5,4、T6,3、T6,4、T6,5和T7,4)中,而不对那五个图块执行任何进一步的分块测试。
类似地,针对图块的子集的分块测试的结果可以(在步骤S422中)被分析以确定是否存在在线中(例如,在同一行或同一列中)的子集中的具有相同分块测试结果的两个图块。如果是这种情况,则子集中的那两个图块之间的其他一个或多个图块可以(在步骤S424中)被指派与子集中的相关图块相同的结果,而不对那其他一个或多个图块执行特定分块计算。例如,针对边界框的第三和第五行中的第一个图块(图块T3,1和T5,1)的分块测试指示基元904在那些图块的外部,并且指示图块T3,1和T5,1在基元904的同一边缘的外部。因此,根据图块的子集的分块结果可以推断出基元904在第四行中的第一个图块(图块T4,1)(其在以子集中的两个图块(图块T3,1和T5,1)为边界的区域中)的外部,而不对那个图块执行进一步的分块测试。类似地,针对边界框的第三行中的第七和第九个图块(图块T3,7和T3,9)的分块测试指示基元904在那些图块的内部。因此,根据图块的子集的分块结果可以推断出基元904在第三行中的第八个图块(图块T3,8)(其在以子集中的两个图块(图块T3,7和T3,9)为边界的区域中)中,而不对那个图块执行进一步的分块测试。
在一些示例中,步骤S422和S424可以被重复,以使得可以例如基于基元的顶点所位于的图块来实现对分块结果的进一步分析。这可以允许推断另外图块的分块结果,而不执行基于涉及边缘等式的比较的针对那些另外图块的特定分块计算。例如,在对图块的子集的分块测试的第一分析之后,已经推断出基元904在图9中示出的边界框的第二行中的第十一个图块(图块T2,11)内部。由于904的顶点之一的位置,也知道基元904在边界框的第二行中的第四个图块(图块T2,4)内部。因此,在进一步分析阶段中,可以推断出基元904在边界框的第二行中的第五至第十个图块(图块T2,5至T2,10)中,而不执行针对那些图块的分块计算。类似地,在进一步分析阶段中,可以推断出基元904在边界框的第四列中的第三和第四个图块(图块T3,4和T4,4)中,而不执行针对那些图块的分块计算。
根据子集中的图块的分块结果而推断出其分块结果的图块在图9中用点式阴影线示出。最浅的点式阴影指示基元904在图块的外部,而两类更深的点式阴影指示基元904在图块的内部。两个更深点式阴影中的更浅者指示基元904在第一分析之后被确定为在图块内部,并且两个更深点式阴影中的更深者指示基元904在进一步分析之后被确定为在图块内部。
如上所述,注意,当分块测试的结果被分析时,如果分块测试指示基元在子集中的一组图块的外部,则基元在图块的外部的原因应当被考虑在内,即,图块在基元的哪个边缘的外部。对于将用来推断基元在另一图块的外部的子集中的多个图块的结果,则子集中的所有多个图块应当在基元的同一边缘的外部,否则可能错误地推断出基元在另一图块的外部。
在步骤S428中,对于图9中的剩余图块(即,没有阴影或者影线的那些图块),使用边缘等式和图块内的测试点来执行分块计算,以使得基元904的分块完整。在图9中示出的示例中,边界框包括126个图块。针对这些图块中的68个图块执行基于边缘等式的分块计算;针对这些图块中的3个图块的分块测试涉及标识基元904的顶点在哪些图块中;并且针对其他55个图块,根据针对边界框中的其他图块的分块测试的结果来推断出关于基元904是否在图块中的确定。在上面的背景技术部分中描述的先前系统中,将针对边界框中的每个图块(即,针对在图9中示出的示例中的126个图块)执行分块计算。因此,在这一示例中,在这里描述的方法避免对图块中的58个图块(46%的图块)执行分块计算。因为分块计算涉及浮点运算并且花费极大的处理资源和时间来实施,因此针对其执行分块计算的图块的数目的减少将显著地提高这一示例中的分块过程(在速度和功耗方面)的效率。
子集中包括的图块的数目可以被改变。具体而言,基元的分块可以以分层方式实现,以使得在第一(粗)阶段中针对图块的子集执行分块测试并且这些分块测试的结果被用来以相对粗的分辨率确定基元是否在至少一个其他图块中,其中图块的子集包括来自渲染空间中的多个N1×M1图块框中的每个图块框的相应图块。然后在第二(细)阶段中,针对图块的子集执行分块测试并且这些分块测试的结果被用来以相对细的分辨率确定基元是否在至少一个其他图块中,其中图块的子集包括来自渲染空间中的多个N2×M2图块框中的每个图块框的相应图块,其中N1>N2和/或M1>M2。例如,在第一阶段中,N1和M1可以等于4以使得图块的子集包括来自渲染空间中的多个4×4图块框中的每个图块框的相应图块,然后在第二阶段中,N2和M2可以等于2以使得图块的子集包括来自渲染空间中的多个2×2图块框中的每个图块框的相应图块。以这种方式,如有可能,在第一阶段中在边界框中的大区域中的所有图块具有相同分块结果的情况下可以针对那些区域推断分块结果,而不执行许多分块计算,然后在第二阶段中在边界框中的剩余更小区域中的所有图块具有相同分块结果的情况下可以针对那些区域推断分块结果。在另一示例中,在第一阶段中,只有边界框中的角图块可以被包括在图块的子集中,然后在第二阶段中,来自多个N2×M2图块框中的每个图块框的相应图块可以被包括在图块的子集中。另外,在其他示例中,可以以不同分辨率实现多于两个阶段,即,在层次结构中可以存在多于两个阶段。
参考图10和图11a至图11d,描述了对基元分块的另一种方式,其可以除了上面描述的分块方法之外或者作为上面描述的分块方法的备选而由分块单元108实现。
参考在图10中示出的流程图,在步骤S1002中,分块单元108从预处理模块106接收基元。分块单元108考虑第一基元。在步骤S1004中,例如以如上所述的相同方式针对该基元确定边界框,并且如果该基元延伸超过渲染空间的边缘则边界框被裁剪以使得其不超过渲染空间的边缘。如上所述,如果图块与边界框至少部分地重叠,则该图块被确定为在边界框中。基元被确定为不在不与边界框至少部分地重叠的图块中。
在参考图10和图11a至图11d描述的方法中,边界框中的图块线被同时处理,其中这些线可以是行或者列。如果在边界框中存在比图块行更多的图块列,则将线设置为行可以是有益的;而如果在边界框中存在比图块列更多的图块行,则将线设置为列可以是有益的。因此,图块线被选择为在边界框中具有最低数目的图块线的维度上。这是有益的,因为为了对基元分块而执行的计算的数目随着边界框中的线的数目线性地缩放,故将线的维度选择为最小值可以减少在对基元分块时所涉及的处理的数量。在步骤S1006中,分块单元108确定在边界框中是否存在比图块行更多的图块列。如果在边界框中存在比图块行更多的图块列,则在步骤S1008中分块单元108确定将按照图块行来处理边界框。备选地,如果在边界框中不存在比图块行更多的图块列,则在步骤S1010中分块单元108确定将按照图块列来处理边界框。
作为参考在图10中示出的流程图详细描述的方法的广阔概述,对于边界框中的图块线之间的一个或多个图块边界中的每个图块边界,分块单元108确定图块边界与基元的边缘的交叉点,并且使用所确定的交叉点来确定基元在边界框中的哪些图块中。
图11a至图11d示出了基元1102的示例,其具有包括6×4图块组的边界框。在这一示例中,在边界框中存在比图块列更多的图块行,故在步骤S1010中分块单元108确定将按照图块列来处理边界框。在下面描述的示例中,按照图块列来处理边界框,但是应当认识到,在其他示例中可以按照图块行来处理边界框,如果这是适当的话。
边界框中的第一图块列被考虑,其中第一和第二图块列之间的图块边界1104被考虑。在步骤S1012中,对于边界框中的第一图块列,分块单元确定图块边界1104与定义基元1102的边缘的边缘线的初始交叉点。基元1102中的边缘中的两个边缘穿过图块边界1104,而对于基元的其他边缘,定义边缘的边缘线1106在位于基元1102外部的位置处与图块边界1104交叉。初始交叉点在图11a中在点11081、11082和11083处被示出。除非基元1102的边缘之一与图块边界1104平行,那么将存在三个初始交叉点1108,其中的两个(图11a中示出的示例中的11082和11083)将位于基元1102的边缘上并且对确定基元1102在哪些图块中是有用的,而另一个交叉点(11081)将不位于基元1102的边缘上并且对确定基元1102在哪些图块中将不是有用的。
在步骤S1014中,分块单元108通过标识哪些初始交叉点位于基元1102的边缘上来确定哪些初始交叉点将被用作图块边界1104与基元1102的边缘的交叉点。这可以通过考虑沿着图块边界1104前进并且针对初始交叉点的任一侧(例如,初始交叉点的紧接着的任一侧)的点确定这些点是在基元1102的内部还是在其外部来完成。如果对于初始交叉点的任一侧的两个点而言确定是不同的,则初始交叉点是基元的边缘上的交叉点(例如,点11082和11083),而如果对于初始交叉点的任一侧的两个点而言确定是相同的,则初始交叉点不是基元的边缘上的交叉点(例如,点11081)。因此,在图11a中示出的示例中,交叉点11082和11083被标识为在基元1102的边缘上,并且这些标识的交叉点被用来确定基元位于边界框的第一列中的哪些图块中。标识的交叉点可以被存储在存储114中以供在用来处理随后列的随后迭代中使用,如在下面提供的描述中显而易见的。所存储的可以是交叉点的样本位置或者只是交叉点所发生于的图块。方法然后从步骤S1014转到步骤S1016和S1018两者。
在步骤S1016中,分块单元108确定图块的列中的起始图块1112s。这通过寻找列中的在其边界上包括在步骤S1014中标识的所确定的交叉点之一(11082或11083)或者包括基元1102的顶点的第一个图块(例如,从边界框的顶部开始并且向下工作)来完成。图块1112s被确定为起始图块,这是因为其在其边界上具有交叉点11082。在步骤S1018中,分块单元108确定图块的列中的结束图块1112e。这通过寻找列中的在其边界上包括在步骤S1014中标识的所确定的交叉点之一(11082或11083)或者包括基元1102的顶点的最后一个图块(例如,从边界框的顶部开始并且向下工作)来完成。图块1112e被确定为结束图块,这是因为其在其边界上具有交叉点11083并且其还具有顶点1110。
在步骤S1020中,分块单元108确定基元在列中位于起始图块1112s和结束图块1112e之间并且包括起始图块1112s和结束图块1112e的图块中。第一列中位于起始图块和结束图块(1112s和1112e)之间并且包括起始图块和结束图块的这些图块被用阴影线示出,并且可见基元1102在有阴影线的图块中而非在边界框的第一列的其他图块中。
在步骤1022中,用于基元1102的基元标识符被添加到用于针对其确定基元在那些图块(例如,图11a中示出的有阴影线的图块)中的那些图块的显示列表。
在步骤S1024中,分块单元108确定在边界框中是否存在更多的图块行(这一示例中的列)要处理。如果存在,则方法转到步骤S1026以使得下一线(例如,列)可以被处理。在步骤S1026中,分块单元108确定下一线是否为边界框中的最后线。如果下一线不是边界框中的最后线,则方法从步骤S1026转到步骤S1012以使得下一线可以被处理。
例如,在图11b中示出的示例中,第二图块列可以被处理。以这种方式,第二图块列与第三图块列之间的图块边界1114被用来确定初始交叉点11181、11182和11183(在步骤S1012中)。初始交叉点11181位于边缘线1116穿过图块边界1114的点处,但是这一初始交叉点11181不在基元1102的边缘上。然而,其他初始交叉点11182和11183在基元1102的边缘上,故在步骤S1014中初始交叉点11182和11183(而非11181)被标识为位于基元的边缘上的交叉点。这些标识的交叉点可以被存储以供在随后迭代中使用。
为了寻找第二列的起始图块和结束图块,交叉点11082和11083(其是在之前迭代中确定的并且被存储以供在这一迭代中使用)的位置、交叉点11182和11183的位置以及顶点1020的位置被使用。起始图块被确定为是图块1122s(在步骤S1016中),这是因为这一图块包括顶点1120。结束图块被确定为是图块1122e(在步骤S1018中),这是因为这一图块包括交叉点11083和11183。在图11b中用阴影线示出的图块在步骤S1020中被确定为在基元1102中,这是因为它们在起始图块1122s和结束图块1122e之间(并且包括起始图块1122s和结束图块1122e)。因此,用于基元1102的基元标识符被添加到图11b中用阴影线示出的用于图块的显示列表(在步骤S1022中)。
方法针对下一列(第三列)重复,如在图11c中示出的。因为第三列不是边界框中的最后列,因此方法重复回到步骤S1012并且第三列被处理。以这种方式,第三图块列与第四图块列之间的图块边界1124被用来确定初始交叉点11281、11282和11283(在步骤S1012中)。初始交叉点11281位于边缘线1126穿过图块边界1124的点处,但是这一初始交叉点11281不在基元1102的边缘上。然而,其他初始交叉点11282和11283在基元1102的边缘上,故在步骤S1014中初始交叉点11282和11283(而非11281)被标识为位于基元的边缘上的交叉点。这些标识的交叉点可以被存储以供在随后迭代中使用。
为了寻找第三列的起始图块和结束图块,交叉点11182和11183(其是在之前迭代中确定的并且被存储以供在这一迭代中使用)的位置以及交叉点11282和11283的位置被使用。起始图块被确定为是图块1130s(在步骤S1016中),这是因为这一图块包括交叉点11182。结束图块被确定为是图块1130e(在步骤S1018中),这是因为这一图块包括交叉点11283。在图11c中用阴影线示出的图块在步骤S1020中被确定为在基元1102中,这是因为它们在起始图块1130s和结束图块1130e之间(并且包括起始图块1130s和结束图块1130e)。因此,用于基元1102的基元标识符被添加到用于图11c中用阴影线示出的图块的显示列表(在步骤S1022中)。
方法针对下一列(第四列)重复,如在图11d中示出的。因为第四列是边界框中的最后列,因此方法从步骤S1026转到步骤S1016和S1018,而不执行步骤S1012或步骤S1014。这是因为在边界框中的最后列右边的图块边界是边界框的边缘,故基元将不会穿过这一图块边界。为了寻找最后列的起始图块和结束图块,交叉点11282和11283(其是在之前迭代中确定的并且被存储以供在这一迭代中使用)的位置以及顶点1032的位置被使用。起始图块被确定为是图块1134s(在步骤S1016中),这是因为这一图块包括交叉点11282。结束图块被确定为是图块1134e(在步骤S1018中),这是因为这一图块包括交叉点11283和顶点1032。在图11d中用阴影线示出的图块在步骤S1020中被确定为在基元1102中,这是因为它们在起始图块1134s和结束图块1134e之间(并且包括起始图块1134s和结束图块1134e)。因此,用于基元1102的基元标识符被添加到用于图11d中用阴影线示出的图块的显示列表(在步骤S1022中)。
然后,在步骤S1024中,确定在边界框中没有更多的图块列要处理,故方法转到步骤S1028。在步骤S1028中,用于图块的显示列表被从分块单元108输出并被存储在存储器1041中。如上所述,在这里描述的示例中,在显示列表正被创建的同时,它们可被存储在位于分块单元108内部的存储114中。在一些示例中,一旦用于渲染的所有基元已被分块,则显示列表是完整的并且它们被传递到片外存储器1041以用于存储在其中。如上所述,在其他示例中,分块单元108可能不使用内部存储(诸如存储114)来存储显示列表,并且基元标识符在分块被执行时作为代替可以被直接写入到存储器1041中的显示列表。另外,在一些另外示例中,内部存储114可被实现在分块单元108中,但是内部存储114可能未大到足以立刻存储用于所有图块的所有显示列表。因此,内部存储114在分块被执行时可被用来收集分块结果,分块结果然后可以按照块(或者“批”)而被写出到存储器1041。这可以在基元被写入到存储器1041中的不同显示列表时避免低效的存储器访问模式。
渲染单元110然后可以根据显示列表渲染每个图块中的基元。为了渲染用于图块的基元,在步骤S1030中,渲染单元110从存储器1041取回用于该图块的显示列表。渲染单元110然后可以取回被显示列表指示为位于当前正被渲染的图块中的基元。这些基元可以被从存储器1041取回。渲染单元110然后渲染图块中的基元。在图1中示出的示例中,渲染单元110实现延迟渲染,由此隐藏表面除去被在纹理化和/或阴影化之前执行,但是在其他示例中非延迟渲染可被实施。在步骤S1032中,渲染的结果被输出并且可以被传递到存储器1042,例如以供存储在帧缓冲器中。渲染单元110处理每个图块中的基元并且当整个图像已被渲染并存储在存储器1042中时,该图像可以被从图形处理系统100输出并且例如被显示在显示器上。
在一些情形下,例如对于具有大边界框的基元,参考图10和图11a至图11d描述的方法可以提供与参考图4至图9描述的示例相比更加高效的对基元分块的方式。相比之下,在其他情形下,例如对于具有小边界框的基元,参考图4至图9描述的方法可以提供与参考图10和图11a至图11d描述的示例相比更加高效的对基元分块的方式。具体而言,在参考图10和图11a至图11d描述的方法中执行的计算的数目与边界框的最小尺寸成线性比例(例如,与边界框中的图块列的数目和图块行的数目的最小值成线性比例)。这是因为对于除最后线之外的每条线(例如,图块的列),无论每条线中有多少图块都执行相同数目的计算。对于最后线,更少的计算可被执行,如根据上面的描述是显而易见的。例如,如在图11a至图11d中示出的示例中针对包括6×4图块组(即,6行和4列)的边界框将执行的,针对包括20×4图块组(即,20行和4列)的边界框将执行相同的计算。这与参考图4至图9描述的方法形成对比,在这些方法中针对分块执行的计算的数目与边界框中的图块的数目近似成比例,例如与边界框的面积近似成比例,边界框的面积随着边界框的最小维度的平方近似地缩放。因此,参考图10和图11a至图11d描述的方法对于处理具有大边界框的基元特别有用,尤其对于处理具有在一个维度上比在另一个维度上显著更长的边界框的基元特别有用。
因此,在一些实施例中,分块单元108可能能够以两种不同方式实现分块方法:(i)方法1,即如参考在图4a和图4b中示出的流程图描述的,以及(ii)方法2,即如参考在图10中示出的流程图描述的。方法的前两个步骤是相同的,即,分块单元接收基元并且确定用于基元的边界框。分块单元108然后可以分析边界框以确定是执行方法1还是方法2。例如,如果边界框的最大维度超过图块的阈值数目则分块单元108可以继续进行方法2,而如果边界框的最大维度不超过图块的阈值数目则分块单元108可以继续进行方法1。在方法1和方法2之间进行选择的其他方式在不同示例中可被使用,例如基于边界框的面积。以这种方式,对基元分块的方式对于不同基元而言可以是不同的,并且具体而言可以被选择为适合基元的尺寸和/或形状以由此提供对基元的高效分块。
在图4a、4b和10中示出的流程图的方法步骤可以被实现为分块单元108的处理逻辑112内的逻辑块。逻辑块可以以硬件或者软件或者其组合来实现。例如,如果逻辑块以硬件实现,则它们可以被形成为晶体管和适合用于执行如在这里描述的逻辑块的期望功能的其他硬件组件的特定布置。相比之下,如果逻辑块以软件实现,则它们可以包括计算机指令集,这些计算机指令集可以被存储在存储器中并且可以被提供给处理逻辑112以供在其上执行从而提供逻辑块的功能。
上面描述的图形处理系统100可以被实现在计算机系统中。例如,图12示出了包括GPU 102、CPU 1202和存储器1204的计算机系统,其中存储器1204可以包括对于上面描述的存储器1041和1042的存储器块。计算机系统还包括其他设备1206,诸如显示器1208、扬声器1210、麦克风1212和相机1214。计算机系统的组件可以经由通信总线1216相互通信。用于应用的计算机程序代码可以被存储在存储器1204中,并且可以例如被在CPU 1202上执行。如果应用需要渲染3D场景的图像,则描述基元的图形数据可以被发送到GPU 102,并且GPU102可以如上所述渲染场景。
通常,上面描述的任意功能、方法、技术或组件(例如,分块单元108及其组件)可以使用软件、固件、硬件(例如,固定逻辑电路)或者这些实施方式的任意组合以模块来实施。术语“模块”、“功能”、“组件”、“块”、“单元”和“逻辑”在这里被用来总体地表示软件、固件、硬件或者其任意组合。
在软件实施方式的情况下,模块、功能、组件、单元或逻辑表示当在处理器(例如,一个或多个CPU)上执行时执行指定的任务的程序代码。在一个示例中,所描述的方法可以由利用存储在计算机可读介质上的机器可读形式的软件进行配置的计算机来执行。一种这样的计算机可读介质的配置是信号承载介质,并且因此被配置为诸如经由网络而向计算设备传送指令(例如,作为载波)。计算机可读介质也可以被配置为非瞬态计算机可读存储介质并且因此并不是信号承载介质。计算机可读存储介质的示例包括随机访问存储器(RAM)、只读存储器(ROM)、光盘、闪存、硬盘存储器以及可以使用磁、光和其它技术来存储指令和其它数据并且可以被机器访问的其它存储器设备。
软件可以采用包括用于将计算机配置为执行所描述的方法的组成部分的计算机程序代码的计算机程序的形式,或者采用包括适用于在程序在计算机上运行时并且在计算机程序可以体现于计算机可读介质上的情况下执行在这里描述的任意方法的所有步骤的计算机程序代码装置的计算机程序的形式。程序代码可以存储在一个或多个计算机可读介质上。在这里描述的技术的特征是独立于平台的,这意味着这些技术可以在具有各种处理器的各种计算平台上实施。
本领域技术人员还将认识到,所有或部分的功能、技术或方法可以由专用电路、专用集成电路、可编程逻辑阵列、现场可编程门阵列等来实施。例如,模块、功能、组件、单元或逻辑(例如,在倾斜单元108的处理逻辑112内实现的逻辑块)可以包括电路形式的硬件。这样的电路可以包括晶体管和/或制造过程中可用的其它硬件元件。这样的晶体管和/或其它元件可以被用来形成实施和/或包含存储器的电路或结构,作为示例,诸如寄存器、触发电路或锁存器、诸如布尔运算之类的逻辑运算器、诸如加法器、乘法器或移位器之类的数学运算器以及互连。这样的元件可以作为定制电路或标准单元库、宏或者其它抽象级别来提供。这样的元件可以以具体布置形式进行互连。模块、功能、组件、单元或逻辑(例如,处理逻辑112内的逻辑块)可以包括固定功能的电路以及可以被编程为执行一种或多种功能的电路;这样的编程可以通过固件或软件更新来提供或者通过控制机制来提供。在一个示例中,硬件逻辑具有实施固定功能操作、状态机或处理的电路。
还旨在涵盖“描述”或定义实施上面描述的模块、功能、组件、单元或逻辑的硬件的配置的软件,诸如用于设计集成电路或者用于配置可编程芯片以执行期望功能的HDL(硬件描述语言)软件。就是说,可以提供上面编码有用于生成被配置为执行在这里描述的任意方法的图形处理系统或者用于生成包括在这里描述的任意装置的图形处理系统的计算机可读程序代码的计算机可读存储介质。就是说,计算机系统可以被配置为根据电路元件的定义和定义用于组合那些电路元件的规则的数据来生成数字电路的表示,其中非瞬态计算机可读存储介质可能已经在其上存储了当在这种计算机系统处执行时使计算机系统生成例如包括如在这里的示例中描述的瓦片单元的图形处理系统的处理器可执行指令。
术语“处理器”和“计算机”在这里被用来指代具有处理能力而使得其能够执行指令的任意设备或其部分,或者能够执行全部或部分功能或方法或者它们的任意组合的专用电路。
虽然已经以特定于结构特征和/或方法逻辑动作的语言对主题进行了描述,但是将会明白,在所附权利要求中定义的主题不一定局限于上面描述的具体特征或动作。相反,上面描述的具体特征和动作作为实施权利要求的示例形式被公开。将会明白,上面描述的益处和优势可能与一个示例有关或者可能与若干示例有关。
如对本领域技术人员将是显而易见的,在这里给出的任意范围或值可以进行扩展或改变而并不失所寻求的效果。在这里描述的方法的步骤可以以任意适当次序执行或者在适当的情况下同时执行。上面描述的任意示例的各方面可以与所描述的任意其它示例的各方面进行组合以形成另外的示例而并不失所寻求的效果。
Claims (20)
1.一种在图形处理系统中处理基元的方法,所述方法包括对所述基元分块以确定所述基元在渲染空间中的多个图块中的哪些图块中,所述对所述基元分块包括:
针对所述渲染空间的图块的子集中的每个图块,执行分块测试以确定所述基元是否在该图块中;以及
根据针对所述子集中的所述图块中的两个或更多个图块的所述分块测试的结果来推断所述基元是否在位于以所述子集中的所述图块中的所述两个或更多个图块为边界的区域内的至少一个其他图块中,而无需执行针对所述至少一个其他图块的分块测试。
2.根据权利要求1所述的方法,其中针对所述子集中的图块中的一个或多个图块中的每个图块,所述执行分块测试包括执行分块计算以确定所述基元是否在该图块中。
3.根据权利要求2所述的方法,其中针对图块执行分块计算包括,针对所述基元的边缘,使用描述所述基元的该边缘的边缘等式来确定所述图块中的特定于边缘的测试点是在该边缘的内部还是在该边缘的外部,其中如果针对边缘中的任意边缘确定特定于相应边缘的测试点在该边缘的外部,则所述基元被确定为在所述图块的外部。
4.根据权利要求3所述的方法,其中图块中针对边缘的特定于边缘的测试点是该图块中根据该边缘的取向而最有可能在该边缘的内部的点。
5.根据权利要求1至4中任一项所述的方法,其中针对所述子集中的图块中的一个或多个图块中的每个图块,所述执行分块测试包括确定所述基元在该图块中具有一个或多个顶点。
6.根据权利要求1至4中任一项所述的方法,其中所述对所述基元分块还包括:
确定用于所述基元的边界框,其中图块的所述子集不包括不与所述边界框至少部分地重叠的图块。
7.根据权利要求6所述的方法,其中所述边界框被裁剪以使得所述边界框不延伸超过到所述渲染空间的边缘。
8.根据权利要求6所述的方法,其中图块的所述子集包括在所述边界框的角落中的角图块,并且其中如果针对图块的所述子集的所述分块测试的所述结果指示所述基元在所述边界框的所有角图块中,则那些结果被用来确定所述基元在所述边界框的所有图块中。
9.根据权利要求1至4中任一项所述的方法,其中在图块的所述子集中的图块之间存在规则的间隔。
10.根据权利要求1至4中任一项所述的方法,其中图块的所述子集包括来自所述渲染空间中的多个N×M图块框中的每个图块框的相应图块,其中N和M是整数。
11.根据权利要求10所述的方法,其中N=M=2。
12.根据权利要求10所述的方法,其中所述对所述基元分块以分层方式被实现以使得针对图块的子集执行分块测试和使用所述分块测试的所述结果来确定所述基元是否在至少一个其他图块中的步骤利用包括来自所述渲染空间中的多个N1×M1图块框中的每个图块框的相应图块的图块的子集以相对粗的分辨率而被第一次执行,并且随后利用包括来自所述渲染空间中的多个N2×M2图块框中的每个图块框的相应图块的图块的子集以相对细的分辨率而被第二次执行,其中N1>N2和/或M1>M2。
13.根据权利要求1至4中任一项所述的方法,其中所述子集中的图块中的所述两个或更多个图块包括:
所述渲染空间中的同一图块行或者同一图块列中的两个图块;或者
所述渲染空间内以长方形布置的四个图块。
14.根据权利要求1至4中任一项所述的方法,还包括如果确定所述基元在特定图块中,则将所述基元的基元标识符包括在用于该特定图块的显示列表中。
15.根据权利要求14所述的方法,还包括,针对所述渲染空间中的图块中的每个图块,根据用于该图块的显示列表来渲染该图块中的基元。
16.一种图形处理系统,所述图形处理系统包括分块单元,所述分块单元用于对基元分块以确定所述基元在渲染空间中的多个图块中的哪些图块中,所述分块单元被配置为:
针对所述渲染空间的图块的子集中的每个图块,执行分块测试以确定所述基元是否在该图块中;以及
根据针对所述子集中的所述图块中的两个或更多个图块的所述分块测试的结果来推断所述基元是否在位于以所述子集中的所述图块中的所述两个或更多个图块为边界的区域内的至少一个其他图块中,而无需执行针对所述至少一个其他图块的分块测试。
17.根据权利要求16所述的图形处理系统,其中所述分块单元被配置为通过执行分块计算以确定所述基元是否在图块中来针对所述子集中的图块中的一个或多个图块中的每个图块执行相应分块测试;并且
其中所述分块单元被配置为:通过针对所述基元的边缘使用描述所述基元的该边缘的边缘等式确定图块中的特定于边缘的测试点是在该边缘的内部还是在该边缘的外部,来针对所述图块执行所述分块计算,其中如果针对边缘中的任意边缘确定特定于相应边缘的测试点在该边缘的外部,则所述基元被确定为在所述图块的外部。
18.根据权利要求16或17所述的图形处理系统,其中图块的所述子集包括来自所述渲染空间中的多个N×M图块框中的每个图块框的相应图块,其中N和M是整数。
19.一种计算机可读存储介质,具有在其上编码的计算机可读代码,所述计算机可读代码适于当所述代码在计算机上被运行时,执行根据权利要求1至15中任一项所述的方法。
20.一种计算机可读存储介质,具有在其上编码的计算机可读代码,所述计算机可读代码用于生成根据权利要求16至18中任一项所述的图形处理系统。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111208300.5A CN113936081A (zh) | 2015-04-22 | 2016-03-21 | 在图形处理系统中对基元分块 |
CN202111214162.1A CN113947654A (zh) | 2015-04-22 | 2016-03-21 | 在图形处理系统中对基元分块 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1506865.3 | 2015-04-22 | ||
GB1506865.3A GB2537661B (en) | 2015-04-22 | 2015-04-22 | Tiling a primitive in a graphics processing system |
Related Child Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111208300.5A Division CN113936081A (zh) | 2015-04-22 | 2016-03-21 | 在图形处理系统中对基元分块 |
CN202111214162.1A Division CN113947654A (zh) | 2015-04-22 | 2016-03-21 | 在图形处理系统中对基元分块 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106067187A CN106067187A (zh) | 2016-11-02 |
CN106067187B true CN106067187B (zh) | 2021-11-30 |
Family
ID=53299014
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610162795.5A Active CN106067187B (zh) | 2015-04-22 | 2016-03-21 | 在图形处理系统中对基元分块 |
CN202111214162.1A Pending CN113947654A (zh) | 2015-04-22 | 2016-03-21 | 在图形处理系统中对基元分块 |
CN202111208300.5A Pending CN113936081A (zh) | 2015-04-22 | 2016-03-21 | 在图形处理系统中对基元分块 |
Family Applications After (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111214162.1A Pending CN113947654A (zh) | 2015-04-22 | 2016-03-21 | 在图形处理系统中对基元分块 |
CN202111208300.5A Pending CN113936081A (zh) | 2015-04-22 | 2016-03-21 | 在图形处理系统中对基元分块 |
Country Status (4)
Country | Link |
---|---|
US (6) | US10282807B2 (zh) |
EP (2) | EP3086290B1 (zh) |
CN (3) | CN106067187B (zh) |
GB (1) | GB2537661B (zh) |
Families Citing this family (6)
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 |
GB2570172B (en) | 2018-06-29 | 2020-02-12 | Imagination Tech Ltd | Conservative Rasterization Using Gradients |
GB2591802B (en) | 2020-02-07 | 2022-03-23 | Imagination Tech Ltd | Graphics processing method and system for rendering items of geometry based on their size |
GB2591803B (en) | 2020-02-07 | 2022-02-23 | Imagination Tech Ltd | Graphics processing method and system for rendering items of geometry based on their size |
US11321928B2 (en) * | 2020-05-14 | 2022-05-03 | Qualcomm Incorporated | Methods and apparatus for atlas management of augmented reality content |
US11361400B1 (en) * | 2021-05-06 | 2022-06-14 | Arm Limited | Full tile primitives in tile-based graphics processing |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6437780B1 (en) * | 1999-03-17 | 2002-08-20 | Nvidia Us Investment Company | Method for determining tiles in a computer display that are covered by a graphics primitive |
CN102270351A (zh) * | 2011-03-17 | 2011-12-07 | 长沙景嘉微电子有限公司 | 基于分块渲染的gpu中线段分块技术的实现 |
CN103310409A (zh) * | 2013-06-26 | 2013-09-18 | 济南大学 | 一种Tile-based渲染架构GPU的三角形快速分块方法 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6128415A (en) | 1996-09-06 | 2000-10-03 | Polaroid Corporation | Device profiles for use in a digital image processing system |
US6424345B1 (en) * | 1999-10-14 | 2002-07-23 | Ati International Srl | Binsorter triangle insertion optimization |
US6819321B1 (en) | 2000-03-31 | 2004-11-16 | Intel Corporation | Method and apparatus for processing 2D operations in a tiled graphics architecture |
GB0307095D0 (en) | 2003-03-27 | 2003-04-30 | Imagination Tech Ltd | Improvements to a tiling system for 3d rendered graphics |
TWI348651B (en) | 2006-06-09 | 2011-09-11 | Via Tech Inc | A system for reducing bandwidth requirements for transferring graphics data and its related method |
US8059119B2 (en) * | 2007-12-05 | 2011-11-15 | Stmicroelectronics S.R.L. | Method for detecting border tiles or border pixels of a primitive for tile-based rendering |
US8237710B1 (en) | 2009-08-28 | 2012-08-07 | Adobe Systems Incorporated | Methods and apparatus for fill rule evaluation over a tessellation |
US8669999B2 (en) * | 2009-10-15 | 2014-03-11 | Nvidia Corporation | Alpha-to-coverage value determination using virtual samples |
KR20120065589A (ko) * | 2010-12-13 | 2012-06-21 | 삼성전자주식회사 | 저전력을 위한 타일 비닝 장치 및 방법 |
US20120280992A1 (en) | 2011-05-02 | 2012-11-08 | Shebanow Michael C | Grid walk sampling |
US9633458B2 (en) * | 2012-01-23 | 2017-04-25 | Nvidia Corporation | Method and system for reducing a polygon bounding box |
CN103310640B (zh) | 2013-05-28 | 2015-01-28 | 哈尔滨工业大学 | 一种面向机动车流的十字交叉口交通预信号控制方法 |
-
2015
- 2015-04-22 GB GB1506865.3A patent/GB2537661B/en active Active
-
2016
- 2016-02-01 EP EP16153697.4A patent/EP3086290B1/en active Active
- 2016-02-01 EP EP18153046.0A patent/EP3333806B8/en active Active
- 2016-03-21 CN CN201610162795.5A patent/CN106067187B/zh active Active
- 2016-03-21 CN CN202111214162.1A patent/CN113947654A/zh active Pending
- 2016-03-21 CN CN202111208300.5A patent/CN113936081A/zh active Pending
- 2016-04-22 US US15/135,751 patent/US10282807B2/en active Active
-
2019
- 2019-03-27 US US16/366,762 patent/US10497088B2/en active Active
- 2019-10-29 US US16/667,691 patent/US10748240B2/en active Active
-
2020
- 2020-07-15 US US16/930,191 patent/US11257181B2/en active Active
-
2022
- 2022-01-28 US US17/587,730 patent/US11790480B2/en active Active
-
2023
- 2023-10-16 US US18/380,625 patent/US20240037693A1/en active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6437780B1 (en) * | 1999-03-17 | 2002-08-20 | Nvidia Us Investment Company | Method for determining tiles in a computer display that are covered by a graphics primitive |
CN102270351A (zh) * | 2011-03-17 | 2011-12-07 | 长沙景嘉微电子有限公司 | 基于分块渲染的gpu中线段分块技术的实现 |
CN103310409A (zh) * | 2013-06-26 | 2013-09-18 | 济南大学 | 一种Tile-based渲染架构GPU的三角形快速分块方法 |
Also Published As
Publication number | Publication date |
---|---|
US20190220947A1 (en) | 2019-07-18 |
EP3086290A1 (en) | 2016-10-26 |
GB201506865D0 (en) | 2015-06-03 |
US11257181B2 (en) | 2022-02-22 |
EP3333806B8 (en) | 2020-05-13 |
US10497088B2 (en) | 2019-12-03 |
US20220148125A1 (en) | 2022-05-12 |
US20240037693A1 (en) | 2024-02-01 |
US20200065935A1 (en) | 2020-02-27 |
US10748240B2 (en) | 2020-08-18 |
EP3086290B1 (en) | 2018-04-04 |
US11790480B2 (en) | 2023-10-17 |
CN113936081A (zh) | 2022-01-14 |
CN113947654A (zh) | 2022-01-18 |
GB2537661B (en) | 2018-09-26 |
US20200342565A1 (en) | 2020-10-29 |
CN106067187A (zh) | 2016-11-02 |
US10282807B2 (en) | 2019-05-07 |
EP3333806B1 (en) | 2020-04-01 |
EP3333806A1 (en) | 2018-06-13 |
US20160314556A1 (en) | 2016-10-27 |
GB2537661A (en) | 2016-10-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106067187B (zh) | 在图形处理系统中对基元分块 | |
CN106067188B (zh) | 在图形处理系统中对基元进行图块化 | |
US11410385B2 (en) | Generation of a control stream for a tile | |
US20240112311A1 (en) | Graphics processing systems and methods | |
GB2537660A (en) | Tiling a primitive in a graphics processing system | |
GB2564271A (en) | Tiling a primitive in a graphics processing system |
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 |