图形处理系统中分层级平铺基元的方法和平铺引擎与流程

文档序号:24335393发布日期:2021-03-19 12:15阅读:105来源:国知局
图形处理系统中分层级平铺基元的方法和平铺引擎与流程

本申请涉及在图形处理系统中用于将基元分类或归入到渲染空间的平铺块中的方法和平铺引擎,并且更具体地涉及用于将基元分层级地分类或归入到平铺块中的方法和平铺引擎。



背景技术:

图形处理系统被配置成例如从在计算机系统上运行的应用程序(例如游戏应用程序)接收图形数据,并对来自图形数据的图像进行渲染以提供渲染输出。举例来说,应用程序可以生成场景的3d模型并输出表示场景中的对象的几何结构数据。特定来说,应用程序可以使用一个或多个基元(即,简单的几何形状,例如但不限于可以被应用纹理的矩形、三角形、线和点)来表示每个对象,所述多个基元由一个或多个顶点的位置限定。在这些状况下,由应用程序输出的几何结构数据可以包含标识每个顶点的信息(例如顶点在世界空间中的坐标)和指示由顶点形成的基元的信息。然后,图形处理系统将接收到的几何结构数据转换成可以在屏幕上显示的图像。

图形处理系统可以例如实施即时模式渲染(imr)或基于平铺块的渲染(tbr)。在imr中,将整个场景作为整体进行渲染。与此对比,在tbr中,使用被划分成被称为平铺块的子区段的渲染空间对场景进行渲染,其中可针对每个平铺块独立地执行渲染过程的至少一部分。平铺块可以具有任何合适形状,但通常为矩形(其中术语“矩形”包含正方形)。tbr的优点为,可以在渲染期间使用快速、片上存储器以用于颜色、深度和模板缓冲区操作,这与imr相比允许显著减少系统存储器带宽,而不需要足够大以同时存储用于整个场景的数据的片上存储器。

tbr涉及两个关键阶段:几何处理阶段;以及光栅化阶段。在几何处理阶段期间,将从应用程序(例如游戏应用程序)接收的几何结构数据(例如限定基元的顶点)从世界空间坐标变换成屏幕空间坐标。然后创建至少部分地落在平铺块的边界内的经过变换的基元(例如三角形)的每平铺块列表。在光栅化阶段期间,对每个平铺块单独地渲染(即,将经过变换的基元映射到像素并且针对平铺块中的每个像素标识颜色)。这可以包括标识哪个(哪些)基元在每个像素处是可见的。接着可以由每个像素处的可见基元的外观确定所述像素的颜色,所述可见基元可以由应用于所述像素处的纹理和/或在所述像素上运行的像素着色器程序限定。像素着色器程序描述将针对给定像素执行的操作。对每个平铺块单独地渲染会使图形处理系统能够在光栅化阶段中对特定平铺块进行渲染时仅检索与所述平铺块相关的经过变换的基元数据,这会使针对存储器(例如中间缓冲区)的带宽要求保持为低。一旦已经针对平铺块中的每个像素标识出颜色值,就将平铺块的颜色值写出到存储器(例如帧缓冲区)。一旦已经渲染整个场景(即,一旦已经针对所有平铺块的像素确定了颜色值),场景就可以例如显示在屏幕上。

图1示出示例tbr图形处理系统100。系统100包括存储器1021、1022、1023、1024、几何处理逻辑104和光栅化逻辑106。存储器1021、1022、1023和1024中的两个或多个可以在同一物理存储器单元中实现。

几何处理逻辑104实施tbr的几何处理阶段。几何处理逻辑104包括变换逻辑108和平铺引擎110。变换逻辑108从应用程序(例如游戏应用程序)接收几何结构数据(例如顶点、基元和/或补片)并将几何结构数据变换到渲染空间(例如屏幕空间)中。变换逻辑108还可以执行例如裁剪和剔除的功能以移除落在视锥外的几何结构数据(例如基元或补片),和/或应用所属领域的技术人员所知的照明/属性处理。经过变换的几何结构数据(例如顶点、基元和/或补片)(i)被存储在存储器1022中,以及(ii)被提供给平铺引擎110。平铺引擎110从经过变换的几何结构数据生成用于每个平铺块的经过变换的基元的列表,所述经过变换的基元至少部分地落在所述平铺块内。所述列表可以被称作显示列表或经过变换的显示列表。在一些状况下,经过变换的显示列表包括到与至少部分地落在平铺块内的基元相关的经过变换的几何结构数据(例如顶点数据)的指针或链接。

光栅化逻辑106实施tbr的光栅化阶段。具体而言,光栅化逻辑106通过从存储器1023提取平铺块的显示列表,然后从存储器1022提取落在平铺块内的由所述平铺块的显示列表指示的基元的经过变换的几何结构数据,以逐平铺块的方式渲染基元;并基于经过变换的几何结构数据来渲染所述平铺块的基元。

在一些状况下,光栅化逻辑106可包括光栅化器112、隐藏表面移除(hsr)逻辑114和纹理化/着色逻辑116。在这些状况下,光栅化器112从存储器1023提取每个显示列表,并且针对每个显示列表从存储器1022提取针对落在由对应的显示列表指定的平铺块内的基元的经过变换的几何结构数据,并将每个基元转换成基元片段的集合。术语“片段”在本文中用于意指采样点处的基元的样本,所述样本将被处理以对图像的像素进行渲染。在一些示例中,可以存在像素到片段的一对一映射。然而,在其他示例中,片段可以多于像素,并且此过采样可以允许像素值的较高质量渲染,例如通过促进可以应用于多个片段以用于对每个像素值进行渲染的抗混叠和其他滤波器。

然后将特定平铺块的基元片段提供到hsr逻辑114,所述hsr逻辑通过对基元片段执行深度测试而移除隐藏(例如,被其他基元片段隐藏)的基元片段。接着将其余片段(在隐藏表面移除之后)传递到纹理化/着色逻辑116,该纹理化/着色逻辑对基元片段执行纹理化和/或着色以确定被渲染图像的像素值。接着,将平铺块的被渲染像素值存储在存储器1024(例如,帧缓冲区)中。

光栅化逻辑106处理每个平铺块,并且当整个图像已经被渲染并存储在存储器1024(例如,帧缓冲区)中时,图像可以从图形处理系统100输出并以任何合适的方式使用,例如,显示在显示器上、存储在存储器中或传输到另一设备等。在片段在由纹理化/着色逻辑116处理之前由hsr逻辑114处理的意义上,图1所展示的tbr图形处理系统100是“推迟的”渲染系统。在其他示例中,图形处理系统可能并非推迟的渲染系统,在此状况下,将会在将hsr应用于片段之前将纹理化/着色应用于那些片段。

下文描述的实施方案仅以示例的方式提供,并且不限制解决用于在图形处理系统中平铺基元的已知方法和系统的任何或所有缺点的实现方式。



技术实现要素:

提供本发明内容是为了介绍在以下详细描述中进一步描述的一些概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。

本文所述的是在图形处理系统中使用的用于分层级平铺多个基元的平铺引擎和方法。所述平铺引擎包括:分类单元的链,包括顶级分类单元,随后是一个或多个较低级分类单元,其中:所述顶级分类单元被配置为:确定多个基元中的每一个至少部分地落在渲染空间的多个区域中的哪个区域内;以及针对基元至少部分地落入的每个区域,将所述基元的标识符存储在与所述区域相关联的所述顶级分类单元的队列中;并且所述一个或多个较低级分类单元中的每一个被配置为:在所述链中选择前一分类单元的一个或多个队列进行处理;针对每个所选的队列,确定所选的队列中标识的每个基元至少部分地落在与所选的队列相关联的所述区域的多个子区域中的哪个子区域内;以及针对基元至少部分地落入的每个子区域,将所述基元的标识符存储在与所述子区域相关联的所述较低级分类单元的队列中;以及输出单元,所述输出单元被配置为以逐个队列为基础输出所述链中的最后一个较低级分类单元的队列中标识的所述基元。

第一方面提供了一种在图形处理系统中使用的平铺引擎,所述平铺引擎包括:分类单元的链,包括顶级分类单元,随后是一个或多个较低级分类单元,其中:所述顶级分类单元被配置为:确定多个基元中的每一个至少部分地落在渲染空间的多个区域中的哪个区域内;以及针对基元至少部分地落入的每个区域,将所述基元的标识符存储在与所述区域相关联的所述顶级分类单元的队列中;并且所述一个或多个较低级分类单元中的每一个被配置为:在所述链中选择前一分类单元的一个或多个队列进行处理;针对每个所选的队列,确定所选的队列中标识的每个基元至少部分地落在与所选的队列相关联的所述区域的多个子区域中的哪个子区域内;以及针对基元至少部分地落入的每个子区域,将所述基元的标识符存储在与所述子区域相关联的所述较低级分类单元的队列中;以及输出单元,所述输出单元被配置为以逐个队列为基础输出所述链中的最后一个较低级分类单元的队列中标识的所述基元。

所述顶级分类单元可以被配置为使用第一平铺方法确定基元是否至少部分地落在区域内,并且所述一个或多个较低级分类单元中的至少一个被配置为使用不同的第二平铺方法来确定基元是否至少部分地落在子区域内。

第一平铺方法可以不如第二平铺方法精确。

所述顶级分类单元可以被配置为使用边界框方法来确定基元是否至少部分地落在区域内,所述边界框方法包括:标识包围所述基元的轴线对齐的边界框,并且如果所述边界框与所述区域至少部分地重叠,则确定所述基元至少部分地落在所述区域内。

所述一个或多个较低级分类单元中的至少一个可以被配置为通过选择以下项中的一项来选择所述链中的所述前一分类单元的队列以进行下一个处理:所述前一分类单元的最长队列;所述前一分类单元的最新队列;与最接近所述前一分类单元的最近处理队列的区域的区域相关联的所述前一分类单元的队列;以及所述前一分类单元的最早队列。

所述一个或多个较低级分类单元可包括至少两个较低级分类单元,并且所述较低级分类单元中的一个可以被配置为使用第一方法选择所述链中的所述前一分类单元的一个或多个队列以进行处理;并且所述较低级分类单元中的另一个可以被配置为使用不同的第二方法选择所述链中的所述前一分类单元的一个或多个队列以进行处理。

所述基元可以存储在缓冲区中,并且基元的标识符可包括指示所述基元在所述缓冲区中的位置的信息。

所述基元可以存储在基元块中的所述缓冲区中,其中每个基元块包括多个基元,并且基元的所述标识符可包括标识基元形成其一部分的所述基元块的信息。

所述平铺引擎还可包括存储单元,所述存储单元被配置为通过将空间上相似的基元分组成同一基元块来生成所述基元块。

所述存储单元可以被配置为通过以下方式生成所述基元块:确定每个基元至少部分地落在所述渲染空间的多个宏区域中的哪个宏区域内;将所述基元添加到与所述基元至少部分地落入的宏区域相关联的至少一个基元块中;以及当与宏区域相关联的基元块变满时,将所述基元块存储在所述缓冲区中。

所述存储单元可以被配置为:响应于确定基元至少部分地落在多个宏区域内,将所述基元添加到与所述基元至少部分地落入的每个所述宏区域相关联的基元块中。

存储单元可以被配置为在以下状况时确定与宏区域相关联的基元块已满:所述基元块具有最大大小;所述基元块包括最大数量的基元;以及/或每个基元与一个或多个顶点相关联并且所述基元块包括最大数量的顶点。

所述缓冲区的存储器可以被划分成多个区块,并且所述存储单元可以被配置为仅将与同一宏区域相关联的基元块存储在同一区块中。

所述缓冲区的存储器可以被划分成大小为k的多个物理区块;虚拟存储器可以被划分成大小为(m+1)*k的多个虚拟存储器区块,每个虚拟存储器区块被映射到(m+1)个物理区块,其中基元块的最大大小为m*k,其中m是大于或等于2的整数;并且所述平铺引擎还可包括存储单元,所述存储单元被配置为仅在所述基元块以所述虚拟存储器区块的第一个k大小的块开始时才将基元块写入虚拟存储器区块。

所述顶级分类单元的所述区域的大小和/或所述一个或更多个较低级分类单元中的至少一个的所述子区域的大小可以是可配置的。

至少一个区域或至少一个子区域可以是所述渲染空间的非连续区域。

所述一个或多个较低级分类单元中的至少一个可包括多个队列,并且所述至少一个较低级分类单元可以被配置为将所述多个队列与所述子区域动态关联。

所述至少一个较低级分类单元还可以被配置为:响应于确定基元至少部分地落在子区域内,确定所述较低级分类单元的所述多个队列中的队列是否与所述子区域相关联;响应于确定所述较低级分类单元的所述多个队列中的队列与所述子区域相关联,将所述基元的标识符添加到与所述子区域相关联的队列中;响应于确定所述较低级分类单元的所述多个队列中的队列不与所述子区域相关联,确定所述较低级分类单元的所述多个队列中的一个队列是否可用;以及响应于确定所述较低级分类单元的所述多个队列中的一个队列可用,将所述较低级分类单元的可用队列与所述子区域相关联,并将所述基元的标识符添加到所述队列中。

所述一个或多个较低级分类单元中的每一个可以被配置为针对所述链中的所述前一分类单元的每个所选的队列从所选的队列中移除所述基元标识符。

所述至少一个较低级分类单元可以被配置为当所述较低级分类单元的队列不包括任何基元标识时确定所述队列为可用。

所述平铺引擎中的较低级分类单元的数量可以是可配置的。

