CN106504181A - 用于处理子图元的图形处理方法和*** - Google Patents
用于处理子图元的图形处理方法和*** Download PDFInfo
- Publication number
- CN106504181A CN106504181A CN201610807792.2A CN201610807792A CN106504181A CN 106504181 A CN106504181 A CN 106504181A CN 201610807792 A CN201610807792 A CN 201610807792A CN 106504181 A CN106504181 A CN 106504181A
- Authority
- CN
- China
- Prior art keywords
- unit
- subgraph
- pel
- segment
- data
- 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.)
- Granted
Links
Classifications
-
- 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
- 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
- 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/10—Geometric effects
- G06T15/40—Hidden part removal
-
- 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
- G06T17/205—Re-meshing
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- Image Generation (AREA)
Abstract
在基于图块的图形处理***中使用未变换的显示列表时,可能需要在几何处理阶段和光栅化阶段二者中执行在推导子图元时涉及到的处理。为了减少对该处理的重复,针对图块的控制流数据包括指示哪些子图元将用于渲染图块的子图元指示。这允许基于在几何处理阶段中确定的该信息在光栅化阶段中高效地确定子图元。另外,分级高速缓存***可以用于存储用于推导子图元的图形数据项目的分级。如果在高速缓存中存储用于推导子图元的图形数据项目,则在光栅化阶段中从高速缓存获取这些图形数据项目可以减少为了推导子图元而执行的处理量。
Description
技术领域
本公开涉及一种用于处理子图元的图形处理方法和***。
背景技术
图形处理***通常地被配置为例如从在计算机***上运行的应用接收图形数据,并且渲染图形数据以提供渲染输出。例如向图形处理***提供的图形数据可以描述在待渲染的三维(3D)场景内的几何结构,并且渲染输出可以是场景的渲染的图像。一些图形处理***(其可以称为“基于图块的”图形处理***)使用被细分成多个图块的渲染空间。“图块”是渲染空间的区域并且可以具有任何适当形状,但是通常地是矩形(其中术语“矩形”包括正方形)。如在本领域中所知,将渲染空间细分成图块有许多益处。例如将渲染空间细分成图块允许以逐个图块方式渲染图像,其中针对图块的图形数据可以在渲染图块期间被暂时地“片上”存储、由此减少在***存储器与图形处理***的图形处理单元(GPU)被实施在其上的芯片之间传送的数据量。
基于图块的处理***通常地在两个阶段中操作:几何处理阶段和光栅化阶段。在几何处理阶段中,分析用于渲染的图形数据以针对图块中的每个图块确定哪些图形数据项目存在于该图块内。然后在光栅化阶段中,可以通过处理被确定存在于该图块内的那些图形数据项目来渲染图块(而无需处理在几何处理阶段中被确定为不存在于特定图块内的图形数据项目)。
图1示出基于图块的图形处理***100的示例。***100包括存储器102、几何处理逻辑104和光栅化逻辑106。如在本领域中所知,几何处理逻辑104和光栅化逻辑106可以被实施在GPU上并且可以共享一些处理资源。几何处理逻辑104包括几何取回单元108、几何变换逻辑110、挑选/删减单元112和图块化单元114。光栅化逻辑106包括参数取回单元116、隐藏表面去除(HSR)单元118和纹理化/阴影化单元120。存储器102可以被实施为一个或多个物理存储器块并且包括图形存储器122、已变换参数存储器124、控制流存储器126和帧缓冲器128。
几何处理单元104执行几何处理阶段,在该阶段中,几何取回单元108从图形存储器122取回几何数据并且向变换逻辑110传递取回的数据。几何数据包括描述待渲染的几何结构的图形数据项目。例如图形数据项目可以代表几何形状,这些几何形状描述场景中的结构的表面并且称为“图元”。常见图元形状是三角形,但是图元可以是其它2D形状并且也可以是线或者点。对象可以由一个或多个这样的图元组成。对象可以由数千或者甚至百万个这样的图元组成。场景通常地包含许多对象。图形数据项目中的一些图形数据项目可以是控制点,这些控制点描述将被镶嵌以生成多个镶嵌的图元的补块。
变换逻辑110将几何数据变换到渲染空间中并且可以应用如在本领域中已知的光照/属性处理。所得数据被传递到挑选和/或删减落在查看平截头体以外的任何几何结构的挑选/删减单元112。所得变换的几何数据项目(例如图元)被提供到图块化单元114,并且也提供到存储器102用于在已变换参数存储器124中存储。图块化单元114针对渲染空间的图块中的每个图块生成控制流数据,其中针对图块的控制流数据包括将用于渲染图块的变换的图元的标识符,即至少部分地位于图块内的变换的图元的标识符。针对图块的控制流数据可以称为针对图块的“显示列表”或者“对象列表”。针对图块的控制流数据被提供到存储器102用于在控制流存储器126中存储。因此,在几何处理阶段之后,待渲染的变换的图元被存储在已变换参数存储器124中,并且指示变换的图元中的哪些变换的图元存在于图块中的每个图块中的控制流数据被存储在控制流存储器126中。
在光栅化阶段中,光栅化逻辑106以逐个图块方式渲染图元。参数取回单元116接收针对图块的控制流数据,并且如针对图块的控制流数据指示的那样从已变换参数存储器124取回指示的变换的图元。向隐藏表面去除(HSR)单元118提供取回的变换的图元,该HSR单元去除隐藏的图元片段(例如被其它图元片段隐藏)。执行隐藏表面去除的方法在本领域中是已知的。术语“片段”是指图元的在采样点处的采样,该采样将被处理以渲染图像的像素。在一些示例中,可以存在片段到像素的一一映射。然而,在其它示例中,可以有比像素更多的片段,并且该过采样可以允许例如通过有助于可以应用于多个片段用于渲染像素值中的每个像素值的防混叠和其它过滤来对像素值的更高质量的渲染。向纹理化/阴影化单元120提供未被HSR单元118去除的图元,该纹理化/阴影化单元向图元片段应用纹理化和/或阴影化。虽然在图1中未示出,但是纹理化/阴影化单元120可以如在本领域中所知从存储器102接收纹理数据以便向图元片段应用纹理化。纹理化/阴影化单元120可以向图元片段应用如在本领域中已知的更多处理(例如阿尔法混合和其它过程)以便确定图像的渲染的像素值。为图块中的每个图块执行光栅化阶段,从而整个图像可以用正在确定的针对整个图像的像素值来渲染。向存储器102提供渲染的像素值用于在帧缓冲器128中存储。然后可以用任何适当方式使用渲染的图像,例如在显示器上显示或者在存储器中存储或者向另一设备传输渲染的图像等。
用于代表场景的几何数据量往往随着计算机图形应用(例如游戏应用)的复杂性增加而增加。这意味着在图1的***中,从几何处理逻辑104提供到存储器102并且存储在已变换参数存储器124中的变换的几何数据量增加。数据从(通常地“片上”实施的)几何处理逻辑104向存储器102(通常地“片外”实施为***存储器)的该传送可能是相对慢的过程(与在渲染几何数据时涉及到的其它过程比较)并且可能消耗大量存储器102。
因此,如在英国专利号GB2458488中描述的那样,一些基于图块的图形处理***可以使用“未变换的显示列表”,从而针对图块的控制流数据包括对输入几何数据的指示,即未变换的几何数据而不是变换的几何数据。这意味着变换的几何数据无需从几何处理逻辑提供到***存储器或者存储在***存储器中。这些***在光栅化逻辑中实施变换单元,因为由光栅化逻辑取回的几何数据未被变换,但是在一些场景中,避免向***存储器传送变换的图元并且在***存储器中存储它们的延迟和存储器使用的益处可以超过在光栅化阶段中执行变换的处理成本。
图2示出与在GB2458488中描述的***相似的使用未变换的显示列表的***200的示例。***200与图1中所示***100相似并且包括存储器202、几何处理逻辑204和光栅化逻辑206。如在本领域中所知,几何处理逻辑204和光栅化逻辑206可以被实施在GPU上并且可以共享一些处理资源。几何处理逻辑204包括几何数据取回单元208、几何变换逻辑210、挑选/删减单元212和图块化单元214。光栅化逻辑206包括取回单元216、光栅化变换逻辑230、HSR单元218和纹理化/阴影化单元220。存储器202可以被实施为一个或多个物理存储器块,并且包括图形存储器222、控制流存储器226和帧缓冲器228。
几何处理逻辑204执行几何处理阶段,在该几何处理阶段中,几何数据取回单元208从图形存储器222取回几何数据并且向变换逻辑210传递取回的数据。取回单元208可以仅取回用于计算图形数据项目(例如图元)的位置的数据,因为图形数据项目的其它数据(例如将在渲染期间应用于图形数据项目的颜色数据或者纹理数据等)不是几何处理逻辑204需要的。这不同于其中针对图形数据项目的所有数据由取回单元108取回的***100。变换逻辑210将图形数据项目的位置数据变换到渲染空间中,并且所得数据被传递到挑选和/或删减落在查看平截头体以外的任何图形数据项目的挑选/删减单元212。图块化单元214针对渲染空间的图块中的每个图块生成控制流数据,其中针对图块的控制流数据包括将用于渲染图块的图形数据项目的标识符,例如在被变换时至少部分地位置于图块内的图元的标识符。控制流数据中的标识符标识输入图形数据项目、即在图形存储器222中存储的图形数据项目。这不同于图1中所示***100,在该***中,控制流数据中的标识符标识在已变换参数存储器124中存储的变换的图元。向存储器202提供针对图块的控制流数据用于在控制流存储器226中存储。
在光栅化阶段中,光栅化逻辑206的取回单元216从控制流存储器226接收针对图块的控制流数据,并且如针对图块的控制流数据指示的那样从图形存储器222取回指示的输入图形数据项目。输入图形数据项目未被变换。变换逻辑230将取回的图形数据项目变换到渲染空间中。变换的图形数据项目被提供到HSR单元218,该HSR单元执行HSR以去除隐藏的图元片段。纹理化和阴影化单元220然后向未被HSR单元218去除的图元片段执行处理,比如纹理化和/或阴影化。HSR单元218以及纹理化和阴影化单元220以与图1中所示和以上描述的***100的对应单元118和120相似的方式操作。所得渲染的像素值被提供到存储器202用于在帧缓冲器228中存储并且可以后续地被使用,例如被显示在显示器上或者被存储在存储器中或者被传输到另一设备等。
先前专利GB2458488描述用于光栅化阶段的优化,其中推迟光照或者属性处理直至在已经执行隐藏表面去除之后。在该优化中,在光栅化阶段中实施两个变换单元:在HSR单元之前实施的仅变换图元的“位置数据”(即用于在计算图元的位置时使用的数据)的第一变换单元,和在HSR单元之后实施的对于通过HSR单元的深度测试的图元执行光照或者属性处理的第二变换单元。以该方式,仅对于未被HSR单元挑选的图元计算图元的非位置属性。
先前专利GB2458488描述又一优化,其中在几何处理阶段中变换,然后在参数缓冲器中存储针对图元的位置数据。针对图元的位置数据然后可以在光栅化阶段期间被取回并且由HSR单元和其它处理单元使用。从存储器取回并且变换针对图元的非位置属性数据用于由HSR单元和其它处理单元使用。该优化避免需要在光栅化阶段中重新计算针对图元的变换的位置数据。
发明内容
提供该发明内容以用简化的形式介绍以下在具体实施方式中进一步描述的构思的选集。该发明内容未旨在于标识要求保护的主题内容的关键特征或者实质特征,也未旨在于用于限制要求保护的主题内容的范围。
以上描述的***200良好地适合用于处理图形数据项目,比如图元,这些图形数据项目在它们被渲染时未生成子图元。然而,处理许多输入图形数据项目可能造成生成多个子图元。术语“子图元”这里用于指代通过处理输入图形数据项目而生成的图元。因此,子图元未被存储在图形存储器222中,但是从在图形存储器222中存储的输入图形数据项目来生成(例如在几何处理逻辑204中的几何处理阶段期间)。例如如果输入图形数据项目是描述待镶嵌的补块的控制点,则控制点的镶嵌可能产生许多子图元(例如两个、数十个、数百个或者数千个子图元)。另外,可以对图形数据项目执行其它操作,比如几何阴影化和删减以生成子图元。由于***200使用控制流数据,该控制流数据包括在图像存储器222中存储的输入图形数据项目的标识符,所以需要在***200中的几何处理阶段和光栅化阶段二者中对于在几何处理阶段中未挑选的输入图形数据项目执行如下处理级,这些处理级被实施以从输入图形数据项目确定子图元。因此,相对于用于生成子图元的处理级重复一些处理。
根据这里描述的实施例,提供一种被配置为使用被细分成多个图块的渲染空间的图形处理***,该图形处理***包括:
·几何处理逻辑,包括:
几何变换和子图元逻辑,被配置为接收输入图形数据项目的图形数据,并且确定从输入图形数据项目推导的一个或多个子图元在渲染空间内的变换的位置;以及
图块化单元,被配置为对于图块中的每个图块生成控制流数据,控制流数据包括:(i)将用于渲染图块的输入图形数据项目的标识符,以及(ii)指示子图元中的哪些子图元将用于渲染图块的子图元指示;以及
·光栅化逻辑,被配置为针对图块中的每个图块生成渲染输出,光栅化逻辑包括:
取回单元,被配置为取回由针对特定图块的控制流数据中的标识符标识的输入图形数据项目;
光栅化变换和子图元推导逻辑,被配置为从取回的输入图形数据项目推导在渲染空间内的变换的子图元,其中推导的子图元将用于渲染特定图块,以及其中根据针对特定图块的控制流数据中的子图元指示推导子图元;以及
一个或多个处理单元,用于渲染变换的图形数据项目和/或推导的子图元,以由此针对特定图块生成渲染输出。
也提供一种在被配置为使用被细分成多个图块的渲染空间的图形处理***中生成渲染输出的方法,该方法包括几何处理阶段和光栅化阶段,
其中几何处理阶段包括:
接收输入图形数据项目的图形数据;
确定从输入图形数据项目推导的一个或多个子图元在渲染空间内的变换的位置;以及
对于图块中的每个图块生成控制流数据,控制流数据包括:(i)将用于渲染图块的输入图形数据项目的标识符,以及(ii)指示子图元中的哪些子图元将用于渲染图块的子图元指示;以及
其中光栅化阶段包括,对于图块中的每个图块:
取回由针对特定图块的控制流数据中的标识符标识的输入图形数据项目;
使用取回的输入图形数据项目以推导在渲染空间内的变换的子图元,其中推导的子图元将用于渲染特定图块,以及其中根据针对特定图块的控制流数据中的子图元指示推导子图元;以及
渲染推导的子图元,以由此针对特定图块生成渲染输出。
根据这里描述的更多实施例,提供一种在图形处理***中渲染子图元的方法,其中子图元经由一个或多个处理级的序列从一个或多个输入图形数据项目可推导,以及其中高速缓存被配置用于存储图形数据项目的分级,所述分级包括输入图形数据项目中的一个或多个输入图形数据项目和代表序列的处理级的结果的一个或多个图形数据项目,该方法包括:
确定子图元是否被存储在高速缓存中;
如果确定子图元被存储在高速缓存中,则从高速缓存获取子图元并且渲染获取的子图元;
如果确定子图元未被存储在高速缓存中,则确定分级的更高级别的一个或多个图形数据项目是否被存储在高速缓存中,其中子图元从分级的更高级别的所述一个或多个图形数据项目可推导;以及
如果确定分级的更高级别的所述一个或多个图形数据项目被存储在高速缓存中:
从高速缓存获取分级的更高级别的一个或多个图形数据项目;
使用分级的更高级别的获取的一个或多个图形数据项目来推导子图元;以及
渲染推导的子图元。
也可以提供一种计算机可读代码,该计算机可读代码适于在代码在计算机上被运行时执行这里描述的方法中的任一方法的步骤。也可以提供一种计算机可读代码,该计算机可读代码定义根据这里描述的示例中的任一示例的图形处理***,其中图形处理***可制造。可以提供一种用于生成根据这里描述的示例中的任一示例的图形处理***的计算机可读代码。计算机可读代码可以被编码在计算机可读存储介质上。
可以在集成电路上的硬件中实现这里描述的图形处理***。可以提供一种在集成电路制造***处制造如这里描述的图形处理***的方法。可以提供一种集成电路定义数据集,该集成电路定义数据集在集成电路制造***中被处理时配置该***以制造如这里描述的图形处理***。可以提供一种非瞬态计算机可读存储介质,该非瞬态计算机可读存储介质具有存储于其上的集成电路的计算机可读描述,该计算机可读描述在被处理时使布局处理***生成在集成电路制造***中使用的电路布局描述以制造如这里描述的图形处理***。
可以提供一种集成电路制造***,该集成电路制造***包括:
非瞬态计算机可读存储介质,具有存储于其上的计算机可读集成电路描述,该计算机可读集成电路描述描述如这里描述的图形处理***;
布局处理***,被配置为处理集成电路描述以便生成实现图形处理***的集成电路的电路布局描述;以及
集成电路生成***,被配置为根据电路布局描述制造图形处理***。
可以提供一种用于执行这里描述的方法中的任一方法的计算机程序代码。可以提供一种非瞬态计算机可读存储介质,该非瞬态计算机可读存储介质具有存储于其上的计算机可读指令,这些计算机可读指令在计算机***处被执行时使计算机***执行这里描述的方法中的任一方法。
可以如本领域技术人员将清楚的那样如适当的那样组合以上特征,并且以上特征可以与这里描述的示例的方面中的任一方面组合。
附图说明
现在将参照附图具体描述示例,在附图中:
图1示出使用变换的显示列表的第一现有技术图形处理***的示例;
图2示出使用未变换的显示列表的第二现有技术图形处理***的示例;
图3示出根据这里描述的实施例的图形处理***;
图4是示出在图形处理***中生成渲染输出的方法的流程图;
图5示出用于从输入图形数据项目生成子图元的处理级序列的示例;
图6是示出使用分级高速缓存在图形处理***中渲染子图元的方法的流程图;
图7是示出高速缓存***的图;
图8示出根据第一索引映射方案向顶点指派的索引;
图9示出根据第二索引映射方案向顶点指派的索引;
图10示出根据第三索引映射方案向顶点指派的索引;
图11示出根据备选实施例的图形处理***;
图12示出根据更多备选实施例的图形处理***;
图13示出其中实施图形处理***的计算机***;以及
图14示出用于生成实现图形处理***的集成电路的集成电路制造***。
附图图示各种示例。本领域技术人员将认识附图中的所示要素边界(例如框、多组框或者其它形状)代表边界的一个示例。可以在一些示例中可以设计一个要素为多个要素或者可以设计多个要素为一个要素。共同参考标号在适合时贯穿各图用于指示相似特征。
具体实施方式
现在将仅通过示例描述实施例。
根据这里描述的实施例,在使用未变换的显示列表的图形处理***中从输入图形数据项目生成子图元时,几何处理逻辑为图块生成控制数据,该控制数据包括指示子图元中的哪些子图元将用于渲染图块的子图元指示。光栅化逻辑然后可以根据针对特定图块的控制流数据中的子图元指示推导将用于渲染特定图块的子图元。以该方式,光栅化逻辑可以避免执行如下操作(例如阴影器操作、镶嵌操作或者删减操作),控制流数据指示这些操作没有造成生成将在特定图块内渲染的任何子图元。以该方式,可以基于关于在几何处理阶段期间确定的子图元的位置的信息减少在光栅化阶段中生成子图元时涉及到的处理量。例如光栅化逻辑可以避免对如下子图元执行操作(例如阴影器操作、镶嵌操作或者删减操作),控制流数据指示在特定图块内的渲染中无需这些子图元。
根据其它实施例,分级高速缓存方案可以用于存储图形数据项目的分级,例如该图形数据项目的分级包括输入图形数据项目和如下处理级的结果,这些处理级被实施以从输入图形数据项目推导子图元。在光栅化阶段中使用分级高速缓存方案。在分级高速缓存方案中的查找以由下至上方式操作,从而如果子图元被存储在高速缓存中,则可以从高速缓存获取它而未执行如下处理级中的任何处理级,这些处理级被实施以从输入图形数据项目生成子图元。如果子图元未被存储在高速缓存中,则做出尝试以从在分级内向上的下一级获取可以用于推导子图元的图形数据项目。高速缓存查找沿着分级向上继续直至可以推导子图元或者可以从在高速缓存中存储的数据推导子图元。如果不能从在高速缓存中存储的数据推导子图元,则输入图形数据项目从图形存储器被取回和被用于通过实施处理级序列来推导子图元。在实施处理级时,处理级的结果(子图元或者在分级的更高级别的图形数据项目(例如图元))被存储在高速缓存中用于后续使用。在光栅化阶段中跨不同图元和跨不同图块使用高速缓存方案。使用高速缓存方案减少执行的从存储器的数据取回数目并且减少在光栅化阶段中执行的处理级数目。也就是说,可以跨不同图元和/或跨不同图块共享阴影器输出和删减器输出。访问高速缓存的由下至上方式减少如下处理级的数目,这些处理级被执行以推导在特定图块内的子图元。注意在几何处理阶段中,图元处理顺序经过分级由上至下以针对整个渲染空间生成子图元;而在光栅化阶段中,在图块中处理数据并且图元处理顺序关于分级由下至上和仅针对在当前正在渲染的特定图块中的子图元。分级高速缓存方案适合于在光栅化阶段中处理图元的方式,而未这样适合于在几何处理阶段中处理图元的方式。
图3示出根据这里描述的实施例的图形处理***300。***300与图2中所示***200相似,但是包括用于推导子图元的部件。具体而言,***300包括存储器302、几何处理逻辑304和光栅化逻辑306。如在本领域中所知,几何处理逻辑304和光栅化逻辑306可以被实施在GPU上并且可以共享一些处理资源。几何处理逻辑304包括几何数据取回单元308、几何变换和子图元逻辑310和图块化单元314。光栅化逻辑306包括取回单元316、光栅化变换和子图元推导逻辑330、HSR单元318和纹理化/阴影化单元320。光栅化逻辑306也可以包括高速缓存***334,该高速缓存***包括高速缓存336和高速缓存控制器338。在图3中用虚线示出高速缓存***334,因为在一些实施例中可以没有实施高速缓存***334,但是在其它实施例中实施高速缓存***334。存储器302可以被实施为一个或多个物理存储器块,并且包括图形存储器322、控制流存储器326和帧缓冲器328。
在一个示例中参照图4中所示流程图描述***300的操作。在该示例中,高速缓存***334没有被描述为被实施,但是在一些实施例中,可以与图4中所示方法一起实施高速缓存***334。
在步骤S402中,几何数据取回单元308从图形存储器322取回几何数据并且向变换和子图元逻辑310传递取回的数据。取回的数据可以是“位置数据”,该位置数据可以包括用于在计算图形数据项目的位置时使用的数据。例如取回单元308可以仅取回图形数据项目的位置数据,因为图形数据项目的其它数据(例如将向图形数据项目应用的颜色数据或者纹理数据等)不是几何处理逻辑304需要的。如以上描述的那样,图形数据项目可以例如是描述待镶嵌的补块的图元或者控制点。
在步骤S404中,变换和子图元逻辑310将图形数据项目的位置数据变换到渲染空间中。另外,在步骤S404中,变换和子图元逻辑310确定从输入图形数据项目推导的一个或多个子图元在渲染空间内的变换的位置。步骤S404可以涉及到执行多个不同功能,因为可以用多个不同方式从输入图形数据项目推导子图元。具体而言,变换和子图元逻辑310可以包括用于从输入图形数据项目推导变换的子图元的一个或多个处理模块,例如顶点阴影化模块、几何阴影化模块和/或镶嵌模块。变换和子图元逻辑310也包括与以上关于图1和2描述的删减/挑选单元相似的删减/挑选单元。向挑选/删减单元提供由变换和子图元逻辑310推导的子图元的位置和没有从其推导子图元的图形数据项目的变换的位置数据,该挑选/删减单元用于删减和/或挑选没有完全地落在渲染空间内的图形数据项目。
图5示出用于从输入图形数据项目推导子图元的处理级序列的示例。矩形代表操作而平行四边形代表它们的输入和输出。操作的输出可以由在分级的更低级别中的多个操作读取作为输入。这里描述的示例涉及对图形数据项目作用的变换和子图元逻辑310,虽然将理解为该情况,但是无需赘言变换和子图元逻辑310正是作用于那些图形数据项目的位置数据。图5示出均包括四个输入控制点的两个补块(504A和504B)。控制点中的两个控制点由这两个补块504共享,从而在图5中所示示例中有六个不同控制点。相应顶点阴影器实例(5020至5025)由变换和子图元逻辑310用于将六个控制点变换到渲染空间中。来自顶点阴影器5020至5023的输出描述第一补块504A,而来自顶点阴影器5022至5025的输出描述第二补块504B。变换和子图元逻辑310实施壳阴影器的两个实例506A和506B(一个实例用于补块504A和504B中的每个相应补块)以及固定功能的镶嵌器的两个实例508A和508B。每个壳阴影器实例(506A和506B)生成镶嵌因子(507A和507B),这些镶嵌因子定义镶嵌的图元,这些图元代表相应补块504A和504B。壳阴影器实例(506A和506B)也生成其它补块输出数据(505A和505B),该其它补块输出数据包括输出控制点和将在域阴影器中使用的补块恒定数据。壳阴影器实例506预备镶嵌因子507A和507B,并且镶嵌器508执行镶嵌以生成定义镶嵌的图元的顶点UV坐标509A和509B。在图5中所示简单示例中,补块A 504A产生两个镶嵌的图元,而补块B 504B产生一个镶嵌的图元(由于不同镶嵌因子)。应当清楚在其它示例中可以通过镶嵌来产生不同数目的图元,并且具体而言可以产生比两个多得多的图元,例如可以通过镶嵌补块来产生数十个、数百个或者甚至数千个图元。向用于操控镶嵌的顶点的域阴影器实例510输入针对镶嵌的图元的顶点的顶点数据,例如向顶点应用高度映射等的域阴影器实例510中输入针对镶嵌的图元的顶点的顶点数据(由来自镶嵌器508的顶点UV坐标509以及来自壳阴影器506的输出控制点和其它图形补块数据项目505定义)。变换和子图元逻辑310实施域阴影器的七个实例(510A0至510A3和510B0至510B2),这些实例向代表补块504A和504B的镶嵌的图元的顶点应用相应变换。由域阴影器510A0、510A1和510A2提供的变换的顶点代表镶嵌的图元512A0。由域阴影器510A1、510A2和510A3提供的变换的顶点代表镶嵌的图元512A1。由域阴影器510B0、510B1和510B2提供的变换的顶点代表镶嵌的图元512B0。注意可以共享针对从相同补块产生的镶嵌的图元的顶点(例如图元512A0和512A1共享两个顶点)。由镶嵌级生成的镶嵌的图元(512A0、512A1和512B0)被馈送到变换和子图元逻辑310的几何阴影器(GS)级,该GS级被配置为每图元运行几何阴影器的两个实例。由每个GS实例生成的图元数目根据GS实例被布置为执行的操作而从0变化到由应用指定的上界(例如上至256)。在图5中所示简单示例中,从0至2个图元由GS实例中的每个实例产生。具体而言,GS实例514A00被应用于图元512A0并且产生两个图元516A00和516A01;GS实例514A01被应用于图元512A0并且产生一个图元516A02;GS实例514A10被应用于图元512A1并且产生零个图元;GS实例514A11被应用于图元512A1并且产生一个图元516A10;GS实例514B00被应用于图元512B0并且产生一个图元516B00;并且GS实例514B01被应用于图元512B0并且产生一个图元516B01。
如以上描述的那样,变换和子图元逻辑310在图元中的一些图元延伸至查看平截头体以外的情况下可以删减它们,但是在图5中所示示例中未删减GS生成的图元中的一些图元。例如在删减图元时,可以在使用六个标准删减平面和八个定制删减平面时产生上至十五个子图元(十七个顶点)。然而,在图5中所示简单示例中,删减图元516A01以产生一个图元520A010,并且删减图元516B00以产生两个图元520B000和520B001。未删减图元516A00、516A02、516A10和516B01。分级的叶节点(即在图5中所示示例中的图元516A00、520A010、516A02、516A10、520B000、520B001和516B01)是待渲染的子图元。在一些示例中,输入图元可以穿过变换和子图元逻辑310而不生成任何子图元,从而可以在一些示例中向输入图元应用删减。因此,一般而言,变换和子图元逻辑310挑选和/或删减处于查看平截头体以外的图形数据项目(包括推导的子图元)。向图块化单元314传递其余图元和子图元。
在步骤S408中,图块化单元314针对渲染空间的图块中的每个图块生成控制流数据。针对图块的控制流数据包括将用于渲染图块的输入图形数据项目的标识符,该输入图形数据项目是例如来自图形存储器322的图元,这些图元在被变换时至少部分地位于图块内,或者来自图形存储器322的图元,至少部分地位于图块内的子图元是从这些图元推导的。控制流数据中的标识符标识输入图形数据项目,即在图形存储器222中存储的图形数据项目。针对图块的控制流数据也包括指示子图元中的哪些子图元将用于渲染图块的子图元指示。如果子图元至少部分地在图块中,则可以确定子图元用于在渲染图块时使用。如以下将更具体说明的那样,可以在光栅化阶段期间使用子图元指示以减少执行的用于推导针对图块的子图元的处理量。子图元指示可以例如指示如何从变换的输入图形数据项目推导将用于渲染图块的子图元。例如子图元指示可以指示如下处理操作序列,对输入图形数据项目执行这些处理操作以便生成待渲染的子图元。因此,光栅化阶段可以执行指示的操作(但是无需执行未指示的操作)以便推导针对图块的待渲染的必需子图元。例如涉及图5中所示示例的控制流中的子图元指示可以指示GS实例514A10未产生任何图元,在该情况下,可以在光栅化阶段中不执行该GS实例。
另外,可以是如下情况,作为图5中所示叶节点的子图元中的一些子图元可能未至少部分地位于特定图块内。例如图元516A02可能完全地落在特定图块以外,在该情况下,子图元516A02的指示将不被包括在针对特定图块的控制流数据中。因此,在光栅化阶段中,光栅化逻辑将无需实施几何阴影器514A01。
可以将子图元指示表示为一个或多个掩码。例如针对子图元的掩码可以指示将执行可能操作集合的哪些操作以推导子图元。掩码也可以指示挑选或者删减可能子图元集合的哪些子图元。掩码也可以指示从原始图元推导的哪些子图元存在于图块中而哪些未存在于图块中。另外,可以将控制流数据中的输入图形数据项目的标识符实施为一个或多个掩码,该一个或多个掩码指示来自图形数据项目块的哪些图形数据项目将用于渲染特定图块。假如有可能重构针对特定图块中的每个图块的控制流数据,则可以在控制流数据的引用不同图块的部分之中共享或者可以不共享控制流数据中的输入图形数据项目的标识符。
可以根据任何适当压缩技术压缩控制流数据中的标识符和子图元指示。向存储器302提供针对图块的控制流数据用于在控制流存储器326中存储。几何处理阶段对于当前渲染是完成的,而在后续时间执行光栅化阶段以使用在图形存储器322中存储的输入图形数据和在控制流存储器326中存储的控制流数据来渲染该渲染空间的图块。
首先描述不包括高速缓存***334的示例。然后继续以下描述包括高速缓存***334的示例。现在描述在光栅化阶段中渲染特定图块。在步骤S410中,光栅化逻辑306的取回单元316从控制流存储器326接收针对图块的控制流数据。在步骤S412中,取回单元316如由针对图块的控制流数据中的标识符指示的那样从图形存储器322取回指示的输入图形数据项目。输入图形数据项目未被变换。
在一些示例中,几何处理逻辑304(例如变换和子图元逻辑310)可以确定如下信息,该信息描述如何将输入图形数据项目分组成图元块。该信息可以作为附带信息与控制流一起传递。因此,取回单元316可以与针对图块的控制流数据一起接收该附带信息,并且可以根据附带信息生成包括取回的输入图形数据项目的图元块。与控制流数据中的子图元指示组合的图元块允许在光栅化阶段中重新生成子图元。在一些其它示例中,指示输入图形数据项目将如何被分组成图元块的附带信息无需从几何处理逻辑305传递到光栅化逻辑306,并且取而代之,取回单元316可以确定如何将输入图形数据项目分组成图元块。
在步骤S414中,变换和子图元推导逻辑330将取回的图形数据项目变换到渲染空间中。也向变换和子图元推导逻辑330提供针对当前渲染的特定图块的控制流数据中的子图元指示(这可以直接地来自控制流存储器326或者来自取回单元316)。另外,在步骤S414中,变换和子图元推导逻辑330根据针对特定图块的控制流数据中的子图元指示推导将用于渲染特定图块的子图元。
如以上描述的那样,控制流数据中的子图元指示可以由变换和子图元推导逻辑330用于有选择地仅执行为了推导在特定图块内存在的子图元而需要的那些过程。也就是说,变换和子图元推导逻辑330可以使用子图元指示以标识哪些过程不是推导图块中的子图元所必需的,从而那些非必需过程在光栅化阶段中未被变换和子图元推导逻辑330执行。注意那些过程将已经在几何处理阶段中由变换和子图元逻辑310执行以便确定它们未产生在特定图块中存在的子图元,但是这些过程无需在光栅化阶段中被重复。控制流数据中的子图元指示可以是分级索引,其中针对特定子图元的子图元指示在分级的不同级别处(例如如图5中所示)的一个或多个图形数据项目用于在推导特定子图元时使用。变换和子图元推导逻辑330可以使用针对特定子图元的分级索引以标识分级的一个或多个图形数据项目用于在推导特定子图元时使用。例如如图5中所示针对图元520A010的子图元指示可以是分级索引,该分级索引标识图元520A010是从包括补块输入控制点504A、与顶点UV坐标509A结合的补块输出数据505A、镶嵌生成的图元512A0和几何阴影器生成的图元516A01的图形数据项目序列推导的。这允许变换和子图元推导逻辑330容易地标识为了推导子图元而需要的处理步骤。
例如参照图5,仅在几何处理阶段中部分地删减的图元(即在图5中所示示例中的图元516A01和516B00)需要在光栅化阶段中再次被删减,并且变换和子图元推导逻辑330可以使用控制流数据中的子图元指示以确定删减无需应用于其它图元而无进一步确定步骤和未尝试向其它图元应用删减。作为另一示例,光栅化逻辑306中的变换和子图元推导逻辑330可以从控制流数据中的子图元指示确定针对镶嵌的图元A1的第一GS实例514A10未生成任何子图元,因此可以在光栅化阶段中避免执行GS实例514A10。
变换和子图元推导逻辑330输出推导的子图元和对于其未推导子图元的任何输入图元用于在步骤S418中由一个或多个处理单元渲染,以由此针对特定图块生成渲染输出。在图3中所示示例中,处理单元是去除隐藏的图元片段的HSR单元318,以及向图元片段应用纹理化和阴影化之一或者二者的纹理化/阴影化单元320。然而,在其它示例中,可以执行不同处理以渲染从变换和子图元推导逻辑330输出的图元和子图元。另外,图3中所示示例***300在纹理化和/或阴影化图元片段之前对图元片段执行隐藏表面去除的意义上是推迟式渲染***。在其它示例中,***可以不是推迟式渲染***,从而在纹理化和/或阴影化图元片段之后对图元片段执行隐藏表面去除。这里描述的原理可以适用于非推迟式渲染***以及推迟式渲染***,该原理是使用针对图块的控制流数据中的子图元指示,从而无需在光栅化阶段中重复在从输入图形数据项目推导子图元时涉及到的所有处理级。
在步骤S420中,所得渲染的像素值被提供到存储器302用于在帧缓冲器328中存储并且可以后续地被使用,例如被显示在显示器上或者被存储在存储器中或者被传输到另一设备等。
以上参照图4中所示未实施高速缓存***334的流程图描述方法。在其它示例中,实施高速缓存***334。以下参照图6和7描述使用高速缓存***334。高速缓存***334包括高速缓存336和高速缓存控制器338。可以在硬件、软件或者其组合中实施高速缓存控制器338。高速缓存336被配置为存储从变换和子图元推导逻辑330输出的图形数据项目(即变换的输入图形数据项目和/或推导的子图元)。高速缓存将图形数据项目存储为图形数据项目的分级,而分级的不同级别代表用于从输入图形数据项目推导子图元的处理级序列的不同处理级。例如如以上描述的那样,图5示出可以被执行以推导子图元的处理级序列。取回的输入图形数据项目和包括最终推导的子图元的不同处理级的结果在分级高速缓存结构内的适当级别处被存储在高速缓存中。例如删减器生成的图元520(可以是以三角扇的形式)可以视为在分级的级别0;GS生成的图元516可以视为在分级的级别1;镶嵌生成的图元512可以视为在分级的级别2;与顶点UV坐标509结合的补块输出数据505可以视为在分级的级别3;补块输入控制点504可以视为在分级的级别4;并且输入图形数据项目可以视为在分级的级别5。在一些其它示例中,为了节省高速缓存336中的空间,由于删减是相对低廉的计算,所以删减器输出可以不被存储在高速缓存336中,并且可以在需要删减器时重新执行它。在这里描述的示例中,参照在高速缓存336中存储“图元”或者存储“子图元”。在一些示例中,可以在高速缓存336中将图元(包括“子图元”)存储为离散项目。然而,本领域技术人员将清楚图元(包括“子图元”)可以由多个图形数据项目描述,例如由多个顶点描述,从而为了存储图元,在一些示例中,多个图形数据项目(例如顶点)可以被存储在高速缓存336中,从而“在高速缓存中存储图元(或者子图元)”可以实际上涉及到在高速缓存336中存储多个图形数据项目。另外,不同图元可以共享一个或多个顶点,从而高速缓存336可以存储图元的顶点中的一些顶点,但是并非所有顶点。
图6中所示流程图图示在光栅化阶段中使用高速缓存336的方法。在步骤S602中,在取回单元316处接收针对图块的控制流数据。如以上描述的那样,针对图块的控制流数据包括图形数据项目的标识符和指示将用于渲染图块的子图元的子图元指示。对于在针对图块的控制流数据中指示的子图元,取回单元316可以轮询高速缓存***334以确定子图元是否被存储在高速缓存336中或者是否将需要推导子图元。例如正在被请求的子图元可以如图5中所示是图元516A00。
响应于来自取回单元316的针对子图元的请求,高速缓存控制器338在步骤S604中确定子图元是否被存储在高速缓存336中。子图元由可以通过不同操作而生成的一个或多个图形数据项目组成。例如镶嵌生成的三角形由作为三个域阴影器调用的输出的三个图形数据项目(例如在该情况下的顶点)组成。通过在高速缓存336中存储针对该子图元的所有图形数据项目(例如所有顶点)来在高速缓存336中存储该子图元。如果子图元被存储在高速缓存336中,则在步骤S606中从高速缓存336获取子图元。获取的子图元可以绕过变换和子图元推导逻辑330,并且被提供到处理单元(即在图3中所示示例中的HSR单元318和纹理化/阴影化单元320)用于在步骤S608中渲染。如以下更具体描述的那样,可以是如下情况,在高速缓存336中存储针对子图元的一些图形数据项目(例如顶点),但是并非所有图形数据项目;并且如果是这种情况,则可以从高速缓存336中获取在高速缓存中存储的针对子图元的图形数据项目,并且可以推导未在高速缓存中存储的针对子图元的图形数据项目。以该方式,可以向处理单元(即在图3中所示示例中的HSR单元318和纹理化/阴影化单元320)提供针对子图元的所有图形数据项目用于在步骤S608、S618或者S628中渲染。可以在高速缓存336中存储针对子图元的推导的图形数据项目用于以后使用。
然而,如果在步骤S604中,高速缓存控制器338确定子图元未被存储在高速缓存336中(即针对子图元的图形数据项目中的一个或多个图形数据项目被存储在高速缓存336中),则该方法从步骤S604传递到步骤S610。在步骤S610中,高速缓存控制器338将变量n设置成指示在分级中的紧接在子图元以上的级别的值。例如如以上描述的那样,图5中所示图元516可以代表分级的级别1,因此紧接在该级别以上的级别是级别2。因此,在步骤S610中,n在该示例中被设置成值2。
在步骤S612中,高速缓存控制器338确定分级的更高级别(即级别2)的一个或多个图形数据项目是否被存储在高速缓存336中,其中子图元将从更高级别的所述一个或多个图形数据项目可推导。也就是说,高速缓存控制器338确定是否存在在高速缓存336中存储的级别n的充分图形数据项目以便推导子图元。在待推导的子图元如图5中所示是图元516A00的示例中,步骤S612涉及到确定图元512A0是否被存储在高速缓存336中,因为可以通过执行GS实例514A00来从图元512A0推导图元516A00。
如果在步骤S612中确定存在在高速缓存336中存储的级别n的充分图形数据项目,则该方法传递到步骤S614,在该步骤中,高速缓存控制器338从高速缓存336获取分级的级别n的将用于推导子图元的一个或多个图形数据项目。例如高速缓存控制器338可以从高速缓存336获取图元512A0。获取的图形数据项目被提供到变换逻辑330和/或变换和子图元推导逻辑330用于在推导待渲染的子图元时使用。
在步骤S616中,变换和子图元推导逻辑330使用获取的图形数据项目来推导子图元。例如变换和子图元推导逻辑330可以通过执行GS实例514A00来使用获取的图元512A0推导子图元516A00。在分级中的任何分级处,仅执行为了推导子图元而需要的计算。例如三个域阴影器(DS)实例(510A0、510A1和510A2)提供几何阴影器(GS)实例514A00的输入。因此,如果想要执行GS实例514A00并且如果DS实例510A0的输出未被存储在高速缓存中,但是可以从高速缓存读取DS实例510A1和510A2的输出,则执行DS实例510A0,但是不执行DS实例510A1和510A2。推导的子图元(例如516A00)然后如以上描述的在步骤S618中由HSR单元318和纹理化/阴影化单元320渲染。
如果在步骤S612中确定在高速缓存336中不存在在分级的级别n的充分图形数据项目(即如果确定分级的更高级别的用于推导子图元的一个或多个图形数据项目中的任何图形数据项目未被存储在高速缓存中),则该方法传递到步骤S620,在该步骤中,高速缓存控制器338确定是否存在在分级中的在级别n以上的另一级别。在图5中所示示例中,存在分级的六个级别(级别0至5),因此存在在级别2以上的级别。因此,该方法从步骤S620传递到步骤S622,在该步骤中递增n的值,然后该方法传递回到步骤S612。
在该迭代中,在步骤S612中,高速缓存控制器338确定级别3的一个或多个更多图形数据项目是否被存储在可以用于推导子图元的高速缓存中。如果它们是,则执行步骤S614至S618以从高速缓存336获取那些更多图形数据项目,对获取的图形数据项目执行必需处理级以推导子图元,并且渲染推导的子图元。在图5中所示示例中,关于该迭代的步骤S612至S618可以包括确定与顶点UV坐标509A结合的补块输出数据505A是否被存储在高速缓存336中。如果它们是,则从高速缓存获取与顶点UV坐标509A结合的补块输出数据505A,并且域阴影器实例510A0、510A1和510A2由变换和子图元推导逻辑330执行以产生镶嵌的图元512A0,然后几何阴影器实例514A00由变换和子图元推导逻辑330执行以推导子图元516A00。注意控制流中的子图元指示指示需要哪些过程以从与顶点UV坐标509A结合的补块输出数据505A推导子图元516A00,从而变换和子图元推导逻辑330可以确定它无需执行其它非必需处理步骤,比如执行域阴影器实例510A3或者几何阴影器实例514A01。推导的子图元(例如516A00)然后在步骤S618中照常由HSR单元318和纹理化/阴影化单元320渲染。
步骤S612至S622的迭代继续直至n被设置成这样的值,从而在步骤S620中确定没有在分级中的在级别n以上的级别。在参照图5描述的示例中,分级的最高级别是输入图形数据项目,而对于该级别,n=5。因此在该点处(例如在图5中所示示例中n=5),高速缓存控制器338在步骤S620中确定不能从在高速缓存中存储的图形数据项目推导子图元。该方法然后从步骤S620传递到步骤S624。
在步骤S624中,取回单元316从图形存储器322取回输入图形数据项目中的一个或多个输入图形数据项目用于推导子图元。该方法如以上描述的那样继续,从而在步骤S626中,变换和子图元推导逻辑330对取回的输入图形数据项目执行处理以推导子图元,并且在步骤S628中,子图元如以上描述的那样由HSR单元318和纹理化/阴影化单元320渲染。在步骤S626中,如在步骤S616中那样,在分级的任何级处仅执行需要的操作。
作为示例,参照图5,顶点阴影器5022和5023的输出可以已经在高速缓存336中,即使补块A 504A在光栅化阶段期间从未被处理,因为它们也属于补块B 504B。相同原理适用于510A1和510A2的域阴影器输出,因为它们属于图元512A0和512A1二者。高速缓存命中在图元或者补块覆盖许多相邻图块时更有可能。
图6中所示方法允许以高效方式从高速缓存336中存储的信息推导子图元。具体而言,来自高速缓存的可以用于推导子图元的最低级别数据从高速缓存获取和用于推导子图元。为了填充高速缓存336,图形数据项目可以在它们在光栅化逻辑306被取回或者推导时被存储在高速缓存中。例如由取回单元316从图形存储器322取回的输入图形数据项目被存储在高速缓存336中。另外,代表执行用于推导子图元(包括最终子图元本身)的一个或多个处理级的结果的图形数据项目(例如图5中所示控制点504和顶点UV坐标509或者图5中所示图元、比如512、516和520)可以在它们已经在光栅化逻辑306中被推导时被存储在高速缓存336中。相同图形数据项目可以用于推导不同子图元。例如图5中所示图元512A0可以用于推导四个图元516A0、516A01、516A02和520A010。因此,一旦已经推导图元512A0用于确定那些四个图元之一,可以从高速缓存336获取它用于推导那些四个图元中的其它三个图元。另外,一些图元可以至少部分地在多于一个图块内,因此如果已经推导它们用于渲染一个图块,则它们可以在另一图块被渲染时仍然可以被存储在高速缓存中,并且这样可以从高速缓存被获取而不是从输入图形数据项目再次推导它们。
图7示出包括高速缓存336和高速缓存控制器338的高速缓存***334。高速缓存控制器338包括被维护以指示高速缓存336的当前内容的一个或多个查找表。查找表包含关于图形流水线的不同级的信息并且可以或者可以不被实施在彼此相同的硬件结构中。如果共享硬件结构,则它在开始每遍渲染时由图形***分割以包含关于在使用中的图形流水线级的信息。例如如果未使用镶嵌,则可以保留更多查找表条目用于顶点阴影器级。高速缓存控制器338可以通过查询(多个)查找表来确定图形数据项目(例如图元或者控制点)是否被存储在高速缓存336中。例如高速缓存控制器338可以存储用于处理序列的每级的查找表。在图7中所示示例中,高速缓存控制器338包括四个查找表:顶点阴影器查找表702,该查找表指示相应顶点阴影器调用的结果是否被存储在高速缓存336中(而如果是则存储于何处);壳阴影器查找表704,该查找表指示相应壳阴影器调用的结果是否被存储在高速缓存336中(而如果是则存储于何处);域阴影器查找表706,该查找表指示相应域阴影器调用的结果是否被存储在高速缓存336中(而如果是则存储于何处);以及几何阴影器查找表708,该查找表指示相应几何阴影器调用的结果是否被存储在高速缓存336中(而如果是则存储于何处)。查找表允许搜寻单义地标识的执行的结果。例如在绘制调用编号、实例标识符和顶点的索引给定时,单义地标识顶点阴影器调用。相似概念适用于其它阴影器级,而来自不同阴影器的在高速缓存336中的条目由可以一般地称为“标签”的不同值集合标识。由每个阴影器级产生的输出量可以变化,并且高速缓存336可以向来自不同级的输出分配不同最大大小。查找表可以被实施为全关联或者集合关联。
高速缓存336可以称为缓冲器。高速缓存336可以包括用于存储来自分级的所有级别的数据的单个存储器池,例如图5中所示不同类型的图形数据项目(504、509、512、516和520)可以都被存储在高速缓存336中的相同存储器池中。这可以允许什么数据可以被存储在高速缓存336中的灵活性。在其它示例中,高速缓存336可以包括多个存储器池,其中存储器池中的不同存储器池被配置为存储来自分级的不同级别的数据。例如高速缓存336的第一存储器池可以被配置为存储从图形存储器322取回的输入图形数据项目,高速缓存336的第二存储器池可以被配置为存储补块输入控制点(例如504),高速缓存336的第三存储器池可以被配置为存储与顶点UV坐标(例如509)结合的补块输出数据(例如505),高速缓存336的第四存储器池可以被配置为存储域阴影器的输出(例如512),高速缓冲336的第五存储器池可以被配置为存储几何阴影器的输出(例如516),而高速缓存336的第六存储器池可以被配置为存储删减器的输出(例如520)。使用不同存储器池用于不同类型的数据允许根据数据的类型独立地从高速缓存336刷新或者逐出数据,并且它也阻止高速缓存336变成以一个类型的数据为主导,例如它阻止频繁地执行的阴影器级(比如域阴影器)从高速缓存336逐出更少频繁地执行但是潜在地计算成本高的级(比如壳阴影器)的数据。
高速缓存336具有通常地未大到足以同时存储在渲染图像期间使用的所有图形数据项目的有限大小。因此,在某点可能需要从高速缓存逐出数据项目以允许其它数据项目被存储在高速缓存中。高速缓存控制器338使用替换策略以确定将逐出哪些数据项目。在一些示例中,替换策略使得更可能再次使用的数据项目更少可能从高速缓存336被逐出。
几何处理逻辑304的图块化单元314可以确定每个图形数据项目覆盖的图块数目,并且可以基于每个图形数据项目覆盖的图块数目为该图形数据项目设置相应优先级。可以在控制流数据中包括(或者作为其它附带信息向光栅化逻辑306传递)优先级,从而光栅化逻辑306可以获取优先级。高速缓存控制器338然后基于图形数据项目的优先级,例如通过选择逐出有低优先级的一个或多个数据项目来从高速缓存336逐出图形数据项目。在已经渲染图块时,可以递减高速缓存336中的在渲染图块期间使用的图形数据项目的优先级,从而优先级反映相应图形数据项目将被使用的、仍然有待渲染的图块数目。
优选地按分级确定优先级,从而来自分级的更高级别数据项目往往具有更高优先级,因为它们往往覆盖比更低级别数据项目更大数目的图块。例如镶嵌的图元可能进覆盖一个图块,但是镶嵌的图块是其部分的补块可能覆盖若干图块。作为另一示例,与几何阴影器输出(例如图5中所示图元516)关联的优先级往往低于与域阴影器输出(例如图5中所示图元512)关联的优先级,后者又往往低于与壳阴影器输出(例如图5中所示补块输出数据505和顶点UV坐标509)关联的优先级,并且沿着分级向上以此类推。
在一些示例中,保持由流水线的最后级产生的包含顶点的图形数据项目驻留在高速缓存336中直至HSR和阴影化单元(318和320)已经处理依赖于它的所有图元。例如GS输出可以包含若干图元而DS输出可以由覆盖一个或多个图块的若干镶嵌生成的图元共享。图元可以覆盖一个或多个图块。一旦高速缓存336中的命中对于图形数据项目而出现,则在高速缓存336中保持图形数据项目直至对涉及图形数据项目的图元的处理由HSR和阴影化单元318和320完成。因此,策略用于防止查找表和高速缓存的替换策略逐出将由HSR和阴影化所使用的图形数据项目。这里描述不同策略的两个示例:锁定和参考计数。
在锁定方案中,对于一个或多个图形数据项目的每个集合,为由图形***同时处理的每个图块存储一个锁位置。这些锁位置可以被分组以形成针对一个或多个图形数据项目的该集合的锁定掩码。沿着光栅化逻辑306的图形流水线向下的每个图元处理单元(例如HSR单元318和纹理化/阴影化单元320)被配置为根据锁定掩码操作。在针对一个或多个图形数据项目的集合的掩码内的针对图块的锁位置在发送图形数据项目用于由流水线中的第一处理单元(例如HSR单元318)处理时被设置而在流水线中的图元处理单元(例如HSR单元318和纹理化/阴影化单元320二者)已经完成处理与集合中的一个或多个图形数据项目对应的一批图元时被清除。如果针对一个或多个图形数据项目的集合设置锁位置,则不能从高速缓存336和查找表702-708安全地逐出(多个)图形数据项目集合,因此防止逐出。然而,如果针对一个或多个图形数据项目的集合未设置锁位置,则可以从高速缓存336和查找表702-708安全地逐出(多个)图形数据项目集合。
在参考计数方案中,为一个或多个图形数据项目的多个集合中的每个集合维护参考计数。集合中的每个集合可以例如包括单个图形数据项目或者在高速缓存336中连续地分配的多个图形数据项目。参考计数指示在流水线中当前正在处理的子图元数目,这些子图元是一个或多个图形数据项目的相应集合的图形数据项目的后代(在分级中)。针对为了生成子图元而需要的所有图形数据项目的参考计数在沿着图形流水线向下发送子图元用于进一步处理时被递增而在子图元已经在光栅化阶段中由全图形流水线处理之后被递减。如果针对一个或多个图形数据项目的集合的参考计数为零,则可以从高速缓存336和查找表702-708安全地逐出集合中的(多个)图形数据项目。
在存储针对图元的数据时,它可以是图元的存储的顶点数据。如果图元被组织成图元条或者图元网,则图元可以共享顶点。针对图元的顶点数据可以被存储在图元块中,例如其中图元块可以存储上至最大数目的图元(例如上至64个图元)和/或其中图元块可以存储上至最大数目的顶点(例如上至32顶点)。索引化方案用于标识在图元块内从变换和子图元推导逻辑330输出的不同顶点。可以实施许多不同索引化方案用于标识在高速缓存336内的顶点,并且以下参照图8至10中所示示例描述索引化方案的四个示例,在该示例中实施几何阴影器和删减器(但是在该示例中未实施镶嵌)用于从原始图元推导子图元。与图块控制流数据结合的这些方案允许光栅化逻辑306标识在图元块中的为了推导具体图块中的子图元而需要的图形数据项目,并且允许高速缓存控制器338标识在高速缓存336中的图形数据项目。具体而言,存在在图8至10中的图元块内包含的表示为P0、P1和P2的三个原始图元(即三个输入图元)。图元P0和P2在光栅化阶段中当前正在渲染的图块中(除了来自P2的删减器生成的图元之一之外),但是图元P1不在当前正在渲染的图块中。用从0至6的标号在图8至10中标注输入图元的顶点。可见图元P0和P1共享两个顶点:顶点1和2。在该示例中,几何阴影器从输入图元中的每个输入图元产生两个图元(表示为GS0和GS1),而对于每对GS生成的图元,从0至3标注顶点。删减器对GS生成的图元操作以产生删减器图元。具体而言,在图8至10中所示示例中,对针对输入图元P0的GS生成的图元GS0操作的删减器的输出是单个图元;对针对输入图元P0的GS生成的图元GS1操作的删减器的输出是一对图元;对针对输入图元P1的GS生成的图元GS0操作的删减器的输出是单个图元;对针对输入图元P1的GS生成的图元GS1操作的删减器的输出是一对图元;对针对输入图元P2的GS生成的图元GS0操作的删减器的输出是一对图元(其中之一如用虚线指示的那样不在图块中);而对针对输入图元P2的GS生成的图元GS1操作的删减器的输出是一对图元。待渲染的最终子图元由删减器的输出提供。以下描述向在三个不同示例中的删减器输出的顶点应用的索引化。
例1:用于在图元块中的所有图元的索引映射:
在该索引化方案中,如图8中所示对于来自图元块中的所有原始图元的GS生成的图元和/或删减器生成的图元映射索引。GS和删减器生成的图元的最大数目可以限于64,因此每索引最多6位用于映射图元块中的所有唯一顶点。在该示例中,以依次方式(例如如图8中所示从0至21)对图元块中的所有最终顶点索引化。该索引化方案的优点是所有顶点在图元块中被唯一地映射。因此,顶点索引可以与图元块标识符(比如图元块LUT中的图元块ID)一起用于唯一地标识在高速缓存336中存储的用于在渲染多个图块时使用的顶点。换而言之,无论当前正在渲染的图块如何都可以标识顶点。该索引化方案的缺点是必须读取回对针对图元块中的所有图元(即使在当前正在渲染的图块中不存在的那些图元,像是如图8中所示P1以及针对P2的删减器生成的三角形之一)的最高级别图元的在图形存储器322中的顶点数据的指示,以便映射整个图元块中的顶点,并且这往往增加在***存储器与在GPU中的未变换几何取回单元316之间传送的数据量,这是缓慢的过程。
例2:针对图块中的图元的索引映射:
在该索引化方案中,如图9中所示对于仅来自图元块中的存在于当前图块中的原始图元的GS生成的图元和/或删减器生成的图元映射索引。GS和删减器生成的图元的最大数目可以限于64,因此每索引最多6位用于映射图元块中的所有唯一顶点。在该示例中,以依次方式(例如如图9中所示从0至14)对图元块中的存在于正在渲染的当前图块内的最终顶点索引化。索引未被指派给不存在于当前图块中的图元(例如从输入图元P1推导的图元)的顶点。该索引化方案的优点是取回单元316仅读取对针对存在于图块内的图元的最高级别图元的在图形存储器322中的顶点数据的指示,这些存在于图块内的图元在图9中是P0和P2(除了P2的删减器生成的三角形之一之外)。这意味着从存储器302传送的数据量没有浪费用于读取不在当前正在渲染的图块中的图元的索引。顶点索引可以与图元块标识符(比如图元块LUT中的图元块ID)一起用于唯一地标识在高速缓存336中存储的用于在渲染当前图块时使用的顶点。可以在高速缓存中存储不同图元块中的顶点数据,并且图元块ID可以用于在来自不同图元块的顶点之间区分。该索引化方案的缺点是不能跨不同图块共享在高速缓存336中存储的顶点数据。这是因为仅映射当前图块中的图元,并且由于来自图元块的不同图元可以在不同图块中可见,所以高速缓存336必须在图块之间被无效以保证对顶点的索引化正确。
例3:有分级信息的针对图块中的图元的索引映射:
在该索引化方案中,如图10中所示对于图元块中的在当前图块中可见的每个原始图元独立地为GS生成的图元和/或删减器生成的图元映射索引。在删减器生成图元时除了图元索引之外还需要针对原始图元的图元块中的图元索引和针对GS生成的图元的图元索引。例如可以给定针对在几何阴影器生成的图元GS0上执行的删减器的输出的第一顶点的分级索引为P0:GS0:0,该索引指示顶点是从本身是从P0推导的GSP0推导的图元的第一顶点。以该方式,在高速缓存336中与分级索引一起存储子图元中的每个子图元的顶点,该分级索引指示用于推导子图元的图形数据模型的分级。
如果不存在GS或者删减器生成的图元,则在高速缓存336中存储原始图元的索引值以指示原始索引。可以在图元块内的图元之间共享顶点。
如果存在删减器生成的图元,则如图10中所示在删减器生成的三角条以内映射顶点。除了映射的索引之外还存储原始图元索引以便唯一地标识顶点。
相似地,如果存在GS生成的图元,则如图10中所示在GS生成的三角条以内映射顶点。除了映射的索引之外还存储原始图元索引以便唯一地标识顶点。
在删减器从GS生成的图元生成图元时,如图10中所示在针对每个GS生成的图元的删减器生成的三角条以内映射顶点。除了映射的索引之外还存储原始图元索引和GS生成的图元索引以便唯一地标识顶点。
该索引化方案的优点是取回单元316仅读取对针对存在于图块内的图元的最高级别图元的在图形存储器322中的顶点数据的指示,这些存在于图块内的图元在图10中是P0和P2(除了P2的删减器生成的三角形之一之外)。这意味着从存储器302传送的数据量没有浪费用于读取不在当前正在渲染的图块中的图元的索引。顶点索引可以与图元块标识符(比如图元块LUT中的图元块ID)一起用于唯一地标识在高速缓存336中存储的用于在渲染当前图块时使用的顶点。可以在高速缓存中存储不同图元块中的顶点数据,并且图元块ID可以用于在来自不同图元块的顶点之间区分。另外,由于为图元块中的每个原始图元独立地映射索引,所以可以跨不同图块共享在高速缓存336中存储的顶点数据。
该索引化方案的缺点是在高速缓存336和LUT中需要更多索引信息。附加索引信息是用于原始图元索引(例如用于上至64个原始图元的6位中的每位)和用于GS生成的图元索引的索引信息(用于上至128个针对GS的GS生成的图元和用于删减器生成的图元的7位中的每位)。另外,可以在使用实例化时可选地存储实例ID。
例4:用于阴影器输出的自然映射:
在该方案中,在高速缓存336中存储的图形数据模型不是个别顶点或控制点。取而代之,在高速缓存336中存储的图形数据项目是阴影器调用或者删减器调用的输出(如果实施方式判决高速缓存删减器生成的数据)。因此,输出上至256个顶点的几何阴影器仅向单个数据项目写入。相似地,输出补块恒定数据(例如镶嵌因子)和上至32个控制点的壳阴影器仅向单个数据项目写入。图形数据项目因此通过使用在图形流水线中已经可用的信息单义地标识阴影器调用或者删减器调来被加标签。例如可以获得针对每级的唯一“标签”(或者“索引”)如下:
1.VS:绘制调用ID、实例ID、顶点ID。
2.HS:绘制调用ID、实例ID、图元ID。
3.DS:绘制调用ID、实例ID、图元ID、域索引。
4.GS:绘制调用ID、实例ID、图元ID、镶嵌的图元索引(对于给定的输入图元;如果未使用镶嵌则为0)和GS实例ID。
5.删减器:绘制调用ID、实例ID、图元ID、镶嵌的图元索引、GS实例ID和GS图元索引(对于给定的输入或者镶嵌的图元:如果未使用GS则为0)。
标签可以在高速缓存控制器的查找表中用于快速地搜索(例如在内容关联存储器中)图形数据项目。该方案的缺点是它使用若干位用于标签(即用于索引)。然而,为了缓解该问题,索引重新映射方案可以用于将ID中的一个或多个ID组合在一起,例如绘制调用ID和实例ID可以被组合成单个值。例如取代使用N位用于绘制调用ID和M位用于实例ID,K位可以足以跨绘制调用标识全局实例ID,其中K<N+M。
该方案具有三个主要优点。
1.对阴影器输出而非个别顶点和控制点加标签减少需要的查找表条目数目。
2.跨图块和跨图元块自然地共享标签。由于“原始图元”(即图形存储器322中的在分级中没有父图形数据项目的图元)可以生成数以千计的镶嵌生成的图元,允许原始图元跨越若干图元块的实施方式是实际的。利用该方案,可以跨图元块自然地共享顶点和壳阴影器输出,因为图元块ID未用于生成索引或者标签。
3.生成标签和解释标签的逻辑是简单的,因为信息(例如绘制调用ID、实例ID、顶点ID、图元ID、域索引、镶嵌图元索引和几何阴影器图元索引)在图形流水线中自然地可用。
在以上描述的示例中,输入图形数据项目(其可以例如是描述补块的图元或者控制点)描述在待渲染的3D场景内的几何结构,其中渲染的子图元用于在形成场景的渲染的图像时使用。在其它示例中,渲染的子图元可以用于除了形成场景的渲染的图像之外的用途。例如输入图形数据项目可以描述纹理,而渲染的子图元可以用于在形成渲染的图像时使用和后续地在其它渲染器中用作纹理。
在以上描述的示例中,在处理流水线中在HSR单元318和纹理化/阴影化单元320之前在光栅化逻辑306中实施高速缓存。在一些其它示例中,例如在如图11中所示***1100中,可以与相应两个高速缓存子***3341和3342一起在两个子***3301和3302中实施变换和子图元推导逻辑330:在处理流水线中在HSR单元318之前实施第一子***(3301和3341)而在HSR单元318之后(但是在纹理化/阴影化单元320之前)实施第二子***(3302和3342)。图11中所示具有与图3中的标号相同的标号的部件以相同方式操作。第一高速缓存子***3341包括第一高速缓存3361和第一高速缓存控制器3381;而第二高速缓存子***3342包括第二高速缓存3362和第二高速缓存控制器3382。在这些示例中,第一子***(3301和3341)可以被配置为如以上描述的那样仅对图形数据项目的位置数据操作并且在第一子***的分级高速缓存3361中存储子图元推导的结果。HSR单元318仅对位置数据操作,因此无需在HSR单元318的操作之前变换非位置属性。对于从HSR单元318输出(即未被HSR单元318去除)的图形数据项目,第二子***(3302和3342)对非位置属性(和可选地对位置属性)操作,其中可以如以上描述的那样在第二子***的分级高速缓存3362中存储子图元推导的结果。以该方式,仅为未被HSR挑选的图元计算非位置属性。在第二子***(3302和3342)中,可以再次计算或者从第一子***的高速缓存3361读取位置。
在更多示例中,例如在如图12中所示***1200中,可以在HSR单元318之后、但是在纹理化/阴影化单元32之前实施变换和子图元推导逻辑3303以及高速缓存***3343。在这些示例中,几何处理逻辑1204与几何处理逻辑304相似、但是可以发送针对图元和子图元的变换的位置数据用于与控制流一起在存储器302中存储(例如在已变换位置缓冲器1224中)。取回单元1216与取回单元316相似、但是可以取回针对图元的变换的位置数据,该图元由针对特定图块的控制流数据指示为在特定图块中。HSR单元318可以对位置数据操作用于执行隐藏表面去除。从HSR单元318输出的图元(即未被HSR挑选的图元)被传递到高速缓存***3343,该高速缓存***包括高速缓存3363和高速缓存控制器3383,并且被配置为存储已经变换的图元的非位置属性。高速缓存***3343以与以上描述的分级高速缓存***334相似的方式操作,并且可以获取从HSR单元318输出的图元的变换的非位置属性,并且向纹理化/阴影化单元320传递那些获取的属性。如果从HSR单元318输出的图元的变换的非位置属性未被存储在高速缓存3363中,则变换和子图元推导逻辑3303推导图元的变换的非位置属性,并且向纹理化/阴影化单元320提供它们(和也向高速缓存***3343提供它们用于在高速缓存3363中存储用于后续使用)。变换和子图元推导逻辑3303可以计算针对图元的位置数据或者可以使用从存储器302取回的位置数据。分级高速缓存***3343可以根据以上关于高速缓存***334而描述的原理操作。
图13示出其中可以实施图形处理***300的计算机***。计算机***包括CPU1302、GPU 1304、存储器302和其它设备1306、比如显示器1308、扬声器1310和相机1312。在GPU 1304上实施几何处理逻辑304和光栅化逻辑306。在其它示例中,可以在CPU 1302上实施几何处理逻辑304和光栅化逻辑306。计算机***的部件可以经由通信总线1314相互通信。
在图中示出这里描述的***为包括多个功能块。这仅为示意而未旨在于限定在这样的实体的不同逻辑单元之间的严格划分。可以用任何适当方式提供每个功能块。将理解这里描述为由图形处理***形成的中间值无需在任何点处由图形处理***物理地生成,而可以仅代表逻辑值,这些逻辑值方便地描述图形处理***在它的输入与输出之间执行的处理。
可以在集成电路上的硬件中实现这里描述的图形处理***。这里描述的图形处理***可以被配置为执行这里描述的方法中的任何方法。一般而言,可以在软件、固件、硬件(例如固定逻辑电路装置)或者其任何组合中实施以上描述的功能、方法、技术或者部件中的任何功能、方法、技术或者部件。术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”可以在这里用于一般地代表软件、固件、硬件或者其任何组合。在软件实施方式的情况下,模块、功能、部件、元件、单元、块或者逻辑代表在处理器上被执行时执行指定的任务的程序代码。这里描述的算法和方法可以通过一个或多个处理器执行使(多个)处理器执行算法/方法的代码来执行。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存、硬盘存储器和可以使用磁、光学和其它技术以存储指令或者其它数据并且可以由机器存取的其它存储器设备。
术语计算机程序代码和计算机可读指令如这里所用是指用于处理器的任何种类的可执行代码,包括以机器语言、解释语言或者脚本语言表达的代码。可执行代码包括二进制代码、机器代码、字节代码、定义集成电路的代码(比如硬件描述语言或者网表)和以编程语言代码(比如C、Java或者OpenCL)表达的代码。可执行代码可以例如是任何种类的软件、固件、脚本、模块或者库,该软件、固件、脚本、模块或者库在虚拟机或者其它软件环境被适当地执行、处理、解释、编译、执行时使支持可执行代码的计算机***的处理器执行由代码指定的任务。
处理器、计算机或者计算机***可以是有使得它可以执行指令的处理能力的任何种类的设备、机器或者专用电路或者其汇集或者部分。处理器可以是任何种类的通用或者专用处理器、比如CPU、GPU、片上***、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)等。计算机或者计算机***可以包括一个或多个处理器。
也旨在于涵盖对如这里描述的硬件配置进行定义的软件,比如如用于设计集成电路或者用于配置可编程芯片以执行希望的功能的HDL(硬件描述语言)软件。也就是说,可以提供一种计算机可读存储介质,该计算机可读存储介质具有在其上编码的、形式为集成电路定义数据集的计算机可读程序代码,该集成电路定义数据集在集成电路制造***中被处理(即运行)时配置该***以制造图形处理***,该图形处理***被配置为执行这里描述的方法中的任何方法,或者配置该***以制造包括这里描述的任何装置的图形处理***。集成电路定义数据集可以例如是集成电路描述。
因此,可以提供一种在集成电路制造***处制造如这里描述的图形处理***的方法。另外,可以提供一种集成电路定义数据集,该集成电路定义数据集在集成电路制造***中被处理时使制造图形处理***的方法被执行。
一种集成电路定义数据集可以是以计算机代码的形式,例如网表、用于配置可编程芯片的代码、在任一级定义集成电路的硬件描述语言、包括寄存器传送级(RTL)代码、比如Verilog或者VHDL的高级电路表示、和比如OASIS(RTM)和GDSII的低级电路表示。可以在计算机***处处理逻辑地定义集成电路(比如RTL)的更高级表示,该计算机***被配置用于在软件环境的情境中生成集成电路的制造定义,该软件环境包括电路元件的定义和如下规则,这些规则用于组合那些元件以便生成如由该表示定义的集成电路的制造定义。如软件在计算机***执行以便定义机器的情况通常有的那样,可能需要一个或多个中间用户步骤(例如提供命令、变量等),以便被配置为生成集成电路的制造定义的计算机***执行定义集成电路的代码,以便生成该集成电路的制造定义。
现在将关于图14描述在集成电路制造***处处理集成电路定义数据集以便配置该***制造图形处理***的示例。
图14示出被配置为制造如在这里的示例中的任一示例中描述的图形处理***的集成电路(IC)制造***1402的示例。具体而言,IC制造***1402包括布局处理***1404和集成电路生成***1406。IC制造***1402被配置为接收IC定义数据集(例如定义如在这里的示例中的任一示例中描述的图形处理***)、处理IC定义数据集并且根据IC定义数据集生成IC(例如该IC实现如在这里的示例中的任一示例中描述的图形处理***)。对IC定义数据集的处理配置IC制造***1402以制造集成电路,该集成电路实现如在这里的示例中的任一示例中描述的图形处理***。
布局处理***1404被配置为接收和处理IC定义数据集以确定电路布局。从IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以包括合成RTL代码以例如按照逻辑部件(例如NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)确定待生成的电路的门级表示。可以通过确定针对逻辑部件的位置信息来从电路的门级表示确定电路布局。这可以被自动地完成或者有用户参与以便优化电路布局来完成。在布局处理***1404已经确定电路布局时,它可以向IC生成***1406输出电路布局定义。电路布局定义可以例如是电路布局描述。
IC生成***1406如在本领域中所知根据电路布局定义生成IC。例如IC生成***1406可以实施半导体器件制造过程以生成IC,这可以涉及到光刻和化学处理步骤的多步骤序列,在该序列中在由半导体材料制成的晶片上逐渐地创建电子电路。电路布局定义可以是以可以在光刻工艺中用于根据电路定义生成IC的掩码的形式。备选地,向IC生成***1406提供的电路布局定义可以是以IC生成***1406可以用于形成用于在生成IC时使用的适当掩码的计算机可读代码的形式。
由IC制造***1402执行的不同过程可以都在一个位置中例如由一方实施。备选地,IC制造***1402可以是分布式***,从而过程中的一些过程可以在不同位置处执行和可以由不同方执行。例如可以在不同位置中和/或由不同方执行以下级中的一些级:(i)合成代表IC定义数据集的RTL代码以形成待生成的电路的门级表示,(ii)基于门级表示生成电路布局,(iii)根据电路布局形成掩码,以及(iv)使用掩码来制造集成电路。
在其它示例中,在集成电路制造***处处理集成电路定义数据集可以配置该***以制造图形处理***而不处理IC定义数据集以便确定电路布局。例如集成电路定义数据集可以定义可重配置处理器(比如FPGA)的配置,并且处理该数据集可以配置IC制造***以生成具有该定义的配置的可重配置处理器(例如通过向FPGA加载配置数据)。
在一些实施例中,一种集成电路制造定义数据集可以在集成电路制造***中被处理时使集成电路制造***生成如这里描述的器件。例如集成电路制造定义数据集用以上关于图14描述的方式配置集成电路制造***可以使如这里描述的器件被制造。
在一些示例中,一种集成电路定义数据集可以包括在数据集处定义的硬件上或者与在数据集处定义的硬件组合运行的软件。在图14中所示示例中,IC生成***还可以由集成电路定义数据集配置以在制造集成电路时根据在集成电路定义数据集处定义的程序代码将固件加载到该集成电路上或者以别的方式向集成电路提供程序代码用于与集成电路一起使用。
申请人由此单独地公开这里描述的每个个别特征和两个或者更多这样的特征的任何组合,其中这样的特征或者组合能够按照本领域技术人员的公知常识基于作为整体的本说明书来执行,无论这样的特征或者特征组合是否解决这里公开的任何问题。鉴于前文描述,本领域技术人员将清楚可以在本发明的范围内做出各种修改。
Claims (21)
1.一种被配置为使用被细分成多个图块的渲染空间的图形处理***,所述图形处理***包括:
几何处理逻辑,包括:
几何变换和子图元逻辑,被配置为接收输入图形数据项目的图形数据,以及确定从所述输入图形数据项目推导的一个或多个子图元在所述渲染空间内的变换的位置;以及
图块化单元,被配置为针对所述图块中的每个图块生成控制流数据,所述控制流数据包括:(i)将被用于渲染所述图块的输入图形数据项目的标识符,以及(ii)用以指示所述子图元中的哪些子图元将被用于渲染所述图块的子图元指示;以及
光栅化逻辑,被配置为针对所述图块中的每个图块生成渲染输出,所述光栅化逻辑包括:
取回单元,被配置为取回由针对特定图块的所述控制流数据中的所述标识符所标识的输入图形数据项目;
光栅化变换和子图元推导逻辑,被配置为从取回的所述输入图形数据项目推导在所述渲染空间内的变换的子图元,其中推导的所述子图元将被用于渲染所述特定图块,并且其中所述子图元根据针对所述特定图块的所述控制流数据中的所述子图元指示而推导;以及
一个或多个处理单元,用于渲染推导的所述子图元,以由此针对所述特定图块生成渲染输出。
2.根据权利要求1所述的图形处理***,其中所述图形数据项目中的至少一些图形数据项目是图元。
3.根据权利要求1所述的图形处理***,其中所述图形数据项目中的一些图形数据项目是描述补块的控制点,所述补块将被镶嵌以生成多个镶嵌的图元。
4.根据任一前述权利要求所述的图形处理***,其中针对图块的所述控制流数据中的所述子图元指示指示如何从所述输入图形数据项目推导将用于渲染所述图块的所述子图元。
5.根据任一前述权利要求所述的图形处理***,其中所述子图元指示被表示为一个或多个掩码。
6.根据任一前述权利要求所述的图形处理***,其中所述子图元指示中的一个或多个子图元指示是分级索引,其中针对特定子图元的分级索引指示在分级的一个或多个不同级别中的每个级别处的一个或多个图形数据项目中的哪些图形数据项目用于在推导所述特定子图元时使用。
7.根据权利要求6所述的图形处理***,其中所述光栅化变换和子图元推导逻辑被配置为使用针对所述特定子图元的所述分级索引以标识所述分级中的将用于推导所述特定子图元的一个或多个图形数据项目。
8.根据权利要求7所述的图形处理***,其中所述光栅化逻辑还包括:
高速缓存,被配置为存储推导的子图元;以及
高速缓存控制器,被配置为:
接收针对图块的所述控制流数据;
获取被存储在所述高速缓存中并且由针对所述图块的所述控制流数据所指示的子图元;以及
向所述一个或多个处理单元提供获取的所述子图元以用于渲染。
9.根据权利要求7或者8所述的图形处理***,其中所述光栅化变换和子图元推导逻辑被配置为确定所述分级的经标识的所述图形数据项目中的一个或多个图形数据项目用于在推导所述特定子图元时使用。
10.根据权利要求6至9中的任一权利要求所述的图形处理***,其中所述子图元中的每个子图元是经由一个或多个处理级的序列从一个或多个输入图形数据项目可推导的,并且其中所述分级包括代表所述序列的处理级的结果的一个或多个图形数据项目。
11.根据权利要求10所述的图形处理***,其中所述子图元是所述分级的叶节点。
12.根据权利要求6至11中的任一权利要求所述的图形处理***,其中所述光栅化变换和子图元推导逻辑被配置为通过根据由针对所述特定子图元的所述分级索引所标识的所述图形数据项目而有选择地执行用于推导图形数据项目的过程来推导所述特定子图元。
13.根据任一前述权利要求所述的图形处理***,其中所述输入图形数据项目的所述图形数据是用于在计算所述输入图形数据项目的所述位置时使用的数据。
14.根据任一前述权利要求所述的图形处理***,其中所述一个或多个处理单元包括:
隐藏表面去除单元,被配置为去除隐藏的图元片段;以及
纹理化/阴影化单元,被配置为向图元片段应用纹理化和阴影化之一或者二者。
15.根据任一前述权利要求所述的图形处理***,其中所述光栅化逻辑还包括高速缓存,所述高速缓存被配置为存储推导的所述子图元以用于由所述一个或多个处理单元使用而用于针对所述图块生成所述渲染输出,并且其中推导的所述子图元中的每个子图元的顶点与分级索引一起被存储在所述高速缓存中,所述分级索引指示用于推导所述子图元的图形数据项目的分级。
16.根据任一前述权利要求所述的图形处理***,还包括存储器,其中所述几何处理逻辑被配置为使得由所述图块化单元生成的所述控制流数据被存储在所述存储器中,并且其中所述取回单元被配置为从所述存储器取回针对所述特定图块的所述控制流数据。
17.根据任一前述权利要求所述的图形处理***,其中在所述几何变换逻辑处接收的所述输入图形数据项目的所述图形数据来自图形存储器,并且其中所述取回单元被配置为从所述图形存储器取回输入图形数据项目。
18.一种在被配置为使用被细分成多个图块的渲染空间的图形处理***中生成渲染输出的方法,所述方法包括几何处理阶段和光栅化阶段,
其中所述几何处理阶段包括:
接收输入图形数据项目的图形数据;
确定从所述输入图形数据项目推导的一个或多个子图元在所述渲染空间内的变换的位置;以及
对于所述图块中的每个图块生成控制流数据,所述控制流数据包括:(i)将被用于渲染所述图块的输入图形数据项目的标识符,以及(ii)用以指示所述子图元中的哪些子图元将被用于渲染所述图块的子图元指示;以及
其中所述光栅化阶段包括,对于所述图块中的每个图块:
取回由针对特定图块的所述控制流数据中的所述标识符所标识的输入图形数据项目;
使用取回的所述输入图形数据项目以推导在所述渲染空间内的变换的子图元,其中推导的所述子图元将被用于渲染所述特定图块,并且其中所述子图元根据针对所述特定图块的所述控制流数据中的所述子图元指示而推导;以及
渲染推导的所述子图元,以由此针对所述特定图块生成渲染输出。
19.根据权利要求18所述的方法,其中所述推导所述子图元包括通过执行(i)变换到所述渲染空间中、(ii)删减、(iii)几何阴影化和(iv)镶嵌中的一个或多个来从所述输入图形数据项目推导所述子图元。
20.根据权利要求18或者19所述的方法,其中如果输入图形数据项目在被变换时至少部分地在图块内,则所述输入图形数据项目将用于渲染所述图块,以及其中如果子图元至少部分地在图块内,则所述子图元将用于渲染所述图块。
21.根据权利要求18至20中的任一权利要求所述的方法,其中:
所述输入图形数据项目描述在待渲染的3D场景内的几何结构,并且其中所述渲染输出是所述场景的经渲染的图像;或者
所述输入图形数据项目描述纹理,并且其中所述渲染输出图像在后续渲染中被用作纹理。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1515889.2 | 2015-09-08 | ||
GB1515889.2A GB2542133B (en) | 2015-09-08 | 2015-09-08 | Graphics processing method and system for processing sub-primitives |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106504181A true CN106504181A (zh) | 2017-03-15 |
CN106504181B CN106504181B (zh) | 2021-12-21 |
Family
ID=54345930
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610807792.2A Active CN106504181B (zh) | 2015-09-08 | 2016-09-07 | 用于处理子图元的图形处理方法和*** |
Country Status (4)
Country | Link |
---|---|
US (1) | US10249085B2 (zh) |
EP (1) | EP3142075B1 (zh) |
CN (1) | CN106504181B (zh) |
GB (1) | GB2542133B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111429556A (zh) * | 2018-12-21 | 2020-07-17 | 畅想科技有限公司 | 图形处理***中的基于基元块的光栅化 |
CN111489282A (zh) * | 2019-01-29 | 2020-08-04 | 畅想科技有限公司 | 用于存储未变换图元块的存储器 |
CN112017104A (zh) * | 2019-05-30 | 2020-12-01 | 畅想科技有限公司 | 图形处理***中的功能安全 |
CN113256764A (zh) * | 2021-06-02 | 2021-08-13 | 南京芯瞳半导体技术有限公司 | 一种光栅化装置、方法及计算机存储介质 |
CN113778281A (zh) * | 2021-09-16 | 2021-12-10 | 联想(北京)有限公司 | 辅助信息生成方法、装置及电子设备和存储介质 |
CN116860782A (zh) * | 2022-03-28 | 2023-10-10 | 象帝先计算技术(重庆)有限公司 | 图形处理器、***、装置、设备及方法 |
CN116957898A (zh) * | 2022-04-19 | 2023-10-27 | 象帝先计算技术(重庆)有限公司 | 图形处理器、***、方法、电子装置及电子设备 |
Families Citing this family (15)
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 |
US10026145B2 (en) * | 2016-12-13 | 2018-07-17 | Qualcomm Incorporated | Resource sharing on shader processor of GPU |
US10235811B2 (en) | 2016-12-29 | 2019-03-19 | Intel Corporation | Replicating primitives across multiple viewports |
GB2560709B (en) | 2017-03-14 | 2021-02-24 | Imagination Tech Ltd | Graphics processing method and system for processing sub-primitives |
GB2572620C (en) * | 2018-04-05 | 2021-10-20 | Imagination Tech Ltd | Accessing Primitive Data |
US10672185B2 (en) | 2018-07-13 | 2020-06-02 | Nvidia Corporation | Multi-rate shading using replayed screen space tiles |
US10628910B2 (en) | 2018-09-24 | 2020-04-21 | Intel Corporation | Vertex shader with primitive replication |
GB2579592B (en) * | 2018-12-04 | 2021-03-24 | Imagination Tech Ltd | Tile Region Protection |
CN111353928A (zh) | 2018-12-21 | 2020-06-30 | 畅想科技有限公司 | 用于图形处理***的经过变换的几何结构数据高速缓存 |
GB2580166B (en) * | 2018-12-21 | 2021-06-30 | Imagination Tech Ltd | Primitive block-based rasterization in graphics processing systems |
GB2591802B (en) | 2020-02-07 | 2022-03-23 | Imagination Tech Ltd | Graphics processing method and system for rendering items of geometry based on their size |
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 |
CN113256479A (zh) | 2020-02-13 | 2021-08-13 | 畅想科技有限公司 | 用于在图形处理***中平铺图元的方法和平铺引擎 |
EP4116932A1 (en) * | 2021-06-30 | 2023-01-11 | Imagination Technologies Limited | Graphics processing system and method of rendering |
CN115100022B (zh) * | 2022-08-23 | 2022-12-06 | 芯动微电子科技(珠海)有限公司 | 图形处理方法及*** |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101118644A (zh) * | 2006-08-01 | 2008-02-06 | 深圳安凯微电子技术有限公司 | 一种图形加速器及图形处理方法 |
CN101452533A (zh) * | 2007-12-07 | 2009-06-10 | 佳能株式会社 | 描绘装置、描绘方法 |
CN101937558A (zh) * | 2010-08-10 | 2011-01-05 | 浙江大学 | 一种基于图像内容的标签添加方法 |
CN102255873A (zh) * | 2010-05-21 | 2011-11-23 | 南京师范大学 | 基于有序点集像素无损压缩的矢量数据高效传输方法 |
WO2014068400A2 (en) * | 2012-11-02 | 2014-05-08 | Imagination Technologies, Ltd. | On demand geometry and acceleration structure creation |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6943797B2 (en) * | 2003-06-30 | 2005-09-13 | Sun Microsystems, Inc. | Early primitive assembly and screen-space culling for multiple chip graphics system |
GB2439129B (en) * | 2006-06-12 | 2008-11-12 | Imagination Tech Ltd | Parameter compaction in a tile based rendering system |
GB2458488C (en) | 2008-03-19 | 2018-09-12 | Imagination Tech Ltd | Untransformed display lists in a tile based rendering system |
GB201007348D0 (en) * | 2010-04-30 | 2010-06-16 | Imagination Tech Ltd | Programmable tessellation in a tile based rendering system |
GB2500284B (en) * | 2012-09-12 | 2014-04-30 | Imagination Tech Ltd | Tile based computer graphics |
US9123168B2 (en) * | 2013-01-30 | 2015-09-01 | Qualcomm Incorporated | Output ordering of domain coordinates for tessellation |
-
2015
- 2015-09-08 GB GB1515889.2A patent/GB2542133B/en active Active
-
2016
- 2016-08-31 EP EP16186711.4A patent/EP3142075B1/en active Active
- 2016-09-07 CN CN201610807792.2A patent/CN106504181B/zh active Active
- 2016-09-08 US US15/259,299 patent/US10249085B2/en active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101118644A (zh) * | 2006-08-01 | 2008-02-06 | 深圳安凯微电子技术有限公司 | 一种图形加速器及图形处理方法 |
CN101452533A (zh) * | 2007-12-07 | 2009-06-10 | 佳能株式会社 | 描绘装置、描绘方法 |
CN102255873A (zh) * | 2010-05-21 | 2011-11-23 | 南京师范大学 | 基于有序点集像素无损压缩的矢量数据高效传输方法 |
CN101937558A (zh) * | 2010-08-10 | 2011-01-05 | 浙江大学 | 一种基于图像内容的标签添加方法 |
WO2014068400A2 (en) * | 2012-11-02 | 2014-05-08 | Imagination Technologies, Ltd. | On demand geometry and acceleration structure creation |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111429556B (zh) * | 2018-12-21 | 2023-03-24 | 畅想科技有限公司 | 图形处理***中的基于基元块的光栅化 |
CN111429556A (zh) * | 2018-12-21 | 2020-07-17 | 畅想科技有限公司 | 图形处理***中的基于基元块的光栅化 |
CN111489282A (zh) * | 2019-01-29 | 2020-08-04 | 畅想科技有限公司 | 用于存储未变换图元块的存储器 |
CN111508056A (zh) * | 2019-01-29 | 2020-08-07 | 畅想科技有限公司 | 利用扩展变换级掩码的图形处理*** |
CN111489282B (zh) * | 2019-01-29 | 2023-10-31 | 畅想科技有限公司 | 用于存储未变换图元块的存储器 |
US11640648B2 (en) | 2019-01-29 | 2023-05-02 | Imagination Technologies Limited | Graphics processing systems with expansion transformation stage masks |
CN111508056B (zh) * | 2019-01-29 | 2023-04-18 | 畅想科技有限公司 | 利用扩展变换级掩码的图形处理*** |
CN112017104A (zh) * | 2019-05-30 | 2020-12-01 | 畅想科技有限公司 | 图形处理***中的功能安全 |
CN112017104B (zh) * | 2019-05-30 | 2022-06-14 | 畅想科技有限公司 | 用于执行基于图块的渲染的方法和图形处理*** |
CN113256764A (zh) * | 2021-06-02 | 2021-08-13 | 南京芯瞳半导体技术有限公司 | 一种光栅化装置、方法及计算机存储介质 |
CN113778281A (zh) * | 2021-09-16 | 2021-12-10 | 联想(北京)有限公司 | 辅助信息生成方法、装置及电子设备和存储介质 |
CN113778281B (zh) * | 2021-09-16 | 2024-06-21 | 联想(北京)有限公司 | 辅助信息生成方法、装置及电子设备和存储介质 |
CN116860782A (zh) * | 2022-03-28 | 2023-10-10 | 象帝先计算技术(重庆)有限公司 | 图形处理器、***、装置、设备及方法 |
CN116957898A (zh) * | 2022-04-19 | 2023-10-27 | 象帝先计算技术(重庆)有限公司 | 图形处理器、***、方法、电子装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
EP3142075B1 (en) | 2019-01-02 |
GB2542133B (en) | 2020-05-27 |
CN106504181B (zh) | 2021-12-21 |
GB2542133A (en) | 2017-03-15 |
EP3142075A1 (en) | 2017-03-15 |
US20170069132A1 (en) | 2017-03-09 |
GB201515889D0 (en) | 2015-10-21 |
US10249085B2 (en) | 2019-04-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106504181A (zh) | 用于处理子图元的图形处理方法和*** | |
CN106504184A (zh) | 用于处理子图元的图形处理方法和*** | |
US11715175B2 (en) | Hierarchical tiling in a graphics processing system using chain sorting of primitives | |
CN104103084B (zh) | 基于图块的图形***以及其中的处理方法、装置和介质 | |
US11823324B2 (en) | Graphics processing method and system for processing sub-primitives | |
CN106897143A (zh) | 对图形处理***中的处理引擎的区片分配 | |
CN107169916B (zh) | 用于simd处理的任务组合 | |
US20210383598A1 (en) | Transformed Geometry Data Cache for Graphics Processing Systems | |
US11610358B2 (en) | Data structures, methods and tiling engines for hierarchically storing tiling information in a graphics processing system | |
CN105809728A (zh) | 在图形处理单元中渲染场景的视图 | |
US11640648B2 (en) | Graphics processing systems with expansion transformation stage masks | |
EP3866118B1 (en) | Methods and tiling engines for tiling primitives in a graphics processing system | |
CN109979000A (zh) | 多视图图元块 | |
CN114723598B (zh) | 图形处理***和方法 | |
GB2580166A (en) | Primitive block-based rasterization in graphics processing systems | |
GB2592046A (en) | Methods and tiling engines for tiling primitives in a graphics processing system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |