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

硬件曲面细分装置

文献发布时间:2023-06-19 16:12:48



本申请是申请日为2019年4月3日,申请号为201910267320.6,发明名称为“硬件曲面细分装置”(原名称为“硬件曲面细分单元”)的申请的分案申请。

技术领域

本申请涉及,但不限于,硬件曲面细分单元。

背景

曲面细分(tessellation)是计算机图形学中使用的技术,它将表示场景中对象的一组曲面(surfaces)分成许多更小且更简单的片(称为图元),这种片通常是三角形,其更适合渲染。生成的经曲面细分的曲面通常是原始曲面的近似,但是可以通过增加生成的图元的数量来提高这种近似的精度,这反过来通常导致图元更小。曲面细分/细分(sub-division)的数量通常由细节层次(LOD)确定。因此,在需要更高细节层次的地方(例如,因为对象更靠近观察者和/或对象具有更复杂的形状),通常使用增加数量的图元。然而,使用更大数量三角形增加了渲染场景所需的处理工作量。

通常在形状为正方形或三角形(即,四边形或三角形)的片(patch)上执行对三角形图元的细分,并且该片可以被弯曲以拟合(fit)成它们所代表的对象的曲面(因此可以被称为“曲面片(surface patches)”)和/或应用位移(displacement)映射。然而,不是在弯曲片上执行细分,而是在片的域中执行细分(例如,就像片是平面的,而不是由例如多项式方程定义的),片的域可以用(u,v)参数来定义,并被称为“参数空间”。这意味着曲面细分过程独立于最终曲面中存在的任何曲率。

曲面细分可以被提前执行(例如,以不同的细节层次和/或从不同的视点来计算场景的多个不同视图),或者可以被动态执行(例如,以提供连续的或依赖于视图的细节层次)。利用一些现有的曲面细分方法,用户可能体验不期望的视觉伪像(artefacts),其中,尽管所请求的细节层次被平滑地改变,但是生成的曲面细分以不连续的方式改变。

下面描述的实施例仅通过为示例的方式被提供而不是对解决用于执行曲面细分的已知方法和装置的任何缺点或所有缺点的实现方式的限制。

概述

本概述被提供以简化形式引入在以下详细描述中将进一步描述的概念选择。本概述不旨在标识出要求保护的主题的关键特征或必要特征,亦不旨在用于限制要求保护的主题的范围。

本文描述了许多不同的硬件曲面细分单元。本文描述的所有硬件曲面细分单元包括细分逻辑块,该细分逻辑块包括硬件逻辑,该硬件逻辑被布置成将片细分成两个(或更多个)子片。本文描述的所有硬件曲面细分单元还包括被配置为确定片是否要被细分的决策逻辑块和控制曲面细分发生的顺序的一个或更多个硬件元件。在各种示例中,该硬件元件是运行先进后出(first-in-last-out)方案的片堆栈,而在其他示例中,存在一个或更多个选择逻辑块,该一个或更多个选择逻辑块被配置为接收关于多于一个片或子片的片数据,并且输出关于所接收的片或子片中所选择的一个片或子片的片数据。

第一方面提供了一种硬件曲面细分单元,其包括片堆栈、细分决策逻辑块、细分逻辑块和顺序翻转逻辑块,其中:片堆栈被布置成存储描述一个或更多个初始片和多个(aplurality of)子片的片数据,并且根据先进后出方案经由输出端来输出片数据,片堆栈包括被配置成接收描述初始片的片数据的第一输入端和被配置成接收描述子片的片数据的第二输入端;该细分决策逻辑块包括:(i)被配置为从片堆栈接收片数据的输入端,(ii)被布置为根据片数据确定接收到关于其的片数据的初始片或子片是否要被细分的硬件逻辑,(iii)被配置为响应于确定初始片或子片要被细分而将片数据输出到细分逻辑块的第一输出端,以及(iv)被配置为响应于确定初始片或子片将不被细分而输出片数据的第二输出端;该细分逻辑块包括:(i)被配置为从细分决策逻辑块接收片数据的输入端,(ii)被布置为对接收到关于其的片数据的初始片或子片进行细分的硬件逻辑,以及(iii)被配置为将关于通过细分形成的子片中的每一个子片的片数据输出到片堆栈的输出端,以及该顺序翻转逻辑块包括:(i)被配置为从细分逻辑块接收子片数据的输入端,(ii)输出端,以及(iii)被布置为基于一个或更多个存储值控制子片数据经由输出端被输出的顺序的硬件逻辑。

硬件曲面细分单元还可以包括:域顶点队列,其被布置为存储从细分逻辑块接收的顶点数据,并根据先进后出方案经由输出端来输出顶点数据。

第二方面提供了一种硬件曲面细分单元,其包括:初始片选择逻辑块、细分逻辑块、子片选择逻辑块、ID结束逻辑块(an end of ID logic block)和顺序翻转逻辑块,该初始片选择逻辑块包括:(i)第一输入端,该第一输入端被配置为接收关于多个初始片的片数据,(ii)第二输入端,该第二输入端布置为接收ID,(iii)被布置为基于ID的一个或更多个位选择关于初始片之一的片数据的硬件逻辑,以及(iv)被配置为输出所选择的片数据的输出端;该细分逻辑块包括:(i)被配置成接收片数据的输入端,(ii)被布置成对接收到关于其的片数据的初始片或子片进行细分的硬件逻辑,以及(iii)被配置成输出关于通过细分形成的子片中的每一个子片的片数据的输出端;该子片选择逻辑块包括:(i)被配置为接收关于通过细分逻辑块中的细分形成的多个子片的片数据的第一输入端,(ii)被配置为接收ID的第二输入端,(iii)被布置为基于该ID的一个或更多个位选择关于子片之一的片数据的硬件逻辑,以及(iv)被配置为输出所选择的片数据的输出端;该ID结束逻辑块包括:(i)被配置为从初始片选择逻辑块接收关于初始片的片数据的第一输入端,(ii)被布置为从子片选择逻辑块接收关于所选择的子片的片数据的第二输入端,(iii)被布置为根据片或子片的ID来确定初始片或子片是否要被细分的硬件逻辑,(iv)被配置为响应于确定初始片或子片要被细分而输出片数据的第一输出端,以及(v)被配置为响应于确定初始片或子片将不被细分而输出片数据的第二输出端;该顺序翻转逻辑块包括:(i)被配置为从细分逻辑块接收子片数据的输入端,(ii)被配置为向子片选择逻辑块输出子片数据的输出端,以及(iii)被布置为基于一个或更多个存储值控制经由输出端输出子片数据的顺序的硬件逻辑。

第三方面(未在权利要求集中要求保护)提供了一种方法,该方法包括:在片堆栈中接收描述初始片的片数据,描述通过对初始片或其他子片的细分而形成的子片的片数据;在片堆栈中存储描述一个或更多个初始片和多个子片的片数据;根据先进后出方案从片堆栈输出片数据;在细分决策逻辑块中,确定接收到关于其的片数据的初始片或子片是否要被细分,并且响应于确定初始片或子片要被细分将数据输出到细分逻辑块;在细分逻辑块中,细分接收到关于其的片数据的初始片或子片,并将关于通过细分而形成的子片中的每一个子片的片数据输出到片堆栈。

第四方面(未在权利要求集中要求保护)提供了一种方法,该方法包括:接收关于多个初始片的ID和片数据;基于ID的一个或更多个位,选择关于初始片之一的片数据;对接收到关于其的片数据的初始片或子片进行细分;在细分选择逻辑块中接收关于通过细分而形成的多个子片的ID和片数据;在细分选择逻辑块中,基于ID的一个或更多个位,选择关于子片之一的片数据;确定是否对初始片或子片进行细分;以及响应于确定初始片或子片将不被细分,输出片数据。

本文描述的硬件曲面细分单元(或包括这种曲面细分单元的图形流水线)可以体现在集成电路上的硬件中。可以提供在集成电路制造系统处制造如本文所述的曲面细分单元的方法。可提供一种集成电路定义数据集,其在集成电路制造系统中进行处理时,将该系统配置为制造如本文所述的曲面细分单元。可提供一种非暂时性计算机可读存储介质,在该非暂时性计算机可读存储介质上存储有集成电路的计算机可读描述,该集成电路的计算机可读描述在进行处理时,使布局处理系统生成在集成电路制造系统中被使用来制造如本文所述的曲面细分单元的电路布局描述。

可提供一种集成电路制造系统,该集成电路制造系统包括:非暂时性计算机可读存储介质,在该非暂时性计算机可读存储介质上存储有描述如本文所述的曲面细分单元的计算机可读集成电路描述;布局处理系统,其被配置为处理集成电路描述,以便生成体现如本文所述的曲面细分单元的集成电路的电路布局描述;以及集成电路生成系统,其被配置为根据电路布局描述来制造如本文所述的曲面细分单元。

如对技术人员将明显的是,以上特征可在适当时进行组合,并且可与本文中所描述的示例的任意方面组合。

附图说明

现在将参照附图对示例进行详细描述,其中:

图1A和图1B示出了示例GPU流水线的示意图;

图2是第一示例硬件曲面细分单元的示意图;

图3A是在图2中示出的准备块(set-up block)的示例结构的示意图;

图3B是在图2中示出的预处理块的示例结构的示意图;

图4A、图4B和4D示出了图2中的元件的示例实现方式的示意图;

图4C是示出了对片的细分的示意图;

图5是第二示例硬件曲面细分单元的示意图;

图6A-6E是示出图5中硬件曲面细分单元的操作的示意图;

图7是第三示例硬件曲面细分单元的示意图;

图8是图7中的输出顶点逻辑块的示例实现方式的示意图;

图9示出了其中顶点和图元都按顺序编号的示例排序;

图10是第四示例硬件曲面细分单元的示意图;

图11示出了其中顶点和图元都按顺序编号的另一示例排序;

图12是第五示例硬件曲面细分单元的示意图;

图13A和图13B示出了两个示例图元ID的示意图;

图14是第六示例硬件曲面细分单元的示意图;

图15A-15G是示出图14中的元件的示例实现方式的示意图;

图16是第七示例硬件曲面细分单元的示意图;

图17A-17H是示出图16中元件的示例实现方式的示意图;

图18是第八示例硬件曲面细分单元的示意图;

图19A-19E是示出图18中元件的示例实现方式的示意图;

图20是第九示例硬件曲面细分单元的示意图;

图21是第十示例硬件曲面细分单元的示意图;

图22是第十一示例硬件曲面细分单元的示意图;

图23A-23O是示出图5中的硬件曲面细分单元的操作的进一步示例的示意图;和

图24是第十二示例硬件曲面细分单元的示意图。

图25示出了用于生成体现如本文所述的被配置成执行排序方法的硬件曲面细分单元的集成电路的集成电路制造系统。

附图图示了不同的示例。技术人员将认识到,图中所示出的元件边界(例如,框、框的组、或其他形状)表示边界的一个示例。在一些示例中可以是,一个元件可以被设计为多个元件,或者多个元件可被设计为一个元件。在适当情况下,共同的参考数字在全部附图中用于指示类似的特征。

详细描述

以下的描述是通过示例的方式来呈现的,以使本领域技术人员能够进行和使用本发明。本发明不限于本文中所描述的实施例,并且对所公开的实施例的各种修改对于本领域技术人员将是明显的。

现在将仅通过示例来对实施例进行描述。

如上所述,曲面细分涉及选择性地将形状通常为正方形或三角形的片细分成更小的三角形片。通常基于一个或更多个曲面细分因子(TF),例如通过将一个或更多个TF彼此进行比较和/或与阈值进行比较,做出关于片是否应该被细分的确定。在一些示例中,使用边曲面细分因子,其中片的每条边都具有边曲面细分因子,并且边曲面细分因子定义特定边(以及因此该特定边作为其一部分的片)应该被细分多少次。在其他示例中(例如在GB2533443和GB2533444中描述的方法中),使用顶点曲面细分因子,其中片的每个顶点(或角)具有顶点曲面细分因子。

术语“曲面片”在本文中被用来指通常是有限的N维曲面(或者在等值线(isoline)的情况下是N维曲线段),其是将参数映射函数应用于有界2D域的结果,曲面片可以是四边形或三角形(或者在等值线的情况下是1D线段)。所得的曲面或等值线可以被认为是N维的,因为它不仅可以包括对于笛卡尔(Cartesian)(或均匀)空间定位的3(或4)维,还可以包括其他参数,例如纹理坐标。如上所述,曲面片可以被弯曲以适合它们所代表的对象的曲面和/或应用位移映射。然而,曲面细分(即片的细分)不是在“世界空间”中执行的(即,其不在弯曲的曲面片上执行),而是在域空间(其也可以被称为参数化空间或参数空间或UV空间)中执行的,其中域中的任何位置都可以由被认为是域空间坐标的两个坐标(u,v)来描述,这意味着曲面细分过程独立于最终曲面中存在的任何曲率。

术语“片”在本文中被用来指界定域的两个、三个或四个顶点(分别对于等值线、三角形或四边形)的有序集合。因此,术语“域”是指由片的顶点界定的二维空间。术语“输入片”被用来指被输入到曲面细分单元的片。在曲面细分单元执行预处理阶段的示例中,该预处理阶段对输入片进行细分,之后将曲面细分算法重复地应用于由预处理阶段形成的片,在预处理阶段中形成的片在本文被称为“初始片”。由初始片的细分形成的片在本文被称为“子片”。术语“图元”在本文被用来指曲面细分单元输出的片(例如,初始片或子片),因为它不需要进一步的细分。虽然输入片、初始片和子片通常是三角形,并且下面的示例示出了三角形,但是在其他示例中,输入片、初始片和/或子片可以是等值线、四边形或任何形式的多边形。

术语“顶点”通常用于描述位置外加其他属性,其中这些属性根据上下文而不同。例如,来自域着色器的输入控制点和输出顶点包括3D位置外加其他参数,例如法线、切线、纹理等(被称为世界空间顶点),而曲面细分器内的顶点包括域空间坐标和顶点曲面细分因子(被称为曲面细分器顶点(tessellator vertice))。因此,曲面细分器内的这些顶点与输入控制点或形成最终三角形的所得到的N维顶点不同。术语“域顶点”在本文被用来指来自曲面细分器的每个顶点的输出结构,描述顶点在域中的状态,并且这是输出到输出顶点缓冲区的结构。在许多示例中,域顶点是UV坐标,并且在其他示例中,它可以另外包括权重和可选的一个或更多个相邻顶点的UV坐标。特别地,该权重可以是位移因子,并且这些相邻顶点可以是两个或三个父顶点,如GB2533443和GB2533444中所述。

本文描述了许多不同的硬件曲面细分单元,其可以用于提供实时曲面细分(即,可以以每帧速率执行的曲面细分),或者可选地,硬件曲面细分单元可以用于较慢的系统或者作为离线预处理的一部分。本文描述的许多硬件曲面细分单元包括片堆栈。片堆栈可以以各种不同的方式实现;然而,在所有使用片堆栈的示例中,片堆栈实现了先进后出(FILO)策略。虽然片堆栈被描述为“堆栈”,但是它可以是可以作为FILO操作的或者可以在CPU上实现的任何数据结构或任何其他可以建模递归的组成部分。片堆栈存储片数据(即,与初始片和/或子片相关的数据),并且对于给定片(即,初始片或子片),数据可以包括三个曲面细分器顶点(如上定义)和可选的附加参数。

如本文所述,通过使用片堆栈,提高了硬件曲面细分单元的效率,并且降低了用于存储图元数据的总存储器需求。此外,片堆栈的使用使得能够用相同的细分块执行多层级细分,并且在各种示例中,可以提供多个细分块,使得能够在相同的时钟周期内对多个片进行细分。

本文还描述了单个顶点/图元硬件曲面细分单元,其被配置为接收顶点或图元ID作为输入,以及然后基于接收到的ID生成一个或更多个(例如三个)域顶点(例如,响应于接收到顶点ID的一个域顶点和响应于接收到图元ID的三个域顶点)。这种单个顶点/图元硬件曲面细分单元提供了生成单个顶点或图元的有效方式,并且避免了对执行生成大量的后续被丢弃的图元和顶点数据的完整曲面细分的需要。

在以下描述中,图元、片和子片都被描述为三角形形状,在其他示例中,它们可以是等值线或包括多于三条边(例如,四边形或具有多于四条边的多边形)。

本文描述的硬件曲面细分单元可以是GPU流水线的一部分,并且在图1A和图1B中示出了两个示例流水线。

图1A示出了示例图形处理单元(GPU)流水线100的示意图,其可以在GPU内的硬件中被实现,并且其使用基于图块的渲染方法。如图1A中所示,流水线100包括几何形状处理阶段(geometry processing phase)101A和光栅化阶段101B。几何形状处理阶段101A包括曲面细分单元104和负责执行按顶点计算的顶点着色器102。顶点着色器102不知道网格拓扑,并且执行按顶点操作,使得其仅具有正在被处理的当前顶点的信息。在顶点着色器102和曲面细分单元(或曲面细分器)104之间可以有未在图1A中示出的一个或更多个可选的外壳着色器(hull shaders)。几何形状处理阶段101A还包括几何形状特定域着色器(DS)103、平铺单元(tiling unit)106,并且还可以包括其他元件,例如存储器105和/或图1A中未示出的其他元件。

与顶点着色器不同,硬件曲面细分单元104(以及任何可选的外壳着色器)按片而不是按顶点操作。曲面细分单元104输出图元,并且在使用顶点索引的系统中,输出图元采取三个顶点索引和顶点数据(例如,对于每个顶点一个UV坐标,以及在各种示例中,其他参数,例如位移因子和可选的父UV坐标)的缓冲区的形式。在不使用索引的情况下,输出图元采取三个域顶点的形式,其中域顶点可以仅包括UV坐标,或者可以包括UV坐标加上其他参数(例如,位移因子和可选的父UV坐标)。曲面细分器104输出的数据可以存储在存储器105中。

几何形状处理阶段101A中的几何形状特定域着色器103生成图元的角的投影位置。平铺单元106从存储器105读取由曲面细分器104生成的数据,并使用该数据连同由几何形状特定域着色器103生成的投影位置来生成按图块(per-tile)显示列表。显示列表然后被输出到参数存储器107。对于特定图块,每个按图块显示列表标识至少部分位于该图块内的那些图元。这些显示列表可以由平铺单元106使用平铺算法生成。在GPU流水线内的后续元件(例如光栅化阶段101B)然后可以从参数存储器107读取数据。

尽管图1A示出了使用几何形状特定域着色器103来计算屏幕空间中新图元的投影位置(称为“屏幕坐标”),但是在其他示例中,可以使用全域着色器(类似于域着色器108)或替代的专用硬件来执行对图元的屏幕坐标的这些计算。在不包括几何形状特定域着色器103的其他示例中,可以提供被布置成估计新图元的屏幕坐标的硬件。

作为光栅化阶段101B的一部分的域着色器108充当由曲面细分器104产生的顶点的第二顶点着色器,并且每图块每图元每顶点被执行一次(executed once per vertexper primitive per tile),然而高速缓存可以被用于实现着色顶点的重用。域着色器被供应有域空间位置(u,v),并被赋予所有片信息,并输出完整的顶点结构。域着色器使用片控制点和域空间坐标来构建新顶点,并(例如,通过对纹理中编码的高度映射进行采样)应用任何位移映射。(在域着色器108中的)域着色在GPU流水线100中尽可能晚地保留,因为其极大地扩大了顶点大小(例如,在存储每个顶点所需的大小方面)。在域着色器108已经对于每个片的每个生成的顶点运行之后,对于每个图块的数据在光栅化器109中被进一步处理,并且一些或所有图元被渲染。

为了顶点数据可用于渲染(例如,用于域着色器108和光栅化器109),由曲面细分器104生成的顶点数据可以根据平铺储存方案来进行存储。在第一示例方案中,顶点数据可以存储在对于由平铺单元106生成的每个组(或图块)的图元列表中,例如,其中图元以顶点UV的三元组(triples)形式输出,而在另一示例方案中,顶点数据可以存储在一起,并且图元列表可以包括对该数据的引用。可选地,顶点数据(例如,存储器105中顶点UV的缓冲区的内容)可以(例如,在平铺单元106之后)被丢弃,并且只有图元标识符可以被保留在显示列表中(并且被存储在存储器107中)。当(例如,由域着色器108)需要顶点数据时,曲面细分过程可以被重新运行,并且对于不需要的那些图元(例如,不包括在特定显示列表中的图元)的数据被丢弃。将顶点数据(例如,UV坐标和在一些示例中的附加顶点属性)存储在显示列表中(且因此存储在存储器107中)使用了大量的储存和带宽(例如在GPU和系统存储器之间),且因此丢弃顶点数据并随后将其再生节省了储存和带宽;然而,通过对所有图元重新运行曲面细分来重新生成顶点数据是低效的。

图1B示出了第二示例GPU流水线101的示意图,其可以在GPU内的硬件中实现,并且其还使用基于图块的渲染方法。类似于图1A中所示的示例,图1B中所示的GPU流水线101包括几何形状处理阶段111A和光栅化阶段111B。然而,与图1A中所示的GPU流水线100不同,图1B中所示的GPU流水线101的几何形状处理阶段111A中的曲面细分单元112针对图元生成标识符(ID),其编码关于图元是如何生成的信息,而不是仅指示图元从曲面细分单元输出的顺序。因此,顶点数据可以被丢弃并且不被存储在显示列表中(从而节省储存和带宽),并且代替在光栅化阶段111B中重新运行完整曲面细分,图元ID可以被用于例如在光栅化阶段111B中的单个图元曲面细分器114中生成顶点数据。为了将其与单个图元曲面细分器114区分开来,几何形状处理阶段中的曲面细分单元112可以被称为“所有图元曲面细分器(allprimitives tessellator)”。

几何形状处理阶段111A包括负责执行按顶点计算的顶点着色器102。如上参考图1A所述,顶点着色器102不知道网格拓扑,而仅知道已经被馈送到其中的当前顶点。几何形状处理阶段111A还包括所有图元曲面细分器112、存储器115、几何形状特定域着色器(DS)113和平铺单元116。在顶点着色器102和所有图元曲面细分器112之间可以有(未在图1B中示出的)一个或更多个可选的外壳着色器。

与顶点着色器102不同,所有图元曲面细分器112(以及任何可选的外壳着色器)按片而不是按顶点操作。

所有图元曲面细分器112被配置为执行初始的完整曲面细分,并生成图元及其ID以及顶点数据。在各种示例中,所有图元曲面细分器112输出图元列表(例如,以UV缓冲区和使用索引的索引缓冲区的形式,或者如果不使用索引,则以UV三元组的图元缓冲区的形式)。所有图元曲面细分器112也生成ID缓冲区(与图元顺序匹配),图元列表和ID缓冲区可以被存储在存储器115中。

改进的GPU流水线101中的几何形状特定域着色器113生成图元的角的投影位置(即,屏幕坐标)。

平铺单元116然后使用新图元的(如由几何形状特定域着色器113生成的)投影位置来确定哪些图元至少部分位于每个图块中,并生成相应的按图块显示列表。图元ID或对这些ID的引用(取决于所使用的平铺储存方案)被存储在相应的显示列表中(例如,在参数存储器117中,即在每个图块中部分可见的图元列表中),而不是随后可以被丢弃的UV坐标中。图元ID比三个UV坐标更紧凑,因此这节省了存储器(且因此参数存储器117的大小可以比图1A中所示的GPU流水线100中的相对应的参数存储器107小得多,并且这种布置将使用更少的功率)。对曲面片控制点(包括曲面细分因子)的引用也被存储(例如,在参数存储器117中)。

尽管以上描述和图1B示出了使用几何形状特定域着色器113来计算屏幕空间中新图元的投影位置(称为“屏幕坐标”),但是在其他示例中,可以使用全域着色器(类似于域着色器118)或替代的专用硬件来执行关于图元的屏幕坐标的这些计算。在不包括几何形状特定域着色器113的其他示例中,可以提供被布置成估计新图元的屏幕坐标的硬件。

当(在光栅化阶段111B中)图块要被光栅化时,使用单个图元曲面细分器114将对于图块的显示列表中的每个图元ID转换成UV坐标的三元组(可以缩写为“UV三元组”)。单个图元曲面细分器114被配置为根据输入图元ID生成顶点数据,并且尽管这被示为光栅化阶段111B的一部分(因为这是它在数据流中的位置),但是其可以物理上靠近曲面细分单元112或者与曲面细分单元112集成,例如使得逻辑可以在曲面细分单元112和单个图元曲面细分器114之间被重用。两个曲面细分器112、114物理上位于同一位置或集成在一起,这两个曲面细分器112、114可以统称为改进的曲面细分单元。

光栅化阶段111B中的域着色器118充当关于由单个图元曲面细分器114产生的顶点的第二顶点着色器,并且每图块每图元每顶点被执行一次,然而高速缓存可以用于实现着色顶点的重用。域着色器118被供应有域空间位置(u,v),并且被赋予所有片信息并输出完整的顶点结构。域着色器使用片控制点和域空间坐标来构建新顶点,并(例如,通过对纹理中编码的高度映射进行采样)应用任何位移映射。(在域着色器118中的)域着色在GPU流水线101中尽可能晚地保留,因为它极大地扩大了存储每个顶点所需的大小(例如存储器的大小)。在域着色器118和几何形状特定域着色器113分别实现的情况下,(例如,就硅面积而言更大),域着色器118的大小可以大于几何形状特定域着色器113,因为它还可以被配置为处理除几何数据之外的其他边带数据。

在域着色器118已经针对每个片的每个生成的顶点运行之后,在光栅化阶段111B中对于每个图块的数据被进一步处理,并且一些或所有图元被渲染。

本文描述的硬件曲面细分单元可以用在GPU流水线中,例如图1A和图1B中所示的那些GPU流水线。它们也可以用在其他GPU体系结构中,例如非基于图块的渲染器,并且将认识到,它们可以被用在包括除顶点着色器102、可选的外壳着色器和域着色器118之外的其他着色器或者代替顶点着色器102、可选的外壳着色器和域着色器118的其他着色器的GPU流水线中。

虽然上面没有描述,但是几何数据可以在存储在存储器中(例如,在图1A中的存储器105和/或参数存储器107中,以及在图1B中的存储器115和/或参数存储器117中)时被压缩。

图2是第一示例硬件曲面细分单元200的示意图。这种硬件曲面细分单元200不生成图元ID,并且因此不适用于图1B中所示的GPU流水线101;然而,它可以用作图1A中所示的GPU流水线100中的曲面细分单元104,或者用于非基于图块的渲染器的曲面细分阶段。

如图2中所示,硬件曲面细分单元200包括准备块201、预处理块202、片堆栈204、细分决策逻辑块206和细分逻辑块208。预处理块202和细分逻辑块208都执行对片的细分,在预处理块202的情况下,是输入片被细分,而在细分逻辑块208的情况下,是初始片或(如由对初始片或另一个子片的细分而形成的)子片被细分。细分决策逻辑块206确定片(例如,初始片或子片)是否需要由细分逻辑块208进行细分,并且如果不需要,则输出片。

如图2中所示,预处理块201接收准备块201的输出。预处理块202的输出被片堆栈204接收,并且在各种示例中也被细分决策逻辑块206接收(然而在这种情况下,不同的数据被输出到片堆栈204和细分决策逻辑块206)。细分决策逻辑块206从片堆栈204(以及可选地预处理块202和/或细分逻辑块208)接收关于片的数据,并且细分决策逻辑块206的输出或者是从曲面细分单元输出,或者是输入到细分逻辑块208,这取决于由细分决策逻辑块206做出的决策(即,做出的是否对片进行细分的决策)。来自细分逻辑块208的输出被片堆栈204(或者可选地被细分决策逻辑块206)接收。

如上所述,输入片可以是四边形、三角形、等值线或其他多边形。在所有情况下,准备块201用于根据输入顶点数据(例如,曲面细分因子)以及预定义的UV坐标(例如,(0,0)、(0,1)、(1,0)和(1,1))组合输入片的所有顶点。在所有情况下,除了输入片是等值线的情况之外,预处理块202执行预处理操作,以将输入片细分成具有相同边数的多个多边形,例如多个三角形,并且这些被称为“初始片”。预处理阶段用于确保曲面细分与定向无关,并且因此对等值线片(an isoline patch)是不需要的(因为算法是对称工作的,因此任何生成的曲面细分都没有定向依赖性)。预处理操作和相关联的曲面细分方法的示例在GB253343中进行描述,并且在所描述的方法中,预处理操作将四边形输入片细分成四个三角形初始片,然后其可以分别进行曲面细分,并且将三角形输入片细分成三个三角形初始片。

准备块201包括输入端240和输出端242,该输入端240被配置成从曲面片的顶点的某个子集接收顶点数据,该输出端242被配置成将输入片输出到预处理块202。输入片的每个顶点包括域空间坐标(UV)和顶点曲面细分因子(TF),并且可以包括其他数据(例如位移因子(DF))。对于每个顶点的域空间坐标和可选的位移因子不是从曲面片检索到的,而是作为固定数据存储在曲面细分单元内。位移因子通常被指定为默认值1。准备块201包括硬件逻辑,该硬件逻辑被布置为执行可选的TF变换操作(例如,通过取对数底数2)并组合输入片的所有顶点(例如,将作为输入给出的所有曲面细分因子以及所有其他属性分配给输入片的顶点,并以正确的顺序(例如顺时针方向)输出顶点)。准备块201经由输出端242将组合的输入片输出到预处理块202。

图3A中示出了准备块201的示例结构。如上所述,其包括可选的TF变换块302和输入片组合块303,该可选的TF变换块302包括被布置来执行TF变换操作的硬件逻辑,该输入片组合块303包括被布置来组合输入片的所有顶点的硬件逻辑。

TF变换逻辑块302(如果提供的话)包括输入端308和硬件逻辑,输入端308被配置为接收对于曲面片的顶点的某个子集(例如其角顶点)的顶点TF,硬件逻辑被配置为例如使用底数2的对数来变换这些顶点TF。这种变换通过简化操作提高了流程中后续块的效率(就硬件区域而言)。在其他示例中,可以不同地操纵TF,或者如上所述,可以省略该逻辑块。然后,这些变换后的TF经由输出端310从TF变换逻辑块302输出,并被输入到输入片组合块303。

预处理块202包括被配置为从准备块201接收输入片的输入端210。顶点数据包括TF或可选地在准备块201执行TF变换操作的情况下包括被变换的TF。预处理块202还包括硬件逻辑,该硬件逻辑被布置为将输入片细分成多个初始片,或者当不需要预处理时(例如,对于等值线输入片),将输入片作为初始片传递,并且预处理块202还包括输出端212,该输出端212被配置为输出新形成的初始片,其中对于每个初始片的数据包括三个曲面细分器顶点和可选的其他参数。如下所述,如果发生细分,那么该细分涉及生成至少一个新顶点。

预处理块202的示例结构示于图3B中。如上所述,预处理块202执行对输入片的细分,并且因此在各种示例中,该逻辑块的结构可以类似于细分逻辑块208。预处理块202包括中间顶点逻辑块304、TF缩减逻辑块306和初始片组合块326。尽管图3B示出了中间顶点逻辑块304和TF缩减块306的存在,但是如果没有发生初始细分,则可以省略它们(如图3B中的中间顶点逻辑块304的第二输出以及从预处理块202到细分决策逻辑块206的输出的箭头所示)。

中间顶点逻辑块304包括第一输入端312和第二输入端314,第一输入端312被配置为从准备块201接收原始TF或变换的TF(取决于准备块201是否包括TF变换块302),第二输入端314被配置为接收对于输入片中每个顶点的UV和可选的DF。中间顶点逻辑块304包括硬件逻辑,该硬件逻辑被布置为计算对于输入片的中间顶点的参数,并因此执行对输入片的细分(因为所有初始片都包括新形成的中间顶点和输入片的原始顶点中的两个)。对于中间顶点(例如,以曲面细分器顶点的形式,包括它的UV、TF和可选的DF以及它的零个或更多个父顶点的UV)的数据经由输出端316输出到TF缩减逻辑块306。GB253343中描述了计算关于中间顶点的参数(例如TF和可选的DF)的方法。其父顶点的UV是固定常数(例如,因为它们是域的角,且因此只能采用(0,0)、(0,1)、(1,0)和(1,1)的形式),且因此可以被构建到系统中(例如,存储在曲面细分单元中的小量存储器中),而不是被计算。例如,顶点在顶点不受混合物(blending)中任何其他顶点的影响(例如,当DF为1)时可以具有零个父顶点,并且在其通过对边进行细分而形成时可以具有两个父顶点,并且在其通过细分三角形输入片而形成时可以具有三个父顶点。

TF缩减逻辑块306包括被配置为接收对于由中间顶点逻辑块304生成的中间顶点的数据的第一输入端318和被配置为接收对于输入片中每个顶点的UV和DF的第二输入端320。TF缩减逻辑块306包括硬件逻辑,该硬件逻辑被布置为缩减由输入片形成的初始片的每一个中的每个顶点的TF(例如,通过从它们中减去固定值),且然后TF缩减逻辑块306经由输出端322将对于每个初始片的曲面细分器顶点输出到初始片组合块326。

初始片组合块326包括输入端328,输入端328被配置为接收由TF缩减逻辑块306输出的曲面细分器顶点。初始片组合块326包括硬件逻辑,该硬件逻辑被布置成将输入片的顶点和中间顶点组合成初始片,并且然后这些经由输出端330输出。

预处理块202输出的初始片数据(即,对于初始片中每个顶点的曲面细分器顶点和可选的其他参数)存储在片堆栈204中。在各种示例中,对于预处理块202中生成的所有多个初始片的初始片数据可以被输入到片堆栈204。在其他示例中,对于由预处理块202生成的多个初始片之一的初始片数据可以绕过片堆栈,并被直接输入到细分决策逻辑块206,并且多个初始片的剩余部分被输入到片堆栈204。这缩减了需要存储在片堆栈204中的片的最大数量。类似地,在各种示例中,由细分逻辑块208形成的子片的第一子片可以绕过片堆栈,并且被直接输入到细分决策逻辑块206中。

片堆栈204是存储片数据并运行FILO系统的数据结构。片堆栈204包括被配置为从预处理块202接收片数据的第一输入端214和被配置为从细分逻辑块208接收片数据的第二输入端216(例如,输入端214、216分别接收由预处理块202和细分逻辑块208推到堆栈上的数据)。从预处理块202接收的片数据与初始片相关,并且从细分逻辑块208接收的片数据与子片相关,并且在这两种情况下,对于特定片或子片的片数据是两个、三个或更多个曲面细分器顶点以及可选的其他参数的形式。片堆栈204包括用于根据FILO方案存储片数据的储存元件和输出端218,输出端218被配置为将最近接收的片数据输出到细分决策逻辑块206(例如,输出从堆栈弹出的数据)。因为存储在片堆栈204中的数据可以与初始片或子片相关,所以输出到细分决策逻辑块206的数据可以与初始片或子片相关。

细分决策逻辑块206包括从片堆栈204接收片数据(如,从堆栈弹出的数据)的第一输入端220和两个输出端:第一输出端222,其连接到细分逻辑块208的输入端;第二输出端224,其是曲面细分单元200的输出端。细分决策逻辑块206还可以包括被配置为(如上所述)直接从预处理块202接收对于初始片之一的片数据的第二输入端228,以及被配置为直接从细分逻辑块208接收子片之一的片数据的第三输入端229。细分决策逻辑块206包括硬件逻辑,其被布置成根据经由输入端220、228或229输入的片数据来确定片是否要被细分。响应于硬件逻辑根据片数据确定片要被细分,片数据经由第一输出端222输出,并且响应于硬件逻辑根据片数据确定片将不被细分,片数据经由第二输出端224输出。硬件逻辑可以例如实现在GB2533443和GB2533444中描述的曲面细分算法之一,以便基于对于该片的片数据来确定是否对该片进行细分。

在各种示例中,如图4A中所示,细分决策逻辑块206中的硬件逻辑402被配置为将对于片中顶点的子集的顶点TF与阈值T进行比较,并且如果对于顶点的子集的任何顶点TF超过阈值,则确定片将被细分,并且片数据经由第一输出端222输出。然而,如果对于顶点的子集的顶点TF中没有一个超过阈值,则确定片不被细分,并且片数据经由第二输出端224输出。可选地,如果使用边TF而不是顶点TF,则对于片中的边的子集的边TF在硬件逻辑402中与阈值进行比较。在片数据经由第二输出端224输出的情况下,片可以被称为图元,而不是片,因为不需要进一步的细分。在这样的示例中,经由第二输出端224输出的片数据可以省略各种属性或参数(例如,诸如TF),以形成输出图元。

细分逻辑块208包括输入端226,其被配置为从细分决策逻辑块206接收片数据。细分逻辑块208还包括硬件逻辑和输出端230,该硬件逻辑被布置为对经由输入端之一接收到关于其的片数据的片进行细分,输出端230被配置为将由细分形成的子片的每一个的片数据输出到片堆栈(经由输入端216)。如上所述,对于初始片或子片的片数据包括三个曲面细分器顶点和可选的其他参数。

如上所述,细分逻辑块208在功能上类似于预处理块202,这可以通过比较图3B中所示的示例预处理块202的结构和图4B中所示的示例细分逻辑块208的结构来看出。如图4B中所示,细分逻辑块208中的硬件逻辑包括中间顶点逻辑块404(其可以可选地被称为平均逻辑块)、TF缩减逻辑块406和子片组合块407。中间顶点逻辑块404生成中间顶点M,如图4C图形地所示,该中间顶点M将片的两个顶点之间的边二等分,该中间顶点M具有曲面细分因子,该因子是被细分的边的两端处的顶点(即,L和R)的平均值。任何平均函数可以被使用并且在GB2533443中描述了可以被使用的示例函数:

MEAN(TF1,TF2,...)=MIN(AVG(TF1,TF2,...),MIN(TF1,TF2,...)+Δ)

其中,AVG()是括号内的一长串值(例如,上面示例中的顶点TF1、顶点TF2,…)的算术平均值,MIN()是括号内的一长串值(例如,上面示例中的顶点TF1、顶点TF2,…)的最小值,以及Δ是预定的区间值。中间顶点逻辑块404包括输入端408和输出端410,输入端408被配置为接收对于被细分的片的曲面细分器顶点的子集(例如,曲面细分器顶点L和R),输出端410被配置为输出对于新形成的中间顶点(例如M)的曲面细分器顶点。

在图4D中更详细地示出了细分逻辑块208中的TF缩减逻辑块406的示例。TF缩减逻辑块406包括两个输入端:第一输入端412,其被配置为接收对于片中顶点(例如,T、L、R)的曲面细分器顶点;以及第二输入端414,其被配置为从平均逻辑块404接收对于新形成的中间顶点(例如,M)的曲面细分器顶点。TF缩减逻辑块406还包括输出端416,其被配置为输出对于两个或更多个子片的片数据。如图4D中所示,TF缩减逻辑块406可以包括将顶点TF中每一个与预定区间值Δ进行比较的逻辑块418。该比较器逻辑块418具有两个输出端,一个连接到将TF值设置为零的逻辑块420,以及另一个连接到从输入TF中减去区间值的逻辑块422。响应于比较器逻辑块418确定TF小于区间值,TF被输出到逻辑块420,逻辑块420将TF值设置为零,并且响应于比较器逻辑块418确定TF不小于区间值,TF被输出到逻辑块422,逻辑块422从输入TF中减去区间值。然后,从TF缩减逻辑块406(经由输出端416)输出缩减的TF。

如上所述,通过使用片堆栈204,提高了硬件曲面细分单元的效率,并且降低了用于存储图元数据的总存储器需求。如上所述,片堆栈的使用使得能够使用相同细分块的副本来执行多层级细分。此外,尽管图2(以及下面描述的其他示例硬件曲面细分单元)仅示出了单个细分逻辑块208,但是片堆栈的使用使得能够在本文描述的示例的变型中包括附加的细分逻辑块。通过在硬件曲面细分单元中包括多于一个的细分逻辑块,可以在单个周期中处理来自片堆栈的多个片,从而增加硬件曲面细分单元的吞吐量。

图5是第二示例硬件曲面细分单元500的示意图。这种硬件曲面细分单元500不生成图元ID,并且因此不适用于图1B中所示的GPU流水线101;然而,它可以用作图1A中所示的GPU流水线100中的曲面细分单元104,或者用在非基于图块的系统中。通过比较图2中所示的第一示例硬件曲面细分单元200和图5中所示的第二示例硬件曲面细分单元500可以看出,第二示例包括附加硬件逻辑块:顺序翻转逻辑块(order flip logic block)502。准备块201、预处理逻辑块202、片堆栈204、细分决策逻辑块206和细分逻辑块208基本上如上面参考图2-4D所述。

