掌桥专利:专业的专利平台
掌桥专利
首页

在图形处理系统中对基元进行图块化

文献发布时间:2023-06-19 11:44:10


在图形处理系统中对基元进行图块化

本申请是申请日为2016年4月6日、申请号为201610211411.4、发明名称为“在图形处理系统中对基元进行图块化”的中国发明专利申请的分案申请。

技术领域

本公开涉及在图形处理系统中对基元进行图块化。

背景技术

图形处理系统被用于处理图形数据。例如,运行在计算系统上的应用可能需要渲染三维(3D)场景的图像以用于显示给用户。应用可以将图形数据发送到图形处理系统以被渲染,其中图形数据描述要被渲染的多个基元。如本领域中已知的,基元通常是凸多边形,诸如三角形或凸四边形,其中基元通常具有其由其顶点的位置限定的在图形处理系统的渲染空间中的位置,并且可以具有其由诸如颜色或纹理属性的其他属性限定的外观。场景中的对象可以由一个或多个基元表示。随着图形处理系统发展,它们渲染复杂的图像的能力改善,并且因此应用利用这个并向图形处理系统提供更复杂的图像以供渲染。这意味着图像中的基元的数目倾向于增加,因此图形处理系统高效地处理基元的能力变得更重要。

改善图形处理系统的效率的一个已知方式是要以基于图块的方式渲染图像。以这种方式,基元要被渲染到其中的渲染空间被划分成多个图块,图块之后可以彼此独立地被渲染。为了渲染基元,渲染单元使用存储器来存储针对不同样本位置的中间结果(例如深度值和基元标识符等)。如果渲染单元一次在一个图块上进行操作,则这一存储器中的大部分(或全部)可以位于“芯片上”,即位于图形处理单元(GPU)上,这在整个渲染空间同时被渲染时可能是不可能的。因此,在基于图块的图形系统中,在GPU与芯片外存储器(即其可以被称为“系统存储器”)之间的读操作和写操作的数目通常相较于非基于图块的图形系统得到减少。由于在GPU与系统存储器之间的读操作和写操作通常非常慢并且使用大量功率(相较于在GPU内执行的操作),基于图块的图形系统比非基于图块的图形系统常常是更高效的(在功率和速度方面)。基于图块的图形系统包括用于对基元进行图块化的图块化单元。也就是说,图块化单元针对基元确定基元处于渲染空间的多个图块中的哪些图块中。之后,当渲染单元渲染图块时,可以给出指示哪些基元应当被用于渲染图块的信息。

例如,图1示出了可以被用于渲染3D场景的图像的基于图块的图形处理系统100的一些元件。图形处理系统100包括图形处理单元(GPU)102和存储器的两个部分104

GPU 102包括预处理模块106、图块化单元108和渲染单元110。图块化单元108包括处理逻辑112和数据存储114,并且渲染单元110包括隐藏面消除(HSR)模块116和纹理化/阴影化模块118。图像处理系统100被布置使得在预处理模块106处接收描述由应用提供的基元的序列的图形数据。预处理模块106执行诸如包括剪裁和剔除的几何处理的功能,以消除未落入可见视图中的基元。预处理模块106还可以将基元投射到屏幕空间中。预处理模块106将基元输出到图块化单元108。

图块化单元108从预处理模块106接收基元,并确定基元中的哪些基元存在于图形处理系统100的渲染空间的图块中的每个图块内。基元可以处于渲染空间的图块中的一个或多个图块中。图块化单元108通过创建针对图块的显示列表来将基元分配到渲染空间的图块,其中针对图块的显示列表包括存在于图块中的基元的指示(即基元ID)。显示列表和基元从图块化单元108被输出并被存储在存储器104

图2示出了渲染空间202的示例,渲染空间202已经被划分成图块204的8x12阵列,其中第m行和第n列中的图块被称为204

针对边界框208中的每个图块(例如,图2中的白色图块中的每个白色图块),可以执行图块化计算以确定基元206是否处于图块中。例如,用于确定基元206是否处于图块204中的图块化计算可以包括针对基元的每个边缘的计算。例如,如图3所示,表示限定基元206的边缘的边缘线(302

可以针对边界框208中的图块中的每个图块执行图块化计算,以便确定基元是否处于相应的图块中。针对基元的每个边缘,并且针对边界框中的每个图块,图块中的边缘特定测试点的位置与恰当的边缘线的方程的比较通常涉及执行一个或多个浮点运算。浮点运算执行起来代价高(在时间和功耗方面)。这可能造成问题,特别是由于图像中的基元的数目增加的倾向,因为在图块化过程中涉及的浮点运算的数目可能变得足够大以显著地不利地影响图形处理系统100的性能。因此,通常将有益的是,减少在图块化过程中消耗的时间和功率。

发明内容

提供本发明内容从而以简化的形式介绍下面在具体实施方式中进一步描述的概念选择。本发明内容不旨在标识要求保护的主题的关键特征或必要特征,也不旨在用于限制要求保护的主题的范围。

本文中描述了其中可以相较于在以上的背景技术部分中描述的现有技术示例减少用于对基元进行图块化执行的图块化计算(例如,涉及浮点运算)的数目的示例。这可以帮助(例如在速度和功率方面)改善用于渲染基元的图形处理系统的效率。

本文中描述了在图形处理系统中处理基元的方法,方法包括对基元进行图块化以确定基元处于渲染空间的多个图块中的哪些图块中,所述对基元进行图块化包括:确定针对基元的边界框;针对在边界框中的图块的线之间的至少一个图块边界中的每个图块边界,确定图块边界与基元的边缘的交叉点;以及使用所确定的交叉点来确定基元处于边界框中的图块中的哪些图块中。

本文中描述了图形处理系统,其包括用于对基元进行图块化以确定基元处于渲染空间的多个图块中的哪些图块中的图块化单元,图块化单元被配置为:确定针对基元的边界框;针对在边界框中的图块的线之间的至少一个图块边界中的每个图块边界,确定图块边界与基元的边缘的交叉点;以及使用所确定的交叉点来确定基元处于边界框中的图块中的哪些图块中。

可以提供计算机可读代码,当代码运行在计算机上时计算机可读代码适于执行本文中描述的示例中的任何示例的方法的步骤。另外,可以提供计算机可读代码,用于生成根据本文中描述的示例中的任何示例的图形处理系统。计算机可读代码可以被编码在计算机可读存储介质上。

如对于技术人员而言将显而易见的,以上特征可以在适当的情况下被组合,并且可以与本文中描述的示例的方面中的任何方面进行组合。

附图说明

现在将参考附图详细描述示例,在附图中:

图1是图形处理系统的示意图;

图2示出渲染空间的图块中的基元;

图3图示限定基元的边缘的边缘线;

图4a和4b示出了图示在图形处理系统中处理基元的第一方法的流程图;

图5a示出了渲染空间的单个图块中的基元的示例;

图5b示出了渲染空间的图块的行中的基元的示例;

图5c示出了针对其边界框已经被剪裁到渲染空间的边缘的三个基元;

图6示出了渲染空间的图块的2x2方形的三个图块中的基元;

图7a示出了渲染空间的图块的2x8矩形中的基元;

图7b示出了延伸到包括图块的4x8阵列的渲染空间的边缘以外的基元;

图8示出了图块中的针对相应的边缘定向的边缘特定测试点;

图9示出了渲染空间的图块的9x14矩形中的一些图块中的基元的示例;

图10示出了图示在图形处理系统中处理基元的第二方法的流程图;

图11a到11d图示了第二方法的图块化过程的四个不同阶段;并且

图12是计算机系统的示意图。

附图图示了各种示例。技术人员将认识到附图中的图示的元件边界(例如框、框的组或者其他形状)表示边界的一个示例。可以的是,在一些示例中,一个元件可以被设计为多个元件,或者多个元件可以被设计为一个元件。在适当的情况下,贯穿附图使用共同的附图标记来指示相似的特征。

具体实施方式

现在将仅通过示例的方式来描述实施例。

图1中示出的图形处理系统100可以被用于实施本文中描述的示例的方法。如以上所描述的,图形处理系统100是基于图块的延迟渲染图形处理系统,其包括GPU 102和存储器的两个部分104

在操作时,图形处理系统100(例如从应用)接收描述基元的序列的图形数据。预处理模块106执行诸如包括剪裁和剔除的几何处理的功能,以消除未落入可见视图中的基元。预处理模块106还可以将基元投射到屏幕空间中。预处理模块106将基元输出到图块化单元108。

参考图4a和4b中示出的流程图,描述了图形处理系统100可以如何处理基元的示例。不是针对基元的边界框中的每个图块执行图块化计算,可以针对图块的子集执行图块化测试。之后针对图块的子集的图块化测试的结果可以被用于确定基元是否处于被定位在由子集的图块中的两个或更多个图块界定的区域内的其他图块中。要指出,“其他图块”没有处于针对其执行图块化测试的图块的子集中。以这种方式,可以在不执行针对基元的边界框中的所有图块的图块化计算的情况下实施图块化过程。减少图块化计算的数目可以帮助(在速度和功耗方面)改善用于渲染基元的图形处理系统的效率。

在步骤S402中,图块化单元108从预处理模块106接收基元。参考图4a和4b中示出的流程图详细描述图块化单元108的操作,但是概括地说图块化单元108确定基元中的哪些基元存在于图形处理系统100的渲染空间的图块中的每个图块内。图块化单元108的处理逻辑112执行本文中描述的图块化单元108的操作,并且数据存储114存储图块化过程的中间结果的数据,诸如图块化计算的结果和部分填充的显示列表。处理逻辑112可以被实施在被专门设计用于执行图块化单元108的操作的专用硬件中。备选地,处理逻辑112可以通过在处理器上执行软件来实施,其中软件被编写使得当其被执行时其使处理器执行图块化单元108的操作。

图块化单元108考虑第一基元。在步骤S404中,确定针对基元的边界框。在本文中详细描述的示例中,边界框是轴对齐的边界框,即它们与渲染空间的图块的网格的轴对齐;但是在其他示例中,边界框可以不是轴对齐的,即它们可以相对于图块的网格成角度。如果基元延伸到渲染空间的边缘以外,则边界框被剪裁使得其不延伸到渲染空间的边缘以外。例如,边界框可以被剪裁使得其具有在渲染空间的边缘上的边缘。边界框可以以图块的分辨率来确定,使得边界框的边缘处于图块边界上(因为在这些示例中,边界框是轴对齐的)。如果是这种情况,则边界框的边缘被向外延伸到下一图块边界,即使较近的图块边界可以通过将边界框边缘向内引入来找到。以这种方式,边界框被保守地确定使得其包括基元位于其中的所有图块。备选地,边界框可以以比图块分辨率更精细的分辨率来确定,例如图2中示出的边界框208不是以图块分辨率。在这些示例中,在图块与边界框至少部分地重叠的情况下,图块被确定为在边界框中。

在步骤S406中,图块化单元108确定边界框是否在x方向和y方向两者上延伸在多于一个图块上。如果不是这样的情况(即如果边界框在x方向和y方向中的任一者或两者上延伸在仅仅一个图块上),则除非其是例外情况(例如下面描述的例外情况之一),基元将处于边界框中的所有图块中。例如,图5a示出位于只一个单个图块502中的基元504的示例。在渲染空间中存在未示出在图5a中的其他图块,但是基元504与那些其他图块不重叠。在这种情况下,图块502是边界框中的仅有图块,因此边界框没有在x方向或y方向上延伸在多于一个图块上。显而易见,基元504处于图块502中并且没有处于渲染空间的其他图块中。因此,在这种情况下,为了确定基元504处于哪个(哪些)图块中,图块化单元108不需要执行涉及将基元504的边缘线与图块中的测试点进行比较的浮点运算的任何图块化计算。因此,针对基元504的图块化过程可以非常高效地被执行。

类似地,图5b示出基元508的示例,基元508位于图块506

如果针对基元的边界框没有在x方向和y方向两者上延伸在多于一个图块上,则方法从步骤S406传递到步骤S408,在步骤S408中确定边界框是否是例外情况。图5a和5b中示出的示例不是例外情况。在如下情况时例外情况出现:

(i)针对基元的边界框已经被剪裁到渲染空间的边缘,并且边界框的经剪裁的边缘延伸在多于一个图块上;或者

(ii)针对基元的边界框已经在两个方向上被剪裁。

例如,图5c示出了渲染空间内的三个基元,其被表示为510、514和518,渲染空间包括以3x7的布置而布置并且在图5c中被标记为0到20的21个图块。基元510具有已经被剪裁到渲染空间的边缘的边界框512,并且边界框512延伸在图块0、1、2、3、4和5的部分上。因此,边界框512在y方向(竖直方向)上没有延伸在多于一个图块上,但是边界框512的经剪裁的边缘(边界框512的顶部边缘)在x方向(水平方向)上延伸在多于一个图块上,因此边界框512是例外情况。可以看到,基元510没有处于边界框512中的所有图块中。在这一例外情况下,要在边界框512中的图块上执行图块化计算,以便确定基元510处于边界框512的哪些图块中。因此,在诸如这种的例外情况下,方法从步骤S408传递到步骤S412,下面更详细地描述步骤S412。

作为另一示例,基元514具有已经被剪裁到渲染空间的边缘的边界框516,并且边界框516延伸在图块8和15的部分上。因此,边界框516在x方向上没有延伸在多于一个图块上,并且具体地边界框516的经剪裁的边缘(边界框516的底部边缘)没有延伸在多于一个图块上(经剪裁的边缘仅仅处于图块15中)。另外,边界框516没有在两个方向上被剪裁。因此,边界框516不是根据以上给出的规则的例外情况。可以看到,基元514处于边界框516中的所有图块中。因此,不需要在边界框516中的图块上执行图块化计算,以便确定基元514处于边界框516的哪些图块中。因此,在诸如这种的非例外情况下,方法从步骤S408传递到步骤S410,下面更详细地描述步骤S410。要指出,未被剪裁的边界框(如在以上参考图5a和5b描述的示例中)不是例外情况,因此在那些情况下方法从步骤S408传递到步骤S410。

作为另一示例,基元518具有已经在两个方向上被剪裁的边界框520。因此,边界框520是根据以上给出的规则的例外情况。可以看到,基元518没有处于边界框520的图块中。由于这是例外情况,要在边界框520中的图块(图块20)上执行图块化计算,以便确定基元518是否处于边界框520的图块(图块20)中。因此,在这种情况下,方法从步骤S408传递到步骤S412。

要指出,在一些示例中,例外情况的检测和处理可以是可选的。在没有单独地对待例外基元(例如,基元510、514或518)的情况下可能招致效率损失,因为例外基元之后可以被添加到多于需要的图块的显示列表。然而,这不会导致渲染错误,因此其可以是可接受的。如果没有单独地处理例外情况,则可以避免步骤S408中涉及的处理,这以在多于严格需要的显示列表中包括一些例外基元为代价。

针对渲染空间中的每个图块,图块化单元108创建显示列表,显示列表可以被存储在例如存储114中,同时图块化单元108处理基元。针对图块的显示列表包括指示基元中的哪些基元处于该图块中的基元标识符。在步骤S410中,针对非例外情况,图块化单元108将当前被处理的基元的基元标识符添加到针对边界框中的(多个)相应图块的(多个)显示列表。例如,在图5a中示出的示例中,针对基元504的基元标识符将被添加到针对图块502的显示列表,但是不被添加到针对渲染空间中的其他图块的显示列表。类似地,在图5b中示出的示例中,针对基元508的基元标识符将被添加到针对图块506

如果在步骤S406中确定边界框没有在x方向和y方向两者上延伸在多于一个图块上,则方法从步骤S406传递到步骤S412。在步骤S412中,图块化单元108标识基元的顶点位于其中的图块,由此确定基元处于所标识的图块中。要指出,基元的顶点中的多于一个顶点可以处于同一图块中。易于标识顶点位于其中的图块,因为顶点位置已经被用于确定边界框。步骤S412可以在不执行用于确定基元是否处于所标识的图块中的其他图块化测试的情况下高效地(在时间和功耗方面)被执行。例如,图6示出基元604,其中基元604的边界框包括被表示为602

在步骤S414中,将基元标识符添加到针对所标识的图块的显示列表。

在步骤S416中,图块化单元108确定在边界框中是否存在更多要处理的图块。在尚未确定基元是否处于图块中的情况下,该图块仍然要被处理。例如,如果边界框的所有图块包括基元的顶点,则已经确定基元处于边界框的所有图块中,因此在边界框中不存在更多要处理的图块。在这种情况下,方法从步骤S416传递到步骤S430。然而,如果在边界框中存在更多要处理的图块(即,针对其尚未确定基元是否处于图块中的更多图块),则方法传递到步骤S418。例如,参考图6,仍然没有确定基元604是否处于图块602

在步骤S418中,针对图块的至少子集中的每个图块,如果其还没有被确定,则图块化单元108确定基元是否处于该图块中。例如,在边界框包括多于四个图块的情况下,图块的子集可以包括角落图块,角落图块在边界框的角落。这个的示例被示出在图7a中,图7a示出了具有包括图块702的2x8阵列的边界框的基元704。角落图块用影线被示出在图7a中,并且被表示为702

基元704的顶点处于图块702

因此,再次参考图7a,针对子集中的每个图块(例如,角落图块702

在步骤S420中,图块化单元108确定在边界框中是否存在更多要处理的图块。在尚未确定基元是否处于图块中的情况下,该图块仍然要被处理。如果在边界框中不存在更多要处理的图块,则方法从步骤S420传递到步骤S430。然而,如果在边界框中存在更多要处理的图块(即,针对其尚未确定基元是否处于图块中的更多图块),则方法传递到步骤S422。例如,参考图7a,仍然没有确定基元704是否处于不包括基元704的顶点的非角落图块中,因此方法传递到步骤S422。

在步骤S422中,图块化单元108分析针对其已经执行图块化测试的图块的子集。这一分析被执行以确定对边界框中的至少一个其他图块进行图块化的结果是否可以从针对图块的子集的两个或更多个图块的图块化测试的结果来推出,而无需执行针对所述至少一个其他图块的图块化测试。在本文中描述的示例中,基元已知是凸的,使得对边界框中的至少一个图块进行图块化的结果可以从针对图块的子集的两个或更多个图块的图块化测试的结果来正确地推出。在一些示例中,所有基元可以已知为凸的(例如所有基元可以是三角形),但是在一些其他示例中,传入的基元可以不一定是严格凸的,并且在这些示例中方法可以涉及确定基元是否是凸的,其中如果基元是凸的,则方法可以如本文中描述的被执行,以基于针对图块的子集的两个或更多个图块的图块化结果来推出针对图块的图块化结果;然而如果基元不是凸的,则其他方法可以被用于执行在基元上的图块化。

在步骤S424中,如果分析指示这是可能的,则针对子集的图块中的两个或更多个图块的图块化测试的结果被用于确定基元是否处于至少一个其他图块中。至少一个其他图块没有处于针对其执行图块化测试的图块的子集中。具体地,至少一个其他图块位于由子集的图块中的两个或更多个图块界定的区域内。如果特定图块由来自全部具有相同的图块化测试结果的子集的图块包围,则可以推出特定图块也将具有相同结果。图块可以在一个维度上“被包围”,即图块可以位于图块的行或列中的子集的两个图块之间。也就是说,图块的相同行或列中的子集的两个图块可以被用于推出针对在图块的该相同行或列中的在子集的两个图块之间(即在由子集的两个图块界定的区域中)的图块的图块化结果。另外,图块可以在两个维度上“被包围”,即图块可以位于由子集的四个图块界定的区域中。也就是说,以矩形被布置在渲染空间内的四个图块可以被用于推出针对由那四个图块界定的区域中(即在具有角落中的那四个图块的矩形中)的图块的图块化结果。要指出,术语“矩形”包括“方形”。

要指出,虽然由包括基元的图块包围的图块允许推出该图块也包括基元,不会仅仅基于图块由不包括基元的图块包围的确定来推出图块不包括基元。然而,当两个或更多个图块不包括基元时,因为它们两者都在基元的相同边缘外部,则可以推出它们包围的任何图块也在该边缘外部,并且因此也在基元外部。因此,可以确定针对不包括基元的子集的图块的按边缘结果。以这种方式,当图块由不包括基元的子集的两个或更多个图块包围时,可以检查那些包围图块在基元的相同边缘的外部,并且在那种情况下推出所包围的图块也在基元的外部。然而,如果包围图块在基元的不同边缘的外部,则不会推出所包围的图块也在基元的外部。要指出,当推出图块包括基元时,问题通过以下事实来简化:为了包括基元,图块被确定为在所有边缘的内部。因此,不需要使用按边缘结果以用于基于确定子集的包围图块包括基元来推出图块包括基元。

如果图块的子集包括边界框的角落图块(如图7a中),则在针对图块的子集的图块化测试的结果指示基元处于边界框的所有角落图块中的情况下(如图7a中),则那些结果被用于确定基元(例如,图7a中的704)处于边界框的所有图块中。以这种方式,在图7a中示出的示例中,针对图块中的十二个图块的图块化测试的结果可以在无需执行专门针对那些图块中的每个图块的图块化测试的情况下推出。

类似地,图7b中图示的示例示出了包括以4x8的网格布置的32个图块的渲染空间。大的基元708处于渲染空间的所有图块706中。针对基元708的边界框将被剪裁到渲染空间的边缘。在该示例中,图块化单元确定基元708是否处于角落图块706

方法继续到步骤S426,在步骤S426中图块化单元108确定在边界框中是否存在更多要处理的图块。在尚未确定基元是否处于图块中的情况下,该图块仍然要被处理。如果在边界框中不存在更多要处理的图块(如图7a和7b中示出的示例中的情况),则方法从步骤S426传递到步骤S430。然而,如果在边界框中存在更多要处理的图块(即,针对其尚未确定基元是否处于图块中的更多图块),则方法传递到步骤S428。在步骤S428中,针对每个剩余图块(即针对其尚未确定基元是否处于图块中的每个图块),执行图块化计算以确定基元是否处于该图块中,并且如果是的话,基元标识符被添加到针对该图块的显示列表。如以上所描述的,针对特定图块的图块化计算包括将针对基元的边缘的线方程与特定图块的边缘特定测试点进行比较。因此,在步骤S428之后,已经针对渲染空间中的所有图块确定基元是否处于图块中,并且相应地基元标识符已经被添加到针对相应图块的显示列表。方法之后传递到步骤S430。

在步骤S430中,图块化单元108确定在当前渲染中是否存在要图块化的更多基元。每个渲染将有可能包括许多基元(例如数千个或数百万个基元)。渲染可以例如被执行以从3维模型来生成图像,该图像要被显示在屏幕上或被用作其他渲染中的纹理。如果存在要图块化的更多基元,则方法传递回到步骤S404,并且针对下一基元进行重复。一旦当前渲染中的所有基元已经被图块化,则方法将从步骤S430传递到步骤S432,在步骤S432中针对图块的显示列表从图块化单元108被输出并被存储在存储器104

渲染单元110之后可以根据显示列表来渲染图块中的每个图块中的基元。为了渲染针对图块的基元,在步骤S434中,渲染单元110从存储器104

在以上描述的示例中,可以看到,通过执行图块化测试以确定基元是否处于图块的子集中,那些图块化测试的结果可以被用于确定基元是否处于位于由子集的图块中的一些图块界定的区域内的其他图块中。图7a和7b中示出的示例示出是边界框的角落图块的图块的子集。在其他示例中,图块的子集可以是边界框内的不同图块。例如,在图块的子集的图块之间可以存在规则间隔。例如,图块的子集可以包括来自渲染空间的图块的多个N×M块中的每个块的相应图块,其中N和M是整数。图9示出了其中N=M=2的示例。也就是说,在图9中,对2x2图块网格执行图块化测试,使得来自图块的每个2x2块的一个图块处于针对其执行图块化测试的图块的子集中。

图9示出了基元904,其中图块的9x14组处于基元904的边界框中并且被示出在图9中。行号(1到9)和列号(1到14)被示出在图9中。基元904的顶点的位置被用于确定基元904处于第一行的第十四个图块(图块T

在图9中,图块的子集的图块用向上倾斜的影线被示出(除了第九行的第一个图块(图块T

之后可以(在步骤S422中)分析针对图块的子集的图块化测试的结果(包括按边缘结果,其如以上所描述的用于在推出图块是否不包括基元中使用),以确定是否存在图块的3x3块,该图块的3x3块具有来自角落中的图块子集的图块,其中子集的那些图块具有相同的图块化测试结果。如果是这样的情况,则3x3块中的剩余五个图块可以被分配以与子集的相关图块相同的结果(在步骤S424中),而不执行针对那五个图块的特定图块化计算。例如,图9中示出的处于边界框的左上角的图块的3x3块(即,边界框的头三行中的头三个图块)包括四个角落中的子集的图块(图块T

类似地,可以(在步骤S422中)分析针对图块的子集的图块化测试的结果以确定是否存在线中(例如同一行或列中)的子集的具有相同图块化测试结果的两个图块。如果是这样的情况,则在子集的那两个图块之间的(多个)其他图块可以被分配以与子集的相关图块相同的结果(在步骤S424中),而不执行针对那个(那些)其他图块的特定图块化计算。例如,针对边界框的第三行和第五行中的第一个图块(图块T

在一些示例中,步骤S422和S424可以被重复使得对图块化结果的进一步分析可以例如基于基元的顶点位于其中的图块来实施。这可以允许推出对其他图块的图块化结果,而不基于涉及边缘方程的比较来执行针对那些其他图块的特定图块化计算。例如,在针对图块的子集的图块化测试的第一分析之后,已经推出基元904在图9中示出的边界框的第二行中的第十一个图块(图块T

在图9中用带点阴影示出了针对其的图块化结果从子集的图块的图块化结果来推出的图块。最浅的带点阴影指示基元904在图块的外部,然而两种类型的较暗带点阴影指示基元904在图块内部。两个较暗带点阴影中的较浅者指示在第一分析之后基元904被确定为在图块内部,并且两个较暗带点阴影中的较暗者指示在进一步的分析之后基元904被确定为在图块内部。

如以上所描述的,要指出,当分析图块化测试的结果时,如果图块化测试指示基元在子集的图块的组的外部,则基元在图块的外部的原因应当被考虑,即基元的哪个边缘是图块外部。针对要被用于推出基元在另一图块的外部的子集的多个图块的结果,则子集的所有多个图块应当在基元的相同边缘的外部,否则可能错误地推出基元在该另一图块的外部。

在步骤S428中,针对图9中的剩余图块(即没有阴影或影线的那些图块),使用边缘方程和图块内的测试点来执行图块化计算,使得基元904的图块化是完整的。在图9中示出的示例中,边界框包括126个图块。针对图块中的68个执行基于边缘方程的图块化计算;针对图块中的3个的图块化测试涉及标识基元904的顶点处于哪些图块中;并且针对其他55个图块,关于基元904是否处于图块中的确定从针对边界框中的其他图块的图块化测试的结果来推出。在以上背景技术部分中描述的先前系统中,将针对边界框中的每个图块,即针对图9中示出的示例中的126个图块,执行图块化计算。因此,在该示例中,本文中描述的方法避免针对图块中的58个(46%的图块)执行图块化计算。由于图块化计算涉及浮点运算并且花费大量处理资源和时间来实施,在该示例中针对其执行图块化计算的图块的数目的减少将(在速度和功耗方面)显著改善图块化过程的效率。

包含在子集中的图块的数目可以被改变。具体地,对基元的图块化可以以分层的方式来实施,使得在第一(粗糙)阶段中,执行针对图块的子集的图块化测试,并且图块化测试的结果被用于以相对粗糙的分辨率确定基元是否处于至少一个其他图块中,其中图块的子集包括来自渲染空间的图块的多个N

参考图10和11a到11d,除了以上描述的图块化方法或作为对其的备选,描述了对基元进行图块化的另一方式,其可以由图块化单元108来实施。

参考图10中示出的流程图,在步骤S1002中,图块化单元108从预处理模块106接收基元。图块化单元108考虑第一基元。在步骤S1004中,例如以与以上所描述的相同的方式来确定针对基元的边界框,并且如果基元延伸到渲染空间的边缘以外,则边界框被剪裁使得其不延伸到渲染空间的边缘以外。如以上所描述的,在图块与边界框至少部分地重叠的情况下,图块被确定为处于边界框中。基元被确定为没有处于未与边界框至少部分地重叠的图块中。

在参考图10和11a到11d描述的方法中,边界框中的图块的线一次被处理,其中线可以是行或列。在边界框中存在比图块的行更多的图块的列的情况下将线设置为行可以是有益的;然而,在边界框中存在比图块的列更多的图块的行的情况下将线设置为列可以是有益的。因此,图块的线被选择为处于具有边界框中的图块的线的最小数目的维度中。这是有益的,因为用于对基元进行图块化所执行的计算的数目随着边界框中的线的数目线性伸缩,因此将线的维度选择为最小值可以减少在对基元进行图块化中涉及的处理量。在步骤S1006中,图块化单元108确定在边界框中是否存在比图块的行更多的图块的列。如果在边界框中存在比图块的行更多的图块的列,则在步骤S1008中,图块化单元108确定边界框要以图块的行来处理。备选地,如果在边界框中不存在比图块的行更多的图块的列,则在步骤S1010中,图块化单元108确定边界框要以图块的列来处理。

作为参考图10中示出的流程图详细描述的方法的宽泛概述,针对边界框中的图块的线之间的一个或多个图块边界中的每个图块边界,图块化单元108确定图块边界与基元边缘的交叉点,并且使用所确定的交叉点来确定基元处于边界框中的图块中的哪些图块中。

图11a到11d示出了具有包括图块的6x4组的边界框的基元1102的示例。在该示例中,在边界框中存在比图块的列更多的图块的行,因此在步骤S1010中,图块化单元108确定边界框要以图块的列来处理。在下面描述的示例中,边界框以图块的列来处理,但是应当认识到,在其他示例中,边界框可以在适当的情况下以图块的行来处理。

考虑边界框中的图块的第一列,其中考虑在图块的第一列与第二列之间的图块边界1104。在步骤S1012中,针对边界框中的图块的第一列,图块化单元确定图块边界1104与限定基元1102的边缘的边缘线的初始交叉点。基元1102的边缘中的两个边缘与图块边界1104相交,然而针对基元的另一边缘,限定边缘的边缘线1106与图块边界1104在基元1102的外部的位置处交叉。初始交叉点被示出在图11a中在点1108

在步骤S1014中,图块化单元108通过标识初始交叉点中的哪些初始交叉点位于基元1102的边缘上,来确定初始交叉点中的哪些初始交叉点要被用作图块边界1104与基元1102的边缘的交叉点。这可以通过考虑沿图块边界1104前进并且针对初始交叉点两侧(例如紧贴初始交叉点的两侧)的点确定点是在基元1102的内部还是外部来完成。如果确定针对初始交叉点的两侧的两个点是不同的,则初始交叉点是基元的边缘上的交叉点(例如点1108

在步骤S1016中,图块化单元108确定图块的列中的开始图块1112

在步骤S1020中,图块化单元108确定基元处于列中的在开始图块1112

在步骤1022中,将针对基元1102的基元标识符添加到针对其确定基元处于那些图块(例如图11a中示出的影线图块)中的那些图块的显示列表。

在步骤S1024中,图块化单元108确定在边界框中是否存在更多要处理的图块的线(在该示例中为列)。如果存在,则方法传递到步骤S1026使得下一线(例如列)可以被处理。在步骤S1026中,图块化单元108确定下一线是否是边界框的最后的线。如果下一线不是边界框中的最后的线,则方法从步骤S1026传递到步骤S1012,使得下一线可以被处理。

例如,在图11b中示出的示例中,可以处理图块的第二列。以这种方式,在图块的第二列与第三列之间的图块边界1114被用于确定初始交叉点1118

为了找到第二列的开始图块和结束图块,交叉点1108

如图11c中示出的,方法针对下一列(第三列)进行重复。由于第三列不是边界框中的最后的列,方法重复回到步骤S1012,并且第三列被处理。以这种方法,在图块的第三列与第四列之间的图块边界1124被用于确定初始交叉点1128

为了找到第三列的开始图块和结束图块,交叉点1118

如图11d中示出的,方法针对下一列(第四列)进行重复。由于第四列是边界框中的最后的列,方法从步骤S1026传递到步骤S1016和S1018,而不执行步骤S1012或S1014。这是因为在边界框中的最后列的右边的图块边界是边界框的边缘,因此基元将不与该图块边界相交。为了找到最后列的开始图块和结束图块,交叉点1128

之后在步骤S1024中确定在边界框中不存在更多要处理的图块列,因此方法传递到步骤S1028。在步骤S1028中,针对图块的显示列表从图块化单元108被输出并被存储在存储器104

渲染单元110可以之后根据显示列表来渲染图块中的每个图块中的基元。为了渲染针对图块的基元,在步骤S1030中,渲染单元110从存储器104

在一些情形下,例如针对具有大的边界框的基元,参考图10和11a到11d描述的方法可以相较于参考图4到9描述的示例提供对基元进行图块化的更高效的方法。对比之下,在其他情形下,例如针对具有小的边界框的基元,参考图4到9描述的方法可以相较于参考图10和11a到11d描述的示例提供对基元进行图块化的更高效的方法。具体地,在参考图10和11a到11d描述的方法中执行的计算的数目与边界框的最小维度成线性比例(例如与边界框中的图块的列的数目和图块的行的数目中的最小值成线性比例)。这是因为针对除了最后线之外的线(例如图块的列)中的每条线,相同数目的计算被执行而与在每条线中有多少图块无关。如从以上的描述中显而易见的,针对最后的线,可以执行较少的计算。例如,针对包括图块的20x4组(即20行和4列)的边界框将执行与在图11a到11d中示出的示例中针对包括图块的6x4组(即6行和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可以包括对应于以上描述的存储器104

一般地,以上描述的功能、方法、技术或部件中的任何(例如,图块化单元108和其部件)可以被实施在使用软件、固件、硬件(例如,固定逻辑电路)或者这些实施方式中的任何组合的模块中。术语“模块”、“功能”、“部件”、“块”、“单元”和“逻辑”在本文中被用于总体上表示软件、固件、硬件或其任何组合。

在软件实施方式的情况下,模块、功能、部件、单元或逻辑表示当执行在处理器(例如,一个或多个CPU)上时执行指定任务的程序代码。在一个示例中,描述的方法可以通过被配置具有以机器可读形式存储在计算机可读介质上的软件的计算机来执行。计算机可读介质的一个这样的配置是信号承载介质并且因此被配置为将指令(例如,作为载波)诸如经由网络传输到计算设备。计算机可读介质还可以被配置为非瞬态计算机可读存储介质并且因此不是信号承载介质。计算机可读存储介质的示例包括可以使用磁技术、光学技术和其他技术来存储指令或其他数据并且可以由机器访问的随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪速存储器、硬盘存储器和其他存储器设备。

软件可以以用于将计算机配置为执行描述的方法的构成部分的包括计算机程序代码的计算机程序的形式,或者以在程序在计算机上运行时适于执行本文中描述的方法中的任何方法的所有步骤的包括计算机程序代码装置的计算机程序的形式,并且其中计算机程序可以体现在计算机可读介质上。程序代码可以被存储在一个或多个计算机可读介质中。本文中描述的技术的特征是平台无关的,这意味着技术可以被实施在具有各种处理器的各种计算平台上。

本领域技术人员还将意识到,功能、技术或方法中的全部或一部分可以由专用电路、专用集成电路、可编程逻辑阵列、现场可编程门阵列等来实现。例如,模块、功能、部件、单元、或逻辑(例如,实施在图块化单元108的处理逻辑112内的逻辑块)可以包括电路形式的硬件。这样的电路可以包括在制造工艺中可用的晶体管和/或其他硬件元件。通过示例的方式,这样的晶体管和/或其他元件可以被用于形成电路或结构,该电路或结构实施和/或包含诸如寄存器、触发器或锁存器的存储器、诸如布尔运算的逻辑运算器、诸如加法器、乘法器或移位器的数学运算器、以及互连。这样的元件可以被提供为定制电路或标准单元库、宏、或者在其他级别的抽象。这样的元件可以被互连在特定布置中。模块、功能、部件、单元、或逻辑(例如,处理逻辑112内的逻辑块)可以包括为固定功能的电路和可以被编程为执行一个或多个功能的电路;这样的编程可以从固件或软件更新或控制机制来提供。在示例中,硬件逻辑具有实施固定功能操作、状态机或过程的电路。

还旨在包含“描述”或限定实施以上描述的模块、功能、部件、单元或逻辑的硬件的配置的软件,诸如HDL(硬件描述语言)软件,如被用于设计集成电路或者用于将可编程芯片配置为实现期望功能。也就是说,可以提供计算机可读存储介质,其具有编码在其上的计算机可读程序代码,计算机可读程序代码用于生成被配置为执行本文中描述的方法中的任何方法的图形处理系统,或者用于生成包括本文中描述的任何装置的图形处理系统。也就是说,计算机系统可以被配置为从电路元件的定义和限定用于将那些电路元件进行组合的规则的数据,来生成数字电路的表示,其中非瞬态计算机可读存储介质可以具有存储在其上的处理器可执行指令,其当在这样的计算机系统处执行时使计算机系统生成例如包括如在本文中的示例中描述的图块化单元的图形处理系统。

术语‘处理器’和‘计算机’在本文中用于指代具有使得其可以执行指令的处理能力的任何设备或其部分,或者能够执行功能或方法中的全部或一部分的专用电路、或者其任何组合。

尽管本主题已经以特定于结构特征和/或方法动作的语言进行描述,但是要理解所附权利要求中限定的主题不一定限于以上描述的具体特征或动作。更确切地说,以上描述的具体特征和动作被公开为实施权利要求的示例形式。将理解,以上描述的益处和优点可以涉及一个示例或可以涉及若干示例。

如将对技术人员显而易见的,可以在不损失寻求的效果的情况下延伸或更改本文中给出的任何范围或值。本文中描述的方法步骤可以以任何合适的顺序或者在适当的情况下同时地来执行。在不损失寻求的效果的情况下,以上描述的示例中的任何示例的方面可以与描述的其他示例中的任何其他示例的方面进行组合以形成其他示例。

相关技术
  • 在图形处理系统中对基元进行图块化
  • 在图形处理系统中对基元进行图块化
技术分类

06120113033214