图形处理方法和设备转让专利

申请号 : CN201510121433.7

文献号 : CN104966265B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : B·皮尔森魏婷S·索洛维耶夫A·D·尼尔森A·加拉辛M·伊万涅茨

申请人 : ARM有限公司

摘要 :

本公开涉及图形处理方法和设备。当在图形处理系统中针对输出帧有多个图元的集合(31)待处理时,将图元集合(31)划分成多个图元子集(33),并且生成用于表示图元集合的树表示(30),其中树的各个叶节点(34)表示图元集合(31)所划分成的子集(33)中的一个,树的各个父节点(35)、(36)、(37)表示与其所有子节点的图元子集的组合对应的图元子集。对于树表示的各个节点,确定指示节点所表示的图元子集、节点所表示的图元子集中的图元所使用的顶点(32)以及节点所表示的图元子集所落入的空间的体积的数据。然后在处理输出帧的图元集合时使用该树表示来确定待处理的图元集合和顶点集合。

权利要求 :

1.一种在图形处理系统中对用于输出的帧的待光栅化和渲染的多个图元的图元集合进行处理的方法,所述图元集合中的各个图元与一个或更多个顶点关联,所述方法包括以下步骤:基于所述图元集合中的图元的渲染顺序,将所述图元集合划分成多个图元子集;

生成用于表示所述图元集合的树表示,该树表示被配置为,使得所述图元子集以基于所述图元集合中的图元的渲染顺序的顺序被指定到树的叶节,树的各个叶节点表示所述图元集合基于所述图元集合中的图元的渲染顺序而划分成的子集中的一个,且树的各个父节点表示与各个父节点的所有子节点的图元子集的组合对应的图元子集;

针对所述树表示的各个节点生成并存储:指示所述节点所表示的图元子集的数据、指示所述节点所表示的图元子集的图元所使用的顶点的数据以及指示所述节点所表示的图元子集所落入的空间的体积的数据;

当针对输出帧来处理图元集合时,以基于该图元集合中的图元的渲染顺序的顺序来遍历所生成的树表示,以确定待光栅化和渲染的图元集合和顶点集合;

对通过以基于所述图元集合中的图元的渲染顺序的顺序针对输出帧遍历所生成的树表示而确定的图元集合和顶点集合进行光栅化和渲染。

2.根据权利要求1所述的方法,其中,所述图元集合包括用于输出帧的绘制调用的图元集合。

3.根据权利要求1或2所述的方法,其中,所述图元集合中的各图元具有关联的索引值,该索引值标识图元并标识该图元在所述图元集合的渲染顺序中的位置,并且其中,基于所述图元集合中的图元的渲染顺序将所述图元集合划分成多个图元子集的步骤包括:将所述图元集合的索引值范围划分成多个索引值子范围,从而提供多个图元子集,各图元子集对应于索引值子范围。

4.根据权利要求1或2所述的方法,其中,指示由节点的图元使用的顶点的数据包括指示与所述节点关联的图元所使用的顶点的位图。

5.根据权利要求1或2所述的方法,其中,指示由节点的图元使用的顶点的数据包括指示与所述节点关联的图元所使用的顶点的一个或更多个顶点索引范围。

6.根据权利要求1或2所述的方法,其中,所述图元集合的所述树表示通过以下步骤来构造:首先构造所述叶节点,然后通过合并各个高层节点的相应子节点来构造各个高层节点。

7.根据权利要求6所述的方法,其中,

所述子节点具有与所述子节点关联的顶点索引范围;并且

在合并父节点的子节点的顶点索引范围时,所述方法包括以下步骤:

如果两个子节点的顶点索引范围交叠或者分离开少于或等于阈值数量的顶点索引,则将所述两个子节点的顶点索引范围组合成所述父节点的单个组合的顶点索引范围。

8.根据权利要求1或2所述的方法,该方法包括以下步骤:

确定帧的待光栅化和渲染的图元集合的空间相干性的度量,并且如果所述空间相干性被确定为低于阈值空间相干性度量,则不生成所述图元集合的树表示,但是如果所述空间相干性被确定为高于阈值空间相干性度量,则生成所述图元集合的树表示。

9.一种在图形处理系统中对用于输出的帧的待光栅化和渲染的多个图元的图元集合进行处理时确定待光栅化和渲染的图元集合和顶点集合的方法,该方法包括以下步骤:在处理输出帧的图元集合时,以基于该图元集合中的图元的渲染顺序的顺序来遍历表示所述多个图元的图元集合的树表示,以确定待光栅化和渲染的图元集合和顶点集合,以及对通过以基于所述图元集合中的图元的渲染顺序的顺序遍历所述输出帧的树表示而确定的图元集合和顶点集合进行光栅化和渲染,其中,

所述树表示被配置为,使得树的各个叶节点表示所述图元集合基于所述图元集合中的图元的渲染顺序而划分成的多个图元子集中的一个,该树的各个父节点表示与各个父节点的所有子节点的图元子集的组合对应的图元子集,并且所述图元子集以基于所述图元集合中的图元的渲染顺序的顺序被指定到树的叶节;并且数据针对所述树表示的各个节点而存储,该数据指示:该节点所表示的图元子集、该节点所表示的图元子集中的图元所使用的顶点以及该节点所表示的图元子集所落入的空间的体积。

10.根据权利要求9所述的方法,其中所述图元集合中的各图元具有关联的索引值,该索引值标识图元并标识该图元在所述图元集合的渲染顺序中的位置,并且其中,基于所述图元集合中的图元的渲染顺序将所述图元集合划分成多个图元子集的步骤包括:将所述图元集合的索引值范围划分成多个索引值子范围,从而提供多个图元子集,各图元子集对应于索引值子范围。

11.根据权利要求9所述的方法,该方法包括以下步骤:

针对树的一个或更多个节点依次对照所述帧的视锥来测试节点的图元子集被指示落入的空间的体积,以确定所指示的空间的任何体积是否落入所述视锥内;以及利用视锥测试的结果来确定是否将所述节点的图元子集和顶点集合包括在待光栅化和渲染的图元集合和顶点集合中。

12.根据权利要求11所述的方法,该方法包括以下步骤:

在处理所述输出帧的图元集合时以这样的方式构造待光栅化和渲染的图元的列表:开始时所述图元集合的所有图元均在所述列表中,然后当通过所述视锥测试拒绝树的节点被进一步处理时从所述列表去除图元。

13.根据权利要求11或12所述的方法,该方法包括以下步骤:

在处理所述输出帧的图元集合时以这样的方式构造待光栅化和渲染的顶点的列表:当树的节点通过所述视锥测试时,将顶点添加到顶点的主列表。

14.根据权利要求13所述的方法,其中,树节点具有与该树节点关联的顶点索引范围,并且如果两个节点的顶点索引范围交叠或者分离开少于或等于阈值数量的顶点索引,则所述两个节点的顶点索引范围被合并成用于主顶点索引列表的单个组合的顶点索引范围。

15.根据权利要求9至12中的任一项所述的方法,该方法还包括以下步骤:

顶点着色器编译器分析图元集合的顶点着色器程序以确定要应用于所述图元集合的所述顶点着色程序是否对顶点使用变换以将这些顶点变换到屏幕空间,如果是,则从所述顶点着色器程序提取关于所述屏幕空间变换的信息以便于在对照视锥测试所述树表示的节点时使用。

16.根据权利要求9至12中的任一项所述的方法,其中,所述图形处理系统包括主机处理器和图形处理器,所述主机处理器执行所述图形处理器的驱动器,所述方法包括以下步骤:所述主机处理器上的所述驱动器生成图元集合的树表示,利用该树表示来确定待光栅化和渲染的图元集合和顶点集合,然后将如此标识的待光栅化和渲染的图元集合和顶点集合指示给所述图形处理器;以及所述图形处理器然后对如此指示的图元集合和顶点集合进行光栅化和渲染。

17.一种在图形处理系统中对用于输出的帧的待光栅化和渲染的多个图元的图元集合进行处理的设备,所述图元集合中的各个图元与一个或更多个顶点关联,所述设备包括:处理电路,该处理电路被配置为:

基于所述图元集合中的图元的渲染顺序,将所述图元集合划分成多个图元子集;

生成用于表示所述图元集合的树表示,该树表示被配置为,使得所述图元子集以基于所述图元集合中的图元的渲染顺序的顺序被指定到树的叶节,树的各个叶节点表示所述图元集合基于所述图元集合中的图元的渲染顺序而划分成的子集中的一个,且该树的各个父节点表示与各个父节点的所有子节点的图元子集的组合对应的图元子集;

针对所述树表示的各个节点生成并存储:指示该节点所表示的图元子集的数据、指示该节点所表示的图元子集的图元所使用的顶点的数据以及指示该节点所表示的图元子集所落入的空间的体积的数据;