第二方面提供了一种基于渲染空间的区域对多个基元进行分类的方法,所述方法包括:执行分类阶段的链,包括顶级分类阶段,随后是一个或多个较低级分类阶段,其中所述顶级分类阶段包括:确定每个所述基元至少部分地落在所述渲染空间的多个区域中的哪个区域内;以及针对基元至少部分地落入的每个区域,将所述基元的标识符存储在与所述区域相关联的所述顶级分类阶段的队列中;并且一个或多个较低级分类阶段中的每一个包括:选择所述链中的前一分类阶段的一个或多个队列进行处理;针对每个所选的队列,确定所选的队列中标识的每个基元至少部分地落在与所选的队列相关联的所述区域的多个子区域中的哪个子区域内;以及针对基元至少部分地落入的每个子区域,将所述基元的标识符存储在与所述子区域相关联的所述较低级分类阶段的队列中;以及以逐个队列为基础有选择地输出所述链中的最后一个较低级分类阶段的队列中标识的所述基元。

第三方面提供了一种平铺引擎,其被配置为执行第二方面所述的方法。

第四方面提供了一种图形处理系统,其包括第一方面或第三方面所述的平铺引擎。

本文所述的平铺引擎和图形处理系统可以以集成电路上的硬件来体现。可以提供一种在集成电路制造系统中制造体现本文所述的平铺引擎和/或图形处理系统的集成电路的方法。可以提供集成电路限定数据集,当在集成电路制造系统中进行处理时,该集成电路限定数据集将系统配置为制造体现本文所述的平铺引擎或图形处理系统的集成电路。可以提供一种非暂态计算机可读存储介质,在其上存储有本文所述的平铺引擎或图形处理系统的计算机可读描述,当在集成电路制造系统中进行处理时,该可读描述致使所述集成电路制造系统制造体现平铺引擎或图形处理系统的集成电路。

可以提供一种集成电路制造系统,该集成电路制造系统包括:非暂态计算机可读存储介质,其上存储有本文所述的平铺引擎或图形处理系统的计算机可读描述;布局处理系统,其被配置为处理计算机可读描述,以生成体现平铺引擎或图形处理系统的集成电路的电路布局描述;以及集成电路生成系统,其被配置为根据电路布局描述制造体现平铺引擎或图形处理系统的集成电路。

可以提供用于执行如本文所述的方法的计算机程序代码。可以提供其上存储有计算机可读指令的非暂态计算机可读存储介质,当在计算机系统处执行时,所述计算机可读指令使计算机系统执行如本文所述的方法。

如对本领域的技术人员显而易见的,上述特征可以适当地组合,并且可以与本文所述的示例的任何方面组合。

附图说明

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

图1是示例的基于平铺块的渲染图形处理系统的框图;

图2是示例混合渲染图形处理系统的框图;

图3是具有分层级平铺引擎的示例混合渲染图形处理系统的框图;

图4是图3的分层级平铺引擎的示例实现方式的框图;

图5是示出将基元分类到渲染空间的多个区域中的示意图;

图6是示出确定基元是否至少部分地落在渲染空间的区域内的示例边界框方法的示意图;

图7是示出将在与渲染空间的区域相关联的队列中标识的基元分类到子区域中的示意图;

图8是用于分层级平铺基元的示例方法的流程图;

图9是用于将基元标识符添加到与基元至少部分地落入的区域/子区域相关联的队列中的示例方法的流程图;

图10是示例分层级平铺引擎的队列的框图,其中队列被分组成块;

图11是示出示例渲染空间的连续和非连续区域的示意图;

图12是示出示例基元标识符的示意图;

图13是示出示例性的经过变换的几何结构缓冲区的示意图,该几何结构缓冲区被细分为多个区块/页面;

图14是示出使用虚拟存储器将经过变换的局部几何结构缓冲区的物理存储器分配到基元块的示例方法的示意图;

图15是示出虚拟地址的示例格式的示意图;

图16是其中可以实现本文所述的平铺引擎或图形处理系统的示例计算机系统的框图;以及

图17是用于生成体现本文所述的平铺引擎和/或图形处理系统的集成电路的示例集成电路制造系统的框图。

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

具体实施方式

通过示例的方式给出以下描述,以使本领域的技术人员能够制造和使用本发明。本发明不限于本文中描述的实施方案,并且对所公开的实施方案的各种修改对于所属领域的技术人员而言将是显而易见的。仅通过示例的方式描述实施方案。

如上文所描述,通过单独地渲染每个平铺块,tbr图形处理系统仅需在光栅化阶段中对特定平铺块进行渲染时检索与所述平铺块相关的经过变换的基元数据,这使得对存储器(例如中间缓冲区)的带宽要求保持为最小值。然而,tbr通常需要使用系统存储器来存储整个帧的经过变换的几何结构数据,这通常需要大量带宽用于在其上实现几何处理逻辑104和光栅化逻辑106的芯片与通常位于“片外”的存储器之间传输数据(例如,经过变换的几何结构数据)。因此,为了利用tbr的某些益处,同时减少往返存储器的数据传输量,申请人开发了一种“混合渲染”技术,顾名思义,该技术是即时模式渲染和tbr之间的混合体。

在混合渲染中,渲染空间被划分成平铺块,并且基元与平铺块(如tbr中的平铺块)相关联。因此,在混合渲染中,还存在几何处理阶段和光栅化阶段。然而,在tbr中,通过几何处理阶段生成的显示列表包括(如果可能)至少部分地落在用于特定渲染的特定平铺块内的所有经过变换的基元的列表,而在混合渲染中,通过几何处理阶段为相应平铺块生成的显示列表可以仅包括至少部分地落在相应平铺块内的经过变换的基元的子集的标识符,因此它们在本文中可以被称作部分显示列表。具体而言,在tbr中(如果可能),所有经过变换的基元都存储在片外存储器中,然后针对引用了存储在存储器中的经过变换的基元的相应平铺块生成显示列表。与此对比,在混合渲染中,将经过变换的基元存储在相对较小的存储器(例如,片上存储器,例如局部缓冲区)中,并且针对引用了小的存储器中的经过变换的基元的每个平铺块生成部分显示列表。小的存储器(例如,局部缓冲区)并不意图必须足够大以存储所有经过变换的基元以供渲染,因此当在几何处理阶段中生成经过变换的基元时,将所述基元存储在小的存储器中,并且针对存储在小的存储器中的经过变换的基元建立部分显示列表。周期性地将部分显示列表提供到光栅化阶段,使得经过变换的基元中的一些可以在光栅化阶段中进行处理,使得这些基元不再需要存储在小的存储器中(并且可从中移除),由此释放小的存储器的一部分。然后可以将新的经过变换的基元存储在小的存储器中的可用空间中,并基于新的经过变换的基元继续建立部分显示列表。由于特定平铺块的部分显示列表可以在所述平铺块的所有经过变换的基元已经存储在小的存储器中之前发送到光栅化阶段,因此可以在将所述平铺块的先前部分显示列表提供给光栅化阶段之后针对包括存储在小的存储器中的经过变换的基元的所述平铺块生成至少一个后续部分列表。

图2示出示例混合渲染图形处理系统200。图形处理系统200包括存储器2021、2024、几何处理逻辑204和光栅化逻辑206。存储器2021和2024可以在存储器的同一物理单元中实现。

类似于图1的几何处理逻辑104,几何处理逻辑204实施几何处理阶段。几何处理逻辑204包括变换逻辑208和平铺引擎210。变换逻辑208的操作方式与图1的变换逻辑108相同。具体地说,变换逻辑208从应用程序(例如游戏应用程序)接收几何结构数据(例如顶点、基元和/或补片)并将几何结构数据变换到渲染空间(例如屏幕空间)中。变换逻辑208还可以执行例如裁剪和剔除的功能以移除落在视锥外的几何结构数据(例如基元或补片),和/或应用所属领域的技术人员所知的照明/属性处理。经过变换的几何结构数据(例如顶点、基元和/或补片)被提供到平铺引擎210。

平铺引擎210将经过变换的几何结构数据存储在经过变换的局部几何结构缓冲区211中,并针对每个平铺块,在经过变换的局部几何结构缓冲区211中生成经过变换的基元的列表,所述经过变换的基元至少部分地落在所述平铺块内。所述列表可以被称作部分显示列表。在一些状况下,部分显示列表可包括到与至少部分地落在所述平铺块内的基元相关的经过变换的局部几何结构缓冲区211中经过变换的几何结构数据(例如顶点数据)的指针或链接。经过变换的局部几何结构缓冲区并不旨在必须足够大以存储所有经过变换的几何结构数据以渲染帧,因此平铺引擎210周期性地(例如,不时地,例如以规则的间隔,或者当经过变换的局部几何结构缓冲区211变满时,或者当经过变换的局部几何结构缓冲区211的满度大于阈值时)将一个或多个部分显示列表发送到光栅化逻辑206,由此释放经过变换的局部几何结构缓冲区211中的空间。如上文所描述,这意味着当将部分显示列表提供到光栅化逻辑206时,所述部分显示列表可以仅包括落在所述平铺块内的基元的一部分(因为落在平铺块内的一些基元可能尚未通过几何处理逻辑204处理)。

光栅化逻辑206实施光栅化阶段。具体地说,光栅化逻辑206通过以下操作而以逐平铺块的方式对基元进行渲染:针对落在如由用于平铺块的部分显示列表所指示的所述平铺块内的基元,从经过变换的局部几何结构缓冲区211提取经过变换的几何结构数据;以及基于经过变换的几何结构数据对用于所述平铺块的基元进行渲染。

在一些状况下,光栅化逻辑206可包括光栅化器212、隐藏表面移除(hsr)逻辑214和纹理化/着色逻辑216。在这些状况下光栅化器212从平铺引擎210接收部分显示列表,并且对于每个部分显示列表,针对落在如由部分显示列表所指示的平铺块内的基元从经过变换的局部几何结构缓冲区211提取经过变换的几何结构数据,并将每个基元转换成基元片段的集合。

接着将用于特定平铺块的基元片段提供到hsr逻辑214,所述hsr逻辑移除隐藏(例如被其他基元片段隐藏)的基元片段。接着将其余片段(在隐藏表面移除之后)传递到纹理化/着色逻辑216,所述纹理化/着色逻辑对基元片段执行纹理化和/或着色以确定被渲染图像的像素值。然后,可以将针对平铺块的被渲染像素值存储在存储器2024(例如,帧缓冲区)中。

当整个图像已经被渲染并存储在存储器2024(例如,帧缓冲区)中时,图像可以从图形处理系统200输出并以任何合适的方式使用,例如,显示在显示器上、存储在存储器中或传输到另一设备等。

尽管几何处理逻辑在图中示为与光栅化逻辑分离,但在一些实施方案中,几何处理逻辑和光栅化逻辑可共享一些资源。例如,图形处理系统可以使用统一着色方法,其中相同的物理执行单元可以用于执行在几何处理阶段中使用的指令(例如,执行顶点处理)并执行在光栅化阶段中使用的指令(例如,执行片段处理)。

在这样的混合渲染系统中,期望能够以有效的方式平铺基元(即,将基元分类到平铺块中),同时确保经过变换的局部几何结构缓冲区211的有限大小不会成为瓶颈。

因此,本文描述了用于以分层级的方式平铺基元的方法和平铺引擎,其可以但不限于在混合渲染图形处理系统中使用。具体而言,本文所述的平铺引擎包括分类单元的链,其使用队列的集合将基元分类到渲染空间的逐渐变小的区域中。所述分类单元的链包括顶级分类单元,随后是一个或多个较低级分类单元。顶级分类单元通过将标识至少部分地落在区域内的基元的信息存储在与所述区域相关联的队列中来将基元分类到渲染空间的区域中。然后,链中的下一分类单元通过将标识至少部分地落在较小区域内的基元的信息存储在与所述较小区域相关联的队列中来将顶级分类单元的每个队列中被标识的基元分类到渲染空间的较小区域中。重复此过程,直到基元已被分类到平铺块大小的区域中。然后,将与平铺块大小的区域相关联的队列中被标识的基元有选择地输出到光栅化阶段,以平铺块为基础进行渲染。

所描述的方法和平铺引擎允许以有效方式将基元分类到平铺块中,从而有效利用经过变换的小的局部几何结构缓冲区,而无需大量存储器来实施。

现在参考图3,其示出了示例混合渲染图形处理系统300,其中平铺引擎被配置为实施分层级平铺。具体而言,与图2的混合渲染图形处理系统200相同,图3的混合渲染图形处理系统300具有:存储器3021、3024;几何处理逻辑304,所述几何处理逻辑包括变换逻辑308、平铺引擎310和经过变换的局部几何结构缓冲区311;以及光栅化逻辑306,所述光栅化逻辑包括光栅化器312、hsr逻辑314和纹理化/着色逻辑316(它们以与上文参考图2描述的系统200中的对应部件相同的方式工作)——除了平铺引擎310被配置为实施分层级平铺。如上文所描述,在分层级平铺中,将基元分类到渲染空间的逐渐变小的区域中。例如,可以首先将基元分类到128×128的区域中,然后将与每个128×128的区域相关联的基元分类到8×8的区域中。

如上文所描述,图形处理系统被配置为(例如,从在计算机系统上运行的应用程序(例如,游戏应用程序))接收图形数据并从图形数据生成渲染输出(例如,图像)。渲染空间通常但不一定是二维的矩形(其中矩形包括正方形)像素网格。渲染空间的区域是渲染空间的与像素的集合相对应的部分,并且可以由被所述区域覆盖的像素的数量来限定。例如,渲染空间的nxm区域是渲染空间的与像素的nxm集合相对应的部分,其中n和m是整数。如下文更详细描述的,渲染空间的区域可以是渲染空间的与像素的连续块或像素的非连续集合相对应的部分。

图3的分层级平铺引擎310包括:存储单元318、分类单元320、322的链和输出单元324。

存储单元318被配置为接收由变换逻辑308生成的经过变换的几何结构数据(例如,经过变换的基元),并将接收到的基元存储在经过变换的局部几何结构缓冲区311中。具体而言,存储单元318被配置为针对每个接收到的基元确定经过变换的局部几何结构缓冲区311中是否具有足够的空间来存储接收到的基元。如果存储单元318确定经过变换的局部几何结构缓冲区311中具有空间来存储基元,则存储单元318将基元(例如,与其相关的经过变换的几何结构数据)存储在经过变换的局部几何结构缓冲区311中并将基元(例如,与其相关的经过变换的几何结构数据)以及指示基元在经过变换的局部几何结构缓冲区311中的位置的信息转发到分类单元320、322的链。指示基元在经过变换的局部几何结构缓冲区311中的位置的信息可包括例如经过变换的局部几何结构缓冲区311的存储基元的地址。然而,如果存储单元318确定经过变换的局部几何结构缓冲区中没有足够的空间,则存储单元318可以停止,直到经过变换的局部几何结构缓冲区311中具有足够的空间来存储接收到的基元。

在一些状况下,可以将基元(例如,与其相关的经过变换的几何结构数据)以基元为基础存储在经过变换的局部几何结构缓冲区311中。在这些状况下,如果缓冲区中具有足够的空间来存储所述基元,则存储单元318可以确定经过变换的局部几何结构缓冲区311中具有足够的空间。在下文更详细描述的其他状况下,可以将基元(例如,与其相关的经过变换的几何结构数据)存储在基元块中,并且如果缓冲区中具有足够的空间来存储所述基元所属的整个基元块,则存储单元318可以确定缓冲区中具有足够的空间来存储基元。在这些状况下,指示基元在经过变换的局部几何结构缓冲区311中的位置的信息可包括:经过变换的局部几何结构缓冲区311的存储基元块的地址,以及指示基元在基元块内的位置的索引或偏移。

分类单元320、322的链被配置为使用队列的集合将基元分层级地分类到平铺块中。具体而言,分类单元320、322的链被配置为将基元接连地分类到渲染空间的越来越小的区域中,直到基元被分类到平铺块中。分类单元的链包括顶级分类单元320,随后是一个或多个较低级分类单元322。顶级分类单元320通过将至少部分地落在区域内的任何基元的标识符存储在与所述区域相关联的队列中,来将从存储单元318接收的基元分类到渲染空间的区域中。每个较低级分类单元322通过将前一分类单元的队列中的至少部分地落在较小区域(例如,子区域)内的任何基元的标识符存储在所述较低级分类单元的与所述较小区域相关联的队列中,来将链中的所述前一分类单元的队列中的基元以逐个队列为基础分类到较小区域(例如,子区域)中。

输出单元324被配置为以逐个队列为基础输出链中最后一个分类单元的队列中的基元。具体而言,输出单元324被配置为选择将由光栅化逻辑处理的最后一个分类单元的一个或多个队列,并且针对每个所选的队列依次将所述队列中被标识的基元提供给光栅化逻辑。最后一个分类单元的队列中由输出单元324输出的被标识的基元的集合可以由被称作部分显示列表的数据结构来标识。

现在参考图4,其示出了图3的被配置为使用队列的集合来分层级地平铺基元的分类单元320、322的链和输出单元324的示例实现方式。在此示例中,分类单元的链包括顶级分类单元320,随后是一个较低级分类单元322。

顶级分类单元320(在此示例中可被称作级别1分类单元)被配置为将从存储单元318接收的基元分类到渲染空间的多个顶级区域中,其中所述多个顶级区域覆盖整个渲染空间。例如,如果渲染空间包括1024×1024的像素阵列,则可以将渲染空间划分成六十四个128×128的像素区域。对于所属领域的技术人员将显而易见的是,这仅是示例,并且在其他示例中,渲染空间可以更大或更小,并且渲染空间可以存在基元被分类到其中的不同数量的顶级区域。在一些状况下,顶级分类单元320可被配置为将基元分类到顶级区域中,每个顶级区域覆盖四分之一的渲染空间(例如,渲染目标)。

顶级分类单元320可包括多个顶级队列4020、4021、4022、4023…402n和顶级分类逻辑404。

如所属领域的技术人员所知的,队列是一种结构,该结构被配置为以接收元素的顺序存储所述元素。图4的顶级队列4020、4021、4022、4023…402n被具体配置为以接收基元标识符的顺序存储所述基元标识符。在此示例中,有n个顶级队列,其中n是大于或等于2的整数。在许多状况下,基元由应用程序以预定顺序输出,并且重要的是要保持基元的排序(在平铺块内)。在这些状况下,将基元标识符以接收它们的顺序存储在队列中允许保持基元在区域内和平铺块内的排序。顶级队列4020、4021、4022、4023…402n可以具有固定的大小,该大小限定了在队列中可以存储的基元标识符的最大数量。可以存储的基元标识符的最大数量可以取决于基元标识符的格式。

在一些状况下,基元标识符可以是指示经过变换的局部几何结构缓冲区311中存储所述基元的经过变换的几何结构数据的位置的信息。例如,基元标识符可以是经过变换的局部几何结构缓冲区311内存储与所述基元相关的经过变换的几何结构数据的地址(或可以从其生成地址的偏移)。在每个基元由一个或多个顶点限定的状况下,基元的经过变换的几何结构数据可包括形成所述基元的顶点的经过变换的位置数据(例如,渲染空间中描述顶点的位置的x、y和z坐标)。基元的经过变换的几何结构数据还可包括属性的集合,以描述每个顶点的外观,例如纹理坐标(u,v)和/或应用于所述顶点的基色。

基元标识符的格式可以取决于如何将经过变换的几何结构数据存储在经过变换的局部几何结构缓冲区311中。例如,如下文更详细描述的,可以以基元为基础或在基元块中存储经过变换的几何结构数据,在所述基元块中将基元的集合的经过变换的几何结构数据存储在一起。下文在题为“存储单元和经过变换的局部几何结构缓冲区”的部分中描述基元标识符的示例格式。

顶级分类逻辑404被配置为将基元分类到渲染空间的多个顶级区域中。具体而言,顶级分类逻辑404被配置为针对每个接收到的基元确定基元至少部分地落在多个顶级区域中的哪个内;并且如果顶级分类逻辑404确定基元至少部分地落在顶级区域内,则顶级分类逻辑404将基元的标识符添加到与所述顶级区域相关联的队列中。因为基元可以至少部分地落在多于一个的顶级区域内,所以可以将基元的标识符添加到多于一个的队列中。例如,如图5所示,如果渲染空间500被划分成四个顶级区域502、504、506、508,并且顶级分类逻辑404确定基元a至少部分地落在前三个顶级区域502、504、506中的每一个内,则将标识基元a的信息添加到与那些顶级区域中的每个相关联的队列510、512、514。类似地,如果顶级分类逻辑404确定基元b至少部分地落在最后三个顶级区域504、506、508中的每一个内,则将标识基元b的信息添加到与那些顶级区域中的每一个相关联的队列512、514、516中。

顶级分类逻辑404可以使用任何合适的方法来确定基元是否至少部分地落在顶级区域内。例如,在一些状况下,顶级分类逻辑404可以使用简单、准确度较低的方法(例如,简单的边界框平铺方法)来确定基元是否至少部分地落在顶级区域内,以便快速将基元分类到顶级区域中。如所属领域的技术人员所知的,在边界框方法中,对涵盖基元的边界框进行标识(例如,涵盖基元顶点的与轴线对齐的最小边界框)。可以使用任何合适的方法来生成边界框。例如,顶级分类逻辑404可以通过找到基元顶点的最小和最大的x和y坐标并从那些坐标形成与轴线对齐的边界框来生成边界框。可以以任何粒度或分辨率生成边界框。例如,在一些状况下,边界框可以处于x和y坐标分辨率(即,边界框可以由顶点的最大和最小的x和y坐标限定)。在其他状况下,边界框可以处于顶级区域分辨率(即,涵盖基元的最小顶级区域边缘)。一旦顶级分类逻辑404已经标识基元的边界框,则如果边界框与顶级区域至少部分地重叠,那么顶级分类逻辑404可以确定基元至少部分地落在所述顶级区域内。换句话说,如果基元的边界框至少部分地落在顶级区域的边界内,则可以确定所述基元至少部分地落在所述顶级区域内。尽管可以使用边界框方法快速有效地确定基元是否至少部分地落在顶级区域内,但这并不是“完美”的平铺,因为边界框通常大于基元,这可能会导致基元实际上未处于顶级区域中时被确定为处于所述顶级区域中。

例如,图6示出示例渲染空间600,所述渲染空间被细分成四个相等的顶级区域602、604、606、608。如果使用简单的轴线对齐的边界框方法来确定基元610至少部分地落在顶级区域602、604、606、608中的哪个内,则生成围绕基元610的边界框612。由于边界框612与所有区域602、604、606、608至少部分地重叠,因此可以确定基元610至少部分地落在四个顶级区域中的每一个内,即使所述基元实际上仅落在三个顶级区域604、606、608内或与所述三个顶级区域重叠。然而,在基元实际上未落在顶级区域内时对所述基元落在所述区域内的确定不会导致出错,并且在光栅化阶段中会简单地丢弃所述基元。然而,对基元未落在其实际落入的顶级区域内的确定可能会导致在渲染阶段中出错。因此,保守平铺块是有利的。换句话说,与不包括实际上落在区域内的基元相比,更好的是指示基元落在所述区域内,即使所述基元实际上未落在所述区域内。

然而,在其他状况下,顶级分类逻辑404可以使用更复杂和/或更精确的方法(例如,完美平铺或近乎完美平铺方法)来确定基元是否落在顶级区域内。可以由顶级分类逻辑404使用的示例完美平铺方法在申请人已公开的申请号为2549789的英国专利申请中进行了描述,该申请的全部内容结合在本文中。

在一些状况下,顶级区域的大小和数量可以是预定的。在这些状况下,可以将顶级队列4020、4021、4022、4023…402n中的每一个预分配到特定的顶级区域,或者与特定的顶级区域预关联。例如,如果顶级分类单元320被配置为将1024×1024的渲染空间的基元分类到128×128的顶级区域中,则可以将第一队列4020预分配到跨越x坐标0至127和y坐标0至127的128×128的区域,可以将第二队列4021预分配到跨越x坐标128至255和y坐标0至127的128x128的区域,可以将第三队列4022预分配到跨越x坐标0至127和y坐标128至255的128x128的区域,并且可以将另外一个队列4023预分配到跨越x坐标128至255和y坐标128至255的128x128的区域,依此类推。

在其他状况下,顶级区域的大小和/或数量可以是可配置的。例如,平铺引擎可以支持多个不同大小的顶级区域和/或多个不同数量的顶级区域。在这些状况下,可以将顶级队列4020、4021、4022、4023…402n动态地分配到特定的顶级区域。例如,在一些状况下,顶级分类逻辑404可以被配置为,如果确定基元落在特定的顶级区域内,则确定是否存在分配到所述顶级区域的队列。如果具有分配到所述顶级区域/与所述顶级区域相关联的队列,则顶级分类逻辑404可以确定所述队列是否已满。如果队列未满,则顶级分类逻辑404可以将所述基元的标识符添加到所述队列中。如果队列已满(例如,队列包括最大数量的基元标识符),则顶级分类逻辑404可以停止直到队列未满。然而,如果没有分配到所述区域/与所述区域相关联的队列,则顶级分类逻辑404可以选择可用的顶级队列4020、4021、4022、4023…402n中的一个,并且分配所述队列或者将所述队列与所述顶级区域相关联。然后,顶级分类逻辑404可以将所述基元的标识符添加到被分配到所述顶级区域的队列中。

与顶级区域的数量和/或大小是否可配置无关,期望顶级分类单元320中有足够的队列,使得可以同时分配每个顶级区域/将每个顶级区域与队列相关联。例如,如果顶级区域的最大数量为六十四,则优选地至少有六十四个队列(例如,n=64)。

较低级分类单元322(在此示例中可以被称作级别0分类单元)被配置为将顶级分类单元的队列中的基元以逐个队列为基础分类到较小的较低级区域(例如,子区域)中。例如,如果顶级分类单元320被配置为将基元分类到渲染空间的128×128顶级区域中,则较低级分类单元322可以被配置为将与每个128×128的顶级区域相关联的基元分类到其32×32的子区域中。较低级分类单元322可包括多个较低级队列4060、4061、4062、4063…406k、仲裁器408和较低级分类逻辑410。

类似于顶级队列,较低级队列4060、4061、4062、4063…406k被配置为以接收基元标识符的顺序存储所述基元标识符。在此示例中,有k个队列,其中k是大于或等于2的整数。顶级队列的数量可以与较低级队列的数量相同,或者顶级队列的数量可以与较低级队列的数量不同。在一些状况下,由于存在比顶级区域多的较低级区域,因此可以有比顶级队列多的较低级队列。在一些状况下,较低级队列4060、4061、4062、4063…406k可以具有固定的大小,所述固定的大小限定了可以存储在较低级队列中的基元标识符的最大数量。可以存储在较低级队列中的基元标识符的最大数量可以取决于基元标识符的格式。较低级队列的大小可以与顶级队列的大小相同或不同。在一些状况下,因为落在顶级区域内的基元会比落在较低级子区域内的基元多,所以顶级队列可以比较低级队列大。在其他状况下,较低级队列4060、4061、4062、4063…406k的大小可以不固定,并且可以被动态地调整以满足当前需求。

较低级分类单元322不被设计为必须同时处理所有顶级队列。在一些状况下,较低级分类单元322可以能够一次仅处理单个顶级队列。在其他状况下,较低级分类单元322可以能够同时处理多个顶级队列。因此,仲裁器408被配置为选择要由较低级分类单元322处理的下一顶级队列4020、4021、4022、4023…402n。仲裁器408可以被配置为基于任何合适的标准来选择要处理的下一顶级队列。例如,仲裁器408可以被配置为选择:最长的队列(例如,具有最多基元标识符的队列);最新的队列(例如,最近分配到区域的队列);与最接近(例如,在距离方面)与最近处理的队列相关联的区域的区域相关联的队列;或最早的队列(例如,已分配到当前区域/与当前区域相关联最长时间的队列)。测试已经表明,在一些状况下,就较快地释放经过变换的局部几何结构缓冲区311中的空间而言,选择最早的队列可能效果最好。对于所属领域的技术人员显而易见的是,这些仅是示例,并且可以由仲裁器408使用任何合适的标准来选择接下来要处理哪个顶级队列。

