CN113256761A - 用于在图形处理系统中分层存储平铺信息的数据结构、方法和平铺引擎 - Google Patents
用于在图形处理系统中分层存储平铺信息的数据结构、方法和平铺引擎 Download PDFInfo
- Publication number
- CN113256761A CN113256761A CN202110163452.1A CN202110163452A CN113256761A CN 113256761 A CN113256761 A CN 113256761A CN 202110163452 A CN202110163452 A CN 202110163452A CN 113256761 A CN113256761 A CN 113256761A
- Authority
- CN
- China
- Prior art keywords
- tile
- primitive
- block
- control flow
- tiles
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/40—Filling a planar surface by adding surface attributes, e.g. colour or texture
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/001—Texturing; Colouring; Generation of texture or colour
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/20—Drawing from basic elements, e.g. lines or circles
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/04—Texture mapping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/10—Constructive solid geometry [CSG] using solid primitives, e.g. cylinders, cubes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/20—Finite element generation, e.g. wire-frame surface description, tesselation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T9/00—Image coding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/12—Bounding box
Abstract
本发明公开了用于在基于图块的图形处理系统中对图元进行平铺的方法和平铺引擎,在基于图块的图形处理系统中渲染空间被划分成多个图块。该方法包括:生成图块组的多级分层结构,该多级分层结构中的每一级包括一个或多个图块组,该一个或多个图块组包括多个图块中的一个或多个;接收多个图元块,每个图元块包括一个或多个图元的几何结构数据;将多个图元块中的每一个与图块组中的一个或多个相关联,直到最大数目的图块组,使得如果图元块中的至少一个图元至少部分地落在图块的边界内,则图元块与包括图块的至少一个图块组相关联;以及基于该关联生成用于每个图块组的控制流,其中每个控制流包括用于与对应的图块组相关联的每个图元块的图元块条目。
Description
技术领域
本申请案涉及用于在图形处理系统中分层存储平铺信息的数据结构、方法和平铺引擎,并且具体地涉及基于图块的渲染图形处理系统。
背景技术
图形处理系统被配置为例如从在计算机系统上运行的应用程序(例如游戏应用程序)接收图形数据,并对来自图形数据的图像进行渲染以提供渲染输出。举例来说,应用程序可以生成场景的3D模型并输出表示场景中的对象的几何结构数据。特定来说,应用程序可以使用一个或多个图元(即,简单的几何结构,例如但不限于可以被应用纹理的矩形、三角形、线和点)来表示每个对象,所述多个图元由一个或多个顶点的位置限定。在这些状况下,由应用程序输出的几何结构数据可以包含标识每个顶点的信息(例如顶点在世界空间中的坐标)和指示由顶点形成的图元的信息。然后,图形处理系统将接收到的几何结构数据转换成可以在屏幕上显示的图像。
图形处理系统可以例如实施即时模式渲染(IMR)或基于图块的渲染(TBR)。在IMR中,将整个场景作为整体进行渲染。与此对比,在TBR中,使用被划分成被称为图块的子区段的渲染空间对场景进行渲染,其中可针对每个图块独立地执行渲染过程的至少一部分。图块可以具有任何合适形状,但通常为矩形(其中术语“矩形”包含正方形)。例如,图1示出被划分成一组8×8个图块T0至T63的示例渲染空间100。每个图块对应于渲染空间中的像素块。例如,每个图块可对应于32×32个像素块。在图1的示例中,图块按照Z阶曲线(也称为Morton阶)编号,但是对于本领域技术人员来说,这仅仅是示例。TBR的优点为,可以在渲染期间使用快速、片上存储器以用于颜色、深度和模板缓冲区操作,这与IMR相比允许显著减少系统存储器带宽,而不需要足够大以同时存储用于整个场景的数据的片上存储器。
TBR涉及两个关键阶段:几何结构处理阶段;以及光栅化阶段。在几何结构处理阶段期间,将从应用程序(例如游戏应用程序)接收的几何结构数据(例如限定图元的顶点)从世界空间坐标变换成屏幕空间坐标。然后创建至少部分地落在图块的边界内的经过变换的图元(例如三角形)的每图块列表。在光栅化阶段期间,对每个图块单独地渲染(即,将经过变换的图元映射到像素并且针对图块中的每个像素标识颜色)。这可以包括标识哪个(哪些)图元在每个像素处是可见的。接着可以由每个像素处的可见图元的外观确定所述像素的颜色,所述可见图元可以由应用于所述像素处的纹理和/或在所述像素上运行的像素着色器程序限定。像素着色器程序描述将针对给定像素执行的操作。对每个图块单独地渲染会使图形处理系统能够在光栅化阶段中对特定图块进行渲染时仅检索与所述图块相关的经过变换的图元数据,这会使针对存储器(例如中间缓冲区)的带宽要求保持为低。一旦已经针对图块中的每个像素标识出颜色值,就将图块的颜色值写出到存储器(例如帧缓冲区)。一旦已经渲染整个场景(即,一旦已经针对所有图块的像素确定了颜色值),场景就可以例如显示在屏幕上。
图2示出示例TBR图形处理系统200。系统200包括存储器2021、2022、2023、2024、几何结构处理逻辑204和光栅化逻辑106。存储器2021、2022、2023和2024中的两个或多个可以在同一物理存储器单元中实现。
几何结构处理逻辑204实施TBR的几何结构处理阶段。几何结构处理逻辑204包括变换逻辑208、图元块生成器210和平铺引擎212。变换逻辑208从应用程序(例如游戏应用程序)接收几何结构数据(例如顶点、图元和/或补片)并将几何结构数据变换到渲染空间(例如屏幕空间)中。变换逻辑208还可以执行例如裁剪和剔除的功能以移除落在视锥外的几何结构数据(例如图元或补片),和/或应用所属领域的技术人员所知的照明/属性处理。
图元块生成器210将经过变换的图元(即,与其相关的经过变换的几何结构数据)以图元块的形式存储在存储器2022中。图元块是一个或多个图元(例如,与其相关的经过变换的几何结构数据)一起存储在其中的数据结构。将图元存储在图元块中可允许将图元的经过变换的几何结构数据更有效地存储在存储器2022中。具体而言,用于图元的经过变换的几何结构数据通常包括用于多个顶点的经过变换的顶点信息,并且这些顶点通常在多个图元之间共享(或为多个图元所共有)。因此,在同一图元块中的多个图元共享顶点的状况下,与所述顶点有关的数据只需在所述图元块中存储一次。
可以使用任何适当的方法或技术将经过变换的图元分组成图元块。例如,在一些情况下,可以基于经过变换的图元到达图元块生成器210的次序将经过变换的图元分组成图元块。在这些状况下,每个图元块可以具有:最大大小(例如,就位或字节而言)、可以属于图元块的最大图元数和/或可以属于图元块的最大顶点数,并且图元块生成器210可以被配置为将图元添加到当前图元块中,直到达到一个或多个最大值。
在其他情况下,可基于图元在渲染空间中的位置将所述图元分组成图元块,使得空间上相似的图元在同一图元块中。例如,可以将渲染空间划分成多个宏区域,这些宏区域可以包围多个图块(例如,被划分成1024个32×32的图块的1024×1024的渲染空间可以具有十六个256×256的宏区域),并且图元块生成器210可以被配置为维护每个宏区域的图元块。然后,当图元块生成器210接收到图元时,它确定所述图元至少部分地落在哪个(哪些)宏区域内。如果图元块生成器210确定所述图元至少部分地落在仅一个宏区域内,则图元块生成器210可以将图元(即,与所述图元相关的经过变换的几何结构数据)放置在所述宏区域的图元块中。如果图元块生成器210确定所述图元落在多于一个的宏区域内,则图元块生成器210可以被配置为(i)选择所述图元落在的宏区域中的一个(例如,第一个),并将所述图元(即,与其相关的经过变换的几何结构数据)放置在所选的宏区域的图元块中;或(ii)将所述图元(即,与其相关的经过变换的几何结构数据)放置在所述图元至少部分地落在的每个宏区域的图元块中。
将图元块(或至少其图元)连同标识存储器中的图元块的位置的信息一起提供给平铺引擎212。平铺引擎212根据经过变换的几何结构数据为每个图块(例如图1的图块T0至T63中的每个图块)生成至少部分地落在所述图块内的经过变换的图元的列表。所述列表可以被称为显示列表、经过变换的显示列表、控制列表或控制数据。在一些状况下,经过变换的显示列表可以包括到与至少部分地落在图块内的图元相关的经过变换的几何结构数据(例如顶点数据)的指针或链接。例如,图3示出图块(例如T0)的示例显示列表302,所述显示列表包括针对每个图元块3060,3061的图元块条目3040,3041,所述每个图元块包括至少部分地落在所述图块的边界内的至少一个图元。每个图元块条目3040,3041包括标识所述图元块在存储器中的位置(例如,所述图元块在存储器中的地址)的信息308以及标识所述图元块的哪些图元至少部分地落在图块的边界内的信息310。如图3所示,标识出所述图元块中的哪些图元至少部分地落在图块中的信息310可以是掩码的形式,所述掩码包括所述图元块中的每个图元的位,所述位指示所述图元是否至少部分地落在所述图块的边界内。
回到图2,光栅化逻辑206实施TBR的光栅化阶段。具体而言,光栅化逻辑206通过从存储器2023获取图块的显示列表,然后从存储器2022获取落在图块内的由所述图块的显示列表指示的图元的经过变换的几何结构数据,以逐图块的方式渲染图元;并基于经过变换的几何结构数据来渲染所述图块的图元。
在一些状况下,光栅化逻辑206可包括光栅化器214、隐藏表面移除(HSR)逻辑216和纹理化/着色逻辑218。在这些状况下,光栅化器214从存储器2023获取每个显示列表,并且针对每个显示列表从存储器2022获取针对落在由对应的显示列表指定的图块内的图元的经过变换的几何结构数据,并将每个图元转换成图元片段的集合。术语“片段”在本文中用于意指采样点处的图元的样本,所述样本将被处理以对图像的像素进行渲染。在一些示例中,可以存在像素到片段的一对一映射。不过,在其他示例中,片段可以多于像素,并且此过采样可以允许像素值的较高质量渲染,例如通过促进可以应用于多个片段以用于对每个像素值进行渲染的抗混叠和其他滤波器。
然后将特定图块的图元片段提供到HSR逻辑216,所述HSR逻辑通过对图元片段执行深度测试而移除隐藏(例如,被其他图元片段隐藏)的图元片段。接着将其余片段(在隐藏表面移除之后)传递到纹理化/着色逻辑218,所述纹理化/着色逻辑对图元片段执行纹理化和/或着色以确定被渲染图像的像素值。接着,将图块的被渲染像素值存储在存储器2024(例如,帧缓冲区)中。
光栅化逻辑206处理每个图块,并且当整个图像已经被渲染并存储在存储器2024(例如,帧缓冲区)中时,图像可以从图形处理系统200输出并以任何合适的方式使用,例如,显示在显示器上、存储在存储器中或传输到另一设备等。在片段在由纹理化/着色逻辑218处理之前由HSR逻辑216处理的意义上,图2所展示的TBR图形处理系统200是“推迟的”渲染系统。在其他示例中,图形处理系统可能并非推迟的渲染系统,在此状况下,将会在将HSR应用于片段之前将纹理化/着色应用于那些片段。
尽管几何结构处理逻辑在图中示为与光栅化逻辑分离,但在一些实施方案中,几何结构处理逻辑和光栅化逻辑可共享一些资源。例如,图形处理系统可以使用统一着色方法,其中相同的物理执行单元可以用于执行在几何结构处理阶段中使用的指令(例如,执行顶点处理)并执行在光栅化阶段中使用的指令(例如,执行片段处理)。
下文描述的实施方案仅以示例的方式提供,并且不限制解决用于在图形处理系统中平铺图元的已知方法和系统的任何或所有缺点的实现方式。
发明内容
提供本发明内容是为了介绍在以下详细描述中进一步描述的一些概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
本文描述了用于在基于图块的图形处理系统中对图元进行平铺的方法和平铺引擎,在所述基于图块的图形处理系统中渲染空间被划分成多个图块。所述方法包括:生成图块组的多级分层结构,所述多级分层结构中的每一级包括一个或多个图块组,所述一个或多个图块组包括所述多个图块中的一个或多个;接收标识多个图元块中的每一个的信息,每个图元块包括一个或多个图元的几何结构数据;将所述多个图元块中的每一个与所述图块组中的一个或多个相关联,直到最大数目的图块组,使得如果图元块中的至少一个图元至少部分地落在图块的边界内,则所述图元块与包括所述图块的至少一个图块组相关联;以及基于所述关联生成用于每个图块组的控制流,其中每个控制流包括用于与对应的图块组相关联的每个图元块的图元块条目。
第一方面提供了一种在基于图块的图形处理系统中对图元进行平铺的方法,在所述基于图块的图形处理系统中,渲染空间被划分成多个图块,所述方法包括:生成图块组的多级分层结构,所述多级分层结构中的每一级包括一个或多个图块组,所述一个或多个图块组包括所述多个图块中的一个或多个;接收标识多个图元块中的每一个的信息,每个图元块包括一个或多个图元的几何结构数据;将所述多个图元块中的每一个与所述图块组中的一个或多个相关联,直到最大数目的图块组,使得如果图元块中的至少一个图元至少部分地落在图块的边界内,则所述图元块与包括所述图块的至少一个图块组相关联(606);以及基于所述关联生成用于每个图块组的控制流,其中每个控制流包括用于与对应的图块组相关联的每个图元块的图元块条目。
图块组的最大数目可为一。
将图元块与所述图块组中的一个或多个相关联可包括:标识所述渲染空间中的轴对准边界框,所述轴对准边界框包围所述图元块中的所述一或多个图元;以及将所述图元块与最小图块组相关联,所述最小图块组中的一个或多个图块包围所述边界框。
图块组的最大数目可大于一。
将图元块与所述图块组中的一个或多个相关联可包括:标识所述渲染空间中的轴对准边界框,所述轴对准边界框包围所述图元块中的所述一或多个图元;以及将所述图元块与一个或多个图块组的最小集合相关联,所述一个或多个图块组的最小集合中的一个或多个图块包围所述边界框。
所述一个或多个图块组的集合中的每个图块组可处于所述分层结构的同一级。
所述一个或多个图块组的集合可包括多个图块组,并且所述集合中的所述图块组中的至少两个处于所述分层结构的不同级。
每个图元块条目可以包括标识对应的图元块的信息。
标识对应的图元块的信息可以包括标识图元块在存储器中的位置的信息。
标识存储器中的图元块的位置的信息可以是存储器中的地址或与基址的偏移。
每个图元块可与所述渲染空间中的轴对准边界框相关联,所述轴对准边界框包围所述图元块中的所述一或多个图元,并且如果图元块的所述边界框不包围由所述图块组中的所述图块覆盖的所述渲染空间的区域,则用于所述图元块的所述图元块条目可包括标识所述边界框的一或多个坐标的信息。
每个图元块可与所述渲染空间中的轴对准边界框相关联,所述轴对准边界框包围所述图元集合中的所述一个或多个图元,并且如果图元块不包括落在所述图块组中的每个图块内的至少一个图元,则所述图元块的所述图元块条目可包括覆盖掩码,所述覆盖掩码指示与所述图元块的所述边界框相交的所述图块组中的哪些图块对于所述图元块有效,如果图元块中的至少一个图元至少部分地落在图块的边界内,则所述图块对于所述图元块有效。
每个覆盖掩码可包括相关图块区块的越来越小的区域的信息,所述信息指示所述区域对于所述图元块是否有效,所述相关图块区块包括与所述图元块的所述边界框相交的所述图块组中的所述图块。
所述方法还可以包括通过以下步骤生成用于图元块的覆盖掩码可以包括:(a)将相关图块区块划分成图块的象限,所述相关图块区块包括与所述图元块的所述边界框相交的所述图块组中的所述图块;(b)将指示所述象限中的每一个对于所述图元块是否有效的信息添加到所述覆盖掩码;以及(c)如果象限对于所述图元块是有效的并且所述象限包括多于一个图块,则将所述象限划分成子象限并且针对每个子象限重复(b)和(c)。
生成用于图元块的覆盖掩码还可以包括在将相关图块区块划分成图块的象限之前,将相关图块区块扩展为具有二的幂次方个边的方形区块。
k级的每个图块组可包括hkxhk个图块区块,其中h是大于一的整数并且k是0至N-1的整数,并且N是分层结构中的级的数目;并且h可以为二。
j级的每个图块组可包括n个j-1级图块组,其中n是大于一的整数并且j是1至N-1的整数,并且N是分层结构中的级的数目;并且n以为四。
处于所述分层结构的最低级的每个图块组可仅包括所述多个图块中的单个图块。
第二方面提供了一种用于图形处理系统的平铺引擎,在所述图形处理系统中,渲染空间被划分成多个图块,所述平铺引擎包括:图块组选择器逻辑,所述图块组选择器逻辑被配置以:获得定义图块组的多级分层结构的信息,其中所述多级分层结构中的每一级包括一个或多个图块组,所述一个或多个图块组包括所述多个图块中的一个或多个;接收标识多个图元块中的每一个的信息,每个图元块包括一个或多个图元的几何结构数据;以及将所述多个图元块中的每一个与所述图块组中的一个或多个相关联,直到最大数目的图块组,使得如果图元块中的至少一个图元至少部分地落在图块的边界内,则所述图元块与包括所述图块的至少一个图块组相关联;以及控制流发生器,所述控制流发生器被配置为基于所述关联生成用于所述多级分层结构中的每个图块组的控制流,其中每个控制流包括用于与对应的图块组相关联的每个图元块的图元块条目。
第三方面提供了一种用于图形处理系统的控制流解码器,在所述图形处理系统中,渲染空间被细分成多个图块,每个图块形成至少两个不同大小的不同图块组的一部分,所述控制流解码器包括:控制流获取逻辑,所述控制流获取逻辑被配置为获取用于当前图块形成其一部分的每个图块组控制流,每个控制流包括零个、一个或多于一个图元块条目,每个图元块条目包括(i)标识包括一个或多个图元的几何结构数据的图元块的信息,以及(ii)标识包围所述一个或多个图元的边界框的边界框信息;以及控制流分析器,所述控制流分析器被配置为针对每个所获取的控制流:如果所述控制流包括至少一个图元块条目,则对于每个图元块条目:根据所述边界框信息确定所述当前图块是否落在所述边界框内;以及响应于确定所述当前图块不落在所述边界框内,确定所述图元块与渲染所述当前图块不相关。
每个图元块条目还可包括指示所述图元块是否与所述图块组中的每个图块相关的完全覆盖信息,并且所述控制流分析器被进一步配置为根据所述完全覆盖信息确定所述图元块是否与所述图块组中的每个图块相关,并且仅在确定所述图元块与所述图块组中的每个图块不相关的情况下执行所述边界框确定。
所述控制流分析器可被进一步配置为响应于确定所述图元块与所述图块组中的每个图块相关,将所述图元块标识为与渲染所述当前图块相关。
控制流分析器可被进一步配置为:响应于确定所述当前图块落在所述边界框内,确定所述控制流是否包括覆盖掩码,所述覆盖掩码指示所述图块组中与所述边界框相交的哪些图块与所述对应的图元块相关;以及响应于确定所述控制流包括覆盖掩码,根据所述覆盖掩码确定所述图元块是否与渲染所述当前图块相关。
第四方面提供一种在其中已将渲染空间划分成多个图块的图形处理系统中标识与渲染所述多个图块中的当前图块相关的图元的方法,每个图块形成至少两个不同大小的不同图块组的一部分,所述方法包括:获取当前图块形成其一部分的每个图块组的控制流,每个控制流包括零个、一个或多于一个图元块条目,每个图元块条目包括(i)标识包括一个或多个图元的几何结构数据的图元块的信息,以及(ii)标识包围所述一个或多个图元的边界框信息;以及对于包括至少一个图元块条目的每个所获取的控制流,对于每个图元块条目:根据所述边界框信息确定所述当前图块是否落在所述边界框内;以及响应于确定所述当前图块不落在所述边界框内,确定所述图元块与渲染所述当前图块不相关。
第五方面提供了一种被配置为执行第一方面的方法的平铺引擎。
第六方面提供了一种图形处理系统,所述图形处理系统包括第二方面的平铺引擎和/或第三方面的控制流解码器。
本文所述的平铺引擎、控制流解码器和图形处理系统可以在集成电路上的硬件中实现。可以提供一种在集成电路制造系统处制造体现本文所述的平铺引擎、控制流解码器和/或图形处理系统的集成电路的方法。可以提供一种集成电路定义数据集,当在集成电路制造系统中处理时,所述集成电路定义数据集配置所述系统以制造体现本文所述的平铺引擎、控制流解码器或图形处理系统的集成电路。可以提供一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质上存储有本文所述的平铺引擎、控制流解码器或图形处理系统的计算机可读描述,当在集成电路制造系统中处理时,所述计算机可读描述使集成电路制造系统制造体现平铺引擎、控制流解码器或图形处理系统的集成电路。
可以提供一种集成电路制造系统,该集成电路制造系统包括:非暂态计算机可读存储介质,该非暂态计算机可读存储介质上存储有本文所述的平铺引擎、控制流解码器或图形处理系统的计算机可读描述;布局处理系统,该布局处理系统被配置为处理所述计算机可读描述,以生成体现平铺引擎、控制流解码器或图形处理系统的集成电路的电路布局描述;以及集成电路生成系统,该集成电路生成系统被配置为根据电路布局描述来制造体现平铺引擎、控制流解码器或图形处理系统的集成电路。
可以提供用于执行如本文所述的方法的计算机程序代码。可以提供其上存储有计算机可读指令的非暂态计算机可读存储介质,当在计算机系统处执行时,所述计算机可读指令使计算机系统执行如本文所述的方法。
如对本领域的技术人员显而易见的,上述特征可以适当地组合,并且可以与本文所述的示例的任何方面组合。
附图说明
现在将参考附图详细描述示例,在附图中:
图1是示出被划分成多个图块的示例渲染空间的示意图;
图2是示例的基于图块的渲染图形处理系统的框图;
图3是示例显示列表的示意图;
图4是示出图1的图块被划分成多个2×2图块组的示意图;
图5是示出图块组的示例控制流的示意图;
图6是平铺图元的示例多级分层方法的流程图;
图7是示出图1的图块组的示例多级分层结构的示意图;
图8是示出将渲染空间中的图块扩展到具有二的幂次方个边的图块的方形集合的示意图;
图9是选择将图元块与之相关联的图块组的第一示例方法的流程图;
图10是根据图9的方法与第一示例图元块相关联的图块组的示意图;
图11是根据图9的方法与第二示例图元块相关联的图块组的示意图;
图12是选择将图元块与之相关联的图块组的第二示例方法的流程图;
图13是根据图12的方法与图10的第一示例图元块相关联的图块组的示意图;
图14是示出当图块组全部处于分层结构中的同一级时根据图12的方法与图11的第二示例图元块相关联的图块组的示意图;
图15是示出当图块组并非全部处于分层结构中的同一级时根据图12的方法与图11的第二示例图元块相关联的图块组的示意图;
图16是用于图块组的示例控制流的示意图;
图17是图7的分层结构中的图块组的示例标头和尾指针的示意图;
图18是示例图元块条目的示意图;
图19是用于第一示例图元块的示例覆盖掩码的示意图;
图20是用于第二示例图元块的示例覆盖掩码的示意图;
图21是用于生成覆盖掩码的示例方法的流程图;
图22是示出根据边界框方法对图元进行平铺的示意图;
图23是被配置为实现图6的多级分层平铺方法的示例平铺引擎的框图;
图24是示出图1的示例图块的相关图块组的示意图;
图25是示例控制流解码器的框图;
图26是用于从本文所述的控制流标识与渲染图块相关的图元的示例方法的流程图;
图27是包括图23的平铺引擎以及图25的控制流解码器的示例基于图块的渲染图形处理系统的框图;
图28是其中可以实现本文所述的平铺引擎、控制流解码器和/或图形处理系统的示例计算机系统的框图;以及
图29是用于生成体现本文所述的平铺引擎、控制流解码器和/或图形处理系统的集成电路的示例集成电路制造系统的框图。
附图示出了各种示例。技术人员将理解,附图中所示的元件边界(例如,框、框的组,或其他形状)表示边界的一个示例。在一些示例中,情况可能是一个元件可以被设计为多个元件,或者多个元件可以被设计为一个元件。在适当的情况下,贯穿各附图使用共同附图标记来指示相似特征。
具体实施方式
通过示例的方式给出以下描述,以使本领域的技术人员能够制造和使用本发明。本发明不限于本文中描述的实施方案,并且对所公开的实施方案的各种修改对于所属领域的技术人员而言将是显而易见的。仅通过示例的方式描述实施方案。
如上所述,图元块是一个或多个图元(例如,与其相关的经过变换的几何结构数据)一起存储在其中的数据结构。将图元存储在图元块中可允许将图元的经过变换的几何结构数据更有效地存储在存储器中。具体而言,用于图元的经过变换的几何结构数据通常包括用于多个顶点的经过变换的顶点信息,并且这些顶点通常在多个图元之间共享(或为多个图元所共有)。因此,在同一图元块中的多个图元共享顶点的状况下,与所述顶点有关的数据只需在所述图元块中存储一次。
当经过变换的图元(例如,与其相关的经过变换的几何结构数据)被存储在图元块中时,用于图块的显示列表可以包括针对每个图元块的条目,所述条目包括至少部分地落在所述图块的边界内的至少一个图元。由于图元块可以包括至少部分地落在多个图块的边界内的图元,因此在用于相同图元块的多个显示列表中可存在图元块条目。对于包括大图元的图元块尤其如此,例如覆盖所有或大部分渲染空间的图元。这导致增加的存储器使用和带宽(在几何结构处理阶段中将显示列表写入存储器以及在光栅化阶段中从存储器读取显示列表)。
为了减少这种图元块数据的重复,可以将块划分成N x M个块的组,其中N和M是大于或等于1的整数;并且生成每图块组控制流,所述控制流标识与图块组中的每个图块相关的图元块(及其图元)。例如,图块可以被划分成2×2个图块组。图4示出图1的示例图块T0到T63,其被划分成十六个2×2图块组TG0到TG15。例如,图块组0(TG0)包括图块T0、T1、T2和T3。
申请人的英国专利第2466576号描述了为每个块组存储控制流,所述控制流包括针对每个图元块的图元块条目,所述图元块包括至少部分地落在所述块组中的至少一个图块的边界内的至少一个图元,该专利全文以引用方式并入本文中。每个图元块条目包括:(i)识别哪些图块对于图元块有效的信息,(ii)标识所述图元块在存储器中的位置的信息,以及(iii)对于每个有效图块,标识至少部分地落在所述图块的边界内的所述图元块的图元的信息。如果在图元块中存在至少一个至少部分地落在所述图块的边界内的图元,则所述图块被称为对于所述图元块有效。至少部分地落在图块的边界内的图元可以替代地被描述为与所述图块相交的图元。
图5示出用于包括四个图块的图块组的英国专利第2466576号的控制流502的示例。控制流502包括用于对图块组中的至少一个图块有效的每个图元块的图元块条目5040、5041。每个图元块条目5040、5041包括图元块标头506和图元块指针508。图元块条目5040、5041可任选地包括图元掩码数据510。图元块标头506包括标识图块组中的哪些图块对于所述图元块有效的信息。例如,如图5所示,图元块头标头506可以包括用于图块组中的每个图块的图元掩码格式字段512、514、516和518,其指示所述图块对于所述图元块是否有效。例如,每个图元掩码格式字段512、514、516、518可以包括两个位,并且'00’可指示所述图块对于所述图元块是无效的;'01'可指示所述图块具有完整的图元掩码(即,所述图元块中的所有图元对于所述图块是有效的);‘10’可指示所述图元掩码经压缩;而‘11’可以指示图元掩码是未压缩的。图元块头标头506还可以包括其他信息520,例如(但不限于)图元块中顶点的数目、图块组中的所有图块是否有效且具有完整图元掩码(即,图元块中的所有图元对于所述图块是有效的)以及所有图块是否具有相同图元掩码。
图元块指针508包括图元块在存储器522中的地址。在一些情况下,图元块指针508还可以包括其他信息524,例如但不限于图元块中图元的数目。
图元掩码数据510包括一个或多个图元掩码,所述图元掩码标识至少部分地落在每个有效图块的边界内的图元块的图元。每个图元掩码可以包括用于所述图元块中的每个图元的位,所述位指示所述图元是否至少部分地落在对应图块的边界内。在一些情况下(例如,当每个有效图块具有不同的图元掩码时),图元掩码数据510可以包括用于每个有效图块的图元掩码。在其他情况下(例如,当所有有效图块具有相同的图元掩码时),图元掩码数据510可仅包括应用于所有有效图块的一个掩码。每个图元掩码可以是经压缩或未压缩的形式。
然而,虽然生成每图块组的控制流可以减少图块信息中的复制量,但是它不能消除复制。此外,在上述两种平铺方法中,不能预先确定存储由平铺引擎生成的平铺信息(例如,显示列表或平铺组控制流)所需的存储器的量。即,无法预先确定每个图块或图块组与多少个图元块相关,从而无法确定每个显示列表或图块组控制流将具有多少图元块条目。例如,如果渲染包括覆盖所有或几乎所有渲染空间的大量大图元,则许多显示列表或图块组控制流将具有用于包括大图元的每个图元块的条目。
如果由平铺引擎生成的平铺信息(例如显示列表或平铺组控制流)变得大于分配用于存储平铺信息的存储器(例如存储器2023),这可能导致图形处理系统以效率较低的方式操作。具体地,如果在任何图块开始的光栅化阶段之前平铺渲染中的所有图元,则TBR图形处理系统可以最有效地操作。这是因为在此情形中,每个显示列表/图块组控制流将标识用于渲染对应图块/图块组的所有图元,因此可在光栅化阶段中使用所述信息一次地处理每个图块。然而,如果平铺信息的大小超过分配用于存储平铺信息的存储器,则在完成平铺之前,可以将显示列表/平铺组控制流传递到光栅化阶段,以释放存储器。如果图元随后到达与渲染所述图块相关的图平铺引擎,则可能必须在光栅化阶段中再次处理所述图块。
因此,期望为具有最大大小的渲染生成平铺信息,以便可以分配足够的存储器来存储平铺信息。还希望最小化存储平铺信息所需的存储器,并减少将平铺信息写入存储器(在几何结构处理阶段)和从存储器读取平铺信息(在光栅化阶段)的带宽。
发明人已经认识到,虽然不能预先精确地确定每个图块的图元/图元块的数目,但是可以预先精确地估计图元/图元块的数目,因此如果预先确定或固定了图元块形成其一部分的不同控制流/显示列表的最大数目,则可以预先确定图块化信息的最大大小。发明人已经认识到,这可以使用多级分层平铺结构来实现。具体地,生成图块的多级分层结构,其中分层结构的每个级包括包含一个或多个图块的图块组,并且较高级包括具有比较低级更多图块的图块组。针对每个图块组生成控制流,所述控制流列出与渲染所述图块组中的至少一个图块相关的图元块。任何图元块仅能形成固定或预定数目的控制流的一部分。可以以任何方式选择图元块形成的部分的特定控制流,使得在用于所述图块形成其一部分的图块组的至少一个控制流中标识与渲染图块相关的所有图元。在光栅化阶段中,使用图块形成其一部分的所有图块组的控制流来标识用于渲染所述图块的相关图元。
可通过将所述图块分组成以包括单个图块的组(0级)开始的连续较大图块组,并且将每组的图块数目每一级增加n倍,直到存在包括所有图块的组为止,来生成图块的多级分层结构。在一个示例中,n等于4,使得0级组各自包括一个图块,1级组包括4个图块(例如,2×2图块区块),2级组包括16个图块(例如,4×4图块区块)等,直到存在包括所有图块的组为止。或者,kth级组(除了0级组-即k>0)可以被描述为包括n个(k-1)级组。因此,每个图块将是每一级的组的一部分,例如,0级组、1级组、2级组等。然后,为每个图块组(例如,每个0级的图块组、每个1级的图块组、每个2级的图块组等)生成控制流,所述控制流标识与渲染图块组中的至少一个图块相关的图元块。在一个示例中,每个图元块可以被添加到仅一个组的控制流,例如,最小组(或最低级组),其中图元块中的图元的边界框落在所述组中的图块的边界内。然而,这仅是示例,并且图元块可以以其他方式与图块组相关联。
因此,本文描述了多级分层平铺方法和被配置为实现这种方法的平铺引擎,以用于基于图块的渲染图形处理系统。所述方法包括生成图块组的多级分层结构。所述分层结构的每一级包括不重叠的图块组,并且较高级图块组包括比较低级图块组多的图块。然后,基于图元在图元块中的位置,将所述图元块与一个或多个图块组相关联,直到与最大数目的图块组相关联,使得与渲染图块相关的每个图元块与所述图块是其一部分的至少一个组相关联。然后,针对分层结构中的每个图块组生成控制流。每个控制流可以包括用于与对应的图块组相关联的每个图元块的条目,所述条目将所述图元块标识为与渲染图块组中的至少一个图块相关。
现在参考图6,其示出在基于图块的渲染(TBR)图形处理系统中使用的示例多级分层平铺方法600,其中渲染空间被划分成多个图块(例如,如图1所示)。方法600开始于步骤602,其中生成图块组的多级分层结构。所述分层结构中的每一级包括特定大小的图块的非重叠组,并且较高级图块组包括比较低级图块组多的图块。
可通过将所述图块分组成以包括单个图块的0级组开始的连续较大图块组,并且将每组的图块数目每一级增加n倍,直到存在包括所有图块的单个组为止,来生成图块组的多级分层结构。因此,分层结构中的级数目可基于渲染空间中的图块的数目。通常,渲染空间中的图块越多,分层结构中的级数目越大。在一个示例中,n等于4,使得每个0级组包括一个图块,每个1级组包括4个图块,每个2级组包括16个图块等。在一些示例中,每个k级组(除了0级组-即k>0)可以包括n个(k-1)级组。因此,每个图块将是每一级的组的一部分,例如,0级组、1级组、2级组等。
在一些情况下,每个图块组可以包括图块区块。例如,每个图块组可以包括hkxhk图块区块,其中k是级数目,并且0是最低级数目。在一个示例中,h为2,使得区块的每一级在水平方向和垂直方向两者上扩展2倍。在此示例中,每个0级组包括1×1图块区块(即,单个图块),每个1级组包括2×2图块区块,每个2级组包括4×4图块区块,并且每个3级组包括8×8图块区块等。在一些示例中,每个k级组(除了0级组-即k>0)可以包括hxh个k-1级组的区块。例如,在h为2的情况下,每个1级图块组可以包括0级图块组的2×2区块,每个2级图块组可以包括1级图块组的2×2区块等。
现在参考图7,其示出图1的8×8图块集合(T0-T63)的图块组的示例多级分层结构700,其中每个图块组包括图块区块,并且在每一级处,所述区块在水平方向和垂直方向两者上扩展2倍。在此示例中可以看出,存在:六十四个0级组的1×1图块(L0-0至L0-63),每个图块一个(即,L0-0至L0-63分别对应于图1的T0至T63);十六个1级组的2×2图块(L1-0至L1-15);四个2级组的4×4图块(L2-0至L2-3);以及包括所有图块的单个3级组的8×8图块(L3-0)。
在一些情况下,其中每个k级图块组包括hkxhk图块区块,并且形成渲染空间的图块不形成w x q图块区块,其中w和q两者为h的幂次方,然后可将虚位图块的行和/或列添加到渲染空间中的图块以生成w x q图块区块,其中w和q是h的幂次方,然后生图块组的示例多级分层结构成。术语虚位图块或空图块在本文中用于表示不形成渲染空间的一部分的图块。例如,如图8中所示,如果h=2,并且形成渲染空间802的图块形成5×7图块区块,则可将虚位图块的三个列8040、8041、8042和一个行806添加到形成渲染空间的图块以形成8×8图块区块。
回到图6,一旦已生成图块组的多级分层结构,方法600进行到步骤604。
在步骤604处,接收标识要被平铺的图元块的信息。图元块包括一个或多个图元。在一些情况下,标识图元块的信息可以是存储器中的图元块的位置和/或图元块中的图元的位置数据。图元的位置数据可以定义所述图元在渲染空间中的位置。例如,图元的位置数据可以包括图元的渲染空间中的X、Y和Z坐标(尽管对于平铺来说可能不需要Z坐标)。一旦已经标识了一个图元块,所述方法就进行到步骤606。
在步骤606处,将所述图元块与所述分层结构中的一个或多个图块组相关联,直到最大数目的图块组。图块组的最大数目小于图块的总数,并且优选地仅为图块数目的一小部分。图块组的最大数目可为一个或多于一个。选择与一个图元块相关联的一个或多个图块组,以使得所述图元块不与多于最大数目的图块组相关联,但是如果所述图元块中的至少一个图元至少部分地落在图块的边界内,则所述图元块与所述图块所属的至少一个图块组相关联。例如,如果图元块包括两个图元块P0与P1,并且P0完全落在图1的图块10(T10)内,并且P1完全落在图1的图块39(T39)内,则图元块与L0-10、L1-2、L2-0与L3-0(图7中所示的包括T10的图块组)中的至少一者以及L0-39、L1-9、L2-2与L3-0(图7中所示的包括T39的图块组)中的至少一者相关联。因此,可基于图元在所述图元块中在渲染空间中的位置来选择所述图元块所关联的一个或多个图块组。
在图元块可能仅与单个图块组相关联的情况下,则可以例如根据参照图9描述的方法900来选择与所述图元块相关联的图块组。所述方法900开始于步骤902,其中定义了包围或围封图元块中的所有图元的最小轴对准边界框。如果边界框包围或围封图元块中的每个图元的所有顶点,则边界框可被视为包围或围封图元块中的所有图元。可以以任何粒度生成边界框。例如,在一些状况下,边界框可以处于X和Y坐标分辨率(即,边界框可以由顶点的最大和最小X和Y坐标限定)。在其他情况下,边界框可处于图块分辨率(即,包围或围封图元的最接近的图块边缘)。
图10和11示出用于两个示例图元块的图1的渲染空间100的示例图块分辨率边界框。具体地,图10示出包括单个图元1004的第一图元块的示例图块分辨率边界框1002。可以看出,包围图元1004的最小图块分辨率边界框1002是由图块T6、T7、T12、T13、T14和T15形成的2×3图块框(如图1中所标记的)。图11示出用于包括单个图元1104的第二图元块的示例图块分辨率边界框1102。可以看出,包围图元1104的最小图块分辨率边界框1102是由图块T15、T26、T27、T37、T48和T49(如图1中所标记的)形成的3×2图块框。一旦已经定义了用于所述图元块的边界框,方法900就进行到步骤904。
在步骤904处,将所述图元块与所述分层结构中的包围在步骤902中标识的边界框的最低级图块组相关联。例如,图7的分层结构中的包围图10的边界框1002的最低级图块组是第一2级图块组(L2-0),因此包含图10中所示的图元1004的图元块与第一2级图块组(L2-0)相关联。类似地,图7的分层结构中包围图11的边界框1102的最低级图块组是3级图块组(L3-0),因为其是完全包围边界框1102的唯一图块组。因此,图11中所示的包括图元1104的图元块与3级图块组(L3-0)相关联。
虽然图9的方法900实现起来非常简单,并且允许图块信息尽可能小,但是由于每个图元块只与一个图块组相关联,所以即使所述图元块只与渲染几个图块相关,它也可以导致许多图元块与高级组(例如,包括所有图块的顶级图块组)相关联。这可降低光栅化逻辑的效率,因为其导致光栅化逻辑必须针对高级图块组中的每个图块处理所述图元块的图元块条目,即使图元块中的图元仅与渲染几个图块相关。例如,即使图11的图元1104仅与渲染五个图块相关,因为其仅至少部分地落在五个图块的边界内;其与3级图块组(即,包括所有图块的图块组)相关联,这意味着将由光栅化逻辑针对渲染空间中的每个图块处理所述图元块的图元块条目。这个问题对于包括围绕渲染空间的中心群集的少量图元的图元块最突出,所述图元块虽然仅覆盖渲染空间的小区域,但将与最高级或顶级图块组相关联。
在致力于解决这个问题的努力中,在其他情况下,图元块可以与之相关联的图块组的最大数目可以大于一。例如,在一些情况下,可以与图元块相关联的图块组的最大数目可以是g,其中g>1。在一些情况下,g可以等于四。
现在参考图12,其示出用于选择与图元块相关联的图块组的示例方法1200,其中图元块可以与多达g个图块组相关联,其中g>1。方法1200开始于步骤1202,其中定义了包围或围封图元块中所有图元的最小轴对准边界框。步骤1202通常对应于图9的方法900的步骤902,因此上面关于步骤902描述的如何为图元块生成边界框的描述同样适用于步骤1202。一旦已经定义了所述图元块的边界框,方法1200进行到步骤1204,其中所述图元块与包围所述边界框的最小(例如,就图块的数目而言)的多达g个图块组的集合相关联。
在一些情况下,包围边界框的图块组集合可仅包括同一级处的图块组。在这些情况下,图元块可以与包围所述图元块的边界框的多达g个图块组的最低级集合相关联。图13和14示出包围示例图元块的边界框的多达g个图块组的最低级集合,其中g等于4。具体地,图13示出包括图10的图元1004的图元块,其具有2×3的图块分辨率边界框1002。在此示例中,包围边界框1002的多达四个图块组的最低级集合包括两个1级图块组(L1-1和L1-3)。图14示出包括图11的图元1104的图元块,其具有3×2的图块分辨率边界框1102。在此示例中,包围边界框1102的多达四个图块组的最低级集合包括四个1级图块组(L1-3、L1-6、L1-9和L1-12)。尽管图10和13的图元块在方法1200中与较少的图块相关联(即,16使用方法900,8使用方法1200),但是这是以额外的图元块条目为代价的。然而,当使用图12的方法1200时(即,64使用方法900,16使用方法1200),图11和14的图元块与明显更少的图块相关联。
可通过标识处于最低级(例如,0级)的多个g个候选图块组并确定处于所述级的候选图块组是否包围边界框来标识包围图元块的边界框的多达g个图块组的最低级集合。如果候选图块组确实包围边界框,则将所述图元块与所述候选图块组相关联。如果候选图块组不包围边界框,则标识处于下一级的多达g个候选图块组,依此类推。当g=4时,可容易地将处于特定级的候选图块组标识为其中所述图元块的边界框的四个拐角所属的特定级处的图块组。在边界框的每一拐角落在特定级处的不同图块组中的情况下,将存在所述特定级处的四个候选图块组。当多于一个的拐角位于特定级处的同一图块组中时,将存在少于四个的用于特定级的候选图块组。尽管在图13和14中的示例中,g=4,对于本领域技术人员来说显而易见的是,这仅仅是示例,并且在其他示例中g可以小于或大于4。
在其他情况下,包围图元块的边界框的多达g个图块组的集合可以包括不同级的图块组。例如,图15示出包括图11的图元1104的图元块,其具有3×2的图块分辨率边界框1102。在此示例中,图7的包围边界框1102的最小(就图块数目而言)的多达四个图块组的集合包括两个0级组(L0-15、L0-37)和两个1级组(L1-6和L1-12)。允许图元块与分层结构的不同级的图块组相关联可能实现起来更复杂,但可能显著减少与其相关联的图块图元块的数目。这可以提高光栅化逻辑的效率,因为它减少了对于一个或多个图块必须处理的控制流条目的数目。
这可以通过标识图元块的边界框(例如,包围图元块中的所有图元的轴对准边界框)来实现。然后选择包围边界框的最低级图块组(即,方法900的步骤904)。然后,判断所述图块组中的至少一个图元至少部分地落在其中的图块的百分比是否高于预定阈值。图元块的至少一个图元至少部分地落在其中的图块在本文中被称为被覆盖图块。如果被覆盖图块的百分比超过预定阈值,则所述图元块与所述图块组相关联。然而,如果所述图块组中的被覆盖图块的百分比小于预定阈值,则测试落在所述图块组内的下一较低级图块组中的每一者。例如,如果最初选定的图块组是包括4×4图块区块的2级图块组且被覆盖图块的数目小于预定阈值,则将测试落在所述2级图块组内的每个1级图块组以查看是否存在其充分覆盖。丢弃根本未被覆盖的任何图块组(即,不存在至少部分地落在图块组的至少一个图块内的图元块的图元)。当有图块组集合被覆盖超过预定阈值且共同含有图元块中的所有图元的时,所述过程停止。可例如通过回溯及合并图块组直到图块组的数目小于或等于g为止来将与图元块相关联的图块组的数目封顶在g。
在其他情况下,可使用其他标准来确定是将图块组与图元块相关联还是检查其中的子图块组,而不是使用被覆盖图块(所述图元块的至少一个图元至少部分地落在其中的图块)的百分比来确定是否使用图块组。例如,在其他情况下,确定是将图块组与图元块相关联还是检查其子图块组可基于由所述图元块的边界框覆盖的图块组中的图块的百分比;或者,可以将图元块划分成多个图元子块,其中每个图元子块包括图元子集,并且可以基于由多个子块覆盖的图块组中的图块的百分比来确定是将图块组与图元块相关联还是检查其子图块组。
在其他情况下,不是为整个图元块确定边界框并标识覆盖所述边界框的一个或多个图块组的集合,而是可以将图元块划分成多个图元子块,每个图元子块包括图元的不同子集,并且可以使用图9的方法900或图12的方法1200来为所述图元子块选择一个或多个图块组。在这种情况下,可以为每个图元子块标识单独的边界框。这可以允许在渲染空间的不同部分中具有多个图元集群的图元块与较低级图块组相关联,而不是针对整个图元块使用方法900或方法1200。在用于图元块的边界框内存在不均匀的图元分布(例如叶状)的情况下,这可能更有效。
对于本领域技术人员来说,显然这些仅仅是可以用于选择与图元块相关联的分层结构的图块组的方法的示例,并且可以使用任何适当的方法来选择与每个图元块相关联的分层结构的图块组。
回到图6,一旦所述图元块已与一个或多个图块组相关联,方法600便进行到步骤608。
在步骤608处,确定是否还有至少多个一个要平铺的图元块。如果确定还有至少多个一个要平铺的图元块,则方法600返回到步骤604,在所述步骤中接收标识下一个图元块的信息,并对所述图元块重复步骤606。然而,如果确定没有更多的图元块需要进行平铺,则方法600进行到步骤610。
在步骤610处,为与至少一个图元块相关联的分层结构的每个图块组生成控制流。每个控制流包括用于与对应的图块组相关联的每个图元块的图元块条目。例如,如果图块组与三个图元块相关联,则所述图块组的控制流可以包括三个图元块条目。每个图元块条目包括标识对应的图元块的信息。在一些情况下,标识图元块的信息包括指示图元块在存储器中的位置的信息(例如,指示图元块在存储器中的地址的信息)。
如下文更详细地描述,在一些情况下,图元块条目还可以包括指示图块组中的哪些图块对于对应的图元块有效的信息。如果称图元块中的至少一个图元与渲染图块相关,则所述图块被称为对于所述图元块有效。如果图元至少部分地落在图块的边界内,则所述图元可以与渲染图块相关。如下文更详细地描述,标识图块组中的哪些图块对于对应的图元块有效的信息可以包含标头;边界框信息;以及覆盖掩码。在没有此信息的情况下,控制流中所标识的每个图元块可由光栅化逻辑针对对应的图块组中的每个图块来获取和处理。在一些情况下,图元块条目还可以包括指示对应的图元块中的哪些图元与图块组中的图块中的一者或一者以上相关的信息。例如,在一些情况下,图元块条目可以包括用于一个或多个图块的一个或多个集合的一个或多个图元掩码,所述图元掩码具有用于图元块中的每个图元的位,所述位指示图元是否与渲染图块的集合相关。参考图18描述了用于图元块条目的示例格式。
在一些情况下,控制流还可以包括其他类型的条目。例如,控制流可以包括指示控制流结束的终止条目和/或指向控制流的下一区段或块的链接条目。参考图16描述了控制流的示例格式。
尽管在图6的方法600中,在为图块组生成控制流之前,要被图块化的每个图元块与一个或多个图块组相关联,但是在其他情况下,在所有图元块已经与一个或多个图块组相关联之前,可以生成控制流的至少一部分。例如,在其他情况下,一旦已经将图元块与图块组相关联,则可以将图元块条目添加到所述图块组的控制流。
控制数据流
现在参考图16,其示出用于图块组的示例控制流1600。在此示例中,控制流1600包含用于与图块组相关联的每个图元块的图元块条目16020–1602T-1。例如,如果图块组与T个图元块相关联,则控制流1600将包括T个图元块条目。图元块条目16020–1602T-1括标识对应的图元块16040至1604M-1的信息。标识图元块16040至1604M-1的信息可以包括标识图元块16040至1604M-1在存储器中的位置的信息。每个图元块条目16020–1602T-1可以任选地包括附加信息,例如但不限于图元块边界框的坐标;覆盖掩码,其指示与所述图元块的所述边界框相交的所述图块组的哪些图块与所述图元块相关;和/或指示所述图元块的哪些图元与所述图块组中的一个或多个图块相关的一个或多个图元掩码。参考图18描述了用于图元块条目的示例格式。
在某些情况下,如图16所示,除了图元块条目16020–1602T-1之外,控制流1600可以任选地包括一个或多个其他类型的条目。其他控制流条目类型的每一个可用于传送不同的信息。例如,如图16所示,控制流可以包括终止条目1606和/或一个或多个链接条目1608。对于本领域技术人员来说,显然这些是其他控制流条目类型的示例,并且在其他示例中,控制流可以包括:仅这些控制流条目类型的子集;附加的控制流条目类型;和/或不同类型的控制流条目。
其中如图16所示,控制流1600可以包括多种类型的条目,每个条目可以具有用于标识条目类型的专用字段(例如,专用位数)。例如,在一些情况下,每个条目的K位(其在本文中可被称为条目类型位)可用于标识条目的类型,其中K基于不同类型的数目。例如,在一些情况下,K可以等于[log2 H],其中H是不同控制流条目类型的数目。在一些情况下,条目类型位可以是每个条目的第一K位。
表1示出如何使用两个条目类型位来标识图元块条目、链接条目和终止条目的示例。具体地,如果两个条目类型位被设置为‘00’,则这可以将所述条目标识为图元块条目,如果两个条目类型位被设置为'01',则这可以将所述条目标识为链接条目,并且如果两个条目类型位被设置为‘10’,则这可以将所述条目标识为终止条目。
表1
在一些情况下,如图16所示,控制流1600可被划分成控制流块16100、16101的序列,它们被分开存储在存储器中。每个控制流块可以具有最大大小(例如32个双字)。在控制流1600被划分成控制流块的序列的情况下,控制流可以包括将控制流块链接在一起的一个或多个链接条目1608。具体地,每个链接条目1608可以指定序列中下一个控制流块的地址或指向所述下一个控制流块的指针。例如,在图16中,第一控制流块16100(控制流块0)中的链接条目1608将包括第二控制流块16101(控制流块1)的地址或指向其的指针。当光栅化逻辑遇到控制流块中的链接条目1608时,它可以触发光栅化逻辑使用指定的地址或指针从存储器读取下一控制流块。
在一些情况下,如图16所示,链接条目1608可以是每个控制流块中的最后一个条目,而不是最后一个控制流块的条目。在一些情况下,光栅化逻辑能够一次读取整个控制流块。例如,在控制流块是32个双字的一些情况下,存储器可以支持4拍突发读取,其中每个突发是256位或32字节。在其他情况下,光栅化逻辑可能一次只能读取控制流块的一部分。
在一些情况下,控制流的最后一个条目可以是终止条目1606,其向光栅化逻辑发信号通知控制流的结束。具体地,当光栅化逻辑遇到终止条目1606时,它可以完成当前控制流的处理。
图块组标头和尾指针
在一些情况下,可针对所述分层结构的每个图块组将标头及尾指针存储于存储器中。例如,图17示出图7的图块组分层结构的一组示例的标头17020至170284和尾指针17040至170484。可以看出,存在标头17020至170284和尾指针17040至170484,用于:六十四个0级组中的每一个、十六个1级组中的每一个、四个2级组中的每一个和3级组。在一些情况下,每一级可以被分配存储器的一部分,其中存储用于所述级的图块组的标头和尾指针。因此,分配给每一级的用于存储标头和尾指针的存储器的量可以基于所述级中的组的数目。通常,较低级具有比较高级更多的组,因此将需要更多的存储器来存储其标头和尾指针。
每一标头17020至170284包括指示对应的图块组的控制流在存储器中的位置的信息。例如,如图17所示,第一0级组(L0-0)的标头17020指向L0-0控制流17060在存储器中的位置,而第一2级组(L2-0)的标头170280指向L2-0控制流170680在存储器中的位置。在一些情况下,每个标头17020至170284可以包括用于对应的图块组的控制流的存储器中的地址(例如,32位地址)。在一些情况下,每个标头17020至170284可以包括附加信息,诸如但不限于有效信息(例如,1位有效标志),其指示标识控制流在存储器中的位置的信息是有效的。在一些情况下,如果在存储器中存在用于对应的图块组的控制流(例如,如果存在为所述图块组存储的至少一个图元块条目),则标识控制流的位置的信息被认为是有效的。
每个尾指针17040至170484包括指示(或指向)对应的图块组的控制流的当前末端在存储器中的位置的信息。换句话说,每个尾指针17040至170484包括指示控制流中下一条目要存储在存储器中的位置的信息。例如,如图17所示,第一0级组(L0-0)的尾指针17040指向存储器中要写入L0-0控制流17060的下一条目的位置。具体地,L0-0控制流17060包括两个图元块条目,并且尾指针指向存储器中在那些图元块条目之后的下一可寻址位置。类似地,第一2级组(L2-0)的尾指针170480指向存储器中要写入L2-0控制流170680的下一条目的位置。具体地,L2-0控制流170680包括一个图元块条目,并且尾指针170480指向存储器中所述图元块条目之后的下一可寻址位置。在一些情况下,每个尾指针17040至170484可以包括存储器中的地址(例如,32位地址),其中将存储对应的图块组的控制流的下一条目。
在一些情况下,每个尾指针17040至170484可以任选地包括附加信息,诸如但不限于状态信息(例如15位状态字段)、有效信息(例如1位有效标志)和/或图元块基址信息(例如18位图元块基址字段)。每个图元块可以与描述如何渲染图元块中的图元的状态数据相关联。状态数据可以被描述为标识用于在图元块中渲染图元的方法。例如,状态数据可以包括但不限于标识深度比较模式、混合状态、纹理状态和/或图元类型的信息。状态信息可以包括标识与所述组图块相关联的一个或多个图元块的状态数据的信息。在一些情况下,状态信息可以包括与图块组相关联的最后一个图元块的状态数据,使得系统将能够确定状态数据何时改变。有效信息可以指示标识对应的图块组的控制流的当前结束在存储器中的位置的信息是否有效。如果在控制流中存在至少一个条目,则标识对应的图块组的控制流的当前结束在存储器中的位置的信息可以被认为是有效的。如下面更详细地描述的,图元块基址信息可以包括与图元块条目中的信息结合使用的信息(例如,部分地址),以标识与渲染图块组中的图块相关的图元块的位置。例如,图元块基址可以包括图元块地址的前18位,并且图元块地址的剩余部分可以在对应的图元块条目中提供。
在存在用于所述分层结构的每个图块组的标头17020至170284及尾指针17040至170484的情况下,一旦已将图片组与图元块相关联,便可通过以下操作来生成用于所述图块组的控制流:生成用于所述图元块的图元块条目,读取尾指针以标识所述图元块条目将被存储在存储器中的位置,将所述图元块条目写入存储器中所标识的位置,以及更新尾指针以指向在所述新添加的图元块条目之后的下一可寻址存储器块。
在一些情况下,可动态地分配用于存储图块组的控制流的存储器。在这些情况下,当图元块与图块组相关联时,在读取尾指针之前,可以首先确定这是否是与图块组相关联的第一图元块。例如,如果用于所述图块组的标头的有效位指示标识控制流在存储器中的位置的信息无效,则可以确定这是与所述图块组相关联的第一图元块。如果确定这不是与块组相关联的第一图元块,则遵循上一段中所概述的方法(即,读尾指针,将图元块条目写入由尾指针标识的地址,并且更新尾指针以指向存储器的下一个块)。然而,如果确定这是与图块组相关联的第一图元块,则可以请求存储器中用于存储所述图块组的控制流的地址(例如,从存储器管理器等)。一旦接收到用于存储所述图块组的控制流的地址,便可更新标头以反映所分配的地址,并且(如果是有效位)可将所述有效位设置成指示标识控制流在存储器中的位置的信息是有效的。然后,将与所述图块组相关联的所述图元块的图元块条目写入所述位置,并且更新所述尾指针以标识所述图元块条目之后的存储器中的下一可寻址位置。在尾指针包括有效位的情况下,尾指针的有效位然后可以被设置以指示标识对应的图块组的控制流的当前端的尾指针中的信息是有效的。
在一些情况下,在用于存储控制流的存储器被动态地平铺分配(例如,控制流被存储在链接的块中)的情况下,更新尾指针可以包括将尾指针递增到存储器中的下一位置,并且如果确定递增的尾指针指向存储器的当前块中的最后位置,则获得存储器的另一个块的地址(例如,从存储器管理器等),将链接条目(其包括新块的地址)写入由尾指针指向的地址,并且然后更新尾指针以指向存储器的新块中的第一位置。
图元块条目
现在参考图18,其示出用于图元块条目1800的示例格式,所述图元块条目可以用于实现本文所述的任何图元块条目。如上所述,图块组的控制流包括与所述图块组相关联的每个图元块的图元块条目。每个图元块条目包括标识对应的图元块的信息,所述信息指示所述图元块与渲染所述图块组中的图块中的至少一者相关。在一些情况下,标识图元块的信息是标识存储器中的图元块的地址的信息。
在图18的示例中,图元块条目1800包括标头区段1802,并且任选地包括图元块基址区段1804、图元块边界框区段1806、覆盖掩码区段1808和/或图元掩码区段1810。对于本领域技术人员来说,这仅仅是一个示例,并且其他的图元块条目可以包括这些区段和/或附加的或不同的区段的另一种组合。
标头区段1802包括关于图元块条目1800和/或对应的图元块的信息,例如但不限于存在于图元块条目1800中的可选区段和/或图元块中图元的数目。例如,如图18所示,标头区段1802可以包括:条目类型字段1812;块字段1814中的图元的数目;基址存在字段1816;边界框(BB)最小X存在字段1818;边界框(BB)最大X存在字段1820;边界框(BB)最小Y存在字段1822;边界框(BB)最大Y存在字段1824;全覆盖字段1826;图元掩码压缩字段1828;以及地址偏移字段1830。对于本领域技术人员来说,显然这是可以在标头中的信息的示例列表,并且在其他示例中,标头可以包括不同的和/或附加的信息。在此示例中,标头区段1802是28位,因此适合4字节双字(即32位),然而,对于本领域技术人员来说,这仅是示例,并且标头区段可以具有任意数目的位是显而易见的。
条目类型字段1812将条目标识为图元块条目(例如,相对于终止条目或链接条目)。例如,如上参考图16所述,条目类型字段可以是2位字段,当将其设置为‘00’(二进制)时,指示所述条目是图元块条目。
块字段1814中的图元的数目指示对应的图元块中的图元的数目。块字段1814中的图元的数目可以被配置为保持指示图元块中的图元的数目的二进制数。分配给块字段1814中的图元的数目的位的数目可以基于可以在图元块中的图元的最大数目。在图18所示的示例中,块字段1814中的图元的数目是七位,其指示图元块中的图元的最大数目是128。然而,对于本领域技术人员来说,这仅仅是一个示例,并且块字段中的图元的数目可以包括不同数目的位是显而易见的。
在图18的示例中,图元块条目1800包括标识存储器中对应的图元块地址的信息。可以通过在图元块基址区段1804中包括w位地址和/或指定相对于图元块基址的h位偏移(例如,在标头区段1802中)来在图元块条目中标识地址,其中h所述位偏移小于w。在一些情况下,w可以等于存储器中的图元块的完整地址的长度W,而在其他情况下,w可以小于W,例如最低有效位置中的隐含的零位的数目(W-w)。在一些情况下,光栅化逻辑被配置为每当图元块条目包括图元块基址区段1804时,使其中指定的地址为当前图元块基址,并且根据当前图元块基址和偏移计算完整地址(例如,通过对其求和或以其他方式组合它们)。在完整地址可以作为相对于当前图元块基址的偏移量而生成的情况下,则图元块条目可以不包括图元块基址区段。在一些情况下,如上所述,用于图块组的标头可指定初始图元块基址。在这些情况下,光栅化逻辑可被配置为初始地将当前图元块基址设置为对应标头中指定的地址。这允许控制流中的第一图元块甚至仅由偏移量来标识。通过偏移量而不是整个地址来标识存储器中的图元块的地址可以减小所述图元块的图元块条目的大小。
如果图元块条目1800包括图元块基址区段1804,则基址存在字段1816可以被设置或配置为指示图元块条目包括图元块基址区段1804。在一些情况下,基址存在字段1816是单个位,当所述图元块条目包括图元块基址区段1804时,其可以被设置为一个值(例如,‘1’),并且当所述图元块条目1800不包括图元块基址区段1804时,其可以被设置为不同的值(例如,‘0’)。
在图18的示例中,如果用于所述图元块的边界框不大于或等于由所述图块组中的图块覆盖的渲染空间的面积,则所述边界框的一个或多个坐标可以被包括在例如图元块边界框区段1806中的图元块条目1800中。用于图元块的边界框可以由四个坐标定义:渲染空间中的最小X值、最大X值、最小Y值和最大Y值。边界框最小/最大X/Y存在字段1818、1820、1822、1824用于指示最小X坐标、最大X坐标、最小Y坐标和最大Y坐标是否分别包含在图元块条目中(例如,在图元块边界框区段1806中)。如下文更详细地描述,在一些情况下,如果边界框坐标(最小X、最大X、最小Y、最大Y)落在由图块组中的图块覆盖的渲染空间的区域之外,则可不包含所述边界框坐标。例如,如果图块组中的图块的最大X值为10且所述图元块的边界框的最大X值为20,则所述边界框的最大X值可不包含于所述图元块条目中。
在一些情况下,边界框存在字段1818、1820、1822、1824字段中的每一者可为单个位,其在对应坐标包含于图元块条目中的情况下设置为一个值(例如,‘1’),并且在对应坐标未包含于图元块条目1800中的情况下设置为另一个值(例如,‘0’)。如果所有边界框存在字段1818、1820、1822和1824指示对应的边界框坐标未包含于图元块条目1800中,则这可指示图元块条目1800不包含图元块边界框区段1806。相比之下,如果边界框存在字段1818、1820、1822、1824中的至少一者指示对应的边界框坐标包含于图元块条目1800中,则这可指示图元块条目1800包括图元块边界框区段1806。
全覆盖字段1826指示图块组的所有图块对于对应的图元块是否有效。如果认为在图元块中存在至少一个至少部分地落在所述图块的边界内的图元,则所述图块被称为对于所述图元块有效。对于图元块有效的图块也可被称为相对于图元块的被覆盖图块。0级图块组仅包含单个图块,并且因此可始终设定0级组的全覆盖字段1826以指示图块组的所有图块对于对应的图元块是有效的。如果全覆盖字段1826指示在图块组中存在至少一个对于对应的图元块无效的图块,则图元块条目1800可以包括覆盖掩码区段1808,其与图元块边界框信息一起指示图块组中的哪些图块对于对应的图元块有效。因此,全覆盖字段1826可指示图元块条目1800是否包括覆盖掩码区段1808。在一些情况下,全覆盖字段1826可以包括单个位,当图块组的所有图块对于对应的图元块有效时,将所述单个位设置为一个值(例如,‘1’),并且当图块组的图块中的至少一者对于对应的图元块无效时,将所述单个位设置为另一个值(例如,‘0’)。
图元掩码压缩字段1828指示是否已经压缩了图元掩码区段1810中的一个或多个图元掩码。在一些情况下,图元掩码压缩字段1828可以包括单个位,当图元掩码区段1810中的图元掩码已被压缩时,所述单个位被设置为一个值(例如,‘1’),并且当图元掩码区段1810中的图元掩码未被压缩时,所述单个位被设置为另一个值(例如,‘0’)。
如上所述,存储器中的对应的图元块的地址可以由以下步骤来标识:(i)图元块基址区段1804中的w位地址;和/或(ii)地址偏移字段1830中的h位偏移。具体地,从图元块基址(例如,其可以是控制流中指定的最近w位地址或图块组的标头中指定的基址)和距所述基址的偏移量(例如,其可以是地址偏移量字段1830中的h-位偏移量)的组合生成存储器中的图元块的地址。在图18的示例中,地址偏移字段1830是十二位,然而,对于本领域技术人员来说,这仅仅是一个示例,并且地址偏移字段1830可以是任何适当的长度是显而易见的。
图元块基址区段1804包括w位地址,从所述W位地址可以生成存储器中的对应的图元块的位地址,其中W是存储器中的图元块的完整地址的位数。例如,图元块基址区段可以包括32位地址,其中存储器中图元块的完整地址大于或等于32位。如上所述,图元块基址区段1804是图元块条目中的可选区段。其中图元块条目包括其中提供的图元块基址区段w位地址:(i)与标头区段1802的地址偏移字段1830中提供的h位偏移组合,以在存储器中生成对应的图元块的W位地址,其中h小于w;以及(ii)变成新的图元块基址。当图元块条目包括图元块基址区段1804时,地址偏移字段1830可以被设置为零。
图元块边界框区段1806包括标识用于对应的图元块的边界框的一或多个坐标的信息。如上所述,图元块的边界框可以由以下坐标定义:在渲染空间中的最小X坐标、最大X坐标、最小Y坐标和最大Y坐标。在一些情况下,所述图元块条目可以包含位于由所述图块组中的图块覆盖的渲染空间的区域内的任何边界框坐标。换句话说,位于由所述图块组中的图块覆盖的渲染空间的区域的边界上或边界外部的任何边界框坐标可不包含于所述图元块条目中。例如,在图10中,如果X从左到右增加且Y从上到下增加,则边界框1002的最大X坐标和最大Y坐标位于由组L2-0中的图块覆盖的渲染空间的区域的边缘上,但不位于所述区域内,因此所述图块可不包含在图元块条目1800(例如,其图元块边界框区段1806)中。然而,边界框1002的最小X坐标和最小Y坐标确实位于由组L2-0中的图块覆盖的渲染空间的区域内,因此它们可以被包括在图元块条目1800中(例如,在其图元块边界框区段1806中)。
在一些情况下,包含于图元块边界框区段1806中的每个边界框坐标可被标识为从限定由图块组中的图块覆盖的渲染空间的区域的对应坐标的偏移(例如,就图块而言)。因此,表示偏移的位的数目可针对每个图块组分层结构而不同,并且可基于图块组中的图块的数目。例如,如果图块组(例如1级图块组)包含2×2图块区块且图元块的边界框以图块粒度指定,则边界框的坐标可仅为距对应的图块组坐标1个图块偏移量。因此,在此示例中,可使用单个位来表示每个边界框坐标。
在一些情况下,标识每个坐标的信息可以以与标头区段1802中的对应边界框存在字段相同的次序被放置在图元块边界框区段1806中。例如,在图18的标头区段1802中,边界框最小X存在字段1818首先,接着是边界框最大X存在字段1820、边界框最小Y存在字段1822以及边界框最大Y存在字段1824。在此示例中,标识最小X坐标的信息可接着首先放置于图元块边界框区段1806中,随后是标识最大X坐标的信息、标识最小Y坐标的信息及标识最大Y坐标的信息。
覆盖掩码区段1808包括指示与图元块的边界框重叠或相交的图块组中的哪些图块对于对应的图元块有效的信息。如上所述,如果图元块中的至少一个图元至少部分地落在图块的边界内,则图块对于所述图元块是有效的。指示与所述图元块的边界框重叠的所述图块组中的哪些图块对于所述图元块有效的信息可呈覆盖掩码的形式。在一些情况下,覆盖掩码的大小可在图块组之间变化,因此覆盖掩码可在覆盖掩码区段1808中在标识覆盖掩码的大小的信息(例如,字节)之前。如上所述,在一些情况下,如果所述图块组未被完全覆盖(即,并非所述图块组的每个图块对于对应的图元块都是有效的),则图元块条目1800可仅包括覆盖掩码区段1808。下面描述覆盖掩码的示例格式及其生成的详细描述。
图元掩码区段1810包括标识对应的图元块中与渲染图块组中的一个或多个图块的一个或多个集合相关的图元的信息。如果图元至少部分地落在由图块集合覆盖的渲染空间的区域内,则所述图元可与渲染一个或多个图块的集合相关。标识与渲染一个或多个图块的集合相关的图元的信息可以包括图元掩码,所述图元掩码包括用于所述图元块中的每个图元的位,所述位指示所述图元是否与渲染所述组图块相关。图元掩码可通过使用平铺方法确定图元是否落在由所述组中的图块覆盖的渲染空间的区域内而生成。
如下文更详细地描述,覆盖掩码可被实现为分层覆盖掩码,其包括用于相关图块区块的越来越小的区域的信息。在一些情况下,图元掩码区段可以包括用于在覆盖掩码中标识为对于图元块有效的最小区域的图元掩码。在一些情况下,最小区域可以是图块。在这些情况下,图元掩码区段可以包括用于所述图元块的每个有效图块的图元掩码。然而,在其他情况下,最小区域可各自包括多个图块。例如,覆盖掩码可仅包括相关图块区块内的每个2×2图块区块的信息。在这些情况下,图元掩码区段可以包括用于相关图块区块中的每个2×2图块区块的被标识为对于所述图元块有效的图元掩码。在一些情况下,可以以与覆盖掩码中的相应信息相同的次序将图元掩码存储在图元掩码区段中。例如,如果根据Z阶曲线将信息存储在覆盖掩码中,则可以根据Z阶曲线将图元掩码存储在图元掩码区段中。
在其他情况下,标识所述对应的图元块的与渲染所述图块组中的一个或多个图块的一个或多个集合相关的图元的信息可以包括用于所述图元块中的每个图元的掩码,所述掩码包括用于一个或多个图块的每个集合的位,所述位指示所述图元是否与所述图块集合中的至少一个图块相关。在一些情况下,对于在覆盖掩码中被标识为对于图元块有效的每个最小区域可以存在位。在最小区域为图块的情况下,每个掩码可以包括用于图块组的每个图块的对于图元块有效的位。
在一些情况下,为了减小图元块条目1800的大小,可以以压缩格式将掩码存储在图元掩码区段1810中。例如,在一些情况下,可以根据游程长度压缩算法来压缩掩码。如本领域技术人员所知,游程长度压缩算法是无损压缩算法,其中数据的游程(其中相同值连续出现的序列)被存储为单个数据值和计数器,而不是游程。对于本领域技术人员来说,显然这仅仅是可以用于压缩图元掩码区段中的掩码(例如图元掩码)的示例压缩算法,并且任何适当的有损或无损压缩算法都可以用于压缩掩码。
覆盖掩码
覆盖掩码指示图块组中与图元块的边界框相交的哪些图块对于所述图元块是有效的。如果认为图元块中的至少一个图元与渲染图块相关,则所述图块被称为对于所述图元块有效。如果图元至少部分地落在图块的边界内,则所述图元可以与渲染图块相关。至少部分地落在图块的边界内的图元可以被认为与所述图块相交。在本文所述的示例中,不针对0级图块组(即,具有单个图块的图块组)生成覆盖掩码,而是可针对0级图块组生成图元掩码。
在一些情况下,覆盖掩码可以包括用于相关图块区块中的每个图块的位,所述位指示图块对于图元块是否有效,其中相关图块区块基于图元块的边界框。相关图块区块包括图块组中与所述图元块的边界框相交的图块,但还可以包含其他图块。例如,在一些情况下,相关图块可以包括渲染空间中与图元块的边界框相交的所有图块,而不管是否所有那些图块形成图块组的部分。然而,在一些情况下,图元块的边界框可能相当大,这可能使得这样的覆盖掩码很大。这可能使得光栅化逻辑难以解码覆盖掩码。例如,一些渲染空间可被划分成1,024×1,024个图块,这将意味着如果图元块覆盖大多数图块且图块组是最高级图块组,则覆盖掩码可以包括超过1百万个位。
因此,在其他情况下,覆盖掩码可以是分层的。例如,覆盖掩码可以表示覆盖信息树。具体地,相关图块区块可以被递归地细分成渲染空间的越来越小的区域,并且每个区域可以与图元块进行比较以确定所述区域对于图元块是否有效,并且此信息可以被记录在覆盖掩码中。例如,在一些情况下,相关图块区块可以被递归地划分成象限。
在一些情况下,相关图块区块可被扩展到最小s x s图块区块,其中s是二的幂次方(例如,2×2图块区块,4×4图块区块),其在本文中可被称为扩展的相关图块区块。将相关图块区块扩展为具有2的幂次方个边的方形区块可帮助实现平衡树。在原始相关图块是sx s图块的情况下,经扩展的相关图块可与原始相关图块区块相同。
覆盖掩码然后可以包括用于相关图块区块的扩展块的每个象限的位,所述位指示所述象限对于图元块是否有效。如果一个或多个图块的象限的至少一个图元至少部分地落在由所述象限中的图块形成的渲染空间的区域的边界内,则所述象限被认为对于所述图元块有效。接着,对于有效的图块的任何象限,覆盖掩码包括用于其图块的每个子象限的位,所述位指示所述子象限对于所述图元块是否有效。可以重复所述过程,直到存在对应于每个具有1个图块的象限的位集合。例如,如果原始相关图块区块被扩展为8×8图块区块,则8×8图块区块可以被划分成四个4×4图块区块,并且向用于那些4×4区块中的每一个的覆盖掩码添加位,所述位指示4×4区块对于图元块是否有效(即,在图元块中是否存在至少一个图元,所述图元至少部分地落在所述4×4区块内)。则有效的每个4×4图块区块被划分成四个2×2图块区块,并且将指示2×2区块对于图元块是否有效的位添加到用于那些2×2区块中的每个区块的覆盖掩码。则有效的每个2×2图块区块被划分成四个1×1图块区块(即,四个单个图块),并且将指示所述1×1图块区块(即,单个图块)对于所述图元块是否有效的位添加到每个1×1图块区块的覆盖掩码。
在一些情况下,可根据Z阶曲线将一组象限的四个位存储于覆盖掩码中,使得首先存储对应于左上象限的位,接着存储对应于右上象限的位,接着存储对应于左下象限的位,并且最后存储对应于右下象限的位。对于本领域的技术人员将显而易见的是,这仅仅是示例,并且在其他示例中,可以以另一种次序将一组象限的位存储在覆盖掩码中。在一些情况下,当对应象限对于图元块有效时,覆盖掩码中的位可以被设置为一个值(例如‘1’),并且当对应象限对于图元块无效时,覆盖掩码中的位可以被设置为另一个值(例如‘0’)。
现在参考图19,其示出用于包括两个图元1902和1904的图元块的图7的L3-0图块组的示例覆盖掩码1900。在此示例中,‘1’指示对应的象限对于图元块是有效的,而‘0’指示对应的象限对于图元块不是有效的。
用于包括图元1902和1904的图元块的图块粒度/分辨率边界框1906是5×3图块区块。在此示例中,L3-0图块组完全包围边界框1906,因此相关图块区块是落在边界框1906内的5×3图块区块。包括相关图块区块的最小s x s图块区块(其中s是2的幂次方)是8×8图块区块。因此,用于所述图元块的扩展的相关图块区块1908是8×8图块区块。8×8扩展的相关图块区块1908被划分成四个象限(即,四个4×4图块区块),其在本文中被称为2级(L2)象限。在此示例中,象限1(Q1)是4×4图块的左上象限,象限2(Q2)是4×4图块的右上象限,象限三3(Q3)是4×4图块的左下象限,并且象限4(Q4)是4×4图块的右下象限。如图19所示,至少一个图元1902、1904至少部分地落在由L2-Q1、L2-Q2和L2-Q4覆盖的渲染空间的区域内,因此对应于这些象限的每个位被设置为‘1’。图元1902与1904都不落在L2-Q3中,因此对应于Q3的位被设置为‘0’。
然后,将每个有效的2级象限(L2-Q1、L2-Q2和L2-Q4)细分成子象限(即,四个2×2图块区块),其在本文中被称为1级(L1)象限,并且覆盖掩码包括用于这些1级象限中的每一个的位。L2-Q1象限被细分成四个象限(2×2图块区块)。在此示例中,图元1902或1904中的至少一个至少部分地落在L2-Q1象限的L1-Q3和L1-Q4象限内,因此对应于这些1级象限的位被设置为‘1’。这些图元中没有一个至少部分地落在L2-Q1象限的L1-Q1和L1-Q2象限内,因此对应于这些1级象限的位被设置为‘0’。L2-Q2象限被细分成四个象限(2×2图块区块)。在此示例中,图元1902或1904中的至少一个至少部分地落在L2-Q2象限的L1-Q3象限,因此,对应于此1级象限的位被设置为‘1’。图元1902或1904都不至少部分地落在L2-Q2象限的L1-Q1、L1-Q2和L1-Q4象限内,因此对应于这些1级象限的位被设置为‘0’。L2-Q4象限被细分成四个象限(2×2图块区块)。在此示例中,图元1902或1904中的至少一个至少部分地落在L2-Q4象限的L1-Q1象限内,因此对应于此1级象限的位被设置为‘1’。图元1902或1904都不至少部分地落在L2-Q4象限的L1-Q2、L1-Q3和L1-Q4象限内,因此对应于这些1级象限的位被设置为‘0’。
然后,将每个有效的1级象限细分成子象限(即,四个1×1图块区块,或者4个单独的图块),其在本文中被称为0级(L0)象限,并且覆盖掩码包括用于这些0级象限中的每一个的位。L2-Q1象限的L1-Q3象限被细分成四个象限(1×1图块区块)。在此示例中,图元1902或1904中的至少一个至少部分地落在L2-Q1象限的L1-Q3象限的L0-Q2和L0-Q4象限内,因此对应于这些0级象限的位被设置为‘1’。图元1902或1904都不至少部分地落在L2-Q1象限的L1-Q3象限的L0-Q1或L0-Q3内,因此对应于这些0级象限的位被设置为‘0’。L2-Q1象限的L1-Q4象限被细分成四个象限(1×1图块区块)。在此示例中,图元1902或1904中的至少一个至少部分地落在这些0级象限中的每一个内,因此对应于这些0级象限的位被设置为‘1’。L2-Q2象限的L1-Q3象限被细分成四个象限(1×1图块区块)。在此示例中,图元1902或1904中的至少一个至少部分地落在这些0级象限中的每一个内,因此对应于这些0级象限的位被设置为‘1’。L2-Q4象限的L1-Q1象限被细分成四个象限(1×1图块区块)。在此示例中,图元1902和1904中的至少一个至少部分地落在L2-Q4象限的L1-Q1象限的L0-Q1和L0-Q2象限内,因此对应于这些0级象限的位被设置为‘1’。图元1902或1904都不至少部分地落在L2-Q4象限的L1-Q1象限的L0-Q3或L0-Q4内,因此对应于这些0级象限的位被设置为‘0’。
现在参考图20,其示出用于包括单个图元2002的图元块的图7的L2-0图块组的示例覆盖掩码2000。在此示例中,‘1’指示对应的象限对于图元块是有效的,而‘0’指示对应的象限对于图元块不是有效的。
用于包括图元2002的图元块的图块粒度/分辨率边界框2004是4×3图块区块。在此示例中,L2-0图块组完全包围边界框2004,并且因此相关图块区块是落在边界框2004内的4×3图块区块。包括相关图块区块的最小s x s图块区块(其中s是2的幂次方)是4×4图块区块。因此,扩展的相关图块区块2006是4×4图块区块。4×4扩展的相关图块区块2006被划分成四个象限(即,四个2×2图块区块),其在本文中被称为1级(L1)象限。在此示例中,象限1(Q1)是2×2图块的左上象限,象限2(Q2)是2×2图块的右上象限,象限三3(Q3)是2×2图块的左下象限,并且象限4(Q4)是2×2图块的右下象限。如图20所示,图元2002至少部分地落在由每个1级象限覆盖的渲染空间的区域内,因此对应于这些1级象限的位被设置为‘1’。
然后,将每个有效的1级象限(L1-Q1、L1-Q2、L1-Q3和L1-Q4)细分成子象限(即,四个1×1图块区块),其在本文中被称为0级(L0)象限,并且覆盖掩码包括用于这些0级象限中的每一个的位。L1-Q1象限被细分成四个象限(1×1图块区块)。在此示例中,图元2002至少部分地落在L1-Q1象限的L0-Q4象限内,因此对应于0级象限的位被设置为‘1’。图元2002未至少部分地地落在L1-Q1象限的L0-Q1、L0-Q2和L0-Q3象限内,因此对应于这些0级象限的位被设置为‘0’。L1-Q2象限被细分成四个象限(即,四个1×1图块区块)。在此例中,图元2002至少部分地落在L1-Q2象限的L0-Q3和L0-Q4象限内,因此对应于这些0级象限的位被设置为‘1’。图元2002未至少部分地落在L1-Q2象限的L0-Q1和L0-Q2象限内,因此对应于这些0级象限的位被设置为‘0’。L1-Q3象限被细分成四个象限(即,四个1×1图块区块)。在此示例中,图元2002至少部分地落在L1-Q3象限的L0-Q1、L0-Q2和L0-Q4象限内,因此对应于这些0级象限的位被设置为‘1’。图元2002未至少部分地落在L1-Q3象限的L0-Q3象限内,因此对应于此0级象限的位被设置为‘0’。L1-Q4象限被细分成四个象限(即,四个1×1图块区块)。在此示例中,图元2002至少部分地落在L1-Q4象限的L0-Q1、L0-Q2和L0-Q3象限内,因此对应于这些0级象限的位被设置为‘1’。图元2002未至少部分地落在L1-Q4象限的L0-Q4象限内,因此对应于此0级象限的位被设置为‘0’。
现在参考图21,其示出生成分层覆盖掩码的示例方法2100,所述分层覆盖掩码指示与图元块的边界框重叠的图块组中的哪些图块对于所述图元块是有效的。方法2100开始于步骤2102,其中从图元块的边界框标识相关图块区块。相关图块区块包含图块组中与所述图元块的边界框相交或重叠的那些图块,但可以包含其他图块。例如,在一些情况下,相关图块区块可以包含渲染空间中与图元块的边界框重叠的所有图块,而不管与边界框重叠的所有图块是否为图块组的部分。在图元块可以与多于一个图块组相关联的情况下,这可以允许每个图块组的图元块条目具有相同的覆盖掩码,使得对于所述图元块只需要生成一个覆盖掩码。然而,将相关图块区块限制为仅图块组中与所述图元块的边界框重叠的图块可允许每个图元块条目中的覆盖掩码较小。一旦已经标识出相关图块区块,所述方法就可以进行到步骤2104或步骤2106。
在步骤2104处,将相关图块区块扩展为包括相关图块区块的最小s x s图块区块,其中s是2的幂次方。这可以包括选择s为最小的二的幂次方,其等于或大于相关图块区块的最大边。例如,如上文关于图19和20所述,5×3相关图块区块可以被扩展为8×8图块区块(因为8是大于或等于5的最小的2的幂次方(最大边)),并且4×3相关图块区块可以被扩展为4×4图块区块(因为4是等于或大于4的最小的2的幂次方(最大边))。如上所述,在原始相关图块区块是具有2的幂次方个边的方形区块的情况下,原始相关图块区块可以与扩展的相关图块区块相同。
相关图块区块可以以任何合适的方式扩展。在一些情况下,相关图块区块可以被扩展到包围相关图块区块的s x s图块组,如图20所示。在其他情况下,相关图块区块可以总是在相同的方向上扩展。例如,如果要在X方向上扩展相关图块区块,则相关图块区块可以总是向右扩展,并且如果要在Y方向上扩展相关图块区块,则相关图块区块可以总是向下扩展。对于本领域技术人员来说,显然这些仅仅是示例,并且相关图块区块可以以任何适当的方式被扩展,只要光栅化逻辑能够确定相关图块区块如何被扩展,以便能够知道覆盖掩码的哪些位对应于渲染空间的哪些区域。一旦相关图块已被扩展,方法2100进行到步骤2106。
在步骤2106中,将相关图块区块(或相关片的扩展块)细分成象限,其中每个象限包括图块集合;然后将每个象限(即,形成所述象限的图块)添加到用于平铺的队列。例如,如果扩展的相关图块区块包括8×8图块区块,则扩展的相关图块区块被划分成4×4图块区块的四个象限。然后,将每个4×4图块区块添加到用于平铺的队列。一旦扩展的相关图块区块的象限已被添加到队列,方法2100进行到步骤2108。
在步骤2108处,选择队列中的第一象限(例如,图块区块)(即,队列的顶部或标头处的象限)。然后,方法2100进行到步骤2110。
在步骤2110处,判断所述图元块中的至少一个图元是否至少部分地落在所选象限的边界内。如果图元与由象限中的(一个或多个)图块覆盖的渲染空间的区域相交,则所述图元被称为至少部分地落在所述象限的边界内。
可以使用用于确定图元是否至少部分地落在象限的边界内的任何适当的平铺方法。术语“平铺方法”在本文中用来表示确定诸如图元的对象是否至少部分地落在渲染空间的区域的边界内的方法。一些平铺方法可能比其他方法更精确。在一些情况下,可使用简单的、不太准确的方法,例如简单的边界框方法,来确定图元是否至少部分地落在象限内,以便快速确定图元是否落在象限内。如所属领域的技术人员所知的,在边界框方法中,对包围基元的边界框进行标识(例如,包围基元顶点的最小轴对准边界框)。可以使用任何合适的方法来生成边界框。例如,可通过找到图元的顶点的最小和最大X和Y坐标且从这些坐标形成轴对准边界框来生成图元边界框。可以以任何粒度或分辨率生成边界框。例如,在一些状况下,边界框可以处于X和Y坐标分辨率(即,边界框可以由顶点的最大和最小X和Y坐标限定)。在其他情况下,边界框可处于图块分辨率(即,包围图元的最接近的图块边缘)。一旦已标识图元的边界框,便可在所述边界框与由象限中的图块覆盖的渲染空间的区域至少部分重叠的情况下确定所述图元至少部分地落在所述象限内。换句话说,如果图元的边界框至少部分地落在象限中的图块的边界内,则可确定所述图元至少部分地落在所述象限内。虽然可以使用边界框方法快速有效地确定图元是否至少部分地落在象限内,但这并不是“完美”的平铺,因为边界框通常大于图元,这可能导致图元被确定为在象限内,而实际上它不在象限内。
例如,图22示出四个示例象限2202、2204、2206和2208。如果使用简单的轴对准边界框方法来确定这些象限2202、2204、2206、2208中的哪些至少部分地落在图元2210,则生成在图元2210周围的边界框2212。由于边界框2212与所有象限2202、2204、2206、2208至少部分地重叠,所以可以确定图元2210至少部分地落在四个象限2202、2204、2206、2208中的每一个内,即使它实际上仅落在象限2204、2206、2208中的三个内或与其重叠。然而,当图元实际上不落在象限内时确定所述图元落在象限内将不会导致出错,并且将在光栅化阶段中简单地丢弃所述图元。然而,确定图元不落在其所落入的象限可在光栅化阶段中引起出错。因此,保守图块是有利的。换句话说,指示图元落在象限内(即使图元实际上不落在象限内)比不包含实际上落在象限内的图元更好。
然而,在其他情况下,可以使用更复杂和/或更精确的方法,例如完美平铺或接近完美平铺的方法,来确定图元是否落在象限内。在申请人的公开的GB专利申请2549789中描述了可以使用的示例完美平铺方法,该专利申请以引用方式并入本文中。
在一些情况下,用于确定图元块的哪些图元落在象限内的平铺方法可以针对不同级的象限而变化。例如,更简单的不太精确的平铺方法,例如边界框平铺方法,可以用于更高级的象限,而更精确的平铺方法,例如完美平铺或接近完美的平铺,可以用于更低级的象限(例如0级象限)。在一些情况下,完美或接近完美的平铺方法可以仅针对0级象限(即,仅包括一个图块的象限)执行。
回到图21,在一些情况下,确定图元块的至少一个图元是否至少部分地落在所选象限的边界内可以包括生成用于所选象限的图元掩码。图元掩码包括用于所述图元块中的每个图元的位,所述位指示所述图元是否至少部分地落在所述象限的边界内。例如,‘1’可指示对应图元至少部分地落在象限的边界内,并且‘0’可指示对应图元不落在象限的边界内。如果所选象限是0级象限,则图元掩码可以存储在图元条目的图元掩码区段中。然而,如果所选象限不是0级象限,则可以使用图元掩码来减轻步骤2108的后续迭代中的平铺负担。例如,如果所选象限是非零级象限并且确定在图元块中的至少一个图元至少部分地落在所述象限的边界内,则随后可以确定图元块的哪些图元落在所述象限的每个子象限内(即,可以针对所选象限的每个象限执行步骤2108)。在这些情况下,通过仅对根据图元掩码至少部分地落在象限内的图元执行平铺,可以减少完成子象限的步骤2108所需的时间和资源。对于不落在象限的图元不需要执行平铺,因为它们将不落在其子象限。
一旦确定了所述图元块的至少一个图元是否至少部分地落在所选象限的边界内,则方法2100进行到步骤2112。
在步骤2112处,如果在步骤2110确定在所述图元块中没有图元至少部分地落在所选象限的边界内,则方法2100进行到步骤2114,其中将‘0’添加到覆盖掩码,然后方法2100进行到步骤2116。然而,如果在步骤2110处确定所述图元块中的至少一个图元至少部分地落在所选象限的边界内,则方法2100进行到步骤2118,其中将‘1’添加到覆盖掩码,并且方法2100进行到步骤2120。
在步骤2120处,确定所选象限是否是0级象限(即,仅具有单个图块的象限)。如果在步骤2120确定所选象限是0级象限,则所述象限不能被进一步细分,并且方法2100进行到步骤2116。然而,如果在步骤2120处确定所选象限是非0级象限(即,所选象限包括至少两个图块),则所述象限可以被进一步细分,并且方法2100进行到步骤2122,其中所选象限被细分成子象限,并且每个子象限被添加到用于平铺的队列。在一些情况下,当在步骤2110中生成图元掩码时,图元掩码可以与队列中的每个子象限并排存储或与之相关联,以简化子象限的图元块中图元的平铺(即步骤2110)。一旦将子象限添加到队列,则方法2100进行到步骤2116。
在步骤2116处,从队列中移除所选象限,并且方法2100进行到步骤2124。在步骤2124处,确定队列中是否仍存在至少一个象限。如果在步骤2124处确定在队列中不再有象限,则方法2100结束。然而,如果在步骤2124处确定在队列中存在至少一个象限,则方法2100返回到步骤2108,在所述步骤中,选择队列中的第一象限或上象限用于平铺。
对于本领域技术人员来说,很明显这仅仅是生成覆盖掩码的一组示例步骤,并且在其他示例中,这些步骤可以以不同的次序执行和/或可以包括不同的和/或附加的步骤。例如,在一些情况下,在步骤2110中,除了确定图元是否至少部分地落在所选象限的边界内之外,可确定图元是否完全覆盖所选象限(即,图元完全覆盖由所选象限中的图块覆盖的渲染空间的区域)。在这些情况下,如果确定图元完全覆盖了所选象限,则图元块中的图元对所选象限的平铺可以停止,并且可以将‘1’添加到用于所选象限及其每个子象限的覆盖掩码。例如,如果所选象限是4×4图块区块,并且确定图元块中的图元完全覆盖所述象限(即,完全覆盖4×4图块区块中的每个图块),则可将‘1’添加到覆盖掩码:对于所述象限,对于所述4×4区块中的每个2×2图块区块(即,其每个1级象限),并且对于所述4×4区块中的每个单独图块(即,每个0级象限)。
在一些情况下,覆盖掩码可具有针对每个相关象限的多个位,而不是针对每个相关象限包括单个位的覆盖掩码,所述多个位指示:(i)图元块中的图元都不落在象限的边界内(即,象限对于图元块不是有效的);(ii)所述象限被所述图元块中的至少一个图元完全覆盖;或(iii)象限部分地被图元块中的图元覆盖。例如,‘00’可以指示所述象限对于所述图元块不是有效的,‘10’可以指示所述象限被完全覆盖,而‘11’可以指示所述象限被部分覆盖。在这些情况下,一旦确定象限被完全覆盖,则对应于所述象限的覆盖掩码的相关位可以被设置为‘10’,并且在子象限或其较低级象限的覆盖掩码中可以不包括信息。例如,如果所选象限是4×4图块区块,并且确定所述图元块中的图元完全覆盖所述象限(即,完全覆盖4×4图块区块中的每个图块),则可将‘10’添加到所述象限的覆盖掩码;且对于所述4×4区块中的每个2×2图块区块(即,其每个1级象限)及对于所述4×4区块中的每个单独图块(即,每个0级象限)可不将信息添加到覆盖掩码。尽管这使每象限的位数加倍,但是在许多高级象限被完全覆盖的情况下,这可以减小覆盖掩码的大小。
在上述示例覆盖掩码中,如果确定图元块中没有图元至少部分地落在象限内,则覆盖掩码不包括子象限的任何信息。例如,如果确定图元块中的图元均不落在包括2×2图块区块的象限,则覆盖掩码可不包括对应于其每个子象限(即,每个1×1区块)的位。在其他示例中,覆盖掩码可以包括用于分层结构中的每个象限的位,而不管是否确定图元块中的图元无一落在父象限内。这可以显著地增加覆盖掩码的大小,但是其可以使得解码覆盖掩码更简单和/或更有效。在这些情况下,一旦确定了没有任何图元块的图元落在所选象限内,则可以将‘0’添加到用于所述所选象限和用于其落在所选象限内的每个较低级象限的覆盖掩码。例如,如果确定图元块中的图元均不落在包括2×2图块区块的象限,则可将‘0’添加到所述象限的覆盖掩码,并且可将‘0’添加到其每个子象限(即,每个1×1图块区块)的覆盖掩码。
由于事实上扩展的相关图块区块可以覆盖大量的图块,因此在一些情况下,为了限制覆盖掩码的大小,每个覆盖掩码可以具有最大大小。这可能意味着从全覆盖掩码中丢弃多个位。这可能意味着覆盖掩码不包括每个相关象限的信息。例如,它可以仅具有低至1级象限的信息,并且可以不具有与0级象限相关的任何信息。在这些情况下,光栅化逻辑可被配置为将1级信息应用于其所有子象限(即,0级象限)。例如,如果覆盖掩码不包括任何0级象限的信息,但是覆盖掩码指示1级象限有效,则光栅化逻辑可以假设其每个0级象限有效。
在生成覆盖掩码时或者在生成完整或完全覆盖掩码之后,可以限制覆盖掩码的大小。例如,在一些情况下,在完成步骤2118或2114之后,可以确定覆盖掩码是否已经达到最大大小(例如,最大位数)。如果确定覆盖掩码已经达到最大大小,则方法2100可以结束。在其他情况下,方法2100可以整体完成以生成完整或完全覆盖掩码,然后例如可以从完全覆盖掩码中去除多个LSB,使得其不超过最大大小。在一些情况下,对应于最高级象限的信息可以存储在最高有效位(MSB)中,并且对应于最低级象限的信息可以存储在最低有效位(LSB)中,如图19和20所示,以便实现跨越边界框的均匀覆盖损失。
在其他情况下,为了减小图元块条目的大小,可以使用压缩算法来压缩覆盖掩码。可以使用有损或无损压缩算法来压缩覆盖掩码。在一些示例中,在覆盖掩码包括用于每个相关象限的位的情况下,覆盖掩码中的相邻位对可以一起被逻辑或运算(OR'd)(如果‘1’指示象限有效,或者如果‘0’指示象限有效,则一起被逻辑和运算(AND'd))并且被OR运算(或AND运算)的结果替换。这样,掩码的每个位表示两个象限。这可以重复多次以实现覆盖掩码的最大长度。则当光栅化逻辑在压缩覆盖掩码中看到‘1’时,它将所述位对应的两个象限视为有效。这可以显著地减小覆盖掩码的大小,但是导致较不精确的覆盖掩码。具体地,因为如果相邻的位对的任何一个位指示象限有效,则相邻的位对被一起逻辑或运算,所以即使它们中仅有一个有效,两个位对也将被视为有效。在其他情况下,覆盖掩码的大小可以通过以下各项的组合来减小:(i)移除多个LSB;以及(ii)应用有损或无损压缩算法。可以在压缩之前执行位的移除,或者可以在移除位之前执行压缩。
在参考图21描述的示例方法中,从上到下生成覆盖掩码,即,通过相对于扩展的相关图块区块的最高级象限平铺在图元块中的图元,然后相对于相关的较低级象限平铺在图元块中的图元。然而,在其他示例中,覆盖掩码可以从下到上生成。例如,在其他情况下,可以针对扩展的相关图块区块中的每个图块对图元块中的图元进行图块化,并且可以根据图块化的结果生成覆盖掩码。例如,可以为扩展的相关图块区块中的每个图块确定所述图元块的哪些图元至少部分地落在所述图块的边界内,以由此生成图元掩码;并且覆盖掩码可以从图元掩码生成。
平铺引擎
现在参考图23,其示出被配置为生成信息的示例平铺引擎2300,这里将所述信息称为平铺信息,其指示渲染中的哪些图元落在渲染空间的每个图块内。平铺引擎2300可被配置为实施图6的方法600。例如,可将渲染空间划分成多个图块(例如,如关于图1和2所描述),并且可生成图块组的多级分层结构,其中所述分层结构中的每一级包括特定大小的图块的非重叠组,并且较高级组包括比较低级组多的图块(例如,如关于图6和7所描述)。所述平铺引擎被配置为接收图元块(或标识图元块的信息);以及将每个图元块与所述分层结构的一个或多个图块组相关联,使得所述图元块不与多于最大数目的图块组相关联,但是如果所述图元块与渲染图块有关,则所述图元块与包括所述图块的至少一个图块组相关联。然后,平铺引擎基于关联为图块组的分层集中的一个或多个图块组生成控制流。
图23的平铺引擎2300包括图块组选择器逻辑2302和控制流生成器2304。
图块组选择器逻辑2302被配置为将图元块与分层结构中的一个或多个图块组相关联,使得所述图元块不与多于最大数目的图块组相关联,但是如果所述图元块与渲染图块有关,则所述图元块与包括所述图块的至少一个图块组相关联。图块组选择器逻辑2302可使用任何合适的方法来选择将与图元块相关联的图块组。例如,在图元块可能仅与单个图块组相关联的情况下,则图块组选择器逻辑2302可使用图9的方法900来选择将与图元块相关联的图块组,其中所述图元块与图块组的分层结构中的包围所述图元块的边界框的最小图块组相关联。在其他情况下,在图元块可与至多g个图块组(其中g大于一)相关联的情况下,则图块组选择器逻辑2302可被配置为使用图12的方法1200来选择将与图元块相关联的图块组,其中图元块与分层结构中的至多g个图块组中的包围所述图元块的边界框的最小集合(例如,就图块的数目而言)相关联。所述组中的图块组可全部处于所述分层结构的同一级,或其可处于所述分层结构的不同级。一旦图块组选择器逻辑2302已将图元块与图块组相关联,图块组选择器逻辑2302便可输出标识所述关联的信息。
在图块组选择器逻辑2302使用图元块的边界框来确定哪些图块组与所述图元块相关联的情况下,平铺引擎2300还可以包括边界框生成器2306,其被配置为接收图元块并为其生成边界框。上文已相对于图6描述了用于生成或标识图元块的边界的若干示例方法。可以以任何粒度生成边界框。例如,边界框可以处于X或Y坐标粒度或图块粒度。一旦已生成图元块的边界框,边界框生成器2306便可被配置为输出标识所述图元块的边界框(例如,边界框的坐标)的信息。
控制流生成器2304被配置为生成与至少一个图元块相关联的每个图块组的控制流。用于图块组的控制流包括用于与所述图块组相关联的每个图元块的图元块条目。在一些情况下,控制流生成器2304被配置为接收图元块和标识与所述图元块相关联的一个或多个图块组的信息(例如,由图块组选择器逻辑2302输出的信息)。所述控制流生成器然后被配置为,对于所述图元块所关联的每个图块组:(i)生成包括标识所述图元块的信息的图元块条目;以及(ii)将所述图元块条目添加到对应的图块组的控制流中(例如,将图元块条目作为对应的图块组的控制流的一部分存储在存储器中)。在一些情况下,标识图元块的信息是标识存储器中的图元块的位置的信息。在这些情况下,控制流生成器2304还可以接收标识存储器2308中的图元块的位置的信息(例如,地址)。
如上所述,在一些情况下,图元块条目可以包括附加信息。例如,在一些情况下,图元块条目可以包括提供关于图元块的信息(例如,图元块中的图元的数目等)和/或图元块条目的信息(例如,诸如在图元块条目中存在哪些可选信息)的标头。例如,如上参考图18所述,标头区段1802可以包括:条目类型字段1812;块字段1814中的图元的数目;基址存在字段1816;边界框(BB)最小X存在字段1818;边界框(BB)最大X存在字段1820;边界框(BB)最小Y存在字段1822;边界框(BB)最大Y存在字段1824;全覆盖字段1826;图元掩码压缩字段1828;以及地址偏移字段1830。对于本领域技术人员来说,这仅仅是一个示例的标头,并且其他标头可以具有另一种格式、附加信息和/或不同的信息。在图元块条目可以包括标头或标头区段的情况下,控制流生成器2304可以包括标头生成器2310,其被配置为生成每个图元块条目的标头或标头区段。
在一些情况下,图元块条目可另外地或替代地包括边界框信息,所述边界框信息标识所述图元块的边界框的坐标和/或位置。在图元块条目中包围边界框信息可允许光栅化逻辑快速确定图块组中的图块对于对应的图元块是否有效(且因此不必从存储器检索所述图元块来渲染所述图块)。具体地,如果图块落在所述图元块的边界框之外,则可以快速地确定图块对于所述图元块不是有效的。例如,边界框可以由以下坐标定义:在渲染空间中的最小X坐标、最大X坐标、最小Y坐标和最大Y坐标。如上文所描述,在一些情况下,如果所述图元块的边界框不大于或等于由所述图块组中的图块覆盖的渲染空间的区域,则可将所述边界框的一个或多个坐标包含于所述图元块条目中。例如,在一些情况下,图元块条目可以包含位于由图块组中的图块覆盖的渲染空间的区域内的任何边界框坐标。换句话说,位于由图块组中的图块覆盖的渲染空间的区域上或外部的任何边界框坐标可不包含于图元块条目中。在图元块条目可以包括边界框信息的情况下,控制流生成器2304可被配置为接收标识边界框的信息(例如,从边界框生成器2306),并且将边界框信息与对应的图块组的坐标进行比较以确定是否将边界框信息添加到图元块条目。如果确定边界框信息将被添加到所述图元块条目,则控制流生成器2304可以被配置为在将图元块条目存储在存储器2308中之前将边界框信息添加到所述图元块条目。
在一些情况下,图元块条目可另外地或替代地包括覆盖掩码,所述覆盖掩码指示与所述图元块的边界框重叠的哪些图块对于所述图元块有效。如上所述,在一些情况下,覆盖掩码可以被实现为通过将相关图块区块划分成连续更小的区域并且在覆盖掩码中存储每个区域的信息而生成的分层覆盖掩码。例如,相关图块区块可以被连续地划分成图块的象限,并且覆盖掩码可以包括用于每个象限的信息(例如,位),所述信息指示图元块对于所述象限是否有效(例如,在图元块中是否存在至少一个图元,所述图元至少部分地落在由象限中的图块覆盖的渲染空间的区域内)。在一些情况下,相关图块区块可以首先被扩展为具有二的幂次方个边的方形图块区块。在图元块条目可以包括覆盖掩码的情况下,控制流生成器2304可以包括覆盖掩码生成器2312。覆盖掩码生成器2312可以被配置为通过接收图元块来生成用于图元块条目的覆盖掩码;从所述图元块的所述边界框标识相关图块区块;以及将用于所述图元块的相关图块区块(或扩展的相关图块区块)划分成连续更小的区域(例如象限),并且确定所述图元块中的任何图元是否落在每个区域(象限)内。覆盖掩码生成器2312可以例如实现图21的方法2100。
在一些情况下,图元块条目可以另外地或替代地包括一个或多个图元掩码。每个图元掩码指示哪些图元与渲染一个或多个图块的集合相关。如果图元至少部分地落在由图块集合覆盖的区域的边界内,则所述图元可以被认为与所述组图块相关。每个图元掩码可以包括用于所述图元块中的每个图元的位,所述位指示所述图元是否与渲染所述图块集合相关。在一些情况下,图元块条目可以包括用于所述图块组中的每个图块的图元掩码,所述图元掩码对于所述图元块有效,其指示所述图元块中的哪些图元与渲染所述图块相关。在其他情况下,图元块条目可以包括用于覆盖掩码中的每个有效最低级象限的图元掩码,其可以是或可以不是单个图块象限。具体地,如上所述,覆盖掩码可以具有最大大小(例如,最大位数),因此它可以不包括针对分层结构中的所有区域(例如,象限)的信息。例如,覆盖掩码可以仅包括1级象限的信息,即,覆盖掩码可以不包括0级象限(即,单个图块象限)的信息。在这些情况下,图元块条目可以包括用于对图元块有效的每个1级象限的图元掩码。在图元块条目可以包括一个或多个图元掩码的情况下,控制流生成器2304可以包括图元掩码生成器2314。图元掩码生成器2314被配置为接收图元块和标识渲染空间的区域(例如,图块或图块集合)的信息,并且确定所述图元块中的哪些图元至少部分地落在所述区域内,并且基于所述确定而生成用于所述区域的图元掩码。图元掩码生成器2314可以使用任何适当的平铺方法(例如边界框方法、完美平铺方法或接近完美平铺方法)来确定图元是否至少部分地落在渲染空间的区域的边界内。
在控制流生成器2304包括覆盖掩码生成器2312和图元掩码生成器2314的情况下,覆盖掩码生成器2312可以使用图元掩码生成器2314来生成或创建覆盖掩码。例如,在一些情况下,覆盖掩码生成器2312可以被配置为向图元掩码生成器提供每个象限的坐标,并且图元掩码生成器2314可以返回用于生成覆盖掩码的每个象限的图元掩码。在其他情况下,图元掩码生成器2314可被配置为生成用于相关图块区块中的每个图块的图元掩码,并且覆盖掩码生成器2312可从图元掩码生成覆盖掩码。
在一些情况下,控制流生成器2304还可以被配置为在存储器2308中的图元块条目之间交织其他类型的条目。例如,如上所述,在一些情况下,控制流可以存储在存储器中的控制流块中,其中每个块具有最大条目数目或最大大小。在这些情况下,控制流生成器2304可以被配置为通过将条目添加到控制流块直到达到条目的最大数目或最大大小来构建控制流块。一旦达到条目的最大数目减去一,或者最大大小减去链接条目的大小,控制流生成器2304可以被配置为向控制流块添加链接条目,以指示下一个控制流块将被存储在存储器中的何处,然后将控制流块写入存储器。控制流生成器2304可以被配置为继续构建控制流块,直到已经生成最后一个图元块条目。
在一些情况下,控制流生成器2304可以被配置为,一旦其已经生成并存储了用于所述图块组的最后的图元块条目,就将终止条目(如上所述)存储在存储器中以指示用于所述图块组的控制流的结束。
如上所述,在某些情况下,对于分层结构中的每个图块组,可以有存储在存储器2308中的标头和尾指针(见图17)。用于图块组的标头可以包括标识所述图块组的控制流在存储器中的位置的信息(例如,控制流的开始的地址)。用于图块组的尾指针可以包括标识控制流中的下一条目将被存储在存储器2308中的位置的信息。在一些情况下,标头和/或尾指针可以包括附加信息,诸如指示对应的位置/地址信息是否有效的有效位。在存在用于分层结构的每个图块组的标头和尾指针的情况下,控制流生成器2304可以被配置为,对于与图元块相关联的每个图块组:一旦所述图元块条目已经生成了用于所述图块组的图元块条目,则读取所述尾指针以标识所述图元块条目将被存储在存储器中的位置,将所述图元块条目写入到存储器中的所标识的位置,并且更新所述尾指针以指向在所述新添加的图元块条目之后的存储器的下一可寻址块。
光栅化阶段
在本文所述的示例中,将渲染空间划分成多个图块(例如,如相对于图1所述),并且由所述多个图块形成图块组的多级分层结构,其中每一级包括图块组,并且较高级组具有比较低级组多的图块(例如,如相对于图7所述)。在一些情况下,小图块可以是在分层结构的每一级的一个组的成员。针对所述分层结构的每个图块组生成控制流,所述控制流包括用于与所述图块组相关联的每个图元块的图元块条目。图元块条目指示对应的图元块与渲染图块组中的至少一个图块相关。只要图元块与渲染图块相关,则所述图元块就与包括所述图块的至少一个图块组相关联,则就可根据本文所述的方法中的任一者使所述图元块与所述图块组相关联。
在光栅化阶段中,基于与渲染每个图块相关的图元(例如,至少部分地落在图块的边界内的图元)来渲染所述图块。因此,在光栅化阶段中,当光栅化逻辑准备好渲染图块时,它分析存储在存储器中的控制流以标识与渲染所述图块相关的图元。然后,从存储器中获取相关图元,并使用相关图元来渲染图块。在本文所述的示例中,标识与渲染图块相关的图元的控制流是用于图块形成其一部分的图块组的控制流。这些图块组可被称为图块的相关图块组。由于图块组是分层的,因此每个图块将属于在分层结构中的每一级的组。因此,如果存在N个级,则将存在N个相关图块组。例如,如图24中所示,如果图1的8×8图块区块被划分成如图7中所示的四个级的图块组(编号为0到3),则图块3(T3)形成L0-3、L1-0、L2-0和L3-0图块组中的每一者的一部分,并且因此T3的相关图块组是L0-3、L1-0、L2-0和L3-0图块组。因此,标识与渲染当前图块相关的图元可以包括:(i)标识所述当前图块的所述相关图块组;(ii)从存储器中获取每个相关图块组的控制流;以及(iii)分析所获取的控制流以标识与渲染所述图块相关的所述图元。
现在参考图25,其示出示例控制流解码器2500,其被配置为从存储在存储器中的控制流中标识与渲染当前图块相关的图元。图25的示例控制流解码器2500包括控制流获取逻辑2502和控制流分析器2504。
控制流获取逻辑2502被配置为从存储器获取用于当前图块的每个相关图块组的控制流。控制流获取逻辑2502可以接收标识相关图块组的控制流在存储器2506中的位置的信息(例如,地址);从存储器2506中的所标识的位置获取所述相关图块组的所述控制流;并将所取出的控制流输出到控制流分析器2504。如上文所描述,当前图块的相关图块组是当前图块所属或形成其一部分的分层结构中的图块组。由于图块组是分层的,因此每个图块将属于在分层结构中的每一级的组。因此,如果在所述分层结构中存在N个级,则将存在N个相关图块组。
在一些情况下,控制流解码器2500可以包括控制流位置确定逻辑2508,其被配置为接收标识当前图块的信息;确定所述当前图块的所述相关图块组的所述控制流在存储器中的所述位置;以及将标识存储器中的所确定的位置的信息(例如,地址)输出到控制流获取逻辑2502。在将标识存储器中的对应控制流的位置的标头存储在存储器中的每个图块组的情况下,控制流位置确定逻辑2508可被配置为标识当前图块的相关图块组,并且读取相关图块组中的每一者的标头以标识所述图块组的控制流在存储器中的位置。
在一些情况下,每个图块组标头还可以包括有效信息(例如,有效位),所述有效信息指示标识所述控制串流在所述存储器中的所述位置的信息是否有效。标识控制流在存储器中的位置的信息可能是无效的,因为所述图块组的控制流为空(例如,没有与所述图块组相关联的图元块,因此在控制流中没有图元块条目)。在这些情况下,控制流位置确定逻辑2508可被配置为一旦其已取回图块的标头,就确定所述标头是否指示控制流为空(例如,有效位是否未被设置)。如果控制流位置确定逻辑2508确定所述图块组的控制流为空,则控制流位置确定逻辑2508可以输出指示所述图块组的控制流为空的信息。然而,如果控制流位置确定逻辑2508确定所述图块组的控制流不为空,则控制流位置确定逻辑2508可以输出标识控制流在存储器中的位置(例如,地址)的信息。
控制流分析器2504被配置为分析由控制流获取逻辑2502获取的相关图块组的控制流,以标识与渲染当前图块相关的图元。例如,控制流分析器2504可以被配置为从控制流获取逻辑2502接收用于相关图块组的控制流;分析所述控制流以标识与渲染所述当前图块相关的所述图元;以及输出指示或标识与渲染当前图块相关的图元的信息。在一些情况下,指示或标识与渲染当前图块相关的图元的信息可以包括标识与渲染当前图块相关的一个或多个图元块的信息,并且任选地包括标识与渲染当前图块相关的那些图元块中的图元(例如,图元掩码)的信息。
分析控制流以标识与渲染当前图块相关的图元可以包括分析用于相关图块组的控制流的图元块条目。在一些情况下,每个图元块条目可以简单地标识对应的图元块,但是可以不包括关于所述图块组中的哪些图块对于所述图元块有效的任何进一步的信息。在这些情况下,控制流分析器2504可以被配置为假定当前图块对于控制流中标识的每个图元块是有效的,并且因此可以输出用于这些图元块中的每个图元块的信息,所述信息将所述图元块标识为与渲染当前图块相关。
在其他情况下,每个图元块条目可以包括指示所述图块组中的哪些图块对于对应的图元块有效的信息。例如,如上所述,每个图元块条目可以包括标头、边界框信息和/或覆盖掩码。在这些情况下,控制流分析器2504可以被配置为分析每个图元块条目,以确定当前图块对于对应的图元块是否有效。例如,控制流分析器2504可以首先分析标头以确定标头是否指示当前图块对于对应的图元块是有效的(例如,如果设置了全覆盖字段1826,则标头可以指示当前图块对于对应的图元块是有效的)。如果所述标头指示所述当前图块对于所述图元块是有效的,则所述控制流分析器可以输出将所述图元块标识为对于所述当前图块有效的信息。然而,如果标头没有指示当前图块对于所述图元块是有效的,则控制流分析器可以分析边界框信息,如果存在的话,以确定当前图块是否落在所述图元块的边界框内或与所述图元块的边界框相交。如果确定当前图块不落在所述图元块的边界框内,则当前图块对于所述图元块不是有效的,并且所述图元块不被标识为与渲染当前图块相关。然而,如果确定当前图块确实落在所述图元块的边界框内,则控制流分析器2504可以分析所述覆盖掩码,如果存在的话,以确定当前图块对于所述图元块是否有效。如果覆盖掩码指示当前图块对于所述图元块是有效的,则所述图元块可以被标识为与渲染所述图块相关。然而,如果覆盖掩码指示当前图块对于所述图元块不是有效的,则所述图元块不被标识为与渲染当前图块相关。
如上所述,在某些情况下,在一个图元块条目中标识对应的图元块的信息是标识所述图元块在存储器中的位置的信息。在这些情况下,控制流分析器2504可以被配置为,针对当前图块对其有效的每个图元块,分析对应的图元块条目以标识所述图元块在存储器中的位置。在一些情况下,标识所述图元块在存储器中的位置的信息可以是所述图元块在存储器中的地址。在一些情况下,图元块条目可以包括图元块在存储器中的完整地址。在其他情况下,图元块条目可以包括偏移,当与基址组合时,所述偏移生成存储器中的图元块的完整地址。在后一种情况下,控制流分析器可以被配置为跟踪控制流的当前基址,并且如果它经由偏移接收到地址,则它可以将所述偏移与基址组合以生成完整的地址。
在一些情况下,在光栅化阶段中处理与渲染当前图块相关的图元块的次序是重要的。例如,可以在几何结构处理阶段中(例如,通过几何结构处理逻辑)以特定次序处理图元,并且重要的是,以相同次序处理与图块相关的图元。图元将被处理和光栅化的次序称为绘制次序。例如,如果在几何结构处理阶段中以数值次序处理图元0到20,并且图元0、5、7、8和20与渲染特定图块相关,则重要的是当在光栅化阶段中处理所述图块时,首先处理图元0,接着处理图元5,接着处理图元7等等。在一些情况下,将依次用图元部分地或全部地填充图元块,以便在几何结构处理阶段中处理图元,并且将以填充图元块的次序存储图元块,使得在几何结构处理阶段中越早填充图元块,存储器地址越低。光栅化阶段然后可以通过按照将图元块存储在存储器中的次序处理图元块来确保按次序处理图元。例如,在几何结构处理阶段中填充的第一图元块可以存储在存储器中的最低存储器地址处,并且在几何结构处理阶段中填充的最后图元块可以存储在存储器中的最高地址处。在这些情况下,控制流分析器2504可以被配置为基于相关的图元块在存储器中的位置来确定相关的图元块将被输出的次序。例如,可以首先输出存储器中具有最低地址的当前图块的相关图元块,并且可以最后输出存储器中具有最高地址的当前图块的相关图元块。
在控制流分析器2504能够(例如,具有足够的存储器)存储当前图块的所有相关图元块的信息的情况下,控制流分析器2504可以在其已经标识出相关图元块之后,基于相关图元块在存储器中的位置对相关图元块进行排序。控制流分析器2504然后可以以所述次序输出相关的图元块(或标识相关图元块的信息)。然而,可能存在可能需要大存储器的大量相关图元块。在标识所有相关的图元块之后执行相关的图元块的排序还可以延迟输出标识第一相关图元块的信息,这可能导致下游部件停滞。
因此,为了减少控制流分析器2504所需的存储器的量,并且为了减少用于输出标识第一相关图元块的信息的时间,控制流分析器2504可以被配置为每次针对每个相关图块组存储多达一个相关图元块的信息,并且每个周期选择存储器中具有最低地址的所存储的相关图元块。因此,如果在分层结构中存在N个级,则将存在N个相关图块组,因此控制流分析器可以被配置为一次存储与多达N个相关图元块有关的信息。在这些示例中,控制流获取逻辑2502可以被配置为初始地从非空的相关控制流中的每一个获取第一图元块条目,并将其提供给控制流分析器。控制流分析器2504可以被配置为确定当前图块对于与那些条目相对应的图元块是否有效。如果所述块对于那些图元块中的任何一个都无效,则控制流分析器2504可以从对应的控制流请求下一个图元块条目,直到控制流分析器对于非空控制流中的每一个具有相关的图元块条目为止。控制流分析器2504然后可以选择具有最低地址的图元块来输出。控制流分析器2504然后可以从所选图元块所关联的控制流中请求下一图元块条目。重复所述过程,直到在相关控制流中没有未被分析的图元块条目。参考图26描述了用于实现这一点的示例方法。
现在参考图26,其示出可以由图25的控制流解码器2500实现的、从上述控制流中标识与渲染当前图块相关的图元的示例方法2600。方法2600开始于步骤2602,其中控制流位置确定逻辑标识当前图块的相关图块组且标识相关图块组的控制流在存储器中的位置(例如,从相关图块组的标头)。这些控制流在本文中可以被称为用于当前图块的相关控制流。控制流位置确定逻辑可以任选地确定任何控制流是否为空(例如,根据标头的有效位)。然后,控制流位置确定逻辑为每个相关的控制流向控制流获取逻辑2502输出标识其存储器中的位置的信息或指示控制流为空的信息。然后,方法2600进入步骤2604,其中由控制流获取逻辑选择相关控制流之一。然后,方法2600进入步骤2606,在所述步骤中,控制流获取逻辑确定所选择的相关控制流是否为空(例如,根据从控制流地址解码器接收到的信息)。如果在步骤2606处确定所选择的控制流为空,则方法2600进行到步骤2608。然而,如果在步骤2606处确定所选择的控制流不为空,则方法2600进行到步骤2610。
在步骤2610处,控制流获取逻辑从存储器中读取用于所选择的控制流的第一图元块条目。然后,可以将所获取的图元块条目提供给控制流分析器。然后,方法2600进入步骤2612,其中控制流分析器确定当前图块对于对应于所述图元块条目的图元块是否有效(例如,根据如上所述的图元块条目的标头、边界框信息和/或覆盖掩码)。如果在步骤2612确定当前小图块对于对应的图元块是有效的,则方法2600进入步骤2614,在所述步骤中,标识与图元块条目对应的图元块的信息被添加到相关图元块列表中。然后,方法2600进行到步骤2608。然而,如果在步骤2612确定当前图块对于对应的图元块不是有效的,则方法2600进入步骤2616,在所述步骤(例如,通过控制流获取逻辑)确定对于所选择的相关控制流是否有任何更多的图元块条目。如果在步骤2616处确定在所选择的相关控制流中存在至少一个其他的图元块条目,则所述方法进行到步骤2618,其中从存储器中读取下一个图元块条目,并且对于所述图元块条目重复步骤2612和2614。然而,如果在步骤2616处确定在所选择的相关控制流中没有更多图元块条目,则所述方法进行到步骤2608。
在步骤2608处,在确定(i)所选择的相关控制流为空之后,(ii)所选择的相关控制流不具有与当前图块相关的任何图元块条目;或者(iii)所选择的相关控制流具有与当前图块相关的图元块条目,并且标识对应的图元块的信息已经被添加到相关图元块列表中,则确定是否存在尚未被分析的另一相关控制流。如果在步骤2608处确定存在至少一个尚未被分析的相关控制流,则方法2600进行到步骤2620,在所述步骤中选择下一个相关控制流,并且对所述控制流重复步骤2606和2010-2018。然而,如果在步骤2608处确定不存在尚未分析的相关控制流,则方法2600进行到步骤2622。
在步骤2622处,在标识图元块的信息已经被添加到用于每个非空的相关控制流的相关图元块列表中之后,所述控制流分析器确定在所述列表中是否存在任何图元块,所述每个非空的相关控制流包括与当前图块相关的至少一个图元块条目。如果在步骤2622处确定在列表中没有图元块,则方法2600结束。然而,若在步骤2622处确定在所述列表中有至少一个图元块,则方法2600进行到步骤2624。
在步骤2624处,选择与绘制次序中的最早图元相关联的列表中的图元块,输出标识与渲染当前图块相关的所述图元块的信息,并且从列表中移除所选图元块。在一些情况下,还输出标识所选图元块中的与渲染当前图块相关的图元的信息(例如,如果图元块条目包括应用于当前图块的图元掩码,则可输出图元掩码)。在一些情况下,如上所述,与绘制次序中的最早图元相关联的图元块是在存储器中具有最低地址的图元块。一旦已选择并处理了图元块,方法2600进行到步骤2626。
在步骤2626处,(例如,通过控制流获取逻辑)确定在与在步骤2624中选择的图元块相关联的控制流中是否存在任何更多的图元块条目。如果在步骤2626处确定在控制流中没有与在步骤2624中选择的图元块相关的图元块条目,则所述方法返回到步骤2622。然而,如果在步骤2626处确定在与在步骤2624中选择的图元块相关联的控制流中还存在至少一个图元块条目,则方法2600进行到步骤2628,在所述步骤中,从存储器中读取所述控制流的下一个图元块条目。方法2600然后进行到步骤2630,在所述步骤中确定所述图元块条目是否与当前图块相关(例如,根据如上所述的标头、边界框信息和/或覆盖掩码)。如果在步骤2630处确定在步骤2628中检索的图元块条目与当前图块相关,则所述方法进行到步骤2632,在所述步骤中标识对应的图元块的信息被添加到列表,然后方法2600返回到步骤2622。然而,如果在步骤2630处确定在步骤2628中检索的图元块条目与当前图块不相关,则方法2600返回到步骤2626,以确定是否存在另一图元块条目。
因此,在图26的方法2600中,编译与当前图块相关的每个相关控制流中的第一图元块的列表(步骤2602至2620)。然后选择与绘制次序中最早图元有关的列表中的图元块,并输出标识所述图元块的信息。与所选图元块处于相同控制流中的下一个图元块被添加到列表中,所述下一个图元块与当前图块相关。一旦控制流中与当前图块相关的所有图元块都已被添加到所述控制流已被处理的列表,并且没有另外的条目被添加到所述控制流的列表。重复所述过程,直到在与当前图块相关的相关控制流中标识的所有图元块都被添加到列表中,并且标识那些图元块的信息已经被输出。
图形处理系统
现在参考图27,其示出包括图23的平铺引擎2300和图25的控制流解码器2500的示例基于平铺的图形处理系统2700。图27的图形处理系统2700与图2的图形处理系统200的相似之处在于,其包括几何结构处理逻辑2704和光栅化逻辑2706;几何结构处理逻辑2704包括变换逻辑2708和图元块生成器2710(每个功能如图2的对应部件);而光栅化逻辑2706包括光栅化器2714、HSR逻辑2716和纹理化/着色逻辑2718(其中的每一个用作上述图2的对应部件)。然而,图27的几何结构处理逻辑2704包括被配置为生成图块组的多级分层结构并且存储分层结构中的每个图块组的控制流的平铺引擎2300,而不是包括被配置为存储每个图块的显示列表的平铺引擎的几何结构处理逻辑。图27的光栅化逻辑2706还包括控制流解码器2500,其被配置为通过对存储在存储器27023中的相关控制流进行解码来生成每个图块的显示列表(例如,输出相关图元块)。
图28示出其中可以实现本文所述的平铺引擎、控制流解码器和/或图形处理系统的计算机系统。计算机系统包括CPU 2802、GPU 2804、存储器2806和其他装置2814,诸如显示器2816、扬声器2818,以及相机2820。在GPU 2804上实现处理块2810(其可对应于本文所述的平铺引擎、控制流解码器和/或图形处理系统)。在其他示例中,处理块2810可以在CPU2802上实现。计算机系统的部件可以通过通信总线2822彼此进行通信。
图2、23、25和27的平铺引擎、控制流解码器和图形处理系统被示为包括多个功能块。这仅是示意性的,并不旨在限定此类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应当理解,本文描述为由平铺引擎、控制流解码器或图形处理系统形成的中间值不需要在任何时候由平铺引擎、控制流解码器或图形处理系统物理地生成,并且可以仅表示方便地描述由平铺引擎、控制流解码器或图形处理系统在其输入和输出之间执行的处理的逻辑值。
本文所述的平铺引擎、控制流解码器和图形处理系统可以在集成电路上的硬件中实现。本文所述的平铺引擎、控制流解码器和图形处理系统可以被配置为执行本文所述的任何方法。一般来讲,上文所述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如,固定逻辑电路系统)或其任何组合中实现。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或其任何组合。在软件实现方式的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,所述程序代码在处理器上执行时执行指定任务。本文中所描述的算法和方法可以由执行代码的一个或多个处理器执行,所述代码使处理器执行算法/方法。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存存储器、硬盘存储器以及可以使用磁性、光学和其他技术来存储指令或其他数据并且可以由机器存取的其他存储器装置。
如本文中所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包含以机器语言、解释语言或脚本语言表达的代码。可执行代码包含二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用例如C、Java或OpenCL等编程语言代码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解释、编译、运行时,这些软件、固件、脚本、模块或库使支持可执行代码的计算机系统的处理器执行由所述代码指定的任务。
处理器、计算机或计算机系统可以是任何种类的装置、机器或专用电路,或其集合或一部分,它具有处理能力使得可以执行指令。处理器可以是任何种类的通用或专用处理器,例如CPU、GPU、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)等。计算机或计算机系统可以包括一个或多个处理器。
本发明还意图涵盖限定如本文中所描述的硬件的配置的软件,例如硬件描述语言(HDL)软件,用于设计集成电路或用于配置可编程芯片以执行所要功能。也就是说,可以提供一种其上编码有集成电路定义数据集形式的计算机可读程序代码的计算机可读存储介质,当在集成电路制造系统中处理(即,运行)时,该计算机可读程序代码将所述系统配置成制造被配置为执行本文所述的任何方法的平铺引擎、控制流解码器或图形处理系统,或者制造包括本文所述的任何装置的平铺引擎、控制流解码器或图形处理系统。集成电路定义数据集可以是例如集成电路描述。
因此,可以提供一种在集成电路制造系统处制造如本文所述的平铺引擎、控制流解码器或图形处理系统的方法。此外,可以提供一种集成电路定义数据集,当在集成电路制造系统中处理时,该集成电路定义数据集使得执行制造平铺引擎、控制流解码器或图形处理系统的方法。
集成电路定义数据集可以是计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别制造的硬件描述语言,包括作为寄存器传输级(RTL)代码,作为高级电路表示法(诸如Verilog或VHDL),以及作为低级电路表示法(诸如OASIS(RTM)和GDSII)。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如RTL)可以在计算机系统上处理,该计算机系统被配置用于在软件环境的上下文中生成集成电路的制造定义,该软件环境包括电路元件的定义和用于组合这些元件以生成由该表示法定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置成生成集成电路的制造定义,以执行定义集成电路以便生成所述集成电路的制造定义的代码。
现在将参照图29描述在集成电路制造系统处处理集成电路定义数据集以便将所述系统配置为制造平铺引擎、控制流解码器或图形处理系统的示例。
图29示出集成电路(IC)制造系统2902的示例,其被配置为制造如本文的任何示例中所描述的平铺引擎、控制流解码器或图形处理系统。特定来说,IC制造系统2902包括布局处理系统2904和集成电路生成系统2906。IC制造系统2902被配置为接收IC定义数据集(例如,定义如本文的任何示例中所述的平铺引擎、控制流解码器或图形处理系统)、处理IC定义数据集、以及根据所述IC定义数据集来生成IC(例如,其体现如本文的任何示例中所述的平铺引擎、控制流解码器或图形处理系统)。IC定义数据集的处理配置IC制造系统2902以制造集成电路,所述集成电路体现如本文的任何示例中所述的平铺引擎、控制流解码器或图形处理系统。
布局处理系统2904配置成接收并处理IC定义数据集以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成RTL代码以确定要生成的电路的门级表示,例如就逻辑部件(例如NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统2904已经确定电路布局时,其可将电路布局定义输出到IC生成系统2906。电路布局定义可以是例如电路布局描述。
如本领域已知的,IC生成系统2906根据电路布局定义来生成IC。举例来说,IC生成系统2906可实施生成IC的半导体装置制造工艺,其可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,其可以在光刻工艺中用于根据电路定义来生成IC。替代地,提供给IC生成系统2906的电路布局定义可呈计算机可读代码的形式,IC生成系统2906可使用所述计算机可读代码来形成用于生成IC的合适掩码。
由IC制造系统2902执行的不同过程可全部在一个位置例如由一方来实施。替代地,IC制造系统2902可以是分布式系统,使得一些过程可在不同位置执行,并且可由不同方来执行。例如,以下阶段中的一些可以在不同位置和/或由不同方来执行:(i)合成表示IC定义数据集的RTL代码,以形成要生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
在其他示例中,在集成电路制造系统中对集成电路定义数据集的处理可以将所述系统配置成在不处理IC定义数据集以确定电路布局的状况下制造平铺引擎或图形处理系统。举例来说,集成电路定义数据集可以定义例如FPGA的可重新配置的处理器的配置,并且对所述数据集进行的处理可以将IC制造系统配置成(例如,通过将配置数据加载到FPGA)生成具有所述定义的配置的可重新配置的处理器。
在一些实施方案中,当在集成电路制造系统中处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文中描述的装置。例如,通过集成电路制造定义数据集,以上文关于图29描述的方式对集成电路制造系统的配置,可制造出如本文中所述的装置。
在一些示例中,集成电路定义数据集可包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图29中展示的示例中,IC生成系统可由集成电路定义数据集进一步被配置成在制造集成电路时根据在集成电路定义数据集处定义的程序代码将固件加载到所述集成电路上,或者以其他方式向集成电路提供与集成电路一起使用的程序代码。
与已知的实现方式相比,在本申请中阐述的概念在装置、设备、模块和/或系统中(以及在本文中实现的方法中)的实现方式可以引起性能改进。性能改进可以包含计算性能提高、等待时间缩短、处理量增大和/或功耗降低中的一个或多个。在制造此类装置、设备、模块和系统(例如在集成电路中)期间,可以在性能改进与物理实施方案之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实现方式的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在装置、设备、模块和/或系统的元件之间共享功能块来完成。相反,在本申请中阐述的引起装置、设备、模块和系统的物理实现方式的改进(诸如硅面积减小)的概念可以针对性能提高进行权衡。例如,这可以通过在预定义面积预算内制造模块的多个实例来完成。
申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。
Claims (20)
1.一种在基于图块的图形处理系统中对图元进行平铺的方法(600),在所述基于图块的图形处理系统中,渲染空间被划分成多个图块,所述方法(600)包括:
生成图块组的多级分层结构,所述多级分层结构中的每一级包括一个或多个图块组,所述一个或多个图块组包括所述多个图块中的一个或多个(602);
接收标识多个图元块中的每一个的信息,每个图元块包括一个或多个图元的几何结构数据(604、608);
将所述多个图元块中的每一个与所述图块组中的一个或多个相关联,直到最大数目的图块组,使得如果图元块中的至少一个图元至少部分地落在图块的边界内,则所述图元块与包括所述图块的至少一个图块组相关联(606);
基于所述关联生成用于每个图块组的控制流,其中每个控制流包括用于与对应的图块组相关联的每个图元块的图元块条目(610)。
2.根据权利要求1所述的方法(600),其中所述图块组的最大数目是一。
3.根据权利要求1所述的方法(600),其中将图元块与所述图块组中的一个或多个相关联包括:
标识所述渲染空间中的轴对准边界框,所述轴对准边界框包围所述图元块中的所述一或多个图元;以及
将所述图元块与最小图块组相关联,所述最小图块组的一或多个图块包围所述边界框。
4.根据权利要求1所述的方法(600),其中所述图块组的最大数目大于一。
5.根据权利要求1所述的方法(600),其中将图元块与所述图块组中的一个或多个相关联包括:
标识所述渲染空间中的轴对准边界框,所述轴对准边界框包围所述图元块中的所述一或多个图元;以及
将所述图元块与一个或多个图块组的最小集和相关联,所述一个或多个图块组的最小集和中的一个或多个图块包围所述边界框。
6.根据权利要求5所述的方法(600),其中所述一个或多个图块组的集合中的每个图块组处于所述分层结构的同一级。
7.根据权利要求5所述的方法(600),其中所述一个或多个图块组的集合包括多个图块组,并且所述集合中的所述图块组中的至少两个处于所述分层结构的不同级。
8.根据权利要求1至7中任一项所述的方法(600),其中每个图元块条目包括标识对应的图元块的信息。
9.根据权利要求1至7中任一项所述的方法(600),其中每个图元块与所述渲染空间中的轴对准边界框相关联,所述轴对准边界框包围所述图元块的所述一个或多个图元,并且如果图元块的所述边界框不包围由所述图块组中的所述图块覆盖的所述渲染空间的区域,则用于所述图元块的所述图元块条目包括标识所述边界框的一个或多个坐标的信息。
10.根据权利要求1至7中任一项所述的方法(600),其中每个图元块与所述渲染空间中的轴对准边界框相关联,所述轴对准边界框包围所述图元集合中的所述一个或多个图元,并且如果图元块不包括落在所述图块组的每个图块中的至少一个图元,则所述图元块的所述图元块条目包括覆盖掩码,所述覆盖掩码指示与所述图元块的所述边界框相交的所述图块组中的哪些图块对于所述图元块有效,如果图元块中的至少一个图元至少部分地落在所述图块的所述边界内,则所述图块对于所述图元块是有效的。
11.根据权利要求10所述的方法(600),其中每个覆盖掩码包括相关图块区块的连续越来越小的区域的信息,所述信息指示所述区域对于所述图元块是否有效,所述相关图块区块包括与所述图元块的所述边界框相交的所述图块组中的所述图块。
12.根据权利要求10所述的方法(600),还包括通过以下步骤生成用于图元块条目的所述覆盖掩码:
a)将相关图块区块划分成图块的象限,所述相关图块区块包括与所述图元块的所述边界框相交的所述图块组中的所述图块(2106);
b)将指示所述象限中的每一个对于所述图元块是否有效的信息添加到所述覆盖掩码(2108,2110,2112,2114,2116,2118);
c)如果象限对于所述图元块有效并且所述象限包括多于一个图块,则将所述象限分成子象限并且对于每个子象限重复(b)和(c)(2120,2122)。
13.根据权利要求12所述的方法(600),其中生成用于图元块条目的所述覆盖掩码还包括在将相关图块区块划分成图块的象限之前,将相关图块区块扩展为具有二的幂次方个边的方形区块(2102)。
14.根据权利要求1至7中任一项所述的方法(600),其中k级的每个图块组包括hk×hk个图块区块,其中h是大于一的整数,k是0至N-1的整数,并且N是所述分层结构中的所述级的数目。
15.根据权利要求1至7中任一项所述的方法(600),其中j级的每个图块组包括n个j-1级图块组,其中n是大于一的整数,j是1至N-1的整数,并且N是所述分层结构中的所述级的数目。
16.根据权利要求1至7中任一项所述的方法(600),其中处于所述分层结构的最低级的每个图块组仅包括所述多个图块中的单个图块。
17.一种用于图形处理系统(2700)的平铺引擎(2300),在所述图形处理系统中,渲染空间被分成多个图块,所述平铺引擎(2300)包括:
图块组选择器逻辑(2302),所述图块组选择器逻辑被配置以:
获得定义图块组的多级分层结构的信息,其中所述多级分层结构中的每一级包括一个或多个图块组,所述一个或多个图块组包括所述多个图块中的一个或多个;
接收标识多个图元块中的每一个的信息,每个图元块包括一个或多个图元的几何结构数据;以及
将所述多个图元块中的每一个与所述图块组中的一个或多个相关联,直到最大数目的图块组,使得如果图元块中的至少一个图元至少部分地落在图块的边界内,则所述图元块与包括所述图块的至少一个图块组相关联;以及
控制流生成器(2304),所述控制流生成器被配置为基于所述关联生成用于每个图块组的控制流,其中每个控制流包括用于与对应的图块组相关联的每个图元块的图元块条目。
18.一种用于图形处理系统的控制流解码器(2500),在所述图形处理系统中,渲染空间被细分成多个图块,每个图块形成至少两个不同大小的不同图块组的一部分,所述控制流解码器(2500)包括:
控制流获取逻辑(2502),所述控制流获取逻辑被配置为获取用于当前图块形成其一部分的每个图块组控制流,每个控制流包括零个、一个或多于一个图元块条目,每个图元块条目包括(i)标识包括一个或多个图元的几何结构数据的图元块的信息,以及(ii)标识包围所述一个或多个图元的边界框的边界框信息;以及
控制流分析器(2504),所述控制流分析器被配置为针对每个所获取的控制流:
如果所述控制流包括至少一个图元块条目,则对于每个图元块条目:
根据所述边界框信息确定所述当前图块是否落在所述边界框内;
响应于确定所述当前图块不落在所述边界框内,确定所述图元块与渲染所述当前图块不相关。
19.根据权利要求18所述的控制流解码器(2500),其中所述控制流解码器被进一步配置为:
响应于确定所述当前图块落在所述边界框内,确定所述控制流是否包括覆盖掩码,所述覆盖掩码指示所述图块组中与所述边界框相交的哪些图块与对应的图元块相关;
响应于确定所述控制流包括覆盖掩码,根据所述覆盖掩码确定所述图元块是否与渲染所述当前图块相关。
20.一种计算机可读存储介质,其上存储有计算机可读指令,所述计算机可读指令当在计算机系统处执行时致使所述计算机系统执行如权利要求1至7中任一项所述的方法。
Applications Claiming Priority (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2001716.6 | 2020-02-07 | ||
GB2001716.6A GB2591802B (en) | 2020-02-07 | 2020-02-07 | Graphics processing method and system for rendering items of geometry based on their size |
EP20386033.3A EP3862976A1 (en) | 2020-02-07 | 2020-06-17 | Data structures, methods and tiling engines for hierarchically storing tiling information in a graphics processing system |
EP20386033.3 | 2020-06-17 | ||
EP20386032.5A EP3862975A1 (en) | 2020-02-07 | 2020-06-17 | Methods and control stream generators for generating a control stream for a tile group in a graphics processing system |
EP20386032.5 | 2020-06-17 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113256761A true CN113256761A (zh) | 2021-08-13 |
Family
ID=69897108
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110163454.0A Pending CN113256762A (zh) | 2020-02-07 | 2021-02-05 | 用于在图形处理系统中生成用于图块组的控制流的方法和控制流生成器 |
CN202110163427.3A Pending CN113256760A (zh) | 2020-02-07 | 2021-02-05 | 图形处理方法和系统 |
CN202110163452.1A Pending CN113256761A (zh) | 2020-02-07 | 2021-02-05 | 用于在图形处理系统中分层存储平铺信息的数据结构、方法和平铺引擎 |
Family Applications Before (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110163454.0A Pending CN113256762A (zh) | 2020-02-07 | 2021-02-05 | 用于在图形处理系统中生成用于图块组的控制流的方法和控制流生成器 |
CN202110163427.3A Pending CN113256760A (zh) | 2020-02-07 | 2021-02-05 | 图形处理方法和系统 |
Country Status (4)
Country | Link |
---|---|
US (7) | US11610358B2 (zh) |
EP (3) | EP3862976A1 (zh) |
CN (3) | CN113256762A (zh) |
GB (1) | GB2591802B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2526598B (en) * | 2014-05-29 | 2018-11-28 | Imagination Tech Ltd | Allocation of primitives to primitive blocks |
EP3249612B1 (en) * | 2016-04-29 | 2023-02-08 | Imagination Technologies Limited | Generation of a control stream for a tile |
GB2611376B (en) | 2022-03-30 | 2023-11-01 | Imagination Tech Ltd | Multi-core draw splitting |
GB2611373A (en) * | 2022-03-30 | 2023-04-05 | Imagination Tech Ltd | Memory management for multicore 3-D graphics rendering |
GB2611377B (en) | 2022-03-30 | 2023-11-01 | Imagination Tech Ltd | Memory allocation for 3-D graphics rendering |
US11941232B2 (en) * | 2022-06-06 | 2024-03-26 | Adobe Inc. | Context-based copy-paste systems |
US20240005601A1 (en) * | 2022-06-29 | 2024-01-04 | Advanced Micro Devices, Inc. | Hierarchical depth data generation using primitive fusion |
Family Cites Families (54)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5864342A (en) * | 1995-08-04 | 1999-01-26 | Microsoft Corporation | Method and system for rendering graphical objects to image chunks |
US6611272B1 (en) * | 1998-07-02 | 2003-08-26 | Microsoft Corporation | Method and apparatus for rasterizing in a hierarchical tile order |
US6646639B1 (en) * | 1998-07-22 | 2003-11-11 | Nvidia Corporation | Modified method and apparatus for improved occlusion culling in graphics systems |
US7042452B1 (en) * | 2003-10-02 | 2006-05-09 | Sun Microsystems, Inc. | Triangle coverage estimation and edge-correct tessellation |
US9098943B1 (en) * | 2003-12-31 | 2015-08-04 | Ziilabs Inc., Ltd. | Multiple simultaneous bin sizes |
US8139058B2 (en) * | 2006-11-03 | 2012-03-20 | Vivante Corporation | Hierarchical tile-based rasterization algorithm |
US7692659B1 (en) | 2006-11-06 | 2010-04-06 | Nvidia Corporation | Color-compression using automatic reduction of multi-sampled pixels |
ITMI20070038A1 (it) | 2007-01-12 | 2008-07-13 | St Microelectronics Srl | Dispositivo di renderizzazione per grafica a tre dimensioni con architettura di tipo sort-middle. |
GB2452731B (en) | 2007-09-12 | 2010-01-13 | Imagination Tech Ltd | Methods and systems for generating 3-dimensional computer images |
GB0819570D0 (en) | 2008-10-24 | 2008-12-03 | Advanced Risc Mach Ltd | Methods of and apparatus for processing computer graphics |
GB0823254D0 (en) | 2008-12-19 | 2009-01-28 | Imagination Tech Ltd | Multi level display control list in tile based 3D computer graphics system |
GB0823468D0 (en) | 2008-12-23 | 2009-01-28 | Imagination Tech Ltd | Display list control stream grouping in tile based 3D computer graphics systems |
GB0900700D0 (en) * | 2009-01-15 | 2009-03-04 | Advanced Risc Mach Ltd | Methods of and apparatus for processing graphics |
US8704836B1 (en) * | 2009-10-19 | 2014-04-22 | Nvidia Corporation | Distributing primitives to multiple rasterizers |
US9058685B2 (en) * | 2010-03-11 | 2015-06-16 | Broadcom Corporation | Method and system for controlling a 3D processor using a control list in memory |
KR101136737B1 (ko) * | 2011-10-07 | 2012-04-19 | (주)넥셀 | 그래픽 처리방법 및 그 장치 |
US9495781B2 (en) | 2012-06-21 | 2016-11-15 | Nvidia Corporation | Early sample evaluation during coarse rasterization |
GB2509369B (en) * | 2012-11-02 | 2017-05-10 | Imagination Tech Ltd | On demand geometry processing for 3-d rendering |
US9317948B2 (en) * | 2012-11-16 | 2016-04-19 | Arm Limited | Method of and apparatus for processing graphics |
KR102116708B1 (ko) * | 2013-05-24 | 2020-05-29 | 삼성전자 주식회사 | 그래픽스 프로세싱 유닛 |
KR102066659B1 (ko) * | 2013-08-13 | 2020-01-15 | 삼성전자 주식회사 | 그래픽 프로세싱 유닛, 이를 포함하는 그래픽 프로세싱 시스템 및 이의 동작 방법 |
US9311743B2 (en) | 2013-10-23 | 2016-04-12 | Qualcomm Incorporated | Selectively merging partially-covered tiles to perform hierarchical z-culling |
US9607426B1 (en) * | 2013-12-20 | 2017-03-28 | Imagination Technologies Limited | Asynchronous and concurrent ray tracing and rasterization rendering processes |
KR102188543B1 (ko) * | 2014-02-07 | 2020-12-08 | 삼성전자주식회사 | 그래픽 처리 장치 |
US10068311B2 (en) | 2014-04-05 | 2018-09-04 | Sony Interacive Entertainment LLC | Varying effective resolution by screen location by changing active color sample count within multiple render targets |
DE102014010907A1 (de) | 2014-07-23 | 2016-01-28 | Fresenius Medical Care Deutschland Gmbh | Vorrichtung zur extrakorporalen Entfernung proteingebundener Toxine |
US10217272B2 (en) | 2014-11-06 | 2019-02-26 | Intel Corporation | Zero-coverage rasterization culling |
US9619937B2 (en) * | 2015-03-05 | 2017-04-11 | Arm Limited | Methods and apparatus for processing computer graphics primitives in tile-based graphics rendering system |
GB2537661B (en) * | 2015-04-22 | 2018-09-26 | Imagination Tech Ltd | Tiling a primitive in a graphics processing system |
GB2537659B (en) * | 2015-04-22 | 2019-05-01 | Imagination Tech Ltd | Tiling a primitive in a graphics processing system |
GB2539509B (en) | 2015-06-19 | 2017-06-14 | Advanced Risc Mach Ltd | Method of and apparatus for processing graphics |
GB2542133B (en) * | 2015-09-08 | 2020-05-27 | Imagination Tech Ltd | Graphics processing method and system for processing sub-primitives |
US9905037B2 (en) | 2015-09-22 | 2018-02-27 | Nvidia Corporation | System, method, and computer program product for rejecting small primitives |
GB2547250B (en) * | 2016-02-12 | 2020-02-19 | Geomerics Ltd | Graphics processing systems |
US10096147B2 (en) * | 2016-03-10 | 2018-10-09 | Qualcomm Incorporated | Visibility information modification |
GB2551689B (en) | 2016-04-22 | 2021-05-12 | Advanced Risc Mach Ltd | Method and Apparatus for processing graphics |
EP3249612B1 (en) | 2016-04-29 | 2023-02-08 | Imagination Technologies Limited | Generation of a control stream for a tile |
GB2549789B (en) | 2016-04-29 | 2020-05-06 | Imagination Tech Ltd | Generation of a control stream for a tile |
GB2550358B (en) * | 2016-05-16 | 2020-08-26 | Advanced Risc Mach Ltd | Graphics processing systems |
US20170352182A1 (en) | 2016-06-06 | 2017-12-07 | Qualcomm Incorporated | Dynamic low-resolution z test sizes |
US10032308B2 (en) * | 2016-06-22 | 2018-07-24 | Advanced Micro Devices, Inc. | Culling objects from a 3-D graphics pipeline using hierarchical Z buffers |
US10152819B2 (en) * | 2016-08-15 | 2018-12-11 | Microsoft Technology Licensing, Llc | Variable rate shading |
GB2555797B (en) * | 2016-11-09 | 2020-04-08 | Geomerics Ltd | Graphics processing to provide shadows on specular lighting |
KR20180056316A (ko) * | 2016-11-18 | 2018-05-28 | 삼성전자주식회사 | 타일-기반 렌더링을 수행하는 방법 및 장치 |
US10417807B2 (en) * | 2017-07-13 | 2019-09-17 | Imagination Technologies Limited | Hybrid hierarchy of bounding and grid structures for ray tracing |
GB2574361B (en) | 2017-12-18 | 2021-03-24 | Advanced Risc Mach Ltd | Graphics Processing |
US10726610B2 (en) | 2018-08-29 | 2020-07-28 | Arm Limited | Efficient graphics processing using metadata |
GB2577062B (en) * | 2018-09-11 | 2021-04-28 | Advanced Risc Mach Ltd | Methods, apparatus and processor for producing a higher resolution frame |
WO2020070196A1 (en) * | 2018-10-02 | 2020-04-09 | Telefonaktiebolaget Lm Ericsson (Publ) | Encoding and decoding pictures based on tile group id |
GB2578320B (en) * | 2018-10-23 | 2023-07-05 | Advanced Risc Mach Ltd | Graphics processing |
GB2587224B (en) * | 2019-09-19 | 2021-09-15 | Imagination Tech Ltd | Methods and tiling engines for hierarchially tiling primitives in a graphics processing system |
US11151683B2 (en) | 2019-09-26 | 2021-10-19 | Intel Corporation | Use of inner coverage information by a conservative rasterization pipeline to enable EarlyZ for conservative rasterization |
US11030783B1 (en) | 2020-01-21 | 2021-06-08 | Arm Limited | Hidden surface removal in graphics processing systems |
GB2591803B (en) | 2020-02-07 | 2022-02-23 | Imagination Tech Ltd | Graphics processing method and system for rendering items of geometry based on their size |
-
2020
- 2020-02-07 GB GB2001716.6A patent/GB2591802B/en active Active
- 2020-06-17 EP EP20386033.3A patent/EP3862976A1/en active Pending
- 2020-06-17 EP EP20386032.5A patent/EP3862975A1/en active Pending
-
2021
- 2021-02-03 EP EP21154952.2A patent/EP3862978A3/en active Pending
- 2021-02-05 CN CN202110163454.0A patent/CN113256762A/zh active Pending
- 2021-02-05 CN CN202110163427.3A patent/CN113256760A/zh active Pending
- 2021-02-05 CN CN202110163452.1A patent/CN113256761A/zh active Pending
- 2021-02-06 US US17/169,417 patent/US11610358B2/en active Active
- 2021-02-08 US US17/169,828 patent/US11481951B2/en active Active
- 2021-02-08 US US17/170,590 patent/US11600034B2/en active Active
-
2022
- 2022-09-15 US US17/945,310 patent/US11741656B2/en active Active
-
2023
- 2023-03-07 US US18/118,262 patent/US20230252711A1/en active Pending
- 2023-03-15 US US18/122,042 patent/US11922555B2/en active Active
- 2023-08-29 US US18/239,402 patent/US20230401780A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US11922555B2 (en) | 2024-03-05 |
GB202001716D0 (en) | 2020-03-25 |
US11610358B2 (en) | 2023-03-21 |
CN113256762A (zh) | 2021-08-13 |
US20210279954A1 (en) | 2021-09-09 |
US20210256746A1 (en) | 2021-08-19 |
US11481951B2 (en) | 2022-10-25 |
EP3862978A2 (en) | 2021-08-11 |
GB2591802B (en) | 2022-03-23 |
US20230252711A1 (en) | 2023-08-10 |
US11741656B2 (en) | 2023-08-29 |
US20230009092A1 (en) | 2023-01-12 |
EP3862978A3 (en) | 2021-08-18 |
US20230215095A1 (en) | 2023-07-06 |
EP3862975A1 (en) | 2021-08-11 |
US11600034B2 (en) | 2023-03-07 |
US20210248805A1 (en) | 2021-08-12 |
CN113256760A (zh) | 2021-08-13 |
EP3862976A1 (en) | 2021-08-11 |
US20230401780A1 (en) | 2023-12-14 |
GB2591802A (en) | 2021-08-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11922555B2 (en) | Data structures, methods and tiling engines for hierarchically storing tiling information in a graphics processing system | |
CN107169916B (zh) | 用于simd处理的任务组合 | |
CN106504181B (zh) | 用于处理子图元的图形处理方法和系统 | |
US9478002B2 (en) | Vertex parameter data compression | |
CN106504184B (zh) | 用于处理子图元的图形处理方法和系统 | |
US11715175B2 (en) | Hierarchical tiling in a graphics processing system using chain sorting of primitives | |
CN113256477B (zh) | 用于在图形处理系统中存储平铺信息的方法和平铺引擎 | |
CN111508056B (zh) | 利用扩展变换级掩码的图形处理系统 | |
US11551401B2 (en) | Data structures, methods and primitive block generators for storing primitives in a graphics processing system | |
CN113052752A (zh) | 用于在存储器中存储可变长度数据块的方法和系统 | |
EP3889910A1 (en) | Pattern-based image data compression | |
US20240135625A1 (en) | Data structures, methods and tiling engines for storing tiling information in a graphics processing system | |
GB2592046A (en) | Methods and tiling engines for tiling primitives in a graphics processing system | |
GB2592045A (en) | Data structures, methods and primitive block generators for storing primitives in a graphics processing system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |