CN111353928A - 用于图形处理***的经过变换的几何结构数据高速缓存 - Google Patents
用于图形处理***的经过变换的几何结构数据高速缓存 Download PDFInfo
- Publication number
- CN111353928A CN111353928A CN201911328719.7A CN201911328719A CN111353928A CN 111353928 A CN111353928 A CN 111353928A CN 201911328719 A CN201911328719 A CN 201911328719A CN 111353928 A CN111353928 A CN 111353928A
- Authority
- CN
- China
- Prior art keywords
- transformed
- primitive
- block
- primitives
- primitive block
- 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
- 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
- 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
- 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
- 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
- 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
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/10—Geometric effects
- G06T15/30—Clipping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/10—Geometric effects
- G06T15/40—Hidden part removal
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Geometry (AREA)
- Image Generation (AREA)
Abstract
本申请涉及用于图形处理***的经过变换的几何结构数据高速缓存。高速缓存包括:存储器,用于将多个经过变换的基元块存储在高速缓存中,每一经过变换的基元块包括用于一个或多个基元的经变换的几何结构数据;控制逻辑,用于维持用于存储在高速缓存中的多个经变换的基元块中的计数器,其指示正由光栅化逻辑处理的需要访问经变换的基元块的多个平铺块中的平铺块的数目,当光栅化逻辑的任一阶段指示平铺块不再需要访问经变换的基元块时计数器被更新;当高速缓存为满时响应于接收到用以将新的经变换的基元块添加到高速缓存的请求,基于与经变换的基元块相关联的计数器从高速缓存选择要收回的经变换的基元块;及从高速缓存收回选定的经变换的基元块。
Description
技术领域
本申请涉及图形处理***,并且具体来说,涉及用于在图形处理***中存储经过变换的几何结构数据的方法、***和高速缓存。
背景技术
图形处理***被配置成例如从在计算机***上运行的应用程序(例如游戏应用程序)接收图形数据,并对来自图形数据的图像进行渲染以提供渲染输出。举例来说,应用程序可以生成场景的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逻辑114移除隐藏(例如被其它基元片段隐藏)的基元片段。术语“片段”在本文中用于意指采样点处的基元的样本,所述样本将被处理以对图像的像素进行渲染。在一些示例中,可以存在像素到片段的一对一映射。然而,在其它示例中,片段可以多于像素,并且此过采样可以允许像素值的较高质量渲染,例如通过促进可以应用于多个片段以用于对每个像素值进行渲染的抗混叠和其它滤波器。
接着将其余片段(在隐藏表面移除之后)传递到纹理化/着色逻辑116,纹理化/着色逻辑116对基元片段执行纹理化和/或着色以确定被渲染图像的像素值。接着将用于平铺块的被渲染像素值存储在存储器1024(例如帧缓冲区)中。
光栅化逻辑106处理每个平铺块,并且当整个图像已经被渲染并存储在存储器1024(例如帧缓冲区)中时,所述图像可以从图形处理***100被输出并以任何合适方式被使用,例如显示在显示器上、存储在存储器中或传输到另一个装置等。在片段在由纹理化/着色逻辑116处理之前由HSR逻辑114处理的意义上,图1所展示的TBR图形处理***100是“推迟的”渲染***。在其它示例中,图形处理***可能并非推迟的渲染***,在此状况下,将会在将HSR应用于片段之前将纹理化/着色应用于那些片段。
在许多状况下,经过变换的几何结构数据可能相当大。这在未经变换的几何结构数据与经过变换的几何结构数据之间存在大扩展比率的情况下(例如当由变换逻辑108执行镶嵌时)尤其如此。
因此,如英国公开专利申请GB2458488和GB2542133中所描述,一些TBR图形处理***使用“未经变换的显示列表”,其指示哪些未经变换的基元一旦经过变换就将至少部分地落在每个平铺块的界限内。因而,未经变换的显示列表提及未经变换的基元,而非经过变换的基元。举例来说,未经变换的显示列表可以包括到与在被变换时将至少部分地落在平铺块内的未经变换的基元相关的未经变换的几何结构数据(例如顶点数据)的指针或链接。这意味着经过变换的几何结构数据不需要从几何结构处理逻辑104提供到存储器1022,或存储在存储器1022中。然而,在这些***中,未经变换的显示列表中所提及的未经变换的几何结构数据又在光栅化阶段中被变换。尽管这意味着几何结构数据在一些状况下被变换两次,但避免将经过变换的几何结构数据传送到存储器并存储所述经过变换的几何结构数据的延迟和存储器使用情况的益处可能会胜过在光栅化阶段中执行变换的处理成本。
图2示出使用未经变换的显示列表的示例TBR图形处理***200,TBR图形处理***200类似于GB2458488和GB2542133中所描述的图形处理***,可以被称作未经变换的显示列表(UDL)图形处理***。***200类似于图1的***100,不同之处在于:(i)经过变换的几何结构数据不由几何结构处理逻辑写入到存储器;(ii)代替标识落在每个平铺块内的经过变换的基元,显示列表标识在被变换时将落在每个平铺块数据内的未经变换的基元;以及(iii)光栅化逻辑包含用以变换未经变换的显示列表中所提及的未经变换的基元的变换逻辑。类似于图1的***100,***200包括存储器2021、2023、2024、几何结构处理逻辑204和光栅化逻辑206。
类似于图1的几何结构处理逻辑104,几何结构处理逻辑204实施TBR的几何结构处理阶段。图2的几何结构处理逻辑204包括变换逻辑208和平铺引擎210。变换逻辑208从应用程序(例如游戏应用程序)接收几何结构数据(例如顶点和基元)并将几何结构数据变换到渲染空间(例如屏幕空间)中。变换逻辑208还可以执行例如裁剪和剔除的功能以移除落在视锥外的几何结构数据(例如基元)。与图1的变换逻辑108对比,图2的变换逻辑208可能不应用照明/属性处理,因为几何结构处理逻辑204仅使用位置信息。经过变换的几何结构数据(例如顶点和基元)被提供到平铺引擎210。平铺引擎210从经过变换的几何结构数据生成用于每个平铺块的未经变换的基元的列表,所述未经变换的基元在被变换时至少部分地落在所述平铺块内。由图2的平铺引擎201生成的列表可以被称作未经变换的显示列表,因为其提及未经变换的几何结构数据,而非经过变换的几何结构数据。
类似于图1所展示的光栅化逻辑106,图2所展示的光栅化逻辑206实施TBR的光栅化阶段。具体地说,光栅化逻辑206通过以下操作而以逐平铺块的方式对基元进行渲染:提取用于落在如由用于平铺块的未经变换的显示列表所指示的所述平铺块内的基元的未经变换的几何结构数据,变换用于所述平铺块的未经变换的几何结构数据,并基于经过变换的几何结构数据对用于所述平铺块的基元进行渲染。
在一些状况下,光栅化逻辑206可以包括提取逻辑212、变换逻辑213、隐藏表面移除(HSR)逻辑214和纹理化/着色逻辑216。在这些状况下,提取逻辑212从存储器2023提取每个未经变换的显示列表,并针对每个显示列表从存储器2021提取在所述显示列表中标识的未经变换的几何结构数据。接着将用于特定平铺块的未经变换的几何结构数据提供到变换逻辑213,变换逻辑213将未经变换的几何结构数据(例如基元)变换到渲染空间(例如屏幕空间)中。接着将用于特定平铺块的经过变换的几何结构数据提供到HSR逻辑214,HSR逻辑214移除隐藏(例如被其它基元片段隐藏)的基元片段。接着将其余片段(在隐藏表面移除之后)传递到纹理化/着色逻辑216,纹理化/着色逻辑216对基元片段执行纹理化和/或着色以确定被渲染图像的像素值,所述像素值可以被传递到存储器2024(例如帧缓冲区)以供存储。
下文所描述的实施例仅作为示例被提供,且并不限制实施方案,所述实施方案解决已知的UDL图形处理***的缺点中的任一个或全部。
发明内容
提供此发明内容是为了引入一系列概念,所述概念在以下具体实施方式中进一步加以描述。本发明内容并不希望标识所要求的主题的关键特征或基本特征,也并非意图用于限制所要求的主题的范围。
本文中描述用于基于平铺块的渲染图形处理***中的高速缓存,其用于存储经过变换的基元块,所述图形处理***具有细分成可与基元相关联的多个平铺块的渲染空间,所述图形处理***包括光栅化逻辑,所述光栅化逻辑在多个阶段中基于平铺块对基元进行光栅化,所述高速缓存包括:存储器,其被配置成将多个经过变换的基元块存储在高速缓存中,每一经过变换的基元块包括用于一个或多个基元的经过变换的几何结构数据;控制逻辑,其被配置成:维持用于存储在高速缓存中的多个经过变换的基元块中的每一个的计数器,其指示当前正由光栅化逻辑处理的需要访问所述经过变换的基元块的多个平铺块中的平铺块的数目,当光栅化逻辑的任一阶段指示平铺块不再需要访问经过变换的基元块时,所述计数器被更新;当高速缓存为满时,响应于接收到用以将新的经过变换的基元块添加到高速缓存的请求,基于与经过变换的基元块相关联的计数器从高速缓存选择要收回的经过变换的基元块;及从高速缓存收回选定的经过变换的基元块。
第一方面提供一种将经过变换的基元块存储在基于平铺块的渲染图形处理***的高速缓存中的方法,所述基于平铺块的渲染图形处理***具有细分成可与基元相关联的多个平铺块的渲染空间及在多个阶段中基于平铺块对基元进行光栅化的光栅化逻辑,所述方法包括:将多个经过变换的基元块存储在高速缓存中,每一经过变换的基元块包括用于一个或多个基元的经过变换的几何结构数据;维持用于存储在高速缓存中的多个经过变换的基元块中的每一个的计数器,其指示当前正由光栅化逻辑处理的需要访问所述经过变换的基元块的多个平铺块中的平铺块的数目,当光栅化逻辑的任一阶段指示平铺块不再需要访问经过变换的基元块时,所述计数器被更新;当高速缓存为满时,响应于接收到将存储在高速缓存中的新的经过变换的基元块,基于与经过变换的基元块相关联的计数器从高速缓存选择要收回的经过变换的基元块;及从高速缓存收回选定的经过变换的基元块。
第二方面提供一种用于基于平铺块的渲染图形处理***中的高速缓存,其用于存储经过变换的基元块,所述图形处理***具有细分成可与基元相关联的多个平铺块的渲染空间,所述图形处理***包括光栅化逻辑,所述光栅化逻辑在多个阶段中基于平铺块对基元进行光栅化,所述高速缓存包括:存储器,其被配置成存储多个经过变换的基元块,每一经过变换的基元块包括用于一个或多个基元的经过变换的几何结构数据;控制逻辑,其被配置成:维持用于存储在存储器中的多个经过变换的基元块中的每一个的计数器,其指示当前正由光栅化逻辑处理的需要访问所述经过变换的基元块的多个平铺块中的平铺块的数目,当光栅化逻辑的任一阶段指示平铺块不再需要访问经过变换的基元块时,所述计数器被更新;当存储器为满时,响应于接收到用以将新的经过变换的基元块添加到存储器的请求,基于与经过变换的基元块相关联的计数器从存储器选择要收回的经过变换的基元块;及从存储器收回选定的经过变换的基元块。
第三方面提供一种图形处理***,其包括第二方面的高速缓存。
本文中所描述的图形处理***、基元块生成器和高速缓存可体现在集成电路上的硬件中。可提供一种在集成电路制造***处制造本文中所描述的图形处理***、基元块生成器和高速缓存的方法。可提供一种集成电路定义数据集,所述集成电路定义数据集在集成电路制造***中被处理时将***配置为制造本文中所描述的图形处理***、基元块生成器和高速缓存。可提供一种非瞬时性计算机可读存储介质,其上存储有本文中所描述的图形处理***、基元块生成器或高速缓存的计算机可读描述,所述计算机可读描述当在集成电路制造***中被处理时使集成电路制造***制造集成电路,所述集成电路体现图形处理***、基元块生成器或高速缓存。
可提供一种集成电路制造***,其包括:非瞬时性计算机可读存储介质,其上存储有本文中所描述的图形处理***、基元块生成器或高速缓存的计算机可读描述;布局处理***,其被配置成处理计算机可读描述以便生成体现图形处理***、基元块生成器或高速缓存的集成电路的电路布局描述;及集成电路生成***,其被配置成根据电路布局描述制造图形处理***、基元块生成器或高速缓存。
可提供用于执行如本文中所描述的方法的计算机程序代码。可提供其上存储有计算机可读指令的非瞬时性计算机可读存储介质,当在计算机***处执行时,所述计算机可读指令使计算机***执行如本文中所描述的方法。
上述特征可在适当时组合,如对所属领域的技术人员将显而易见,并且可与本文中所描述的示例的任何方面组合。
附图说明
现在将参考附图详细描述示例,在附图中:
图1是已知的基于平铺块的渲染图形处理***的框图;
图2是已知的未经变换的显示列表图形处理***的框图;
图3是基于基元块的未经变换的显示列表图形处理***的框图;
图4是示出未经变换的显示列表、基元块和未经变换的几何结构数据的示例的示意图;
图5是用于在图3的图形处理***中对数据进行渲染的示例方法的流程图;
图6是示例渲染空间中的被划分成多个平铺块的多个基元的示意图;
图7是生成基元块的示例方法的流程图;
图8是示出用于使用不同粒度的基元集合的示例限界方框的示意图;
图9是示出基于渲染次序计算基元与基元块之间的距离的示例的示意图;
图10是示例基元块生成器的框图;
图11是示例经过变换的几何结构数据高速缓存的框图;
图12是示出示例经过变换的基元块的示意图;
图13是示出已经被划分成多个子存储器块的示例经过变换的几何结构数据高速缓存的示意图;
图14是用于将经过变换的基元块存储在经过变换的几何结构数据高速缓存中的示例方法的流程图;
图15是HSR逻辑和纹理化/着色逻辑的示例实施方案的框图;
图16是示例计算机***的框图,在所述计算机***中可以实施本文中所描述的图形处理***、基元块生成器和经过变换的几何结构数据高速缓存;以及
图17是示例集成电路制造***的框图,所述集成电路制造***可以用于生成体现本文中所描述的图形处理***、基元块生成器和经过变换的几何结构数据高速缓存中的任一个的集成电路。
附图示出各种示例。所属领域的技术人员应了解,附图所示出的元件边界(例如方框、方框群组,或其它形状)表示边界的一个示例。在一些示例中,可以将一个元件设计为多个元件,或可以将多个元件设计为一个元件。在适当时,贯穿附图使用共同附图标记来指示类似特征。
具体实施方式
作为示例呈现以下描述以使所属领域的技术人员能够制造和使用本发明。本发明不限于本文中所描述的实施例,并且对所公开实施例的各种修改对于所属领域的技术人员来说将显而易见。仅作为示例描述实施例。
如上文所描述,未经变换的显示列表(UDL)图形处理***,例如图2的图形处理***200,并不存储在几何结构处理阶段中生成的经过变换的几何结构数据,而是生成用于每个平铺块的提及未经变换的基元的显示列表,并且接着,对应于在每个显示列表中标识的未经变换的基元的未经变换的几何结构数据又在光栅化阶段中被变换。此类***不需要存储器来存储在几何结构处理阶段中生成的经过变换的几何结构数据,并避免了延迟存储及检索来自存储器的经过变换的几何结构数据。这些基于存储器的益处可以提供TBR图形处理***的性能的显著改进,尤其是当用于对复杂游戏的场景进行渲染时。
在图2的UDL图形处理***200中,光栅化逻辑206被配置成基于基元提取与特定平铺块相关的基元并对其进行渲染。具体地说,光栅化逻辑206(例如提取逻辑212和变换逻辑213)被配置成针对在用于平铺块的未经变换的显示列表中标识的每个基元从存储器2021提取用于所述基元的未经变换的几何结构数据(例如用于形成基元的每个顶点的未经变换的几何结构数据),并接着变换所提取的几何结构数据。然而,基元常常落在多于一个平铺块内,这将会需要将同一个基元提取和变换多次。因此,高速缓存***可以用于缓存提取和/或变换的结果。然而,几何结构变换可能含有多个阶段,例如但不限于裁剪、顶点着色、几何结构着色、外壳着色和用于镶嵌的域着色,并且针对用于平铺块中的基元(例如顶点)缓存来自每个几何结构变换阶段的结果将会需要复杂的高速缓存***,例如英国公开专利申请第GB2542133号中所描述的高速缓存***。
此外,在一些状况下,光栅化逻辑206的变换逻辑213可以使用一个或多个单指令多数据(SIMD)处理器来实施,因为变换逻辑通常将相同变换(例如相同着色器)应用于多个顶点。如所属领域的技术人员所知,SIMD处理器包括多个处理元件,其各自对数据的不同集合执行相同操作。处理输入数据集合的每个处理元件被称为SIMD处理器的“通道”。当每个通道为“满”(即,正在处理数据)时,SIMD处理器最高效地操作。在一些状况下,变换逻辑213的SIMD处理器可以包括32个通道。基于每个基元提取和处理平铺块的基元常常可能会引起变换逻辑213的SIMD通道不为满,和/或可能需要花费时间来获得SIMD通道的数据并将其放在一起。
本发明人已辨识出,可以在没有复杂的高速缓存***的情况下通过以下操作高效地执行光栅化阶段中的几何结构数据变换:不仅变换在被变换时落在平铺块内的未经变换的基元,而且变换在被变换时接***铺块的基元的未经变换的基元。这不仅允许变换逻辑213的SIMD通道被充满(或基本上充满),而且如果额外的未经变换的基元接***铺块中的基元,那么很可能的是,将被光栅化的接下来几个平铺块中的一个将需要与所述基元相关的经过变换的几何结构数据。因此,用于额外的未经变换的基元的经过变换的几何结构数据可以基于所述基元将很可能用于将接下来几个平铺块中的被处理的一个平铺块光栅化而存储在简单的高速缓存中。
因此,本文中描述未经变换的显示列表(UDL)图形处理***,其中几何结构处理逻辑被配置成基于对应的经过变换的几何结构数据将未经变换的基元分组到未经变换的基元块中;并且光栅化逻辑被配置成在未经变换的显示列表中标识特定的未经变换的基元时提取和变换与相关的未经变换的基元处于同一个未经变换的基元块中的每个未经变换的基元的未经变换的几何结构数据,并将与所述基元相关的经过变换的几何结构数据缓存在高速缓存***中。如果假设从应用程序接收的基元倾向于在空间上分组(例如以基本上空间位置次序来接收),那么将未经变换的基元分组到未经变换的基元块中可以简单地包括基于未经变换的基元被接收的次序对所述未经变换的基元进行分组。然而,用于将未经变换的基元分组到未经变换的基元块中的较复杂的机制可以进一步改进图形处理***的效率。变换与显示列表中提及的未经变换的基元处于同一个未经变换的基元块中的所有未经变换的基元可以在本文中被称为基于基元块的变换。实施基于基元块的变换的UDL图形处理***具有无需复杂的高速缓存***的UDL的基于存储器的优点(无需存储器来存储在几何结构处理阶段中生成的经过变换的几何结构数据,以及不会延迟将经过变换的几何结构数据存储到存储器/从存储器检索经过变换的几何结构数据)。
现在参考图3,其展示示例未经变换的显示列表(UDL)图形处理***300,未经变换的显示列表(UDL)图形处理***300在光栅化阶段中实施基于基元块的变换。图3的***300与图2的***200的类似之处在于:其包括存储器3021、3023、3024、几何结构处理逻辑304和光栅化逻辑306。然而,与图2的***200对比,图3的几何结构处理逻辑304被配置成基于对应的经过变换的几何结构数据将未经变换的基元分组到未经变换的基元块中并将未经变换的基元块存储在存储器3022中;并且光栅化逻辑306被配置成在未经变换的显示列表提及特定的未经变换的基元时提取和变换与所述未经变换的基元处于同一个未经变换的基元块中的每个未经变换的基元的未经变换的几何结构数据并将经过变换的几何结构数据存储在高速缓存中。
存储器3021、3022、3023、3024可以被实施为存储器的一个或多个块。存储器3021、3022、3023、3024可以位于“芯片外”(即,与几何结构处理逻辑304和光栅化逻辑306不在同一个芯片上)。几何结构处理逻辑304和光栅化逻辑306可以通过如所属领域中所知的一个或多个通信总线与存储器3021、3022、3023、3024通信。
如上文所描述,应用程序生成描述要渲染的场景中的对象的几何结构数据,所述几何结构数据存储在存储器3021中。由应用程序生成的几何结构数据在本文中被称作未经变换的几何结构数据。未经变换的几何结构数据可以包括顶点数据、基元数据和/或补片数据。顶点数据可以包括用于顶点的位置数据(例如世界空间中的描述顶点的位置的X、Y及Z坐标)。顶点数据还可以包括用于描述顶点的外观的属性集合,例如要应用于顶点的纹理坐标(U,V)和/或基色。在一些状况下,顶点数据可以存储在存储器3021的顶点缓冲区中。基元数据可以包括指示哪些顶点形成每个基元的信息。举例来说,在基元是三角形的情况下,基元数据可以指示哪三个顶点形成所述基元。在一些状况下,基元数据中的标识特定顶点的信息可以是到顶点缓冲区的与所述顶点相关的特定部分的索引或指针。举例来说,如果顶点的编号是从0到127,那么顶点缓冲区的与顶点0相关的部分可以由索引或指针0标识,并且顶点缓冲区的与顶点20相关的部分可以由索引或指针20标识。在一些状况下,基元数据可以存储在索引缓冲区中。补片数据包括限定要镶嵌到基元中以供渲染的补片的控制点。
类似于图2所展示的几何结构处理逻辑204,几何结构处理逻辑304实施TBR的几何结构处理阶段。图3所展示的几何结构处理逻辑304包括变换逻辑308、基元块生成器309和平铺引擎310。变换逻辑308接收用于多个未经变换的基元的未经变换的几何结构数据,并针对那些未经变换的基元中的每一个在渲染空间(例如屏幕空间)中生成经过变换的位置数据。如上文所描述,用于未经变换的基元的未经变换的几何结构数据包括指示未经变换的基元在世界空间中的位置的位置数据。在一些状况下,生成用于未经变换的基元的经过变换的位置数据可以包括将位置数据从世界空间变换到渲染空间。然而,在其它状况下,生成经过变换的位置数据可以包括首先从原始的未经变换的基元生成一个或多个子基元(例如通过对未经变换的基元执行镶嵌和/或几何结构着色),以及将用于子基元的位置数据变换到渲染空间中。
在基元是由三个顶点限定的三角形的情况下,用于未经变换的基元(或子基元)的位置数据可以包括用于形成所述基元的三个顶点中的每一个的位置数据(例如X、Y、Z坐标)。在这些状况下,变换用于未经变换的基元(或子基元)的位置数据可以包括将形成所述基元(或子基元)的顶点的坐标变换到渲染空间(例如屏幕空间)中。变换逻辑208还可以执行例如裁剪和剔除的功能以移除落在视锥外的基元。
基元块生成器309基于用于多个未经变换的基元的经过变换的位置数据将多个未经变换的基元划分成群组,并针对每个群组生成标识未经变换的几何结构数据的与那些未经变换的基元相关的部分的基元块。举例来说,基元块生成器309可以接收用于多个未经变换的基元的经过变换的位置数据并将未经变换的基元划分成群组,使得具有类似的经过变换的位置(例如渲染空间中的类似位置)的未经变换的基元在同一个群组中;并且生成用于每个群组的未经变换的基元块,其中每个未经变换的基元块标识存储在存储器3021中的与那些未经变换的基元相关的未经变换的几何结构数据。基元块生成器309可以使用任何合适准则以用于基于未经变换的基元的经过变换的位置数据确定如何对未经变换的基元进行分组。优选地,未经变换的基元被分组为使得在渲染空间中具有在空间上类似的位置的未经变换的基元被分组在一起。在一些示例中,未经变换的基元以其到达基元块生成器309的次序被分组到未经变换的基元块中。下文参考图6到10描述基元块生成器309的示例实施方案和可以由基元块生成器309实施的方法。
未经变换的基元块是用于链接未经变换的基元的群组或集合的数据构造。图4展示未经变换的基元块4021、4022的示例。图4的示例未经变换的基元块4021、4022包含标头404、状态数据406和基元索引数据408。标头404包含描述未经变换的基元块的信息。举例来说,标头404可以包含但不限于未经变换的基元块中所提及的顶点的数目和/或未经变换的基元块中所提及的基元的数目。状态数据406包含描述未经变换的基元块4021或4022中的未经变换的基元如何将由渲染逻辑渲染的信息。状态数据可以被描述为标识用于对未经变换的基元块中所描述的基元进行渲染的配方。举例来说,状态数据可以包含但不限于标识深度比较模式、混合状态、纹理状态和/或基元类型的信息。基元索引数据408包括用于每个未经变换的基元的索引集合,所述索引标识形成所述未经变换的基元的顶点。举例来说,在基元是三角形的情况下,基元索引数据408可以包括标识形成三角形的三个顶点的三个索引的集合。所述索引是从应用程序发送的顶点的索引(其在本文中可以被称为全局索引)。每个索引充当到存储在存储器3021中的未经变换的几何结构数据410的限定特定顶点或与其相关的部分的指针。
举例来说,如图4所展示,用于第一未经变换的基元块4021的基元索引数据408包括三个未经变换的基元—P0、P1和P2—并且每个未经变换的基元由三个顶点形成。具体地说,第一未经变换的基元P0由顶点V0、V1和V2形成,第二未经变换的基元P1由顶点V1、V2和V3形成,并且第三未经变换的基元P2由顶点V2、V3、V4形成。每个顶点索引或标识符充当到未经变换的几何结构数据410的限定特定顶点或与其相关的部分(例如顶点缓冲区的部分)的指针。举例来说,顶点0(V0)的标识充当到未经变换的几何结构数据410的部分412的限定顶点0(V0)或与其相关的指针。如上文所描述,用于特定顶点的未经变换的几何结构数据可以包括描述顶点在世界空间中的位置的位置数据(例如世界空间中的坐标集合,例如X、Y及Z坐标)。用于特定顶点的未经变换的几何结构数据还可以包括用于描述顶点的外观的属性集合,例如要应用于顶点的纹理坐标(U,V)和/或基色。在一些状况下,基元索引数据可以通过复制或写出索引缓冲区的与相关的未经变换的基元相关的部分被生成。未经变换的基元块中的基元索引数据408可以根据任何合适压缩技术被压缩。
在一些状况下,状态数据可以很大(例如5个双字或更大),即使存在状态数据的仅几个个可能组合也如此。举例来说,状态数据可以包括标识多个参数的状态的信息,其中每个参数由多个位限定。在这些状况下,代替明确地包含用于每个参数的信息,状态数据的每个可能组合可以存储在存储器中的状态数据表中,并且未经变换的基元块的状态数据406部分可以仅包括到状态数据表的一个条目的索引或指针。
返回到图3,由基元块生成器309生成的未经变换的基元块存储在存储器3022中,而用于未经变换的基元的经过变换的位置数据连同指示每个未经变换的基元属于哪个未经变换的基元块的信息将被提供到平铺引擎310。平铺引擎310根据经过变换的位置数据确定哪些未经变换的基元在被变换时至少部分地落在每个平铺块的界限内。平铺引擎310接着针对每个平铺块生成未经变换的显示列表,其指示哪些未经变换的基元在被变换时至少部分地处于所述平铺块的界限内以及那些未经变换的基元中的每一个处于哪个未经变换的基元块中。
在一些状况下,用于平铺块的未经变换的显示列表可以包括标识含有相关的未经变换的基元的未经变换的基元块的信息,以及用于每个所标识的未经变换的基元块的标识所述未经变换的基元块内的哪些未经变换的基元在被变换时至少部分地位于所述平铺块的界限内的基元掩码。标识特定的未经变换的基元块的信息可以是存储器中的未经变换的基元块的地址,或唯一地标识未经变换的基元块的任何其它合适标识符。基元掩码可以包含例如用于未经变换的基元块中的每个未经变换的基元(或每个可能的未经变换的基元)的位,并且可以在所述未经变换的基元处于平铺块中时被设置为一个值(例如“1”)并在未经变换的基元不在平铺块中时被设置为另一个值(例如“0”)。举例来说,如果每个未经变换的基元块可以包括最多32个未经变换的基元,那么每个基元掩码可以包括32个位。
图4中展示用于平铺块的示例未经变换的显示列表414。在此示例中,存在编号从0到5的六个未经变换的基元(P0、P1、P2、P3、P4、P5),并且未经变换的基元0到2(P0、P1、P2)在未经变换的基元块0(UPB0)中,且未经变换的基元3到5(P3、P4、P5)在未经变换的基元块1(UPB1)中。如果平铺引擎310根据用于这些未经变换的基元的经过变换的位置数据确定未经变换的基元0、3和4在被变换时落在特定平铺块(例如平铺块0)内,那么平铺引擎310可以生成图4所展示的未经变换的显示列表414。具体地说,平铺引擎310可以生成未经变换的显示列表414,其包括:(i)将未经变换的基元块0和1标识为含有在被变换时至少部分地落在平铺块0的界限内的未经变换的基元的信息;以及(ii)用于未经变换的基元块0的基元掩码(例如“100”),其指示所述未经变换的基元块的第一未经变换的基元(例如基元0)在被变换时至少部分地落在平铺块0的界限内;以及(iii)用于未经变换的基元块1(UPB1)的基元掩码(例如“110”),其指示所述未经变换的基元块的第二和第三未经变换的基元(例如基元3和4)在被变换时至少部分地落在平铺块1的界限内。
由平铺引擎310生成的每个未经变换的显示列表存储在存储器3023中。
类似于图2的光栅化逻辑206,图3的光栅化逻辑306实施TBR的光栅化阶段。具体地说,光栅化逻辑306通过以下操作而以逐平铺块的方式对基元进行渲染:提取用于平铺块的未经变换的显示列表,并提取用于在被变换时至少部分地落在如由用于平铺块的未经变换的显示列表所指示的所述平铺块内的未经变换的基元的未经变换的几何结构数据;变换用于所述平铺块的未经变换的几何结构数据;以及基于经过变换的几何结构数据对用于所述平铺块的基元进行渲染。然而,不同于图2的光栅化逻辑206,代替仅提取和变换用于在被变换时至少部分地落在特定平铺块内的未经变换的基元的未经变换的几何结构数据,图3的光栅化逻辑306提取和变换在用于所述平铺块的未经变换的显示列表中标识的任何未经变换的基元块的所有未经变换的几何结构数据。这可以被描述为基于基元块的光栅化。换句话说,光栅化逻辑306提取和变换用于任何未经变换的基元的未经变换的几何结构数据,所述任何未经变换的基元与在被变换时至少部分地落在所述平铺块的界限内的未经变换的基元处于同一个未经变换的基元块中。一旦已经生成用于未经变换的基元块的经过变换的几何结构数据,就将所述经过变换的几何结构数据存储在高速缓存中(例如作为经过变换的基元块)以用于对引起其生成的平铺块进行渲染,并潜在地用于对一个或多个后续平铺块进行渲染。
如图3所展示,光栅化逻辑306可以包括提取逻辑312、变换逻辑313、高速缓存315、隐藏表面移除(HSR)逻辑314和纹理化/着色逻辑316。当光栅化逻辑306想要(或准备好)处理特定平铺块时,提取逻辑312从存储器3023提取用于所述平铺块的未经变换的显示列表。提取逻辑312接着确定高速缓存315是否包括用于未经变换的显示列表中提及的所有未经变换的基元块的经过变换的几何结构数据。举例来说,如果未经变换的显示列表提及未经变换的基元块0和未经变换的基元块1,那么提取逻辑312确定高速缓存315是否包括用于未经变换的基元块0和未经变换的基元块1的经过变换的几何结构数据。如果高速缓存315不包括用于所述平铺块的未经变换的显示列表中提及的至少一个未经变换的基元块的经过变换的几何结构数据,那么提取逻辑312提取用于那些未经缓存的未经变换的基元块的未经变换的几何结构数据。
提取用于未经变换的基元块的未经变换的几何结构数据可以包括从存储器3022提取未经变换的基元块,以及使用所述未经变换的基元块中的标识与其相关的未经变换的几何结构数据的信息(例如标识形成未经变换的基元块的未经变换的基元的顶点的信息)以从存储器3021提取相关的未经变换的几何结构数据。从存储器3021提取的任何未经变换的几何结构数据被提供到变换逻辑313,变换逻辑313变换未经变换的几何结构数据(例如基元)以生成经过变换的几何结构数据。变换用于未经变换的基元的未经变换的几何结构数据包括针对所述未经变换的基元在渲染空间(例如屏幕空间)中至少生成经过变换的位置数据。变换未经变换的几何结构数据还可以包括执行例如裁剪和剔除的功能以裁剪或移除部分地或完全落在视锥外的基元,和/或对基元执行照明/属性处理。由变换逻辑313生成的任何经过变换的几何结构数据存储在高速缓存315中。
一旦在用于平铺块的显示列表中标识的未经变换的基元块的经过变换的几何结构数据存储在高速缓存315中,提取逻辑312和/或变换逻辑313就向HSR逻辑314通知HSR逻辑314可以开始处理平铺块以及所述基元块中的哪些基元形成平铺块。HSR逻辑314移除隐藏(例如被其它基元片段隐藏)的基元片段。所属领域中已知执行隐藏表面移除的方法。接着将其余片段(在隐藏表面移除之后)传递到纹理化/着色逻辑316,纹理化/着色逻辑316对基元片段执行纹理化和/或着色以确定被渲染图像的像素值,所述像素值可以被传递到存储器以用于存储在帧缓冲区中。尽管图3中未展示,但纹理化/着色逻辑316可以从存储器接收纹理数据,以便将纹理化应用于基元片段,如所属领域的技术人员所知。纹理化/着色逻辑316可以将进一步处理应用于基元片段(例如α混合和其它过程),如所属领域的技术人员所知,以便确定图像的被渲染像素值。
现在参考图5,其示出示例方法500,方法500可以由例如图3的UDL图形处理***300的UDL图形处理***实施,以用于根据从应用程序接收的未经变换的几何结构数据对场景进行渲染。方法500可以被划分成几何结构处理阶段(框502到510)和光栅化阶段(框512到526)。方法500在框502处的几何结构处理阶段中开始,其中接收描述要渲染的场景中的对象的未经变换的几何结构数据。未经变换的几何结构数据包括用于多个未经变换的基元中的每一个的位置数据。如上文所描述,每个未经变换的基元可以由一个或多个顶点限定,并且用于未经变换的基元的未经变换的几何结构数据可以包括描述一个或多个顶点在世界空间中的位置的顶点数据(例如X、Y及Z坐标),以及描述哪些顶点形成所述基元的基元数据。
在框504处,生成用于多个未经变换的基元中的每一个的经过变换的位置数据。如上文所描述,在一些状况下,生成用于未经变换的基元的经过变换的位置数据可以包括将用于未经变换的基元的位置数据从世界空间变换到渲染空间(例如屏幕空间)。在其它状况下,生成用于未经变换的基元的经过变换的位置数据可以包括从未经变换的基元生成一个或多个子基元,以及将用于子基元的位置数据从世界空间变换到渲染空间(例如屏幕空间)。变换用于未经变换的基元或子基元的位置数据可以涉及将形成基元或子基元的顶点的位置(例如X、Y、Z坐标)从世界空间变换到渲染空间(例如屏幕空间)。将顶点的位置(例如X、Y、Z坐标)从世界空间变换到渲染空间(例如屏幕空间)的过程可以被称作视区变换。所属领域的技术人员已知用于执行视区变换的方法。一旦已经生成用于未经变换的基元的经过变换的位置数据,方法500就可以进行到框506或方法500可以直接进行到框508。
在任选的框506处,基于经过变换的位置数据裁剪或剔除(由例如变换逻辑308或剔除模块)未经变换的基元以移除任何冗余基元,以便减少所述方法的其余框中的工作负载。存在可以用于标识出未经变换的基元是冗余的且因此可以被移除的许多不同方法。可以使用任何合适方法或方法组合来标识冗余基元。举例来说,在一些状况下,如果根据经过变换的位置数据,未经变换的基元正背对用户、完全在屏幕外、完全在裁剪平面外、具有并不覆盖任何样本点的限界方框,和/或并不覆盖任何样本点,那么未经变换的基元可以被认为是冗余的。一旦已经基于经过变换的位置数据剔除未经变换的基元,方法500就进行到框508。
在框508处,在已经针对未经变换的基元生成经过变换的位置数据之后(并任选地在已经剔除基元之后),基于经过变换的位置数据将未经变换的基元分类成群组并且针对每个群组生成未经变换的基元块。如上文所描述,每个未经变换的基元块包含标识形成所述未经变换的基元块的未经变换的基元的信息,以及指示几何结构数据的与那些未经变换的基元中的每一个相关的部分的信息。举例来说,如图4所展示,每个未经变换的基元块可以包括基元索引区段,其针对基元块中的每个未经变换的基元标识哪些顶点形成所述基元。在一些状况下,标识顶点的信息可以是到顶点缓冲区中的索引,其可以用于从顶点缓冲区获得与所述顶点相关的几何结构数据。未经变换的基元块还可包含可辅助在光栅化阶段中处理基元块的其它信息,例如指示块中的未经变换的基元将被光栅化的方式的信息。
未经变换的基元被优选地分组,使得同一未经变换的基元块中的未经变换的基元当被变换时在渲染空间(例如屏幕空间)中在空间上是接近的(即,具有在空间上类似的位置)。在预期将以在空间上类似的基元被紧密靠近地接收或处理的次序接收或处理未经变换的基元的情况下,可简单地基于未经变换的基元被接收或处理的次序(例如以未经变换的基元从应用程序被接收的提交次序)来对未经变换的基元进行分组。举例来说,每K个未经变换的基元可被分组以形成未经变换的基元块,其中K是大于2的整数。然而,基于经过变换的位置数据对未经变换的基元进行分组的较复杂的方法可改进光栅化阶段的效率。下文关于图6到10描述用于基于经过变换的位置数据对未经变换的基元进行分组的示例方法和基元块生成器。一旦未经变换的基元已经分组到未经变换的基元块中,那么方法500进行到框510。
在框510处,对于每一平铺块,根据用于未经变换的基元的经过变换的位置数据确定当被变换时至少部分地落在平铺块的界限内的未经变换的基元,并且针对平铺块生成未经变换的显示列表,其标识当被变换时至少部分地落在平铺块内的未经变换的基元和所述未经变换的基元所属的未经变换的基元块。所属领域的技术人员已知用于确定哪些未经变换的基元在被变换时至少部分地落在平铺块的界限内的方法。如上文所描述,每一未经变换的显示列表可包括标识哪些未经变换的基元块包括当被变换时落在对应的平铺块内的未经变换的基元的信息,且对于每一经过标识的未经变换的基元块,可包括标识所述块中的哪些未经变换的基元在被变换时至少部分地落在平铺块的界限内的信息。标识未经变换的基元块的信息可以是存储器中的未经变换的基元块的地址或唯一地标识未经变换的基元块的任何其它合适的标识符。标识未经变换的基元块中的哪些未经变换的基元在被变换时至少部分地落在平铺块的界限内的信息可以是基元掩码。基元掩码可包括用于未经变换的基元块中的每一未经变换的基元的位,且所述位可在对应的未经变换的基元在被变换时处于平铺块中时被设置为一个值(例如“1”),并且在对应的未经变换的基元在被变换时不处于平铺块中时被设置为另一个值(例如“0”)。一旦已经生成未经变换的显示列表,那么方法500进行到光栅化阶段开始的框512。
在框512处,(例如在光栅化逻辑306或提取逻辑312处从存储器3023)接收框510中生成的用于平铺块的未经变换的显示列表。一旦接收显示列表,那么方法500进行到框513。在框513处,选择未经变换的显示器中标识的第一未经变换的基元块并且方法500进行到框514。
在框514处,确定高速缓存中是否存在用于选定的未经变换的基元块的经过变换的几何结构数据。如将在框518中更详细地描述,在用于未经变换的基元块的未经变换的几何结构数据(即,与未经变换的基元块中的未经变换的基元相关的未经变换的几何结构数据)在光栅化阶段中变换之后,用于未经变换的基元块的经过变换的几何结构数据暂时存储在高速缓存中。如果用于选定的未经变换的基元块的经过变换的几何结构数据不在高速缓存中,那么方法500进行到框516。然而,如果高速缓存包括用于选定的未经变换的基元块的经过变换的几何结构数据,那么方法500进行到框520。
在框516处,从存储器(例如存储器3021)提取(例如通过提取逻辑312)用于选定的未经变换的基元块的未经变换的几何结构数据。可基于未经变换的基元块中的信息从存储器提取用于未经变换的基元块的未经变换的几何结构数据。举例来说,如上文所描述,每一未经变换的基元块可包含指示形成所述块中的未经变换的基元中的每一个的顶点。所标识的顶点可用于获得与那些顶点相关的几何结构数据,所述几何结构数据共同形成用于未经变换的基元块的未经变换的几何结构数据。在一些状况下,标识顶点的信息可以是顶点缓冲区中的索引,其可用于获得顶点缓冲区中的与所述顶点相关的未经变换的几何结构数据。一旦已经提取用于选定的未经变换的基元块的未经变换的几何结构数据,那么方法500进行到框518。
在框518处,在框516中提取的未经变换的几何结构数据被变换以生成经过变换的几何结构数据,并且经过变换的几何结构数据存储在高速缓存中。变换用于未经变换的基元的未经变换的几何结构数据包括在渲染空间(例如屏幕空间)中生成用于未经变换的基元的经过变换的位置数据。如上文所描述,在一些状况下,生成用于未经变换的基元的经过变换的位置数据可包括将未经变换的基元的位置变换成渲染空间中的位置。在其它状况下,生成用于未经变换的基元的经过变换的位置数据可包括从未经变换的基元生成一个或多个子基元(通过镶嵌或几何形状着色)及将那些子基元的位置变换成渲染空间中的位置。如上文所描述,在基元由一个或多个顶点限定的情况下,将基元(或子基元)的位置变换成渲染空间中的位置可包括将顶点的坐标变换为渲染空间(例如屏幕空间)坐标。变换几何结构数据还可包括对未经变换的几何结构数据执行一个或多个其它操作,例如但不限于裁剪或剔除不相关的基元,如上文关于框506所描述。一旦在框516中所提取的未经变换的几何结构数据已经变换并且存储在高速缓存中,那么方法500进行到框520。
在框520处,从高速缓存获得用于在未经变换的显示列表中标识的未经变换的基元(即,待用于对平铺块进行渲染的那些未经变换的基元)的经过变换的几何结构数据并将其用于对那些基元进行渲染。如上文所描述,对基元进行渲染可包括执行隐藏表面移除以移除隐藏在场景中的基元的片段,和/或对片段执行纹理化和/或着色以确定被渲染的图像的像素值。一旦已经确定用于平铺块的像素值,那么方法500进行到框522。
在框522处,像素值被传递到存储器3024以用于存储在帧缓冲区中。方法500接着进行到框524,其中确定未经变换的显示列表是否标识另一未经变换的基元块。如果未经变换的显示列表标识另一未经变换的基元块,那么方法500进行到框526,其中选择在未经变换的显示列表中标识的下一未经变换的基元块且接着针对未经变换的基元块重复框514到522。
可针对每一未经变换的显示列表(即,针对每一平铺块)重复框512到522(即,光栅化阶段),此时整个图像已经被渲染并存储于存储器中。此时,所述图像可被输出并例如在显示器上显示。
基元块生成器
如上文所描述,基元块生成器309被配置成基于用于多个未经变换的基元的经过变换的位置数据将多个未经变换的基元划分成群组,并且生成用于每一群组的未经变换的基元块,其标识与那些未经变换的基元相关的未经变换的几何结构数据的部分。基元块生成器309可使用任何合适准则以用于基于未经变换的基元的经过变换的位置来确定如何对未经变换的基元进行分组。优选地,未经变换的基元经过分组,使得当被变换时在渲染空间(例如屏幕空间)中紧密接近的未经变换的基元被分组在一起。如上文所描述,提取并变换与用于平铺块的未经变换的显示列表中提及的未经变换的基元块相关的所有未经变换的几何结构数据,不管未经变换的基元块中的未经变换的基元中的所有还是仅一部分在被变换时至少部分地落在所述平铺块内。可使用SIMD处理单元有效地执行此变换以并行处理来自未经变换的基元块的几何结构数据的不同条项。用于未经变换的基元块的所有经过变换的几何结构数据接着存储在高速缓存中。因此,如果被提取且变换的“额外的”未经变换的基元(即,与未经变换的基元处于相同的未经变换的基元块中的未经变换的基元,其在被变换时处于平铺块中但自身不落在平铺块内)在被变换时在空间上接***铺块中的未经变换的基元,那么有可能需要与所述额外的未经变换的基元相关的经过变换的几何结构数据来对附近的平铺块中的一个进行渲染(其有可能被迅速处理),这增加了与“额外的”未经变换的基元相关的经过变换的几何结构数据将在其被需要时又处于高速缓存中的可能性。
未经变换的基元(和与其相关的未经变换的几何结构数据)可以特定次序或序列被提供到几何结构处理逻辑304。在这些状况下,变换逻辑308可被配置成以所述次序处理未经变换的基元(即,变换与未经变换的基元相关的位置数据),使得基元块生成器309以相同次序接收与未经变换的基元相关的经过变换的位置数据。未经变换的基元的次序会影响场景被渲染的方式对于所属领域的技术人员而言将显而易见。举例来说,如果多个重叠基元是半透明的,那么处理多个重叠基元的次序可能会影响基元被掺合以形成被渲染的场景的方式。因此,为了维持未经变换的基元的序列次序,基元块生成器309可被配置成基于未经变换的基元(即,与其相关的经过变换的位置数据)被接收的次序(“提交次序”)来进行分组以便保留其次序。举例来说,基元块生成器309可被配置成继续将所接收的未经变换的基元放置在同一分组中,直到所述分组满了为止,此时基元块生成器创建并输出用于基元的分组的未经变换的基元块。所接收的任何其它未经变换的基元放置在下一分组中,直到所述分组满了等等为止。以此方式,在未经变换的基元块中维持未经变换的基元的次序。如果分组中的顶点的数目大于或等于顶点的最大数目(例如基元块中的顶点的最大数目可以是64或128个以给出两个示例)和/或如果分组中的基元的数目大于或等于基元的最大数目(例如基元块中的基元的最大数目可以是64或128个,以给出两个示例),那么群组可被视为“满的”。如果存在状态改变,那么可起始新的分组,因为在本文中所描述的示例中,在一起被分组到未经变换的基元块中的基元共享相同状态。
在次序上接近的未经变换的基元在被变换时也在在空间上紧密靠近(即,在渲染空间(例如屏幕空间)中)的状况下,基于基元(即,与其相关的经过变换的位置数据)被接收的次序对未经变换的基元进行分组在图3的图形处理***300中实施起来简单且很好地起作用。然而,在次序上接近的未经变换的基元有可能在渲染空间(例如屏幕空间)中在空间上远离的状况下,对未经变换的基元进行分组的此方法可能不允许光栅化逻辑306有效地操作。这是因为在这些状况下此方法有可能将产生含有未经变换的基元的未经变换的基元块,所述未经变换的基元在被变换时在空间上远离。如果未经变换的基元块包括当被变换时在空间上远离的未经变换的基元,那么光栅化逻辑306不大可能在从高速缓存收回所述经过变换的几何结构数据之前使用与未经变换的基元块中的“额外的”未经变换的基元相关的经过变换的几何结构数据。
举例来说,图6展示将由图3的图形处理***300渲染的场景600的简单示例。场景600包含两个类似对象6021和6022,其在场景600中在空间上彼此分离。如上文所描述,在TBR图形处理***中,渲染空间(例如屏幕空间)被划分成多个平铺块。在图6中所展示的示例中,渲染空间(例如屏幕空间)被划分成矩形平铺块的4×6阵列。在其它示例中,渲染空间(例如屏幕空间)可被划分成平铺块的不同编号和/或布置。在一个示例中,每一平铺块包括32×32个样本位置,并且渲染空间(例如屏幕空间)中可存在许多平铺块(例如数百个平铺块),这取决于被渲染的图像的大小和分辨率。在其它示例中,平铺块可以是非矩形的(例如三角形或六边形),或可根据其位置在大小上变化。
图6展示第一对象6021的两个基元6041、6042以及第二对象6022的两个类似基元6043、6044。在图6的示例中,基元是可由三个顶点处的顶点数据限定的三角形,但在其它示例中,可使用其它类型的基元,其中基元可以是例如四边形或六边形的其它形状,或可以是线或点。可以被视为合适的次序在几何结构处理逻辑304处接收基元,并且所述基元可例如以所述次序将类似的基元放置在一起,使得在几何结构处理逻辑304处连续地接收基元6041、6042。作为一示例,如果基元具有类似状态,其中所述状态是描述基元将被渲染的方式的信息,那么基元可以是“类似”的,且因此按所述次序放置在一起。
如果未经变换的基元以所述次序放置使得“类似的”基元以所述次序放置在一起,那么基元6041、6042、6043、6044可以所述次序放置在一起且第一对象的其它基元可以所述次序被放置得更远。这意味着如果基元块生成器基于基元被接收的次序将未经变换的基元放置在基元块中,那么基元6041、6042、6043、6044将有可能放置在相同的未经变换的基元块中,而第一对象6021的其它基元可放置在一个或多个不同的未经变换的基元块中。这意味着当光栅化逻辑306处理第六列的第一行中的平铺块时,其将提取并变换用于未经变换的基元块中的所有未经变换的基元的未经变换的几何结构数据,所述未经变换的基元块含有基元6043、6044(即,其还将提取并变换用于基元6041、6042的未经变换的几何结构数据)。然而,由于第二列的第三行中的平铺块远离第六列的第一行中的平铺块,因此当第二列的第三行中的平铺块由光栅化逻辑306处理时,用于基元6041、6042的经过变换的几何结构数据不太可能将又处于高速缓存中。这将意味着将必须再次提取并变换用于所述未经变换的基元块的未经变换的几何结构数据。在变换几何结构数据的过程包含执行一个或多个着色器程序的情况下,重新变换用于未经变换的基元的未经变换的几何结构数据可能是时间和处理资源密集的,所述着色器程序例如但不限于顶点着色器程序;几何形状着色器程序;外壳着色器程序;和域着色器程序。此外,在通过图3的图形处理***300处理未经变换的基元时,将数据写入到存储器3021、3022、3023及从其读取数据是相对缓慢的过程,尤其当存储器是在“芯片外”时,即与几何结构处理逻辑304和/或光栅化逻辑306不在同一芯片上。如果未经变换的基元基于其空间位置被分组以增加与未经变换的基元块中的“额外的”未经变换的基元(即,未经变换的基元块中的那些未经变换的基元,其在被变换时不会至少部分地落在被处理的平铺块内)相关的经过变换的几何结构数据将在与“额外的”未经变换的基元相关的平铺块被处理时又处于高速缓存中的可能性,光栅化逻辑306可因此能够更有效地处理基元。
因此,在其它状况下,基元块生成器309可被配置成根据未经变换的基元的经过变换的空间位置来对未经变换的基元进行分组,如经过变换的位置数据所阐述。用于根据基元的空间位置对基元进行分组的示例方法在英国公开专利申请第GB2526598号中描述并且以引用的方式并入本文中。具体地说,GB2526598描述一种方法,其中当在基元块生成器处接收基元时,基元块生成器比较所接收的基元的空间位置与一个或多个‘开放的’基元块的空间位置并且基于比较的结果将所接收的基元分配到基元块。GB2526598描述在一个示例中,如果基元的空间位置与基元块的空间位置重合或与基元块的空间位置相距最小距离(基元块的空间位置是基于基元块中的基元的空间位置),那么基元被分配到基元块。GB2526598描述用于确定基元的空间位置、基元块的空间位置和基元的空间位置与基元块的空间位置之间的距离的若干机制。
本发明人已辨识出,如果关于是否将基元添加到基元块的决策是基于基元的空间位置与基元块的空间位置之间的距离和基元块的满度,那么可进一步改进光栅化阶段的性能和效率。这在具有充分的基元块(其将填充SIMD通道)与具有基元块之间提供良好的折衷,所述基元块具有相距过远的基元。因此,下文描述基元块生成器,其被配置成基于(i)基元的空间位置与基元块的空间位置之间的距离和(ii)基元块的满度来将基元放置在基元块中。举例来说,在一些状况下,如果基元的空间位置与基元块的空间位置之间的距离小于距离阈值,那么可将基元放置在基元块中,其中基于基元块的“满度”而动态地选择距离阈值。在一些状况下,基元块的满度越低,则阈值距离越大,且基元块的满度越高,则阈值距离越小。
现在参考图7,其说明用于生成基元块的示例方法700,所述示例方法可由图3的基元块生成器309实施,其中关于是否将基元放置在基元块中的决策是基于基元的空间位置与基元块的空间位置之间的距离和基元块的满度。方法700可用于例如图3的图形处理***300的UDL TBR图形处理***中以生成未经变换的基元块(即,指代未经变换的基元的基元块),或方法700可用于非UDL TBR图形处理***中以生成经过变换的基元块(即,指代经过变换的基元的基元块)。如上文所描述,在一些状况下,未经变换的基元可变换成多个经过变换的基元(即,多个子基元可从其生成,并且子基元可变换成经过变换的基元)。在这些状况下,经过变换的基元可基于经过变换的基元或基于未经变换的基元而被分类到未经变换的基元块中。
在基于未经变换的基元将经过变换的基元分类到基元块中的情况下,出于关于是否将基元添加到基元块进行决策的目的,将对应于单个未经变换的基元的所有经过变换的基元视为单个基元。在这些状况下,当前基元是与未经变换的基元相关的经过变换的基元的集合。在这些状况下,将仅在单个未经变换的基元块中标识每一未经变换的基元,这可能意味着仅必须将未经变换的基元块重新变换一次。然而,当变换每一未经变换的基元块时,与所述每一未经变换的基元块相关的经过变换的几何结构数据可存储在经过变换的基元块中。如果未经变换的基元产生许多经过变换的基元,那么与未经变换的基元相关的所有经过变换的几何结构数据可能无法存储在单个经过变换的基元块中(归因于大小限制),并且可能必须存储在经过变换的基元块的层级中,这可能会使经过变换的几何结构数据的检索更复杂。
与此对比,在经过变换的基元基于经过变换的基元而分类到基元块中的情况下,关于是否将基元添加到基元块的决策仅基于用于所述经过变换的基元的经过变换的位置数据。在这些状况下,当前基元是单个经过变换的基元。这意味着对应于相同的未经变换的基元的不同的经过变换的基元可与不同的未经变换的基元块相关联。因此,可在多个未经变换的基元块中标识未经变换的基元。在这些状况下,可将额外信息添加到未经变换的基元块以指定与在未经变换的基元块中标识的未经变换的基元相关的哪些经过变换的基元与基元块相关联。接着,当变换未经变换的基元块时,仅与所标识的经过变换的基元相关的经过变换的几何结构数据将存储在经过变换的基元块中。这允许***提前知道将有多少经过变换的基元处于对应的经过变换的基元块中,从而允许每个未经变换的基元块有一个经过变换的基元块。然而,这可能引起在光栅化阶段中多次重新变换相同的未经变换的基元—对于未经变换的基元所属的每一未经变换的基元块,有一次。
方法700开始于框702处,其中基元块生成器接收用于当前基元的经过变换的位置数据。如上文所描述,当前基元可以是单个经过变换的基元(即,由变换逻辑输出的基元)或由与相同的未经变换的基元相关的经过变换的基元的集合形成的基元。在当前基元是单个经过变换的基元的情况下,经过变换的位置数据包括指示基元在渲染空间(例如屏幕空间)中的位置的信息。在基元由一个或多个顶点限定的情况下,经过变换的位置数据可包括用于形成所述基元的顶点的位置数据(例如X、Y、Z坐标)。然而,在当前基元是由与相同的未经变换的基元相关的经过变换的基元的集合形成的基元的情况下,经过变换的位置数据可包括指示一个或多个经过变换的基元中的每一个在渲染空间中的位置的信息。然而,位置数据可包括其它和/或不同信息对于所属领域的技术人员将显而易见。一旦已经接收用于当前基元的经过变换的位置数据,那么方法700进行到框704。
在框704处,基元块生成器确定当前基元块中是否存在任何基元。换句话说,基元块生成器确定当前基元块是否是空的。当前基元块是新的基元可被添加到的基元块。如果基元块生成器确定当前基元块中存在至少一个基元,那么方法700进行到框706。然而,如果基元块生成器确定当前基元块中不存在基元,那么方法700直接进行到框712。
在框706处,基元块生成器确定当前基元的空间位置与当前基元块的空间位置之间的距离。所述距离是指示当前基元与当前基元块中的基元有‘多近’的定量度量或度量集合。所述距离可以任何合适方式来确定。
在一些状况下,当前基元的空间位置与当前基元块的空间位置之间的距离由不具有当前基元的当前基元块的限界方框(即,用于当前基元块中的基元的限界方框)和具有当前基元的当前基元块的限界方框(即,用于当前基元块中的基元和当前基元的限界方框)确定。用于一个或多个基元的集合的“限界方框”是其中放置有所有基元的最小的限界方框或围封框。限界方框可以是轴线对准的限界方框。可根据所述集合中的基元的最大和最小的x和y位置来确定限界方框。在每一基元由一个或多个顶点限定的情况下,基元的最大和最小的x和y位置可以分别是形成集合中的基元的顶点的最大和最小的x和y坐标。在一些状况下,限界方框的分辨率可以是每样本分辨率(即,采样网格的分辨率)或每平铺块分辨率。举例来说,图8展示划分成平铺块的4×5矩阵的示例渲染空间800。如果集合中的基元形成对象802,那么可在804处展示用于基元的限界方框,如果按每样本分辨率。与此对比,可在806处展示用于基元的限界方框,如果按每平铺块分辨率。
在一些状况下,就一个或多个尺寸而言,当前基元的空间位置与当前基元块的空间位置之间的距离是基于不具有当前基元的基元块的限界方框的大小和具有当前基元的基元块的限界方框的大小。举例来说,在一些状况下,就一个或多个尺寸而言,所述距离可等于用于具有及不具有当前基元的基元块的限界方框的大小之间的差。具体地说,所述距离可等于:限界方框的x尺寸的差;限界方框的y尺寸的差;限界方框的面积(例如x*y)的差;或这些差中的一个或多个的组合。举例来说,所述距离可由所列举的差度量的任何组合表示。举例来说,所述距离可由单个差度量或多个差度量表示。举例来说,在一些状况下,所述距离可由三数组(a,b,c)表示,其中a是限界方框的x尺寸的差,b是限界方框的y尺寸的差,且c是限界方框的面积的差。
在其它示例中,就一个或多个尺寸而言,所述距离可等于用于具有及不具有当前基元的当前基元块的限界方框的大小之间的比率。举例来说,所述距离可等于:限界方框的x尺寸的比率;限界方框的y尺寸的比率;限界方框的面积(例如x*y)的比率;或这些比率中的一个或多个的组合。举例来说,所述距离可由单个比率度量或多个比率度量表示。举例来说,在一些状况下,所述距离可由三数组(a,b,c)表示,其中a是限界方框的x尺寸的比率,b是限界方框的y尺寸的比率,且c是限界方框的面积的比率。
在其它示例中,所述距离可以是距离和比率度量的组合。
在其它状况下,代替根据具有及不具有当前基元的当前基元块的限界方框确定距离,所述距离可根据对平铺块进行渲染的次序来确定。平铺块渲染次序可能并非固定的(例如其可被动态地选择),但如果其是固定的或至少可被估计,那么平铺块渲染次序可用于确定当前基元与当前基元块有‘多近’。具体地说,平铺块渲染次序可用于估计在处理与当前基元块相关的平铺块之后、在处理当前基元之前将花费多长时间。一般来说,如果与当前基元相关的未经变换的几何结构数据和用于当前基元块的未经变换的几何结构数据同时被变换,那么基于平铺块渲染次序,当前基元距当前基元块的平铺块越多,则与当前基元和当前基元块相关的经过变换的几何结构数据将仍在高速缓存中的可能性越低。
举例来说,图9展示划分成平铺块的4×5矩阵的示例渲染空间900,其中渲染次序由箭头902展示(即,从最上行开始,一次渲染一行平铺块,并且从左到右渲染每一行)。在此示例中,当前基元块中的基元形成对象904,所述对象位于第一列和第一行中的平铺块中,且当前基元906位于第三行和第一列中的平铺块中。在此示例中,当前基元906与当前基元块904之间的空间距离相对较近(例如相距2个平铺块),但当前基元906与当前基元块904之间的基于平铺块渲染次序的距离远得多(例如相距10个平铺块)。
尽管这是简单的示例,其中当前基元块的基元落在单个平铺块内并且当前基元也落在单个平铺块内,但在当前基元块的基元落在多个平铺块内和/或当前基元落在多个平铺块内的状况下,可应用相同原理。举例来说,更一般来说,当前基元的限界方框和用于当前基元块的限界方框可被映射到渲染空间中的平铺块。在一些状况下,所述限界方框之间的距离可以是两个限界方框的两个最接***铺块(根据平铺块渲染次序)之间的距离(例如以平铺块为单位)。举例来说,如果当前基元块被映射到图9中所展示的渲染空间的左上角的平铺块的2×2阵列并且当前基元位于如图9中所展示的第三列和第一行中的平铺块中,那么所述距离将为4个平铺块。在其它状况下,用于当前基元的限界方框与用于当前基元块的限界方框之间的距离可根据平铺块渲染次序被确定为两个限界方框的中心之间的距离(例如以平铺块为单位)。
一旦已经确定当前基元与当前基元块之间的距离,那么方法700进行到框708。
在框708处,基元块生成器基于在框706中确定的距离与一个或多个距离阈值的比较来确定是否将当前基元添加到当前基元块,其中基于当前基元块的满度来动态地确定一个或多个距离阈值。理想地,基元块为满(例如具有基元或顶点的最大数目(或接近最大数目))并且包括具有在渲染空间中在空间上类似的位置的基元(例如其紧靠在一起)。然而,在许多状况下,满度和空间局部性是竞争性准则。具体地说,在许多状况下,为了使基元块为满的,基元块中的基元之间的空间距离必须增加使得基元块包括在渲染空间中远离的基元。类似地,在许多状况下,为了确保基元之间的空间距离是小的,基元块变小。除了小的基元块(即,具有少量基元的基元块)不能够填充SIMD通道之外,还存在与每一基元块相关联的附加项。因此,需要找到基元块中的基元之间的空间距离与基元块的满度之间的平衡。
本发明人已辨识出,可通过基于当前基元块的满度调节阈值来实现良好的平衡。具体地说,在一些状况下,如果当前基元块满度较低,那么距离阈值较高,并且如果当前基元块满度较高,那么距离阈值较低。这意味着当基元块中仅存在少数的基元时,当前基元相对有可能被添加到当前基元块,以便填充基元块,即使当当前基元远离已经在当前基元块中的基元时。与此对比,当当前基元块中存在许多基元时,如果当前基元接近已经在当前基元块中的基元,那么当前基元仅有可能被添加到当前基元块。因此,当基元块相当空(例如包括少量基元和/或顶点)时,大小准则比空间类似性准则重要—即将更多的基元添加到基元块比使基元在空间上接近重要;且当基元块相当满(例如包括大量基元和/或顶点)时,空间类似性准则比大小准则重要—即,不值得添加在空间上远离的基元,这是由于基元块已经具有在空间上紧靠在一起的大量的基元。
在一些状况下,可基于当前基元块的满度根据公式动态地确定一个或多个距离阈值。举例来说,一个或多个距离阈值可与当前基元块的满度成反比。在其它状况下,可存在与满度的某些范围相关联的一个或多个距离阈值的预定集合。举例来说,可存在当当前基元块小于四分之一满时所使用的一个或多个距离阈值的第一集合、当当前基元块为至少四分之一满但小于二分之一满时所使用的一个或多个距离阈值的第二集合、当当前基元块为至少二分之一满但小于四分之三满时所使用的一个或多个距离阈值的第三集合和当当前基元块为至少四分之三满时所使用的一个或多个距离阈值的第四集合。对于所属领域的技术人员将显而易见的是,这些仅是示例并且可存在距离阈值的不同数目的集合和/或距离阈值的预定集合可与满度的不同范围匹配。在一些状况下,与不同范围相关联的距离阈值的预定集合可存储在查找表中。
不论距离阈值是否根据公式动态地确定或针对满度的某些范围预定,在每满度/满度范围存在多个距离阈值的情况下,对于每一距离阈值,距离阈值可不增加/减小相同量。举例来说,如果用于第一满度范围的距离阈值的集合包括第一距离阈值10和第二距离阈值20,那么用于第二满度范围的距离阈值的集合可包括第一距离阈值5和第二距离阈值15。
当前基元块的满度可基于(i)当前基元块中的基元的数目,和/或(ii)在基元由一个或多个顶点形成的情况下,当前基元块中的顶点的数目。举例来说,可存在基元块中的最大数目的基元和/或最大数目的顶点。基元块的满度可等于:例如当前基元块中的基元的数目与基元的最大数目的比率;当前基元块中的顶点的数目与顶点的最大数目的比率;两个比率中的最大比率;或两个比率的另一组合。对于所属领域的技术人员将显而易见的是,这些仅是示例并且当前基元块的‘满度’可以任何合适方式来确定。
在方法700用于生成经过变换的基元块的情况下,经过变换的基元块将包括经过变换的基元,因此当前基元块中的基元的数目是当前基元块中的经过变换的基元的数目,并且当前基元块中的顶点的数目是当前基元块中的经过变换的顶点的数目。与此对比,在方法700用于生成未经变换的基元块的情况下,未经变换的基元块将包括未经变换的基元,因此当前基元块中的基元的数目是当前基元块中的未经变换的基元的数目。在方法700用于生成未经变换的基元块的情况下,每一未经变换的基元块可与一个或多个经过变换的基元和一个或多个经过变换的顶点相关联。在基于未经变换的基元处理经过变换的基元的情况下,这是与未经变换的基元块中的未经变换的基元相关联的所有经过变换的基元。在基于经过变换的基元处理经过变换的基元的情况下,这可以是与未经变换的基元块中的未经变换的基元相关的经过变换的基元,所述未经变换的基元明确地与未经变换的基元块相关联。同样地,经过变换的基元块可与多个经过变换的顶点相关联。在这些状况下,满度还可或替代地基于与当前基元块相关联的经过变换的基元或经过变换的顶点的数目。可限制与未经变换的基元块相关联的经过变换的基元或经过变换的顶点的数目以当在光栅化阶段中生成对应的经过变换的基元块时限制其大小。
在所述距离包括单个度量(例如限界方框的面积的比率或限界方框的x尺寸之间的差)的情况下,可存在单个距离阈值。在这些状况下,基元块生成器可确定在距离小于距离阈值的情况下将当前基元添加到当前基元块,否则不将其添加到当前基元块。在所述距离包括多个度量(例如三数组(a,b,c))的情况下,可存在单个距离阈值或多个距离阈值。举例来说,在一些状况下,多个距离度量可以某一方式组合,且组合的度量可与单个距离阈值比较。在其它状况下,可存在与不同距离度量比较的多个距离阈值。举例来说,如果所述距离包括三数组(a,b,c),其中a是限界方框的x尺寸的比率,b是限界方框的y尺寸的比率并且c是限界方框的面积的比率,那么可存在与距离度量中的一个比较的三个距离阈值。在这些状况下,基元块生成器可被配置成在超过仅距离阈值的子集(例如仅一个距离阈值)的情况下或仅在超过所有距离阈值的情况下确定不将当前基元添加到当前基元块。
如果根据所述距离与一个或多个距离阈值的比较确定不将当前基元添加到当前基元块,那么方法700进行到框710。然而,如果根据所述距离与一个或多个距离阈值的比较确定将当前基元添加到当前基元块,那么方法700直接进行到框712。
在框710处,在确定不将当前基元添加到当前基元块之后,基元块生成器清空当前基元块。清空当前基元块包括输出当前基元块的内容(例如标识基元块中的基元的信息)及清空当前基元块。输出基元块可包括将当前基元块写入到存储器(例如存储器3022)。因此,在清空结束时,已经输出当前基元块内容(例如用于TBR的光栅化阶段中)并且(新的)当前基元块是空的。一旦已经清空当前基元块,那么方法700进行到框712。
在框712处,基元块生成器将当前基元添加到当前基元块。在方法700用于生成未经变换的基元块的情况下,将当前基元添加到当前基元块可包括将信息添加到当前基元块,所述信息标识与当前基元相关的未经变换的基元。如上文所描述,在基元是由一个或多个顶点限定的情况下,标识基元的信息可包括标识形成所述基元的顶点的信息,其允许检索与所述顶点相关的未经变换的几何结构数据。举例来说,在基元是由三个顶点限定的三角形的情况下,标识基元的信息可包括标识形成所述基元的三个顶点的信息。在一些状况下,标识特定顶点的信息可以是从应用程序发送的顶点的索引,所述索引指向存储与所述顶点相关的未经变换的几何结构数据的存储器(例如顶点缓冲区)的部分。在基于经过变换的基元将经过变换的基元添加到基元块的情况下,除了添加标识与当前基元相关的未经变换的基元块的信息之外,还可添加标识特定的经过变换的基元的信息。在方法700用于生成经过变换的基元块的情况下,将当前基元添加到当前基元块可包括将与当前基元相关的经过变换的几何结构数据添加到当前基元块。
在框710或框704之后直接执行框712的情况下,当前基元块将为空的,使得当前基元变为当前基元块中的第一基元。然而,如果在框708之后直接执行框712,那么当前基元块将已经包括一个或多个基元并且当前基元被添加到那些基元。一旦当前基元已经被添加到当前基元块,那么方法700进行到框714。
在框714处,基元块生成器确定当前基元块现在是否为满。如上文所描述,在一些状况下,可存在基元的最大数目和/或基元块中的顶点的最大数目。在这些状况下,基元块生成器可在基元的数目和/或基元块中的顶点的数目分别等于基元的最大数目或顶点的最大数目的情况下确定当前基元块为满。如果确定当前基元块现在为满,那么方法700进行到框716,其中清空基元块(如上文关于框710所描述)。然而,如果确定当前基元不为满,那么方法700进行到框718。
在框718处,基元块生成器确定是否存在任何更多的要处理的基元。如果存在至少一个要处理的额外基元,那么方法700返回到框702。然而,如果不存在要处理的更多的基元(只要当前基元块不是空的),那么清空当前基元块(如上文关于框710所描述)并且方法700结束。
在其它示例中,在基元由一个或多个顶点形成的情况下,在框708处基于当前基元与当前基元块之间的距离与一个或多个距离阈值之间的比较确定当前基元将不被添加到当前基元块之后,基元块生成器可被配置成在进行到清空当前基元块的框710之前确定当前基元是否与当前基元块中的基元中的一个共享至少一个顶点。如果基元块生成器确定当前基元与当前基元块中的基元共享至少一个顶点,那么基元块生成器可确定当前基元将被添加到当前基元块,尽管不符合距离阈值,或可在符合某些条件的情况下确定当前基元将被添加到当前基元块。举例来说,如果当前基元与当前基元块中的基元共享至少一个顶点,那么所述距离可与一个或多个距离阈值的不同集合比较或不同准则可用于确定当前基元是否应被添加到当前基元块。举例来说,如果当前基元与当前基元块中的基元共享至少一个顶点,那么在具有当前基元的当前基元块的限界方框的面积小于阈值(例如小于平铺块的预定数目)的情况下,当前基元可被添加到当前基元块。
在一些状况下,基元块中的所有基元共享相同的渲染状态数据(例如相同深度比较模式和基元类型)可能是有利的。在这些状况下,在执行框704之前,基元块生成器可确定用于当前基元的渲染状态数据是否与用于当前基元块中的基元的渲染状态数据相同(或匹配)。如果基元块生成器确定用于当前基元的渲染状态数据不同于用于当前基元块中的基元的渲染状态数据,那么可在方法700进行到框704之前清空当前基元块。然而,如果基元块生成器确定用于当前基元的渲染状态数据与用于当前基元块中的基元的渲染状态数据相同(或匹配),那么方法700可直接进行到框704。
尽管图7的方法700描述如何通过基于所接收的基元与基元块之间的距离和基元块的满度确定是否将所接收的基元添加到单个未决基元块来生成基元块,但在其它示例中,基元块生成器可维持多个未决基元块并且可基于所接收的基元与未决基元块中的每一个之间的距离和未决基元块的满度来确定是否将所接收的基元添加到未决基元块中的一个。举例来说,可通过比较用于每一未决基元块的距离与用于所述未决基元块的一个或多个距离阈值的集合来将所接收的基元添加到未决基元块中的一个,其中一个或多个距离阈值的集合是基于所述未决基元块的满度。如果距离与距离阈值的比较指示所接收的基元可被添加到未决基元块中的一个,那么所接收的基元可被添加到所述未决基元块。然而,如果距离与距离阈值的比较指示所接收的基元可被添加到多个未决基元块,那么所接收的基元块可被添加到那些未决基元块中的一个或相关未决基元块可合并。
尽管在图7的方法700中,当前基元可仅形成单个基元块的一部分(例如基元按原样被添加到当前基元块,或当前基元块被清空且接着基元被添加到当前基元块),但在其它示例方法中,当前基元可被添加到多个基元块。举例来说,如果用于当前基元的距离符合将被添加到当前基元块的距离阈值,但所述距离接近所述阈值,那么当前基元可被添加到当前基元块,接着当前基元块可被清空且相同基元可在清空之后被添加到(新的)当前基元块。
现在参考图10,其说明基元块生成器1000的示例实施方案,所述基元块生成器可用于实施图7的方法700。图10的基元块生成器1000包括:数据存储区1002,其用于存储新的基元可被添加到的当前基元块1004;和块分配逻辑1006,其用于基于基元与当前基元块之间的距离和当前基元块的满度来确定是否应将新的基元添加到当前基元块。
块分配逻辑1006可包括距离计算逻辑1008、满度确定逻辑1010、距离阈值选择逻辑1012和比较逻辑1014。距离计算逻辑1008被配置成接收用于当前基元的经过变换的位置数据并基于经过变换的位置数据来确定当前基元的空间位置与当前基元块1004的空间位置之间的距离。经过变换的位置数据描述基元在渲染空间(例如屏幕空间)中的位置。如上文所描述,在每一基元由一个或多个顶点限定的情况下,经过变换的位置数据可包括指示形成所述基元的顶点的位置(例如X、Y及Z坐标)的信息。用于基元的经过变换的位置数据可能已由图3的***300的变换逻辑308生成。
所述距离是描述当前基元(即,形成基元块的基元)与当前基元块有‘多近’的度量或度量的集合。距离计算逻辑1008可被配置成根据经过变换的位置数据以任何合适方式确定当前基元与当前基元块之间的距离。具体地说,距离计算逻辑1008可被配置成根据上文参考图7的方法700的框706所描述的方法中的任一个来确定距离。举例来说,距离计算逻辑1008可被配置成(i)通过比较不具有当前基元的当前基元块的限界方框与具有当前基元的当前基元块的限界方框;及/或(ii)根据平铺块渲染次序来确定距离。举例来说,在一些状况下,距离计算逻辑1008可被配置成将距离确定为:限界方框的x尺寸之间的差或比率;限界方框的y尺寸的差或比率;限界方框的面积的差或比率;或其任何组合。所述距离可包括单个度量(例如限界方框的x尺寸的比率)或多个度量(例如三数组(a,b,c),其中a是限界方框的x尺寸的比率;b是限界方框的y尺寸的比率;且c是限界方框的面积的比率)。
满度确定逻辑1010被配置成生成用于当前基元块1004的满度度量,其指示当前基元块的满度。当前基元块1004的满度可以任何合适方式确定。举例来说,如上文所描述,在一些状况下,基元块可具有基元的最大数目和/或顶点的最大数目。在这些状况下,满度确定逻辑1010可被配置成基于分别比较当前基元块中的基元的数目和/或当前基元块中的顶点的数目与基元和顶点的最大数目来确定满度度量。举例来说,满度度量可等于:当前基元块中的基元的数目与基元的最大数目的比率;当前基元块中的顶点的数目与顶点的最大数目的比率;两个比率中的较大比率;或两个比率的组合。
距离阈值选择逻辑1012被配置成基于满度度量(由满度确定逻辑1010生成)动态地选择一个或多个距离阈值的集合,其将用于确定当前基元是否将被添加到当前基元块。如上文所描述,本发明人已辨识出,具有充分的基元块与具有包括紧靠在一起的基元的基元块之间的良好平衡可通过调节距离阈值来实现,所述距离阈值用于基于当前基元块的满度来确定新的基元是否将被添加到当前基元块。具体地说,动态地调节距离阈值使得当当前基元块的满度较低时,距当前基元块中的基元更远的基元可被添加到当前基元块,并且当当前基元块的满度较高时,仅接近当前基元块中的基元的基元可被添加到当前基元块。
可以任何合适方式确定用于特定满度度量的距离阈值的集合。举例来说,可使用上文关于图7的方法700的框708所描述的方法中的任一个来确定用于特定满度度量的距离阈值的集合。如上文所描述,在一些状况下,可根据公式动态地确定用于特定满度度量的距离阈值的集合。举例来说,距离阈值的集合可与当前基元块的满度成反比。在其它状况下,可存在与满度度量的多个范围中的每一个相关联的一个或多个距离阈值的预定集合。距离阈值选择逻辑1012接着可被配置成基于满度度量从一个或多个距离阈值的预定集合选择一个或多个距离阈值的集合。举例来说,可存在当满度度量指示当前基元块小于四分之一满时使用的一个或多个距离阈值的一个集合、当满度度量指示当前基元块为至少四分之一满但小于二分之一满时使用的一个或多个距离阈值的第二集合、当满度度量指示当前基元块为至少二分之一满但小于四分之三满时使用的一个或多个距离阈值的第三集合、当满度度量指示当前基元块为至少四分之三满时使用的一个或多个距离阈值的第四集合。在存在一个或多个距离阈值的预定集合的情况下,所述一个或多个距离阈值的预定集合可存储在查找表1016或类似结构中。
集合中的距离阈值的数目可基于用于距离和/或一个或多个其它准则的度量的数目。举例来说,在距离包括单个度量(例如距离等于限界方框的面积的比率)的情况下,距离阈值的集合可包括与单个距离度量比较的单个距离阈值。在所述距离包括多个度量(例如所述距离包括三数组(a,b,c),其中a是限界方框的x尺寸的比率,b是限界方框的y尺寸的比率,并且c是限界方框的面积的比率)的情况下,距离阈值的集合可包括一个或多个距离阈值。举例来说,可存在与距离度量的组合比较的单个距离阈值,或可存在与对应的距离度量比较的每距离度量的距离阈值。
比较逻辑1014被配置成:基于距离(如由距离计算逻辑1008计算)与距离阈值(如由距离阈值选择逻辑1012生成)之间的比较确定当前基元是否将被添加到基元块;及基于所述确定输出一个或多个控制信号以控制当前基元块。具体地说,如果比较逻辑1014基于所述比较确定当前基元将被添加到当前基元块,那么比较逻辑1014可输出一个或多个控制信号,其使当前基元被添加到当前基元块。在一些状况下,使当前基元被添加到基元块可包括使信息标识未经变换的基元,当前基元与当前基元块相关。在其它状况下,使当前基元被添加到基元块可包括使与当前基元相关的经过变换的几何结构数据被添加到当前基元块。与此对比,如果比较逻辑1014基于所述比较确定当前基元将不被添加到当前基元块,那么比较逻辑1014可输出一个或多个控制信号,其使当前基元块被清空(例如内容被输出(例如写出到存储器)且接着清空)且接着使当前基元被添加到空的当前基元块。
经过变换的几何结构数据高速缓存
如上文所描述,一旦变换逻辑313已经变换用于基元块的未经变换的几何结构数据,那么用于所述基元块(其在本文中可被称为经过变换的基元块)的经过变换的几何结构数据存储在高速缓存315(其在本文中可被称为经过变换的几何结构数据高速缓存)中,其中所述经过变换的几何结构数据可由光栅化阶段的后续模块(例如HSR逻辑314和纹理化/着色逻辑316)访问。由于经过变换的几何结构高速缓存315通常不够大而不能存储对图像进行渲染所需的每个经过变换的基元块,因此当经过变换的几何结构高速缓存315变满时,需要具有用于确定从高速缓存315收回哪些经过变换的基元块的机制。换句话说,需要具有知道何时能安全从高速缓存315收回经过变换的基元块的机制。
在例如图3的图形处理***300的一些图形处理***中,在多个阶段中执行光栅化阶段中的用于平铺块的经过变换的几何结构数据的处理。举例来说,可在第一阶段中执行隐藏表面移除,并且可在第二阶段中执行纹理化和着色。如下文更详细地描述,在一些状况下,隐藏表面移除阶段可进一步划分成多个子阶段。隐藏表面移除阶段及纹理化和着色阶段通常都访问与被处理的平铺块相关的经过变换的几何结构数据。因此,直到两个阶段都访问了经过变换的基元块,才可能安全移除与平铺块相关联的经过变换的基元块。然而,并非与特定平铺块相关的所有基元都可在所有阶段达成目的。举例来说,虽然可对与平铺块相关联的所有基元执行隐藏表面移除,但并非所有的那些基元可在隐藏表面移除阶段到纹理化和着色阶段达成目的(例如一些基元可能被隐藏)。因此,可存在与平铺块相关联的可在隐藏表面移除阶段(或如下文所描述的隐藏表面移除阶段的子阶段)之后收回的一些经过变换的基元块,这是因为所述经过变换的基元块的所有相关基元被隐藏,而直到纹理化和着色阶段完成才能收回与平铺块相关联的其它经过变换的基元块。
此外,在一些图形处理***中,有可能同时处理用于多个平铺块的经过变换的几何结构数据,这是因为可管线化经过变换的几何结构数据处理的多个阶段(例如在任何时间,可在阶段中的每一个处处理与一个平铺块相关联的经过变换的几何结构数据)和/或可存在多个并行逻辑(例如管线)以用于处理经过变换的几何结构数据。
因此,本发明人已确定用于记录可收回哪些经过变换的基元块的高效机制正在记录(通过计数器)当前正在光栅化阶段中被处理的需要所述经过变换的基元块的平铺块的数目,其中平铺块可被认为在经过变换的几何结构数据处理的多个阶段中的任一个之后不再需要经过变换的基元块。换句话说,如果在例如经过变换的几何结构数据处理的第一阶段之后不再需要经过变换的基元块,那么经过变换的基元块可被认为可用于收回,即使与经过变换的基元块相关联的平铺块仍在被处理。此机制确保当已知又将使用经过变换的基元块时将不会收回所述经过变换的基元块,但一旦不再需要经过变换的基元块,则使其可用于收回。使经过变换的基元块可用于收回并不意味另一平铺块稍后将不需要所述经过变换的基元块,而是当前正在光栅化阶段中处理的平铺块中的任一个不需要所述经过变换的基元块并且其因此可被安全地收回。如果随后的平铺块需要访问被收回的经过变换的基元块,那么将必须再次提取且变换用于所述基元块的未经变换的几何结构数据。
现在参考图11,其说明示例经过变换的几何结构数据高速缓存1100,其可用于实施图3的***300的经过变换的几何结构数据高速缓存315。经过变换的几何结构数据高速缓存1100包括:存储器1102(例如缓冲区),其用于暂时存储经过变换的几何结构数据(例如经过变换的基元块);查找表1104,其用于针对每一基元块存储指示与基元块相关的经过变换的几何结构数据的位置的信息及指示是否能安全收回经过变换的几何结构数据的计数器;及控制逻辑1106,其用于存储存储器1102中的经过变换的基元块并维持计数器使得其反映当前正由光栅化逻辑处理的需要访问经过变换的基元块的平铺块的数目。
存储器1102被配置成暂时存储用于在光栅化阶段中处理的经过变换的几何结构数据。在例如图3的图形处理***300的图形处理***中,基于基元块提取并变换未经变换的几何结构数据,因此与基元块相关的经过变换的几何结构数据可共同被存储为经过变换的基元块。图12中展示用于经过变换的基元块1200的示例格式。在此示例中,经过变换的基元块1200包括标头1204、状态数据1206、经过变换的顶点数据1207和基元索引数据1208。类似于图4的未经变换的基元块4021、4022的标头404,标头1204包括描述基元块的信息,例如但不限于基元块中的顶点的数目和/或基元块中的基元的数目。类似于图4的未经变换的基元块4021、4022的状态数据406,状态数据1206包括描述将如何对基元块中的基元进行渲染的信息。状态数据可被描述为标识用于对基元块中所描述的基元进行渲染的配方。举例来说,状态数据可包含但不限于标识深度比较模式、掺合状态、纹理状态和和/或基元类型的信息。
经过变换的顶点数据1207包括用于与基元块中的基元相关联的每一顶点的经过变换的几何结构数据。用于每一顶点的经过变换的几何结构数据可包括例如渲染空间(例如屏幕空间)中的用以描述顶点的位置的坐标(例如X、Y、Z坐标)的集合和用以描述顶点的外观的属性的集合,所述属性例如应用于顶点的纹理坐标(例如U、V坐标)和/或基色。基元块中的每一顶点可由顶点索引标识,所述顶点索引在基元块本地。举例来说,在每基元块的顶点的最大数目是64的情况下,每一顶点可被分配在0与63之间的本地索引。
类似于图4的未经变换的基元块4021、4022的基元索引数据408,基元索引数据1208包括用于每一基元的标识形成所述基元的顶点的索引的集合。举例来说,在基元是由三个顶点形成的三角形的情况下,基元索引数据1208可包括用于每一基元的标识形成所述基元的三个顶点的信息。然而,虽然图4的基元索引数据408中的索引是从应用程序发送的顶点的索引,但图12的基元索引数据1208中的索引是本地索引。以此方式,每一顶点索引充当到与所述顶点相关的经过变换的基元块中的经过变换的几何结构的部分的指针。
如上文所描述,每一基元块可由多个平铺块指代(或与其相关联)。换句话说,基元块的基元可至少部分地落在多个平铺块内。在一些状况下,平铺引擎310可被配置成记录指代每一基元块(或与其相关联)的平铺块的数目,并且当从存储器3022提取基元块时,此信息可被提供到提取逻辑312。举例来说,指代特定基元块(或与其相关联)的平铺块的数目可存储在例如基元块的标头部分中,或指代特定基元块(或与其相关联)的平铺块的数目可被提供到提取逻辑312作为边带数据。在这些状况下,存储器1102(例如缓冲区)可划分成多个子存储器块并且控制逻辑1106可被配置成基于指代所述基元块(或与其相关联)的平铺块的数目来确定哪些子存储器块将存储新的经过变换的基元块。
举例来说,图13说明存储器1102划分成存储器的三个子框1302、1304和1306的示例。在此示例中,第一子框1302用于存储仅与1个平铺块相关联的经过变换的基元块;第二子框1304用于存储与2到4个平铺块相关联的经过变换的基元块;且第三子框1306用于存储与多于4个平铺块相关联的经过变换的基元块。对于所属领域的技术人员将显而易见的是,这仅是示例并且可存在不同数目个子存储器块和/或其可与平铺块的不同范围相关联。由于与较小数目个平铺块相关联的经过变换的基元块有可能不久可用于收回,因此相比于与少量平铺块(例如1个平铺块)相关联的经过变换的基元块未在一起存储的情况,‘闲置’存储器的较大块可被更快地获得。在存储器1102划分成页面并且一次只可释放或取消分配整个页面的状况下,这可能是有利的。子存储器块可全部是相同大小或子存储器块中的两个或多于两个可具有不同大小。
查找表1104被配置成针对存储于存储器1102中的每一经过变换的基元块来存储标识存储器1102(例如缓冲区)中的经过变换的基元块的位置的信息和指示是否可从存储器1102(例如缓冲区)收回经过变换的基元块的计数器。如图11中所展示,在一些状况下,标识经过变换的基元块的位置的信息可以是存储器中的经过变换的基元块的地址。然而,对于所属领域的技术人员将显而易见的是,这仅是示例并且其它信息可存储在查找表1104中以识别存储器中的经过变换的基元块的位置。举例来说,在其它状况下,标识存储器中的经过变换的基元块的位置的信息可以是索引,其可用于生成存储器中的经过变换的基元块的地址。当经过变换的基元块被写入到存储器(例如通过变换逻辑313)时,查找表中的条目可被添加到查找表。
在一些状况下,当存储器1102不包括经过变换的基元块时,查找表可不具有用于所述经过变换的基元块的条目。举例来说,当经过变换的基元块从存储器1102(例如缓冲区)收回时,可移除查找表1104中的对应的条目。这允许根据查找表确定高速缓存1100是否包括特定的经过变换的基元块。
用于未经变换的基元块的计数器用于指示是否可从高速缓存(即,从存储器1102)收回经过变换的基元块。在一些状况下,用于经过变换的基元块的计数器可在可收回经过变换的基元块时(即,当当前正在光栅化阶段中处理的平铺块中无一者需要访问所述经过变换的基元块时)被设置为第一预定值(例如0),并且可在无法收回经过变换的基元块时(即,当当前正在光栅化阶段中处理的平铺块中的至少一个需要访问所述经过变换的基元块时)被设置为一个或多个第二预定值中的一个(例如>0的整数)。
控制逻辑1106被配置成将经过变换的基元块(例如从变换逻辑313接收)存储在存储器1102中并且将计数器维持在查找表1104中以指示哪些经过变换的基元块可从存储器1102收回并且哪些无法从其收回。具体地说,控制逻辑1106被配置成将计数器维持在查找表1104中(例如动态地调整所述计数器),使得其指示当前有多少正被光栅化逻辑306处理的平铺块需要访问对应的经过变换的基元块。当计数器指示当前正由光栅化逻辑306处理的平铺块中无一者需要访问特定的经过变换的基元块时,可收回所述经过变换的基元块。在这些示例中,当经过变换的几何结构数据处理的阶段中的任一个(例如在HSR阶段之后或在纹理化/着色阶段之后)指示不再需要经过变换的几何结构块时,当前正由光栅化逻辑处理的平铺块可被认为不再需要访问基元。当控制逻辑1106接收新的经过变换的基元块(例如从变换逻辑313)以用于存储在高速缓存1100中并且高速缓存1100为满(例如存储器1102为满)时,控制逻辑1106基于计数器选择收回经过变换的基元块中的一个。将借助于图14的方法1400更详细地描述控制逻辑1106的操作。
现在参考图14,其说明方法1400,所述方法可由控制逻辑1106执行以管理高速缓存1100。方法1400开始于框1402,其中控制逻辑1106将多个经过变换的基元块存储在高速缓存1100的存储器1102(例如缓冲区)中。当经过变换的基元块中的每一个存储于存储器中时,查找表1104可能已经更新以包含指示存储器1102(例如缓冲区)中的经过变换的基元块的位置的信息(例如地址)。
在框1404处,控制逻辑1106维持(例如动态地更新)用于存储在高速缓存1100(例如存储器1102(例如缓冲区))中的经过变换的基元块中的每一个的计数器(例如查找表1104中的计数器)以指示当前正由光栅化逻辑306处理且需要经过变换的基元块的平铺块的数目。控制逻辑1106可被配置成当控制逻辑1106检测到光栅化逻辑已经开始处理与基元块相关联的新的平铺块时,调整用于经过变换的基元块的计数器(例如使其递增)以指示额外平铺块正由光栅化逻辑处理,所述额外平铺块需要访问经过变换的基元块。控制逻辑1106还可被配置成当控制逻辑1106从多个阶段中的任一个检测到与经过变换的基元块相关联的平铺块不再需要经过变换的基元块时,调整用于所述经过变换的基元块的计数器(例如使其递减),以指示少一个的平铺块正由光栅化逻辑处理,所述少一个的平铺块需要访问经过变换的基元块。如上文所描述,通过在光栅化阶段的阶段中的任一个之后调节计数器,可将经过变换的基元块标记为较早地收回。具体地说,对于将标记为收回的经过变换的基元块,与经过变换的基元块相关联的平铺块的光栅化的处理不必是全面的。这允许更高效地使用高速缓存1100存储器1102。
如果经过变换的基元块中的至少一个基元至少部分地落在平铺块的界限内,那么认为经过变换的基元块与平铺块相关联。如上文关于图3所描述,平铺模块确定哪些基元(当被变换时)至少部分地落在平铺块的界限内并生成用于每一平铺块的显示列表,所述显示列表标识至少部分地落在所述平铺块的界限内的基元和所述基元所处的基元块。当光栅化阶段开始处理平铺块时,提取模块提取用于所述平铺块的显示列表。提取模块接着针对在未经变换的显示列表中标识的每一未经变换的基元块确定高速缓存1100是否包括用于所述未经变换的基元块的经过变换的几何结构数据(例如经过变换的基元块)(例如通过将查询发送到控制逻辑1106)。接着,如果高速缓存1100不包括用于未经变换的基元块的经过变换的几何结构数据(例如经过变换的基元块),那么提取模块获得对应于所述未经变换的基元块的未经变换的几何结构数据并且将未经变换的几何结构数据提供到变换逻辑313以用于变换。用于未经变换的基元块的经过变换的几何结构数据接着存储在高速缓存中。
因此,在一些状况下,控制逻辑可被配置成(i)当控制逻辑(例如从变换逻辑313)接收到用以将所述经过变换的基元块添加到高速缓存1100的请求时;或(ii)当控制逻辑(例如从提取逻辑)接收到用以知晓高速缓存1100是否包括所述经过变换的基元块并且所述经过变换的基元块是否已经在高速缓存1100中的请求时检测光栅化逻辑306已经开始处理与特定的经过变换的基元块相关联的新的平铺块。对于所属领域的技术人员将显而易见的是,这仅是示例并且控制逻辑1106可检测到光栅化逻辑306已经开始以另一方式处理与特定的经过变换的基元块相关联的新的平铺块。
如上文所描述,控制逻辑1106可被配置成当多个阶段中的任一个指示与经过变换的基元块相关联的平铺块不再需要经过变换的基元块时调整用于经过变换的基元块的计数器(例如使其递减)以指示存在正由光栅化逻辑处理的少一个的平铺块,所述少一个的平铺块需要访问经过变换的基元块。举例来说,在光栅化阶段包括两个经过变换的几何结构数据处理阶段—隐藏表面移除阶段和纹理化/着色阶段—的情况下,控制逻辑1106可被配置成在任一阶段(例如HSR阶段或纹理化/着色阶段)指示平铺块不再需要经过变换的基元块的情况下调整用于经过变换的基元块的计数器(例如使其递减)以指示存在正由光栅化逻辑处理的少一个的平铺块,所述少一个的平铺块需要访问经过变换的基元块。
如上文所描述,隐藏表面移除阶段被配置成移除隐藏的基元片段。HSR阶段(例如HSR逻辑314的输出)可指示当HSR阶段不输出与所述经过变换的基元块中的基元相关的任何片段时,平铺块不再需要访问经过变换的基元块。在一些状况下,HSR阶段可被配置成当其接收基元片段的集合时接收哪些经过变换的基元块与其相关的指示。如果HSR阶段确定接收到来自经过变换的基元块的基元片段但无一输出,那么所述HSR阶段可通知控制逻辑1106。举例来说,HSR阶段可接收基元片段以作为数据流处理,且可存在***在数据流中的标记以分隔基元并分隔基元块。HSR阶段可被配置成当其输出两个基元块标记而其间未输出任何基元片段时,确定不再需要基元块。
在一些状况下,HSR阶段可包括两个子阶段—对平铺块中的基元片段执行深度测试的第一子阶段和经受住深度测试的基元片段存储在标签缓冲区中的第二子阶段。举例来说,图15说明示例HSR逻辑1502(其可用于实施图3的HSR逻辑314),所述示例HSR逻辑包括深度测试逻辑1504和标签缓冲区1506。深度测试逻辑1504接收基元片段,并比较基元片段的深度值(例如Z值或Z坐标)与用于平铺块的深度缓冲区中的对应的深度值。具体地说,深度缓冲区存储用于平铺块的每一样本的‘最佳’深度值(例如最接近于屏幕的深度值)。如果所接收的基元片段具有比深度缓冲区中的对应的深度值‘差’的深度值(例如指示其离屏幕更远的深度值),那么基元片段将被另一基元隐藏并且因此基元片段‘未通过’深度测试并且不被输出到标签缓冲区。然而,如果所接收的基元片段具有‘优于’深度缓冲区中的对应的深度值的深度值(即,指示其更接近于屏幕的深度值),那么基元片段‘通过’深度测试。基元片段接着被输出到标签缓冲区1506,且深度缓冲区中的对应的深度值经过更新以指示存在新的‘最佳’深度值。
标签缓冲区1506接收已经过深度测试阶段的基元片段,并且针对每一所接收的基元片段,更新标签缓冲区1506以识别所接收的基元片段是在其样本位置处可见的基元片段。举例来说,如果标签缓冲区1506在样本位置a处接收基元片段x,那么标签缓冲区1506存储指示基元片段x在样本位置a处可见的信息。如果标签缓冲区1506随后在样本位置a处接收基元片段y,那么标签缓冲区更新用于样本位置a的信息以指示其实际上是可见的基元片段y。因此,在所有基元不透明的简单状况下,在深度测试逻辑1504已经处理平铺块中的所有基元后,标签缓冲区1506包括在每一样本位置处可见的基元片段的标识。此时,标签缓冲区1506被清空到纹理化/着色逻辑1508,其中对可见的基元片段执行纹理化和着色。通过在隐藏表面移除后执行纹理化和着色,时间和资源不会浪费在纹理化和着色最终图像中不可见的基元/基元片段。
因此,基元(基元片段)有可能在深度测试子阶段或标签缓冲区子阶段不合格。具体地说,基元可能未通过深度测试且因此未由深度测试逻辑1504输出,或其可通过深度测试,因为在执行深度测试时,其具有‘最佳’深度,但在相同样本位置处的基元片段上,可能会出现更好的深度并且因此所述基元在标签缓冲区1506中被覆写,因此其从不从标签缓冲区1506输出。在这些状况下,除了通过基于HSR阶段的输出更新用于高速缓存中的经过变换的基元块的计数器之外,还可通过基于标签缓冲区阶段的输出更新用于经过变换的基元块的计数器,来进一步改进经过变换的几何结构高速缓存1100的效率。这将允许在深度测试或标签缓冲区阶段不合格并且因此不被HSR逻辑1502或纹理化/着色逻辑1508进一步需要的经过变换的基元块符合较早收回的条件。
在这些状况下,深度测试逻辑1504可被配置成当其检测到基元块在深度测试阶段不合格时通知控制逻辑1106。如果落在被处理的平铺块内的所述基元块的基元中无一者通过深度测试,那么认为基元块未通过深度测试。换句话说,如果深度测试指示落在被处理的平铺块内的所述基元块的基元中无一者是可见的,那么基元块将不通过深度测试。响应于从深度测试逻辑1504接收到基元块未通过深度测试的指示,控制逻辑1106可更新与基元块相关联的计数器(例如使其递减)以指示少一个的平铺块当前正由光栅化逻辑处理,所述少一个的平铺块需要访问对应的经过变换的基元块。
类似地,标签缓冲区1506可被配置成当其检测到基元块在标签缓冲区阶段不合格时通知控制逻辑1106。如果标签缓冲区1506接收到用于所述基元块中的基元的至少一个基元片段但用于所述基元块的基元片段中无一者从标签缓冲区1506输出到下一模块(例如纹理化/着色逻辑1508),那么认为基元块在标签缓冲区阶段不合格。为了能够确定基元块在标签缓冲区阶段不合格的时间,需要标签缓冲区1506具有用于跟踪哪些基元片段自从标签缓冲区自身的条目可被覆写后被接收的机制。因此,在一些状况下,标签缓冲区1506可具有查找表或类似结构,所述查找表或类似结构具有用于每一基元块的条目,所述条目指示基元块是否已从深度测试逻辑1504接收用于所述基元块的基元片段。接着当清空标签缓冲区1506(例如其内容被发送到下一阶段—例如纹理化/着色逻辑1508)时,标签缓冲区1506的内容与查找表进行比较,且如果存在基元块的基元片段被接收但与基元块相关的基元片段不被输出的任何基元块,那么标签缓冲区1506通知控制逻辑1106那些基元块在标签缓冲区阶段不合格且因此不再被需要。所述通知可采用任何合适的形式。举例来说,所述通知可采用控制信号的形式。
如上文所描述,纹理化/着色阶段被配置成对从HSR阶段接收的基元片段执行纹理化和/或着色以确定被渲染的图像的像素值。用于平铺块的被渲染的像素值接着存储在存储器(例如帧缓冲区)中。因此,控制逻辑1106可被配置成在纹理化/着色阶段(例如纹理化/着色逻辑1508)指示其已完成处理基元块的基元的情况下确定与基元块相关联的平铺块不再需要访问对应的经过变换的基元块。举例来说,当纹理化/着色逻辑已完成处理基元块的基元片段时,所述纹理化/着色逻辑可通知控制逻辑1106。响应于接收到此通知,控制逻辑1106可更新用于所述基元块的计数器(例如使其递减)以指示存在当前正由光栅化逻辑处理的少一个的平铺块,所述少一个的平铺块需要访问经过变换的基元块。在其它状况下,控制逻辑1106可被配置成一旦纹理化/着色阶段已访问经过变换的基元块(且提取所有相关的经过变换的几何结构数据)即确定与基元块相关联的平铺块不再需要访问对应的经过变换的基元块。以此方式,经过变换的基元块可符合较早从高速缓存1100收回的条件,从而可改进高速缓存1100的效率。
在任何时间点光栅化逻辑306中可存在多个‘正在运行’(即,由所述光栅化逻辑处理)的平铺块的状况下,有可能在用于基元块的计数器被更新(例如使其递减)以指示存在需要访问对应的经过变换的基元块的‘正在运行’的少一个的平铺块之前,使所述计数器被多次更新(例如使其递增)以指示存在需要访问对应的经过变换的基元块的额外的‘正在运行’的平铺块。举例来说,光栅化逻辑306可开始处理与特定基元块相关联的第一平铺块,从而使控制逻辑针对所述基元块将计数器递增到1,且在控制逻辑1106已经确定第一平铺块不再需要访问所述经过变换的基元块之前,光栅化逻辑306可开始处理也与特定基元块相关联的第二平铺块,从而使控制逻辑针对所述基元块将计数器递增到2。因此,当控制逻辑检测到第一平铺块不再需要访问所述经过变换的基元块(例如因为其在深度测试阶段不合格,其在标签缓冲区阶段不合格或其纹理化/着色完成了)时,经过变换的基元块不会变得符合收回的条件,因为仍存在一个正在运行的需要访问经过变换的基元块的平铺块。因此,更新计数器(例如使其递减)以指示存在当前正由光栅化逻辑306处理的需要访问经过变换的基元块的少一个的平铺块可能不会自动使经过变换的基元块符合收回条件。
返回到图14的方法1400,在框1406处,控制逻辑1106接收新的经过变换的基元块(例如从变换逻辑313)以用于存储在高速缓存中。在框1408处,确定高速缓存1100是否为满。如果高速缓存中存在足够多的闲置存储器来存储新的经过变换的基元块,那么可确定高速缓存为满。如果确定高速缓存为满,那么方法1400进行到框1410。然而,如果确定高速缓存不为满,那么方法1400直接进行到框1414。
在框1410处,基于与经过变换的基元块相关联的计数器选择存储在高速缓存1100(例如存储器1102)中的经过变换的基元块中的一个以用于收回。如上文所描述,计数器指示当前正由光栅化逻辑306处理(例如‘正在运行’)的需要访问经过变换的基元块的平铺块的数目。通常,除非不存在当前正由光栅化逻辑处理的需要访问经过变换的基元块的平铺块,否则从高速缓存1100收回经过变换的基元块并不安全。因此,在一些状况下,针对收回选择与计数器相关联的经过变换的基元块中的一个,所述计数器指示不存在当前正由光栅化逻辑处理的需要访问经过变换的基元块的平铺块。如上文所描述,在一些状况下,当不存在当前正由光栅化逻辑处理的需要访问对应的经过变换的基元块的平铺块时,计数器将具有零值。在这些状况下,可针对收回选择高速缓存中的具有计数器的经过变换的基元块中的一个,所述计数器具有零值。
当存在多于一个具有指示不存在当前正被处理的需要访问经过变换的基元块的平铺块的计数器(例如具有零值的计数器)的经过变换的基元块时,可以任何合适方式针对收回选择那些经过变换的基元块中的一个。举例来说,可针对收回随机地选择那些经过变换的基元块中的一个。
如上文所描述,每一基元块可由多个平铺块指代(或与其相关联)。换句话说,基元块的基元可至少部分地落在多个平铺块内。在一些状况下,平铺引擎310可被配置成记录指代每一基元块(或与其相关联)的平铺块的数目,并且当从存储器3022提取基元块时,此信息可被提供到提取逻辑312。举例来说,指代特定基元块(或与其相关联)的平铺块的数目可存储在例如基元块的标头部分中,或指代特定基元块(或与其相关联)的平铺块的数目可被提供到提取逻辑312作为边带数据。在这些状况下,控制逻辑1106可被配置成维持用于每一基元块的辅助计数器(例如在LUT 1104中),其指示仍需要访问所述基元块的平铺块的数目。用于基元块的辅助计数器可初始设置为指代从平铺引擎接收的所述基元块(或与其相关联)的平铺块的数目,且控制逻辑1106可被配置成更新计数器(例如使其递减),同时主要计数器也被更新(例如使其递减)以指示存在当前正由光栅化逻辑处理的需要访问经过变换的基元块的少一个的平铺块。控制逻辑1106接着可使用这些辅助计数器来选择收回哪些具有计数器的经过变换的基元块,所述计数器指示不存在当前正由光栅化逻辑处理的需要访问经过变换的基元块的平铺块。举例来说,控制逻辑可选择具有最小辅助计数器的经过变换的基元块(或中的一个)。
如果不存在用于其的相关联计数器指示不存在当前正由光栅化逻辑处理的需要访问经过变换的基元块的平铺块的经过变换的基元块,那么控制逻辑1106可等到直到调整计数器中的一个以指示不存在当前正由光栅化逻辑处理的需要访问对应的经过变换的基元块的平铺块为止(例如直到计数器被设置成零为止)。替代地,在具有标签缓冲区的状况下,其中标签缓冲区的清空使标签缓冲区通知控制逻辑1106基元块在标签缓冲区阶段不合格,控制逻辑1106可被配置成引起标签缓冲区的清空。在一些状况下,控制逻辑1106可通过沿着光栅化管线向下发送标志来发起整个光栅化管线或多个光栅化管线的清空。所述标志将最终到达标签缓冲区并且触发标签缓冲区刷新。然而,当标志到达标签缓冲区的时候,其可能已经被清空,因此在执行刷新之前,标签缓冲区可首先检查高速缓存1100是否仍为满。如果高速缓存仍不为满,那么可不清空标签缓冲区。然而,如果高速缓存仍为满,那么可清空标签缓冲区。虽然这可能使在整个平铺块的HSR处理完成之前清空标签缓冲区,但这通常将不会导致下游组件出现问题,这是因为下游组件(例如纹理化/着色逻辑)将能够清楚哪些基元可见。这可能仅仅导致下游组件对基元执行操作(例如纹理化和着色),所述基元不可见,并且若先前未清空标签缓冲区,那么将已经在标签缓冲区阶段被剔除。
在框1412处,从高速缓存1100(例如从存储器1102)收回在框1410中选择的经过变换的基元块以为新的经过变换的基元块腾出空间。一旦从高速缓存(例如从存储器1102)收回选定的经过变换的基元块,那么方法1400可进行到框1414,其中新的经过变换的基元块存储在高速缓存1100中(例如存储在存储器1102中)。
图16展示计算机***,其中可实施本文中所描述的图形处理***、基元块生成器和/或高速缓存。计算机***包括CPU 1602、GPU 1604、存储器1606和其它装置1614,例如显示器1616、扬声器1618及相机1620。对GPU 1604实施框1610(对应于图形处理***300、基元块生成器1000或高速缓存1100)。在其它示例中,可对CPU 1602实施框1610。计算机***的组件可通过通信总线1622彼此通信。
图1、2、3、10和11的图形处理***100、200、300、基元块生成器1000及高速缓存1100展示为包括多个功能块。这仅是示意性的,并非旨在限定此类实体的不同逻辑元件之间的严格划分。可以任何合适的方式提供每个功能块。应理解,本文中被描述为由图形处理***、基元块生成器或高速缓存形成的中间值无需由图形处理***、基元块生成器或高速缓存在任一点物理地生成,且可仅仅表示逻辑值,所述逻辑值方便地描述由图形处理***、基元块生成器或高速缓存在其输入与输出之间执行的处理。
本文中所描述的图形处理***、基元块生成器和高速缓存可体现在集成电路上的硬件中。本文中所描述的图形处理***可被配置成执行本文中所描述的方法中的任一个。通常,上文所描述的功能、方法、技术或组件中的任一个可实施于软件、固件、硬件(例如固定逻辑电路)或其任何组合中。本文中可使用术语“模块”、“功能性”、“组件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或其任何组合。在软件实施方案的状况下,模块、功能性、组件、元件、单元、块或逻辑表示程序代码,所述程序代码当在处理器上执行时执行指定任务。本文中所描述的算法和方法可由执行代码的一个或多个处理器执行,所述代码使处理器执行算法/方法。计算机可读存储介质的示例包含随机存取存储器(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生成***可由集成电路定义数据集进一步被配置成在制造集成电路时根据在集成电路定义数据集处定义的程序代码将固件加载到所述集成电路上,或者以其它方式向集成电路提供与集成电路一起使用的程序代码。
与已知的实施方案相比,在本申请中阐述的概念在装置、设备、模块和/或***(以及在本文中实施的方法中)中的实施可引起性能改进。性能改进可包含计算性能提高、等待时间缩短、吞吐量增大和/或功耗降低中的一个或多个。在制造此类装置、设备、模块和***(例如在集成电路中)期间,可在性能改进与物理实施方案之间进行权衡,从而改进制造方法。举例来说,可在性能改进与布局面积之间进行权衡,从而匹配已知实施方案的性能,但使用更少的硅。举例来说,这可通过以串行方式重用功能块或在装置、设备、模块和/或***的元件之间共享功能块来完成。相反,在本申请中阐述的引起装置、设备、模块和***的物理实施方案的改进(例如硅面积减小)的概念可针对性能改进进行权衡。举例来说,这可通过在预定义面积预算内制造一个模块的多个个例来完成。
申请人据此独立地公开了本文中描述的每个个别特征以及两个或多于两个此类特征的任何组合,到达的程度使得此类特征或组合能够根据所属领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中公开的任何问题。鉴于前文描述可在本发明的范围内进行各种修改对所属领域的技术人员来说将是显而易见的。
Claims (20)
1.一种将经过变换的基元块存储在基于平铺块的渲染图形处理***的高速缓存中的方法(1400),所述基于平铺块的渲染图形处理***具有细分成可与基元相关联的多个平铺块的渲染空间及在多个阶段中基于平铺块对基元进行光栅化的光栅化逻辑,所述方法(1400)包括:
将多个经过变换的基元块存储在所述高速缓存中,每一经过变换的基元块包括用于一个或多个基元的经过变换的几何结构数据(1402);
维持用于存储在所述高速缓存中的所述多个经过变换的基元块中的每一个的计数器,其指示当前正由所述光栅化逻辑处理的需要访问所述经过变换的基元块的所述多个平铺块中的平铺块的数目,当所述光栅化逻辑的任一阶段指示平铺块不再需要访问经过变换的基元块时,用于所述经过变换的基元块的所述计数器被更新(1404);
当所述高速缓存中没有足够的闲置存储器来存储新的经过变换的基元块时,响应于接收到将存储在所述高速缓存中的所述新的经过变换的基元块,基于与经过变换的基元块相关联的所述计数器从所述高速缓存选择要收回的经过变换的基元块(1406,1408,1410);以及
从所述高速缓存收回选定的经过变换的基元块(1412)。
2.根据权利要求1所述的方法(1400),其中维持用于经过变换的基元块的计数器包括当所述光栅化逻辑开始处理与所述经过变换的基元块相关联的平铺块时调节所述计数器以指示额外平铺块当前正由所述光栅化逻辑处理并且需要访问所述经过变换的基元块。
3.根据权利要求2所述的方法(1400),其中调节用于经过变换的基元块的所述计数器以指示额外平铺块当前正由所述光栅化逻辑处理且需要访问所述经过变换的基元块包括使所述计数器递增。
4.根据权利要求1所述的方法(1400),其中维持用于经过变换的基元块的计数器包括当所述光栅化逻辑的任一阶段指示与所述经过变换的基元块相关联的平铺块不再需要访问所述经过变换的基元块时,调节所述计数器以指示少一个的平铺块当前正由所述光栅化逻辑处理并且需要访问所述经过变换的基元块。
5.根据权利要求4所述的方法(1400),其中调节用于经过变换的基元块的所述计数器以指示少一个的平铺块当前正由所述光栅化逻辑处理并且需要访问所述经过变换的基元块包括使所述计数器递减。
6.根据权利要求4所述的方法(1400),其中所述光栅化逻辑的所述多个阶段包括隐藏表面移除阶段,且所述方法进一步包括从所述隐藏表面移除阶段接收以下指示:当经过变换的基元块的所述基元中无一者经受住所述隐藏表面移除阶段时,与所述经过变换的基元块相关联的平铺块不再需要访问所述经过变换的基元块。
7.根据权利要求4所述的方法(1400),其中所述光栅化逻辑的所述多个阶段包括隐藏表面移除阶段,且所述隐藏表面移除阶段包括:(i)深度测试子阶段,和(ii)标签缓冲区子阶段;且所述方法进一步包括从所述隐藏表面移除阶段接收以下指示:当经过变换的基元块经受不住所述深度测试子阶段或所述标签缓冲区子阶段时,与所述经过变换的基元块相关联的平铺块不再需要访问所述经过变换的基元块。
8.根据权利要求7所述的方法(1400),其中当经过变换的基元块的所述基元中无一者通过在所述深度测试子阶段中执行的深度测试时,所述经过变换的基元块经受不住所述深度测试子阶段。
9.根据权利要求7或权利要求8所述的方法(1400),其中当经过变换的基元块经受住所述深度测试子阶段但所述经过变换的基元块的基元中无一者从所述标签缓冲区子阶段输出时,所述经过变换的基元块经受不住所述标签缓冲区子阶段。
10.根据权利要求7或权利要求8所述的方法(1400),其中所述标签缓冲区子阶段包括标签缓冲区,其被配置成存储:(i)用于平铺块的每一样本位置的标识符,其用以标识所述样本位置处的可见基元,及(ii)查找表,其被配置成存储用于每一经过变换的基元块的指示是否接收到与每一经过变换的基元块相关的基元片段的信息,且所述方法进一步包括在所述标签缓冲区子阶段:
接收经受住了所述深度测试子阶段的基元片段;
将标识对应的样本位置处的所接收的基元片段的信息存储在所述标签缓冲区中;
更新所述查找表以指示所接收的基元片段与哪些经过变换的基元块相关;
当符合一个或多个条件时,清空所述标签缓冲区的内容;以及
响应于清空内容,将所清空的内容与所述标签缓冲区中标识所接收的基元片段的所存储的信息进行比较以从而标识未经受住所述标签缓冲区子阶段的经过变换的基元块。
11.根据权利要求4至8中任一项所述的方法(1400),其中所述光栅化逻辑的所述多个阶段包括纹理化和/或着色阶段,且所述方法进一步包括从所述纹理化和/或着色阶段接收以下指示:当所述纹理化和/或着色阶段已经完成处理经过变换的基元块时,平铺块不再需要访问所述经过变换的基元块。
12.根据权利要求4至8中任一项所述的方法(1400),其中所述光栅化逻辑的所述多个阶段包括纹理化和/或着色阶段,且所述方法进一步包括从所述纹理化和/或着色阶段接收以下指示:当所述纹理化和/或着色阶段访问所述高速缓存中的经过变换的基元块时,平铺块不再需要访问所述经过变换的基元块。
13.根据权利要求1至8中任一项所述的方法(1400),其中基于与经过变换的基元块相关联的所述计数器从所述高速缓存选择要收回的经过变换的基元块包括选择具有指示没有平铺块当前正由所述光栅化逻辑处理且需要访问所述经过变换的基元块的计数器的所述经过变换的基元块中的一个。
14.根据权利要求13所述的方法(1400),当取决于权利要求10时,其中基于与经过变换的基元块相关联的所述计数器从所述高速缓存选择要收回的经过变换的基元块进一步包括响应于确定不存在具有指示没有平铺块当前正被处理且需要访问经过变换的基元块的计数器的所述经过变换的基元块,使清空所述标签缓冲区。
15.根据权利要求1至8中任一项所述的方法(1400),其中每一经过变换的基元块与指代所述经过变换的基元块的平铺块的数目相关联;且从所述高速缓存选择要收回的所述经过变换的基元块是基于用于存储在所述高速缓存中的所述经过变换的基元块的所述计数器,及与那些经过变换的基元块中的每一个相关联的平铺块的所述数目。
16.根据权利要求1至8中任一项所述的方法(1400),其进一步包括在收回之后,将所述新的经过变换的基元块存储在所述高速缓存中。
17.根据权利要求16所述的方法(1400),其中:
每一经过变换的基元块与指代所述基元块的平铺块的数目相关联;
经过变换的几何结构高速缓存划分成多个子存储器块;且
所述新的经过变换的块基于指代所述新的经过变换的基元块的平铺块的所述数目存储在所述多个子存储器块中的一个中。
18.一种用于基于平铺块的渲染图形处理***中的高速缓存(1100),其用于存储经过变换的基元块,所述图形处理***具有细分成可与基元相关联的多个平铺块的渲染空间,所述图形处理***包括光栅化逻辑,所述光栅化逻辑在多个阶段中基于平铺块对基元进行光栅化,所述高速缓存(1100)包括:
存储器(1102),其被配置成存储多个经过变换的基元块,每一经过变换的基元块包括用于一个或多个基元的经过变换的几何结构数据;以及
控制逻辑(1106),其被配置成:
维持用于存储在所述存储器中的所述多个经过变换的基元块中的每一个的计数器,其指示当前正由所述光栅化逻辑处理的需要访问所述经过变换的基元块的所述多个平铺块中的平铺块的数目,当所述光栅化逻辑的任一阶段指示平铺块不再需要访问经过变换的基元块时,用于所述经过变换的基元块的所述计数器被更新;
当不存在足够的闲置存储器来存储新的经过变换的基元块时,响应于接收到用以将所述新的经过变换的基元块添加到所述存储器的请求,基于与经过变换的基元块相关联的所述计数器从所述存储器选择要收回的经过变换的基元块;以及
从所述存储器收回选定的经过变换的基元块。
19.一种计算机可读存储介质,其上存储有计算机可读指令,所述计算机可读指令在计算机***处执行时使所述计算机***执行根据权利要求1至8中任一项所述的方法。
20.一种计算机可读存储介质,其上存储有根据权利要求18所述的高速缓存的计算机可读描述,所述计算机可读描述在集成电路制造***中被处理时,使所述集成电路制造***制造体现所述高速缓存的集成电路。
Applications Claiming Priority (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1821142.5 | 2018-12-21 | ||
GB1821133.4 | 2018-12-21 | ||
GB1821133.4A GB2580166B (en) | 2018-12-21 | 2018-12-21 | Primitive block-based rasterization in graphics processing systems |
GB1821142.5A GB2580170B (en) | 2018-12-21 | 2018-12-21 | Transformed geometry data cache for graphics processing systems |
GB1821139.1A GB2580168B (en) | 2018-12-21 | 2018-12-21 | Primitive block generator for graphics processing systems |
GB1821139.1 | 2018-12-21 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111353928A true CN111353928A (zh) | 2020-06-30 |
Family
ID=69005445
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911327664.8A Pending CN111354065A (zh) | 2018-12-21 | 2019-12-20 | 用于图形处理***的基元块生成器 |
CN201911328719.7A Pending CN111353928A (zh) | 2018-12-21 | 2019-12-20 | 用于图形处理***的经过变换的几何结构数据高速缓存 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911327664.8A Pending CN111354065A (zh) | 2018-12-21 | 2019-12-20 | 用于图形处理***的基元块生成器 |
Country Status (3)
Country | Link |
---|---|
US (7) | US11217007B2 (zh) |
EP (3) | EP3671652A1 (zh) |
CN (2) | CN111354065A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115908100A (zh) * | 2021-09-30 | 2023-04-04 | 想象技术有限公司 | 图形处理器 |
Families Citing this family (10)
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 |
CN111354065A (zh) | 2018-12-21 | 2020-06-30 | 畅想科技有限公司 | 用于图形处理***的基元块生成器 |
US11244421B2 (en) | 2019-01-29 | 2022-02-08 | Imagination Technologies Limited | Memory for storing untransformed primitive blocks |
US11321900B2 (en) * | 2019-11-22 | 2022-05-03 | Sony Interactive Entertainment Inc. | Systems and methods for adjusting one or more parameters of a GPU |
US11216993B2 (en) * | 2019-11-27 | 2022-01-04 | Arm Limited | Graphics processing systems |
US11170555B2 (en) | 2019-11-27 | 2021-11-09 | Arm Limited | Graphics processing systems |
US11210847B2 (en) | 2019-11-27 | 2021-12-28 | Arm Limited | Graphics processing systems |
US11210821B2 (en) * | 2019-11-27 | 2021-12-28 | Arm Limited | Graphics processing systems |
US11558628B2 (en) * | 2020-12-14 | 2023-01-17 | Nokia Technologies Oy | Caching and clearing mechanism for deep convolutional neural networks |
GB2626228A (en) * | 2022-11-17 | 2024-07-17 | Advanced Risc Mach Ltd | Graphics processing systems |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9299187B2 (en) * | 2014-02-06 | 2016-03-29 | Imagination Technologies Limited | Opacity testing for processing primitives in a 3D graphics processing system |
US20170069126A1 (en) * | 2015-09-08 | 2017-03-09 | Imagination Technologies Limited | Graphics Processing Method and System for Processing Sub-Primitives Using Cached Graphics Data Hierarchy |
CN106897143A (zh) * | 2015-12-21 | 2017-06-27 | 想象技术有限公司 | 对图形处理***中的处理引擎的区片分配 |
US9928563B2 (en) * | 2013-04-02 | 2018-03-27 | Imagination Technologies Limited | Tile-based graphics |
Family Cites Families (37)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5652864A (en) | 1994-09-23 | 1997-07-29 | Ibm | Concurrent storage allocations or returns without need to lock free storage chain |
US6697063B1 (en) * | 1997-01-03 | 2004-02-24 | Nvidia U.S. Investment Company | Rendering pipeline |
WO2000011603A2 (en) * | 1998-08-20 | 2000-03-02 | Apple Computer, Inc. | Graphics processor with pipeline state storage and retrieval |
US6380935B1 (en) * | 1999-03-17 | 2002-04-30 | Nvidia Corporation | circuit and method for processing render commands in a tile-based graphics system |
US20030120858A1 (en) | 2000-09-15 | 2003-06-26 | Matrix Semiconductor, Inc. | Memory devices and methods for use therewith |
US6999087B2 (en) * | 2002-03-12 | 2006-02-14 | Sun Microsystems, Inc. | Dynamically adjusting sample density in a graphics system |
US8130222B1 (en) | 2004-10-19 | 2012-03-06 | Rockwell Collins Simulation And Training Solutions Llc | System and method for resolving visual priority among coincident primitives |
KR100859651B1 (ko) | 2007-06-04 | 2008-09-23 | 삼성에스디에스 주식회사 | 가변크기 데이터 저장을 위한 데이터구조를 기록한기록매체, 가변크기 데이터 저장방법, 및 가변크기 데이터저장방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한컴퓨터로 읽을 수 있는 기록매체 |
US8059119B2 (en) * | 2007-12-05 | 2011-11-15 | Stmicroelectronics S.R.L. | Method for detecting border tiles or border pixels of a primitive for tile-based rendering |
US8179399B2 (en) * | 2008-02-11 | 2012-05-15 | Stmicroelectronics S.R.L. | Rasterizing method |
GB2458488C (en) * | 2008-03-19 | 2018-09-12 | Imagination Tech Ltd | Untransformed display lists in a tile based rendering system |
GB0823254D0 (en) * | 2008-12-19 | 2009-01-28 | Imagination Tech Ltd | Multi level display control list in tile based 3D computer graphics system |
GB0900700D0 (en) * | 2009-01-15 | 2009-03-04 | Advanced Risc Mach Ltd | Methods of and apparatus for processing graphics |
GB2500284B (en) | 2012-09-12 | 2014-04-30 | Imagination Tech Ltd | Tile based computer graphics |
US8941676B2 (en) * | 2012-10-26 | 2015-01-27 | Nvidia Corporation | On-chip anti-alias resolve in a cache tiling architecture |
US9317948B2 (en) * | 2012-11-16 | 2016-04-19 | Arm Limited | Method of and apparatus for processing graphics |
US8736629B1 (en) | 2012-11-21 | 2014-05-27 | Ncomputing Inc. | System and method for an efficient display data transfer algorithm over network |
US9514039B2 (en) * | 2013-02-14 | 2016-12-06 | International Business Machines Corporation | Determining a metric considering unallocated virtual storage space and remaining physical storage space to use to determine whether to generate a low space alert |
KR102116708B1 (ko) * | 2013-05-24 | 2020-05-29 | 삼성전자 주식회사 | 그래픽스 프로세싱 유닛 |
US10204391B2 (en) * | 2013-06-04 | 2019-02-12 | Arm Limited | Method of and apparatus for processing graphics |
US9489771B2 (en) * | 2013-07-09 | 2016-11-08 | Intel Corporation | Techniques for spatially sorting graphics information |
GB2520366B (en) | 2013-12-13 | 2015-12-09 | Imagination Tech Ltd | Primitive processing in a graphics processing system |
US9239795B2 (en) | 2014-01-08 | 2016-01-19 | Nvidia Corporation | Efficient cache management in a tiled architecture |
GB2526598B (en) | 2014-05-29 | 2018-11-28 | Imagination Tech Ltd | Allocation of primitives to primitive blocks |
GB2524120B (en) * | 2014-06-17 | 2016-03-02 | Imagination Tech Ltd | Assigning primitives to tiles in a graphics processing system |
GB2530996B (en) * | 2014-10-06 | 2016-09-14 | Imagination Tech Ltd | Depth forwarding in a graphics processing system |
GB2534567B (en) * | 2015-01-27 | 2017-04-19 | Imagination Tech Ltd | Processing primitives which have unresolved fragments in a graphics processing system |
US9619937B2 (en) * | 2015-03-05 | 2017-04-11 | Arm Limited | Methods and apparatus for processing computer graphics primitives in tile-based graphics rendering system |
GB2541692B (en) * | 2015-08-26 | 2019-10-02 | Advanced Risc Mach Ltd | Graphics processing systems |
GB2542133B (en) * | 2015-09-08 | 2020-05-27 | Imagination Tech Ltd | Graphics processing method and system for processing sub-primitives |
US20170315928A1 (en) | 2016-04-28 | 2017-11-02 | Netapp, Inc. | Coarse-grained cache replacement scheme for a cloud-backed deduplication storage system |
US10497150B2 (en) * | 2017-01-11 | 2019-12-03 | Arm Limited | Graphics processing fragment shading by plural processing passes |
US10147227B2 (en) * | 2017-02-17 | 2018-12-04 | Microsoft Technology Licensing, Llc | Variable rate shading |
US10074210B1 (en) * | 2017-07-25 | 2018-09-11 | Apple Inc. | Punch-through techniques for graphics processing |
GB2567436B (en) | 2017-10-10 | 2019-10-02 | Imagination Tech Ltd | Geometry to tiling arbiter for tile-based rendering system |
CN111354065A (zh) | 2018-12-21 | 2020-06-30 | 畅想科技有限公司 | 用于图形处理***的基元块生成器 |
CN111429556B (zh) | 2018-12-21 | 2023-03-24 | 畅想科技有限公司 | 图形处理***中的基于基元块的光栅化 |
-
2019
- 2019-12-20 CN CN201911327664.8A patent/CN111354065A/zh active Pending
- 2019-12-20 EP EP19219072.6A patent/EP3671652A1/en active Pending
- 2019-12-20 EP EP19219071.8A patent/EP3671651B1/en active Active
- 2019-12-20 CN CN201911328719.7A patent/CN111353928A/zh active Pending
- 2019-12-20 EP EP24158238.6A patent/EP4345732A3/en active Pending
- 2019-12-21 US US16/724,239 patent/US11217007B2/en active Active
- 2019-12-21 US US16/724,237 patent/US11127196B2/en active Active
-
2021
- 2021-08-20 US US17/407,719 patent/US11663771B2/en active Active
- 2021-11-29 US US17/536,671 patent/US11527039B2/en active Active
-
2022
- 2022-11-29 US US18/071,095 patent/US11836849B2/en active Active
-
2023
- 2023-05-28 US US18/202,933 patent/US11915363B2/en active Active
- 2023-11-30 US US18/525,756 patent/US20240104833A1/en active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9928563B2 (en) * | 2013-04-02 | 2018-03-27 | Imagination Technologies Limited | Tile-based graphics |
US9299187B2 (en) * | 2014-02-06 | 2016-03-29 | Imagination Technologies Limited | Opacity testing for processing primitives in a 3D graphics processing system |
US20170069126A1 (en) * | 2015-09-08 | 2017-03-09 | Imagination Technologies Limited | Graphics Processing Method and System for Processing Sub-Primitives Using Cached Graphics Data Hierarchy |
CN106897143A (zh) * | 2015-12-21 | 2017-06-27 | 想象技术有限公司 | 对图形处理***中的处理引擎的区片分配 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115908100A (zh) * | 2021-09-30 | 2023-04-04 | 想象技术有限公司 | 图形处理器 |
Also Published As
Publication number | Publication date |
---|---|
EP4345732A3 (en) | 2024-06-05 |
EP4345732A2 (en) | 2024-04-03 |
EP3671652A1 (en) | 2020-06-24 |
US20200202484A1 (en) | 2020-06-25 |
US20240104833A1 (en) | 2024-03-28 |
US11836849B2 (en) | 2023-12-05 |
EP3671651A1 (en) | 2020-06-24 |
US11527039B2 (en) | 2022-12-13 |
EP3671651B1 (en) | 2024-03-27 |
CN111354065A (zh) | 2020-06-30 |
US11127196B2 (en) | 2021-09-21 |
US20220084281A1 (en) | 2022-03-17 |
US20210383598A1 (en) | 2021-12-09 |
US20200202612A1 (en) | 2020-06-25 |
US11915363B2 (en) | 2024-02-27 |
US20230090166A1 (en) | 2023-03-23 |
US11663771B2 (en) | 2023-05-30 |
US11217007B2 (en) | 2022-01-04 |
US20230298262A1 (en) | 2023-09-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11915363B2 (en) | Transformed geometry data cache for graphics processing systems | |
CN111429556B (zh) | 图形处理***中的基于基元块的光栅化 | |
US10249085B2 (en) | Graphics processing method and system for processing sub-primitives using sub-primitive indications in a control stream | |
CN107169916B (zh) | 用于simd处理的任务组合 | |
US11151685B2 (en) | Hierarchical tiling in a graphics processing system using chain sorting of primitives | |
US10210649B2 (en) | Graphics processing method and system for processing sub-primitives using cached graphics data hierarchy | |
CN112116520B (zh) | 用于处理基元片段的***和方法 | |
US11263806B2 (en) | Graphics processing method and system for processing sub-primitives | |
CN111489282B (zh) | 用于存储未变换图元块的存储器 | |
GB2580170A (en) | Transformed geometry data cache for graphics processing systems | |
GB2580166A (en) | Primitive block-based rasterization in graphics processing systems | |
GB2597370A (en) | Transformed geometry data cache for graphics processing systems | |
GB2610919A (en) | Tag buffer for graphics processing systems | |
GB2610081A (en) | Primitive block generator for graphics processing systems | |
GB2580168A (en) | Primitive block generator for graphics processing systems |
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 |