较低级分类逻辑410被配置为将每个所选的顶级队列中标识的基元分类到较小区域(例如,子区域或较低级区域)中。例如,如果顶级分类单元320被配置为将基元分类到128×128的顶级区域中,则较低级分类逻辑410可以被配置为将所选队列的128×128的顶级区域划分成32×32的子区域或较低级区域,并将所选的队列中标识的基元分类到32×32的子区域中。在较低级分类单元322是最低级分类单元或链中的最后一个分类单元的状况下(如在图4所示的示例中),子区域或较低级区域可以是平铺块的大小。例如,如果目标是将基元分类到32×32的平铺块中,则子区域可以是32×32的区域。

较低级分类逻辑410可以被配置为将所选的顶级队列中标识的基元分类到较小区域(例如,子区域或较低级区域)中,针对所选的队列中标识的每个基元,这是通过以下来实现的:确定所述基元至少部分地落在多个较小区域(例如,子区域或较低级区域)中的哪个内;针对所述基元落入的每个子区域或较低级区域,将所述基元的标识符添加到与所述子区域相关联的队列中;以及将所述基元的标识符从所选的顶级队列中移除。

例如,如图7所示,如果与图5的第三顶级区域506相关联的级别0队列514被仲裁器408选择为要由较低级分类逻辑410处理的下一队列,并且较低级分类逻辑410被配置为将所选的顶级队列中标识的基元分类到四个子区域702、704、706、708中,则较低级分类逻辑410可以被配置为首先确定第一基元(基元a)至少部分地落在子区域702、704、706、708中的哪个内。如果较低级分类逻辑410确定基元a至少部分地落在第一子区域702内,则较低级分类逻辑410可以被配置为将基元a的标识符添加到与第一子区域702相关联的较低级队列710中,并将基元a的标识符从顶级队列514中移除。较低级分类逻辑410可以被配置为然后确定下一基元(基元b)至少部分地落在子区域702、704、706、708中的哪个内。如果较低级分类逻辑410确定基元b至少部分地落在最后三个子区域704、706、708内,则较低级分类逻辑410可以被配置为将基元b的标识符添加到较低级与那些子区域704、706、708中的每一个相关联的队列712、714、716中。然后,较低级分类逻辑410可以被配置为将基元b的标识符从顶级队列514中移除。

较低级分类逻辑410可以被配置为使用任何合适的方法来确定基元至少部分地落在子区域内。例如,如上文所描述,较低级分类逻辑410可以使用边界框方法、近乎完美方法或完美方法来确定基元是否至少部分地落在子区域内。在一些状况下,与顶级分类逻辑404相比,较低级分类逻辑410可以使用更精确或更准确的方法来确定基元是否落在子区域或较低级区域内。例如,在一些状况下,顶级分类逻辑404可以被配置为使用边界框方法来确定基元是否至少部分地落在顶级区域内;并且较低级分类逻辑410可以被配置为使用近乎完美或完美平铺方法来确定基元是否至少部分地落在子区域或较低级区域内。

由于存储在队列中的基元标识符仅标识特定的基元,因此较低级分类逻辑410和/或仲裁器408可以被配置为在较低级分类逻辑410处理顶级队列中标识的基元之前基于基元标识符从经过变换的局部几何结构缓冲区311获得基元(例如,与其相关的经过变换的几何结构)。然后,较低级分类逻辑410可以被配置为基于与基元相关的经过变换的几何结构数据来确定所述基元是否至少部分地落在子区域内。

在一些状况下,一旦较低级分类逻辑410已经开始处理顶级队列,则顶级分类逻辑404可能不能将关联的顶级区域的任何更多基元标识符添加到所述顶级队列中。在这些状况下,在较低级分类逻辑410已经开始处理与特定的顶级区域相关联的队列之后,如果顶级分类逻辑404接收到落在所述顶级区域内的基元,则所述顶级分类逻辑可以停止。然而,在其他状况下,顶级分类逻辑404可以继续将基元标识符添加到与顶级区域相关联的顶级队列中,直到所述队列不再与所述区域相关联为止。

一旦较低级分类逻辑410已经对在所选队列中标识的所有基元进行分类(例如,顶级队列为空),则较低级分类逻辑410可以通知仲裁器408其现在准备处理另一个顶级队列。仲裁器408然后可以选择下一顶级队列进行处理(如上所述),并且向较低级分类逻辑410提供指示要处理的下一顶级队列的信息。

较低级分类单元322不被设计为针对渲染空间中的每个可能的子区域或较低级区域必须具有足够的队列以具有专用队列。例如,如果渲染空间是1024×1024的像素区域,并且较低级分类单元322被配置为将链中的前一分类单元的每个队列中标识的基元分类到32×32的子区域或较低级区域中,则渲染空间中将有1024个32×32的子区域或较低级区域,但是较低级分类单元322可以没有1024个队列(即,k<1,024)。优选地,较低级分类单元322具有至少足够的队列,使得顶级区域的每个子区域或较低级区域可以同时与不同的队列相关联。例如,如果顶级分类单元320被配置为将基元分类到128×128的顶级区域中,并且较低级分类单元322被配置为将被标识为与每个128×128的顶级区域相关联的基元分类到32×32的子区域或较低级区域中,则针对每个128×128的顶级区域将有十六个32×32的子区域。因此,在该示例中,优选地,较低级分类单元322具有至少十六个队列,然而,较低级分类单元322可以具有多于十六个的队列。在一些状况下,较低级分类单元322可具有最小队列数的2倍(例如,在上文示例中至少为三十二个队列)。

在较低级分类单元322针对渲染空间中每个可能的子区域或较低级区域没有足够的队列以具有专用队列的状况下,较低级分类逻辑410可以被配置为在其处理顶级分类单元320的队列时将较低级分类单元322的队列动态地分配到子区域。例如,在一些状况下,较低级分类逻辑410可以被配置为在其开始处理与区域相关联的顶级队列之前针对每个子区域确定是否有足够的可用的较低级队列。例如,如果顶级队列与128×128的顶级区域有关,并且较低级分类逻辑410被配置为将被标识为落在所述区域内的基元分类到32×32的子区域中,则较低级分类逻辑410可以配置为确定是否有十六个可用的较低级队列。如果较低级分类逻辑410确定具有期望数量的可用的较低级队列,则较低级分类逻辑410可以将可用的较低级队列中的一个分配到顶级区域的每个子区域。然而,如果较低级分类逻辑410确定没有期望数量的可用的较低级队列,则较低级分类逻辑410可以停止,直到期望数量的较低级队列可用。然而,这种分配队列的方法意味着,即使较低级分类逻辑410可能不需要所有那些较低级队列,较低级分类逻辑410也可能停止而等待期望数量的较低级队列。例如,在一些状况下,尽管顶级区域可能有十六个子区域,但前一分类单元的队列中标识的基元实际上可能仅落在那些子区域中的四个内。

因此,在其他状况下,较低级分类逻辑410可以被配置为当其确定基元落在子区域内时确定是否已经将较低级队列分配到所述子区域/与所述子区域相关联。如果确定已经将较低级队列分配到所述子区域,则较低级分类逻辑410可以确定所述较低级队列是否已满(例如,其是否包含最大数量的基元标识符)。如果队列已满,则较低级分类逻辑410可以停止,直到队列未满。如果队列未满,则将基元的标识符添加到所述队列中。然而,如果确定尚未将较低级队列分配到所述子区域/与所述子区域相关联,则较低级分类逻辑410可以确定是否具有可用的较低级队列。如果较低级分类逻辑410确定具有可用的较低级队列,则较低级分类逻辑410可以将所述可用的较低级队列分配到子区域,并将基元的标识符添加到所述较低级队列中。然而,如果较低级分类逻辑410确定没有可用的较低级队列,则较低级分类逻辑410可以停止,直到具有可用的较低级队列。在此方法中,较低级分类逻辑410可能仅需要停止直到释放单个队列,而不是等待直到释放多个队列。

输出单元324被配置为以逐个队列为基础将链中的最后一个分类单元的队列中标识的基元输出到光栅化逻辑。具体而言,输出单元324被配置为当光栅化逻辑准备好接收与新的平铺块相关联的基元时选择要输出的较低级队列中的一个,然后将所选的较低级队列中标识的基元按顺序输出到光栅化逻辑。一旦将基元输出到光栅化逻辑后,即可将所述基元的标识符从较低级队列中移除。一旦输出了所选的较低级队列中的所有基元(并将其从队列中移除),则较低级队列将为空。此时,较低级队列可以从较低级区域中被解除分配,并且可以成为可用的较低级队列。较低级队列中标识的基元的集合在本文中可以被描述为形成部分显示列表。

输出单元324可以被配置为以任何合适的方式选择下一较低级队列以输出到光栅化逻辑。例如,输出单元324可以被配置为使用关于仲裁器408所描述的方法中的一个来选择下一较低级队列进行处理。例如,输出单元324可以被配置为选择:最长的较低级队列(例如,具有最多基元标识符的较低级队列);最新的较低级队列(例如,最近分配到较低级区域的较低级队列);与最接近(例如,在距离方面)与最近处理的较低级队列相关联的较低级区域的较低级区域相关联的较低级队列;或最早的较低级队列(例如,已分配到其较低级区域/与其较低级区域相关联最长时间的较低级队列)。在一些状况下,输出单元324可以被配置为使用与由仲裁器408选择要处理的下一顶级队列所使用的方法不同的方法来选择较低级队列进行输出。

在一些状况下,输出单元324可以被配置为针对所选的较低级队列中标识的每个基元向标识所述基元的光栅化逻辑输出信息,并且光栅化逻辑可以被配置为检索与来自经过变换的局部几何结构缓冲区311的基元相对应的经过变换的几何结构数据。在其他状况下,输出单元可以被配置为针对较低级队列中标识的每个基元从经过变换的局部几何结构缓冲区311中检索与所述基元相对应的经过变换的几何结构数据,并将检索到的经过变换的几何结构数据输出到光栅化逻辑。

在一些状况下,一旦输出单元324已经开始处理较低级队列,则较低级分类逻辑410可能不能将关联的较低级区域的任何更多基元标识符添加到所述较低级队列中。在这些状况下,在输出单元324已经开始处理与特定的较低级区域相关联的队列之后,如果较低级分类逻辑410接收到落在所述较低级区域内的基元,则所述较低级分类逻辑可以停止。然而,在其他状况下,较低级分类逻辑410可以继续将基元标识符添加到与较低级区域相关联的队列中,直到所述队列不再与所述较低级区域相关联为止。

在一些状况下,可以一次仅将队列分配到一个区域。在这些状况下,只有当队列与区域不相关联时,所述队列才可以被视为“可用的”队列——这可能是因为所述队列从未被分配到区域,或者是因为所述队列已被分配到区域,但是在较低级分类逻辑410或输出单元324已处理所述队列之后所述队列从所述区域中被解除分配。

在图4所示的示例中,分类单元的链包括单个较低级分类单元322,其他平铺引擎可以具有多于一个的较低级分类单元。举例来说,在一些状况下,可能具有三个较低级分类单元,所述三个较低级分类单元将基元分类到逐渐变小的区域中。在一些状况下,较低级分类单元322的数量可以是可配置的或可动态选择的。举例来说,较低级分类单元322的数量可以由驱动器在渲染开始时基于例如渲染空间(例如,渲染目标)的大小来配置。

在具有多个较低级分类单元的状况下,每个较低级分类单元可以以与图4的较低级分类单元322相同的方式操作——通过将链中的前一分类单元的队列中标识的基元以逐个队列为基础分类到较小区域中。具体而言,每个较低级分类单元被配置为选择链中的前一分类单元的队列进行处理。如上文所描述,可以使用任何合适的方法来选择前一分类单元的队列进行处理。针对每个所选的队列,较低级分类单元确定所选的队列中标识的基元至少部分地落在哪些子区域内。然后,针对基元至少部分地落入的每个子区域,较低级分类单元将所述基元的标识符添加到与所述子区域相关联的队列中。如上文所描述,可以使用任何合适的方法将队列动态地分配到子区域。

现在参考图8,其示出可以由图3的平铺引擎实施的示例方法800,所述方法使用多个队列将基元分层级地分类到平铺块中。方法800可以被划分成顶级分类阶段802、较低级分类阶段804和输出阶段806。方法800在框808处在顶级分类阶段802中开始,在此,平铺引擎(例如,分层级的平铺引擎310)接收基元用于平铺。接收基元可包括接收与所述基元有关的经过变换的几何结构数据(例如,经过变换的顶点数据)。一旦在平铺引擎(例如,分层级的平铺引擎310)处已接收到基元,则所述方法前进到框810。

在框810处,平铺引擎(例如,顶级分类单元320)确定接收到的基元至少部分地落在渲染空间的多个顶级区域中的哪个内。如上文所描述,多个顶级区域一起覆盖整个渲染空间。举例来说,如果渲染空间是1024×1024的像素,则顶级区域可包括十六个非重叠的256×256的区域。如上文所描述,平铺引擎(例如,顶级分类单元320)可以被配置为使用任何合适的方式来确定基元是否至少部分地落在顶级区域内。举例来说,平铺引擎(例如,顶级分类单元320)可以使用边界框平铺方法、近乎完美平铺方法或完美平铺方法来确定基元是否至少部分地落在顶级区域内。一旦平铺引擎(例如,顶级分类单元320)已确定接收到的基元至少部分地落在哪个顶级区域内,则方法800前进到框812。

在框812处,针对基元至少部分地落入的每个顶级区域,平铺引擎(例如,顶级分类单元320)将基元的标识符添加到与所述顶级区域相关联的顶级队列中。例如,如果在框810处确定接收到的基元至少部分地落在三个不同的顶级区域内,则将基元的标识符添加到与第一顶级区域相关联的第一队列、与第二顶级区域相关联的第二队列以及与第三顶级区域相关联的第三队列中。如上文所描述,在一些状况下,可以将基元(例如,与其相关的经过变换的几何结构数据)存储在经过变换的局部几何结构缓冲区311中,并且基元的标识符可包括标识基元(例如,与其相关的经过变换的几何结构数据)在经过变换的局部几何结构缓冲区311中的位置的信息。一旦基元的标识符已被添加到与所述基元至少部分地落入的每个顶级区域相关联的顶级队列中,方法800就:(i)返回到框808,在此,下一基元被接收并被分类到区域中;以及(ii)前进到较低级分类阶段804。

较低级分类阶段804在框814处开始,在此,平铺引擎(例如,较低级分类单元322)选择顶级队列中的一个进行处理。如上文所描述,平铺引擎(例如,较低级分类单元322)可以被配置为使用任何合适的标准来选择顶级队列中的一个进行处理。例如,如上文所描述,平铺引擎(例如,较低级分类单元322)可以被配置为选择:最长的队列(例如,具有最多基元标识符的队列);最新的队列(例如,最近分配到顶级区域/最近与顶级区域相关联的队列);与最接近(例如,在距离方面)与最近处理的队列相关联的顶级区域的顶级区域相关联的队列;或最早的队列(例如,已分配到其顶级区域/与其顶级区域相关联最长时间的队列)。一旦已选择顶级队列以在较低级分类阶段中进行处理,则方法800前进到框816。

在框816处,平铺引擎(例如,较低级分类单元322)获得所选的顶级队列中标识的第一(例如,最高)基元以进行处理。在将基元(例如,与其相关的经过变换的几何结构数据)存储在经过变换的局部几何结构缓冲区311中的状况下,获得所选的顶级队列中标识的第一基元可包括从经过变换的局部几何结构缓冲区311中获得第一标识基元(例如,与其相关的经过变换的几何结构数据)。此时,平铺引擎(例如,较低级分类单元322)也可以从所选的顶级队列中移除所述基元的标识符。一旦获得所选的顶级队列中标识的第一基元,方法800就前进到框818。

在框818处,平铺引擎(例如,较低级分类单元322)将与所选的顶级队列相关联的顶级区域细分成多个较小的子区域,并确定接收到的基元至少部分地落在哪个子区域内。例如,如果所选的顶级队列与256×256的顶级区域相关联,则所述256×256的区域可以被划分成六十四个32×32的子区域,并且平铺引擎(例如,较低级分类单元322)可以确定基元是否至少部分地落在这六十四个32×32的子区域中的每个内。如上文所描述,平铺引擎(例如,较低级分类单元322)可以被配置为使用任何合适的平铺方法来确定基元是否至少部分地落在子区域内。例如,平铺引擎(例如,较低级分类单元322)可以使用边界框平铺方法、近乎完美平铺方法、完美平铺方法或任何其他合适的平铺方法来确定基元是否落在子区域内。在一些状况下,与在框810处确定基元是否至少部分地落在顶级区域内所使用的平铺方法相比,平铺引擎(例如,较低级分类单元322)可以被配置为使用更精确的平铺方法来确定基元是否至少部分地落在子区域内。例如,在一些状况下,在框810处,平铺引擎可以使用边界框方法来确定基元是否至少部分地落在顶级区域内,并且可以使用近乎完美或完美平铺方法来确定基元是否至少部分地落在子区域内。一旦平铺引擎(例如,顶级分类单元320)已确定接收到的基元至少部分地落在哪个子区域内,则方法800前进到框820。

在框820处,针对基元至少部分地落入的每个子区域,平铺引擎(例如,较低级分类单元322)将基元的标识符添加到与所述子区域相关联的较低级队列中。例如,如果在框818处确定基元至少部分地落在两个不同的子区域内,则将基元的标识符添加到与第一子区域相关联的第一较低级队列中,并将基元的标识符添加到与第二子区域相关联的第二较低级队列中。如上文所描述,在一些状况下,可以将基元(例如,与其相关的经过变换的几何结构数据)存储在经过变换的局部几何结构缓冲区311中,并且基元的标识符可包括标识基元(例如,与其相关的经过变换的几何结构数据)在经过变换的局部几何结构缓冲区311中的位置的信息。一旦基元的标识符已被添加到与基元至少部分地落入的每个子区域相关联的较低级队列中,方法800就前进到(i)框822;以及(ii)输出阶段806。

在框822处,平铺引擎(例如,较低级分类单元322)确定所选的顶级队列中是否具有任何其他基元标识符。如果确定所选的顶级队列中具有至少一个基元标识符,则方法800返回到框816,在此,获得下一基元(例如,与其相关的经过变换的几何结构数据)并将所述基元分类到子区域中。然而,如果确定所选的顶级队列中没有更多的基元标识符(例如,所选的顶级队列为空,因此成为可用队列),则方法800返回到框814,在此,平铺引擎(例如,较低级分类单元322)选择另一个要处理的顶级队列,然后获得所选的队列中标识的基元并将所述基元分类到子区域中。

输出阶段806在框824处开始,在此,平铺引擎(例如,输出单元324)选择较低级队列中的一个以在输出阶段中进行处理。如上文所描述,平铺引擎(例如,输出单元324)可以被配置为使用任何合适的标准选择较低级队列中的一个进行处理。例如,如上文所描述,平铺引擎(例如,输出单元324)可以被配置为选择:最长的队列(例如,具有最多基元标识符的队列);最新的队列(例如,最近分配到较低级区域/最近与较低级区域相关联的队列);与最接近(例如,在距离方面)与最近处理的较低级队列相关联的较低级区域的较低级区域相关联的队列;或最早的队列(例如,已分配到其较低级区域/与其较低级区域相关联最长时间的队列)。一旦选择了较低级队列以在输出阶段进行处理,则方法800前进到框826。

在框826处,按顺序输出所选的较低级队列中标识的基元。在一些状况下,输出所选的较低级队列中标识的基元可包括输出基元标识符。在其他状况下,输出所选的较低级队列中标识的基元可包括从经过变换的局部几何结构缓冲区311获得基元(例如,与其相关的经过变换的几何结构数据)并输出基元(例如,与其相关的经过变换的几何结构数据)。在一些状况下,将所选的较低级队列中标识的基元输出到图形处理系统的光栅化阶段以进行处理。

尽管在图8的示例方法800中具有单个较低级处理阶段,但是在其他示例中可以具有多个较低级处理阶段。在每个较低级处理阶段中,执行框814至822以将链中的前一分类阶段的队列中标识的基元分类到较小的子区域中。例如,在具有两个较低级分类阶段的状况下,顶级分类阶段可将基元分类到256×256的顶级区域中,第一较低级分类阶段可将每个256×256的顶级区域中的基元分类到64×64的子区域中,并且第二较低级分类阶段可将每个64×64的子区域中的基元分类到其16×16的子区域中。

现在参考图9,其示出将基元的标识符添加到与所述基元至少部分地落入的特定区域或子区域相关联的队列中的示例方法。方法900可以由图4的顶级分类逻辑404和/或较低级分类逻辑410实施,以将基元的标识符添加到与所述基元至少部分地落入的区域相关联的顶级队列中,或者将基元的标识符添加到与所述基元至少部分地落入的子区域相关联的较低级队列中。方法900还可以或替代性地被执行为图8的方法800的框812和/或820的一部分。

方法900在框902处开始,在此,接收信息以标识基元以及所述基元至少部分地落入的区域或子区域。一旦信息标识基元以及所述基元至少部分地落入的区域/子区域,方法900就前进到框904。在框904处,确定是否具有与被标识的区域或子区域相关联的队列。如果在框904处确定具有与被标识的区域或子区域相关联的队列,则方法900前进到框906。在框906处,确定与被标识的区域或子区域相关联的队列是否已满。如上文所描述,在一些状况下,队列可以具有固定的大小,使得所述队列只能存储一定数量的基元标识符。如果在框906处确定与被标识的区域或子区域相关联的队列已满,则方法900停止,直到与被标识的区域或子区域相关联的队列不再为满为止。如果在框906处确定与被标识的区域或子区域相关联的队列未满,则所述方法前进到框908,在此,将基元标识符添加到与被标识的区域或子区域相关联的队列中。

如果在框904处确定没有与被标识的区域或子区域相关联/被分配到被标识的区域或子区域的队列,则方法900前进到框910。在框910处,确定是否具有适当级处的任何可用队列。例如,如果方法900由顶级分类逻辑实施,则在框910处,可以确定是否具有任何可用的顶级队列;如果方法900由较低级分类逻辑实施,则在框910处,可以确定是否具有任何可用的较低级队列。可用队列可以是不包括任何基元标识符和/或不与区域/子区域相关联的队列。如果在框910处确定没有适当级处的可用队列,则方法900停止,直到具有适当级处的可用队列。如果在框910处确定具有适当级处的至少一个可用队列,则方法900前进到框912,在此,可用队列中的一个与被标识的区域或子区域相关联/被分配到被标识的区域或子区域。然后,方法900前进到框908,在此,将基元的标识符添加到与被标识的区域或子区域相关联/被分配到被标识的区域或子区域的队列。

如上文所描述,在一些状况下,队列可能没有最大大小或最大数量的基元标识符(例如,队列的长度或大小可以动态地适应)。在这些状况下,可以不执行框906,并且方法900可以直接从框904——是——前进到框908。

队列的多个存储体

在一些状况下,光栅化逻辑可以能够同时处理多个平铺块(即,光栅化逻辑可以能够同时处理多个部分显示列表)。举例来说,光栅化逻辑可包括多个光栅化处理单元,每个光栅化处理单元能够处理一个或多个平铺块(例如,一个或多个部分显示列表)。在这些状况下,每个较低级分类单元322的队列可以被划分成多个组或存储体,并且每个存储体可以将基元仅馈送到较低级队列的子集和/或光栅化处理单元的子集中。

例如,现在参考图10,其示出示例分类单元的链的队列。在该示例中存在:具有级别2队列的集合1002的顶级分类单元(在本文中可被称作级别2分类单元);以及两个较低级分类单元——具有级别1队列的集合10040、10041的级别1分类单元和具有级别0队列的集合10060-10067的级别0分类单元。级别1队列被划分成两个组或存储体10040和10041,并且级别0队列被划分成八个组或存储体10060-10067。较低级分类单元的队列的每个存储体可以仅将基元馈送到较低级队列的子集和/或光栅化处理单元的子集中。换句话说,较低级分类单元的队列的每个存储体可以仅由下一级分类单元的队列的子集或光栅化处理单元的子集来处理。如果存储体中的队列用于将所述队列中标识的基元分类到子区域中,则认为队列的所述存储体用于处理与区域相关联的队列。

具体而言,在图10的示例中,级别1存储体中的每个都可用于处理级别2队列。级别1仲裁器(未示出)可以使用任何合适的方式和/或标准来选择要使用哪个级别1存储体来处理特定的级别2队列。在一些状况下,级别1仲裁器可以被配置为在级别2队列的两个存储体之间交替。例如,可以配置级别1仲裁器,以便使用级别1队列的第一存储体处理第一选择的级别2队列,使用级别1队列的第二存储体处理第二选择的级别2队列,使用级别1队列的第一存储体处理第三选择的级别2队列。在其他状况下,级别1仲裁器可以被配置为基于其他标准(例如,空间接近度)选择处理级别2队列所要使用的队列的存储体。

在图10的示例中,仅级别0队列的子集可用于处理每个级别1存储体的队列。举例来说,仅能使用级别0队列的前四个存储体来处理级别1队列的第一存储体,并且仅能使用级别0队列的后四个存储体来处理级别1队列的第二存储体。级别0仲裁器(未示出)可以使用任何合适的方式或标准来选择四个可用的级别0存储体中的哪个将被用于处理特定的级别1队列。例如,级别0仲裁器可以被配置为以循环为基础从可用级别0存储体中进行选择,或者级别0仲裁器可以被配置为以空间相似为基础从可用级别0存储体中进行选择(例如,使得与空间相似的区域/子区域相关的级别1队列由队列的同一存储体处理)。

类似地,在图10的示例中,仅光栅化处理单元10080-10087的子集可用于处理每个级别0存储体的队列。具体而言,每个级别0存储体的队列可以仅由单个光栅化处理单元处理——即,只有第一光栅化处理单元可用于处理第一级别0队列存储体的队列,只有第二光栅化处理单元可用于处理第二级别0队列存储体的队列,只有第三光栅化处理单元可用于处理第三级别0队列存储体的队列,依此类推。每个光栅化处理单元可以能够同时处理一个或多个级别0队列。换句话说,由于每个级别0队列表示部分显示列表,所以每个光栅化处理单元可以能够同时处理一个或多个部分显示列表。

尽管在此示例中,级别0队列存储体与光栅化处理单元之间存在一对一的关系,但是在其他示例中,级别0队列存储体与光栅化处理单元之间可以存在一对多的关系。举例来说,在其他状况下,可以通过多个光栅化处理单元来处理每个级别0存储体的队列。在这些状况下,位于级别0分类单元和光栅化处理单元之间的输出单元(未示出)可以使用任何合适的方式将级别0队列分配到可用的光栅化处理单元。举例来说,输出单元可以被配置为以循环为基础或基于与队列相关联的区域的空间接近度将级别0队列分配到可用的光栅化处理单元,使得与空间相似区域相关的队列由同一光栅化处理单元处理。

