用于处理图形的方法和装置与流程

文档序号:15803599发布日期:2018-11-02 21:38阅读:179来源:国知局
用于处理图形的方法和装置与流程

本发明涉及用于处理图形的方法和装置,并且具体地说,涉及用于在图形处理流水线中执行保守光栅化(conservativerasterisation)的方法和装置。

背景技术

通常,图形处理首先通过将要显示的场景划分成多个相似的基本组件或“图元(primitive)”,接着使这些图元经受希望图形处理操作。图形“图元”通常采用简单多边形的形式,如三角形。每个图元在这个级通常由一组顶点限定并表示,其中针对图元的每个顶点都已经关联其与表示该顶点的一组数据(如位置、颜色、纹理以及其它属性数据)。

在可以通过图形处理流水线处理图元及其顶点之前,针对给定图形处理输出(例如,绘图调用)最初限定的顶点的属性通常经受初始的所谓的“顶点着色”操作,该操作操作为将针对每最初限定的顶点的属性变换成用于随后的图形处理操作的希望形式。

例如,这可以包括将最初限定的顶点位置属性从它们初始被限定的世界或用户空间变换至要显示图形处理系统的输出的画面空间。

图形处理流水线(例如,图形处理流水线的顶点着色级)通常将接收采用针对顶点(图元)限定的第一形式(例如,浮点形式)的顶点数据,例如,顶点位置数据,但接着将该数据从其限定形式转换至要稍后在图形处理流水线中使用的形式(例如,16.8定点坐标形式)。该转换因此会具有将针对给定图形处理输出的最初限定的顶点位置(例如,以浮点形式)“对齐(snapping)”至顶点位置阵列(“顶点位置网格”)的效果,该顶点位置阵列可以利用低精度顶点位置格式(例如,16.8定点坐标形式)来表示,这些格式将在光栅化和渲染(render)用于图形处理输出的图元时使用。

通常是接着使用经转换(“对齐”)的顶点位置来确定限定要由图形处理流水线使用的图元的进一步信息,如表示每个图元的边缘的位置的信息。通常来说,这个边缘信息是在图形处理流水线的图元(三角形)设立级确定的。

在图元信息(例如,边缘信息)在图元设立级确定之后,该信息被用在图形处理流水线的后续处理级中,以便例如生成渲染输出。这通常涉及确定与要处理的渲染输出范围相关联的采样点阵列中的哪些采样点被图元覆盖,然后确定每个采样点应当具有的外观(例如,就其颜色等而言),以表示该采样点的图元。这些处理分别被通称为光栅化和渲染。

光栅化处理通常将限定要生成的渲染输出的图元映射至将用于渲染该输出的采样点阵列,其通常采用采样点网格的形式。

通常通过针对图元边缘测试采样点的位置来完成确定图元是否覆盖采样点网格中的任何采样点。要做到这一点,图形处理流水线通常会使用表示图元每个边缘的边缘信息来测试采样点的位置。如果采样点位置“通过”边缘测试,那么其被认为被图元覆盖。如果采样点位置“失败于”边缘测试,那么其被认为处于图元之外(因此不被覆盖)。

通常,正被使用的采样点网格中的相应组的一个或更多个采样点与渲染输出的相应区域(如要渲染的像素)相关联。因此,如果图元覆盖该采样点网络中的其关联采样点中的至少一个采样点,则认为一像素(或渲染输出的合适区域)被该图元覆盖(并且该图元将被确定为需要针对该像素(区域)来加以渲染)。

当如上所述将顶点位置转换成不同格式(即,将顶点对齐至(低精度)顶点位置阵列(顶点位置网格))时,与其初始(高精度)格式下的顶点位置相比,可能将误差引入顶点(进而为图元)的确切位置。

例如,顶点坐标从浮点格式转换成在光栅化处理中使用的(例如,16.8)定点格式可以在图元的顶点位置引入舍入误差(roundingerror)(与原始浮点顶点坐标相比),其可以例如对应地导致被确定为(至少部分地)被图元覆盖的区域(例如,像素)中的差异(与如果使用原始浮点顶点坐标的情况相比)。

在许多情况下,这种舍入误差可能特别成问题,如在图形处理操作(如冲突检测、遮挡剔除以及可视性检测)中要使用图形图元的情况下。

为了减少在转换图元的顶点位置时与图元位置上的舍入误差相关联的问题,已经开发了已知为“保守光栅化”的光栅化形式。(一些图形api,如opengl和directx限定了这种保守光栅化。)保守光栅化旨在确保光栅化的图元相对于原始浮点顶点坐标是保守的。

保守光栅化通常有两个方面:“外覆盖”,其要标识明确在整个图元之外的那些渲染输出区域(例如,像素),而不管对图元的位置的任何舍入影响;和“内覆盖”,其要标识明确被图元完全覆盖的那些渲染输出区域(例如,像素),而不管图元位置上的任何舍入影响。

(在外覆盖与内覆盖之间还将存在一个范围,其将包括被部分覆盖的渲染输出区域(并且与内覆盖范围一起必须包括至少部分被图元覆盖的任何区域)。这个范围中的渲染输出区域可能会被部分覆盖,但它也可能包括完全覆盖的区域和根本未被覆盖的区域,因为可能会有一些额外的误报)。

本申请人认为对于用于在图形处理流水线中执行保守光栅化的方法和装置来说,仍然存在改进的范围。



技术实现要素:

根据本发明第一方面,提供了一种操作包括多个处理级的图形处理流水线的方法,该处理级包括图元设立级和光栅化级,该方法包括以下步骤:

所述图元设立级接收表示限定要通过所述图形处理流水线渲染的图元的顶点的信息,并从中确定表示所述图元的边缘或多个边缘的位置的边缘信息;

所述图元设立级使用所确定的边缘信息,来针对所述图元确定修改的边缘信息,该修改的边缘信息表示针对所述图元的所述边缘或所述多个边缘的修改位置;以及

所述光栅化级使用针对所述图元的所述修改的边缘信息,通过以下步骤来针对正被生成的图形渲染输出的至少一个区域,确定所述图元是否覆盖所述渲染输出的所述区域:

利用针对所述图元的所述修改的边缘信息,来确定所述图元是否覆盖来自表示正被生成的渲染输出的采样点网格的一组一个或更多个采样点中的至少一个采样点,所述至少一个采样点表示所述渲染输出的所述区域。

根据本发明第二方面,提供了一种包括多个处理级的图形处理流水线,该图形处理流水线包括:

图元设立级,该图元设立级被配置成进行如下操作:

接收表示限定要通过所述图形处理流水线渲染的图元的顶点的信息,并从中确定表示所述图元的边缘的位置的边缘信息;以及

使用所确定的边缘信息,来针对所述图元确定修改的边缘信息,该修改的边缘信息表示针对所述图元的所述边缘的修改位置;以及

光栅化级,该光栅化级被配置成进行如下操作:

使用针对所述图元的所述修改的边缘信息,通过以下步骤来针对正被生成的图形渲染输出的至少一个区域,确定所述图元是否覆盖所述渲染输出的所述区域:

利用针对所述图元的所述修改的边缘信息,确定所述图元是否覆盖来自表示所述正被生成的渲染输出的采样点网格的一组一个或更多个采样点中的至少一个采样点,所述至少一个采样点表示所述渲染输出的所述区域。

本发明涉及一种操作图形处理流水线的方法,该图形处理流水线包括:图元设立级,该图元设立级确定表示提供给所述图元设立级的图元边缘的边缘信息;和光栅化级,该光栅化级将图元映射至与要生成(例如,用于显示)的图形渲染输出相关联的采样点网格。

在本发明中,图形处理流水线的图元设立级首先利用针对图元提供的顶点信息来确定该图元的边缘,接着确定针对该图元边缘的修改位置。然后在将图元映射至采样点网格时使用针对该图元边缘的修改位置,以确定该图元是否覆盖与图形渲染输出的区域(例如,像素)相关联的一个或多个采样点。

如下进一步所述,针对图元边缘的修改位置可以,并且优选地,被用于限定该图元周围的、可以使用的“不确定区域”,例如并且优选地,考虑在转换(“对齐”)那些顶点位置以供处理时,图元的原始限定的顶点可以舍入的所有可能的位置。光栅化处理可以对应地使用针对图元边缘的修改位置,来(保守地)确定该图元的覆盖,例如,考虑该图元的转换(对齐)顶点位置中的任何舍入误差。

本发明在图元设立级确定图元边缘的修改位置。如下面进一步讨论的,这具有许多优点,并且具体可以在执行保守光栅化时,例如提供总体上更高效的图形处理流水线。

例如,在图元设立级确定修改的边缘位置,避免了必须执行分离的几何着色级来生成针对每个图元的新的修改顶点(顶点位置),以考虑图元尺寸中的潜在误差,以及图形处理流水线对这些修改顶点的任何后续处理。

在图元设立级修改的图元的边缘位置也是有利的,因为光栅化级可以以正常方式执行光栅化操作(利用修改的边缘)(并且不需要例如修改光栅化图元时所使用的采样点的位置)。这对于被配置成执行分级光栅化处理(如下面进一步讨论的)的图形处理流水线能够特别有利,因为其可以避免需要在每个分级光栅化级别修改采样点网格中采样点的位置。

图元设立级可以位于图形处理流水线内的任何合适的或希望的位置,例如,在顶点着色级(以及图形处理流水线的几何着色级(若有的话))之后。在优选实施方式中,图元设立级是图形处理流水线的光栅化级(光栅化器)的一部分。另选地说,图元设立级可以与光栅化级(光栅化器)分开,例如,图形处理流水线的、(例如,恰好)在光栅化级之前的一级。

最优选的是,图元设立级出现在光栅化级之前和光栅化之前的任何着色级之后,(并且可以实现为光栅化之前的级,或者作为光栅化器的一部分(但是光栅化本身之前))。在图形处理流水线是基于图块(tile)的图形处理流水线的情况下,图元设立级可以,并且优选地,位于图形处理流水线的图块化(tiling)级之后。在这种情况下,使用(对齐的)顶点进行一些处理,以便确定要被图块化器(tiler)用于执行图块化操作的信息,如导出针对图元的边界框可以根据需要在图元设立级之前执行(例如通过图块化器)。

提供给图元设立级的表示图元顶点的信息可以是任何合适和希望的这种信息。例如,该信息可以包括表示限定图元的每顶点的一组顶点属性数据(如位置、颜色、纹理以及其它属性数据)。其优选地包括顶点位置数据。

在一些实施方式中,图形处理流水线将包括处于图元设立级之前的顶点着色级,其针对为顶点限定的初始顶点属性数据执行顶点着色操作,以生成希望的一组输出顶点属性(即,恰当地“着色的”属性),以供图形处理流水线的后续处理级使用。在这样的流水线中,提供给图元设立级的表示顶点的信息可以包括一组“顶点着色”顶点属性数据(例如,恰当地变换的顶点位置数据),以供图形处理流水线的其余部分处理。

图元设立级可以使用该顶点信息((例如,经变换的)顶点位置数据),来确定以任何合适和希望的方式表示图元的边缘位置的边缘信息。

在优选实施方式中,初始顶点位置信息(例如,顶点位置属性数据)从其原始形式(例如,并且优选为,高精度和/或浮点形式)转换(例如,通过顶点着色级)成不同形式(例如,并且优选地,具有给定(优选较低)精度的优选定点形式),然后通过图元设立级利用转换的顶点位置信息来确定表示图元边缘位置的边缘信息(例如,并且优选地,用于光栅化处理)。因而,在优选实施方式中,采用低精度(并且优选为定点)格式的顶点位置由图元设立级用来确定图元的边缘位置。

可以在图形处理流水线中的任何合适和希望的级进行顶点位置到例如低精度格式的转换。在优选实施方式中,这在顶点着色器中完成,例如,因为顶点着色器将“顶点着色”顶点位置写出至存储部(存储器),以供流水线的其余部分使用。

这里应注意到,尽管顶点位置将被转换成例如将被图元设立级用来确定图元的边缘位置的低精度定点格式,但如此转换的(低精度)顶点位置不一定需要以定点格式存储在存储器中。例如,转换的顶点位置仍然可以利用浮点表示(但是其指示转换的(低精度)“对齐”位置)存储在存储器中。

由图元设立级根据表示图元顶点的信息确定的边缘信息可以是:适于表示图元的边缘位置的任何类型的信息。

在优选实施方式中,该边缘信息包括一个或更多个线性方程,每个都限定图元的一相应边缘。优选地,为图元的每个边缘提供一个线性方程。

针对一(并且针对每个)边缘的线性方程优选具有以下形式:

ax+by+c=0

其中,x和y是图形渲染输出平面中的位置变量,并且a、b以及c是常数。

该边缘信息可以仅表示图元的一个边缘,但在优选实施方式中,该边缘信息包括指定图元的多个边缘的、并且优选为所有边缘的位置的信息。因此,该边缘信息优选地指示并表示图元的每个相应边缘。

一旦利用转换(对齐)的图元顶点生成了指示图元的边缘的边缘信息(例如,线性方程),图元设立级就使用该最初确定的边缘信息来确定针对该图元的修改的边缘信息。

修改的边缘信息应当,并且优选地,针对所确定的边缘信息涉及的至少一个图元边缘、优选为多个图元边缘、并且优选为每个图元边缘,来加以确定。优选地针对图元的每个边缘来确定修改的边缘信息。

针对图元(针对图元的边缘)确定的修改的边缘信息可以采取任何合适和希望的形式,但优选地具有上面针对最初确定的边缘信息所讨论的形式。因而,在优选实施方式中,该修改的边缘信息再次包括表示图元的一个或更多个边缘并且优选为每个边缘的线性方程(但关于针对图元边缘的初始确定的线性方程,来修改该线性方程)。

在实施方式中,最初确定的边缘信息和修改的边缘信息两者都被存储以供图形处理流水线使用。然而,在优选实施方式中,一旦生成了修改的边缘信息,就只有修改的边缘信息被存储以供将来使用(并且原始边缘信息可以例如被丢弃)。

修改的边缘信息表示一个(并且优选为每个)图元边缘的修改位置(与如根据由图元设立级从针对图元的转换(对齐)顶点确定的原始边缘信息所限定的边缘位置相比)。

图元边缘的位置可以以任何合适和希望的方式修改。其优选地通过相对于(从)如根据由图元设立级从针对图元的顶点确定的原始(未修改)边缘信息所限定的边缘位置移动图元边缘来完成。优选地,图元边缘朝向或远离图元中心移动。

优选地,所有图元的边缘都相对于图元中心以相同的方向移动(即,全部向内或全部向外)。

在优选实施方式中,图元设立级确定表示已经相对于最初确定的图元边缘向外移动(即,远离图元中心位置)的图元边缘的修改的边缘信息。即,在该实施方式中,图元设立级将确定表示针对所讨论图元的扩展形式的边缘的修改的边缘信息(相对于由连接所转换(对齐)的图元顶点的边缘所限定的图元尺寸)。当修改的边缘信息要被用于测试图元的外覆盖时,这可以特别合适。

所述(并且优选为每个)图元边缘优选地相对于如根据由图元设立级从针对图元的顶点确定的原始(未修改)边缘信息所限定的边缘位置,移动达特定的、优选为选定的、优选为预定的偏移量。最优选地,(一个并且优选为每个)图元边缘沿着针对正被生成的渲染输出的轴向方向(例如,沿着要用于光栅化处理的采样点网格的平面的x或y轴)移动达所述特定偏移量。该图元边缘可以例如根据它们的取向,而沿着相同的轴或不同的轴偏移(如下面进一步讨论的)。

在优选实施方式中,为其确定修改位置的每个图元边缘被移动达相同的偏移量(即,相对于如根据由图元设立级从图元顶点确定的原始(未修改)边缘信息所限定的图元边缘位置的偏移量值,对于被移动的每个边缘都是相同的),尽管图元边缘的移动(偏移)方向可以(并且在优选实施方式中)针对不同边缘而不同。

每个图元边缘相对于其最初确定的位置偏移的量(偏移值)可以是任何合适和希望的偏移量。最优选的是,该偏移量被设定成,实际上限定修改的图元边缘的位置与图元边缘的最初确定位置之间的不确定区域,其可以,并且优选地考虑在限定图元边缘的顶点位置中引入潜在舍入(或其它)误差。

因此,图元边缘的位置优选地基于与图元的尺寸相关联的误差来加以修改。优选地,这基于图元尺寸的已知潜在误差的量值,其可能因顶点或图元设立处理而造成,如并且优选为,通过将顶点位置从浮点格式转换成要被图形处理流水线使用的定点格式而引入的潜在舍入误差。

对应地,在优选实施方式中,针对图元边缘的修改位置被设定成,(尝试)解决(accountfor)与图元尺寸相关联的(潜在)误差,并且优选地(优选地至少)尝试解决图元的(对齐)顶点位置的舍入误差。最优选的是,针对图元边缘的修改位置被设定成,实际上限定修改的图元边缘的位置与如由图元设立级最初确定的图元边缘位置之间的不确定区域,该不确定区域将包括:图元边缘在针对该边缘的偏移方向上可能具有的、考虑限定图元的最初确定边缘的顶点位置中的任何潜在误差的至少一些并且优选为所有可能位置。

一般来说,边缘偏移应当至少足以解决图元尺寸中的(预期)误差,但可能大于该值(尽管在优选实施方式中,该偏移不会太大,因为其本身会引入更多的误差)。

在优选实施方式中,图元边缘沿特定方向偏移,以确定修改边缘位置的距离基于并取决于原始顶点位置(例如,采用浮点形式)例如在图形处理流水线的顶点着色级中被对齐的顶点位置网格的大小和/或特性。