顺序翻转逻辑块502包括被配置为从细分逻辑块208接收子片数据的输入端504、输出端506和控制经由输出端506输出子片数据的顺序的硬件逻辑。例如,如果细分逻辑块208将片划分为两个子片(表示为子片A和子片B),则顺序翻转逻辑块502(经由输入端504)接收对于子片A和子片B的片数据,并且顺序翻转逻辑块502内的硬件逻辑确定是在对于子片B的片数据之前还是之后输出对于子片A的片数据。该确定可以例如是基于一个或更多个标志的值或更一般地基于一个或更多个存储值来做出的。通过(基于一个或更多个存储值)控制输出子片数据的顺序,子片数据存储在片堆栈204中的顺序被控制,并且当片堆栈204运行FILO策略时,其还控制子片随后由细分决策逻辑206评估以确定它们是否应该被进一步细分的顺序。最终,这影响曲面细分单元500输出图元的顺序。

通过使用标志(或存储值)来控制子片数据被添加到片堆栈204的顺序,可以交替针对曲面细分单元内的每个细分层级处理新的子片的顺序,且因此,可以使输出排序中的邻近图元成为UV空间中的相邻图元,并且从而共享两个顶点,如下面参考图6A-6E所述,使得输出图元在空间上更加一致。

如上所述,预处理块202包括硬件逻辑,该硬件逻辑被配置为将输入片602细分为多个初始片A-D。这些片或者都以相反的顺序(例如,如图6A中所示,D,然后C,然后B,然后A)被推送到片堆栈204上,或者第一初始片A可以绕过片堆栈被输入到细分决策逻辑块206,而剩余的三个片B-D可以以相反的顺序被推送到片堆栈204。在图5中所示的曲面细分单元500中,预处理块202可以对每个初始片的片数据添加标志,其中该标志具有两个可能值(例如,0或1)中的一个,并且对于所有初始片的标志值相同。可选地,可能不是每片而是只有单个片具有标志,其由预处理块202设置为初始值,并且然后针对每个细分层级交替。

第一初始片A是来自输入四边形602的第一初始片,其将由细分决策逻辑块206评估以确定是否需要对初始片602的细分,因为它是第一个从片堆栈204弹出的,或者因为它如上所述绕过片堆栈。如果细分决策逻辑块206确定初始片A需要被细分,则左子片A

然后,由顺序翻转逻辑块502第二次推到片堆栈204上的子片(例如,子片A

然后,由顺序翻转逻辑块502第二次推到片堆栈204上的子片(例如,子片A

然后,从片堆栈204弹出片堆栈204中剩余的最近添加的子片(例如,子片A

然后,从片堆栈204弹出片堆栈204中剩余的最近添加的子片(例如子片A

然后,从片堆栈204弹出第二次推到片堆栈204上的子片(例如,子片A

然后,从片堆栈204弹出片堆栈204中剩余的最近添加的子片(例如子片A

如上所述,通过使用标志和顺序翻转逻辑块502,子片以如下顺序输出:A

图23A-23O示出了第二个示例,其使用如GB2533444中所述的替代曲面细分方法。在使用这种曲面细分方法的情况下,有两种类型的片,类型1和类型2,如图23A中所示。两者都是四边形片,即它们都包含四个有序的域顶点。在UV空间中,片类型1为正方形的形状,片类型2为三角形的形状。片的四个顶点是v0、v1、v2和v3。

细分期间,两种片类型都被放置在堆栈中,片结构中的单个标志可被用于区分两种片类型。片类型在是否发生细分和如何发生细分方面(即是否产生片或图元)都有所不同。在细分逻辑块中,在片类型1中,考虑所有TF,在片类型2中,仅考虑TF

不同于先前的曲面细分方案(例如,如图6A-6E所示),三角形图元可以从细分逻辑块208以及细分决策逻辑块206发出(emit),使得如果没有发生进一步细分成子片,则可以执行将四边形片后处理成三角形图元。

对于类型1的片,如果片类型1中没有TF超过阈值,则按顺序发出两个图元(v

对于类型2的片,如图23C中所示,如果TF

图23D-23O示出了曲面细分序列,包括使用这种替代曲面细分方法的片堆栈204的内容。如图23D中所示,最初有一个片(类型1)被推到堆栈上,并且然后被从堆栈弹出用于细分。然后,如图23E中所示,片被细分成四个类型1片,它们以相反的顺序被推到堆栈上。然后,随着曲面细分的进行(如图23F-23O所示),片又从堆栈被弹出,并且新生成的子片被推回到堆栈上(如上所述)。

通过使用图5中所示的硬件曲面细分器500,排序中的邻近图元在UV空间中也是相邻图元,并且因此共享两个顶点。这导致顶点输出顺序的改变,并在高速缓存最近用于域着色器(例如,域着色器108)的顶点时提高一致性。硬件曲面细分器500的使用还使得图元在世界空间中更加一致(作为UV空间中一致性增加的结果),并且这提高了光栅化效率(例如纹素(texel)高速缓存查找)。

使用硬件曲面细分器500产生的排序在本文可以被称为“改进排序”。利用以其改进顺序的图元,当使用顶点索引时,输出的顶点的顺序也被修改,因为顶点的顺序至少部分地与图元排序不可分割地联系在一起。

图7是第三示例硬件曲面细分单元700的示意图。这种硬件曲面细分单元700不生成图元ID,并且因此不适用于图1B中所示的GPU流水线101;然而,它可以用作图1A中所示的GPU流水线100中的曲面细分单元104,或者被用在非基于图块的系统中。通过比较图5中所示的第二示例硬件曲面细分单元500和图7中所示的第三示例硬件曲面细分单元700可以看出,第三示例包括多个附加硬件逻辑块和数据结构,并且这些将在下面描述。顺序翻转逻辑块502基本上如上面参考图5-6E所述。准备块201、预处理逻辑块202、片堆栈204、细分决策逻辑块206和细分逻辑块208基本上如上面参考图2-4D所述。

如上所述,硬件曲面细分器700的使用改变了顶点从曲面细分器输出的顺序(例如,与上述第一和第二示例曲面细分器200、500相比)。图7中所示的硬件曲面细分器700进一步修改顶点输出的顺序(例如,与硬件曲面细分器500或本文描述的任何更早的示例相比)。通过使用实现改进的图元排序方案和改进的顶点排序方案的硬件曲面细分器700,对域着色器结果的高速缓存得到了改进,因为随着父顶点和子顶点在排序内更接近在一起,父顶点在其重用之前从高速缓存中移除的可能性降低了。

与图5中所示的硬件曲面细分器500相比,图7中所示的硬件曲面细分器700包括四个附加的数据结构:域顶点堆栈702、计数器704、索引表706和UV图元队列708。它还包括三个附加的硬件逻辑块:输出顶点逻辑块710、获取索引逻辑块712和输出图元逻辑块714。还可以看出,图7中所示的硬件曲面细分器700具有两个输出端(当使用顶点索引时):以索引的形式向光栅化器109输出图元数据的第一输出端716,以及以可选混合的形式向域着色器(例如,图1A中的域着色器108)输出顶点数据的第二输出端718。由于顶点由输出顶点逻辑块710分配索引(如下所述),经由第一输出端716输出的图元数据包括顶点的索引,而不是完整顶点数据。

如图7中所示,硬件曲面细分器700中的细分逻辑块208与本文描述的更早的示例相比包括附加输出端720。该输出端720被配置为向域顶点堆栈702输出对于新形成的中间顶点M的顶点数据。对于初始片的原始顶点的顶点数据被预处理块202推送到域顶点堆栈702,预处理块202与本文描述的先前示例相比还包括附加输出端722,并且该附加输出端722被配置用于此目的(即,将对于初始片的原始顶点的顶点数据输出到域顶点堆栈702)。如图7中的虚线箭头所指示,与初始片相关的一些顶点数据可以绕过域顶点堆栈702直接被输出到输出顶点逻辑块710。

像片堆栈204一样,域顶点堆栈702运行FILO方案。域顶点堆栈702包括两个输入端:被配置为从预处理块202接收对于初始片的原始顶点的顶点数据的第一输入端724以及被配置为从细分逻辑块208接收对于每个新形成的中间顶点的输出顶点数据的第二输入端726。域顶点堆栈702还包括用于根据FILO方案存储顶点数据的储存元件,以及被配置为将最近接收的顶点数据输出到输出顶点逻辑块710的输出端728。当细分决策逻辑块206评估片或子片并且确定不需要进一步的细分时,对于单个顶点的顶点数据从域顶点堆栈702弹出。细分决策逻辑块206与域顶点堆栈702通信,以触发顶点数据的弹出。

输出顶点逻辑块710包括被配置为接收从域顶点堆栈702弹出的顶点数据的输入端730、被布置为确定所接收的顶点数据是否与已经由曲面细分器700输出的顶点相关的硬件逻辑以及被配置为输出顶点数据的输出端732。如图7中的虚线箭头所示,输出顶点逻辑块710还可以包括第二输入端734,该第二输入端734被配置为绕过域顶点堆栈702,直接从预处理块202接收对于初始片的顶点的子集的顶点数据。如图8中所示,其示出了输出顶点逻辑块710的结构示例,输出顶点逻辑块710也可以逻辑上包括计数器704和索引表706。

响应于经由输入端730接收到对于已经从域顶点堆栈702弹出的顶点的顶点数据(或者经由输入端732直接从预处理块202接收到的顶点数据),输出顶点逻辑块710内的硬件逻辑802被配置为确定对于该顶点的顶点数据是否已经被输出,并且仅在顶点数据先前没有被输出的情况下输出顶点数据。这个确定是使用计数器704和索引表706做出的。计数器最初设置为零,并且该计数器值被用于设置用于顶点的索引值。硬件逻辑802对照索引表706检查接收的顶点数据。索引表706存储对于每个可能的(例如65×65)UV坐标的索引,或者如果在该UV位置处没有顶点被输出则存储无效值。如果顶点之前没有被发出(例如,如索引表706中的无效值所指示的),硬件逻辑802被布置成使计数器704产生增量(increment),向索引表706添加条目(例如,作为对于通过其UV坐标在索引表内可寻址的该顶点的索引的新增加的计数器值),并且经由输出端732输出顶点数据。如果顶点之前已经被发出,则硬件逻辑802被布置成阻止顶点数据的输出。

输出图元逻辑块714与UV图元队列708和获取索引逻辑块712相结合,被布置为延迟图元(经由输出端716)的输出,直到图元的所有顶点都已(经由输出端718)被输出。这是因为可能存在这样的情况:其中产生的图元具有尚未被传递到输出顶点逻辑块710的顶点,如下例所示,并且因此将没有可用于输出图元的索引。输出图元逻辑块714包括:第一输入端736,其被配置为从细分决策逻辑块206接收图元数据;输入/输出端738,其被配置为与获取索引逻辑块712通信;以及输出端740,其被布置为一旦图元的所有顶点都(经由输出端718)被输出就输出图元数据。如上所述,输出的图元数据包括顶点索引而不是完整顶点数据(代替地经由输出端718从曲面细分器700输出),并且索引可以通过与获取索引逻辑块712通信从索引表706获得。输出图元逻辑块714还包括硬件逻辑,其被布置为将从细分决策逻辑块206(经由输入端736)接收的图元添加到UV图元队列708,以检查存储在UV图元队列708中的最近添加的图元的所有顶点是否已经被输出,并且如果是,则从UV图元队列708移除图元并(经由输出端740)输出图元。在各种示例中,可以在将图元添加到UV图元队列708之前执行检查。在这样的示例中,如果已经输出了所有顶点,则不将图元添加到队列中,而是直接输出图元。

获取索引逻辑块712充当输出图元逻辑块714和索引表706之间的接口,并且使得输出图元逻辑块714中的硬件逻辑能够确定存储在UV图元队列708中的任何图元的所有顶点是否已经被输出,并且还获取对于图元的顶点的索引,使得输出图元数据可以包括顶点索引而不是完整顶点数据。其包括配置成与输出图元逻辑块714通信的输入端/输出端742和配置成在索引表706中执行查找的输入端/输出端744。

下表示出了图7中所示的硬件曲面细分器700的操作示例,且特别是域顶点堆栈702和UV图元队列708的操作。该表显示了在图9中所示的对于四边形输入片(a quad inputpatch)900的序列中的每个阶段处堆栈702和队列708二者的内容。如下表中所示和如上所述,当四边形输入片900的角(其是初始片的顶点的子集)(经由输入端724)被推到域顶点堆栈702上时,堆栈在任何细分之前被初始化。在该示例中,四边形输入片900的中间顶点和左上顶点(顶点0和1)绕过域顶点堆栈(如图7中的虚线箭头所示),而是由预处理块202直接提供给输出顶点逻辑块710。

虽然下表将域顶点堆栈和UV图元队列显示为包含索引/索引三元组,但这只是为了简洁。如上所述,直到顶点被输出才确定索引,并且因此域顶点堆栈和UV图元队列实际上存储域顶点和UV坐标的三元组(并且在片不是三角形的示例中,可以存储不同数量的UV坐标)。

如上表中所示,在处理完最终片(22,1,0)后,堆栈将为空,并且因此不会弹出任何顶点。

上表还显示了对于四边形域的域顶点堆栈(2T+2)和UV图元队列(2

图10是第四示例硬件曲面细分单元1000的示意图。这种硬件曲面细分单元1000不生成图元ID,并且因此不适用于图1B中所示的GPU流水线101;然而,它可以用作图1A中所示的GPU流水线100中的曲面细分单元104,或者被用在非基于图块的系统中。通过比较图7所示的第三示例硬件曲面细分单元700和图10中所示的第四示例硬件曲面细分单元1000可以看出,第四示例省略了一个数据结构,UV图元队列708。域顶点堆栈702、计数器704、索引表706、输出顶点逻辑块710和获取索引逻辑块712基本上如上面参考图7-9所述。顺序翻转逻辑块502基本上如上面参考图5-6E所述。准备块201、预处理逻辑块202、片堆栈204、细分决策逻辑块206和细分逻辑块208基本上如上面参考图2-4D所述。

输出图元逻辑块1014类似于上面参考图7-9描述的输出图元逻辑块714,不同之处在于它不包括到UV图元队列的输出端,以及因此不在队列中存储任何图元。这是因为利用由曲面细分器1000实现的修改后的排序方案(如下面详细描述的),图元不可能在其所有顶点之前被输出,并且因此不需要图元队列。输出图元逻辑块1014包括被配置为从细分决策逻辑块206接收图元数据的第一输入端736、被布置为与获取索引逻辑块712通信的输入端/输出端738、以及被布置为(经由输出端718)输出图元数据的输出端740。如上所述,输出的图元数据包括顶点索引,而不是完整顶点数据(代替地经由输出端718从曲面细分器1000输出),并且索引可以由输出图元逻辑块1014内的硬件逻辑获得,输出图元逻辑块1014被布置为与获取索引逻辑块712通信。

如上所述,(例如,与上述第一示例曲面细分器200相比)硬件曲面细分器500的使用改变了图元从曲面细分器输出的顺序。(例如,与硬件曲面细分器500或本文描述的任何更早的示例相比)当使用索引的几何形状时,图7中所示的硬件曲面细分器700进一步修改顶点输出的顺序,并且可以被称为改进的排序方案。(例如,本文描述的任何更早的示例)当使用索引的几何形状时,图10中所示的硬件曲面细分器1000还进一步修改顶点输出的顺序,并且这种修改的排序可以被称为三角形条带(triangle strip)排序方案。

图10中所示曲面细分器1000中的这种修改的排序是通过将顶点推入和弹出域顶点堆栈702的不同序列来实现的。与图7所示的示例不同,在图10所示的曲面细分器1000中,细分逻辑块208不仅仅(经由输出端720)将新形成的顶点M推到堆栈702上,而是图10中的细分逻辑块208包括硬件逻辑,该硬件逻辑被布置为在将新形成的中间顶点推送到堆栈上之前将顶部顶点从堆栈702弹出(并临时存储弹出的顶点),随后推送弹出的顶点和新形成的中间顶点的副本。例如,如果域顶点堆栈702上最近添加的顶点是顶点X,则该顶点从堆栈中弹出,并且以下顶点序列被推到堆栈中:M,X,M。此外,当由细分决策逻辑块206评估片或子片并且确定不需要进一步的细分时,代替从域顶点堆栈702弹出对于单个顶点的顶点数据,两个顶点从堆栈弹出(由细分决策逻辑块206触发)。

下表示出了图10中所示的硬件曲面细分器1000的操作示例,并且特别是域顶点堆栈702的操作。该表示出了图11所示的四边形输入片1100的序列中每个阶段处的堆栈1002的内容。如下表所示,当四边形输入片1100的角(其是初始片的顶点的子集)(经由输入端724)被推到域顶点堆栈702上时,堆栈在任何细分之前被初始化。与图7中所示的先前示例硬件曲面细分器700相比,顶点被推到域顶点堆栈702以初始化它的顺序是不同的。在这个示例中,中间顶点(顶点2)被推到堆栈702,接着是按相反顺序推送四边形1100的其他角,并且与中间顶点的三个副本交替,例如2,19,2,7,2,3,2。此外,在该示例中,四边形输入片900的左上顶点(顶点0)绕过域顶点堆栈(如图10中的虚线箭头所示),而是由预处理块202直接提供给输出顶点逻辑块710。

尽管下表将域顶点堆栈显示为包括单个索引,但这只是为了简洁起见,如上所述,直到顶点被输出才确定索引,且因此域顶点堆栈实际上存储了具有所有属性的域顶点。

上表还显示了对于四边形域(4T+5)的域顶点堆栈中的条目数,其中,如上所述,T是系统的最大曲面细分因子,采用对数底数为2。对于三角形域,域顶点堆栈的大小稍小一些(因为该域的角顶点较少),且包含4T+3个条目。

改进的顶点排序(由图7中所示的曲面细分器700实现)和三角形条带顶点排序(由图10中所示的曲面细分器1000实现)都针对UV空间中的顶点和针对图元提供了一致的排序。虽然改进的顶点排序需要两个额外的数据结构(一个存储顶点(域顶点堆栈702),而另一个存储图元数据(UV图元队列708)),但是三角形条带顶点排序只需要单个数据结构(以存储顶点,域顶点堆栈702),并且三角形条带顶点排序比改进的顶点排序更加一致。如以上针对两种不同排序方案的表格所示,对于三角形条带顶点排序所需的域顶点堆栈702的大小大于对于改进的顶点排序所需的大小。尽管本文描述的两种排序方案确实需要附加的数据结构,但是存储后域着色器顶点(post domain shader vertices)的顶点高速缓存的大小可以减小(作为一致性的结果,如上所述),并且由于顶点高速缓存中的每个条目很大(例如,高达128位浮点数),该高速缓存中的单个条目可以大于附加数据结构的大小,且因此存储的数据量总体上有显著的节省。

虽然上面参考四边形域(即,四边形输入片)描述了顶点排序方法,但是这些方法也适用于三角形域和等值线域或任何其他多边形域。在三角形域的情况下,预处理块202将三角形输入片细分成三个初始三角形片。另外,在改进排序的情况下,只有两个角顶点被推到域顶点堆栈702以初始化它,并且在三角形条带排序的情况下,只有两个角顶点和中间顶点的三个副本被推到域顶点堆栈702以初始化它。三角形域还需要比四边形域更小的域顶点堆栈702(如上所述)。在等值线域的情况下,这两种排序是等价的,并按从左到右的顺序排列顶点,并且不需要预处理块。不需要UV图元队列,并且域顶点堆栈702可以小于三角形域(例如,只有T+1个条目)。任何其他多边形域(例如,六边形、八边形)的行为类似于四边形或三角形域,但是在预处理块202中形成更多的初始三角形片,并且它需要更大的域顶点堆栈702和UV图元队列708(如果需要)。

图12是第五示例硬件曲面细分单元1200的示意图。这种硬件曲面细分单元1200与上述示例不同,确实生成图元ID,且因此适用于图1B中所示的GPU流水线101;然而,它也可以用作图1A中所示的GPU流水线100中的曲面细分单元104。在输出之后,这些图元ID与图元相关,但是在曲面细分单元1200内,它们与最终可以或不可以作为图元输出的片(即初始片或子片)相关;然而,它们在本文仍然被称为图元ID。

通过将图12中所示的第五示例硬件曲面细分单元1200与先前的示例进行比较,可以看出存在许多共同的元素。输出顶点逻辑块710基本上如以上参考图7-9所述(尽管顶点数据(经由输入端730)直接从细分逻辑块208接收,并且没有域顶点堆栈)。顺序翻转逻辑块502基本上如上面参考图5-6E所述。准备块201、预处理逻辑块202、片堆栈204、细分决策逻辑块206和细分逻辑块208基本上如上面参考图2-4D和图10所述。

此外,第五示例硬件曲面细分单元1200包括生成图元ID的多个附加逻辑块1204-1206,并且还可以包括新的可选数据结构,即域顶点队列1202(可选地,几何形状的缓冲可以在流水线的更下游执行,而不是作为曲面细分器的一部分)。第五示例硬件曲面细分单元1200还包括第三输出端1208。第一输出端718被配置为向域着色器输出顶点数据(使用可选混合器),第二输出端716被配置为向光栅化器输出三个图元ID形式的图元数据,以及第三输出端1208被配置为向图元ID缓冲区输出图元ID以及可选地输出图元中每个顶点的DF。

与片堆栈204和域顶点堆栈702不同,可选的域顶点队列1202操作FIFO方案,并缓冲由曲面细分器为流水线的后续阶段输出的顶点。域顶点队列1202(如果提供的化)包括两个输入端:被配置为从预处理块202接收对于初始片的原始顶点的顶点数据的第一输入端1224以及被配置为从细分逻辑块208接收对于每个新形成的中间顶点的输出顶点数据(尽管如图12中所示,输出顶点数据可以不直接从细分逻辑块208接收)的第二输入端1226。域顶点队列1202还包括用于根据FIFO方案存储顶点数据的储存元件,以及被配置为输出最近从曲面细分器接收的顶点数据的输出端718。然后,对于单个顶点的顶点数据可以以规则的间隔(例如,每周期一次)从域顶点队列1202中发出。

硬件曲面细分器1200中的多个附加逻辑块1204-1206生成图元ID。这些图元ID的结构可以参考图13A和图13B来描述。图13A和图13B示出了使用本文描述的方法生成的两个示例图元ID 1300、1301的示意图。如图13A和图13B所示,图元ID 1300、1301包括r位序列1302,其指定在曲面细分过程(当片由细分逻辑块208进行细分,并由顺序翻转逻辑块502重新排序)中采用的递归序列。序列中的位由附加逻辑块1206相加,附加逻辑块1206可以被称为ID序列生成逻辑块,并且序列1302中的每个位指示(在细分逻辑块208中)任何细分之后,形成图元的子片是(由顺序翻转逻辑块502)第一次(例如由0指示)被推到片堆栈204上还是第二次(例如由1指示)被推送。由于子片被推到片堆栈204上的顺序控制着它们被曲面细分的顺序,因此每个位指示形成图元的子片是第一次被曲面细分还是第二次,这也可以用分支算法来描述,其中位的序列1302指示是采用第一分支(即,第一次选择片用于曲面细分,因为它是第二次被添加到片堆栈204)还是采用第二分支(即,片是第二次被曲面细分,因为它第一次是被添加到片堆栈204)。

除了指定曲面细分过程中采用的递归序列的r位的序列1302之外,图元ID 1300、1301可以包括一个或更多个附加位或位序列。虽然图13A中所示的第一示例1300包括头部部分1304和尾部部分1306,但是在其他示例中,图元ID可以仅包括头部部分1304和尾部部分1306中的一者或不包括两者,和/或可以包括其他部分。在预处理块202输出初始片之后,头部部分1304由附加硬件逻辑块1204添加到图元ID,附加硬件逻辑块1204可以被称为ID头部生成逻辑块。在不需要预处理的示例中(例如,对于等值线输入片),可以省略头部,如图13B中的第二示例1301所示。在图13A和图12所示的示例中,头部部分1304包括两位,其指示图元在(由输入片形成的)那些初始子片中的哪一个中。在其他示例中,头部部分1304可以包括单个位或多于两个位。

在各种示例中,图元ID可以包括尾部部分1306,尾部部分1306用于提供固定长度的图元ID 1300、1301。如果没有这样的尾部部分1306,图元ID 1300、1301的长度将取决于递归序列的长度(即r的值),并且如果ID被串接,这可能会导致歧义(例如,因为代码不是无前缀(prefix-free)的,其中术语“无前缀”指的是存在代码c、d对的事实,其中c是d的前缀,并且因此解析器不能确定它们是已经到达代码c的末尾还是在代码d的中间)。通过包括可变长度尾部部分1306,图元ID的长度是固定的,而与r的值无关,并且尾部部分可以包括预定义的位序列(例如,单个1后跟零个或更多个0,如图13A和图13B中的示例所示),这使得尾部部分1306能够被识别并与指定所采用的递归序列的位的序列1302区分开来。

当细分片时,细分逻辑块208针对每个新形成的子片生成初始ID。这些初始ID与父片(即,被细分以形成子片的片)的ID相匹配。然后,附加逻辑块1206更新这些初始ID,以生成对于每个片的最终输出图元ID。

如图12中所示,ID头部生成逻辑块1204包括:输入端,其被布置成从预处理块202接收对于初始片的片数据;硬件逻辑,其被布置成至少生成关于每个初始片的ID的头部部分(以及在各种示例中,用于生成关于初始片的整个ID,其中这包括头部部分1304和可选地包括尾部部分1306);以及输出端,其被布置成将初始片数据(包括初始片ID)输出到片堆栈204。ID序列生成逻辑块1206包括被布置成从顺序翻转逻辑块502接收子片数据的输入端、被布置成将位附加到子片的ID上的硬件逻辑以及被布置成将子片数据(包括更新的ID)输出到片堆栈204的输出端。

在使用图12中所示的硬件曲面细分器1200的情况下,可以高效地执行发现具有特定ID的图元存在于何处/是否存在。此外,邻近ID之间的差异将很小(由于图元的改进排序),且这可用于压缩存储器中的ID的块。

除了在附加逻辑块1204-1206中如上所述的图元ID的生成之外,在根本不执行细分并且仅输出单个图元(对应于输入片)的特殊情况下,未使用的图元ID(例如,000...0,010...0,100...0和以11开头的任何内容)可以由预处理块202分配给图元,并且这可以直接被传递给输出端。

虽然附加逻辑块1204-1206仅参考图12示出和描述,但是将认识到,它们可以被包括在本文描述的任何其他示例中(例如,添加到图7中所示的硬件曲面细分器700中)。类似地,可以提供组合本文描述的任何示例的不同方面的进一步示例,例如,在图5、图7、图10和图12中的任何一个中示出为添加的任何附加逻辑块可以被添加到图2中示出的硬件曲面细分器200,而不必从本文描述的任何其他示例添加附加逻辑块。这种进一步组合的示例示于图24,图24示出了另一个示例硬件曲面细分器2400。

虽然仅参考图12示出和描述了域顶点队列1202,但是将认识到,它可以被包括在本文描述的具有索引的几何形状的任何其他示例中(即,顶点索引,例如图7和图10中示出的硬件曲面细分单元700、1000)。

图24中所示的硬件曲面细分器2400提供顶点索引,而不改变顶点排序或输出ID,且因此是图12中所示的硬件曲面细分器1200的变型,而没有顺序翻转逻辑块502或附加硬件元件1204-1206。

图14-19E示出了图12中所示的硬件曲面细分器1200的变型。在图14、图16和图18中所示的示例中,准备块和预处理块201、202没有显示为单个逻辑块,而是显示为其单独的元件(例如,如图3A-3B中所示和上文所述)。

图14中所示的硬件曲面细分器1400专用于四边形域,而图15A-15G更详细地示出了来自硬件曲面细分器1400的元素。下表列出了图14中所示的处理/决策逻辑块,以及图中特定块的输入和输出。

图16中所示的硬件曲面细分器1600特定于三角形域,以及图17A-17H更详细地示出了来自硬件曲面细分器1600的元素。下表列出了图16中所示的处理/决策逻辑块,以及图中特定块的输入和输出。

图18中所示的硬件曲面细分器1800特定于等值线域,以及图19A-19E更详细地示出了来自硬件曲面细分器1800的元素。下表列出了图18中所示的处理/决策逻辑块,以及图中特定块的输入和输出。

如上所述并由诸如图12、图14、图16和图18所示的曲面细分器生成的图元ID也可用于提供顶点ID(例如,用于经由输出端718输出的顶点)。在细分逻辑块208中,每个细分的初始片(例如(T,L,R))创建新的顶点M(例如,如图4C中所示)。由(T,L,R)给出的片的ID被分配给顶点M。由(T,L,R)给出的片不被认为是图元,因为它被进一步细分,并且因此不被曲面细分器输出;然而,它将具有ID(在本文称为图元ID)。当图元ID编码到达片的分支的序列时,它也编码到达顶点M的分支的序列。由于细分不会在最小图元上发生,每个顶点ID将以0结尾(当使用尾部部分时),所以在各种示例中,它可以被移除以节省单个位(即,对于四元/三元域为2T+1位,以及对于等值线域为T位)。

例如,这些顶点ID可以用于以类似于使用图元ID来生成对于图元的顶点数据的方式随机重新生成单个顶点,例如,通过将顶点ID输入到曲面细分单元(例如,输入到单个图元曲面细分器114),并且通过曲面细分器遵循与最初生成顶点时遵循的相同的分支的序列;然而,通过在其左顶点和右顶点之间对生成的图元进行最后一次细分(以生成顶点M)来修改根据其图元ID生成图元的方法,并且这是期望的顶点。

从图12可以看出,来自初始片的顶点绕过硬件曲面细分器1200中生成图元ID(如图12中所示,它们从预处理块202输出,并经由输入端1224输入到域顶点队列1202)的所有附加逻辑块1204-1206。此外,当顶点被分配图元的ID时,在被细分时图元的ID导致顶点的生成,如上所述,硬件的操作不会导致生成对于形成初始片的初始角和中间顶点的顶点ID。在顶点ID由硬件曲面细分器生成的情况下,专用顶点ID可以从初始片分配给这些顶点中的每一个,并且这些可以由预处理块202或者由预处理块202和域顶点队列1202之间的附加逻辑块(图12中未示出)进行分配。

例如,由于ID 000…0、010…0、100…0、110…0对于2D域是不使用的,而000…0对于等值线域是不使用的,因此这些可以分别以顺时针方式(例如,分配给UV坐标(0,0)、(1,0)、(1,1)和(0,1))分配给角顶点和最左边的顶点。这将保留对于2D域的中间顶点和等值线域的右顶点。对于四边形域和等值线域,需要额外的位来分配新的ID。在各种示例中,由单个1后跟(2T+1或T)个0给出的ID(分别用1000...0和10...0表示)可以被使用。对于三角形域,ID 110…0可用于中间顶点。当其ID按字典顺序排序时,这些ID使这些异常顶点持续存在。

图20是可以在图1B中所示的GPU流水线101中使用的第一示例单个图元曲面细分器2000的示意图。如上所述,单个图元曲面细分器被配置为根据(例如,由如图12、图14、图16和图18所示的那些曲面细分器生成的)输入图元ID生成对于图元的顶点数据(即,对于图元中的每个顶点的顶点数据)。

如图20中所示,单个图元曲面细分器2000包括准备块201、预处理块202、初始片选择逻辑块2002、ID结束逻辑块2004、细分逻辑块208、顺序翻转逻辑块2008和子片选择逻辑块2010。预处理块202和细分逻辑块208二者都执行对片的细分,并且这些块基本上如上面参考示例硬件曲面细分单元所描述的那样操作(例如,如图2、图3A-3B、图5、图7、图10、图12、图14、图16和图18中的任何一个所示)。然而,预处理块202还被布置为识别那些不执行细分并且因此图元ID具有预定义值(例如,如上所述的未使用的图元ID之一)的特殊情况。在图20中的预处理块202识别出这种图元ID的情况下,输入片作为图元输出。

如上所述,细分逻辑块208(经由输入端226)接收定义片的三个顶点(例如,如图4C中所示的顶点T、L、R),生成第四顶点(例如,如图4C中所示的新顶点M),并且然后(经由输出端230)输出四个顶点(例如,如图4C中所示的顶点T、L、R、M)。

如图20中所示,预处理块202的输出(其包括初始片,例如对于初始片中顶点的曲面细分器顶点)由初始片选择逻辑块2002接收。ID结束逻辑块2004接收来自初始片选择逻辑块2002的输出。细分逻辑块208从ID结束逻辑块2004接收输出。顺序翻转逻辑块2008接收来自细分逻辑块208的输出。子片选择逻辑块2010接收来自顺序翻转逻辑块2008的输出,并将子片数据输出到ID结束逻辑块2004,从而完成执行细分的迭代循环(按该顺序为块2004、208、2008和2010)。

与前面描述的硬件曲面细分单元不同,单个图元曲面细分器2000不包括片堆栈204,而是包括初始片选择逻辑块2002和子片选择逻辑块2010。这是因为为了生成单个图元,只需要(由预处理块202生成的)初始片之一,并且可以丢弃其他初始片。类似地,在由细分逻辑块208进行细分之后,仅需要子片之一,并且其他的可以被丢弃。

初始片选择逻辑块2002包括硬件逻辑,该硬件逻辑被布置成确定要保留多个初始片中的哪一些,并(经由输出端2012)将其输出到ID结束逻辑块2004。初始片选择逻辑块2002(经由输入端2030)接收对于初始片中每一个的三个顶点(例如,根据对预处理块202的片输入分别是三角形还是四边形片的4个或5个不同顶点),并且初始片选择逻辑块2002内的硬件逻辑被布置为基于(如经由输入端2014接收的)图元ID的一个或更多个位来选择接收的顶点中的三个。如果图元ID具有如图13A中所示的格式,则由初始片选择逻辑块2002基于头部部分1304中的位进行片(以及因此顶点)选择。初始片选择逻辑块2002还可以包括硬件逻辑,该硬件逻辑被布置为从用于进行初始片选择的图元ID中移除那些位,并且在这样的示例中,截断的图元ID与初始片数据一起输出(经由输出端2012)到ID结束逻辑块2004。

返回参考图13A中所示的示例,如果输入图元ID是01011010101000,则由初始片选择逻辑块2002输出的截断的图元ID是011010101000,因为头部部分1304’01’已经被移除。

子片选择逻辑块2010包括硬件逻辑,其被布置成确定由细分形成的两个子片中的哪一个要保留并(经由输出端2024)输出到ID结束逻辑块2004。子片选择逻辑块2010(经由输入端2026)接收四个顶点(例如,如图4C中所示的顶点T、L、R、M),这四个顶点一起定义了两个子片,并且子片选择逻辑块2010内的硬件逻辑被布置为基于来自图元ID的一个或更多个位来选择四个接收的顶点中的三个,并且在各种示例中,该选择是基于来自图元ID的单个位进行的。图元ID可以(经由输入端2026)以子片数据的截断形式接收,或者可以(经由输入端2028)以其完整形式接收。

在各种示例中,基于分支序列1302中对应于特定迭代的位的值进行选择,例如,分支序列1302中用于第一选择操作的第一位、用于第二选择操作的第二位等。参考图13A中所示的示例,其中图元ID为01011010101000,在生成单个图元时进行的第一选择是基于分支序列(例如01

在子片选择逻辑块2010以截断形式接收图元ID的示例中,对应于特定迭代的位将是截断的图元ID中的前导位,并且子片选择逻辑块2010还包括硬件逻辑,该硬件逻辑用于通过移除该前导位来进一步截断图元ID,并将新截断的图元ID连同子片数据输出到ID结束逻辑块2004(经由输出端2024)。返回参考图13A中所示的示例,如果输入图元ID是01011010101000,则由初始片选择逻辑块2002输出的截断的图元ID是011010101000,因为头部部分1304’01’已经被移除。子片选择逻辑块2010基于前导位的值(即本例中的“0”)选择(经由输入端2026接收的)两个子片中的一个,并且然后移除该位,并输出更新的截断的图元ID11010101000。在下一次迭代中,子片选择逻辑块2010基于新的前导位的值(即本例中的“1”)选择(经由输入端2026接收的)两个子片中的一个,并且然后移除该位并输出更新后的截断的图元ID 1010101000。

与前面描述的硬件曲面细分单元不同,单个图元曲面细分器2000不包括细分决策逻辑块206,该细分决策逻辑块206包括被布置成基于片数据确定是否对片进行细分的硬件逻辑。代替的是,单个图元曲面细分器2000包括ID结束逻辑块2004,其基于不同的信息(例如,基于图元ID或图元ID的截断版本)做出类似的决定(即,是否对片进行细分)。在第一次迭代中,经由输入端2016从初始片选择逻辑块2002接收图元ID(其中这可以是完整ID或该ID的截断版本),并且该ID或其截断版本可以被存储以用于后续迭代。可选地,在随后的迭代中,可以经由输入端2018从子片选择逻辑块2010接收截断的图元ID。

在使用截断的示例中,硬件逻辑被布置成基于截断的图元ID(其可以从子片选择逻辑块2010接收到或者被存储在ID结束逻辑块2004内)是否包括来自分支序列1302的任何位来确定是对片还是子片进行细分。如果存在来自分支序列1302的任何剩余位,则片或子片(经由输出端2020)被输出到细分逻辑块208,并且如果没有来自分支序列1302的剩余位(例如,截断的图元ID仅包括尾部部分或者根本不包括位),则片或子片从单个图元曲面细分器2000(经由输出端2022)作为对应于输入图元ID的输出图元进行输出。

在使用截断但截断的图元ID被存储而不是从子片选择逻辑块2010接收的示例中,ID结束逻辑块2004的硬件逻辑还被布置为通过移除前导位并存储更新的截断的图元ID以供后续迭代使用来进一步截断图元ID。

返回参考图13A中所示的示例,如果输入图元ID是01011010101000,则由初始片选择逻辑块2002输出的截断的图元ID是011010101000,因为头部部分1304’01’已经被移除。ID结束逻辑块2004基于前导位(即本例中的“0”)是否是分支序列1302的一部分(在本例中是如此),确定是否有必要进行细分(即,片是否要经由输出端2020输出到细分逻辑块208)。对于下一次迭代,该位“0”已经被移除,使得截断的图元ID为11010101000,并且ID结束逻辑块2004基于新的前导位(即本例中的“1”)是否是分支序列1302的一部分(在本例中是如此),确定是否有必要进行细分。在第九次迭代中,截断的图元ID为1000,并且ID结束逻辑块2004基于新的前导位(即本例中的“1”)是否是分支序列1302的一部分,确定是否有必要进行细分。该位不是分支序列1302的一部分,而是尾部序列1306的一部分,且因此片作为图元(经由输出端2022)输出。

在不使用截断的示例中,硬件逻辑被布置成基于图元ID中对应于该迭代的位是否是分支序列1302的一部分来确定是对该片还是子片进行细分(即,该片是经由输出端2020输出到细分逻辑块208还是经由输出端2022作为图元输出)。参考图13A中所示的示例,其中图元ID是01011010101000,当生成单个图元时进行的第一决策是基于头部部分1304之后的第一位(例如01

顺序翻转逻辑块2008以与前述相同的方式(例如,以与硬件曲面细分器500中的顺序翻转逻辑块502相同的方式)操作。如果在所有图元曲面细分器112中关于哪个片要进一步细分的决策是基于子片的顺序来进行的,则在单个图元曲面细分器2000中使用的顺序必须匹配。因此,如果所有图元曲面细分器112包括顺序翻转逻辑块2008,则单个图元曲面细分器114也包括该逻辑块。

图21是可以在图1B中所示的GPU流水线101中使用的第二示例单个图元曲面细分器2100的示意图。如上所述,单个图元曲面细分器被配置为根据(例如,由如图12、图14、图16和图18中所示的曲面细分器生成的)输入图元ID生成对于图元的(即,对于图元中的每个顶点的)顶点数据。图21中所示的单个图元曲面细分器2100另外(或替代地)被配置为根据(例如,由诸如图12、图14、图16和图18中所示的曲面细分器生成的)输入顶点ID生成对于单个顶点的顶点数据。

如上所述,在大多数情况下,顶点的ID是片的ID,当被细分时,其导致顶点的生成。返回参考图4C,包括顶点T、L、R的片的ID也是由对包括顶点T、L、R的片的细分而形成的顶点M的ID。然而,如上所述,特殊ID被分配给初始片中的那些顶点(因为这些顶点不是由对初始片的细分形成的)。因此,虽然图21中所示的单个图元曲面细分器2100包括与图20中所示的单个图元曲面细分器2000相同的块,但是它还包括附加逻辑块2102,该附加逻辑块2102被配置为识别输入ID(在这种情况下可以是图元ID或顶点ID)是否是这些特殊情况之一。该逻辑块2102可以被称为角和中间顶点检查逻辑块2102,并且包括硬件逻辑,该硬件逻辑被布置为将接收到的ID与对应于初始片的顶点的已知ID集进行比较,并且确定是否存在匹配。在匹配的情况下,角和中间顶点检查逻辑块2102被布置成(经由输出端2104)输出域顶点。如图21中所示,角和中间顶点检查逻辑块2102包括用于接收图元/顶点ID的第一输入端2106和用于从预处理块202接收域顶点的第二输入端2108。在硬件曲面细分器2100仅用于产生图元而不是顶点的示例中,则可以省略角和中间顶点检查逻辑块2102。

与图20中所示的单个图元曲面细分器2000相比,图21中所示的单个图元曲面细分器2100还包括第二细分逻辑块2108。如上所述,为了根据其顶点ID生成顶点,通过在其左和右顶点之间对生成的图元进行最后一次细分(以生成顶点M)来修改根据其图元ID生成图元的方法,并且这是期望的顶点。该附加的细分由第二细分逻辑块2108执行,第二细分逻辑块2108包括以与图21中的第一细分逻辑块208和图20中所示的细分逻辑块208以及上述其他曲面细分单元中的细分逻辑块208非常相似的方式操作的硬件逻辑。然而,与前面描述的细分逻辑块208不同,第二细分逻辑块2108仅输出由对初始片或子片的细分生成的新顶点(例如,图4C中的顶点M),而不执行子片组合。当输出顶点时,或者作为图元的一部分,或者作为单个顶点,一些顶点属性可能不被输出(例如,TF可能不被输出),并且属性可能经历转换(例如,定点到浮点转换)。

对于四边形/三角形域,使用上述方法和硬件生成的顶点ID通常不是唯一的:任何非边界、非中间顶点由硬件曲面细分单元产生两次,因为细分的边由两个三角形片共享,所以有两个可能的分支序列到达它,且因此这些顶点具有两个不同的顶点ID;然而,任一个ID都可以用于使用图21中所示的单个图元曲面细分器2100生成顶点数据。

图22是可以在图1B中所示的GPU流水线101中使用的第三示例单个图元曲面细分器2200的示意图。如上所述,单个图元曲面细分器被配置为根据(例如,由如图12、图14、图16和图18中所示的那些曲面细分器生成的)输入图元ID生成顶点数据。与图21中所示的单个图元曲面细分器2100类似,图22中所示的单个图元曲面细分器2200被配置为根据输入图元数据生成图元数据或根据输入顶点ID生成顶点数据或根据输入图元数据生成图元数据和根据输入顶点ID生成顶点数据两者。下表列出了图22中所示的处理/决策逻辑块,以及图中特定块的输入和输出。

尽管上面描述的示例都使用顶点曲面细分因子,并且基于这些顶点TF的值做出关于细分的决策,但是本文描述的任何示例的变型中,可以替代地使用边曲面细分因子。在这样的示例中,曲面细分因子可以被分配给片的每对顶点(并且因此被分配给连接那些顶点的边),并且这些TF中的一个或更多个然后可以被用于确定片的细分。

尽管上面描述的示例涉及位移因子数据的提供和该数据在混合中的使用,但是本文描述的任何示例的变型中,可以不提供(或者以其他方式可用的)DF数据,并且因此混合将被省略,并且曲面细分方案将提供离散的细节层次(LOD),而不是连续的细节层次。

本文描述的和附图中示出的曲面细分器单元可以体现在集成电路上的硬件中。通常,以上所描述的功能、方法、技术或部件中的任一个都能够以固件、硬件(例如,固定逻辑电路)、或它们的任何组合来实现。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来一般性地表示软件、固件、硬件、或它们的任何组合。

本文描述的曲面细分器单元还旨在包含对如本文中所描述的硬件的配置进行限定的软件,诸如HDL(硬件描述语言)软件,如用于设计集成电路、或用于配置可编程芯片以执行期望功能。也就是说,可提供计算机可读存储介质,其具有在其上编码的以集成电路定义数据集的形式的计算机可读程序代码,计算机可读程序代码当在集成电路制造系统中被处理时配置系统以制造被配置成执行本文所述的任何方法的曲面细分单元,或制造包括本文所述的任何装置的曲面细分单元。集成电路定义数据集可以例如是集成电路描述。

集成电路定义数据集可以是计算机代码的形式,例如,作为用于配置可编程芯片的网表、代码,作为限定任何等级的集成电路的硬件描述语言,包括作为寄存器传送级(RTL)代码,作为诸如Verilog或VHDL的高等级电路表示,以及作为诸如OASIS(RTM)和GDSII的低等级电路表示。在逻辑上限定集成电路的较高等级的表示(诸如RTL)可在计算机系统处被处理,该计算机系统被配置成在软件环境的背景下生成集成电路的制造定义,包括电路元件和用于组合这些元件以便生成由该表示如此定义的集成电路的制造定义的规则的定义。如软件在计算机系统处执行以便限定机器的通常情况,可以需要一个或更多个中间用户步骤(例如,提供命令、变量等),以便被配置为生成集成电路的制造定义的计算机系统执行对集成电路进行定义的代码,从而生成该集成电路的制造定义。

现在将参考图25描述在集成电路制造系统处来处理集成电路定义数据集以便配置该系统来制造曲面细分单元的示例。

图25示出了集成电路(IC)制造系统2502的示例,其包括布局处理系统2504和集成电路生成系统2506。IC制造系统2502配置成接收IC定义数据集(例如,定义被配置为实现如本文描述的排序方法的曲面细分单元),处理IC定义数据集,并根据IC定义数据集(例如,其体现被配置成实现如在本文描述的排序方法的曲面细分单元)生成IC。对IC定义数据集的处理配置IC制造系统2502以制造体现被配置为实现如在本文所述的排序方法的曲面细分单元的集成电路。

布局处理系统2504被配置为接收IC定义数据集并对其进行处理以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,且例如可涉及合成RTL代码以确定例如在逻辑部件(例如,与非(NAND)、或非(NOR)、与(AND)、或(OR)、多路复用(MUX)和触发器(FLIP-FLOP)部件)方面待生成的电路的门级表示。可通过确定逻辑部件的位置信息,根据电路的门级表示来确定电路布局。这可自动地或借助用户干预来完成,以便优化电路布局。当布局处理系统2504已经确定电路布局时,它可以向IC生成系统2506输出电路布局定义。例如,电路布局定义可以是电路布局描述。

IC生成系统2506根据电路布局定义生成IC,如在本领域中已知的。例如,IC生成系统2506可实现半导体器件制造过程以生成IC,这可以涉及光刻和化学处理步骤的多步骤序列,在该多步骤序列期间,电子电路逐步在由半导体材料制成的晶圆上被创建。电路布局定义可以是可以在光刻过程中用于根据电路定义生成IC的掩模的形式。可选地,被提供到IC生成系统2506的电路布局定义可以是计算机可读代码的形式,IC生成系统2506可使用该计算机可读代码来形成适当的掩模以在生成IC时使用。

由IC制造系统2502执行的不同过程可以都在一个位置上(例如由一方)被实现。可选地,IC制造系统2502可以是分布式系统,使得过程中的一些可在不同的位置处被执行,并可由不同方执行。例如,以下阶段中的一些可在不同位置和/或由不同方执行:(i)合成表示IC定义数据集的RTL代码,以便形成要生成的电路的门级表示;(ii)基于门级表示,生成电路布局;(iii)根据电路布局,形成掩模;以及(iv)使用掩模制造集成电路。

在其它示例中,在集成电路制造系统处对集成电路定义数据集的处理可将系统配置为制造被配置为实现如本文所述的排序方法的曲面细分单元,而不对IC定义数据集进行处理,以便确定电路布局。例如,集成电路定义数据集可以定义可重构处理器(例如FPGA)的配置,且该数据集的处理可将IC制造系统配置为生成具有该定义的配置的可重构处理器(如,通过将配置数据加载到FPGA)。

在一些实施例中,集成电路制造定义数据集在集成电路制造系统中被处理时,可使集成电路制造系统生成如本文中所描述的设备。例如,集成电路制造系统以如上参照图25所描述的方式通过集成电路制造定义数据集进行的配置可使如本文中所描述的设备得以制造。

在一些示例中,集成电路定义数据集可包括软件,该软件在数据集处定义的硬件上运行或与在数据集处定义的硬件组合运行。在图25中所示的示例中,IC生成系统还可由集成电路定义数据集配置,以在制造集成电路时,根据在集成电路定义数据集处定义的程序代码将固件加载到该集成电路上,或以其他方式向集成电路提供程序代码以用于与集成电路一起使用。

本领域中的技术人员将认识到,用于存储程序指令的储存设备可被分布在网络中。例如,远程计算机可存储被描述为软件的过程的示例。本地或终端计算机可访问远程计算机并下载软件的一部分或全部以运行程序。可选地,本地计算机可按需下载软件的片段,或在本地终端处执行部分软件指令以及在远程计算机(或计算机网络)处执行部分软件指令。本领域中的技术人员也将认识到,通过利用本领域中的技术人员已知的常规技术,软件指令的全部或一部分可由专用电路(例如DSP、可编程逻辑阵列等)执行。

本文所述的方法可以由配置有软件的计算机执行,该软件是存储在有形存储介质上的机器可读形式,例如是包括用于配置计算机来执行所述方法的组成部分的计算机可读程序代码的计算机程序的形式,或是包括适合于当程序在计算机上运行时执行本文所述的任何方法的所有步骤的计算机程序代码方式的计算机程序的形式,且其中计算机程序可以体现在计算机可读存储介质上。有形(或非暂时性)存储介质的示例包括磁盘、拇指驱动器、存储卡等,且并不包括传播的信号。软件可适合于在并行处理器或串行处理器上执行,使得方法步骤可以按任何适当的顺序或同时被执行。

本文所述的硬件部件可通过在其上编码有计算机可读程序代码的非暂时性计算机可读存储介质生成。

存储在实现所公开的方面时使用的机器可执行数据的存储器可以是非暂时性介质。非暂时性介质可以是易失性的或非易失性的。易失性非暂时性介质的示例包括基于半导体的存储器,例如SRAM或DRAM。可用于实现非易失性存储器的技术的示例包括光学和磁性存储器技术、闪存、相变存储器、电阻式RAM。

对“逻辑”的特定引用指执行一种或更多种功能的结构。逻辑的示例包括被布置成执行这些功能的电路。例如,这样的电路可包括晶体管和/或在制造过程中可用的其它硬件元件。作为示例,这样的晶体管和/或其它元件可用于形成实现和/或包含存储器(例如寄存器、触发器、或锁存器)、逻辑运算器(例如布尔运算)、数学运算器(例如加法器、乘法器、或移位器)、和互连的电路或结构。这样的元件可作为定制电路或标准单元库、宏、或以其它抽象级被提供。可在特定的布置中将这样的元件互连。逻辑可包括固定功能的电路,且电路可被编程以执行一种功能或更多种功能;这样的编程可由固件或软件更新或控制机构提供。被识别为执行一种功能的逻辑也可包括实现组成性功能或子过程的逻辑。在示例中,硬件逻辑具有实现固定函数运算、或多个运算、状态机或过程的电路。

如对技术人员将明显的是,本文给出的任何范围或设备值可以被扩展或改变而不失去所寻求的效果。

将理解的是,上面描述的益处和优点可涉及一个实施例或可涉及若干实施例。实施例不限于解决任何或所有的所陈述的问题的那些实施例或具有任何或全部所陈述的益处和优点的那些实施例。

对“一个(an)”项目的任何引用指的是那些项目中的一个或更多个项目。术语“包括”在本文中用于意指包括所识别的方法块或元件,但这样的块或元件并不包括独有列表,且装置可包含额外的块或元件,并且方法可包含额外的操作或元件。此外,块、元件和操作本身并不是隐含地封闭的。

本文描述的方法的步骤可以按照任何适当的顺序被执行或在适当时同时被执行。在附图中的框之间的箭头示出方法步骤的一个示例顺序,但并不意欲排除其它顺序或多个步骤的并行执行。此外,各个块可从任何方法中删除而不偏离本文描述的主题的精神和范围。上面描述的任何示例的方面可以与所描述的其它示例中的任一个的方面组合以形成另外的示例,而不失去所寻求的效果。在附图的元件被示为由箭头连接的场合,将认识到,这些箭头示出在元件之间的通信(包括数据和控制消息)的仅仅一个示例流。在元件之间的流可以在任一方向上或在两个方向上。

申请人特此独立地公开了本文中所描述的每个单独特征以及两个或更多个这样的特征的任何组合,公开的程度是使得这样的特征或组合能够基于本说明书作为整体依据本领域技术人员的公知常识来实现,而无论这样的特征或特征的组合是否解决了本文中所公开的任何问题。鉴于上述描述,对于本领域技术人员明显的是,可在本发明的范围内进行各种修改。

当与已知的实现进行比较时,在本申请中阐述的概念在器件、装置、模块和/或系统(以及本文中所实现的方法)中的实现可以引起性能改进。性能改进可以包括增加的计算性能、缩减的延迟、增加的吞吐量和/或缩减的功耗中的一个或更多个。在(例如,在集成电路中)制造这样的器件、装置、模块和系统期间,性能改进可以与物理实现相折衷,从而改进制造方法。例如,性能改进可以针对布局面积进行权衡,从而与已知的实现的性能匹配,但使用更少的硅。这可以例如通过以串行化方式重用功能块或在器件、装置、模块和/或系统的元件之间共享功能块来完成。相反,可以权衡在器件、装置、模块和系统的物理实现中产生改善(诸如减小的硅面积)的本申请中所阐述的概念以供改进性能。这可以通过例如在预定面积预算内制造模块的多个实例来完成。

示例性条款:

1.一种硬件曲面细分装置,包括片堆栈204、细分决策逻辑块206和细分逻辑块208,其中:

所述片堆栈204被布置为存储描述一个或更多个初始片和多个子片的片数据,并且根据先进后出方案经由输出端218输出所述片数据,所述片堆栈包括被配置为接收描述初始片的片数据的第一输入端214和被配置为接收描述子片的片数据的第二输入端216;

所述细分决策逻辑块206包括:(i)被配置为从所述片堆栈接收片数据的输入端220,(ii)被布置为根据所述片数据确定接收到关于其的片数据的初始片或子片是否要被细分的硬件逻辑,(iii)被配置为响应于确定所述初始片或子片要被细分而将所述片数据输出到所述细分逻辑块的第一输出端222,以及(iv)被配置为响应于确定所述初始片或子片将不被细分而输出所述片数据的第二输出端224;和

所述细分逻辑块208包括:(i)被配置为从所述细分决策逻辑块接收片数据的输入端226,(ii)被布置为对接收到关于其的片数据的初始片或子片进行细分的硬件逻辑,以及(iii)被配置为将关于通过所述细分形成的子片中的每个子片的片数据输出到所述片堆栈204的输出端230。

2.根据条款1所述的硬件曲面细分装置,还包括:

预处理块202,所述预处理块包括被布置为将输入片细分为多个初始片的硬件逻辑和被配置为将关于所述多个初始片的片数据输出到所述片堆栈204的输出端212。

3.根据条款2所述的硬件曲面细分装置,还包括:

准备块201,所述准备块包括被配置为从曲面片的顶点的子集接收顶点数据的输入端240、被布置为组合输入片的硬件逻辑和被配置为将输入片输出到所述预处理块的输出端242。

4.根据条款3所述的硬件曲面细分装置,其中,所述准备块201包括:

TF变换逻辑块302,所述TF变换逻辑块包括:(i)被配置为接收关于输入片中的每个顶点的顶点曲面细分因子的输入端308,(ii)被布置为使用底数2缩减所接收的顶点曲面细分因子的硬件逻辑,以及(iii)被配置为输出缩减的顶点曲面细分因子的输出端310;和

输入片组合块303,所述输入片组合块包括被布置成组合输入片的所有顶点的硬件逻辑。

5.根据条款2-4中任一项所述的硬件曲面细分装置,其中,所述预处理块202包括:

中间顶点逻辑块304,所述中间顶点逻辑块包括被布置为计算关于所述输入片的中间顶点的参数的硬件逻辑和被布置为输出关于所述中间顶点的参数的输出端316;

TF缩减逻辑块306,所述TF缩减逻辑块包括被布置成缩减由所述输入片形成的初始片中的每一个初始片中的每个顶点的曲面细分因子的硬件逻辑;和

初始片组合块326,所述初始片组合块包括被布置成将角和中间顶点组合到所述初始片中的硬件逻辑。

6.根据前述条款中任一项所述的硬件曲面细分装置,还包括:

顺序翻转逻辑块502,所述顺序翻转逻辑块包括:(i)被配置为从所述细分逻辑块208接收子片数据的输入端504,(ii)输出端506,以及(iii)被布置为基于一个或更多个存储值控制子片数据经由所述输出端506被输出的顺序的硬件逻辑。

7.根据前述条款中的任一项所述的硬件曲面细分装置,还包括:

域顶点堆栈702,所述域顶点堆栈被布置为存储关于所述初始片的顶点的顶点数据和关于当对初始片或子片进行细分时由所述细分逻辑块208生成的中间顶点的顶点数据,并根据先进后出方案经由输出端728输出所述顶点数据;

计数器704,

索引表706,所述索引表被布置成存储输出索引;

UV图元队列708,所述UV图元队列被布置为存储图元;

输出顶点逻辑块710,所述输出顶点逻辑块包括:(i)被配置为接收从所述域顶点堆栈702弹出的顶点数据的输入端730,(ii)输出端732,以及(iii)硬件逻辑,其被布置为确定所接收的顶点数据是否与已经由所述硬件曲面细分装置输出的顶点相关,并且响应于确定所接收的顶点数据与还没有被所述硬件曲面细分装置输出的顶点相关,使所述计数器704产生增量,将条目添加到所述索引表706并且经由所述输出端732输出所述顶点数据;

输出图元逻辑块714,所述输出图元逻辑块包括:(i)第一输入端736,其被配置为从所述细分决策逻辑块206接收图元数据,(ii)输入端/输出端738,其被布置为与获取索引逻辑块712通信,以及(iii)硬件逻辑,其被布置为延迟图元从所述UV图元队列708的输出,直到所述图元的所有顶点已经从所述硬件曲面细分装置输出为止;和

获取索引逻辑块712,其被布置为充当在所述索引表706和所述输出图元逻辑块714之间的接口。

8.根据条款1-6中的任一项所述的硬件曲面细分装置,还包括:

域顶点堆栈702,所述域顶点堆栈被布置为存储关于所述初始片的顶点的顶点数据和关于当对初始片或子片进行细分时由所述细分逻辑块208生成的中间顶点的顶点数据,并根据先进后出方案经由输出端728输出顶点数据;

计数器704,

索引表706,所述索引表布置成存储输出索引;

输出顶点逻辑块710,所述输出顶点逻辑块包括:(i)被配置为接收从所述域顶点堆栈702弹出的顶点数据的输入端730,(ii)输出端732,以及(iii)硬件逻辑,其被布置为确定所接收的顶点数据是否与已经由所述硬件曲面细分装置输出的顶点相关,并且响应于确定所接收的顶点数据与还没有被所述硬件曲面细分装置输出的顶点相关,使所述计数器704产生增量,将条目添加到所述索引表706并且经由所述输出端732输出所述顶点数据;

输出图元逻辑块1014,所述输出图元逻辑块包括:(i)第一输入端736,其被配置为从所述细分决策逻辑块206接收图元数据,(ii)输入端/输出端738,其被布置为与获取索引逻辑块712通信,以及(iii)被配置为输出图元数据的输出端740;和

获取索引逻辑块712,其被布置为充当在所述索引表706和所述输出图元逻辑块714之间的接口。

9.根据条款1-6中的任一项所述的硬件曲面细分装置,还包括:

域顶点堆栈702,所述域顶点堆栈被布置为存储关于所述初始片的顶点的顶点数据和关于当对初始片或子片进行细分时由所述细分逻辑块208生成的中间顶点的顶点数据,并根据先进后出方案经由输出端728输出所述顶点数据;

计数器704,

索引表706,所述索引表被布置成存储输出索引;

输出顶点逻辑块710,所述输出顶点逻辑块包括:(i)被配置为接收从所述域顶点堆栈702弹出的顶点数据的输入端730,(ii)输出端732,以及(iii)硬件逻辑,其被布置为确定所接收的顶点数据是否与已经由所述硬件曲面细分装置输出的顶点相关,并且响应于确定所接收的顶点数据与还没有被所述硬件曲面细分装置输出的顶点相关,使所述计数器704产生增量,将条目添加到所述索引表706并且经由所述输出端732输出所述顶点数据;和

多个附加逻辑块1204-1206,所述多个附加逻辑块被布置为生成对于每个图元的ID。

10.根据条款7-9中的任一项所述的硬件曲面细分装置,还包括:

域顶点队列1202,其被配置为存储从所述细分逻辑块208接收的顶点数据并且根据先进后出方案经由输出端1228输出该顶点数据。

11.根据条款1-6中的任一项所述的硬件曲面细分装置,还包括:

多个附加逻辑块1204-1206,所述多个附加逻辑块被布置为生成对于每个图元的ID。

12.根据条款9或11、或从属于条款9时的条款10所述的硬件曲面细分装置,其中,所述多个附加逻辑块包括:

多个ID序列生成逻辑块1206,所述多个ID序列生成逻辑块位于所述顺序翻转逻辑块502和所述片堆栈204之间,并被配置为向片ID添加位,其中,所添加的位的值指示具有所述片ID的子片是被第一次还是第二次推送到所述片堆栈上。

13.根据条款12所述的硬件曲面细分装置,其中,所述硬件曲面细分装置包括所述预处理块,并且所述多个附加逻辑块还包括:

一个或更多个ID头部生成逻辑块1204,其在所述预处理块和所述片堆栈之间并被配置为生成关于初始片中的每一个初始片的初始片ID。

14.一种硬件曲面细分装置,包括:

初始片选择逻辑块2002,所述初始片选择逻辑块包括:(i)被配置为接收关于多个初始片的片数据的第一输入端2030,(ii)被布置为接收ID的第二输入端2014,(iii)被布置为基于ID的一个或更多个位来选择关于所述初始片之一的片数据的硬件逻辑,以及(iv)被配置为输出所选择的片数据的输出端2012;

细分逻辑块208,所述细分逻辑块包括:(i)被配置成接收片数据的输入端226,(ii)被布置成对接收到关于其的片数据的初始片或子片进行细分的硬件逻辑,以及(iii)被配置成输出关于通过所述细分形成的子片中的每一个子片的片数据的输出端230;

子片选择逻辑块2010,所述子片选择逻辑块包括:(i)第一输入端2026,其被配置为接收关于通过所述细分逻辑块中的细分形成的多个子片的片数据,(ii)第二输入端2028,其被配置为接收ID,(iii)硬件逻辑,其被布置为基于所述ID的一个或更多个位来选择关于子片之一的片数据,以及(iv)被配置为输出所选择的片数据的输出端2024;和

ID结束逻辑块2004,所述ID结束逻辑块包括:(i)第一输入端2016,其被配置为从所述初始片选择逻辑块接收关于初始片的片数据,(ii)第二输入端2018,其被布置为从所述子片选择逻辑块接收关于所选择的子片的片数据,(iii)被布置为根据片或子片的ID来确定所述初始片或子片是否要被细分的硬件逻辑,(iv)第一输出端2020,其被配置为响应于确定所述初始片或子片要被细分而输出所述片数据,以及(v)第二输出端2022,其被配置为响应于确定所述初始片或子片将不被细分而输出所述片数据。

15.根据条款14所述的硬件曲面细分装置,还包括:

顺序翻转逻辑块2008,所述顺序翻转逻辑块包括:(i)被配置为从所述细分逻辑块208接收子片数据的输入端,(ii)被配置为向所述子片选择逻辑块输出子片数据的输出端,以及(iii)被布置为基于一个或更多个存储值控制经由所述输出端输出子片数据的顺序的硬件逻辑。

16.根据条款14或15所述的硬件曲面细分装置,还包括:

预处理块202,所述预处理块包括被布置为将输入片细分为多个初始片的硬件逻辑和被配置为将关于所述多个初始片的片数据输出到所述初始片选择逻辑块2002的输出端212。

17.根据条款16所述的硬件曲面细分装置,还包括:

准备块201,所述准备块包括被配置为从曲面片的顶点的子集接收顶点数据的输入端240、被布置为组合输入片的硬件逻辑、以及被配置为将输入片输出到所述预处理块的输出端242。

18.根据条款17所述的硬件曲面细分装置,其中,所述准备块201包括:

TF变换逻辑块302,所述TF变换逻辑块包括:(i)被配置为接收关于输入片中的每个顶点的顶点曲面细分因子的输入端308,(ii)被布置为使用底数2缩减所接收的顶点曲面细分因子的硬件逻辑,以及(iii)被配置为输出缩减的顶点曲面细分因子的输出端310;和

输入片组合块303,所述输入片组合块包括被布置成组合输入片的所有顶点的硬件逻辑。

19.根据条款16-18中的任一项所述的硬件曲面细分装置,其中,所述预处理块202包括:

中间顶点逻辑块304,所述中间顶点逻辑块包括被布置为计算关于所述输入片的中间顶点的参数的硬件逻辑和被布置为输出关于所述中间顶点的参数的输出端316;

TF缩减逻辑块306,所述TF缩减逻辑块包括被布置成缩减由所述输入片形成的每个初始片中的每个顶点的曲面细分因子的硬件逻辑;和

初始片组合块326,所述初始片组合块包括被布置成将角和中间顶点组合到所述初始片的硬件逻辑。

20.根据条款14-19中的任一项所述的硬件曲面细分装置,还包括:

第二细分逻辑块2108,所述第二细分逻辑块包括:(i)被配置为接收片数据的输入端2126,(ii)被布置成对接收到关于其的片数据的初始片或子片进行细分的硬件逻辑,以及(iii)被配置成输出关于通过对所述初始片或子片的细分而形成的新顶点的顶点数据的输出端2130。

21.根据条款20所述的硬件曲面细分装置,还包括:

角和中间顶点检查逻辑块2102,所述角和中间顶点检查逻辑块包括:(i)被配置成接收顶点ID的第一输入端2106,(ii)被配置成从所述预处理块202接收域顶点的第二输入端2108,(iii)被布置成将所接收的ID与对应于所述初始片的顶点的已知ID集进行比较并确定是否匹配的硬件逻辑,以及(iv)被配置成响应于确定所接收的ID与所述已知ID集中的ID匹配而输出所述域顶点的输出端2104。

22.一种在集成电路制造系统处制造图形处理系统的方法,所述图形处理系统包括在条款1-21中的任一项中指定的硬件曲面细分装置。

23.一种集成电路定义数据集,其在集成电路制造系统中进行处理时,将所述集成电路制造系统配置为制造图形处理系统,所述图形处理系统包括在条款1-21中的任一项中指定的硬件曲面细分装置。

24.一种计算机可读存储介质,在所述计算机可读存储介质上存储有集成电路的计算机可读描述,所述计算机可读描述当在集成电路制造系统中进行处理时,使得所述集成电路制造系统制造图形处理系统,所述图形处理系统包括在条款1-21中的任一项中指定的硬件曲面细分装置。

25.一种集成电路制造系统,包括:

计算机可读存储介质,在所述计算机可读存储介质上存储有集成电路的计算机可读描述,所述计算机可读描述描述了一种图形处理系统,所述图形处理系统包括在条款1-21中的任一项中指定的硬件曲面细分装置;

布局处理系统,其被配置为处理所述计算机可读描述,以便生成体现所述图形处理系统的集成电路的电路布局描述;以及

集成电路生成系统,其被配置为根据所述电路布局描述来制造所述图形处理系统。

相关技术
  • 硬件曲面细分装置
  • 硬件曲面细分装置
技术分类

06120114740496