当针对输出帧处理图元集合时,以基于该图元集合中的图元的渲染顺序的顺序来遍历所生成的树表示,以确定待光栅化和渲染的图元集合和顶点集合;以及对通过以基于所述图元集合中的图元的渲染顺序的顺序针对所述输出帧遍历所生成的树表示而确定的图元集合和顶点集合进行光栅化和渲染。

18.根据权利要求17所述的设备,其中,指示节点的图元所使用的顶点的数据包括指示与该节点关联的图元所使用的顶点的位图。

19.根据权利要求17所述的设备,其中,指示节点的图元所使用的顶点的数据包括指示与该节点关联的图元所使用的顶点的一个或更多个顶点索引范围。

20.根据权利要求17、18或19所述的设备,其中,所述处理电路还被配置为:确定帧的待光栅化和渲染的图元集合的空间相干性的度量,并且如果所述空间相干性被确定为低于阈值空间相干性度量,则不生成所述图元集合的树表示,但是如果所述空间相干性被确定为高于阈值空间相干性度量,则生成所述图元集合的树表示。

21.根据权利要求17、18或19所述的设备,所述设备还包括:

顶点着色器编译器,该顶点着色器编译器分析图元集合的顶点着色器程序,以确定要应用于所述图元集合的顶点着色程序是否对顶点使用变换以将这些顶点变换到屏幕空间,如果要应用于所述图元集合的顶点着色程序对顶点使用变换以将这些顶点变换到屏幕空间,则从所述顶点着色器程序提取关于所述屏幕空间变换的信息以便于在对照视锥测试所述树表示的节点时使用。

22.根据权利要求17、18或19所述的设备,其中,所述图元集合中的各图元具有关联的索引值,该索引值标识图元并标识该图元在所述图元集合的渲染顺序中的位置,并且其中,基于所述图元集合中的图元的渲染顺序将所述图元集合划分成多个图元子集的操作包括:将所述图元集合的索引值范围划分成多个索引值子范围,从而提供多个图元子集,各图元子集对应于索引值子范围。

23.一种在图形处理系统中对用于输出的帧的待光栅化和渲染的多个图元的图元集合进行处理时确定待光栅化和渲染的图元集合和顶点集合的设备,该设备包括:处理电路,该处理电路被配置为:

在处理输出帧的图元集合时,以基于该图元集合中的图元的渲染顺序的顺序来遍历表示所述多个图元的图元集合的树表示,以确定待光栅化和渲染的图元集合和顶点集合,以及对通过以基于所述图元集合中的图元的渲染顺序的顺序遍历所述输出帧的树表示而确定的图元集合和顶点集合进行光栅化和渲染,其中,

所述树表示被配置为,使得树的各个叶节点表示所述图元集合基于所述图元集合中的图元的渲染顺序而划分成的多个图元子集中的一个,该树的各个父节点表示与各个父节点的所有子节点的图元子集的组合对应的图元子集,并且所述图元子集以基于所述图元集合中的图元的渲染顺序的顺序被指定到树的叶节;并且数据针对所述树表示的各个节点而存储,该数据指示:该节点所表示的图元子集、该节点所表示的图元子集中的图元所使用的顶点以及该节点所表示的图元子集所落入的空间的体积。

24.根据权利要求23所述的设备,其中,所述处理电路被配置为:

针对树的一个或更多个节点依次对照所述帧的视锥来测试节点的图元子集被指示落入的空间的体积,以确定所指示的空间的任何体积是否落入所述视锥内;以及利用视锥测试的结果来确定是否将所述节点的图元子集和顶点集合包括在待光栅化和渲染的图元集合和顶点集合中。

25.根据权利要求23或24所述的设备,其中,所述图元集合中的各图元具有关联的索引值,该索引值标识图元并标识该图元在所述图元集合的渲染顺序中的位置,并且其中,基于所述图元集合中的图元的渲染顺序将所述图元集合划分成多个图元子集的操作包括:将所述图元集合的索引值范围划分成多个索引值子范围,从而提供多个图元子集,各图元子集对应于索引值子范围。

说明书 :

图形处理方法和设备

技术领域

[0001] 本发明涉及图形处理系统,具体地讲,涉及在图形处理系统中渲染输出时标识待渲染的图元和顶点的方法和设备。

背景技术

[0002] 计算机图形系统通常通过处理所谓的图元来渲染帧(例如,用于显示),所述图元通常为简单多边形,例如三角形。用于帧的图元通常将按照它们将被渲染的顺序来列出,并且各个图元将与顶点集合关联,这些顶点通过其在关联顶点阵列中的索引来指示。因此,图形处理系统通常将接收待渲染的图元序列,并且将依次处理图元以生成输出帧。待渲染的给定帧可包含数以万计的图元。
[0003] 图形处理的一个问题在于为帧定义的一些图元可能实际上在最终输出中不可见,因为(例如)它们落在视锥(view frustum)之外。因此已知的是设法在渲染帧之前标识这些图元,以避免处理这些图元。
[0004] 然而,申请人如今认识到,尽管可使用这些技术来避免处理落在视锥之外的图元,但是实际上,这些技术无法显著减少处理的顶点的数量(例如,因为对顶点阵列中的所有顶点执行顶点处理)。这种顶点处理可为显著负荷,尽管这在具有显著带宽资源的功能更强大的桌面系统中可能不是问题,但是申请人认识到,设法减小进行的顶点处理的量将是有利的,特别是在用于低功率便携式装置的图形处理系统(其可能具有更有限的带宽和处理资源)中。
[0005] 申请人因此相信,在图形处理系统中标识待渲染的图元和顶点的方法和设备仍存在改进余地。

发明内容

[0006] 根据本发明的第一方面,提供了一种在图形处理系统中处理用于输出的帧的待处理的多个图元的集合的方法,所述图元集合中的各个图元与一个或更多个顶点关联,所述方法包括以下步骤:
[0007] 将所述图元集合划分成多个图元子集;
[0008] 生成用于表示所述图元集合的树表示,所述树表示被配置为使得树的各个叶节点表示所述图元集合所划分成的所述子集之一,树的各个父节点表示与其所有子节点的图元子集的组合对应的图元子集;以及
[0009] 针对所述树表示的各个节点生成并存储指示所述节点所表示的图元子集的数据、指示所述节点所表示的图元子集的图元所使用的顶点的数据以及指示所述节点所表示的图元子集所落入的空间的体积的数据。
[0010] 根据本发明的第二方面,提供了一种在图形处理系统中处理用于输出的帧的待处理的多个图元的集合的设备,所述图元集合中的各个图元与一个或更多个顶点关联,所述设备包括:
[0011] 处理电路,其被配置为:
[0012] 将所述图元集合划分成多个图元子集;
[0013] 生成用于表示所述图元集合的树表示,所述树表示被配置为使得树的各个叶节点表示所述图元集合所划分成的所述子集之一,树的各个父节点表示与其所有子节点的图元子集的组合对应的图元子集;并且
[0014] 针对所述树表示的各个节点生成并存储指示所述节点所表示的图元子集的数据、指示所述节点所表示的图元子集的图元所使用的顶点的数据以及指示所述节点所表示的图元子集所落入的空间的体积的数据。
[0015] 根据本发明的第三方面,提供了一种在图形处理系统中表示用于输出的帧的待处理的多个图元的集合的数据结构,所述图元集合中的各个图元与一个或更多个顶点关联,所述数据结构包括:
[0016] 表示树表示的数据,所述树表示表示所述多个图元的集合,其中,[0017] 所述数据所表示的所述树表示被配置为使得树的各个叶节点表示所述图元集合所划分成的多个图元子集之一,树的各个父节点表示与其所有子节点的图元子集的组合对应的图元子集;并且
[0018] 针对所述树表示的各个节点存储的所述数据指示:
[0019] 所述节点所表示的图元子集;
[0020] 所述节点所表示的图元子集中的图元所使用的顶点;以及
[0021] 所述节点所表示的图元子集所落入的空间的体积。
[0022] 在本发明中,在图形处理系统中生成输出帧时待渲染的图元集合被处理以生成表示该图元集合的树表示,其中树的各个节点表示图元集合内的各个图元子集。对于各个节点,标识并指示图元子集以及与那些图元关联的对应顶点。
[0023] 如下文将进一步讨论的,利用这种树结构来表示图元集合有利于更有效地标识图元集合中在渲染输出帧时实际上不需要被处理的图元以及与图元集合中的那些图元关联的顶点,从而减小渲染图元集合时的处理负荷。具体地讲,与已知技术相比,本发明的树表示可(除了别的以外)不仅用于在图元落在视锥之外的情况下拒绝图元被进一步处理,而且用于高效且有效地避免在顶点落在视锥之外的情况下处理所述顶点(例如,可允许在进行显著的顶点处理之前构建待处理的顶点的缩减或最小列表)。因此这可在渲染输出帧时显著地节省带宽、功率等,因此在用于低功率和/或便携式装置的图形处理系统的情况下尤其有利。
[0024] 另外,如下文将进一步讨论的,本发明可操作(优选地操作)而无需来自(例如)需要渲染的应用的任何“辅助”或“输入”。因此这使得不再需要应用程序员(例如)尝试配置他们的应用以设法避免(例如)处理视锥之外的图元和/或顶点。
[0025] 本发明中待渲染的输出帧可以是要由图形处理系统生成的任何合适且期望的输出帧。在一个优选实施方式中,它是用于显示(例如,在屏幕上或者经由打印机)的输出帧,但是它可同样是图形处理系统可用于生成的诸如纹理(例如,在渲染到纹理处理中)的任何其它形式的输出,或者任何其它形式的输出数据阵列。
[0026] 图元集合可以是为生成输出帧而待处理的任何合适的图元集合。它可包括任何期望且合适数量的图元。在优选实施方式中,它包括几千或几万(例如,20,000)个图元。集合中的图元优选地按照它们期望的渲染顺序被列出。图元集合中的各个图元可具有(在实施方式中,具有)可用于标识图元的关联的索引值。图元索引值优选地对应于(因此指示)图元在图元集合的渲染顺序中的位置(因此,图元优选地按照其渲染顺序来索引(例如,从低到高))。
[0027] 图元集合可包括为生成输出帧而待处理的所有图元,但是在优选实施方式中,包括为生成输出帧而待处理的图元中的一些而非全部。在这后一种情况下,图元集合优选地包括帧的特定可标识图元集合,例如(优选地)用于帧的给定绘制调用的图元集合。因此,在一个优选实施方式中,图元集合包括用于输出帧的绘制调用的图元集合。
[0028] 如果图元集合不包括输出帧的所有图元(即,存在输出帧的待处理的多个图元集合(例如,绘制调用)),则本发明的处理优选地针对输出帧的多个图元集合(例如,绘制调用)而执行(并且优选地针对输出帧的各个图元集合(例如,绘制调用)而重复)。
[0029] 如果以本发明的方式处理多个图元集合,则在优选实施方式中,针对一个图元集合生成的数据可(优选地)被保持(例如并优选地,被缓存)以便于另一(例如,后续)图元集合使用(如果这样做适当并且(可能)有用的话)。
[0030] 图元集合可按照合适且期望的方式划分成多个图元子集。优选地,图元集合被划分成相等的子集。因此,各个子集优选地包含相同或相似数量的图元。
[0031] 在优选实施方式中,图元集合中的图元基于它们的渲染顺序而被划分成图元子集。基于此来再次划分图元集合使得在将图元指派给节点时不再需要考虑图元的空间分布,因此可按照相对快速且廉价的方式来执行。
[0032] 如果图元具有关联的索引,则图元集合因此优选地基于图元的索引值来划分成子集。在这种情况下,图元集合的索引值的范围优选地划分成多个(优选地相等的)索引值子范围,各个图元子集对应于相应的图元索引值子范围。
[0033] 各个图元子集可包含任何期望数量的图元,但是在优选实施方式中,这样进行再次划分(受到任何其它约束)使得各个图元子集不包含超过选定的(优选预定的)阈值数量的图元(图元索引),例如优选地,128个图元。图元子集的数量因此优选地包括为确保各个子集具有少于阈值数量的图元,图元集合必须划分成的不管多少子集。
[0034] 图元集合再次划分处理优选另外地或另选地受到图元子集的总数不超过选定的(优选地预定的)阈值子集数量(例如,256个子集)的约束。此约束优选为优先的,使得如果将超过阈值子集数量,则增加每子集的允许图元数量,直至阈值子集数量将不被超过(并且未被超过)。
[0035] 如果需要,再次划分图元集合的其它布置方式也将是可能的。
[0036] 一旦图元集合被划分成多个图元子集,就生成图元集合的树表示,树的各个叶节点对应于图元集合所划分成的相应子集(因此,叶节点的数量将与图元子集的数量相同)。
[0037] 图元子集可按照任何期望且合适的方式被指派给相应叶节点。在优选实施方式中,按照有利于保持(保留)(期望的)图元渲染顺序的方式将图元子集指派给叶节点。(如本领域已知的,在许多情况下需要在渲染图元时维持由需要图形处理的应用指定的图元渲染顺序。本发明因此优选地被配置为实现这种效果。)
[0038] 这可根据需要来实现,但是在优选实施方式中,通过按照图元索引的顺序从树的一个边缘处的叶节点到树的另一边缘处的叶节点(因此,从左至右或从右至左)将图元子集指派给叶节点来实现。如果需要,也可使用有利于保留(再现)期望的渲染顺序的其它布置方式。
[0039] 叶节点各自表示图元集合所划分成的给定子集。树中的各个高层节点表示其各个子节点所表示的图元子集的组合。因此,例如,具有两个叶节点作为其子节点的父节点将表示两个子叶节点所表示的两个图元子集的组合。在树表示中从下至上针对各个高层节点重复这一过程(使得树的根节点将表示所关注的整个图元集合)。
[0040] 树的各个节点可具有任何期望且合适数量的子节点。在优选实施方式中,树结构是平衡和/或对称的。优选地,各个父节点具有两个子节点。
[0041] 在优选实施方式中,树结构具有两个数量的叶节点的幂。
[0042] 如果需要,树结构的其它布置方式也将是可能的。
[0043] 针对树表示的各个节点,存储指示节点所表示的图元子集、与该图元子集关联的顶点以及该图元子集所落入的空间区域的数据。如果需要,也可针对一个节点和/或针对各个节点存储其它数据。
[0044] 指示节点所表示的图元子集的数据可采取任何合适且期望的形式。它优选地指示图元子集的(子集所涵盖的)图元的范围,优选地图元位置的范围(优选地图元索引的范围)。优选地,所述数据指示所关注的节点的子集的起始位置(在图元序列中)(例如,起始索引)以及图元子集中的图元的数量。当然,如果需要,其它布置方式也将是可能的。
[0045] 类似地,指示节点的图元所使用的顶点的数据可采取任何期望且合适的形式。各个图元将具有关联的顶点集合,并且顶点优选地也被索引,使得相应各个顶点可被标识。因此,各个顶点优选地具有标识顶点的关联索引。顶点索引无需与图元索引相同(并且通常将不相同),如果需要,两个(或更多个)图元可共享顶点。
[0046] 在一个优选实施方式中,指示与节点的图元子集关联的顶点的数据针对与图元集合关联的各个顶点指示该顶点是否与节点的图元子集关联。例如并且优选地,各个节点可与表示(图元集合的)所有顶点的位图(位域)关联,顶点位图中的位被相应地设定为指示哪些顶点与所关注的节点所关联的图元关联。
[0047] 在另一优选实施方式中,各个节点与指示与节点关联的顶点(的索引)的一个或更多个顶点索引范围关联。使用顶点索引的范围可减小构建图元集合的树表示的成本,并且与针对各个节点存储顶点位图相比可能需要较少数据。
[0048] 在这种情况下,针对节点可存储单个顶点索引范围,或者可存在多个顶点索引范围(例如并且优选地,(各自)通过不与节点关联的顶点索引(顶点)的“间隙”分离开)。
[0049] 在优选实施方式中,所使用的顶点索引范围的数量优选地基于生成顶点索引范围的相对成本或开销以及不必要地处理包括在顶点索引范围中但实际上不与节点所表示的图元子集中的图元关联的顶点(使得那些顶点的处理实际上将是不必要的,因此从该区域的节点排除那些顶点将是可取的)的相对成本。这反映了这样的事实:为节点生成并存储更多顶点索引范围可能成本更高,但是相反地可能减少在渲染图元集合时进行的不必要的顶点处理的量。
[0050] 在优选实施方式中,如果图元子集中的图元的顶点的一个顶点索引与图元子集中的图元的下一顶点索引(按照顶点索引顺序)之间的间隔(索引数量(索引计数))超过特定(优选地预定)阈值,则在图元子集的下一(使用的)顶点索引处开始使用(并存储)新顶点索引范围。相反,如果图元子集中的图元的顶点的一个顶点索引与图元子集中的图元的下一顶点索引之间的间隔(索引数量(索引计数))没有超过特定(优选地预定)阈值,则使用涵盖两个索引(以及在那些索引的任一侧没有超过阈值间隔的任何其它索引)的单个范围。
[0051] 换言之,如果使用两个分离的顶点索引范围将跳过少于(或者少于或等于)选定的阈值数量的顶点(顶点索引),则优选地使用单个连续的顶点索引范围,代替两个分离的顶点索引范围,但是如果使用两个分离的顶点索引范围将跳过超过选定的阈值数量的顶点(顶点索引),则优选地使用两个分离的顶点索引范围,代替单个连续的顶点索引范围。
[0052] 因此,在优选实施方式中,用于节点的顶点索引范围的数量基于可用于节点的各个顶点索引范围之间的间隔中将存在的顶点的数量(顶点索引的数量)(即,基于利用(间隔开的)较小顶点索引范围,代替涵盖较小范围(以及它们之间的间隔(间隙))的较大顶点索引范围,将跳过的顶点的数量)。
[0053] 优选地在与图元子集中的图元关联的顶点所跨越的顶点索引范围上考虑(并重复)该处理,以将顶点索引范围再次划分或不再次划分成一个或更多个顶点索引范围,然后使所述一个或更多个顶点索引范围与所关注的节点关联。
[0054] 在优选实施方式中,触发新范围的开始(使用)的阈值顶点数量(顶点索引计数)基于开始新范围的硬件成本。
[0055] 当然,其它布置方式也将是可能的。
[0056] 如果顶点索引范围与节点关联,则指示节点的顶点索引范围的数据可采取任何期望且合适的形式。在优选实施方式中,生成并存储指示顶点索引范围的数量的数据以及针对各个范围指示该范围的起始和结束(最小和最大)顶点索引值的数据。
[0057] 类似地,指示节点的图元子集所落入的空间的体积的数据可采取任何期望且合适的形式。此数据应该指示(并且优选地指示)节点的图元子集所落入的定义对象的对象空间中的体积。
[0058] 在优选实施方式中,体积指示数据指示涵盖图元子集中的所有图元的包围体积。优选地,确定并存储轴对齐包围体积。最优选地,确定并存储节点所涵盖的所有顶点的各个轴方向(例如,x,y,z)上的最小值和最大值以指示节点所涉及(涵盖)的空间区域。如果需要,可使用其它(例如,更复杂)形式的包围体积。
[0059] 图元集合的树表示可按照任何期望且合适的方式来构建(生成其数据)。在优选实施方式中,首先利用所关注的叶节点的相应图元子集来构建叶节点,然后从其相应子节点(通过“合并”其相应子节点)来构建(各个)高层节点(优选地包括根节点)。因此,在优选实施方式中,通过(以适当方式)组合或合并其子节点的数据来确定“父”节点的数据。从其相应子节点“构造”高层节点(父节点)有助于使将需要的“原始”数据上的行程数量最小化。
[0060] 如果合并两个(或更多个)子节点,则该合并可按照任何合适且期望的方式进行,以提供用于高层(父)节点的“合并的”数据集合。因此,例如,在节点将要表示的图元子集的情况下,子节点的图元子集(例如,索引范围)优选地被组合以提供父节点的(较大)图元子集(例如,索引范围)。
[0061] 在将与父节点关联的顶点的情况下,如果子节点具有与其关联的顶点索引位图,则子节点位图可(优选地)被一起进行“或”运算,以提供父节点的顶点索引位图。
[0062] 如果子节点具有与其关联的顶点索引范围,则父节点可简单地与所有子节点的顶点索引范围关联。然而,在优选实施方式中,子节点的顶点索引范围优选地被(选择性地)合并到父节点的新范围中(如果这样做适当的话)。在这种情况下,如果两个子节点顶点索引范围交叠或者分离开少于或等于阈值数量的顶点索引(如上所述),则这两个子节点顶点索引范围优选地被合并(组合)成用于父节点的单个组合的顶点索引范围。优选地在子节点的所有顶点索引范围上重复这一过程。
[0063] 就指示图元子集所落入的区域的数据而言,优选地从所关注的子节点的相应区域(例如,包围体积)来确定高层节点的区域。例如,可确定完全涵盖子节点的所有包围体积的父节点的包围体积(在一个优选实施方式中就是这样做)。在这种情况下,可(优选地)在所有父节点的子节点上沿着各个轴取最小顶点位置值和最大顶点位置值来生成父节点的包围体积。
[0064] 可使用或期望更复杂的布置方式,例如更复杂形式的包围体积。如果期望,例如,为父节点保持子节点的分离的包围体积或者为父节点仅合并子节点包围体积中的一些而非全部也将是可能的。这在例如子节点的包围体积完全没有交叠的情况下可能是适当的。
[0065] 尽管本发明可用于将要处理的每一个图元集合(例如,绘制调用),申请人已认识到,可能存在这样的情况:与简单地以普通方式处理图元集合相比,执行本发明的处理可能不太可取。例如,准备和使用树结构的成本与由此实现的顶点处理的减少相比可能得不偿失的情况就是如此。
[0066] 因此,在优选实施方式中,本发明仅用于选定的图元集合,优选地在针对图元集合(例如,绘制调用)使用本发明之前针对该图元集合确定是否使用本发明。
[0067] 在优选的这种实施方式中,确定是否使用本发明的处理的标准是图元集合的空间相干性。因此,优选地确定图元集合的空间相干性的度量,并且如果空间相干性被确定为低于(或者等于或低于)阈值空间相干性度量,则本发明的处理不用于该图元集合。这考虑到这样的事实:将本发明用于具有低空间相干性的图元集合与图元集合的“普通”处理相比可能无法提供更多益处。
[0068] 在这种情况下,可使用图元集合的空间相干性的任何期望的度量。鉴于测量各个节点的真实空间位置的可能成本,为此优选地使用图元集合的空间相干性的估计。
[0069] 可使用任何合适的这种估计,但是在优选实施方式中,平均顶点索引间隔(图元集合的连续顶点之间的顶点的数量)被确定并用作图元集合的空间相干性的度量。然后,如果此平均顶点索引间隔(距离)超过(或者等于或超过)阈值,则图元集合被视为空间不相干,因此不使用本发明的处理。在这点上申请人认识到,用于图元集合的顶点之间的平均索引距离可用作所关注的图元集合的空间相干性的指示(因为待渲染的对象很可能按照一个接一个的一般顺序来索引),此外可提供相对快速且低成本的估计图元集合的空间相干性的机制。
[0070] 如果确定不将本发明的处理用于图元集合,则优选地简单地以所关注的图形处理系统的普通方式来处理图元集合(即,本发明的处理被省略或绕过)。
[0071] 上文描述了生成待渲染的图元集合的树表示的处理。本发明还扩展至然后在渲染图元集合以生成输出帧时使用该树表示来确定(标识)图元集合的待处理的图元和顶点。
[0072] 因此,在尤其优选的实施方式中,本发明的方法还包括并且本发明的设备还被配置为:在处理输出帧的图元集合时使用树表示(的数据)来确定待处理的图元集合和顶点集合。
[0073] 相应地,根据本发明的另一方面,提供了一种在图形处理系统中处理用于输出的帧的待处理的多个图元的集合时确定待处理的图元集合和顶点集合的方法,该方法包括以下步骤:
[0074] 在处理输出帧的所述图元集合时利用表示树表示的数据来确定待处理的图元集合和顶点集合,所述树表示表示所述多个图元的集合,其中,
[0075] 所述数据所表示的所述树表示被配置为使得树的各个叶节点表示所述图元集合所划分成的多个图元子集之一,树的各个父节点表示与其所有子节点的图元子集的组合对应的图元子集;并且
[0076] 针对所述树表示的各个节点存储的所述数据指示所述节点所表示的图元子集、所述节点所表示的图元子集中的图元所使用的顶点以及所述节点所表示的图元子集所落入的空间的体积。
[0077] 根据本发明的另一方面,提供了一种在图形处理系统中处理用于输出的帧的待处理的多个图元的集合时确定待处理的图元集合和顶点集合的设备,该设备包括:
[0078] 处理电路,其被配置为:
[0079] 在处理输出帧的所述图元集合时利用表示树表示的数据来确定待处理的图元集合和顶点集合,所述树表示表示所述多个图元的集合,
[0080] 其中,
[0081] 所述数据所表示的所述树表示被配置为使得树的各个叶节点表示所述图元集合所划分成的多个图元子集之一,树的各个父节点表示与其所有子节点的图元子集的组合对应的图元子集;并且
[0082] 针对所述树表示的各个节点存储的所述数据指示所述节点所表示的图元子集、所述节点所表示的图元子集中的图元所使用的顶点以及所述节点所表示的图元子集所落入的空间的体积。
[0083] 本领域技术人员将理解,根据情况,本发明的这些方面和实施方式可包括(并且优选地包括)本文所述的本发明的优选和任选特征中的任一个或更多个或全部。因此,例如,树表示和针对树的节点存储的数据优选地为上述形式。
[0084] 树表示可用于以任何期望且合适的方式确定图元集合的待处理的图元和顶点。树表示优选地用于通过依次考虑树的节点(优选地从根节点开始并且顺着树朝着叶节点进行(如果需要的话))来确定待处理的图元和顶点。
[0085] 当要考虑树的节点时,优选地对照生成的输出帧的视锥来测试该节点。最优选地,对照视锥来测试节点的图元子集被指示落入的空间的体积(区域),以确定任何体积(区域)是否落入视锥内。因此,在优选实施方式中,对照渲染的帧的视锥来测试节点的包围体积,以确定包围体积的任何部分是否落入视锥内。此视锥测试可按照任何期望且合适的方式来执行,例如并且优选地,通过利用包围体积-视锥交叉测试等对照视锥剪切例如包围体积来执行。
[0086] 如果需要,在对照视锥进行测试之前可将节点的包围体积变换到适当的屏幕空间位置。这可使用例如作为顶点着色处理的一部分提供的变换矩阵。实际上,申请人认识到,在一些情况下,可能仅适合于在存在这种变换矩阵的情况下使用本发明的处理。
[0087] 因此,作为优选实施方式,确定要应用于图元集合的顶点着色器(顶点着色程序)(如果存在的话)是否对顶点使用变换以将它们变换到屏幕空间,如果不是,则本发明的方法不用于该图元集合。这考虑到这样的事实:可能需要对树表示的节点的包围体积应用变换以允许对照视锥来测试节点的图元子集。
[0088] 在优选的这种实施方式中,该确定由顶点着色器编译器来执行,该编译器识别向量的矩阵乘法被存储作为屏幕位置的模式,并且如果是,则用信号通知,例如通过生成指示存在有效变换矩阵的元数据。
[0089] 在优选实施方式中,顶点着色器编译器被配置为提取屏幕空间变换(变换矩阵)(如果顶点着色器中存在变换)并且将其提供给节点包围体积测试处理(使其能够访问变换矩阵)。
[0090] 因此,在优选实施方式中,顶点着色器编译器被配置为分析图元集合(例如,绘制调用)的顶点着色器程序,以确定是否应该使用本发明的处理,如果确定应该使用本发明的处理,则从顶点着色器程序提取信息(优选地要应用于顶点的变换)以便于对照视锥测试树表示的节点的包围体积时使用。
[0091] 视锥测试的结果优选地用于确定是否将该节点的图元子集和顶点集合包括在待处理的图元集合和顶点集合中。另外地或另选地,其优选地用于确定是否继续以及如何继续树的遍历。
[0092] 最优选地,如果节点完全通过视锥测试(即,其包围体积完全在视锥内),则将该节点的图元子集和顶点集合包括在(添加到)待处理的图元集合和顶点集合中。在这种情况下,优选地然后在被接受的节点的父节点处继续树的遍历(因此移至该父节点的仍待测试的下一子节点(如果存在的话))。
[0093] 对应地,如果节点的视锥测试完全失败(即,其包围体积完全在视锥之外),则优选地不将该节点的图元子集和顶点集合包括在(添加到)待处理的图元集合和顶点集合中。优选地然后在被拒绝的节点的父节点处继续树的遍历(因此移至被拒绝的节点的父节点的仍待测试的下一子节点(如果存在的话))。
[0094] (无需测试发现视锥测试完全通过或者完全失败的节点下面的任何节点,因为树表示的本质意味着测试的高层节点提供用于所有那些低层节点的结果。)
[0095] 如果不是叶节点的节点部分地通过视锥测试(例如,其包围体积仅部分地(不是完全地)在视锥内),则优选地不将该节点的图元子集和顶点集合包括在该阶段待处理的图元集合和顶点集合中,而是优选地对所关注的节点的子节点继续树的遍历(然后测试它们自己)。
[0096] 因此,在根节点的情况下,如果该节点完全通过视锥测试,则整个图元集合及其关联的顶点集合优选简单地整体渲染,如果根节点的视锥测试失败,则整个图元集合优选地被拒绝并且不被进一步处理,但是如果根节点仅部分地通过视锥测试,则优选地遍历树以测试根节点的子节点。
[0097] 如果不存在父节点的仍待测试的另外的子节点,则优选地在所关注的父节点的父节点处继续遍历(因此移至高层父节点的仍待测试的下一子节点(如果存在的话))。
[0098] 如果发现叶节点至少部分地通过视锥测试(即,其包围体积至少部分地在视锥内),则优选地将该叶节点的图元子集和顶点集合包括在待处理的图元集合和顶点集合中。然后,同样,优选地在被接受的叶节点的父节点处继续树的遍历(因此移至该父节点的仍待测试的下一叶节点(如果存在的话))。
[0099] 重复该处理,直至树被完全遍历(直至需要测试的树中的所有节点已被测试)。
[0100] 如上所述,在优选实施方式中,从根节点开始向下朝着叶节点(如果遍历继续的话)遍历树。优选地按照将保留图元集合中的图元的期望的渲染顺序的顺序(因此,例如在按照左至右顺序构造树的情况下,从左至右)来遍历树。如上所述,这将取决于构造树的顺序,因此使用树时的树遍历顺序应该(优选地)基于构造树的顺序。
[0101] 应该使用树的遍历来构建(生成)待处理的图元集合和顶点集合。这可按照任何合适且期望的方式来进行。优选地,维持图元的运转主列表和顶点的运转主列表,并且当节点通过视锥测试时,优选地将各个新“通过”的节点的图元和顶点添加到图元和顶点的现有主列表(与其组合)。因此,在优选实施方式中,如果根节点部分地可见,则遍历树,从而构建待处理的图元(例如,图元索引)范围和顶点索引范围或顶点索引的位域(位图)表示。
[0102] 节点的图元和顶点可按照任何合适且期望的方式被添加到主列表(与主列表合并)。
[0103] 对于图元,各个被接受的节点(通过视锥测试的各个节点)的图元列表(例如,图元索引范围)可被简单地添加到主图元列表。
[0104] 在优选实施方式中,这样构造待处理的图元的“主”列表:开始时图元集合的所有图元在主列表中,然后如果通过视锥测试拒绝树的节点被进一步处理,则从主列表去除图元(例如并且优选地,图元索引的范围)。
[0105] 对于顶点,所使用的实际处理优选地取决于针对树节点存储顶点数据的方式。
[0106] 例如,如果节点具有与其关联的顶点索引位图(位域),则主顶点列表优选地被相应地维持作为位图(位域),并且“主”位图优选地与通过视锥测试的节点的顶点位图进行“或”运算,以提供用于图元集合的合并、更新的主顶点索引位图。
[0107] 对应地,如果树节点具有与其关联的顶点索引范围,则主顶点列表优选地包括所有“通过”的节点的顶点索引范围的组合。在优选的这种实施方式中,树节点的顶点索引范围优选地被(限制性地)合并成主顶点列表的新顶点索引范围(如果这样做适当的话)。这优选地按照上面所讨论的构造树表示时合并子节点的情况下对应的方式来进行。因此,如果两个节点顶点索引范围交叠或者分离开少于或等于阈值数量的顶点索引(如上所述),则这两个节点顶点索引范围优选地被合并(组合)成主顶点索引列表的单个组合的顶点索引范围。
[0108] 在优选实施方式中,这样构造待处理的顶点的“主”列表:开始时列表中没有顶点(“空”列表),然后如果树的节点通过视锥测试,则将顶点(例如并且优选地,顶点索引范围)添加到主列表。
[0109] 树遍历的输出应该(优选地)是待处理的图元集合和关联的顶点集合。此输出可采取任何期望且合适的形式,但是优选地包括指示图元集合的待处理的图元的图元集合的图元流内的图元列表(例如,图元索引范围)以及指示图元集合的待处理的顶点的顶点索引范围或顶点索引位图。
[0110] 此图元和顶点信息然后可例如(优选地)被提供给渲染处理(例如,提供给图形处理单元(GPU)(图形处理器))以指示所关注的图元集合(例如,绘制调用)的待处理的图元和顶点。然后,例如GPU优选地按照所关注的图形处理系统的普通方式处理(渲染)指示的图元和顶点,以提供期望的渲染输出。此处理可根据需要包括例如顶点着色、光栅化、渲染(片段着色)等。
[0111] 本发明还扩展至按照上述方式创建然后使用待渲染的图元集合的树表示的方法和系统。
[0112] 本发明的方法和设备可按照任何适当且期望的方式来实现,例如实现在硬件或软件(或二者)中以及实现在(并包括在)任何适当的装置或组件中。
[0113] 在尤其优选的实施方式中,由要执行渲染操作的图形处理器(GPU)的驱动器生成并使用树结构来生成待处理的图元和顶点的集合。因此,在尤其优选的实施方式中,本发明的设备包括要执行渲染操作的图形处理器(GPU)的驱动器。
[0114] 对应地,优选地在包括主机处理器(CPU)和图形处理器(GPU)的图形处理系统中实现并执行本发明,主机处理器执行图形处理器的驱动器,主机处理器上的驱动器生成本发明的树结构,并且利用该树结构来确定待处理的图元和顶点集合,然后将如此标识的待处理的图元和顶点集合指示给图形处理器(然后该图形处理器优选地处理如此标识的图元和顶点集合)。
[0115] 可在图形处理操作中的任何期望且合适的点生成和使用树结构。在优选实施方式中,这在绘制调用时间进行。
[0116] 存储有表示树(该树表示图元位)的数据的存储器可包括任何合适的这种存储器,并且可按照任何合适且期望的方式来配置。例如,它可以是芯片上缓冲器或者可以是外部存储器(实际上,更有可能是外部存储器)。类似地,它可以是用于此目的的专用存储器或者可以是还用于其它数据的存储器的一部分。在实施方式中,此数据被存储在包含图形处理器的系统的主存储器中。
[0117] 表示树(该树表示图元集合)的所有数据优选地被存储在同一物理存储器中,但这不是必要的。
[0118] 当然,其它存储器布置方式也将是可能的。
[0119] 本发明可实现在任何合适的系统中,例如适当配置的基于微处理器的系统。在优选实施方式中,本发明实现在基于计算机和/或微处理器的系统中。
[0120] 本发明尤其(但是非排他地)适合用于低功率便携式装置。因此,在优选实施方式中,本发明被实现在诸如移动电话或PDA的便携式装置中。
[0121] 本发明适用于任何合适形式或配置的图形处理器。它尤其适用于基于拼块的图形处理器和图形处理系统。因此在优选实施方式中,图形处理器是基于拼块的处理器。
[0122] 本发明的各种功能可以按照任何期望且合适的方式来实现。例如,本发明的功能可根据需要以硬件或软件来实现。因此,例如,除非另外指明,否则本发明的各种功能元件和“装置”可包括能够操作以执行各种功能等的合适的一个处理器或多个处理器、一个控制器或多个控制器、功能单元、电路、处理逻辑、微处理器布置方式等,例如适当专用的硬件元件和/或可被编程以按照期望的方式操作的可编程硬件元件。
[0123] 这里还应该注意的是,如本领域技术人员将理解的,本发明的各种功能等可被复制和/或在给定处理器上并行执行。同样,如果需要,各种处理层可共享处理电路等。
[0124] 对于执行上述特定功能所需的任何硬件,图形处理系统和流水线可包括图形处理流水线所包括的常见功能单元等中的任一个或更多个或全部。
[0125] 本领域技术人员还将理解,适当地,所描述的本发明的所有方面和实施方式可包括(优选地包括)本文所述的优选和可选特征中的任一个或更多个或全部。
[0126] 根据本发明的方法可至少部分地利用软件(例如,计算机程序)来实现。因此,可以看出从未来方面考虑,本发明提供了在安装在数据处理装置上时具体适于执行本文所述的方法的计算机软件、包括在程序元件在数据处理装置上运行时执行本文所述的方法的计算机软件代码部分的计算机程序元件、以及包括适于在程序在数据处理系统上运行时执行本文所述的方法的所有步骤的代码装置的计算机程序。数据处理器可以是微处理器系统、可编程FPGA(现场可编程门阵列)等。
[0127] 本发明还扩展至包括这种软件的计算机软件载体,其在用于操作图形处理器、渲染器或包括数据处理装置的微处理器系统时,与所述数据处理装置结合使所述处理器、渲染器或系统执行本发明的方法的步骤。这种计算机软件载体可以是物理存储介质,例如ROM芯片、CD ROM、RAM、闪存或盘,或者可以是信号,例如电线上的电信号、光学信号或卫星的无线电信号等。
[0128] 还将理解,并非本发明的方法的所有步骤均需要通过计算机软件来执行,因此从更广的方面讲,本发明提供了计算机软件,这种软件安装在计算机软件载体上以用于执行本文所阐述的方法的至少一个步骤。
[0129] 相应地,本发明可适当地具体实现为用于计算机系统的计算机程序产品。这种实现方式可包括一系列计算机可读指令,所述计算机可读指令固定于诸如计算机可读介质(例如,磁盘、CD ROM、ROM、RAM、闪存或硬盘)的有形非瞬时性介质上。这种实现方式还可包括一系列计算机可读指令,所述计算机可读指令可通过有形介质(包括但不限于光学或类似通信线路)或无形地利用无线技术(包括但不限于微波、红外或其它传输技术)经由调制解调器或其它接口装置传输至计算机系统。这一系列计算机可读指令具体实现本文先前所述的所有或部分功能。
[0130] 本领域技术人员将理解,这些计算机可读指令可以利用用于许多计算机架构或操作系统的许多编程语言来编写。另外,这些指令可利用任何存储器技术(目前或未来的,包括但不限于半导体、磁或光学)来存储,或者利用任何通信技术(目前或未来的,包括但不限于光学、红外或微波)来传输。可以想到,这种计算机程序产品可作为可移除介质随所附的印刷或电子文档一起分发(例如,紧缩套装软件),用计算机系统预先加载到(例如)系统ROM或固定盘上,或经由网络(例如,互联网或万维网)从服务器或电子公告牌分发。