最优选的是,偏移值(以及因此不确定区域的大小)取决于(并且基于)顶点位置网格的精度(即,分辨率),这些顶点位置网格被“对齐”,以稍后在图形处理流水线中使用(举例来说,如利用16.8定点坐标格式限定的)。本申请人在这方面已经认识到,例如,“对齐”顶点位置网格中的相邻顶点位置之间的距离(其对应于顶点位置网格的分辨率)将确定与如由图元设立级确定的边缘位置相关联的误差容限。顶点位置网格的分辨率(以及因此相邻“准许”(可表示的)顶点位置之间的间隔)将取决于要用于顶点位置的(低精度(例如,定点)坐标格式。例如,顶点位置网格的分辨率(以及因此在其中的相邻顶点位置之间的间隔)可以对应于用于directx中的保守光栅化的8位子像素精度。

在这点上,“对齐”顶点位置网格中的相邻顶点位置之间的距离(以及因此顶点位置网格的分辨率)可以,并且在实施方式中,被限定为渲染输出的像素间距(像素大小)的给定分数。在优选实施方式中,分隔顶点位置网格中的相邻顶点位置的距离对应于(例如,被设定)成一像素的1/256。本申请人已经认识到,如果由图元的修改边缘位置限定的“不确定”区域边缘小于对齐最初限定的顶点的顶点位置网格中的顶点位置间距的一半,那么这可能不会解决例如因将顶点位置数据从浮点格式转换成定点格式而造成的图元尺寸中的所有可能的舍入误差。因此,在优选实施方式中,对于边缘修改处理,每个图元边缘被偏移的最小量等于要使用的顶点位置网格中的顶点位置间距的一半。

图元边缘沿特定方向偏移以确定修改边缘位置的距离不需要总是基于要用于将顶点从其最初限定形式转换成稍后要在图形处理流水线中使用的形式(例如,16.8定点坐标形式)的顶点位置网格的精度。

在另一实施方式中,图元边缘沿特定方向偏移,以确定修改边缘位置的距离基于并取决于要在光栅化处理期间使用的采样点网格的大小和/或特性。在实施方式中,偏移值(以及因此不确定区域的大小)取决于(并且基于)要用于光栅化处理的采样点网格的精度,即,分辨率。

如下将进一步讨论的,要用于光栅化处理的采样点网格应当,并且优选地,包括皆对应于渲染输出的一相应像素的多组一个或更多个采样点,即,采样点网格将以特定分辨率表示渲染输出的像素。

在优选实施方式中,不确定区域和图元边缘通过边缘修改处理移动的量对应于:要用于光栅化处理的采样点网格的像素间距的特定的、优选为选定的、优选为预定的分数。

本申请人在这方面特别认识到,如果通过移动图元边缘而限定的“不确定”区域大于要用于光栅化处理的采样点网格的像素间距的一半,那么,出于在执行保守光栅化时确定像素覆盖的目的,当将顶点位置转换成要用于顶点位置光栅化处理的例如所述定点格式的分辨率时,其会冒险增加图元尺寸超出潜在舍入误差。因此,在优选实施方式中,将一(并且每个)图元边缘所移动的最大偏移量是要被用于光栅化处理的采样点网格的像素间距的一半。

因而,在优选实施方式中,不确定区域和图元边缘针对边缘修改处理而移动(偏移)的量,处于“对齐的”顶点位置网格的顶点位置间距的一半与要用于光栅化处理的采样点网格的像素间距的一半之间。

在一个优选实施方式中,每个图元边缘被偏移的距离等于要使用的对齐顶点位置网格中的顶点位置间距的一半。在一个优选实施方式中,图元边缘被偏移的距离等于将最初限定的定点对齐的顶点位置网格中的顶点位置间距。在另一优选实施方式中,图元边缘被偏移的距离等于要用于光栅化处理的采样点网格的像素间距的一半。

因此,例如,在具有顶点位置间距为一像素的1/256的对齐顶点位置网格(这通常是图形处理流水线使用16.8定点坐标表示(以及浮点顶点坐标被对齐至16.8定点坐标表示)的情况)正被使用的情况下,那么每个图元边缘被偏移的偏移量优选等于以下之一:像素宽度的1/512、像素宽度的1/256、或者像素宽度的1/2。

在另一优选实施方式中,图元边缘被偏移的距离等于要用于光栅化处理的采样点网格的采样点间距。采样点网格的采样点间距可以相当于(并且在实施方式中,等于)顶点位置网格中的顶点位置的间距。然而,在优选实施方式中,采样点网格可以具有比顶点位置网格的分辨率低的分辨率(并因此其采样点间距小于顶点位置网格的采样点间距)。

图元的边缘可以为此以任何合适和希望的方式移动(偏移)。例如,边缘可以沿该边缘的法线(垂直)方向移动,以实现希望偏移量。

在优选实施方式中,移动(偏移)图元边缘包括检测该边缘的长轴(例如,并且优选地根据针对该边缘的线性方程)(即,确定x轴或y轴是否是针对该边缘的长轴),然后沿该边缘的短轴方向将该边缘移动达所希望偏移量。即,在实施方式中,图元设立级被配置成通过以下来调节边缘信息:检测该边缘的长轴(例如,根据线性方程),并且沿该边缘的短轴方向向外或向内(相对于图元中心)移动该边缘。

优选地,每个边缘沿该边缘的短轴方向(沿着短轴)移动(向内或向外)达同特定偏移量(如上所述)。

边缘的长轴可以,并且优选地,通过比较针对该边缘的线性方程的常数a和b的绝对值来确定。

在该边缘信息包括线性方程的情况下,在实施方式中,图元设立级被配置成,通过调节线性方程以便导出限定针对图元边缘的修改位置的修改线性方程来确定针对该图元的修改边缘信息。

本申请人已经认识到,在修改边缘信息表示已经从最初确定的图元边缘位置向外移动的边缘的情况下,那么被移动(修改)边缘的顶点(即,由其限定的有效顶点)(即,偏移边缘之间的交点),可以位于进一步远离可以被该图元覆盖的对齐顶点位置的位置处,即使考虑顶点位置中的任何不确定性(误差)也是如此。对于相对较长和较细的图元(例如三角形),情况尤其如此。

为了避免确定位于与最初确定的图元边缘位置相关联的希望误差容限(不确定区域)之外的扩展图元的顶点处的区域的覆盖,在优选实施方式中,从用于光栅化处理的修改的图元中排除这样的区域(或者至少在执行光栅化时不考虑这样的区域)。这可以以任何合适和希望的方式来实现。

在具体优选的实施方式中,这通过在扩展图元(例如三角形)周围构造边界框来完成的,该边界框相对于扩展图元调整尺寸和位置,使得该边界框将“切断”经修改的扩展图元的顶点处的、从对齐顶点位置(要被图元设立级使用的顶点位置)起延伸的任何区域达大于希望偏移量(误差容限)。

然后边界框本身可以针对采样点网格进行测试,以及或者代替修改的图元边缘进行测试,如果需要,例如,(潜在地)提供对图元/采样的早期剔除(因为其更轻易评估)。在具体优选的实施方式中,如下面将进一步描述的,针对采样点网格测试修改的图元边缘和边界框以确定图元的覆盖范围。由此,最优选的是,像测试采样点(例如)是否被图元的每个边缘覆盖一样,采样点也必须被确定为处于针对图元的边界框内,以便将其确定为被图元覆盖。

在具体优选的实施方式中,这种边界框测试在利用修改的图元执行“外覆盖”测试时被使用,但在利用修改的图元执行“内覆盖”测试时未被使用。

因此,在本发明的实施方式中,针对图元的修改边缘信息还包括表示针对该(修改)图元的边界框的信息。

在具体优选的实施方式中,已经通过从图元中心沿向外方向修改的图元边缘的位置而被扩展的该图元的边界框,被构造为如下的边界框,该边界框具有一尺寸和基于用于确定图元边缘的初始(未修改)位置的该图元顶点位置的位置,加上沿采样点网格的每个轴按两个方向向外方向的偏移量(误差容限)。

对应地,在具体优选的实施方式中,针对与(轴对准)边界框(其对准至((刚好)包围)针对该图元的初始顶点位置)相对应的扩展图元生成边界框,但针对其,(边界框的)每个边缘然后沿垂直于该边缘的轴向向外扩展达特定的、优选为选定的、优选为预定的,并且优选为相同的偏移量(误差容限)。

在这种情况下,针对边界框的边缘的偏移量可以是,并且优选为,与上面关于移动图元边缘所讨论的偏移量类似(并且,例如对应)的偏移量。在具体优选的实施方式中,边界框偏移量等于正被使用的对齐顶点位置网格的最小所需不确定偏移量(即,等于顶点位置网格中的顶点位置间距的一半(并因此等于其中顶点位置在顶点位置网格中按1/256像素间隔开的1/512像素))。

在图形处理流水线是基于图块(tile)的图形处理流水线的情况,那么在图块化图元(将图元分类成用于正被生成的渲染输出的相应图块列表)时,优选(也)使用上述形式的经修改、扩展的边界框。在这种情况下,要用于图块化操作的这样修改的边界框在图块化本身开始之前,优选地在所修改的图元边缘由图元设立级(例如,并且优选地由图形处理流水线的图块化级(图块化器))确定之前,加以确定(作为图块化操作的一部分)。

在该修改边缘信息已经通过图元设立级针对图元加以确定之后,利用该修改边缘信息(例如,图元的扩展或收缩形式),将该图元映射(通过光栅化级)至要用于对图元进行光栅化的采样点网格。采样点网格与要生成的图形渲染输出范围(例如,用于显示)(例如,像素阵列)相关联。

该采样点网格将包括一个(优选为规则的)采样点阵列。相应组的一个或更多个采样点将要,并且优选地,皆与图形渲染输出的相应区域(范围)相关联,如要生成的像素(尽管如下面将讨论的,被测试的多组一个或更多个采样点在一些布置中可以与更大(或更小)区域相关联,例如,对应于多个像素)。

每个渲染输出区域可以由仅一个采样点(单个采样点)的组来表示,但在优选实施方式中,渲染输出区域皆由相应组的多个采样点表示。

可以以任何合适和希望的方式来执行:图元的修改边缘针对用于渲染输出范围的采样点网格的采样点的实际测试。因而,这可以,并且优选地以正常方式执行,以供针对所讨论的图形处理流水线中的采样点来测试图元的边缘。

“修改”的图元应当,并且优选地,被映射至采样点网格(光栅化),以确定该(修改的)图元是否覆盖渲染输出的一个或更多个区域。

所修改边缘信息的光栅化测试最优选用于,标识明确处于图元之外的那些渲染输出区域(例如,并且优选为像素),而不管针对该图元位置的任何舍入影响(即,外覆盖测试),和/或标识明确且完全被图元覆盖的那些渲染输出区域(例如,并且优选为像素),而不管针对该图元位置的任何舍入影响(即,内覆盖测试)。

在一个优选实施方式中,针对图元的修改边缘信息用于将图形图元映射至采样点网格,以确定该图元至少部分覆盖那些渲染输出区域。因此,在这种情况下,使用针对图元的修改的边缘信息来确定该图元是否覆盖渲染输出的区域的步骤包括:确定该图元是否覆盖该渲染输出的所述区域的至少一部分。这可能特别适于保守光栅化外覆盖测试。

在另一优选实施方式中,针对图元的修改的边缘信息还或者代替地(并且优选地还)用于将图形图元映射至采样点网格,以确定该图元完全覆盖那些渲染输出区域。因此,在这种情况下,使用针对图元的修改的边缘信息来确定该图元是否覆盖渲染输出的区域的步骤包括:确定该图元是否完全覆盖该渲染输出的区域。这可能特别适于保守光栅化内覆盖测试。

渲染输出区域图元覆盖测试优选地通过利用修改的图元边缘以确定该(修改的)图元是否覆盖用于渲染输出区域的采样点网格中的一个或更多个或所有采样点来完成。在实施方式中,这包括:针对表示渲染输出区域的采样点网格中的该组一个或更多个采样点,测试该(修改的)图元,以确定该组采样位置对应于的渲染输出区域是否完全和/或至少部分被该图元覆盖。

在实施方式中,针对表示渲染输出的区域的一组一个或更多个采样点测试(修改的)图元被执行,以确定表示该区域的采样组中的该组的至少一个采样点是否被该(修改的)图元覆盖。然后这将确定渲染输出区域是否至少部分被该图元覆盖(并且例如可以适于针对保守光栅化的外覆盖测试)。

另外或另选的是,在这种情况下,针对用于渲染输出区域的采样点网格中的一组采样点测试修改的图元,可以被配置成:确定是否表示渲染输出区域的该组采样点中的采样点都未被该(修改的)图元覆盖(即,渲染输出区域根本未被该修改的图元覆盖)。

对应地,在实施方式中,针对表示渲染输出区域的一组采样位置测试修改的图元被配置成:确定表示该渲染输出区域的该组采样点中的所有采样点是否被该图元覆盖。这可以用来指示渲染输出区域是否完全被该图元覆盖(并因此可能适合在执行针对保守光栅化的内覆盖测试时使用)。

优选地,以一种或更多种上述方式,针对多个渲染输出区域(表示多个渲染输出区域的多组采样位置),“覆盖”测试给定修改的图元。可以以这种方式针对整个渲染输出范围测试图元,或者可以标识然后对其执行这种渲染输出区域测试的渲染输出的子范围,例如,基于对该图元的可能或预期覆盖的一些近似。

在具体优选的实施方式中,渲染输出被分成多个矩形(并且优选为方形)区域,并且每个区域具有对应于与其相关联的区域的角部的一组四个采样点,并且通过光栅化处理来测试。(在这方面应当清楚,渲染输出中的相邻区域将共享它们共享角部处的采样点)。

因此,在这种情况下,要通过光栅化处理来测试用于图元覆盖的渲染输出的每个区域,将具有与其相关联的一组四个采样点,对应于该区域的四个角部中的每一个。

在具体优选的这种实施方式中,当针对图元的每个(修改)边缘,对于通过针对该边缘的边缘测试的所讨论区域(其位于该边缘内部(或者其上还是内部,取决于正被使用的边缘测试))具有至少一个采样点(角部)时,将渲染输出区域确定为至少一部分被该图元覆盖,

因此,例如,在三角形图元的情况下,如果确定图元的第一边缘覆盖渲染输出区域的任何角部,该图元的第二边缘覆盖该区域的任何角部,以及该图元的第三边缘覆盖该区域的的任何角部,则该区域将被光栅化处理确定为至少部分地被该图元覆盖(因而,在针对每个边缘的结果接着进行“逻辑与运算(and)”,以提供总体边缘覆盖结果之前,针对每个边缘的所有角部的结果优选进行“逻辑或运算(or)”)。

在其中例如在图元设立级处导出围绕图元的扩展边界框的情况下(如上所述),那么光栅化处理优选地还确定,该渲染输出区域是否至少部分或完全处于该边界框内(根据正被执行的覆盖测试)。这优选地通过如下方式来进行:测试针对渲染输出区域的相应采样点,以确定至少一个采样点是否处于边界框内(针对部分覆盖)和/或确定所有区域的采样点是否处于边界框内(针对完整覆盖)。因此,如果(当)确定还至少部分地(或完全)处于该边界框内时,则区域优选地仅被认为被图元至少部分地(或完全)覆盖。

在一个优选实施方式中,该被考虑的渲染输出区域对应要生成(例如,显示)的像素。在另一优选实施方式中,所述区域大于像素,并且例如,并且优选地,皆对应于多个像素的阵列(例如,2×2、4×4、8×8或16×16像素的阵列)。

可以仅按将渲染输出范围细分成多个区域的一个特定布置(级别)(例如,按像素级测试,或者一组像素的级别),来测试修改的图元(并且在一个优选实施方式中,就是这样做的)。

然而,在具体优选的实施方式中,本发明的光栅化处理被执行为“分层”光栅化处理,其中,图元针对图形渲染输出范围中逐渐变小的区域直到最小区域大小(在实施方式中,对应于单个像素)来加以测试,丢弃未被确定(至少部分地未被确定)为被该图元覆盖(至少部分地覆盖)的任何区域。

因此,在优选实施方式中,可以并且优选地通过光栅化处理针对采样点网格的多个相应细分,来对图元进行测试,其中每个这样的网格细分将渲染输出范围的给定细分表示为给定大小的一组区域,并且每个不同细分将该渲染输出范围分成,大小与该渲染输出范围的其它细分不同的一组区域。

因此,在这种情况下,将存在由来自采样点网格的多组采样点构成的采样点网格的第一细分,其皆分别对应于将渲染输出范围细分成多个区域的第一细分,和由来自采样点网格的多组采样点构成的采样点网格的至少一个其它细分,其皆分别对应于将渲染输出范围细分成多个区域的第二不同细分(将渲染输出范围细分成,大小与渲染输出范围的第一细分的区域不同的区域)。

在优选的这种实施方式中,存在:其中将渲染输出范围划分成与单独像素相对应的多个区域的一个采样点网格细分;和其中将渲染输出范围划分成比单独像素更大的多个区域的至少一个其它采样点网格细分(并且优选地对应于多个像素的阵列)。因此在这种情况下,存在:将采样点网格分成多组采样点的第一细分,其中每个组都对应于一单独像素;和将采样点网格分成多组采样点的至少一个其它细分,其中每组采样点都对应于大于一单独像素的区域。

优选地,首先针对将渲染输出范围细分为更大(例如,最大)大小区域的采样点网格的细分来测试所修改的图元,然后如果该采样点网格细分中的任何区域被确定为至少部分地由该图元覆盖,那么将针对表示将渲染输出范围分成多个区域的更小细分的采样点网格细分对该图元加以测试,等等,直到达到渲染输出范围的最小区域细分(例如,像素细分)为止。

可以根据需要,例如并且优选地,根据正被执行的光栅化的特性以及该光栅化的目的,来使用针对图元的光栅化处理的结果。优选地,以正常方式使用修改的图元的光栅化处理的结果,如以本发明的方式在没有对图元边缘进行任何修改的情况下进行光栅化所做的那样。

因此,在针对渲染输出的较大区域测试图元时的分层光栅化操作的情况下,光栅化处理的结果优选地用于丢弃针对所讨论渲染输出区域的图元,或者确定将所讨论渲染输出区域细分成更小区域,然后针对那些更小区域测试图元。

对应地,当针对渲染输出范围的最小(或者仅)细分(例如,像素细分)测试图元时,优选地,将光栅化测试的结果用于生成(或不生成)恰当片段,以供关于所讨论渲染输出范围的区域进一步处理(例如,渲染)该图元。例如,针对“外覆盖”测试,该图元可以以正常方式被光栅化为片段。针对“内覆盖”测试,完全覆盖的区域(例如,像素)可以照此标记以指示其被完全覆盖(例如,用于遮挡测试)。

如上所述,可以使用针对图元的修改边缘来执行保守光栅化的外覆盖和内覆盖操作两者。因此,可以确定针对图元的两组修改的边缘信息,一个表示该图元的扩展形式,而另一个表示该图元的收缩形式,然后被优选分别用于外覆盖和内覆盖保守光栅化处理。

然而,本申请人也已经认识到,可能仅生成图元的单个修改形式(即,图元的扩展形式或收缩形式),然后将该图元的修改形式用于外覆盖和内覆盖保守光栅化测试两者。

因此,在本发明的具体优选的实施方式中,图元设立级按如上讨论的方式操作,以确定针对图元的单组(仅一个组)的修改的边缘信息,其中,接着使用该图元的修改形式,来执行针对该图元的外覆盖保守光栅化测试和针对该图元的内覆盖保守光栅化测试两者。

这样做的优点是,图形处理流水线能够执行外和内覆盖分析两者,而不必为要测试的图元的每个边缘生成两个“移动”边缘(一个向内偏移,一个向外偏移)。

在具体优选的这种实施方式中,仅确定该图元的扩展形式。因此,在具体优选的实施方式中,使用针对图元的修改的边缘信息,来执行针对该图元的外覆盖保守光栅化测试和针对该图元的内覆盖保守光栅化测试两者,该修改的边缘信息表示针对该图元的扩展形式的边缘。

对应地,在具体优选的实施方式中,利用该图元的、表示针对该图元的扩展形式的边缘的修改的边缘信息,来完成针对图元的保守光栅化处理的内覆盖测试(即,其中在三角设立级,图元边缘已经从原始确定的边缘向外移动,例如,考虑图元的顶点位置中的潜在误差)。

本申请人在这方面进一步认识到,当利用图元的扩展形式来执行内覆盖测试时,那么为了恰当执行内部覆盖测试,希望针对采样点网格的不同布置到在将图元的扩展形式用于执行外覆盖测试时使用的布置,来测试该图元的扩展形式(而如果利用图元的收缩形式来执行外覆盖测试,则情况也是一样)。

因此,在具体优选的实施方式中,使用图元的扩展形式来执行保守光栅化的内覆盖测试,并且与在测试修改的图元边缘以用于外覆盖测试目的时、将使用的采样位置的网格(阵列)相比,利用采样位置的修改网格(阵列)来完成修改的图元的边缘的测试。

换句话说,代替确定表示用于内覆盖测试的图元的移动“内”边缘的修改的边缘信息,仍使用修改的向外扩展的边缘,但是用于针对那些边缘进行测试的采样点的位置,出于内覆盖分析的目的而加以调节。

这是有利的,因为内覆盖测试仅需要按将渲染输出细分成多个区域的最低级别(而不是在分层光栅化布置的情况下的多个不同细分级别)来执行,使得当为内部覆盖测试确定修改采样点网格时,只需要修改将采样点网格分成渲染输出区域的一个细分。

因此,在具体优选的实施方式中,针对图元生成表示图元的扩展形式的单组修改的边缘信息,并针对具有采样点位置的特定布置的采样点网格测试,测试该单组修改的边缘信息以供进行外覆盖测试,并且还针对采样点网格的修改形式进行测试,以对该图元执行内覆盖测试。

可以以任何合适和希望的方式来修改要被用于测试采用这些布置的图元修改形式的采样位置的网格。

在其中如上所述采样点网格中的各组采样点表示渲染输出的相应区域的情况下,那么在具体优选的实施方式中,与采样位置的修改网格中的用于该区域的该组采样位置中的位置相比,采样位置的网格通过针对一个、并且优选针对多个、并且优选针对每个要被测试的相应渲染输出区域,利用针对具有修改位置的该区域的一组采样位置来进行修改。最优选的是,表示渲染输出区域的给定组的采样点中的一个或更多个、并且优选为每个采样点在修改采样点组中具有修改位置。

因此,在具体优选的实施方式中,针对要被测试的每个渲染输出区域,修改的一组采样位置用于测试图元的修改形式。(在这方面应当清楚,在针对表示正被测试的渲染输出区域的各组采样点来修改采样点的位置的情况下,那么未修改采样点网格中的、在多个渲染输出区域中共有的给定采样点,可以并且优选地,具有根据其来测试渲染输出区域(并因此未修改采样点网格中的采样位置组)的不同修改位置(并因此使其采样点位置被修改))。

在具体优选的实施方式中,在其中每个区域由该区域的角部处的一组四个采样点表示的情况下,将至少一个修改采样点位置用于该区域的每个角部。

对于该组中的每个采样点(例如,区域角部)可能只有单个修改采样点位置,或者每个采样点可以具有用于其的多个(例如,并且优选为两个)修改采样点位置。

在具体优选的实施方式中,用于渲染输出区域的该组采样位置(并且优选为针对要被测试的每个渲染输出区域的该采样位置)通过将该组中的相应采样位置从它们在未修改网格中的位置起向外(即,进一步远离)移动,或者从它们在未修改网格中的位置起向内(即,更靠近)移动来进行修改。

在具体优选的实施方式中,在要将图元的扩展形式用于内覆盖测试的情况下,那么出于内覆盖测试的目的,将要针对渲染输出区域进行测试的该组采样位置中的采样位置向外移动(以使用于给定渲染输出区域的采样位置将被进一步间隔开)。(对应地,在这些情况下,当将图元的扩展形式用于外覆盖测试时,将使用采样点组的未修改形式)。

在具体优选的实施方式中,所使用的修改的一组采样位置包括这样一采样点组,其中针对所讨论渲染输出区域的未修改的一组采样位置中的每个采样点位置,已经相对于采样点网格的未修改形式中的对应采样点位置偏移达特定的、优选为选定的、优选为预定的量。针对修改采样点组中的一个(并且优选针对每个)采样点的修改位置,优选地相对于该采样点的未修改位置沿该采样点网格的一轴向(或两个轴向)偏移达收缩特定偏移量。

在具体优选的实施方式中,表示被使用的渲染输出区域(例如,像素一个)的修改的一组并且优选为每组采样点,针对用于未修改采样点组中的该区域的每个采样点,包括修改采样点组中的两个采样点,一个采样点表示未修改采样点按一个轴向(例如,x-轴)偏移达特定的、优选为选定的、优选为预定的偏移量,而另一偏移采样点表示未修改采样点按另一方向(例如,y)偏移达所述(相同)特定偏移量。因此,在对每个渲染输出区域(例如,像素)使用一组四个采样点的情况下,在修改采样点组中优选使用八个“偏移”采样点,针对每个采样点有两个。

因此,在具体优选的实施方式中,在例如原始采样点网格针对正被考虑的每个渲染输出区域包括一组四个采样位置(皆表示所讨论区域的一个角部)的情况下,针对要考虑的给定(和每个)渲染输出区域的修改采样点组包括四对采样点(总共八个采样点),其中每对采样点对应于该区域的相应角部,并且包括:沿一个(例如,x)轴向偏移的、针对该角部的一个采样点,和沿另一(例如,y)轴向偏移的、针对该角部的另一采样点。

在这些布置中,优选地,修改采样点在该修改采样位置组中以相同的相对方向(即,向外或向内)移动。因此,在其中出于测试针对图元的内覆盖的目的而将修改采样点组与该图元的扩展形式一起使用的优选实施方式中,那么针对正被考虑的每个渲染输出区域,优选使用包括四对采样点的修改采样点组,其中每对都对应于该渲染输出区域的相应角部,并且包括沿一个(例如,x)轴向向外偏移的、针对该角部的一个采样点,和沿另一(例如,y)轴向向外偏移的、针对该角部的另一采样点。

用于修改采样点组中的采样点的修改位置的偏移量可以是任何合适和希望的偏移量,例如,其可以并且优选地考虑以下中的一个或多个,并且优选考虑全部:针对修改采样点组正被测试的图元的修改形式、正在执行的测试的类型,以及图元尺寸中的、可能影响正被执行的测试的任何误差(例如,针对图元顶点位置中的舍入误差)(如上所述)。

在具体优选的实施方式中,针对采样位置的偏移量基于在要针对修改采样点组(网格)进行测试的图元的修改形式中移动图元边缘的量(并且优选包括与其相对应的分量)。这实际上将去除图元边缘的偏移,使得该图元实际上返回至其“对齐”大小和配置(即,与基于在图元设立级接收的转换(对齐)顶点位置最初确定的图元边缘的大小和配置相对应的大小和配置)。

在优选实施方式中,针对修改采样点组中的采样位置的偏移量也或者代替地(并且优选地还)包括考虑图元尺寸中的任何误差或不确定性的分量(如上所述)。该(进一步的)偏移量优选对应于并且以与如上所述的用于移动图元边缘的偏移量类似的方式来设定(因而,其优选为针对采样点网格的像素间距的某一分数,并且优选对应于对齐顶点位置网格中的顶点位置间距的一半或全部,或者(未修改)采样点网格中的采样点间距的一半或全部)。

因此,在优选实施方式中,采样点位置将被偏移(优选地沿x和y方向中的一个方向)的最小量(距离)等于以下总和:图元边缘已经被调节以限定正被使用的图元的修改形式的距离;和上面参照修改的边缘信息所引用的用于解决图元尺寸中的(潜在的)舍入误差的最小偏移值。因此,例如,在图元的边缘如上所述通过将它们偏移达像素的1/526来加以修改的情况下,在该优选实施方式中,采样点位置将被偏移的最小量(距离)将为像素间距的1/256(即,像素间距的1/526+1/526)。

在一个优选实施方式中,采样点位置将被偏移(优选地沿x和y方向中的一个方向)的量(距离)等于以下总和:图元边缘已经被调节以限定正被使用的图元的修改形式的距离;和上面参照修改的边缘信息所引用的用于解决图元尺寸中的(潜在的)舍入误差的最小偏移值。

在另一实施方式中,至少一个或每个采样点的位置被偏移(调节)的距离在实施方式中等于图元边缘已被移动的距离的两倍。

因此,在使用图元的扩展形式来执行内覆盖测试的情况下,要与图元的扩展形式一起用于内覆盖测试的一个(并且每个)修改采样点组中的采样点,优选地从它们在未修改采样点网格中的位置起沿一轴向或每个轴向(即,沿进一步远离该组所表示的渲染输出区域的中心位置的方向)向外移动达一个量,该量至少等于以下总和:图元的边缘向外移动以形成该图元的修改形式的距离;和上面参照修改的边缘信息所引用的用于解决图元尺寸中的(潜在的)舍入误差的最小偏移值。

在这点上,应当清楚,在该实施方式中的采样点将按用于外覆盖测试的图元边缘的偏移来向外移动,以便有效地“去除”图元的边缘沿向外方向的偏移,并且还至少按最小偏移值沿向内方向移动,以便有效地将图元的边缘偏移达恰当的量。

如上所述,在图形处理流水线被配置成执行“分层”光栅化的情况下,可能存在抽样点网格的、可以对其进行图元测试的多个细分。在这种布置中,可以为多个(例如,每个)光栅化分层级确定修改采样点网格,但在具体优选的实施方式中,至少在要利用图元的扩展形式来执行内覆盖测试的情况下,那么仅处于最低层级(例如,并且优选地处于像素级)的修改采样点网格例如并且优选地针对内覆盖测试来进行测试。

因此,在优选实施方式中,本发明将执行分层光栅化,以利用在图元设立级确定的修改的边缘信息来确定图元的外覆盖,但利用处于渲染输出区域细分(利用最小大小的渲染输出区域(例如像素))的最低级别(最大细分)的修改采样点网格,来测试内部覆盖(若需要的话)。

针对渲染输出区域的修改采样点组测试图元的修改形式,可以以任何合适和希望的方式来执行,例如,并且优选地根据正被执行的覆盖测试的形式。

虽然在这方面可以简单地针对图元的修改形式来测试修改采样点组中的每个(希望的)采样点(并且在一个优选实施方式中就是这样做的),但本申请人已经认识到,在某些情况下,实际上可能不需要针对图元的修改形式来测试用于给定渲染输出区域的每一个修改位置采样点。

例如,在利用如上所述的针对渲染输出区域的图元的扩展形式和修改采样点组来执行内覆盖测试的情况下,其中,该渲染输出区域的每个角部都具有与其相关联的两个修改位置采样点,本申请人已经认识到,如下面将进一步讨论的,针对该组中的修改位置采样位置中的恰当一个位置的覆盖测试的结果可以指示并且被视为指示,针对修改采样点组中所有采样点位置的覆盖测试结果。

因此,实际上可能仅需要针对扩展图元的每个边缘测试单个偏移采样点位置,以用于内覆盖确定的目的(与针对每个修改的图元边缘测试所有八个偏移采样点相比)。因此,可以通过(并且在优选实施方式通过)针对用于所讨论的渲染输出区域的该组一个或更多个(偏移)采样点中的特定的、优选为选定的、单个偏移采样点,测试每个扩展图元边缘,来执行针对渲染输出区域的内覆盖测试。

因此,在本发明的优选实施方式中,当要针对表示正被生成的渲染输出区域的修改的一组采样位置来测试图元的修改形式时,针对要测试的修改的图元的每个边缘,所述处理包括:

针对所述边缘,首先选择测试所述修改的一组采样点中的单个采样点,以确定所述边缘是否覆盖所述渲染输出的、由所述修改的一组采样点表示的区域,接着针对表示所述渲染输出的区域的所述修改的一组采样点中的所述选定采样点,来测试所述图元边缘,以及利用所述针对所述图元边缘测试所述选定采样点的结果(即,所述采样点是否被确定为被所述边缘覆盖(内部,或者其上或内部)),来确定所述图元边缘是否覆盖由所述修改的一组采样点表示的所述渲染输出区域。

优选地,针对修改的图元的每个边缘完成该测试,并且如果将该图元的每个边缘确定为,覆盖表示该渲染输出区域的该组修改采样点中的其相应选定采样点,则将与修改的该组采样点相对应的渲染输出区域确定为至少部分或完全被该图元覆盖(例如,取决于正被执行的测试)。

因此,在特别优选的实施方式中,当利用图元的扩展形式和修改采样点组(该修改采样点组使用用于表示给定渲染输出区域的每个角部的各对偏移采样点位置)来测试和执行内覆盖测试时,该图元的扩展形式出于内覆盖确定的目的,而针对扩展图元的每个边缘通过以下步骤进行测试:首先针对该边缘选择测试用于渲染输出区域的修改的该组采样点中的一个(单个),然后确定所选择的采样点是否通过针对该边缘的边缘测试(在该边缘内部(或在其上还是内部,取决于正被使用的边缘测试))。

这优选地针对扩展图元的每个边缘完成,并且当(并且仅当)针对扩展图元的每个边缘(针对所有边缘),相应选定采样点通过边缘测试(根据要被该图元覆盖的边缘确定)时,出于内覆盖测试的目的,所讨论的渲染输出区域然后优选地被确定为被所讨论图元完全覆盖。

即,仅当确定每个边缘都覆盖用于该区域的其相应所选偏移采样点时,该区域(例如,像素)将被标识为被该图元明确覆盖(而不管对该图元的尺寸的任何舍入影响)。如果所选择的偏移采样点中的任何一个没有被对应修改的图元边缘覆盖,那么就不能肯定地说该区域被该图元覆盖。

在这些实施方式中,被选择用于测试修改的图元的边缘的单个偏移采样点,可以以任何合适和希望的方式来选择。

被选择用于测试修改的图元的边缘的单个偏移采样点应当是,并且优选为:测试是否将指示修改的该组采样点中的所有采样点是否将被图元边缘覆盖的单个采样点。因此,被测试的所选单个偏移采样点优选地包括修改的该组采样点中的、最可能不在所讨论的图元边缘的内部(或者其上或内部)的采样点,即,修改的该组采样点中的、最可能不被所讨论的边缘覆盖的采样点。

在优选实施方式中,在针对边缘的内覆盖分析期间选择测试的偏移采样点是如下的偏移采样点,该偏移采样点将是如下的第一采样点,该第一采样点随着平行于该边缘的线沿该边缘的短轴方向,从用于该渲染输出区域的修改的该组采样点中的所有采样点之外的一位置、朝着该边缘所属于的图元的中心移动而交叉。

在优选实施方式中,基于所讨论的边缘的至少一个特征来选择要被测试的偏移采样点。优选地,要被测试的偏移采样点基于以下中的至少一个并且优选基于两者来选择:(修改的)图元边缘的长轴方向;和(修改的)图元边缘的斜率。

在具体优选的实施方式中,图元边缘可以具有的主轴方向和斜率的每个不同组合被限定为对应于要测试的特定偏移采样点位置。换句话说,每个特定采样点位置将具有与其相关联的长轴方向和斜率的不同组合,使得可以基于该边缘的长轴方向和斜率来选择要测试的偏移采样点位置。

可以以任何合适和希望的方式确定边缘的斜率和长轴方向。

在该边缘由形式为ax+by+c=0的线性方程限定的情况下,那么边缘的斜率和长轴方向优选地根据针对该边缘的线性方程中的常数“a”和“b”的值来确定。

优选地,比较常数“a”和“b”的绝对值(模数),并将其用于确定该边缘的长轴方向。

对应地,针对该边缘的线性方程中的常数“a”和“b”的符号被优选用于确定该边缘的斜率。

因此,在具体优选的实施方式中,在由形式为ax+by+c=0的线性方程表示边缘的情况下,那么使用常数“a”和“b”的绝对值和符号,来选择表示渲染输出区域的哪个偏移采样点被用来针对该边缘进行测试,以用于针对该渲染输出区域的覆盖测试目的。

在优选的这种实施方式中,修改的图元边缘的长轴方向用于选择表示正被考虑的渲染输出区域的一组八个偏移采样点中的具有四个偏移采样点的子集,并且用于该边缘的常数“a”和“b”的符号的特定组合,用于选择测试那四个偏移采样点中的哪一个(反之亦然)。

可以按任何合适和希望的方式来触发所述图形处理流水线来以本发明的方式操作。例如,需要图形处理的应用可以指示希望以本发明的方式进行处理,例如,通过发出针对该处理的恰当api函数调用。响应于针对来自所述应用的这种处理的这种调用,例如,用于正在执行图形处理流水线的图形处理器的驱动程序,将使该图形处理流水线以希望方式操作。

在这方面可以始终执行外覆盖确定和内覆盖确定,或者例如可以根据设定的恰当指示符(例如,标志)向图形处理流水线指示是需要外覆盖测试还是内覆盖测试,或者两者。例如,可以为单独图元和/或多组多个图元设定这种指示符,例如,用于指示该图元或多个图元是否应当经历外覆盖测试和/或内覆盖测试。

如上所述,在本发明的具体优选的实施方式中,通过修改的图元边缘的位置来生成图元的扩展形式,并将其用于执行针对该图元的保守光栅化外覆盖测试,然后还使用该图元的扩展形式来执行针对该图元的内覆盖测试(若需要的话),但利用表示各个渲染输出区域(例如,并且优选为像素)的修改的多组采样位置(其中采样位置具有修改位置的多组采样位置)。优选以上面讨论的方式执行利用修改的多组采样位置的内覆盖测试。

因此,在特别优选的实施方式中,本发明的方法包括以下步骤(并且所述图形处理流水线被设置成):

所述图元设立级使用所确定的边缘信息,来针对所述图元确定表示针对所述图元的边缘的、与所述图元的扩展形式相对应的修改位置的修改的边缘信息;

所述光栅化级使用针对所述图元的所述修改的边缘信息,通过以下步骤来针对正被生成的图形渲染输出的至少一个区域,确定所述图元是否至少覆盖所述渲染输出的所述区域:

利用针对所述图元的所述修改的边缘信息,确定所述图元是否覆盖来自表示所述正被生成的渲染输出的采样点网格的一组一个或更多个采样点中的至少一个采样点,所述至少一个采样点表示所述渲染输出的所述区域;并且

所述光栅化级使用针对所述图元的所述修改的边缘信息,通过以下步骤来确定针对正被生成的图形渲染输出的至少一个区域,所述图元是否完全覆盖所述渲染输出的所述区域:

利用针对所述图元的所述修改的边缘信息,确定所述图元是否覆盖一组一个或更多个采样点中的至少一个采样点,所述至少一个采样点表示所述渲染输出的所述区域,表示所述渲染输出区域的所述一组一个或更多个采样点中的所述采样点的位置相对于所述采样点网格中的、针对表示正被生成的所述渲染输出的渲染输出区域的采样点的位置偏移。

优选地,确定图形渲染输出区域是否被利用表示所述渲染输出区域的偏移(修改)的所述一组采样位置的图元完全覆盖的步骤按上述方式来执行,即,通过以下步骤来执行:针对所述图元的每个边缘选择测试用于所述渲染输出区域的修改的该组采样位置中的单个采样位置。对应地,在确定图元是否至少部分覆盖渲染输出区域的情况下,优选地,所述测试还包括确定表示渲染输出区域的该组采样点中的至少一个采样点是否被针对图元的边界框(优选地如上所述导出)覆盖。

从上面可以清楚,在每个渲染输出区域由一组多个采样位置表示的情况下,例如,针对该渲染输出区域的每个角部的一个,那么当测试渲染输出区域的外覆盖和内覆盖时,所述光栅化级针对该图元的每个边缘将需要针对外覆盖来执行多次采样点覆盖测试(例如,针对表示该渲染输出区域的该组采样点中的每个采样点执行一次测试),而针对内覆盖执行至少一次采样点覆盖测试(例如,针对选定修改采样点执行一次测试)。

例如,在每组采样点包含例如按关联渲染输出区域的角部设定的四个采样点的情况下,该光栅化级将针对每个边缘执行如下步骤:针对外覆盖执行四次覆盖测试,即,针对每个采样点执行一次测试,而针对内覆盖执行(至少)一次覆盖测试,即,针对所选定的偏移采样点执行一次测试,这等于该图元的每边缘每区域执行总共五次采样点测试。

然而,本申请人已经认识到,如果该光栅化级被配置成并行处理多组多个连续渲染输出区域(例如,多组2×2个区域),那么与单独处理(测试)每个区域相比,因为这种组中的区域将与该组中的相邻区域共享至少一些边,并由此还共享采样点,所以其可以用于减少将被执行以确定该组区域中的区域被图元覆盖的采样点覆盖测试的总数。

特别地,本申请人已经认识到,该组中的区域将具有至少一些共有采样点,并且在确定外覆盖时,针对用于边缘的该组多个区域,那些共有采样点可以仅被测试一次,而不是必须针对该组内的每个区域测试一次(即,针对共有采样点的边缘的覆盖测试的结果可以共用于该组的、共享所讨论采样点的每个区域,至少在确定针对一图元的外覆盖时)。

例如,在多组2×2(因此总共四个)区域中处理渲染输出区域并且针对每个区域使用四个角部采样点的情况下,对于该图元的边缘来说,针对外覆盖可以仅执行九次采样点边缘测试,而针对内覆盖可以仅需要执行(至少)四次测试。因此,在实施方式中,将针对该图元的每个边缘(每边缘)执行每组四个待处理区域的总共十三次采样点测试,而不是(至少)20次采样点测试,如果每个区域都分离进行测试(处理),那么情况将会如此。

因此,在具体优选的实施方式中,光栅化处理被配置成(并操作以)针对修改的图元的边缘并行地(在一个(并且相同的)测试周期中)测试一组(和多组)多个渲染输出区域。

对于多组多个渲染输出区域,这优选地完成(重复)。

优选地,光栅化器被配置成,针对一组多个区域并行(在单个周期中)测试针对边缘的外覆盖和内覆盖两者。

对应地,在具体优选的实施方式中,该光栅化处理被配置成,针对修改的图元的边缘并行(在一个(在同一)测试周期中)测试表示该渲染输出的一组多个区域的多组采样点。

因此,在具体优选的实施方式中,利用针对图元的修改的边缘信息来确定该图元是否覆盖来自表示正被生成的渲染输出的采样点网格的一组一个或更多个采样点中的至少一个采样点(该至少一个采样点表示渲染输出的一区域)的步骤包括:针对多组一个或更多个采样点中的采样点,并行测试如由用于该图元的修改的边缘信息所指示的该图元的“修改”边缘,每个组都表示所述渲染输出的一组多个(优选为连续的)区域中的渲染输出区域,并且并且利用该测试的结果来确定该图元是否至少部分覆盖渲染输出的该组区域中的任何渲染输出区域(即,确定该图元的外覆盖(确定该图元是否至少部分覆盖任何渲染输出区域))。

在特别优选的这种实施方式中,在该组渲染输出区域包括2×2个区域集,并且每个区域由一组四个采样点表示的情况下,那么来自表示该组区域的多组采样点的采样点包括表示该区域的角部的九个采样点。

在这些布置中,来自所述多组一个或更多个采样点中的、表示渲染输出的所述一组多个区域中的区域的采样点应当,并且优选地包括:对于所述多组采样点中的、表示所述一组多个区域中的区域的至少两组采样点共有(对于该组中的至少两个区域共有)的至少一个采样点(并且优选为多个采样点)。那些共有(共享)采样点针对所述图元边缘仅被测试一次,针对确定共享该采样点的区域是否至少部分被该图元覆盖(或者作为其一部分),将共有采样点的该单个测试的结果共同用于共有采样点的区域。

优选地还针对该组的每个区域,来测试一采样点或多个采样点(并且优选为仅单个采样点),出于确定该图元是否完全覆盖该组的区域的目的(以确定该图元的内部覆盖)。这种内覆盖测试在一个实施方式中与外覆盖测试并行(在与之相同的测试周期中)执行。

然而,在另选实施方式中,内覆盖测试在外覆盖测试之后(并且例如有条件地基于该结果)来执行。例如,如果外覆盖测试的结果指示用于外覆盖测试的采样点全部或者都未(或者仅一个)被覆盖,那么,这可以,并且在实施方式中被视为对该图元边缘不需要内覆盖测试的指示。因此,根据实施方式,用于执行针对边缘的内覆盖测试的条件是:针对外覆盖确定而被测试的一个以上但不到全部的采样点被该图元边缘覆盖。对应地,用于不执行针对边缘的内覆盖测试的条件是:针对外覆盖确定而被测试的没有、仅一个或者全部采样点被该图元边缘覆盖。

对于确定内覆盖的情况来说,每个区域优选分开测试(即,每个区域具有其自己的、被测试并且不与该组中的其它区域共享或共同使用的一个或多个采样点)。如上所述,出于确定针对该组中每个区域的内覆盖的目的,优选的是单一的、修改位置的采样点被测试。

针对边缘并行地对多个渲染输出区域进行这种测试可以如上所述,减少将要执行以测试多个输出区域的边缘测试的数量,并因此例如,减少针对光栅化处理而使用(提供)的样本测试级的数量,和/或将要执行的边缘测试周期的数量。因此,其可以允许将更少硬件用于光栅化处理,例如,通过不必提供额外的采样测试级(“测试程序”)来促进额外采样测试周期。对应地,根据图形处理流水线所使用的架构以及每个测试周期可以执行多少个采样点测试,其可以允许在单个测试周期中执行用于该组区域的内覆盖和外覆盖的所有采样点测试(针对边缘)。

并行测试的该组(并且每一组)多个渲染输出区域可以包括任何合适组的多个渲染输出区域,其例如,并且优选地,在表示正被生成的渲染输出的采样点网格中共享一个或更多个采样位置。优选地,该组渲染输出区域包括一组连续输出区域,并且优选地为矩形(包括正方形)的一组渲染输出区域(特别是在渲染输出区域本身是矩形(包括正方形)的情况下)。在优选实施方式中,一组(并且优选每组)渲染输出区域包括2×2组渲染输出区域。

在具体优选的实施方式中,并行(在单个周期中)测试的渲染输出区域的数量被选择并配置成允许光栅化级在单个测试周期中完全测试图元边缘的外覆盖和内覆盖两者。这例如对应地取决于光栅化级的架构和配置,并且具体地取决于光栅化级被配置成能够在单个周期中执行的边缘采样点测试的次数。

例如,在其中光栅化级被配置成能够在单个测试周期期间执行十六次采样点覆盖测试的情况下,那么在具体优选的实施方式中,具体在每个渲染输出区域由所述一组四个采样点表示的情况下,并行测试的多组多个渲染输出区域包括多组四个渲染输出区域,并且优选为多组2×2渲染输出区域。

尽管上面主要参照单个图元的处理对本发明进行了描述,但是如本领域技术人员应当清楚的,本发明可以,并且优选地用于多个图元,例如,并且优选地,用于要渲染的一组多个图元中的每个图元。在这种情况下,将为每个图元提供恰当的一组顶点(尽管根据需要,图元可以共享顶点),并且将分别针对多个图元并且优选地针对每个图元来执行采用本发明的方式的处理。因此,本发明可以关于针对正被生成的渲染输出而生成的任一个或更多个图元来执行。

优选地,以本发明的方式处理的图元是已经被确定需要出于生成正被生成的渲染输出的目的而光栅化的图元,如已经由图形处理流水线确定(例如,在更早的测试级)落入正被生成的全部或一渲染输出区域的视锥(viewfrustum)内的图元。

应当清楚,图元设立级可以(并且在实施方式中)被配置成,生成除了针对图元的边缘信息之外的其它数据,例如,并且优选地,基于表示限定要由图形处理流水线渲染的图元的顶点的信息。该其它信息例如可以包括针对该图元的深度方程和重心插值方程。

本发明可以用于任何形式的输出,图形处理流水线可以用该任何形式的输出来进行生成。在优选实施方式中,其在图形处理流水线用于生成用于显示的图像时使用,但其可以用于图形处理流水线可以根据需要生成的任何其它形式的图形处理输出,如渲染至纹理操作的图形纹理等。

图形处理流水线可以根据需要实现。在优选实施方式中,其借助于实现并执行图形处理流水线的图形处理器来实现。在具体优选的实施方式中,图形处理流水线(和图形处理器)是包括主处理器的整个图形处理系统的一部分,该主处理器执行可能需要图形处理流水线和图形处理器进行图形处理的应用。

本发明可以用于任何合适和希望的图形处理系统和流水线,且与其一起使用。

本发明特别适于与图块化渲染器(基于图块的图形处理系统)一起使用。因而,在优选实施方式中,该图形处理流水线是基于图块化的图形处理流水线。

该图形处理流水线可以包括,并且优选地包括:图形处理流水线通常可以包括的任一个或更多个并且优选为全部处理级。因此,例如,该图形处理流水线优选地包括图元设立级、光栅化器以及渲染器。在优选实施方式中,该渲染器采用可编程片段着色器的形式,或者包括可编程片段着色器。

该图形处理流水线优选地还包括一个或更多个可编程着色级,如以下中的一个或更多个,并且优选为全部:顶点着色级、外壳着色器、曲面细分(tessellation)级(例如,在通过执行着色器程序来执行曲面细分的情况下)、域(评估)着色级(着色器)、几何着色级(着色器),以及片段着色器。

图形处理流水线还可以包含:该图形处理流水线可以包含的任何其它合适和希望的处理级,如深度(或深度和模板)测试器、混合器(blender)、一个或多个图块缓冲器、写输出单元等。

在具体优选的实施方式中,本发明的各种功能在生成并输出所渲染片段数据(其例如被写入至用于显示装置的帧缓冲器)的单一图形处理平台上执行。

该图形处理流水线优选地还包括存储在此描述的数据和/或存储用于执行在此描述的处理的软件的、一个或更多个存储器和/或存储器装置,和/或与所述一个或更多个存储器和/或存储器装置通信。该图形处理流水线还可以与主机微处理器,和/或与用于基于通过图形处理流水线生成的数据来显示图像的显示器通信。

在具体优选的实施方式中,本发明的各种功能在生成并输出所渲染片段数据(其例如被写入至用于显示装置的帧缓冲器)的单一图形处理平台上执行。

本发明可以在任何合适的系统中实现,如基于适当配置的微处理器的系统。在一些实施方式中,本发明在计算机和/或基于微处理器的系统中实现。

本发明的各种功能可以按任何希望和合适方式来执行。例如,本发明的功能可以如所希望地按硬件或软件来实现。由此,例如,本发明的各种功能性部件、级以及“装置”可以包括合适的处理器或多个处理器、控制器或多个控制器、功能性单元、电路、处理逻辑、微处理器布置等,其可操作以执行各种功能等,如可以被编程成按希望方式操作的适当专用的硬件部件(处理电路)和/或可编程硬件部件(处理电路)。

在此,还应注意到,如本领域技术人员应当清楚,本发明的各种功能等可以在指定处理器上复制和/或并行执行。同等地,若希望的话,各种处理级可以共用处理电路等。

而且,本发明的处理级中的任一个或更多个或全部,可以被具体实施为处理级电路,例如,采用一个或更多个固定功能单元(硬件)(处理电路)的形式,和/或采用可编程处理电路(其可以被编程成执行希望操作)的形式。同等地,本发明的处理级和处理级电路中的任一个或更多个可以被设置为,针对其它处理级或处理级电路中的任一个或更多个的分离电路部件,和/或这些处理级和处理级电路中的任一个或更多个或全部,可以至少部分地由共用处理电路形成。

本领域技术人员还应清楚,本发明的全部描述实施方式在合适时候,可以包括在此描述的优选和可选特征中的任一个或更多个或全部。

根据本发明的方法可以至少部分地利用软件(例如,计算机程序)来实现。由此,可以看到,当从另一些实施方式看时,本发明提供:当安装在数据处理装置上时具体适于执行在此所描述的方法的计算机软件;计算机程序部件,该计算机程序部件包括当在数据处理装置上运行该程序部件时用于执行本文所述方法的计算机软件代码部分;以及计算机程序,该计算机程序包括当在数据处理系统上运行该程序时适于执行本文所述的方法的全部步骤的代码。该数据处理系统可以是微处理器、可编程fpga(现场可编程门阵列)等。

本发明还扩展至包括这种软件的计算机软件载体,其在用于操作包括数据处理装置的图形处理器、渲染器或其它系统时,使与数据处理装置、处理器、渲染器或系统结合地执行本发明的方法的步骤。这种计算机软件载体可以是物理存储介质,如rom芯片、cdrom、ram、闪速存储器,或磁盘,或者可以是信号,如导线传输电子信号、诸如卫星的光学信号或无线电信号等。

还应清楚,不是本发明的方法的所有步骤都需要通过计算机软件来执行,并由此,根据另一宽泛的实施方式,本发明提供了用于执行本文所述的方法的步骤中的至少一个步骤的计算机软件和安装在计算机软件载体上的这种软件。

因此,本发明的装置可以适当地具体实施为,供与计算机系统一起使用的计算机程序产品。这种实现可以包括在诸如计算机可读介质(例如,软盘、cdrom、rom、ram、闪速存储器,或硬盘)的有形非暂时介质上固定的一系列计算机可读指令。其还可以包括可通过有形介质(包括但不限于光学或模拟通信线路),或者利用无线技术(包括但不限于微波、红外线或其它传输技术)无形地,经由调制解调器或其它接口装置传送至计算机系统的一系列计算机可读指令。该系列计算机可读指令具体实施先前在此描述的全部或部分功能。

本领域技术人员应当清楚,这种计算机可读指令可以采用许多编程语言来编写,以供随许多计算机架构或操作系统一起使用。而且,这种指令可以利用当前或将来的任何存储器技术来存储,包括但不限于半导体、磁性、或光学,或者利用当前或将来的任何通信技术来传送,包括但不限于光学、红外线或微波。设想的是,这种计算机程序产品可以分布为具有附随打印或电子文档(例如,收缩包装软件)的可去除介质,利用计算机系统预先加载(例如,预先加载在系统rom或固定盘上),或者通过网络(例如,因特网或万维网)从服务器或电子公告板分布。

附图说明

下面,仅通过示例的方式并且参照附图,对本发明的优选实施方式进行描述,其中:

图1示意性地例示了示例性图形处理流水线;

图2示意性地例示了典型计算机图形处理系统;

图3示意性地例示了在执行外覆盖确定时保守光栅化背后的一般概念;

图4示意性地例示了根据本发明的实施方式的扩展图元;

图5示意性地例示了根据本发明实施方式的、以分层方式执行保守光栅化处理的外覆盖测试的方法;

图6示意性地例示了在执行内覆盖确定时保守光栅化背后的一般概念;

图7示意性地例示了根据本发明的实施方式的执行保守光栅化处理的内覆盖分析的方法;

图8示意性地例示了根据本发明的实施方式的、用于在内覆盖分析期间选择测试要针对图元的每个边缘进行测试的偏移采样点的处理;

图9是示意性地例示根据本发明的实施方式的保守光栅化方法的流程图;

图10示意性地示出了根据本发明实施方式的基于图块的图形处理流水线的操作;以及

图11示意性地示出了当被配置成并行测试多组2×2个连续渲染输出区域时的光栅化级的操作。

相同标号在合适情况下被用于图中的相同组件。

具体实施方式

本发明和本实施方式涉及计算机图形处理。

在要显示计算机图形图像时,其通常首先被定义为一系列图元(多边形),所述一系列图元接着依次被划分(光栅化)成用于图形渲染的图形片段。在正常图形渲染操作期间,渲染器将修改与每一个片段相关联的(例如)颜色(红、绿以及蓝rgb)和透明度(alpha,a)数据,以使可以正确显示该片段。一旦该片段已经完全经过渲染器,那么,它们的关联数据值就存储在存储器中,准备输出,例如用于显示。

通常按流水线方式来执行图形处理,并且一个或更多个流水线级针对数据进行操作,以生成最终渲染输出,例如,被显示的帧。

图1示出了示例性图形处理流水线10。

图1所示图形处理流水线10是基于-图块(tile-based)的渲染器,并由此其将生成渲染输出数据阵列的图块,如要生成的输出帧。

图1示出了图形处理流水线的主要部件和流水线级。如本领域技术人员应当清楚,可以存在图1中未例示的图形处理流水线的其它部件。在此还应注意到,图1仅是示意性的,而且例如,实际上,所示功能性单元和流水线级可以共用有效硬件电路(significanthardwarecircuit),即使它们在图1中被示意性地示出为分离级。还应清楚,如图1所示的图形处理流水线的每一个级、部件以及单元等都可以如所希望地实现,并因此例如包括用于执行必需操作和功能的恰当电路和/或处理逻辑等。

图1所示图形处理流水线10包括多个级,包括顶点着色器200、外壳着色器201、曲面细分器(tesselator)202、域着色器203、几何着色器204、图块化器(tiler)205、光栅化级206、早期z(深度)和模板测试级207、采用片段着色形式的渲染器级208、后期z(深度)和模板测试级209、混合级210、图块缓冲器211、以及降频采样与写出(多重采样分辨)级212。

顶点着色器200采取与针对要生成的输出所限定的顶点等相关联的输入数据值(顶点属性值),并且通过图形处理流水线1的随后级来处理那些数据值,以生成供使用的一组对应“顶点着色”输出数据值。

针对由图形处理流水线生成的给定输出,通常是针对所讨论的输出而限定一组顶点。然后,要针对该输出处理的图元将被指示为,包括正被生成的图形处理输出的顶点组中的给定顶点。

顶点着色操作进行操作,以将用于每个顶点的属性变换成用于后续图形处理操作的希望形式。例如,这可以包括:将顶点位置属性值从它们初始被限定的世界或用户空间变换至要显示图形处理系统的输出的画面空间,修改输入数据以解决要渲染的图像中的光照影响等。

如上提到,例如顶点着色操作也可以将最初限定的顶点位置坐标转换成不同的(例如,较低精度)形式,以供稍后在图形处理流水线中使用。

外壳着色器201针对多组修补(patch)控制点执行操作,并且生成已知为修补常数的附加数据。曲面细化级202细分几何形状,以创建外壳的更高-级表述,并且域着色器203针对由曲面细化级输出的顶点执行操作(类似于顶点着色器)。几何着色器204可以(若运行的话)生成图元(如三角形、点或线)以供处理。

一旦要渲染的所有图元都被恰当处理,例如,变换和/或例如由几何着色器生成,出于处理的目的,图块化器205然后确定哪些图元需要针对已经将渲染输出所划分成的每个图块来进行处理。要做到这一点,图块化器205将要处理的每个图元的位置与图块位置进行比较,并将该图元添加至其确定该图元可能(潜在地)落入其内的、针对每个图块的相应图元列表。用于将图元分类和合并(binning)成图块列表的任何合适和希望的技术(如精确合并,或边界框合并(boundingboxbinning)或其间的任何事物)都可以用于图块化处理。

在使用边界框合并的情况下,在本实施方式中,当保守光栅化正被执行时,图块化器205生成并用作用于图块化处理的图元的边界框,一边界框具有尺寸和基于针对该图元的“对齐”顶点位置的位置,加上稍后要在图形处理流水线中使用的、沿采样点网格的每个轴向的两个方向中的向外方向的偏移量(误差容限)。下面将对其加以进一步讨论。

一旦图块化器已经完成图元图块列表的准备(要针对每个图块加以处理的图元的列表),则可以渲染每个图块。

要做到这一点,每个图块由图1中所示的在图块化器205之后的图形处理流水线级来处理。

因此,当给定图块正被处理时,将要针对该图块(针对该图块的图块列表中所列出的)处理的每个图元被传递至光栅化器206。

图形处理流水线10的光栅化级206操作,以将图元光栅化成单独图形片段以供处理。

要做到这一点,光栅化器206(特别是光栅化器206的图元设立级81)操作,以根据提供给图元设立级81的顶点着色顶点来确定表示要被光栅化的图元的每个图元边缘的边缘信息。该边缘信息然后被传递至光栅化器206的光栅化级82,其针对采样点光栅化该图元,并且生成用于渲染该图元的具有恰当位置(表示恰当采样位置)的图形片段。

(应当清楚,尽管图1示出了作为单个光栅化单元(图1的光栅化器206)的一部分的图元设立级81,但这不是必需的。图元设立级可以与光栅化器206分离,例如,在处于(例如恰好)在光栅化器206之前但在图块化器205之后的图形处理流水线级处)。

通过光栅化器生成的片段接着被向前发送至流水线的其余部分以供处理。

早期z/模板级207针对其从光栅化程序206接收的片段执行z(深度)测试,以查看在该级是否可以丢弃(剔除)任何片段。要做到这一点,其对从光栅化程序206发出的片段(和其相关联)的深度值与已经渲染的片段的深度值(这些深度值被存储在作为图块缓冲器211的一部分的深度(z)缓冲器中)进行比较,以确定新的片段是否会被已经渲染的片段遮蔽(或者不遮蔽)。同时,执行早期模板测试。

通过片段早期z和模板测试级207的片段接着被发送至片段着色级208。该片段着色级208针对通过早期z和模板测试的片段执行恰当的片段处理操作,以处理该片段来生成恰当的渲染片段数据。

该片段处理可以包括:任何合适和希望的片段着色处理,如针对片段执行片段着色器程序、向片段应用纹理、向片段应用雾化或其它操作等,以生成恰当的片段数据。在本实施方式中,片段着色级208采用着色器流水线的形式(可编程片段着色器)。

因而,存在“后期”片段z和模板测试级209,尤其是,其针对着色片段执行流水线深度测试的一端,以确定是否实际上在最终图像中看到渲染片段。通过比较从片段着色级208发出的片段(和其相关联)的深度值与已经渲染的片段的深度值(如存储在深度缓冲器中),针对存储在图块缓冲器211的z缓冲器中的片段位置,该深度测试使用z-缓冲值,以确定用于新片段的片段数据是否应当替换已经渲染的片段的片段数据。该后期片段深度和模板测试级209还针对片段执行任何必需的“后期”alpha和/或模板测试。

通过后期片段测试级209的片段接着在混合器210中经受(若需要的话)与已经存储在图块缓冲器211中的片段的任何必需混合操作。针对片段必需的任何其它剩余操作(如抖动(dither)等)(未示出)也在该级执行。

最后,(混合的)输出片段数据(值)从它们例如可以被输出至用于显示的帧缓冲器213的地方,写入至图块缓冲器211。用于输出片段的深度值还被恰当地写入至图块缓冲器211内的z-缓冲器。(图块缓冲器存储颜色和深度缓冲,其针对该缓冲器表示的每一个采样点(本质上,针对被处理的图块的每一个采样点)分别存储恰当颜色等,或z-值)。这些缓冲器存储表示总渲染输出的一部分(图块)的一批片段数据(例如,要显示的图像),并且缓冲器中的相应组的采样值对应于总渲染输出的相应像素(例如,每2×2组的采样值可以对应于输出像素,其中,使用4x多重采用)。

图块缓冲器被设置为ram的一部分,其位于图形处理流水线(芯片)上。

来自图块缓冲器211的数据被输入至降频采样(多重采样分辨)写出单元212,并且从该处输出(写回)至外部存储器输出缓冲器,如显示装置(未示出)的帧缓冲器213。(该显示装置例如可以包括包含像素阵列的显示器,如计算机监视器或打印机)。

该降频采样与写出单元212降频采样存储在图块缓冲器211中的片段数据,直至用于输出缓冲器(装置)的恰当分辨率(即,使得生成与输出装置的像素相对应的一批像素数据),以生成用于输出至输出缓冲器的输出值(像素)。

一旦渲染输出的图块已经被处理,并且其数据被导出至主存储器(例如,主存储器中的帧缓冲器213)以供存储,就接着处理下一图块,等等,直到处理了足够图块以生成全部渲染输出(例如,要显示的帧(图像))为止。接着,针对下一渲染输出(例如,帧)重复该处理等等。

用于图形处理流水线的其它布置当然是可以的。

如图1所示的图形处理流水线将在恰当的图形处理单元(gpu)(图形处理器)上执行和通过该图形处理单元执行,该图形处理单元包括可操作以执行图形处理流水线级的必要功能单元,处理电路等。

为了控制正在实现图形处理流水线,以执行希望图形处理流水线操作的图形处理器(图形处理单元),图形处理器通常将接收来自驱动器的命令和数据(例如,在主处理器上执行),其向图形处理器指示其要执行的操作以及要用于那些操作的数据。

因此,如图2所示(其示出了典型计算机图形处理系统),在主处理器310上执行的诸如游戏这样的应用320(其需要通过关联图形处理单元(图形处理流水线)330来执行的图形处理操作)将生成恰当的api(应用编程接口)调用,其通过运行在主处理器310上的用于图形处理器330的驱动器340来解释,以生成针对图形处理器330的恰当指令,从而生成该应用320所需的图形输出。为促进这件事,响应于来自运行在用于图形输出(例如,用于生成要显示的帧)的主系统310上的应用320的指令,将一组“指令”提供给图形处理器330。

如上所述,本发明具体涉及在执行所谓的“保守光栅化”时,图形处理流水线(如图1所示流水线)的操作。

保守光栅化是一种光栅化的形式,其被执行以尝试考虑和降低被光栅化的图元的位置和尺寸方面的任何舍入误差的影响,例如与如在需要图图形处理的应用中限定的和由其限定的图元的位置和尺寸相比。如上所述,因为例如来自图元的顶点坐标可以从浮点格式转换成用于光栅化处理的定点格式等,所以可能出现图元尺寸方面的这种误差。

如上所述,保守光栅化通常有两个方面:“外覆盖”,其要标识明确在图元之外的那些渲染输出区域(例如,像素),而不管对图元的位置的任何舍入影响;和“内覆盖”,其要标识明确被图元覆盖的那些渲染输出区域(例如,像素),而不管图元位置上的任何舍入影响。

图3例示了在执行外覆盖确定时保守光栅化背后的一般概念。

图3示出了要生成的渲染输出的十六个渲染输出区域11(在这种情况下对应于像素)的示例性阵列1。

如图3所示,像素阵列1被采样点25的网格覆盖,该采样点网格25可以并且将被光栅化级使用,以测试渲染输出的哪些区域(例如,像素)被图元覆盖。该网格中的采样点以像素间距(像素大小)的给定分数间隔开22。在图3中,为清楚起见,该网格中的采样点被示出为间距1/4像素。在实践中,可以使用更高分辨率的采样点网格,例如,其间距对应于“对齐”顶点位置网格中的相邻顶点位置之间的间距,例如,像素的1/256的间距。而且,为清楚起见,图3仅示出了该网格的一些采样点25。

图3还示出了要被光栅化和渲染以便生成表示该图元的最终像素数据的示例性图元12(以三角形的形式)。图3示出了在其顶点16、17、18已经从其最初限定的(例如,浮点)位置转换(对齐)到(例如,定点格式)低精度顶点位置网格之后的图元12。

光栅化处理将图元12(其位置)映射至像素阵列11,以确定像素阵列11中的哪些像素至少部分地被图元12覆盖。光栅化处理将针对被确定为至少部分被覆盖的每个像素,而生成表示图元12的图形片段(然后渲染那些片段,以确定每个覆盖像素应当具有的外观(例如,就其颜色等而言),以表示该像素处的图元12)。

在图3所示示例中,如上提到,当图元原始顶点对齐到低精度顶点位置网格时,可以在该图元12的精确尺寸中引入误差。这样,图3中所示的图元12的顶点16、17、18的“对齐”位置,在该顶点被转换成用于光栅化处理的低精度(例如,定点)坐标形式之前可能不精确对应于图元的顶点位置。图3中通过图元12周围的阴影区域13(所谓的“不确定区域”),例示了图元12的精确尺寸中的这种“不确定性”。不确定区域13包括图元可以至少部分覆盖的所有可能的像素位置,以考虑图元12的尺寸中的潜在误差。不确定区域13的外边缘14表示图元12的尺寸中的沿“向外”(“扩展”)方向的最大潜在误差。

如可以在图3中看出,如果不解决图元尺寸中的潜在误差13(使得图元12在没有限定不确定区域的情况下进行光栅化),那么像素15可能被标记为未被图元12覆盖,假定图元12的“对齐”形式不延伸到对应于像素15的区域中。

然而,当在光栅化处理期间考虑图元尺寸的潜在误差时,例如,通过扩展图元的边缘以解决图元12的位置中的潜在误差13,可以看出,图元12将被标识为(潜在地)延伸到对应于像素15的区域中,使得将针对像素15生成表示该图元的一个或多个片段。这在图3中根据不确定区域13延伸到对应于像素15的区域中的事实而清楚。

保守光栅化外覆盖测试旨在为至少部分被图元覆盖的所有像素生成碎片,从而考虑图元尺寸的潜在误差。因此,如果使用保守光栅化来对图3的布置中的图元进行光栅化,那么被不确定区域13的外边缘14至少部分覆盖的所有像素将被标记为被图元12覆盖。这些覆盖像素由图3中的大灰色方块例示。

在本实施方式中,图形处理流水线被配置成,通过以下步骤来执行保守外覆盖光栅化:在图元设立级处,通过将该图元的边缘(如根据提供给图元设立级的表示该图元的“对齐”顶点位置确定的)相对于那些确定边缘沿向外方向(远离该图元的中心位置)移动,来生成考虑图元尺寸中的潜在误差的恰当不确定区域13,从而生成要光栅化的图元的修改(并且具体为扩展)形式。

要做到这一点,(图形处理流水线的)光栅化器206的图元设立级81首先利用针对该图元的“对齐”顶点位置来确定该图元的边缘位置,接着从其中确定新的修改的边缘信息,其表示已经向外移动的图元边缘(相对于初始确定的图元边缘,远离该图元的中心位置)。

具体而言,图元设立级81利用针对图元12的顶点信息,来确定针对该图元边缘的形式为ax+by+c=0的线性方程,根据其边缘函数确定该边缘的长轴(通过考虑系数a和b的绝对量值(模量),然后沿着每个边缘的短轴方向向外移动该边缘达对应于希望“不确定”偏移的选定量,以提供该图元的经修改的扩展形式。

在本实施方式中,该偏移量被选择和设定成,与该图元利用如针对该图元最初限定的顶点位置(例如,采用浮点格式)限定的情况相比,(尝试)解决该图元尺寸方面的任何潜在误差。

图4例示了这一点,并且示出了最初确定的图元12,连同该图元的经修改的扩展形式14,其中每个图元边缘已经向外移动,以便创建围绕图元12的不确定区域13。

如图4所示,每个图元边缘沿其短轴方向向外移动达偏移量23,以创建具有不确定区域13的图元扩展形式14。

图元边缘被偏移的量23将例如取决于最初限定的顶点位置如何对齐顶点位置网格。

例如,在一些布置中,最初限定的顶点对齐顶点位置网格,使得每个位置被舍入成网格中其最近的顶点位置,并且在“对齐”顶点的位置引入的最大误差是该网格中分隔两个相邻顶点位置的距离的一半。因此,在这种布置中,图元边缘的位置应当偏移的最小量等于网格中分隔两个相邻顶点位置的距离的一半。

用于将最初限定的顶点位置对齐顶点位置网格的其它布置当然是可行的,并且在这样的布置中应当相应地设定图元偏移量23。

在本实施方式中,偏移量23被设定成等于顶点位置网格中分隔相邻顶点位置的距离22的一半。这对应于:仍然足够大以涵盖图元12的顶点位置沿向外方向的任何潜在误差的最小偏移量

(在其中光栅化器使用16.8定点顶点位置坐标表示并且浮点顶点坐标对齐16.8定点坐标的情况下,使得转换(对齐)的顶点位置间距将是一像素的1/256,那么最小偏移值将是一像素的1/512)。

偏移23可以大于顶点位置网格中分隔相邻顶点位置的距离22的一半(若需要的话)。例如,在其它实施方式中,该图元边缘被偏移达如下最小偏移量的两倍,该最小偏移量仍然足够大以涵盖图元12的顶点位置沿短轴方向的任何潜在误差,例如,一像素的1/256。

如图4所示,向外偏移图元边缘的效果是,与正确地在图元周围提供希望的不确定区域所需的相比,所修改的图元14的顶点(即,有效顶点)可以位于进一步远离被对齐顶点位置的位置处(由图元设立级所使用的顶点位置级以确定初始边缘信息)。

为了考虑这种情况,如图4所示,图元设立级还构建围绕扩展图元14的边界框31,其表示图元顶点位置处的不确定区域的希望外限。如图4所示,这接着具有如下效果:去除(“裁剪”)扩展图元14的从对齐顶点起,延伸达大于希望不确定性偏移量的任何部分。

如可以从图4看出,通过沿每个轴向扩展与未修改的图元12对应的边界框达一恰当的不确定性偏移量24来构造边界框31,使得每个顶点相应地被对应于希望不确定性偏移量(但不大于该不确定性偏移量)的向外不确定区域围绕。在本实施方式中,沿每个轴向的不确定性偏移量24对应于最小偏移值,例如,一像素的1/512。

(如上所述,这样的扩展边界框31也可以在图块化图元时使用(而不是利用被精确地配置成图元12的大小(针对图元的非扩展形式)的边界框),并且在这种情况下,图形处理流水线的图块化级可以被配置成为此构建边界框)。

一旦确定了图元的扩展形式14及其边界框31,接着就将该图元的扩展形式14及其边界框31针对采样点网格进行光栅化,以确定图元12的扩展形式14的哪些像素至少部分被覆盖。如果图元12的扩展形式14被确定成至少部分覆盖一像素,那么针对该像素生成用于渲染图元12的适当片段。

要做到这一点,渲染输出的各个区域由多组多个采样点表示(在这种情况下,包括所讨论的区域的每个角部处的采样点),并且对于要针对图元进行测试的每个这种组的采样点来说,对图元的扩展形式14的边缘进行测试,以确定该图元是否覆盖所讨论组中的任何采样点。还确定该组中的至少一个采样点是否落入针对该图元的扩展形式14的边界框31内。

在本实施方式中,光栅化级206是分层光栅化器,其操作以针对渲染输出范围的逐渐变小的正方形区域直到对应于单个像素的最小区域大小(其例如可以被光栅化成2×2片段组),来迭代地测试图元,丢弃未被该图元覆盖(至少部分地覆盖)的任何区域。

图5例示了这一点,并且示出了该渲染输出的、覆盖2×2像素范围的较大区域43的相应测试,连同单独像素42的随后测试。

光栅化器将首先针对渲染输出的较大区域43来测试针对图元的修改边缘14(其轮廓化该图元周围的不确定区域13),以查看该渲染输出的较大区域43是否至少部分被该图元的扩展形式覆盖。

如果发现该较大区域43根本未被该图元覆盖,那么区域43将不会针对所讨论的图元加以进一步处理(即,针对所讨论的图元丢弃整个区域),并且针对该图元测试另一(下一)更大区域,等等。

另一方面,如果发现该较大区域43至少部分被该图元覆盖,那么该区域43将被细分成其更小区域(在这个例子中,为像素),并接着针对该图元,对应地测试每个被覆盖的更小区域(像素)。

因此,如在图5所示示例中,该图元至少部分覆盖该渲染输出的、包围该较大区域43的像素组中的像素之一(像素42)(即,该图元被发现至少部分覆盖该较大区域43),将该较大区域43细分为其单独像素,然后针对该图元的扩展形式测试被覆盖像素42。由于像素42对应于最小渲染输出区域大小,即,像素修补大小,该图元根据其对像素42的确定覆盖,而被光栅化成针对像素42的渲染用片段。

在本实施方式中,由对应于该区域的角部的一组四个采样位置来表示针对图元的扩展形式测试的渲染输出的每个区域。因此,针对该较大区域43,测试四个角部采样点41,而针对像素42,测试四个角部采样点44。

(将采样点设定成渲染输出区域的角部是有利的,因为其有助于确保一区域将被认为至少部分被覆盖,即使图元仅覆盖该区域的一小部分也是如此)。

然后,为了确定图元是否至少部分覆盖渲染输出区域(即,执行外覆盖测试),针对表示该渲染输出区域的角部的采样点测试扩展图元14的每个边缘,并且针对表示该渲染输出区域的该组采样点来测试该图元的扩展形式的边界框31。

如果用于图元的每个修改边缘14覆盖用于渲染输出区域(即,至少一个角部)的至少一个采样点,则该渲染输出区域被确定为至少部分被该图元覆盖,并且该渲染输出区域的至少一个采样点(即,角部)处于用于该图元的扩展形式的边界框31内。(因此,在将边缘结果进行逻辑与运算之前,针对该渲染输出区域的所有角部的边缘测试针对每个边缘一起进行逻辑或运算)。

在图5所示示例中,光栅化级将确定像素42被该图元部分覆盖,并且将相应地生成表示针对该像素42的图元的片段以供渲染。

上面描述了本发明的实施方式中的保守光栅化外覆盖测试的性能。

如上所述,保守光栅化的另一个方面是执行“内覆盖”测试,这是为了标识被图元明确覆盖的渲染输出区域,而不管图元尺寸中的任何潜在误差。这对于例如遮挡剔除来说是有用的。

保守光栅化内覆盖测试旨在确定被所讨论图元明确覆盖的渲染输出区域(例如,像素),而不管图元尺寸中的任何潜在误差。例如,图形处理流水线的适当级将在实施方式中被配置成存储和管理针对图元的恰当标志数据,指示哪些渲染输出区域被该图元明确地完全覆盖。该标志数据接着可以稍后在图形处理流水线中使用,以供例如在遮挡或冲突检测操作中使用。

图6中例示了保守光栅化内覆盖确定背后的一般概念,其示出了要生成的渲染输出的渲染输出区域11(在这种情况下对应于像素)的示例性阵列600。

类似于图3,图6还示出了阵列600被采样点25的网格覆盖,这些采样点25网格可以并且将被光栅化级使用,以测试渲染输出的哪些像素11被图元12覆盖。该网格中的采样点再次以像素间距(像素大小)的给定分数(图6中对应于一像素的1/4)的间隔开22。

如上提到,可以在图元12的精确尺寸中引入误差。图6中通过图元12内的区域602(所谓的“不确定区域”)例示了图元12的精确尺寸中的这种“不确定性”误差。这里,不确定区域602包括图元12内的所有可能位置,即,图元12的边缘在转换图元的顶点位置以供处理时可以舍入到这些可能位置。

不确定区域602的内边缘601表示图元12的尺寸中的沿“向内”(“收缩”)方向的最大潜在误差。

为了确定由图元12覆盖的渲染输出的像素11,而不管图元尺寸中的任何潜在误差,不确定区域602的内边缘601被映射至像素11的阵列600,并且被图元12的(经修改)内边缘601完全覆盖的每个像素11将被标记为被覆盖。在图6的布置中,可以看出,仅有一个像素603被图元12的(经修改)内边缘601完全覆盖。

虽然已经参照将图元12的修改的(向内移动)内边缘601映射至像素11的阵列600以执行内覆盖测试来描述了图6所示的内覆盖测试,但在本实施方式中,代替计算针对图元12的内边缘601并将其用于内覆盖测试,光栅化级仍然利用被用于外覆盖测试的表示图元12的扩展形式14的修改的边缘信息,来针对该渲染输出的像素(或根据需要,任何其它区域)执行内覆盖分析。

然而,与针对外部覆盖分析所做的相反,其中针对与所考虑的渲染输出的像素(或其它区域)的角部相对应的一组采样点,对图元的扩展形式14进行测试,与用于外覆盖分析的针对该像素(渲染输出区域)的角部的采样点组相比,内覆盖分析针对具有修改位置的一组采样位置来测试该图元的扩展形式14。采样点被偏移以考虑图元的扩展形式正被针对内覆盖进行测试的事实,从而实际上仍生成针对该图元的内“不确定”区域,如图6的内不确定区域602。

具体而言,针对内覆盖分析,针对一像素(或其它区域)的采样点从像素本身起向外偏移(即,沿远离该像素中心位置的方向),然后针对被确定并且用于外覆盖光栅化的、用于该图元的扩展形式14的修改边缘进行测试。

具体而言,对于要针对内覆盖进行测试的像素(或其它区域)的每个角部,针对内部覆盖分析创建两个偏移采样点:一个采样点表示沿x轴方向偏移的角部处的原始采样点,另一个采样点表示沿y轴方向偏移的角部处的原始采样点。

图7例示了这一点,并且示出了将用于针对像素51的内覆盖测试的、针对像素51的修改采样点组52。在图7中可以看出,像素51将具有为内覆盖分析而形成的四对偏移采样点(提供八个新采样点),每个原始角部采样点有一对。

如可以在图7中看出,所有采样点按相同距离向外偏移。如上提到,该偏移距离在本实施方式中被设定,以考虑图元的扩展形式正被针对内覆盖进行测试的事实,从而实际上生成针对该图元的内“不确定”区域,因为内覆盖正被测试。

因此,在本实施方式中,采样点被向外偏移达一个量,该量等于以下之和:图元边缘在该图元的扩展形式中已经向外移动的距离(从而实际上消除该图元边缘的向外偏移),和与希望不确定区域(如上面参照图元的扩展形式讨论的)相对应的偏移量(从而实际上接着限定针对该图元的内确定成区域)。

因此,例如,在其中所使用的不确定偏移对应于一像素的1/256的情况下,那么用于内覆盖测试的、针对一像素(渲染输出区域)的采样点的偏移量将是一像素的为1/128(沿恰当的轴方向)。

虽然出于内覆盖测试的目的,可以针对给定像素(渲染输出区域)测试图7所示的所有八个偏移采样点,但本申请人已经认识到,实际上如果八个偏移采样点中的恰当采样点被测试,那么可以将其视为指示该组中的所有采样点是否将被该图元边缘覆盖。换句话说,可以仅测试八个采样点中的一个来确定针对该像素(或其它渲染输出区域)的边缘的内覆盖结果。

因此,在本实施方式中,针对该图元的每个修改的扩展边缘,仅测试表示该像素(或其它渲染输出区域)的单个偏移采样点,以确定该像素是否被该图元明确覆盖(即,执行针对保守光栅化处理的内覆盖分析)。

要测试的偏移采样点基于正在针对图元进行测试的该边缘的长轴方向和斜率来选择,其中该边缘的斜率和长轴方向由表示该边缘的线性方程ax+by+c=0的常数“a”和“b”的值给出。

具体而言,如图7所示,如果该图元边缘是“x-长轴”(即,|a|<|b|),那么光栅化级将把选择范围缩小到已经沿y方向偏移的四个偏移采样点之一。这在图7中由位于由“x长轴”箭头指向的虚线上的四个采样点表示。

相反的是,如果该图元边缘是“y-长轴”(即,|a|>|b|),那么光栅化级将把选择范围缩小到已经沿x方向偏移的四个偏移采样点之一。这在图7中由位于由“y长轴”箭头指向的虚线上的四个采样点表示。

从由该边缘的长轴方向指示的四个采样点中选择哪个偏移采样点由该边缘的斜率给出,并且利用针对该边缘的线性方程的常数“a”和“b”的符号来确定。

如图7所示,如果a和b的符号均为正,则光栅化级将选择属于针对该像素(区域)的该组采样点的上右象限的相关偏移采样点;如果a和b的符号均为负,则光栅化级将选择属于该组的下左象限的相关偏移采样点;如果a的符号为正而b的符号为负,则光栅化级将选择属于该区域的下右象限的相关偏移采样点;而如果a的符号为负而b的符号为正,则光栅化级将选择属于该区域的上左象限的相关偏移采样点。

针对扩展图元14的每个边缘,以上述方式来确定出于针对图元的内覆盖分析目的而测试的单个采样点,然后针对所选择采样点来测试所讨论的边缘,以确定该边缘是否覆盖该采样点。如果每个边缘(如果所有边缘)被确定为覆盖它们各自的选定采样点,那么所讨论的像素(渲染输出区域)被确定为明确(保证)被该图元完全覆盖,因此可以,并且优选地,按照所讨论的那样指示(例如,通过为该像素或渲染输出区域设定恰当的“内覆盖”标志)。

图8例示了在本发明该实施方式中用于选择要针对用于内覆盖分析的图元边缘来进行测试的偏移采样点的处理。

图8的a)示出了要针对图5的像素51进行测试的扩展图元的修改外边缘14。如可以看出,像素51的每个角部处的采样点已经被偏移,以便以上面讨论的方式执行保守光栅化处理的内部覆盖测试。

图8的b)示出了针对图形图元14的第一边缘61,采样点62将被选择为采样点以针对图元边缘61进行测试,从而确定图元的该边缘是否覆盖像素51。

相应地,图8的c)示出了将选择采样点64用于测试图元的边缘63,并且图8的d)示出了将针对扩展图元14的边缘65测试采样点66。

从这些图可以看出,被选择用于针对图元边缘进行测试的采样点实际上是这样的采样点,即,如果该边缘从所有采样点之外的位置开始并且沿其短轴方向朝着像素中心移动,那么该采样点将首先被该边缘交叉。这样做的影响是,对所标识采样点的测试,可以用作针对该像素的所有采样点是否被图元边缘覆盖的指示(因为所讨论的采样点将是未被该边缘覆盖的“第一”采样点)。

如图8所示,每个边缘针对其各自选择的采样点进行测试,以确定该边缘是否覆盖采样点(该采样点是否“通过”针对该边缘的边缘测试)。只有当所有边缘覆盖它们各自的选定采样点时,该像素才被确定为被该图元完全覆盖

因此,例如,在图8所示示例中,边缘61和63覆盖它们的选定采样点(因此针对这些边缘的内覆盖值例如被设定成“1”),但扩展图元14的第三边缘65未覆盖其选定采样点66(因此其内覆盖值被设定成“0”)。因此,扩展图元14被确定为不完全并且明确地覆盖像素51(因为针对边缘的组合(逻辑与运算(and))内覆盖值等于“0”),即,其未通过内覆盖测试。

本实施方式中的内覆盖操作被优选用于标识将被图元完全覆盖的那些像素(或其它渲染输出区域),然后例如通过恰当标识该像素(区域)来提供该信息,以供图形处理流水线的其它处理级(如图形处理流水线的恰当着色器)使用,例如供在执行遮挡剔除时使用。(不管内覆盖测试结果,优选地按上面讨论的方式利用针对图元的外覆盖测试来进行用于生成渲染图元用的片段的图元的实际光栅化)。

在本实施方式中,内覆盖测试优选地仅针对将渲染输出分成多个区域的最终细分来执行,例如,并且优选地,针对渲染输出的各个像素(与外覆盖测试相反,其如上所述,优选地以渐进的分层方式进行)来执行。优选地,以上面讨论的方式利用外覆盖测试来对给定图元进行光栅化,然后如果内覆盖也将被测试,则如上所述,利用修改的采样点位置来重新运行最终像素级采样测试。

尽管保守外覆盖光栅化方法(图3-图5)已经在上面与保守内覆盖光栅化方法(图6–图8)分开进行了描述,但应当清楚,根据本发明的实施方式,图形处理系统被配置成,针对图元执行外覆盖测试和内覆盖测试两者。下面,将参照图9和图10,对该组合操作进行描述。

图9更详细地示出了根据本发明的实施方式的图形处理流水线的操作。具体来说,图9是例示在本发明的优选实施方式中,当处理图元时由图形处理流水线执行的操作步骤的流程图。

对应地,图10示意性地示出了执行图9所示操作的图形处理流水线的各个级。

图10示出了整个图形处理流水线的一些但非全部的级和组件,即与本实施方式的操作相关的级。图10因此示出了图形处理流水线80的图元设立级81、光栅化级82、以及片段前端和片段着色器级83。

如图9和图10所示,该处理在表示图元顶点的信息被提供给图形处理流水线80的图元设立级81(通过其接收)(图10)时开始(步骤71)。

图形处理流水线的图元设立级81根据顶点信息、表示图元边缘位置的边缘信息(其在本实施方式中,对于该图元的每个相应的边缘来说,采用具有上述形式的线性方程的形式)来确定(在步骤72)。

图元设立级81然后对在步骤72确定的边缘信息执行修改操作,以确定表示图元的扩展形式的边缘的修改的边缘信息(步骤73)(即,包括如上所述的图元外侧边缘周围的希望的不确定区域)。

限定扩展图元的修改的边缘信息随后被图形处理流水线的光栅化级82(图10)使用,以执行保守光栅化处理的外覆盖测试(步骤74)。这将包括:针对“扩展”图元,光栅化级82确定扩展图元至少部分覆盖图形渲染输出的哪些区域(如上所述)。

光栅化级82使用外覆盖测试的结果来生成用于渲染(着色)该图元的恰当图形片段。具体来说,如果在考虑图元位置中的潜在误差时确定渲染输出区域至少部分被图元覆盖,那么光栅化级82生成表示针对该区域的图元的恰当图形片段或多个图形片段。

光栅化级82还被配置成,针对用于该图元的保守光栅化处理执行内覆盖测试。

因此,光栅化级82将继续为图形渲染输出区域生成多组偏移采样点(步骤75),然后将扩展图元与多组偏移采样点进行比较,以对扩展图元执行内覆盖测试(步骤76)。

如上关于图7和图8所述,这例如通过以下步骤来进行:针对要测试的每个图元边缘14,确定要针对所讨论的图元边缘14进行测试的单个偏移采样点,并且随后测试该偏移采样点,以确定偏移采样点是否被所讨论的图元覆盖。如果内覆盖测试的结果指示渲染输出区域(例如,像素)明确地被图元覆盖,而与图元尺寸中的任何潜在误差无关,那么针对该图元设定指示该图元的标志(并且例如,稍后在图形处理流水线中使用,例如,用于冲突检测、遮挡剔除以及可视性检测操作)。

已经在光栅化级82为该图元生成或设定的片段和标志被发送至片段着色器级83。片段着色器级83渲染表示该图元的片段并利用针对该图元的“完全覆盖”标志来执行任何其它希望图形处理操作,如冲突检测、遮挡剔除以及可视性检测操作。片段渲染处理导出为表示渲染目标的采样位置处的图元所必需的数据,如红、绿以及蓝(rgb)颜色值和“alpha”(透明度)值(即,片段着色器“着色”渲染目标的采样位置)。