因为重要的是,每个平铺块(例如,层级结构中的最小子区域)中的基元以其被接收的顺序进行处理,所以重要的是,平铺块的部分显示列表以其生成的顺序进行处理。具体而言,重要的是,在处理平铺块的第二(之后生成的)部分显示列表之前,由光栅化处理单元处理所述平铺块的第一部分显示列表,以确保平铺块的部分显示列表以其生成的顺序进行处理,仲裁器和输出单元可以被配置为保持跟踪分别由每个队列存储体或每个光栅化处理逻辑当前正在处理的区域或子区域。

例如,每个仲裁器(例如,级别1仲裁器(其选择要由级别1分类单元处理的级别2队列)和级别0仲裁器(其选择要由级别0分类单元处理的级别1队列)和输出单元可以被配置为针对每个队列存储体/光栅化处理单元维护前一分类单元/级别的每个区域的计数器,所述计数器指示所述区域是否正在由所述队列存储体或所述光栅化处理单元进行处理。如果(i)所述队列存储体或光栅化处理单元当前正在处理区域;或者(ii)队列存储体或所述队列存储体馈送的光栅化处理单元当前正在处理所述区域,则所述区域正在由队列存储体或光栅化处理单元处理。然后,仲裁器或输出单元可以被配置为当其选择用于处理的前一分类单元/级别的队列时查核计数器,并且如果计数器指示特定的队列存储体/光栅化处理单元当前正在处理与所述队列相关联的区域或子区域,则仲裁器或输出单元不能将所述队列发送到另一个队列存储体或光栅化处理单元进行处理。

现在将针对分类单元的链描述参考计数机制的示例实现方式,所述分类单元的链包括:顶级分类单元(即,级别2分类单元),所述顶级分类单元将基元分类到四个级别2区域a、b、c和d中;第一较低级分类单元(即,级别1分类单元),所述第一较低级分类单元将级别2区域a、b、c、d中的每一个的基元分类到四个级别1子区域a-1、a-2、a-3、a-4、b-1、b-2、b-3、b-4、c-1、c-2、c-3、c-4、d-1、d-2、d-3、d4,并将级别1队列分组成两个存储体,如图10所示;以及第二较低级分类单元(即,级别0分类单元),所述第二较低级分类单元将每个级别1区域中的基元分类到四个级别0子区域a-1-1、a-1-2、a-1-3、a-1-4、a-2-1、a-2-2等中,并将级别0队列分组成八个存储体,如图10所示。

级别1仲裁器(其被配置为选择要由级别1分类逻辑处理的级别2队列,并将每个所选的级别2分配到两个级别1队列存储体中的一个)可以被配置为针对每个级别1队列存储体维护每个级别2区域的计数器。具体而言,针对两个级别1队列存储体中的每一个,级别1仲裁器可以被配置为针对四个级别2区域中的每一个维护计数器,如表1所示。当级别1分类单元将级别1存储体的队列与级别2区域的子区域相关联时,所述级别2区域的计数器增加。举例来说,如果级别1分类单元将级别1存储体0的队列与子区域a-1、a-2、a-3和a-4中的每一个相关联,则可以将存储体0的区域a的计数器增加4,如表1所示。然后,级别1仲裁器可以被配置为仅在另一级别1存储体1的区域的计数器为零时才将与区域相关联的所选级别2队列发送到级别1存储体。例如,在表1中,级别1仲裁器不能将区域a队列发送到级别1存储体1,因为区域a当前正在由级别1存储体0处理。

表1

级别0仲裁器(其被配置为选择要由级别0分类逻辑处理的级别1队列,并将每个所选的级别1队列分配到与所述级别1存储体相关联的级别0队列存储体中的一个)可以被配置为针对每个级别0队列存储体维护每个级别1区域的计数器,如表2所示。当级别0分类单元将级别0存储体的队列与级别1区域的子区域相关联时,所述级别1区域的计数器增加。例如,如果级别0分类单元将级别0存储体1的队列与子区域a-1-1、a-1-2和a-1-4中的每一个相关联,则存储体0的子区域a-1的计数器可以增加3,如表1所示。然后,级别0仲裁器可以被配置为仅在另一级别0存储体的子区域的计数器为零时才将与子区域相关联的级别1队列发送到级别0存储体。例如,在表2中,级别0仲裁器不能将子区域a-1队列发送到级别0存储体1,因为子区域a-1当前正在由级别0存储体0处理。

表2

输出单元还可以被配置为针对每个光栅化处理单元维护每个级别0区域的计数器,如表3所示。当输出单元发送或输出与级别0区域相关联的级别0队列时,所述级别0区域的计数器将增加。例如,如果输出单元向光栅化处理单元0发送/输出与子区域a-1-1相关联的级别0队列,则光栅化处理单元0的子区域a-1-1的计数器增加1,如表3所示。

表3

输出单元还可以被配置为从光栅化处理单元接收指示所述光栅化处理单元何时完成对子区域(例如,平铺块)的处理的信息。当输出单元接收到指示光栅化处理单元已完成对子区域的处理的信息时,所述子区域的相关计数器将减小。例如,如果输出单元接收到光栅化处理单元已完成对子区域a-1-1的处理的信息,则输出单元可以使适当的a-1-1计数器减小。如果所述减小使输出单元计数器为零,则输出单元可以被配置为将更新发送到级别0仲裁器,所述更新指示光栅化处理单元已完成对所述子区域的处理。在接收到这种指示时,级别0仲裁器可以被配置为使与所述子区域相关联的级别0计数器减小。例如,如果级别0仲裁器接收到光栅化处理单元已完成对子区域a-1-1的处理的指示,则级别0仲裁器可以将适当的a-1计数器减小1。如果减小计数器使级别0计数器为零,则级别0仲裁器然后可以将信息发送到级别1仲裁器,所述信息指示光栅化处理单元已完成对所述子区域的处理。在接收到这种指示时,级别1仲裁器可以被配置为使与所述子区域相关联的级别1计数器减小。例如,如果级别1仲裁器接收到光栅化处理单元已完成对子区域a-1的处理的指示,则级别1仲裁器可以使适当的a计数器减小。当级别2区域的级别1计数器变为零时,则不限制与所述级别2区域关联的队列可以被发送到何处进行处理。

对于技术人员将显而易见的是,这仅是示例,并且在其他状况下,一些较高级队列可以能够由多个较低级队列存储体处理。例如,一个级别1队列存储体可以能够由任何级别0队列存储体处理。

非连续区域/子区域

如上文所描述,每个级别处的队列可以具有固定的大小,所述大小限制了可以同时存储在队列中的基元标识符的数量。然而,一个分类级队列的大小可以与另一分类级队列的大小不同。例如,在一些状况下,较高级分类单元的队列可以大于较低级分类单元的队列(例如,顶级分类单元320的队列可以大于较低级分类单元322的队列)。然而,这仅是示例,并且在其他状况下,较低级分类单元的队列可以大于较高级分类单元的队列。

在一些状况下,如果(例如,由分类单元320、322)确定基元至少部分落在区域或子区域内,但与所述区域或子区域相关联的队列已满(例如,与所述区域或子区域相关联的队列具有最大数量的基元标识符),则分类单元320、322可以停止,直到相关队列不再为满为止。优选地,确定每个级别的队列的大小,使得针对用于渲染的基元的平均集合,队列将在变满之前由较低级分类单元或输出单元处理。然而,在一些状况下,渲染器的基元可能会在空间上特别局部化,使得在短时间内落在区域或子区域内的基元的数量异常多。在这些状况下,为了减少由于队列已满而导致的数量停止,可以将在一个或多个分类级处使用的区域或子区域配置为非连续。

例如,如果分类单元被配置为将256×256的区域中的基元分类到其四个128×128的子区域中,而不是使用四个连续的128×128的子区域1102、1104、1106、1108,如图11所示,则分类单元可以被配置为使用四个非连续的128×128的子区域。例如,每个连续的128×128的区域可以被划分成四个连续的64×64的子区域,并且每个非连续的128×128的区域可以由在每个连续的128×128的区域中的一个64×64的区域形成。例如,如图11所示,可以由每个连续的128×128的区域的左上64×64的区域11100、11101、11102、11103形成第一非连续的128×128的区域;可以由每个连续的128×128的区域的右上64×64的区域11120、11121、11122、11123形成第二非连续的128×128的区域;可以由每个连续128×128的区域的左下64×64的区域11140、11141、11142、11143形成第三非连续128×128的区域;可以由每个连续的128×128的区域的右下64×64的区域11160、11161、11162、11163形成第四非连续的128×128的区域。

因为组成每个非连续的128×128的区域的64×64的区域在空间上不相邻,所以,如果基元的集合落在任何连续的128×128的区域内,则其将在非连续的128×128的区域中散开,因此,其将在与非连续的128×128的区域相关的队列中散开,从而降低了任何一个队列变满的可能性。然而,使用非连续区域意味着可能仅落在单个连续的128x128的区域中的一些基元可能会落在若干个非连续的128×128的区域内,这意味着必须将这些基元的标识符添加到多个队列而不是仅一个队列中。确定基元是否至少部分地落在非连续区域内可能比确定基元是否落在连续区域内稍微复杂些,然而,将渲染空间划分成非连续区域可以允许更有效地使用队列,这可能会改善整体性能。

在本文所述的任何平铺引擎和方法中,可能没有、只有一个或具有多于一个的实现非连续的区域或子区域的分类级别。

存储单元和经过变换的局部几何结构缓冲区

如上文所描述,在一些状况下,存储单元318可以被配置为以基元为基础将基元(例如,与其相关的经过变换的几何结构数据)存储在经过变换的局部几何结构缓冲区311中。举例来说,在这些状况下,当存储单元318接收到基元时,存储单元318可以确定经过变换的局部几何结构缓冲区311中是否有足够的可用空间来存储基元(例如,与其相关的经过变换的几何结构数据)。如果存储单元318确定经过变换的局部几何结构缓冲区311中有足够的可用空间来存储经过变换的基元(例如,与其相关的经过变换的几何结构数据),则存储单元318可以将经过变换的基元存储在经过变换的局部几何结构缓冲区311中,并将基元(例如,与其相关的经过变换的几何结构数据)与指示基元(例如,与其相关的经过变换的几何结构数据)在经过变换的局部几何结构缓冲区311中的位置的信息一起发送到顶级分类单元320。

通常,在没有平铺引擎310的队列引用基元(即,包括其标识符)并且光栅化逻辑不再需要访问所述基元的经过变换的几何结构数据之前,不能将基元(例如,与其相关的经过变换的几何结构数据)从经过变换的几何结构缓冲区中移除。在一些状况下,光栅化逻辑可包括多个阶段,并且当任何阶段指示不再需要基元的经过变换的几何结构数据用于特定的平铺块时,可以认为光栅化逻辑不再需要所述特定的平铺块的基元的经过变换的几何结构数据。例如,如图3所示,光栅化逻辑306可包括实施隐藏表面移除阶段的hsr逻辑314和实施纹理化/着色阶段的纹理化/着色逻辑316。在这些状况下,当hsr逻辑314或纹理化/着色逻辑指示其不再需要与平铺块的基元相关的经过变换的几何结构数据时,可以将光栅化逻辑视为不再需要特定平铺块的基元的经过变换的几何结构数据。

如上文所描述,hsr逻辑314被配置为消除由光栅化器312生成的隐藏在平铺块中的基元片段。如果hsr逻辑314不输出与基元相关的任何片段(即,与所述基元相关的所有片段都隐藏在平铺块中),则hsr逻辑314可以指示针对特定平铺块不再需要所述基元的经过变换的几何结构数据。在一些状况下,hsr逻辑314可以被配置为接收与平铺块相关的基元片段作为数据流,并且可以在流中插入标记以分离基元(并且当存储在基元块中时分离基元块),并且hsr逻辑314可以被配置为当其输出两个基元标记而在其间没有任何基元片段时确定不再需要与基元相关的经过变换的几何结构数据以用于平铺块。

在一些状况下,hsr逻辑314可包括两个子阶段:第一子阶段,其中对与平铺块相关的基元片段执行深度测试;第二子阶段,其中通过深度测试的基元片段被存储在标签缓冲区中。举例来说,hsr逻辑314可包括深度测试逻辑和标签缓冲区。深度测试逻辑接收基元片段,并将基元片段的深度值(例如,z值或z坐标)与平铺块的深度缓冲区中的对应深度值进行比较。具体而言,深度缓冲区为平铺块的每个样本存储“最佳”深度值(例如,最接近观察者的深度值)。如果接收到的基元片段的深度值(例如,指示其较远离观察者的深度值)比深度缓冲区中的对应深度值“差”,则所述基元片段将被另一个基元隐藏,因此所述基元片段“未通过”深度测试并且不会被输出到标签缓冲区。然而,如果接收到的基元片段的深度值(例如,指示其较接近观察者的深度值)比深度缓冲区中的对应深度值“好”,则基元片段“通过”深度测试。然后将基元片段输出到标签缓冲区,并更新深度缓冲区中的对应深度值以指示具有新的“最佳”深度值。

标签缓冲区接收已通过深度测试阶段的基元片段,并且针对每个接收到的基元片段更新标记缓冲区以将接收到的基元片段标识为在其样本位置处可见的基元片段。例如,如果标签缓冲区在样本位置a处接收到基元片段x,则标签缓冲区存储指示基元片段x在样本位置a处可见的信息。如果标签缓冲区随后在样本位置a处接收到基元片段y,则标签缓冲区更新样本位置a的信息以指示实际上可见的是基元片段y。因此,在所有基元都不透明的简单状况下,在深度测试逻辑已处理与平铺块相关联的基元片段(例如,与部分显示列表相关联的基元片段)的集合之后,标签缓冲区包括在每个样本位置处可见的基元片段的标识(迄今为止)。此时,标签缓冲区可以被清除到纹理化/着色逻辑316,其中对可见的基元片段执行纹理化和着色。通过在隐藏表面移除之后执行纹理化和着色处理,不会浪费时间和资源,从而在最终图像中看不到纹理化和着色处理的基元/基元片段。

因此,基元(基元片段)有可能在深度测试子阶段或标签缓冲区子阶段不合格。具体而言,其可能未通过深度测试,因此不能被深度测试逻辑输出,或者其可能通过深度测试,因为在执行深度测试时,其具有“最佳”深度,但之后,同一样本位置处的基元片段可能会具有更好的深度,因此其会在标签缓冲区中被覆盖,因此永远不会从标签缓冲区中被输出。在这些状况下,如果深度测试逻辑或标签缓冲区指示不再需要与基元有关的经过变换的几何结构数据用于平铺块,则可以确定光栅化逻辑不再需要与所述平铺块的所述基元有关的经过变换的几何结构数据。

在这些状况下,深度测试逻辑可以被配置为在其检测到基元未通过深度测试阶段时生成不再需要基元的经过转换的几何结构数据用于平铺块的指示。如果与基元相关的基元片段都没有被处理通过深度测试,则称所述基元未通过深度测试。换句话说,如果深度测试指示在平铺块中与基元相关的基元片段都不可见,则所述基元将不能通过深度测试。

类似地,标签缓冲区可以被配置为当其检测到基元未通过标签缓冲区阶段时生成不再需要基元的经过变换的几何结构数据用于平铺块的指示。如果标签缓冲区接收到基元的至少一个基元片段,但所述基元的基元片段都没有从标签缓冲区中被输出到下一模块(例如,纹理化/着色逻辑316),则认为所述基元未通过标签缓冲区阶段。为了能够确定基元何时未通过标签缓冲区阶段,标签缓冲区可以具有用于跟踪接收到哪些基元片段的机制,因为标签缓冲区本身的条目可以被覆盖。因此,在一些状况下,标签缓冲区可以具有查找表或类似结构,其具有每个基元的条目,所述条目指示其是否已经从深度测试逻辑接收到所述基元的基元片段。然后,在清除标签缓冲区时(例如,将其内容发送到下一阶段——例如纹理化/着色逻辑316),将标签缓冲区的内容与查找表进行比较,如果有任何基元(基元片段被接收到但没有与其相关的基元片段)被输出,则标签缓冲区可以生成不再需要与所述基元相关的经过变换的几何结构数据用于平铺块的指示。

如上文所描述,纹理化/着色逻辑316被配置为对从hsr逻辑314接收的基元片段执行纹理化和/或着色以确定被渲染图像的像素值。用于平铺块的被渲染的像素值接着存储在存储器(例如帧缓冲区)中。因此,当纹理化/着色逻辑316已经完成对与基元相关的基元片段相关联的属性的处理时(可以在执行着色之前),可以确定光栅化逻辑不再需要与所述基元相关的经过变换的几何结构数据。

在以基元为基础将基元(例如,与其相关的经过变换的几何结构数据)存储在经过变换的局部几何结构缓冲区311中的状况下,为了确定何时可以从经过变换的局部几何结构缓冲区311中移除经过变换的基元(例如,与其相关的经过变换的几何结构数据),存储单元318可以被配置为针对每个基元维护参考计数器。当分类逻辑404、410将基元的标识符添加到队列4020-402n、4060-406k中时,或者当输出单元324将包含所述基元的标识符的部分显示列表发送到光栅化逻辑时,所述基元的参考计数器可以增加。当仲裁器408或输出单元324从队列4020-402n、4060-406k中移除基元的标识符时,或者当光栅化逻辑已相对于特定平铺块完成对所述基元的经过变换的几何结构数据的处理时,所述基元的参考计数器可以减小(例如,当深度测试逻辑、标签缓冲区或纹理化/着色逻辑指示/确定不再需要所述基元的经过转换的几何结构数据用于所述平铺块时)。当基元的参考计数器达到零时,可以从经过变换的局部几何结构缓冲区311中移除与所述基元相关的经过变换的几何结构数据。

在其他状况下,存储单元318可以被配置为将经过变换的基元分组成基元块,并将经过变换的基元(例如,与其相关的经过变换的几何结构数据)存储在基元块中的经过变换的局部几何结构缓冲区311中。基元块是多个基元(例如,与其相关的经过变换的几何结构数据)一起存储在其中的结构。将基元存储在基元块中可以允许将基元的集合的经过变换的几何结构数据更有效地存储在经过变换的局部几何结构缓冲区311中。具体而言,用于基元的经过变换的几何结构数据通常包括用于多个顶点的经过变换的顶点信息,其中这些顶点在多个基元之间共享(或为多个基元所共有)。因此,在同一基元块中的多个基元共享顶点的状况下,与所述顶点有关的数据只需在所述基元块中存储一次。此外,将基元(例如,经过变换的几何结构数据)存储在基元块中允许每个基元块的参考计数器而不是每个基元的参考计数器,这可以显著减少需要存储和维护的参考计数器的数量。基元块的参考计数器可以以与基元的参考计数器相同的方式增加和减小——即,在将基元块标识符添加到队列中时或在将引用所述基元块的部分显示列表发送到光栅化逻辑时,所述基元块的计数器可以增加;并且在从队列中移除基元块标识符时,或者当光栅化逻辑已相对于特定平铺块完成对所述基元块的经过转换的几何结构数据的处理时(例如,当深度测试逻辑、标签缓冲区或纹理化/着色逻辑指示/确定不再需要基元块中的经过变换的几何结构数据用于平铺块时),所述基元块的计数器可以增加。

当将基元存储在基元块中的经过变换的局部几何结构缓冲区中时,每个基元标识符1202可包括标识存储有基元的基元块的信息1204(例如,基元块的地址)和标识所述基元块内的基元的位置的信息1206(例如,到基元块的索引),如图12所示。相对于以基元为基础将基元存储在经过变换的局部几何结构缓冲区中的状况,这可以使基元标识符更小,这又可以使队列更小,或者允许将更多的标识符存储在队列中。

可以以任何合适的方式将基元分组成基元块。在一些状况下,存储单元318可以被配置为根据在存储单元318处接收到基元的顺序将所述基元分组成基元块。在这些状况下,每个基元块可以具有:最大大小(例如,就位或字节而言)、可以属于基元块的最大基元数和/或可以属于基元块的最大顶点数,并且存储单元318可以被配置为将基元添加到当前基元块中,直到达到一个或多个最大值。一旦达到最大值,则存储单元318可以被配置为确定经过变换的局部几何结构缓冲区311中是否有足够的可用存储器来存储当前基元块。如果存储单元318确定经过变换的局部几何结构缓冲区311中没有足够的可用空间来存储当前基元块,则存储单元318可以停止,直到具有足够的可用空间。然而,如果存储单元318确定经过变换的局部几何结构缓冲区311中具有足够的可用空间,则可以将当前基元块存储在经过变换的局部几何结构缓冲区311中,并且可以将形成所述块的基元与经过变换的几何结构缓冲区中的基元块的位置指示和所述基元块内的每个基元的位置指示一起发送到顶级分类单元320。

在其他状况下,基元可以在空间上被分组成基元块。例如,可以将渲染空间划分成多个宏区域,这些宏区域可以涵盖多个渲染平铺块(例如,被划分成1024个32×32的平铺块的1024×1024的渲染空间可以具有十六个256×256的宏区域),并且存储单元318可以被配置为维护每个宏区域的基元块。然后,当存储单元318接收到基元时,其确定所述基元至少部分地落在哪个宏区域内。如果存储单元318确定所述基元至少部分地落在仅一个宏区域内,则存储单元318可将基元(即,与所述基元相关的经过变换的几何结构数据)放置在所述宏区域的基元块中。如果存储单元318确定所述基元落在多于一个的宏区域内,则存储单元318可以被配置为(i)选择所述基元落入的宏区域中的一个(例如,第一个),并将所述基元(即,与其相关的经过变换的几何结构数据)放置在所选的宏区域的基元块中;或(ii)将所述基元(即,与其相关的经过变换的几何结构数据)放置在所述基元至少部分地落入的每个宏区域的基元块中。实施(ii)可能意味着将一些基元的经过变换的几何结构数据多次存储在经过变换的局部几何结构缓冲区中。然而,因为可以允许更快地从经过变换的局部几何结构缓冲区311中移除基元块——这是因为基元块不必等待块中的基元在多个宏区域中被处理——所以可以允许更有效地使用经过变换的局部几何结构缓冲区311。

当基元在空间上被分组成基元块时,基元块可以具有:例如,最大总大小(例如,就数据的位或字节而言)、基元的最大数量和/或顶点的最大数量。然后,当存储单元318将基元添加到基元块中时,存储单元318可以确定所述基元块是否已经达到最大值(例如,最大大小、基元的最大数量或顶点的最大数量)。如果基元块已经达到最大值,则存储单元318可以确定经过变换的局部几何结构缓冲区311中是否具有足够的可用空间用于所述基元块。如果没有足够的空间,则存储单元318可以停止,直到具有足够的可用空间。然而,如果经过变换的局部几何结构缓冲区311中具有足够的可用空间用于所述基元块,则存储单元318可以被配置为:(i)将基元块写入经过变换的局部几何结构缓冲区;(ii)将基元(例如,与其相关的经变换的几何结构数据)与对所述基元存储在经过变换的局部几何结构缓冲区中的位置和所述基元所属的基元块的指示一起提供给顶级分类单元320;以及(iii)为对应的宏区域打开新的基元块。

在一些状况下,如图13所示,经过变换的局部几何结构缓冲区311的存储器可以被划分或分区成多个固定大小的区块13020、13021、13022(例如,区域或页面),并且存储器可以仅以每个区块为基础变为“可用”或可使用(例如,每个区域或每个页面)。每个区块(例如,页面)13020、13021、13022可以能够存储多个基元块(取决于它们的大小),但是直到存储在区块中的所有基元块都变为“可用”或可使用时,它才变得“可用”或可使用。基元块(取决于它们的大小)也可以能够跨越多个区块(例如,页面)。在以这种方式对经过变换的局部几何结构缓冲区311进行分区的状况下,存储单元318可以被配置为维护每个区块(例如,页面)的参考计数器。每个区块的参考计数器可以以分层级的方式增加和减小。例如,存储单元318可以被配置为针对每个区块维护:所述块的参考计数器;所述区块中每个基元块的参考计数器;以及所述区块中的基元块中的每个基元块的参考计数器。具体而言,当将基元的基元标识符添加到队列中时,或者当将包括所述基元标识符的部分显示列表发送到光栅化逻辑时,区块(例如,页面)中的基元块的基元的参考计数器可以增加。如果基元参考计数器从零增加到非零数(例如,1),则所述基元所在的基元块的参考计数器会增加。类似地,如果基元块参考计数器从零增加到非零数字(例如,1),则相关区块的参考计数器会增加。然后,当从队列中移除基元的基元标识符时,或者当光栅化逻辑已针对平铺块完成对与所述基元相关的经过变换的几何结构数据的处理时(例如,当深度测试逻辑、标签缓冲区或纹理化/着色逻辑指示/确定不再需要所述基元的经过变换的几何结构数据用于平铺块时),所述基元的参考计数器可以减小。如果基元参考计数器减小为零,则对应的基元块参考计数器会减小。如果基元块参考计数器减小为零,则对应的区块参考计数器会减小。当区块参考计数器达到零时,存储器的区块可以被标记为“可用”。

在一些状况下,在将基元在空间上分组成基元块使得任何基元块可以仅包含落在一个宏区域内的基元的状况下,存储单元318可以被配置为仅将与同一宏区域相关的基元存储在经过变换的局部几何结构缓冲区311的存储器的同一区块(例如,页面)中。换句话说,在这些状况下,存储器的任何区块(例如,页面)只能存储与单个宏区域有关的基元块。例如,如果包括宏区域a中的基元的基元块被存储在区块013020中,则存储单元318可以被配置为仅将包括宏区域a中的基元的其他基元块存储在区块0(例如,页面0)13020中。例如,如果存储单元318已经编译了包括宏区域b中的基元的新基元块,则即使区块0(例如,页面0)中具有足够的空间来存储新基元块,也可以将存储单元318配置为将新基元块存储在另一个区块(例如,页面)中。因为基元通常在光栅化阶段中基本上按照空间顺序进行处理,所以将与同一宏区域相关的基元块存储在一起可以允许区块(例如,页面)更快地变得“可用”或可使用。

在一些状况下,当将经过变换的局部几何结构缓冲区311的物理存储器细分成区块(例如,页面)时,虚拟存储器可用于更有效地管理经过变换的局部几何结构缓冲区311的物理存储器并减少其片段。具体而言,可能优选的是,每个基元块可由地址的连续集合访问。这允许使用基元块起始地址和偏移的组合来访问基元块的任何部分。在这些状况下,如果没有足够大的物理存储器的连续块来存储基元块,则当将经过变换的局部几何结构缓冲区311划分成区块(例如,页面)时,存储单元318可能必须停止将基元块写入经过变换的局部几何结构缓冲区311,直到存储器的足够大以存储基元块的连续块可用,即使具有足够多的非连续存储器来存储基元块。例如,如果经过变换的局部几何结构缓冲区311的存储器被划分成从0到5编号的六个区块(例如,页面)且偶数编号的区块(例如,页面)已满但奇数编号的区块可用,并且存储单元要写入需要三个区块(例如,页面)的基元块,则即使存储器具有三个可用区块(区块1、3和5),存储单元也将停止将所述基元块写入存储器,因为如果其将基元块写入区块1、3和5,地址的连续集合也将不能访问所述基元块。通过使用虚拟存储器可以解决此问题。

如所属领域的技术人员所知的,虚拟存储器使用虚拟地址空间,所述虚拟地址空间限定了被转换成物理存储器地址(例如,物理存储器内的地址)的虚拟地址。单元(例如,存储单元)可以引用虚拟存储器地址,并且存储器管理单元(mmu)将所述虚拟存储器地址转换成物理存储器地址。在申请人共有的审查中的申请号为1810779.7的英国专利申请中描述了一种经由虚拟存储器管理对物理存储器的访问的示例方法,所述方法可用于管理对经过变换的局部几何结构缓冲区311的存储器的访问,该专利申请的全部内容通过引用结合在本文中。

在申请号为1810779.7的英国专利申请中描述的方法中,将虚拟存储器划分成区块(例如,页面),其比物理存储器的区块(例如,页面)大p倍,使得每个虚拟区块(例如,页面)被映射到p个物理区块(例如,页面)。因此,虚拟地址包括:标识虚拟区块(例如,页面)的信息;标识所述虚拟区块内的物理大小的区块(例如,页面)的信息;以及所述物理大小的区块(例如,页面)内的偏移。虚拟区块(例如,页面)的每个物理大小的区块(例如,页面)经由虚拟存储器表被映射到物理区块(例如,页面)。因此,虚拟存储器表的每个条目存储虚拟区块(例如,页面)的物理大小的区块和物理区块(例如,页面)之间的映射。因此,虚拟存储器表中对于每个虚拟区块(例如,页面)存在p个条目。在一些状况下,虚拟存储器可以被布置为由p个条目的集合组成的阵列,其中p个条目的每个集合与虚拟区块(例如,页面)相关联。然后,使用虚拟存储器表将虚拟地址转换成物理存储器地址。在上文引用的专利申请中描述了如何实现这种方法的细节。

这种方法可以用于允许向基元块分配连续的存储器地址集合(即,虚拟存储器地址),而不需要连续的物理存储器区块。特别地,这可以例如通过使虚拟存储器区块(例如,页面)比经过变换的局部几何结构缓冲区的物理存储器的区块(例如,页面)大m+1倍来实现(其中每个基元块具有最大大小为m的物理大小的区块(例如,页面)),并确保基元块只能在虚拟区块(例如,页面)的第一个物理大小的区块中开始。假设对于该虚拟存储器实现方式,可以强制执行基元块的最大大小,以使基元块不会超过指定的最大大小。因此,每个虚拟区块(例如,页面)被映射到m+1个物理区块(例如,页面)。所述m+1个物理区块(例如,页面)可以是连续的或非连续的。由于基元块具有最大大小为m的物理区块,因此基元块将需要最多一个虚拟区块(例如,页面)和最大为m的连续或非连续的物理区块(例如,页面)。在一些状况下,m可以是四个,这将基元块的大小限制为四个物理区块(例如,页面),而将虚拟区块(例如,页面)的大小限制为五个物理区块(例如,页面)。确保基元块只能在虚拟区块(例如,页面)的第一个物理大小的区块(例如,页面)中开始,以确保将任何物理大小的区块都写入单个虚拟区块(例如,页面)。这确保了任何基元块都将由一组连续的虚拟地址表示。

例如,图14示出将虚拟存储器1402分配到基元块的集合的示例。在此示例中,物理存储器1404被划分成编号为0至6的七个相等大小的区块(在本文中被称作物理大小的区块);每个基元块的最大大小为4个物理区块(例如,页面)(即m=4);并且虚拟存储器1402被划分成编号为0至3的四个虚拟区块(例如,页面),每个虚拟区块被划分成五个物理大小的区块(即,m+1=5)。虚拟存储器的每个物理大小的区块可以被映射到存储器的物理区块;虚拟存储器的连续物理大小的区块无需被映射到物理存储器的连续区块;并且虚拟存储器的多于一个的物理大小的区块可以被映射到同一存储器物理区块。例如,在图14中,分别地,虚拟区块0的第一物理大小的区块(例如,页面)被映射到物理区块0,虚拟区块0的第二物理大小的区块(例如,页面)被映射到物理区块2,并且虚拟区块2的物理大小的区块(例如,页面)被映射到物理区块2至6。

如果接收到具有小于物理大小的区块的大小的第一基元块1406,则可以从物理大小的区块0的开始处为第一基元块1406分配虚拟区块0的连续块。由于虚拟区块0的物理大小的区块0未满,因此如果随后接收到第二基元块1408,则也可以从物理大小的区块0的下一可用地址开始为第二基元块1408分配虚拟区块0的连续块。由于虚拟区块0的物理大小的区块0仍未满,因此如果随后接收到第三基元块1410,则可以从物理大小的区块0的下一可用地址开始为第三基元块1410分配虚拟区块0的连续块。即使这导致第三基元块1410的一部分被写入物理区块0,而第三基元块1410的另一部分被写入物理区块2,仍为第三基元块1410分配虚拟存储器地址的连续块。

由于虚拟区块0的物理大小的区块0现在已满,因此不能再为虚拟区块0分配其他基元块,因为不能保证其他基元块将适合虚拟区块0(即,不能保证为其他基元块分配虚拟地址的连续集合)。因此,如果随后接收到第四基元块1412,则可以从物理大小的区块0的下一可用地址开始为其分配虚拟区块2的连续块。由于虚拟区块0的物理大小的区块1和虚拟区块2的物理大小的区块0被映射到同一物理区块,因此虚拟区块2的物理大小的区块0的下一可用地址不是物理大小的区块0的开始地址,而是由第三基元块占用的物理存储器部分之后的第一地址。由于虚拟区块2的物理大小的区块0未满,因此如果随后接收到第五基元块1414,则还可以从虚拟区块2的物理大小的区块0的下一可用地址开始为其分配虚拟区块2的连续块。即使第五基元块1414具有最大大小(即,大小为m*物理大小的区块),也将确保其适合虚拟区块2。

在这些状况下,存储在队列中的基元标识符可包括所述基元形成其一部分的基元块的虚拟地址,以及标识所述基元在所述基元块内的位置的信息(例如,到所述基元块的索引)。然后,当光栅化逻辑、输出单元或较低级分类单元要获得与基元相关的经过变换的几何结构数据时,mmu会将与所述基元相关联的虚拟地址转换成物理地址,并使用所述物理地址来定位经过变换的局部几何结构缓冲区中的基元块。然后使用基元块偏移或索引在基元块中定位与所述基元相关的数据。

虚拟地址1500的示例格式在图15中示出。在此示例中,虚拟地址1500被划分成三个部分1502、1504和1506。第一部分1502用于标识虚拟区块(例如,虚拟页面)的地址。第一部分中的位数指示虚拟区块(例如,虚拟页面)的数量。在一些示例中,第一部分中可以具有六个位,其允许六十四个虚拟区块(例如,虚拟页面)。第二部分1504标识数据/基元块所处的虚拟区块内的物理大小的区块(例如,页面)。如上文所描述,每个虚拟区块(例如,虚拟页面)由m+1个物理大小的区块组成。需要最少个位来唯一地标识m+1个不同的物理大小的区块。因此,当m为4时,第二部分1504可包括三个位。第三部分1506用于指定数据/基元块所处的被标识的物理大小的区块内的偏移。第一部分1502和第二部分1504的组合表示物理大小的区块(例如,页面),因此,第一和第二部分1502和1504的组合被映射到物理区块(例如,页面)。第二部分1504和第三部分1506的组合表示虚拟区块(例如,页面)内的偏移。

图16示出可以实现本文所述的平铺引擎和/或图形处理系统的计算机系统。计算机系统包括cpu1602、gpu1604、存储器1606和其他装置1614,例如显示器1616、扬声器1618及相机1620。在gpu1604上实现处理块1610(其可以对应于本文所述的平铺引擎和/或图形处理系统)。在其他示例中,处理块1610可以在cpu1602上实现。计算机系统的组件可通过通信总线1622彼此通信。

图1-4和图10的平铺引擎和图形处理系统被示出为包括多个功能块。这仅是示意性的,并不旨在限定此类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应当理解,本文所述的由平铺引擎或图形处理系统形成的中间值不需要在任何时候由平铺引擎或图形处理系统物理地生成,并且可以仅表示方便对由平铺引擎或图形处理系统在其输入和输出之间执行的处理进行描述的逻辑值。

本文所述的平铺引擎和图形处理系统可以以集成电路上的硬件来体现。本文所述的平铺引擎和图形处理系统可以被配置为执行本文所述的任何方法。一般来说,上文所述的功能、方法、技术或部件中的任一个可以在软件、固件、硬件(例如,固定逻辑电路系统)或其任何组合中实施。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或其任何组合。在软件实施方案的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,所述程序代码在处理器上执行时执行指定任务。本文中所描述的算法和方法可以由执行代码的一个或多个处理器执行,所述代码使处理器执行算法/方法。计算机可读存储介质的示例包含随机存取存储器(ram)、只读存储器(rom)、光盘、闪存、硬盘存储器以及可以使用磁性、光学和其他技术来存储指令或其他数据并可以由机器存取的其他存储器设备。

如本文中所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包含以机器语言、解释语言或脚本语言表达的代码。可执行代码包含二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用例如c、java或opencl等编程语言代码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解释、编译、运行时,这些软件、固件、脚本、模块或库使支持可执行代码的计算机系统的处理器执行由所述代码指定的任务。

处理器、计算机或计算机系统可以是任何种类的设备、机器或专用电路,或其集合或一部分,它具有处理能力使得可以执行指令。处理器可以是任何种类的通用或专用处理器,例如cpu、gpu、片上系统、状态机、媒体处理器、专用集成电路(asic)、可编程逻辑阵列、现场可编程门阵列(fpga)等。计算机或计算机系统可以包括一个或多个处理器。

本发明还意图涵盖限定如本文中所描述的硬件的配置的软件,例如硬件描述语言(hdl)软件,用于设计集成电路或用于配置可编程芯片以执行所要功能。也就是说,可以提供一种其上编码有集成电路限定数据集形式的计算机可读程序代码的计算机可读存储介质,当在集成电路制造系统中处理(即,运行)时,该计算机可读程序代码将该系统配置成制造被配置成执行本文所述任何方法的平铺引擎或图形处理系统,或者制造包括本文所述任何装置的平铺引擎或图形处理系统。集成电路定义数据集可以是例如集成电路描述。

因此,可以提供一种在集成电路制造系统处制造如本文所述的平铺引擎或图形处理系统的方法。此外,可以提供一种集成电路限定数据集,当其在集成电路制造系统中被处理时致使平铺引擎或图形处理系统的制造方法被执行。

集成电路定义数据集可以是计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别制造的硬件描述语言,包括作为寄存器传输级(rtl)代码,作为高级电路表示法(诸如verilog或vhdl),以及作为低级电路表示法(诸如oasis(rtm)和gdsii)。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如rtl)可以在计算机系统上处理,该计算机系统被配置用于在软件环境的上下文中生成集成电路的制造定义,该软件环境包括电路元件的定义和用于组合这些元件以生成由该表示法定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置成生成集成电路的制造定义,以执行定义集成电路以便生成所述集成电路的制造定义的代码。