附图说明

[0131] 现在将参照附图仅以示例的方式描述本发明的许多优选实施方式,附图中:
[0132] 图1示出示例性计算机图形处理系统;以及
[0133] 图2、图3、图4和图5示意性地示出根据本发明的图1的图形处理系统的操作的优选实施方式。
[0134] 在附图中针对相似组件适当地使用相似标号。

具体实施方式

[0135] 现在将描述本发明的优选实施方式。
[0136] 图1示出典型计算机图形处理系统,其包括主机处理器(CPU)1、图形处理单元(GPU)3以及用于存储主机处理器1和GPU 3所需要的数据和/或主机处理器1和GPU 3所生成的数据的存储器5。
[0137] 本实施方式中的图形处理器3是基于拼块的图形处理器,并且包括多个级,即:顶点着色器、外壳着色器、镶嵌器、域着色器、几何着色器、光栅化级、早Z(深度)和模板测试级、渲染器(片段着色级的形式)、晚Z(深度)和模板测试级、混合级、拼块缓冲器以及下采样和写出(多重采样分解)级。当然,图形处理器3的其它布置方式也是可能的。
[0138] 当主机处理器1上执行的应用2需要GPU 3的图形处理(例如,待显示的帧)时,应用2将适当命令和数据发送给在主机处理器1上运行的用于GPU 3的驱动器4。
[0139] 然后驱动器4将适当的命令发送给图形处理器3以使得它生成应用2所需的图形输出。
[0140] 如本领域已知的,提供给驱动器4的命令和数据将指示要由图形处理器3生成的输出帧的待渲染的图元列表,以及包括要用于输出帧的图元的顶点的关联顶点阵列。
[0141] 如本领域已知的,要由图形处理器3生成的输出帧通常可以是旨在用于显示在诸如屏幕或打印机的显示装置上的帧,但是也可例如包括旨在用于稍后的渲染行程(也称作“渲染到纹理”输出)等的中间数据。
[0142] 输出帧的待处理的图元通常按照它们将被渲染的顺序来列出。各个图元将与顶点的集合关联,这些顶点通过其在关联顶点阵列中的索引来指示。
[0143] 如本领域已知的,为了进一步方便渲染操作,输出帧的待处理的图元通常将被组织成不同的绘制调用。对于各个绘制调用,将存在待处理的图元集合,集合中的各个图元与顶点的集合关联,这些顶点通过其在关联顶点阵列中的索引来指示。输出帧的绘制调用被依次处理以生成输出帧。
[0144] 在普通图形处理中,驱动器4将简单地将命令和数据发送给图形处理器3以依次处理各个绘制调用的所有图元和顶点。
[0145] 在本实施方式中,该操作被这样修改:如下面进一步讨论的,驱动器4构造输出帧的各个相应绘制调用的待处理的图元的集合的树表示,然后利用那些树表示来推导要由图形处理器3针对所关注的绘制调用处理的图元和顶点的缩减集。(因此在此实施方式中本发明被实现在驱动器4和GPU 3中。)
[0146] 图2和图3示意性地示出本实施方式中所使用的针对绘制调用的图元集合生成树表示30的处理。图2是示出该处理的步骤的流程图,图3示意性地示出树表示30本身的构造。
[0147] 如图3所示,绘制调用将指示(除了别的以外)绘制调用的待处理的图元31的集合,所述图元将按照其期望的渲染顺序来列出。在本实施方式中,假设图元集合中的图元具有与图元的期望的渲染顺序对应的从零开始的关联索引(连续序列)。然而,如果需要,也可使用其它布置方式。
[0148] 另外,图元集合中的图元不必如图3所示按照关联索引值来列出。例如,作为替代,可提供顶点(顶点索引)的列表,然后划分成顶点组(例如,在三角形形式的图元的情况下,三个顶点的组),从而标识并指示图元集合中的相应图元。在这种情况下,图元集合中的图元将通过列出它们的顶点(使得列出的顶点集合将连续,各个顶点集合对应于图元集合中的图元)来标识和指示。
[0149] 如图3中仅针对一些图元示意性地示出的,图元集合中的各个图元也与顶点集合关联。在本实施方式中,假设各个图元为三角形,因此各个图元与三个顶点的集合关联。在指示要用于绘制调用的所有顶点的顶点阵列32中通过顶点索引来引用顶点。如图3所示,图元可使用具有不同索引的顶点,或者可共享顶点,用于绘制调用的图元集合的顶点集合不必是来自顶点阵列的连续顶点集合。
[0150] 如图2所示,驱动器为生成树表示30而执行的处理中的第一步骤是将绘制调用的图元集合划分成多个图元子集33(步骤20)。
[0151] 在本实施方式中,通过将图元集合的索引值范围划分成多个相等(或连续)索引值子范围来将绘制调用的图元集合划分成图元子集33。基于此再次划分图元集合使得在将图元指派给子集时不再需要考虑图元的空间分布,因此可按照相对快速和廉价的方式执行。
[0152] 这样进行再次划分,使得各个图元子集不包含超过选定阈值数量的图元(在这种情况下,128个图元)。
[0153] 然而,图元集合再次划分处理还受到图元子集的总数不超过选定的预定阈值子集数量(在这种情况下,256个子集)的约束。此约束是优先的,使得如果将超过阈值子集数量,则增加每子集的允许图元数量,直至阈值子集数量未被超过为止。
[0154] (在这点上将理解,为了清晰起见,图3仅示出一些而非所有图元索引、子集、顶点、图元与顶点关联等。)
[0155] 一旦图元集合被划分成多个图元子集33,驱动器就构造图元集合的树表示。此处理中的第一阶段是针对图元集合所划分成的各个相应图元子集33生成树30的叶节点34(图2中的步骤21)。
[0156] 通过从树的一个边缘处的叶节点到树的另一边缘处的叶节点(因此从左至右或从右至左),按照图元的索引的顺序将图元子集指派给叶节点,来将图元子集33指派给树的叶节点34。这有利于在使用树表示时保留(再现)期望的渲染顺序。
[0157] 然后驱动器4通过寻找叶节点的图元所覆盖的对象空间中的维度以及叶节点的图元所使用的顶点来“构建”叶节点(图2中的步骤22),并存储指示该信息的数据。
[0158] 因此,对于树表示30的各个叶节点34,驱动器4确定并存储:指示节点所表示的图元子集的数据;指示该图元子集的图元所使用的顶点的数据;以及指示该图元子集所落入的空间的体积的数据。
[0159] 指示叶节点所表示的图元子集的数据通过指示该节点的图元子集的起始索引以及该节点的图元子集中的图元数量,来指示图元子集的(子集所涵盖的)图元索引的范围。
[0160] 为了确定叶节点的图元子集所使用的顶点,驱动器首先扫描叶节点的图元的顶点索引,并且针对所使用的各个顶点在工作位缓冲器中设定一位。
[0161] 在一个优选实施方式中,然后使用此顶点索引扫描的结果来为节点构造表示图元集合的顶点阵列中的所有顶点的位图(位域),顶点位图中的位被相应地设定以指示哪些顶点与所关注的节点所关联的图元关联。
[0162] 在另一优选实施方式中,指示与叶节点的图元子集关联的顶点(指示节点的图元所使用的顶点)的数据包括指示与该节点关联的顶点(的索引)的一个或更多个连续顶点索引范围。
[0163] 在这种情况下,驱动器扫描由工作位缓冲器指示的与图元子集中的图元关联的顶点所跨越的顶点索引范围,以将该顶点索引范围再次划分成一个或更多个顶点索引范围,然后使这些顶点索引范围与所关注的节点关联。
[0164] 在此操作中,如果驱动器标识图元子集中的图元的顶点的一个顶点索引与图元子集中的图元的下一顶点索引(按照顶点索引顺序)之间的顶点索引计数的间隔(间隙),并且图元子集中的图元的顶点的一个顶点索引与图元子集中的图元的下一顶点索引之间的该间隔(索引数量(索引计数))超过阈值间隔值,则在图元子集的下一(使用的)顶点索引处开始使用(并存储)新顶点索引范围。
[0165] 相反,如果图元子集中的图元的顶点的一个顶点索引与图元子集中的图元的下一顶点索引之间的间隔(索引数量(索引计数))没有超过阈值,则使用涵盖两个索引以及它们之间的“间隙”(以及在那些索引任一侧没有超过阈值间隔的任何其它索引)的单个范围。
[0166] 换言之,如果使用两个分离的顶点索引范围将跳过少于(或者少于或等于)选定的阈值数量的顶点(顶点索引),则使用单个连续的顶点索引范围,代替两个分离的顶点索引范围,但是如果使用两个分离的顶点索引范围将跳过超过选定的阈值数量的顶点(顶点索引),则使用两个分离的顶点索引范围,代替单个连续的顶点索引范围。
[0167] 在顶点索引范围与节点关联的情况下,生成并存储指示顶点索引范围的数量的数据以及针对各个范围指示该范围的起始和结束(最小和最大)顶点索引值的数据。
[0168] 在本实施方式中,指示节点的图元子集所落入的空间的体积的数据指示涵盖图元子集中的所有图元的包围体积。为此,确定并存储节点所使用的所有顶点的各个轴方向(例如,x,y,z)上的最小值和最大值,以指示节点所涉及(涵盖)的空间区域。如果需要,可使用其它(例如,更复杂的)包围体积形式。
[0169] 一旦确定并“构造”各自表示图元集合所分成的给定子集的叶节点34,就确定并构造树表示的高层节点35、36、37(图2中的步骤23)。各个高层节点从其相应的子节点通过将其相应的子节点“合并”以使得树中的各个高层节点表示其各个子节点所表示的图元子集的组合来构建。因此,例如,具有两个叶节点34作为其子节点的父节点35将表示这两个子叶节点所表示的两个图元子集的组合。在树表示中从下至上针对各个高层节点重复这一过程,直至到达表示所关注的整个图元集合的根节点37。
[0170] 在本实施方式中,如图3所示,树的各个父节点具有两个子节点。当然,其它布置方式也将是可能的。
[0171] 在合并子节点时,在父节点将要表示的图元子集的情况下,子节点的图元索引范围被组合以提供父节点的(更大的)图元索引范围。
[0172] 在与子节点具有与其关联的顶点索引位图的父节点关联的顶点的情况下,子节点位图被一起进行“或”运算,以提供父节点的顶点索引位图。
[0173] 如果子节点具有与其关联的顶点索引范围,则子节点的顶点索引范围被选择性地适当地合并到父节点的新范围中。具体地讲,如果两个子节点顶点索引范围交叠或者分离开少于或等于阈值数量的顶点索引(如上所述),则这两个子节点顶点索引范围被合并(组合)成父节点的单个组合的顶点索引范围。在子节点的所有顶点索引范围上重复这一过程。
[0174] 就指示图元子集所落入的区域的数据而言,通过取父节点的所有子节点沿着各个轴的最小顶点位置值和最大顶点位置值来生成父节点的包围体积。
[0175] 一旦生成了绘制调用的图元集合的树表示,就将其存储在存储器中以便于使用(图2中的步骤24)。
[0176] 然后,驱动器4在渲染绘制调用的图元集合时使用该树表示来确定(标识)图元集合的待处理的图元和顶点。
[0177] 为了使用树表示来确定绘制调用的待处理的图元和顶点,驱动器遍历树的节点,构建待处理的图元集合和顶点集合。从根节点开始(如果遍历继续)向下朝着叶节点遍历树。按照将保留绘制调用中的图元的期望的渲染顺序的顺序(因此在按照左至右的顺序构造树的情况下,从左至右)来遍历树。
[0178] 在遍历期间,驱动器对照渲染的帧的视锥来测试要考虑的树的各个节点的包围体积,以确定包围体积的任何部分是否落入视锥内。此视锥测试利用合适的包围体积-视锥交叉测试来执行。
[0179] 如果需要,在对照视锥进行测试之前将节点的包围体积变换为适当的屏幕空间位置。这可使用例如作为顶点着色处理的一部分提供的变换矩阵。
[0180] 为了有利于此,顶点着色器(顶点着色程序)的编译器被配置为确定要应用于绘制调用的顶点着色程序是否对顶点使用变换以将它们变换到屏幕空间,并且如果是,则提取屏幕空间变换(变换矩阵)并将它提供给节点包围体积-视锥测试处理。
[0181] 节点的视锥测试的结果用于确定是否将该节点的图元子集和顶点集合包括在绘制调用的待处理的图元集合和顶点集合中,并且确定是否继续以及如何继续树的遍历。
[0182] 如果节点完全通过视锥测试(即,其包围体积完全在视锥内),则该节点的图元子集和顶点集合被包括在(添加到)绘制调用的待处理的图元集合和顶点集合中。然后,在被接受的节点的父节点处继续树的遍历(因此移至该父节点的仍待测试的下一子节点(如果存在的话))。
[0183] 对应地,如果节点的视锥测试完全失败(即,其包围体积完全在视锥之外),则该节点的图元子集和顶点集合不被包括在(添加到)绘制调用的待处理的图元集合和顶点集合中。然后,在被拒绝的节点的父节点处再次继续树的遍历(因此移至被拒绝的节点的父节点的仍待测试的下一子节点(如果存在的话))。
[0184] 如果不是叶节点的节点部分地通过视锥测试(例如,其包围体积仅部分地(不是完全地)在视锥内),则不将该节点的图元子集和顶点集合包括在该阶段的绘制调用的待处理的图元集合和顶点集合中,而是对所关注的节点的子节点继续树遍历(然后测试它们自己)。
[0185] 在不存在父节点的仍待测试的另外的子节点的情况下,在所关注的父节点的父节点处继续遍历(因此移至高层父节点的仍待测试的下一子节点(如果存在的话))(以接下来待测试的高层节点(如果存在的话)来继续)。
[0186] 如果发现叶节点至少部分地通过视锥测试(即,其包围体积至少部分地在视锥内),则该叶节点的图元子集和顶点集合被包括在绘制调用的待处理的图元集合和顶点集合中。然后,在被接受的叶节点的父节点处继续树的遍历(因此移至该父节点的仍待测试的下一叶节点(如果存在的话))。
[0187] 重复该处理,直至树被完全遍历(直至需要测试的树中的所有节点已被测试)。
[0188] 为了在遍历树时生成待处理的图元集合和顶点集合,维持运转的图元主列表和运转的顶点主列表,并且当节点通过视锥测试时,各个新“通过”的节点的图元和顶点与现有的图元和顶点主列表组合。
[0189] 在本实施方式中,这样构造待处理的图元“主”列表:开始时用于绘制调用的所有图元均在主列表中,然后如果通过视锥测试拒绝树的节点的进一步处理,则从主列表去除图元(例如并且优选地,图元索引的范围)。
[0190] 对于顶点,用于构建“主”列表的处理取决于针对树节点存储顶点数据的方式。
[0191] 如果节点具有与其关联的顶点索引位图(位域),则主顶点列表被相应地维持作为位图(位域),并且“主”位图与通过视锥测试的节点的顶点位图进行“或”运算,以提供用于绘制调用的合并、更新的主顶点索引位图。
[0192] 对应地,如果树节点具有与其关联的顶点索引范围,则通过视锥测试的树节点的顶点索引范围被合并成主顶点列表的新顶点索引范围。这按照上面所讨论的构造树表示时合并子节点的情况下对应的方式来进行。因此,如果两个节点顶点索引范围交叠或者分离开少于或等于阈值数量的顶点索引(如上所述),则两个节点顶点索引范围被合并(组合)成主顶点索引列表的单个组合的顶点索引范围。
[0193] 树遍历的输出是绘制调用的待处理的图元集合和关联顶点集合(指示绘制调用的待处理的图元的图元集合的图元索引流内的图元索引范围以及指示绘制调用的待处理的顶点的顶点索引范围或顶点索引位图的形式)。
[0194] 然后由驱动器4将此图元和顶点信息提供给图形处理单元(GPU)3以指示所关注的绘制调用的待处理的图元和顶点。然后,GPU 3按照所关注的图形处理系统的普通方式来处理(渲染)所指示的图元和顶点,以提供绘制调用的期望的渲染输出。根据需要,此处理可包括例如顶点着色、光栅化、渲染(片段着色)等。
[0195] 在这点上将理解,由于作为树遍历的输出的绘制调用的待处理的图元集合和关联顶点集合将不包括与被视锥测试拒绝的树节点关联的任何图元和顶点,本实施方式的树表示的生成和使用处理因此允许为绘制调用推导待处理的图元缩减集和关联顶点缩减集,而不是简单地向图形处理单元3提供绘制调用的所有图元和顶点以进行处理。因此这尤其有利于为绘制调用推导用于处理的缩减或最小顶点集合,因此减小顶点处理负荷。
[0196] 图4和图5示出树表示的使用。
[0197] 图4是示出使用树表示的处理的步骤的流程图。如图4所示,该处理开始于驱动器遍历树,对照视锥测试树的节点并且利用那些测试的结果构建图元和顶点的列表(步骤40)。然后将如此确定的图元和顶点的列表提供给图形处理器3(步骤41),然后图形处理器为绘制调用处理所指示的图元和顶点的列表(步骤42)。
[0198] 图5示意性地示出树的遍历。
[0199] 如图5所示,遍历在根节点37处开始。如果根节点37完全通过视锥测试,则绘制调用的整个图元集合及其关联的顶点集合将被整体渲染,如果根节点的视锥测试失败,则绘制调用的整个图元集合将被拒绝并且不被进一步处理,但是如果根节点仅部分地通过视锥测试,则遍历树以测试根节点的子节点。
[0200] 为了图5所示的示例,假设在测试时与根节点37关联的几何形状(图元)被发现部分地落在视锥内。因此,接着测试根节点的最左侧的子节点50(假设树按照左至右的顺序构造,因此应该按照左至右的顺序遍历以保留期望的渲染顺序)。
[0201] 如果当测试节点50时,再次确定该节点的几何形状部分地在视锥内,则测试其最左侧的子节点51。在图5所示的示例中假设节点51的包围体积完全在视锥内,因此该节点51的图元集合和顶点集合被添加到待处理的顶点和图元的主列表。
[0202] 然后在没有测试节点51的叶节点的情况下,遍历返回到节点51的父节点50。然后测试节点50的下一子节点52。在这种情况下,假设该节点的包围体积仅部分地在视锥内,因此遍历继续以测试节点52的叶节点53、54。如果叶节点53、54的包围体积全部在视锥内(即,完全地或部分地在视锥内),则将叶节点的图元和顶点集合添加到待处理的顶点和图元的主列表,否则不添加。
[0203] 一旦测试了叶节点53和54,遍历继续至根节点37的下一子节点55。同样,在图5所示的示例中假设节点55的包围体积部分地在视锥内,因此接着测试其最左侧的子节点56。在这种情况下,假设子节点56的包围体积完全在视锥之外,因此不将节点56的图元和顶点添加到图元和顶点的主列表,然后以节点55的下一子节点57继续遍历。
[0204] 在这种情况下,假设节点57的包围体积部分地在视锥内,因此测试节点57的叶节点58、59。如果叶节点58、59的包围体积全部在视锥内(即,完全地或部分地在视锥内),则将这些叶节点的图元和顶点集合添加到待处理的顶点和图元的主列表,否则不添加。
[0205] 然后当树的遍历完成时,将如此推导的绘制调用的图元和顶点的主列表提供给GPU 3以进行处理。
[0206] 针对输出帧的待处理的各个绘制调用依次重复该处理,直至已由图形处理器3渲染了输出帧的所有绘制调用。然后该处理可移至下一输出帧,以此类推。
[0207] 本领域技术人员将理解,如果需要,本实施方式的许多修改和/或变化将是可能的。
[0208] 例如,尽管可针对待处理的每一个绘制调用(图元集合)生成并使用树表示,申请人已认识到,可能存在这样的情况:简单地以传统方式处理图元集合可能更可取。例如,准备和使用树结构的成本与由此实现的顶点处理的降低相比可能得不偿失的情况就是如此。
[0209] 因此,在优选实施方式中,确定待处理的各个图元集合的空间相干性的度量,如果空间相干性被确定为低于(或者等于或低于)阈值空间相干性度量,则针对该图元集合不构造和使用树表示。
[0210] 在这种情况下,平均顶点索引间隔(图元集合的连续顶点之间的顶点数量)被确定并用作图元集合的空间相干性的度量。然后,如果此平均顶点索引间隔(距离)超过(或者等于或超过)阈值,则图元集合被视为空间不相干,因此针对该图元集合不构造并使用树表示,仅按照所关注的图形处理系统的普通方式简单地处理该图元集合(即,构造并使用树表示的处理被省略(绕过))。
[0211] 从上文将理解,本发明(至少在其优选实施方式中)有利于在绘制调用的一些或所有图元和顶点可能实际上落在视锥之外的情况下,确定绘制调用的待处理的图元(以及尤其是,顶点)的缩减和最小集合。因此这有利于在渲染绘制调用时减小图元和顶点处理负荷。
[0212] 这(至少在本发明的优选实施方式中)通过构造绘制调用的图元集合的树表示,然后使用该树表示确定绘制调用的待处理的图元和顶点来实现。