然后将渲染的片段数据(采样位置数据)写入图块缓冲区,随后,作为像素数据写出至帧缓冲器,例如用于显示(这可以包括后端片段操作(如下采样),以确定要存储在帧缓冲器中的最终像素颜色)。这针对正被处理的每个图元加以重复。

在其中每组采样点包含按关联渲染输出区域(例如,像素)的角部处设定的四个采样点的布置中,该光栅化级将针对每个边缘执行:针对外覆盖执行四次覆盖测试,即,针对每个角部采样点执行一次测试,而针对内覆盖执行一次覆盖测试,即,针对所选定偏移采样点执行一次测试,这等于该图元的每边缘每区域执行总共五次采样点测试。

然而,本申请人还已经认识到,如果该光栅化级被配置成并行处理多组多个连续渲染输出区域(例如,多组2×2个区域),那么作为这种组中的相邻区域,将共享至少一些边,并由此还共享角部采样点,针对共有采样点的边缘的覆盖测试的结果,可以在确定针对图元的外覆盖时,共用于该组的、共享所讨论采样点的每个区域。然后,可以将其用于减少将执行的采样点覆盖测试的总数。

这在图11的a)中进行了例示,其示出了要生成的渲染输出的渲染输出区域11(在这种情况下对应于像素)的阵列100。

在该实施方式中,渲染输出的每个像素11具有与由光栅化处理测试的、与其相关联的像素的角部相对应的一组四个采样点。针对像素101,这通过设定在像素101的角部处的采样点105、106、107以及108而在图11中进行了例示。类似地,针对像素102,使用设定在其角部的采样点107、108、109以及110。可以看出,阵列100的像素101和102将共享两个采样点,采样点107和108。

(应当清楚,阵列中的每个像素将与相邻像素共享两个采样点)。

光栅化级然后被配置成,并行地针对扩展图元的外边缘14测试多组2×2连续像素。即,渲染输出像素的阵列100被分成多组2×2连续像素,并且光栅化级被配置成针对第一组2×2连续像素执行光栅化操作,接着是第二(不同)组,等等,直到所有像素组相应地被光栅化为止。图11的a)相应地例示了,当测试给定的一组四个像素(对应于阵列100的像素101、102、103以及104)时的光栅化级操作。

当针对2×2像素组确定用于图元的外覆盖时,光栅化级被配置成,针对扩展图元测试用于2×2像素组的9个独特角部采样位置,并且针对所讨论采样点共有的每个像素的“共享”采样点,而使用针对边缘14的覆盖测试结果。

在这点上,在图11的a)中可以看出,采样点108与全部四个像素101、102、103以及104共有(由它们共享),并因此针对采样点108的边缘14的外覆盖测试的结果将用于确定图元边缘14是否至少部分覆盖该组中的每个相应像素101、102、103以及104。在图11的a)中可以看出,采样点108实际上被图元边缘14覆盖,并因此针对采样点108的外覆盖测试的结果将用于确定/标识全部四个像素101、102、103以及104被该图元覆盖。

类似地,针对共有于该组中的像素101和102的采样点107的外覆盖测试的结果,将用于确定图元边缘14是否至少部分覆盖像素101和/或102。

然而,采样点110仅用于2×2组的单个像素(像素102),因此该采样点的结果将不用于确定图元边缘14是否至少部分覆盖该组中的任何其它像素,即,不是像素102。

当确定针对该组四个像素101、102、103以及104的内覆盖时,光栅化级将根据参照图7和图8所描述的实施方式进行操作。

具体来说,如上所述,对于要测试内覆盖的相应像素(101、102、103以及104)的每个角部,针对内部覆盖分析创建两个偏移采样点:一个采样点表示沿x轴方向偏移的角部处的原始采样点,另一个采样点表示沿y轴方向偏移的角部处的原始采样点。然后选择测试要针对每个像素101、102、103以及104进行测试的单个偏移采样点。

这在图11的b)中进行了例示,这是像素101、102、103以及104的放大图,其示出了针对这些像素的修改采样点网格。具体而言,图11的b)示出了当测试内覆盖时要用于像素的偏移采样点位置(应当清楚,图11的b)中的每个“点”表示偏移采样点位置)。

如上提到,要针对每个像素进行测试的单个偏移采样点是这样的偏移采样点,即,该偏移采样点将是随着平行于该边缘14的线沿该边缘14的短轴方向,从用于该渲染输出像素的修改的该组采样点中的所有采样点之外的一位置朝着图元中心移动而交叉的第一采样点。

这些偏移采样点在图11的b)中被例示为偏移采样点112、113、114以及115,其分别对应于像素101、102、103以及104。

以这种方式,可以看出,对于该图元的边缘14来说,针对阵列100的像素101、102、103以及104的外覆盖确定,将仅执行九次采样点边缘测试,并且将仅针对内覆盖执行四次测试。因此,将针对该图元的每个边缘14执行每组四个像素(101、102、103以及104)的总共十三次采样点测试,而不是20次采样点测试,如果每个像素都分离进行测试(处理),那么情况将会如此。这是有利的,因为其减少了将被执行以确定该组像素中的像素被图元覆盖的采样点覆盖测试的总数(与单独处理(测试)每个像素相比)。

然后将针对阵列100中的希望的每组四个像素重复参照图11(图11的a)和图11的b))描述的处理,直到阵列100中的所有希望像素都经受了针对边缘14的保守光栅化测试为止。

虽然上面已经参照针对扩展图元测试用于2×2像素组的九个独特角部采样位置,对外覆盖测试进行了描述,但其它布置也是可以的。例如,本申请人已经认识到,针对外覆盖确定,例如可以测试很少的采样点(如仅四个采样点),来确定像素的任何部分或者例如一组2×2像素是否完全被覆盖。根据上述,可以看出,本发明至少在其优选实施方式中,提供可以按高效方式来执行保守光栅化的系统。

在本发明的优选实施方式中,这至少通过以下来实现:在图元设立级确定考虑与图元尺寸相关联的误差的修改的边缘信息,然后在对图元进行光栅化时使用该修改的边缘信息。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1