现在将参考图17描述在集成电路制造系统处处理集成电路限定数据集以便将系统配置为制造平铺引擎或图形处理系统的示例。

图17示出了集成电路(ic)制造系统1702的示例,其被配置为制造如本文的任何示例中所述的平铺引擎或图形处理系统。具体地说,ic制造系统1702包括布局处理系统1704和集成电路生成系统1706。ic制造系统1702被配置为接收ic限定数据集(例如,限定如本文任何示例中所述的平铺引擎或图形处理系统)、处理ic限定数据集以及根据ic限定数据集来生成ic(例如,其体现如本文任何示例中所述的平铺引擎或图形处理系统)。ic限定数据集的处理将ic制造系统1702配置为制造体现如本文任何示例中所述的平铺引擎或图形处理系统的集成电路。

布局处理系统1704被配置成接收和处理ic定义数据集以确定电路布局。根据ic定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成rtl代码以确定要生成的电路的门级表示,例如就逻辑部件(例如nand、nor、and、or、mux和flip-flop部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统1704已经确定电路布局时,其可将电路布局定义输出到ic生成系统1706。电路布局定义可以是例如电路布局描述。

如所属领域中已知,ic生成系统1706根据电路布局定义来生成ic。举例来说,ic生成系统1706可实施生成ic的半导体装置制造工艺,其可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,其可以在光刻工艺中用于根据电路定义来生成ic。替代地,提供给ic生成系统1706的电路布局定义可呈计算机可读代码的形式,ic生成系统1706可使用所述计算机可读代码来形成用于生成ic的合适掩码。

由ic制造系统1702执行的不同过程可全部在一个位置例如由一方来实施。替代地,ic制造系统1702可以是分布式系统,使得一些过程可在不同位置执行,并且可由不同方来执行。例如,以下阶段中的一些可以在不同位置和/或由不同方来执行:(i)合成表示ic定义数据集的rtl代码,以形成要生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。

在其他示例中,在集成电路制造系统中对集成电路限定数据集的处理可以将该系统配置成在不处理ic限定数据集以确定电路布局的状况下制造平铺引擎或图形处理系统。举例来说,集成电路定义数据集可以定义例如fpga的可重新配置的处理器的配置,并且对所述数据集进行的处理可以将ic制造系统配置成(例如,通过将配置数据加载到fpga)生成具有所述定义的配置的可重新配置的处理器。

在一些实施方案中,当在集成电路制造系统中处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文中描述的设备。举例来说,通过集成电路制造定义数据集,以上文关于图17描述的方式对集成电路制造系统的配置,可制造出如本文中所描述的装置。

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

与已知的实施方式相比,在本申请中阐述的概念在设备、装置、模块和/或系统中(以及在本文中实施的方法中)的实施方式可以引起性能改进。性能改进可以包含计算性能提高、等待时间缩短、处理量增大和/或功耗降低中的一个或多个。在制造此类设备、装置、模块和系统(例如在集成电路中)期间,可以在性能改进与物理实施方案之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实施方式的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在设备、装置、模块和/或系统的元件之间共享功能块来完成。相反,在本申请中阐述的引起设备、装置、模块和系统的物理实施方式的改进(例如硅面积减小)的概念可以针对性能提高进行权衡。例如,这可以通过在预定义面积预算内制造模块的多个实例来完成。

申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。

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