用于SIMD处理的任务组合的制作方法

文档序号:11251834阅读:375来源:国知局
用于SIMD处理的任务组合的制造方法与工艺



背景技术:

图形处理系统通常被配置成例如从在计算机系统上运行的应用接收图形数据,并且渲染图形数据以提供渲染输出。例如,被提供给图形处理系统的图形数据可以描述要被渲染的三维(3d)场景内的几何形状,并且渲染输出可以是场景的经渲染图像。一些图形处理系统(其可以被称为“基于图块的”图形处理系统)使用被细分为多个图块的渲染空间。“图块”是渲染空间的区域,并且可以具有任何合适的形状,但通常是矩形(其中术语“矩形”包括正方形)。如本领域中已知的,将渲染空间细分为图块有很多好处。例如,将渲染空间细分为图块允许以逐图块方式来渲染图像(即,针对每个图块执行渲染过程),其中针对图块的图形数据可以在图块的渲染期间被临时存储在“片上”,从而减少在系统存储器与实现图形处理系统的图形处理单元(gpu)的芯片之间传送的数据量。

基于图块的图形处理系统通常以两个阶段操作:几何处理阶段和光栅化阶段。在几何处理阶段中,分析用于渲染的图形数据以针对每个图块确定哪些图形数据项存在于该图块内。然后,在光栅化阶段中,可以通过处理被确定为存在于该图块内的这些图形数据项来渲染图块(而不需要处理在几何处理阶段中被确定为不存在于该特定图块内的图形数据项)。

图1示出了基于图块的图形处理系统100的示例。系统100包括存储器102、几何处理逻辑104和光栅化逻辑106。几何处理逻辑104和光栅化逻辑106可以在gpu上实现,并且可以共享一些处理资源,如本领域中已知的。几何处理逻辑104包括几何取回单元108、几何变换逻辑110、剔除/裁剪单元112和图块化(tiling)单元114。光栅化逻辑106包括参数取回单元116、隐藏表面去除(hsr)单元118和纹理化/着色单元120。存储器102可以被实现为一个或多个物理存储器块,并且包括图形存储器122、经变换参数存储器124、控制流存储器126和帧缓冲器128。

几何处理逻辑104执行几何处理阶段,在几何处理阶段中,几何取回单元108从图形存储器122取回几何数据并且将取回的数据传递给变换逻辑110。几何数据包括描述要被渲染的几何的图形数据项。例如,图形数据项可以表示几何形状,几何形状描述场景中的结构的表面,并且被称为“图元”。常见的图元形状是三角形,但是图元可以是其他2d形状并且也可以是线或点。对象可以由一个或多个这样的图元组成。对象可以由数千甚至数百万个这样的图元组成。场景通常包含很多对象。图形数据项中的一些可以是控制点,控制点描述要被镶嵌(tessellate)以生成多个镶嵌的图元的补片(patch)。

变换逻辑110将几何数据变换到渲染空间中,并且可以应用本领域中已知的照明/属性处理。所得到的数据被传递给剔除/裁剪单元112,剔除/裁剪单元112剔除和/或裁剪落在视见平截头体外部的任何几何形状。所得到的经变换几何数据项(例如,图元)被提供给图块化单元114,并且还被提供给存储器102用于存储在经变换参数存储器124中。图块化单元114为渲染空间的每个图块生成控制流数据,其中针对图块的控制流数据包括要用于渲染图块的经变换图元(即,至少部分位于图块内的经变换图元)的标识符。针对图块的控制流数据可以被称为针对图块的“显示列表”或“对象列表”。针对图块的控制流数据被提供给存储器102用于存储在控制流存储器126中。因此,在几何处理阶段之后,将要被渲染的经变换图元存储在经变换参数存储器124中,并且将指示经变换图元中的哪些存在于每个图块中的控制流数据存储在控制流存储器126中。

在光栅化阶段中,光栅化逻辑106以逐图块的方式渲染图元。参数取回单元116接收针对图块的控制流数据,并且从经变换参数存储器124中取回所指示的经变换图元,该经变换图元如由针对图块的控制流数据所指示的。所取回的经变换图元被提供给隐藏表面去除(hsr)单元118,hsr单元118去除被隐藏(例如被其他图元片元隐藏)的图元片元。执行隐藏表面去除的方法是本领域中已知的。术语“片元”是指在采样点处的图元的样本,其将被处理以渲染图像的像素。在一些示例中,可以存在片元到像素的一对一映射。然而,在其他示例中,可能存在比像素更多的片元,并且此过采样可以允许像素值的较高质量的渲染,例如,通过支持可以应用于多个片元的抗锯齿和其他滤波以渲染每个像素值。未被hsr单元118去除的图元被提供给纹理化/着色单元120,纹理化/着色单元120对图元片元应用纹理化和/或着色。虽然在图1中未示出,但是纹理化/着色单元120可以从存储器102接收纹理数据,以便将纹理化应用于图元片元,如本领域中已知的。纹理化/着色单元120可以对图元片元(例如,alpha混合和其他处理)应用进一步的处理,如本领域中已知的,以便确定图像的经渲染像素值。针对每个图块执行光栅化阶段,使得可以渲染整个图像,其中整个图像的像素值被确定。经渲染像素值被提供给存储器102用于存储在帧缓冲器128中。然后可以以任何合适的方式使用经渲染图像,例如,显示在显示器上或存储在存储器中或传输到另一设备等。

随着计算机图形应用(例如游戏应用)的复杂性增加,用于表示场景的几何数据的量趋于增加。这意味着在图1的系统中,从几何处理逻辑104提供到存储器102并且存储在经变换参数存储器124中的经变换几何数据的量增加。从几何处理逻辑104(其通常实现在“片上”)到存储器102(其通常实现在“片外”作为系统存储器)的数据传送可以是相对慢的过程(与渲染几何数据中涉及的其他过程相比)并且可能消耗大量的存储器102。

因此,如在英国专利号gb2458488中所描述的,一些基于图块的图形处理系统可以使用“未变换显示列表”,使得针对图块的控制流数据包括对输入几何数据的指示,即未变换几何数据,而不是经变换几何数据。这意味着经变换几何数据不需要从几何处理逻辑提供给系统存储器,或者存储在系统存储器中。这些系统在光栅化逻辑中实现变换单元,因为由光栅化逻辑取回的几何数据是未变换的,但是在一些情况下,避免将经变换图元传送到系统存储器并且将它们存储在系统存储器中的延迟和存储器使用的好处可以超过在光栅化阶段执行变换的处理成本。

图2示出了使用未变换显示列表的系统200的示例,类似于gb2458488中描述的。系统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不需要图形数据项的其他数据(例如,在对图形数据项进行渲染期间应用的颜色数据或纹理数据)。这不同于系统100,其中由取回单元108取回针对图形数据项的所有数据。变换逻辑210将图形数据项的位置数据变换到渲染空间中,并且所得到的数据被传递到剔除/裁剪单元212,剔除/裁剪单元212剔除和/或裁剪落在视见平截头体外部的任何图形数据项。图块化单元214为渲染空间的每个图块生成控制流数据,其中针对图块的控制流数据包括要用于渲染图块的图形数据项(例如在被变换时至少部分地位于图块内的图元)的标识符。控制流数据中的标识符标识输入图形数据项,即存储在图形存储器222中的图形数据项。这不同于图1所示的系统100,其中控制流数据中的标识符标识存储在经变换参数存储器124中的经变换图元。针对图块的控制流数据被提供给存储器202用于存储在控制流存储器226中。

在光栅化阶段中,光栅化逻辑206的取回单元216从控制流存储器226接收针对图块的控制流数据,并且从图形存储器222中取回所指示的输入图形数据项,该输入图形数据项如由针对图块的控制流数据所指示的。输入图形数据项未被变换。变换逻辑230将所取回的图形数据项变换到渲染空间中。经变换图形数据项被提供给hsr单元218,hsr单元218执行hsr以去除隐藏的图元片元。纹理化和着色单元220然后对未被hsr单元218去除的图元片元执行诸如纹理化和/或着色的处理。hsr单元218以及纹理化和着色单元220以与图1所示并且以上针对渲染图元描述的系统100的相应单元118和120类似的方式来操作。所得到的经渲染像素值被提供给存储器202用于存储在帧缓冲器228中,并且随后可以被使用,例如,显示在显示器上或存储在存储器中或传输到另一设备等。

先前的专利gb2458488描述了针对光栅化阶段的优化,其中照明或属性处理被推迟直到已经执行了隐藏表面去除之后。在该优化中,在光栅化阶段中实现两个变换单元:在hsr单元之前实现的第一变换单元和在hsr单元之后实现的第二变换单元,第一变换单元仅变换图元的“位置数据”(即,用于计算图元的位置的数据),第二变换单元针对通过hsr单元的深度测试的图元执行照明或属性处理。以这种方式,仅为没有被hsr单元剔除的图元计算图元的非位置属性。

先前的专利gb2458488描述了另一种优化,其中针对图元的位置数据在几何处理阶段中被变换,并且然后被存储在参数缓冲器中。然后可以在光栅化阶段期间取回针对图元的位置数据,并且由hsr单元和其他处理单元使用。针对图元的非位置属性数据从存储器中被取回,并且被变换以供hsr单元和其他处理单元使用。这种优化避免了对于在光栅化阶段中重新计算的针对图元的经变换位置数据的需要。



技术实现要素:

提供本发明内容以便以简化的形式介绍将在以下具体实施方式中进一步描述的一些概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。

提供了一种被配置成渲染图元的图形处理系统,图形处理系统包括:

高速缓存系统,其被配置成:

在高速缓存中存储图形数据项用于在渲染图元时使用;以及

确定与要被处理用于渲染的图元相关的图形数据项是否存在于高速缓存中;

任务组合单元,其被配置成:

存储针对相应任务的多个任务条目,计算实例可以被分配给相应任务,计算实例用于生成由高速缓存系统确定为不存在于高速缓存中的图形数据项,其中任务条目指示哪些计算实例已经被分配给相应任务,并且其中任务条目与能够被分配给相应任务的计算实例的特性相关联;

基于计算实例的特性来向任务分配要被执行的计算实例;以及

输出一个或多个任务用于执行;

simd处理逻辑,其被配置成以simd方式执行从任务组合单元输出的任务的计算实例,从而确定用于存储在高速缓存中的图形数据项;以及

图元处理逻辑,其被配置成使用被存储在高速缓存中的图形数据项来渲染图元。

提供了一种在图形处理系统中处理图元的方法,该方法包括:在图形处理系统的高速缓存中存储图形数据项用于在渲染图元时使用;确定与要被处理用于渲染的图元相关的图形数据项是否存在于高速缓存中;在图形处理系统的任务组合单元中存储针对相应任务的多个任务条目,计算实例可以被分配给相应任务,计算实例用于生成被确定为不存在于高速缓存中的图形数据项,其中任务条目指示哪些计算实例已经被分配给相应任务,并且其中任务条目与能够被分配给相应任务的计算实例的特性相关联;基于计算实例的特性来向任务分配要被执行的计算实例;输出一个或多个任务用于执行;以simd方式执行所输出的任务的计算实例,从而确定用于存储在高速缓存中的图形数据项;以及使用被存储在高速缓存中的图形数据项来渲染图元。

可以提供计算机可读代码,当代码在计算机上运行时,计算机可读代码适于执行本文中所描述的任何方法的步骤。计算机可读代码可以被编码在计算机可读存储介质上。

本文中所描述的图形处理系统可以在集成电路上的硬件中实施。还提供了一种在集成电路制造系统处制造根据本文中所描述的任何示例的图形处理系统的方法。还可以提供一种集成电路定义数据集,当在集成电路制造系统中被处理时,该集成电路定义数据集将系统配置成制造根据本文中所描述的任何示例的图形处理系统。集成电路定义数据集可以存储在计算机可读存储介质上。

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

附图说明

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

图1示出了使用经变换显示列表的第一现有技术图形处理系统的示例;

图2示出了使用未变换显示列表的第二现有技术图形处理系统的示例;

图3示出了根据本文中所描述的实施例的图形处理系统;

图4是示出在图形处理系统中处理图元的方法的流程图;

图5示出了用于从输入图形数据项生成子图元的处理阶段的序列的示例;

图6示出了图3所示的图形处理系统的一些组件的更详细的表示;

图7示出了由simd处理逻辑执行任务;

图8表示示例中的任务组合单元;

图9示出了根据替选实施例的图形处理系统;

图10示出了根据另外的替选实施例的图形处理系统;

图11示出了针对任务的计算实例的输入和输出引用;

图12示出了用于存储针对任务的计算实例的输入和输出引用的任务槽的表;

图13示出了用于存储针对任务的计算实例的输入和输出引用的任务表和图元表;

图14示出了其中实现图形处理系统的计算机系统;以及

图15示出了用于生成实施图形处理系统的集成电路的集成电路制造系统。

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

具体实施方式

现在将仅通过示例的方式描述实施例。

上述系统200非常适合于处理图形数据项(诸如图元),该图形数据项在被渲染时不生成另外的图元。然而,很多输入图形数据项的处理可能导致一个或多个子图元的生成。术语“子图元”在本文中用于指代通过处理输入图形数据项而生成的图元。因此,子图元没有存储在图形存储器222中,而是从存储在图形存储器222中的输入图形数据项生成。例如,如果输入图形数据项是描述要被镶嵌的补片的控制点,则控制点的镶嵌可能产生很多子图元(例如,可以导出两个、几十个、几百个或几千个图元)。此外,可以对图形数据项执行诸如顶点着色、域着色、几何着色和裁剪的其他操作,并且其他操作还可以将图元分割为多个子图元。由于系统200使用包括存储在图形存储器222中的输入图形数据项的标识符的控制流数据,所以需要在系统200中的几何处理阶段和光栅化阶段二者中对于在几何处理阶段中未被剔除的输入图形数据项执行被实现用于从输入图形数据项确定子图元(至少针对子图元的位置数据)的处理阶段。因此,与用于生成子图元的处理阶段相关地重复一些处理。

可以执行多个不同的操作以用于从输入图形数据项导出要被渲染的图元。可以执行的操作的一些示例是顶点着色、外壳着色、域着色和几何着色。操作及其操作的图形数据项的组合形成可以被执行以对图形数据项执行操作的计算实例(例如,顶点着色器实例、外壳着色器实例、域着色器实例或几何着色器实例)。在图形处理系统中,类似的计算实例可能用不同的数据项来执行多次,例如,对于与那些像素重叠的图元的相应像素,可以多次执行着色器程序。因此,这些计算实例非常适合以单指令多数据(simd)方式执行。因此,计算实例被分组成用于在simd处理器上执行的任务。每个任务包括多个计算实例,其中任务中的计算实例的数目取决于实现,例如,取决于在其上执行任务的simd处理器的宽度。例如,在本文中所描述的示例中,每个任务能够包含多达32个计算实例,但是在其他示例中,每个任务可以能够包含不同数目的计算实例,例如,8个、16个或64个。出于效率的原因,优选地,可以被包括在任务中的计算实例的数目可以是2的幂。

由于simd处理器并行地对多个数据项执行单个指令,因此被包括在用于simd执行的共同的任务中的计算实例应当彼此兼容,即共享用于执行的特性。例如,被包括在同一任务中的计算实例在它们具有相同的着色器类型(例如,如果它们属于相同的着色器执行,即相同的管线阶段(pipelinestage))并且共享相同的状态或兼容状态的情况下是兼容的。例如,如果绑定到该管线阶段的着色器代码、常数缓冲器、着色器资源、采样器状态和输入缓冲器相同,则可以认为两个状态对于给定的管线阶段是兼容的。

在一个简单的示例中,不是一旦创建计算实例就执行它,而是将计算实例分组到任务中。当任务变得充满计算实例时(在一些示例中,在任务中可以包括多达32个计算实例),则该任务被发送用于由simd处理器进行处理,使得被包括在该任务中的计算实例被并行执行。然后可以在新的任务中包括另外的计算实例。如果新的计算实例与当前被包括在开放任务中的计算实例不兼容(例如,如果新的计算实例涉及与先前的计算实例不同的着色器类型,或者如果针对新的计算实例的状态不同于针对先前的计算实例的状态),则可以将当前任务冲刷(flush)到simd处理器用于执行,即使任务未满(例如,如果任务具有32个计算实例的容量但是包括少于32个计算实例)。这允许将新的计算实例分配给新的任务。然而,这导致由simd处理器执行未完全满的任务。当任务在它们完全充满计算实例之前被执行时,simd处理的效率降低。换句话说,增加被包括在由simd处理器执行的任务中的计算实例的平均数目可以提高simd处理的效率。因此,发生的(导致simd任务被冲刷)的状态改变和/或着色器类型改变的数目的增加可能趋向于导致simd处理效率的降低。

在几何处理阶段中,处理输入图形数据项以生成在考虑接下来的输入图形数据项之前从这些被处理的输入图形数据项导出的所有子图元。因此,在几何处理阶段中,通常为特定的输入图形数据项连续地创建很多计算实例,并且这些计算实例可能共享状态和着色器类型。因此,在几何处理阶段中,很多计算实例通常可以在任务被冲刷之前被分组到任务中。然而,如从下面的描述将变得显而易见的,在光栅化阶段中,状态和/或着色器类型更可能在连续地创建的计算实例之间改变,因此在光栅化阶段中的simd处理的效率可能低于几何处理阶段。下面描述的示例提供改进的任务占用率,从而与上述简单方法相比,提高了光栅化阶段中的simd处理效率。

图3示出根据本文中所描述的实施例的图形处理系统300。系统300类似于图2所示的系统200,但包括用于导出子图元的组件。具体地,系统300包括存储器302、几何处理逻辑304和光栅化逻辑306。几何处理逻辑304和光栅化逻辑306可以在gpu上实现,并且可以共享一些处理资源,如本领域中已知的。几何处理逻辑304包括几何数据取回单元308、变换和图元导出逻辑310和图块化单元314。光栅化逻辑306包括取回单元316、渲染队列344和图元处理逻辑317。图元处理逻辑317包括裁剪和变换逻辑330、hsr单元318和纹理化/着色单元320。光栅化逻辑306还包括高速缓存系统334,高速缓存系统334包括高速缓存336和高速缓存控制器338。光栅化逻辑306还包括任务组合单元340、任务依赖性单元342和simd处理逻辑346。存储器302可以被实现为一个或多个物理存储器块,并且包括图形存储器322、控制流存储器326和帧缓冲器328。

在一个示例中参考图4所示的流程图描述系统300的操作。

在步骤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所示的简单示例中,补片a504a产生两个镶嵌的图元,而补片b504b产生一个镶嵌的图元(由于不同的镶嵌因子)。应当显而易见的是,在其他示例中,可以通过镶嵌产生不同数目的图元,并且具体地可以产生多于两个图元,例如,可以通过对补片进行镶嵌来产生几十、几百或甚至几千个图元。针对镶嵌的图元的顶点的顶点数据(其由来自镶嵌器508的顶点uv坐标509以及来自外壳着色器506的输出控制点和其他图形补片数据项505定义)被输入到域着色器实例510中,域着色器实例510用于操纵镶嵌的顶点,例如以将高度图应用于顶点等。变换和图元导出逻辑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实例生成的图元的数目从0到由应用规定的上限(例如,高达256)变化,这取决于gs实例被安排执行的操作。在图5所示的简单示例中,每个gs实例产生从0到2个图元。具体地,gs实例514a00被应用于图元512a0并且产生两个图元516a00和516a01;gs实例514a01被应用于图元512a0并且产生一个图元516a02;gs实例514a10被应用于图元512a1并且产生零个图元;gs实例514a11被应用于图元512a1并且产生一个图元516a10;gs实例514b00被应用于图元512b0并且产生一个图元516b00;并且gs实例514b01被应用于图元512b0并且产生一个图元516b01。

图5示出了从输入图形数据项导出子图元的处理阶段的序列的示例。在其他示例中,可以执行不同的处理阶段,并且在该序列中可以执行更少的或更多的处理阶段。在本文所描述的示例中,处理阶段的序列可以包括实现顶点着色器、外壳着色器、域着色器和几何着色器中的一个或多个。例如,在一些示例中,仅执行顶点着色,并且在其他示例中,执行顶点着色和裁剪。在其他示例中可以实现处理阶段的其他组合。

如上所述,如果图元延伸到视见平截头体外部,则变换和图元导出逻辑310可以裁剪图元中的一些,但是在图5所示的示例中,gs生成的图元中的一些没有被裁剪。例如,当裁剪图元时,在使用六个标准裁剪平面和八个自定义剪裁平面的情况下,可以产生多达十五个子图元(十七个顶点)。然而,在图5所示的简单示例中,图元516a01被裁剪以产生一个图元520a010,并且图元516b00被裁剪以产生两个图元520b000和520b001。图元516a00、516a02、516a10和516b01未被裁剪。层级的叶节点(即,图5所示示例中的图元516a00、520a010、516a02、516a10、520b000、520b001和516b01)是要被渲染的子图元。在一些实例中,输入图元可以通过变换和图元导出逻辑310而不产生任何子图元,使得在一些实例中可以将裁剪应用于输入图元。因此,一般来说,变换和图元导出逻辑310剔除和/或裁剪位于视见平截头体外部的图形数据项(包括导出的子图元)。剩余的图元和子图元被传递到图块化单元314。

在步骤s406中,图块化单元314为渲染空间的每个图块生成控制流数据。针对图块的控制流数据包括要用于渲染图块的输入图形数据项的标识符,输入图形数据项例如是来自图形存储器322的在被变换时至少部分地位于图块内的图元,或来自图形存储器322的从其导出至少部分地位于图块内的子图元的图元。控制流数据中的标识符标识输入图形数据项,即存储在图形存储器222中的图形数据项。针对图块的控制流数据还包括图元指示,图元指示用以指示从输入图形数据项导出的图元中的哪些(即,子图元中的哪些)要用于渲染图块。如果子图元至少部分地在图块内,则可以确定子图元要用于渲染图块。子图元指示可以在光栅化阶段期间使用以减少被执行以导出针对图块的子图元的处理量。子图元指示可以例如指示如何从经变换输入图形数据项导出要用于渲染图块的子图元。例如,子图元指示可以指示对输入图形数据项执行以便生成要被渲染的子图元的处理操作的序列。因此,光栅化阶段可以执行所指示的操作(但是不需要执行未指示的操作),以便导出针对图块要被渲染的必要的子图元。例如,与图5所示的示例相关的控制流中的子图元指示可以指示gs实例514a10不产生任何图元,在这种情况下,可以不在光栅化阶段中执行该gs实例。

此外,可能的情况是,作为图5中所示的叶节点的子图元中的一些可能没有至少部分地位于特定图块内。例如,图元516a02可能完全位于特定图块外部,在这种情况下,子图元516a02的指示将不被包括在针对特定图块的控制流数据中。因此,在光栅化阶段,光栅化逻辑将不需要实现几何着色器514a01。

子图元指示可以被表示为一个或多个掩码。例如,针对子图元的掩码可以指示要执行一组可能的操作中的哪些以导出子图元。掩码还可以指示一组可能的子图元中的哪些被剔除或裁剪。掩码还可以指示从原始图元导出的哪些子图元存在于图块中,以及哪些子图元不存在于图块中。此外,控制流数据中的输入图形数据项的标识符可以被实现为一个或多个掩码,一个或多个掩码指示来自图形数据项块的哪些图形数据项要被用于渲染特定图块。控制流数据中的输入图形数据项的标识符可以或可以不在引用不同图块的控制流数据的部分之间共享,假设可以重建针对每个特定图块的控制流数据。

可以根据任何合适的压缩技术来压缩控制流数据中的标识符和子图元指示。针对图块的控制流数据被提供给存储器302以用于存储在控制流存储器326中。在这一点上,已经为当前渲染完成了几何处理阶段,并且在随后的时间,执行光栅化阶段以使用存储在图形存储器322中的输入图形数据和存储在控制流存储器326中的控制流数据来渲染渲染空间的图块。

现在描述光栅化阶段中的特定图块的渲染。在步骤s408中,光栅化逻辑306的取回单元316从控制流存储器326接收针对图块的控制流数据,并且将控制流数据传递到高速缓存系统334和渲染队列344。渲染队列344(其也可以被称为“光栅化队列”)存储要被处理以用于渲染的图元的指示(例如,图元标识符)。如图6所示,渲染队列344还存储顶点索引以指示哪些顶点构成要被渲染的图元。在图6所示的示例中,当前在渲染队列344中有四个图元:由顶点v0、v1和v2形成的图元0;由顶点v2、v1和v3形成的图元1;由顶点v2、v3和v4形成的图元2;和由顶点v5、v2和v4形成的图元3。在一些示例中,可以由光栅化逻辑306使用相应图块处理管线(其中每个可以由唯一的图块管线id来标识)来并行地处理多个图块,并且在这些示例中,对于当前正在由光栅化逻辑306处理每个图块,可以存在相应渲染队列。如果图元覆盖多于一个图块,则其图元id可以相应地被包括在多于一个渲染队列中。

在步骤s410中,高速缓存控制器338确定高速缓存336中是否存在要被处理以用于渲染的图形数据项(例如,图元),该图形数据项如由针对图块的控制流数据中的标识符所指示的。高速缓存控制器338可以包括指示高速缓存336的当前内容的一个或多个查找表,使得高速缓存控制器338可以使用一个或多个查找表来确定高速缓存336中是否存在与要被处理以用于渲染的图元相关的图形数据项。当将生成该图形数据项的计算实例被调度时,而不是当结果变得可用时,可以分配高速缓存中的空间。在高速缓存中分配每个图形数据项的情况下,高速缓存控制器还存储状态位,状态位指示图形数据项是否仍然被调度用于执行或者是否已经发生执行并且所得到的图形数据项在高速缓存中可用。如果图形数据项被调度用于执行,则高速缓存控制器还存储将计算图形数据项的值的simd任务的标识符。图形数据项可以被分配和锁定在高速缓存336中,但是如果相应状态位指示图形数据项“被调度”,则挂起(pending)任务仍然必须产生其值。一旦执行了所标识的simd任务,则所计算的图形数据项的状态位将被改变以指示它们现在可用。图6示出了高速缓存系统334的更加详细的视图,其在这个示例中示出,高速缓存控制器338包括顶点着色器查找表602、外壳着色器查找表604、域着色器查找表606和几何着色器查找表608。查找表包含关于图形管线的不同阶段的信息,并且可以或可以不在彼此相同的硬件结构中实现。高速缓存控制器338可以通过查询一个或多个查找表来确定高速缓存336中是否存在图形数据项(例如,图元或控制点)。例如,可以针对处理序列的每个阶段使用查找表来实现高速缓存控制器338。在图6所示的示例中,顶点着色器查找表602指示相应顶点着色器调用的结果是否被存储在高速缓存336中(如果是,则在何处);外壳着色器查找表604指示相应外壳着色器调用的结果是否存储在高速缓存336中(如果是这样,则在何处);域着色器查找表606指示相应域着色器调用的结果是否存储在高速缓存336中(如果是,则在何处);并且几何着色器查询表608指示相应几何着色器调用的结果是否被存储在高速缓存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变为由一种类型的数据主导,例如,其停止频繁地执行的着色器阶段(诸如域着色器)从高速缓存336逐出针对较不频繁地执行但潜在计算上昂贵的阶段(例如,外壳着色器)的数据。

高速缓存336具有有限的大小,其通常没有大到足以同时存储在渲染图像期间使用的所有图形数据项。因此,在某些点,可能需要从高速缓存中逐出数据项,以允许其他数据项存储在高速缓存中。

在步骤s410中,对高速缓存控制器的查询确定生成图元所需要的图形数据项是否存在于高速缓存336中。这可以包括来自不同着色器阶段的图形数据项(例如,生成图元的gs图形数据项以及向gs提供输入的vs图形数据项)。从最后的着色器阶段到第一着色器阶段(例如,首先是gs,然后是vs)自底向上执行查询。如果发现用于生成针对给定着色器阶段的图元的所有图形数据项存在于高速缓存中并且可用,则查询停止。如果所需要的图形数据项在高速缓存336中可用,则在高速缓存336中的图形数据项上放置锁定,使得该图形数据项在其已被使用之前不会从高速缓存336被逐出。如果所需要的数据项不可用,则为其分配高速缓存的一部分和查找表条目,可能逐出其他图形数据项(步骤s412)。如果由于锁定阻止其他图形数据项的逐出而导致任何分配失败,则查询失败,并且将在稍后在一个或多个渲染管线被冲刷,从而释放锁定之后尝试查询。换句话说,当分配失败时,一个或多个渲染队列被冲刷。在冲刷渲染队列之前,执行该渲染队列所需要的所有任务。在冲刷渲染队列之后,释放适当的锁定。如果分配成功,则在步骤s414中,基于计算实例的特性将用于生成所需要的图形数据项的计算实例分配给任务,如下面更详细描述的。以这种方式,生成所需要的数据项的计算实例被调度以在simd任务内执行。simd任务一旦被执行将把图形数据项的值写入高速缓存的分配部分。计算实例可以是例如生成顶点的顶点着色器或生成补片常数数据并输出控制点的外壳着色器实例。当查询完成时,针对当前图块处理管线锁定所需要的数据项。这保证了在渲染队列344的冲刷期间在对图元进行光栅化之前不将图形数据项逐出。此外,如果所需要的数据项存在于高速缓存中但不可用(被调度),则针对当前图块处理管线将生成所需要的数据项的数据的任务锁定。这保证了在渲染队列344的冲刷期间在对图元进行光栅化之前将执行所需要的任务。在查询完成之后,将图元添加到渲染队列。如下面更详细描述的,当光栅化队列被冲刷时,从高速缓存336读取数据。这允许建立simd任务,直到光栅化队列被冲刷的时间。

任务组合单元340(其也可以被称为“任务收集器”)被配置成存储针对可以向其分配计算实例的相应任务的多个任务条目。图6示出了任务组合单元340包括针对任务条目的数据的表610。在图6所示的示例中,在表610中示出了五个任务条目,其中每个条目包括条目id、任务类型、状态id、针对多个计算实例的槽以及一组锁定掩码位。条目id是表610中的任务条目的标识符。条目的任务类型字段指示被包括在任务中的计算实例的着色器类型。例如,条目id为0、1和4的任务条目用于包括顶点着色实例的任务;条目id为2的任务条目用于包括域着色实例的任务;条目id为3的任务条目用于包括外壳着色实例的任务。针对任务条目的状态id字段指示要用于执行任务中的计算实例的状态。如上所述,状态可以规定执行条件,诸如绑定到用于执行计算实例的管线阶段的着色器代码、常数缓冲器、着色器资源、采样器状态和输入缓冲器。着色器类型和状态id定义计算实例的特性,使得表610中的任务条目包括可以被分配给相应任务的计算实例的相关联的特性的指示。

针对存储在表610中的任务条目的任务是可以向其分配计算实例的“开放”任务,即,它们不是不能向其分配更多计算实例的满的任务。任务组合单元340可以将所分配的计算实例存储在针对相应任务的任务条目中,从而指示哪些计算实例已经被分配给相应任务。在图6所示的示例中,每个任务可以包括多达八个计算实例,但是在其他示例中,每个任务可以被分配多于或少于八个计算实例(例如,在具体示例中可以将多达32个计算实例分配给任务)。在一些示例中,可以被分配给任务的计算实例的数目对于不同的着色器类型可以是不同的,但是在图6所示的示例中,所有任务可以具有被分配给它的相同数目的计算实例。每个任务条目指示哪些计算实例已经被分配给相应任务(在图6中用阴影表示)。作为示例,任务条目0被存储在表610中的任务当前具有被分配给它的三个计算实例,并且具有用于多达五个更多的计算实例的空间要被分配给它(在图6中用无阴影框表示)。

任务条目的锁定掩码位标识图块处理管线中的哪些将使用属于相应任务的计算实例的结果。例如,图6示出了可以并行处理多达四个图块管线(例如图块0至3)。在图6所示的示例中,任务条目0被存储的任务包括将用于处理图块0和2但不用于图块1和3的计算实例;而任务条目1、2、3和4被存储的任务包括将用于处理图块2但不用于图块0、1或3的计算实例。当计算实例被分配给相应任务时,可以更新任务条目的锁定掩码位。当冲刷渲染队列时,任务的锁定位用于确定哪些任务需要被冲刷以初始化所需要的图形数据项。

如上所述,在步骤s414中,对于被确定为不存在于高速缓存336中的每个图形数据项,任务组合单元基于计算实例的特性向任务分配计算实例。例如,如果顶点着色实例要在状态a的情况下被执行,则顶点着色实例可以被分配给任务条目0。作为另一示例,如果顶点着色实例要在状态b的情况下被执行,则顶点着色实例可以被分配给任务条目1。以这种方式,被分配给任务的计算实例可以由simd处理器并行执行,因为它们具有兼容的特性(例如,共同的着色器类型和兼容状态)。由于任务组合单元340可以存储可以用于存储具有不同特性的计算实例的多个开放任务,所以当计算实例的状态或着色器类型改变时,并不总是需要冲刷任务用于执行。如果计算实例的特性(例如着色器类型和状态)与当前存储在任务组合单元340中的任何任务条目的特性都不匹配,则针对新的任务的新的任务条目可以被添加到表612,其中特性匹配计算实例的特性,使得计算实例可以被添加到新的任务。如果在任务组合单元340中没有用于存储新的任务条目的空间,则可能需要在新的任务条目被存储在其中之前从任务组合单元340输出当前存储的任务之一。

一些计算实例取决于其他计算实例的结果。例如,层级的较低处理阶段取决于层级的较高处理阶段。例如,域着色实例(例如ds0(图5中表示为510a0))取决于外壳着色实例506a(其包括镶嵌508a)的结果,其又取决于顶点着色实例5020至5023的结果。因此,如果要渲染图元512a0(即,针对图元512a0的图元id在渲染队列544中),则在高速缓存336中搜索域着色器510a0、510a1和510a2的结果。作为示例,以下情况可能正是如此:域着色器510a1和510a2的结果已经存储在高速缓存336中,因此为这些顶点返回高速缓存命中,但是在该示例中,域着色器510a0的结果当前没有存储在高速缓存336中,因此为510a0生成域着色实例。该计算实例可以具有状态c,并且被存储在任务条目2中,如图6所示。为了执行域着色器510a0,需要外壳着色器实例506a(包括镶嵌508a)的结果,并且如果这些结果当前没有存储在高速缓存336中,则为506a(包括镶嵌508a)生成外壳着色实例。该计算实例也具有状态c,但是因为着色器类型不是域着色器,所以计算实例存储在任务条目3中,如图6所示。为了执行外壳着色器506a,需要顶点着色器实例5020到5023的结果。作为示例,顶点着色器实例5022和5023的结果已经存储在高速缓存336中(例如,由于控制点504b可能已经被计算)。然而,顶点着色器实例5020和5021的结果尚未存储在高速缓存336中,因此为5020和5021生成两个顶点着色实例。这些计算实例也具有状态c,但是因为着色器类型不是域着色器或外壳着色器,所以计算实例被存储在任务条目4中,如图6所示。

在该示例中,渲染队列344包含针对裁剪器输入图元(即,尚未向其应用裁剪的图元)的描述符,并且由simd处理逻辑346执行的处理不包括裁剪操作。因此,被包括在用于由simd处理逻辑346执行的任务中的计算实例都不用于执行裁剪操作。每个裁剪器输入图元描述符包括对高速缓存336内的顶点的引用以及对该图元进行裁剪、光栅化或着色所需要的一些额外信息。缓冲器中的引用被保证在冲刷队列时是有效的,这是由于在图形数据项上的锁定,并且在步骤s412和s414之后获取必要的simd任务。未变换几何取回单元316可以转发存储在描述符内的标志,该标志指示队列中的图元是否需要被剪裁(该信息从几何处理阶段已知),并且如果是,则哪个裁剪器生成的图元必须在当前图块中被光栅化。图元的顶点可以存储在一个或多个图形数据项中。例如,gs生成的三角形可以由对单个gs图形数据项的引用以及由标识图形数据项内的顶点的位置的三个偏移来表示。镶嵌器生成的线可以由对不同ds图形数据项的两个引用来表示(不需要偏移,因为ds图形数据项仅包含一个顶点)。在其他示例中,渲染队列344可以包含用于裁剪器输出图元的描述符,即已经应用了裁剪的图元,并且在这些其他示例中,由simd处理逻辑执行的处理可以包括裁剪操作,使得被包括在用于由simd处理逻辑执行的任务中的计算实例中的一些可以用于执行裁剪操作。

任务依赖性单元342维持对任务条目被存储在任务组合单元340中的不同任务之间的依赖性的指示。在图6所示的示例中,任务依赖性单元342包括矩阵612,矩阵612指示每个要被执行的任务条目取决于的任务(如果存在)。在图6中,“x”指示针对任务条目2的任务取决于针对任务条目3的任务,另一“x”指示针对任务条目3的任务取决于针对任务条目4的任务。图6中不存在“x”指示任务不取决于特定的其他任务。

如上所述,在步骤s412中,高速缓存控制器338为要由被分配给任务组合单元340中的任务的相应计算实例确定的每个图形数据项分配高速缓存336的一部分(以及相应lut条目)。以这种方式,确保高速缓存336具有针对每个计算实例的结果的存储器的分配部分。因此,当执行计算实例时,执行的结果可以存储在高速缓存336中(在相应分配部分中),而不从高速缓存336逐出仍然要使用的数据。高速缓存控制器338可以锁定被分配给涉及要被处理以用于渲染的图元的计算实例的高速缓存336的部分,直到这些图元已经被渲染,或直到渲染图元中涉及的处理中的至少一些(例如hsr和/或纹理化和着色)已经被执行,此时高速缓存336的部分可以被解锁。

计算实例继续被分配给任务组合单元340中的任务,直到在步骤s416中,任务组合单元340确定任务要被输出用于执行。在步骤s418中,一个或多个任务被选择并且从任务组合单元340被输出用于由simd处理逻辑346执行。

任务组合单元340有很多原因来确定任务要被输出用于执行。例如,可以响应于特定任务是满的(即,其不具有用于另外的计算实例的分配的更多可用的槽),而输出特定任务用于执行。在图6所示的示例中,如果已经将八个计算实例分配给特定任务,则认为它是满的。

作为另一示例,当任务组合单元340不具有针对新的任务条目的可用空间时,可以响应于针对新的任务的新的任务条目准备好被写入任务组合单元340,而输出特定任务用于执行。在这种情况下,输出特定任务,使得新的任务条目可以被写入任务组合单元340。

作为另一示例,响应于对特定任务具有一个或多个依赖性的另一任务,由于应要被执行(例如,因为其是满的或一些其他原因),可以输出特定任务用于执行。在这种情况下,特定任务被输出用于执行,因为其结果是执行一个或多个其他任务所需要的。如上所述,依赖性可以由任务依赖性单元342指示。

作为另一示例,响应于包括与特定任务相关的图元的渲染队列的冲刷,可以输出特定任务用于执行。当冲刷渲染队列344时,可以向高速缓存系统334发送用于从高速缓存336获取与要被处理以用于渲染的图元相关的图形数据项的请求。也就是说,当渲染队列344被冲刷时,则在渲染队列344中指示的所有图元将由图元处理逻辑317处理,并且因此为相应图元处理管线锁定的所有任务都需要被冲刷。这保证了与要被处理的图元相关的所有图形数据项的数据在高速缓存中可用(而不是“被调度”状态)。

在任务组合单元340中的任务中的一些但不是全部要被输出到simd处理逻辑346的情况下,则可以使用选择方案来选择要被输出的任务。例如,任务组合单元340可以选择任务条目被存储在任务组合单元340中的最满的任务要被输出用于执行。这意味着由simd处理逻辑346执行的任务平均来说比在其他任务被选择要被输出的情况下包含更多的计算实例。另一种可能的方案是选择最老的任务。选择方案还可能倾向于没有输入依赖性的任务,以避免过早地冲刷几个任务。通常,增加由simd处理逻辑346执行的任务中的计算实例的平均数目将增加simd处理的效率(在执行计算实例的速率方面)。

当从任务组合单元340输出任务时,任务组合单元340使得相应任务条目可用于另一任务。

在步骤s420中,simd处理逻辑346以simd方式执行一个或多个被输出的任务中的每个的计算实例。图7示出了如何由simd处理逻辑346执行任务的计算实例。任务702能够包括八个计算实例,但在图7所示的示例中,任务702包括六个计算实例(在图7中用阴影示出)。任务702被提供给simd处理逻辑346以用于执行。simd处理逻辑346包括多个执行单元706,其可以被称为算术逻辑单元(alu),每个执行单元706被配置成并行地对针对任务的相应计算实例的数据执行指令。在图7中,有八个执行单元,其中为了清楚起见,在图7中仅有两个执行单元具有附图标记:7060和7067。在不同的示例中,simd处理逻辑346中的执行单元706的数目可以不同。例如,simd处理逻辑346中的执行单元706的数目可以等于可以被包括在单个任务中的计算实例的最大数目。来自相应执行单元(7060至7067)的结果(7040至7047)是被提供给高速缓存系统334用于存储在高速缓存336的相应分配部分中的图形数据项(例如图元的顶点)。注意,针对每个图形数据项的高速缓存336中的空间在步骤s412中在查询期间被分配,并且针对一个或多个图形处理管线被锁定。

在步骤s422中,将执行结果存储在高速缓存336中。以这种方式,针对要被处理以用于渲染的图元的图形数据项可以被生成并且被存储在高速缓存336中。

在其中图元经过顶点着色器阶段但不经过镶嵌和几何着色器阶段的简单示例中,在vslut602中搜索图元的顶点。对于每个高速缓存未命中,在任务组合单元340中对顶点着色器实例排队。对于当前图块处理管线锁定vslut602中的条目,而不管是否发生高速缓存命中或高速缓存未命中。此外,在命中时,如果vslut中的条目被标记为被调度用于执行,则其被调度的任务也对于当前图块处理管线被锁定。这将保证在冲刷渲染队列之前任务被发送用于执行。

在图元经过顶点着色器阶段和镶嵌阶段但不经过几何着色器阶段的另一示例中,在dslut606中搜索顶点。如果发生至少一个高速缓存未命中,则在hslut604中搜索补片数据。如果发生至少一个ds未命中并且hs输出不可用,则在vslut602中搜索输入控制点。为了处理在vs阶段处的未命中,在任务组合单元304中对相应vs实例排队。类似地,为了处理在hs阶段处的未命中,将相关hs实例添加到任务组合单元340,其中将对执行提供hs输入的vs实例的任务的依赖性的指示添加到任务依赖性单元342。此外,为了处理在ds阶段处的未命中,将ds实例添加到任务组合单元340,其中将对执行提供ds输入的hs实例的任务的依赖性的指示添加到任务依赖性单元342。此外,在每个着色器阶段处,如果发生命中,但是相关lut中的条目被标记为被调度用于执行,则其被调度的任务针对当前图块处理管线被锁定。这将保证在冲刷渲染队列之前任务被发送用于执行。

不同的条件可以对于正在被处理的图块之一触发渲染队列344的冲刷:(1)队列是满的,(2)高速缓存中的锁定需要被释放,或者(3)未变换几何取回单元316已经完成取回针对图块的几何形状。注意,在这一点上,针对渲染队列中的图元的所有图形数据项将仍然存储在高速缓存336中,因为它们在步骤s412之后已经被锁定。在继续对队列中的图元的光栅化和hsr之前,系统必须输出在步骤s414期间锁定的simd任务用于执行。任务可以按状态排序,使得simd处理逻辑340不需要在执行任务之间频繁地改变其执行状态。这可以提高simd处理的效率。

在冲刷所需要的simd任务之后,针对渲染队列中的图元的图形数据项变为可用。对于队列中的每个图元,在步骤s424中,向高速缓存系统334发送从所引用的图形数据项获取顶点的请求。注意,顶点可以是图形数据项的一部分(例如,几何着色器数据项可以包含很多顶点)。然后将该图元发送到图元处理逻辑317。在处理队列中的所有图元之后,释放对该图块所需要的图形数据项的锁定。但是,注意,相同的图形数据项可能仍被其他图块锁定。

然后,图元处理逻辑317使用存储在高速缓存336中的图形数据项来渲染已经从渲染队列344中冲刷的图元。具体地,在步骤s426中,裁剪和变换逻辑330对从高速缓存336获取的图形数据项执行裁剪和变换操作。如上所述,在该示例中,图元描述符被存储在渲染队列344中的图元是裁剪器输入图元,即,尚未应用裁剪的图元,这是为什么裁剪由图元处理逻辑317来执行。在其他示例中,如果图元在到达图元处理逻辑317之前已经对其应用了裁剪,则图元处理逻辑317可能不包括裁剪功能。变换操作是用于将图元变换到2d渲染空间中的视口变换。裁剪和经变换图元被提供给hsr单元318。

在步骤s428中,由hsr单元318和纹理化/着色单元320渲染图元,从而生成用于特定图块的渲染输出。hsr单元318去除隐藏的图元片元,并且纹理化/着色单元320对图元片元应用纹理化和着色中的一个或两者。然而,在其他示例中,可以执行不同的处理以渲染从裁剪和变换逻辑330输出的图元。此外,图3所示的示例系统300在以下意义上是延迟渲染系统:在图元片元的纹理化和/或着色之前对图元片元执行隐藏表面去除。在其他示例中,系统可以不是延迟渲染系统,使得在图元片元的纹理化和/或着色之后对图元片元执行隐藏表面去除。

在步骤s430中,所得到的经渲染像素值被提供给存储器302以用于存储在帧缓冲器328中,并且随后可以被使用,例如,被显示在显示器上或被存储在存储器中或被传输到另一设备等。

在上述示例中,输入图形数据项(其可以例如是图元或描述补片的控制点)描述要被渲染的3d场景内的几何形状,其中经渲染图元用于形成场景的经渲染图像。在其他示例中,经渲染图元可以用于除了形成场景的经渲染图像之外的其他用途。例如,输入图形数据项可以描述纹理,并且经渲染图元可以用于形成经渲染图像,并且随后在其他渲染中用作纹理。

在上述示例中,任务依赖性单元342包括矩阵612。图8示出了另一示例,其中任务依赖性单元342包括表802,表802针对不同的状态(a、b、c等)指示针对不同的着色器类型(vs、hs、ds、gs等)哪些任务条目被存储在任务组合单元340中。例如,图8示出了任务条目0用于具有状态a的顶点着色器实例,任务条目1用于具有状态b的顶点着色器实例,任务条目2用于具有状态c的域着色器实例,任务条目3用于具有状态c的外壳着色器实例,并且任务条目4用于具有状态c的顶点着色器实例。由于跨不同绘制调用没有任务依赖性,并且由于状态只能在绘制调用之间改变,因此跨表802的不同行没有依赖性。依赖性隐含在表802的行内。例如,表802暗示任务条目2依赖于任务条目3,任务条目3本身依赖于任务条目4,因为着色器阶段的顺序被单义地定义。在其他示例中,表802可以包括用于特定着色器类型的多于一列,例如,可能有多于一个域着色器列,因为很多ds实例可以从单个hs实例生成。由于ds任务将比它们所依赖的hs任务快得多地被填充,因此允许多个开放ds任务防止hs任务以及间接地vs任务的过早冲刷。例如,考虑其中每个simd进程是32宽的系统。如果遇到一个hs实例生成32个ds实例,并且每个状态只允许一个未完成的ds任务,则将不得不在ds任务填充后立即冲刷它。为了提供ds任务的输入,还必须冲刷hs任务。由于未变换图元取回单元可能尚未发现其他兼容的hs实例,这可能导致仅以1/32的效率执行hs实例。另一方面,如果允许多个未完成的ds任务,则将有更高的机会从同一图块或其他同时被处理的图块发现更多兼容的hs实例。注意,该问题不在vs和hs阶段之间发生,因为vs总是比hs更快地被填充。如果系统允许针对同一着色器阶段的多个ds任务,则每个任务的额外位可以指示任务对在前一阶段处的当前未完成的hs任务的依赖性。

综合上述示例,与不实现任务组合单元的系统相比,用于生成图形数据项的计算实例的simd处理的效率被提高。任务组合单元340的使用在光栅化阶段中尤其有用,因为要以自底向上方式从高速缓存336获取要在光栅化阶段中被处理的图元,并且因为(在基于图块的渲染系统中)渲染空间的图块在光栅化阶段中被处理,而不是一次处理整个渲染空间。换句话说,几何阶段中的图元的连续流被去除被剔除的图元并且被分解成每个图块的图元流,然后在光栅化阶段中以定时相关的顺序被处理(即,按顺序处理图块中的图元,但是可以按任何顺序处理图块),其中在它们之间存在共享(例如,图元可以在同一图块内并跨图块共享顶点数据)。高速缓存336中的每个未命中导致计算实例的执行。为了利用gpu的simd性质,多个计算实例被聚集在一起以在单个simd任务中执行。由于任务可以高达n个计算实例宽,其中n取决于微架构,因此期望在执行任务之前收集n个兼容的计算实例用于执行。如果着色器实例属于相同的管线阶段(例如vs、hs、ds或gs)并且共享相同的状态或兼容状态,则可以认为它们是兼容的。另一考虑是,属于不同管线阶段的计算实例可能彼此具有依赖性。例如,消耗三角形的几何着色器实例取决于三个顶点或域着色器实例,而域着色器实例可以取决于单个外壳着色器实例。任务依赖性单元342的使用有助于确保任务的依赖性在其执行之前被满足。在本文所描述的示例中,任务组合单元340允许针对不同着色器阶段并且需要不同图形状态的任务被同时组合到不同任务中。此外,可以用多个图块处理管线请求的计算实例来填充任务。也就是说,任务组合单元340可以将与不同图块相关的计算实例分配给共同的任务。

因为在任务组合单元340中将计算实例组合成开放任务,为每个计算实例存储数据以标识该计算实例的输入和输出。每个计算实例由对任务中的每个计算实例共同的着色器类型和状态(例如特定着色器程序)以及输入和输出来定义,输入和输出对于每个计算实例可以是唯一的,并且定义操作的图形数据项。每个输入或输出通过对高速缓存控制器338的一个或多个查找表(lut)的引用而被标识,以便标识高速缓存中可以找到输入数据的位置以及应当写入输出数据的位置。例如,在具有8192个lut条目的系统中,可以使用13位数目来标识每个输入或输出,因为log2(8192)=13。一个任务中的计算实例的输出可以对应于另一任务中的计算实例的输入。以这种方式,计算实例之间的互连形成诸如图5所示的处理阶段的层级。

在任务组合单元340中为开放任务存储的数据量可能变得显著,使得用于减少为开放任务存储的数据量的方案可能是有益的。例如,任务组合单元340可以能够存储多达128个任务,并且每个任务可以具有多达32个计算实例。每个计算实例可以具有多达33个输入(例如,对于ds计算实例的32个vs输入和一个hs输入)。在朴素的解决方案中,在存在8192(即213)个lut条目的情况下,则在最差情况下在该示例中存储引用所需要的数据量是221kb(即128个任务×32个实例×(1个输出+33个输入)×log2(8192)=1810432位=226304字节=221kb)。这是要存储在图块组合单元340中用于由开放任务中的计算实例使用的引用的大量数据。

用于减少计算实例的引用所需要的存储量的第一选项是允许跨同一任务中的实例共享输入并且使用映射表对共享进行编码。这利用了大多数输入在同一任务的实例之间被共享的这一事实。例如,32个计算实例的任务可以包括32个实例输出(每个计算实例1个输出)和多达64个不同的输入,其可以由任务中的任何计算实例引用。对于这些输入/输出中的每个,存储13位标识符以标识lut条目。如上所述,每个计算实例可以具有多达33个输入,并且对于这些输入中的每个,使用6位索引来标识任务的64个输入中的一个。图11示出了可以为任务存储的引用数据:对于任务中的32个计算实例中的每个,存在32个实例输出(o0到o31),多达64个任务输入(i0到i63)和多达33个实例输入索引。每个输入索引是标识任务输入之一的6位索引。如上所述,在示例中,在任务组合单元340中可以有128个开放任务,因此在最坏情况下在该示例中存储引用所需要的数据量是118.5kb(即128个任务×[(32个输出+64个输入)×log2(8192)+(32×33×6位)]=970752位=121344字节=118.5kb)。尽管与上述朴素的方法相比,这是存储的数据量的减少,但是可以在下面描述的选项中保存更多的数据。此外,在该选项中,任务组合单元340可能需要在将计算实例添加到任务之前搜索开放任务的输入,以查看计算实例的输入是否已经存在于开放任务中。

在第二选项中,代替每个任务采用一个任务槽,取决于针对任务中的计算实例的输入的数目,任务采用不同数目的槽。例如,如上所述,vs输入可以不被存储在高速缓存336中,而是可以代替地被读取作为正常存储器读取,例如,从系统级高速缓存,并且因此vs任务可以具有32个输出和32×0个输入,因此使用1个任务槽;gs任务具有32个输出和32×3个输入,因此使用4个任务槽;hs任务具有32个输出和32×32个输入,因此使用33个任务槽;并且ds任务具有32个输出以及32×1个hs输入和32×4个vs输入,因此使用6个任务槽。所需要的存储量的减少来自于对最坏情况存储要求来自hs任务(其每个需要33个任务槽)的理解,但是在实践中,仅需要为更现实的工作负载提供存储,其中任务被分布在不同的着色器类型之间。如果相反,提供足够的任务槽来处理多达128个ds任务,每个ds任务占用6个任务槽,则存储768个任务槽的表。图12示出了可以存储的示例表1200。表1200的每一行表示任务槽。最多可以有768个任务槽,并且每个任务槽包括32个输入或输出引用,每个引用为13位,因此表中存储的引用位的总数可以高达768×32×13=319488位=39kb。因此,该选项提供了在没有添加复杂数据结构的情况下引用所需要的存储的显著减少,但是它可能使任务表的管理复杂化,并且存在任务碎片化的可能性。

在第三选项中,可以存储将每个输入图元(或补片)映射到产生其顶点(或控制点)的vs实例的图元表。除了任务表之外,还存储图元表。图元表中的每个条目针对每个图元最多存储32个顶点,这是针对补片的控制点的最大数目。在任务表中,对于hs/ds/gs任务中的每个实例,只需要存储输入图元索引,而不是对输入顶点或控制点的多达32个引用。这些引用可以通过使用图元索引在图元表中执行查找来获得。当添加hs、ds或gs实例时,任务组合单元340搜索图元表以获得其输入图元。如果在图元表中没有找到图元,则将图元添加到图元表。当具有引用图元的实例的所有任务已经被冲刷时,将该图元从图元表逐出。为了实现这一点,引用计数可以被存储在图元表的每一行中,并且当创建(增加引用计数)或冲刷(减少引用计数)读取该图元的顶点的任务时被更新。作为示例,在给定时间可能有多达256个具有正在进行(inflight)的任务的图元。图13示出了任务表1302的示例,其存储对存储在图元表1304中的针对hs、ds和gs任务内的计算实例的输入和输出的图元的引用。表1304的标签是对处理图元的gs或hs实例的输出的lut引用。该表可以实现为组关联或完全关联。每行存储对图元的顶点的多达32个lut引用,这些顶点由vs实例生成并且向由标签标识的hs或gs实例提供输入。例如,hs任务0的实例0处理lut条目6991中的图元,并且图元表1304指示针对该图元的顶点的lut引用。在运行hs任务之前,需要标识产生这些顶点的vs实例(通过图元表),并且从高速缓存中读取它们的数据。任务表1302不存储针对vs、hs或gs任务的输入引用。也就是说,任务表1302仅存储针对vs任务的输出引用(因为它们是第一着色器阶段,使得它们的输入不需要被存储)和针对hs/gs任务的输出引用(因为它们的输入可以通过在图元表中的查找而被确定)。但是,对于ds任务,还需要对hs输出的引用。当ds读取由vs生成的输入控制点时,通过在图元表中执行hs引用的查找来获得引用。在128个开放任务和具有开放任务的256个图元的限制下,任务表1302需要13kb(即128个任务×(32个输出+32个hs引用)×13位=106496位=13kb),并且图元表1304需要~14kb(即256个图元×(1个hs/gs引用×13位+32个vs引用×13位+针对引用计数的log2128位)=256×436位=13.625kb)。对于具有最多256个图元的表,这相当于~14kb的存储。因此,此选项显著减少了引用所需要的存储,但是它需要维护和更新另一表(图元表)。

在第四选项中,将输入引用存储在高速缓存336中,而不是在任务表中。在此示例中,输出引用仍存储在任务表中。如上所述,每个任务的每个计算实例存在一个输出引用。针对着色器实例的输出引用标识高速缓存336的一部分:对于被调度的实例,高速缓存的该部分包含参考被调度的实例的输入的输入描述符;以及对于准备好的(或“可用的”)实例,高速缓存的该部分包含由实例产生的输出数据。通常,输出数据替换输入描述符,但有时输出数据和输入描述符在着色器执行之后被保留,并且与输出数据一起被存储。在设置任务用于执行时,读取任务中的每个实例的输入描述符。使用存储在输入描述符中的输入引用,从高速缓存中读取实例的输入(例如,针对hs实例的vs输出)。一旦任务中的所有实例的所有输入都已被读取,则可以执行该任务。如果可以在任务被输出用于执行之后丢弃输入描述符,则针对着色器实例的存储大小是输入描述符大小和输出大小的最大值。如果不能在任务被输出用于执行之后丢弃输入描述符,则针对着色器实例的存储大小是输入描述符大小加上输出大小。输入描述符不被丢弃的唯一情况是当ds直接读取vs输入时,因为hs不修改控制点:在这种情况下,ds输入描述符指向hs输入描述符,该hs输入描述符继而指向vs输出。因此,即使在hs运行之后,也必须存储hs输入描述符。作为在任务组合单元340中存储有128个开放任务的示例,任务组合单元340中存储引用所需要的数据量在该示例中是6.5kb(即128个任务×32个输出×13位=53248位=6.5kb)。因此,在任务组合单元340中需要非常少的存储,但是在该选项中可能需要更多的时间来设置任务,并且可能存在指针追踪的问题,并且可能需要更多的读取吞吐量用于着色器数据存储。替选地,为了减少针对ds的指针追踪量,对于ds任务中的每个ds实例,任务表可以包含对hs的引用。因此,可以在访问ds输入描述符之前读取hs输入描述符。在这种情况下,任务表将采用如第三选项中的13kb(即128个任务×(32个输出+32个hs引用)×13位=106496位=13kb)。

因此,存在多个选项用于减少用于存储由开放任务中的计算实例使用的引用的图块组合单元340的数据量。

在上述示例中,高速缓存系统334在处理管线中的hsr单元318和纹理化/着色单元320之前在光栅化逻辑306中被实现。在一些其他示例中,例如在如图9所示的系统900中,高速缓存系统可以在两个高速缓存子系统9341和9342中连同相应处理子系统一起被实现,其中第一子系统包括任务组合单元9401、任务依赖性单元9421和simd处理逻辑9461,并且第二子系统包括任务组合单元9402、任务依赖性单元9422和simd处理逻辑9462。第一子系统(9341、9401、9421和9461)在裁剪和变换逻辑330以及hsr单元318之前被实现;第二子系统(9342、9402、9422和9462)在处理管线中的裁剪和变换逻辑330以及hsr单元318之后(但在纹理化/着色单元320之前)被实现。图9中所示的具有与图3中相同的附图标记的组件以相同的方式操作。第一高速缓存子系统9341包括第一高速缓存9361和第一高速缓存控制器9381;并且第二高速缓存子系统9342包括第二高速缓存9362和第二高速缓存控制器9382。在这些示例中,第一子系统(9341、9401、9421和9461)可以被配置成仅对图形数据项的位置数据进行操作,并且如上所述在第一子系统的分层高速缓存9361中存储子图元的位置。任务组合单元9401、任务依赖性单元9421和simd处理逻辑9461根据上述示例操作以确定针对子图元的位置数据。hsr单元318仅对位置数据进行操作,因此在hsr单元318的操作之前不需要变换非位置属性。对于从hsr单元318输出的图形数据项(即,未被hsr单元318去除),第二子系统(9342、9402、9422和9462)对非位置属性(并且可选地对位置属性)进行操作,其中子图元推导的结果可以存储在第二子系统的分层高速缓存9362中,如上所述。任务组合单元9402、任务依赖性单元9422和simd处理逻辑9462根据上述示例操作以确定子图元的非位置属性。以这种方式,由simd处理逻辑9462仅为没有被hsr剔除的图元计算非位置属性。在第二子系统(9342、9402、9422和9462)中,可以再次计算图元的位置,或者从第一子系统的高速缓存9361中读取图元的位置。变换单元918用于将图元的非位置属性(并且也可能是位置属性)变换到渲染空间中。然后,将图元提供给纹理化/着色单元320用于处理,如上所述。

在另外的示例中,例如,在如图10所示的系统1000中,高速缓存系统1034和任务组合单元1040、任务依赖性单元1042和simd处理逻辑1046在处理管线中可以在hsr单元318之后但在纹理化/着色单元320之前被实现。在这些示例中,几何处理逻辑1004类似于几何处理逻辑304,但是可以发送针对图元和子图元的经变换位置数据连同控制流一起用于存储在存储器1002中(例如,在经变换位置缓冲器1024中)。取回单元1016类似于取回单元316,但是可以取回由针对特定图块的控制流数据指示为在特定图块中的图元的经变换位置数据。hsr单元318可以对位置数据进行操作以用于执行隐藏表面去除。从hsr单元318输出的图元(即,没有被hsr剔除的图元)被传递到高速缓存系统1034,高速缓存系统1034包括高速缓存1036和高速缓存控制器1038并且被配置成存储图元的非位置属性。高速缓存系统1034以与上述分层高速缓存系统334类似的方式操作,并且可以存储从hsr单元318输出的图元的非位置属性。任务组合单元1040、任务依赖性单元1042和simd处理逻辑1046根据上述示例操作以确定子图元的非位置属性。针对图元的数据(位置和非位置属性)可以被提供给变换单元1018,变换单元1018将图元的非位置属性(并且也可能是位置属性)变换到渲染空间中。然后,将图元提供给纹理化/着色单元320用于处理,如上所述。分层高速缓存系统1034可以根据上文关于高速缓存系统334所描述的原理来操作。

在另一替选方案中,经变换位置数据可以在几何处理阶段之后(例如在经变换位置缓冲器1024中)被存储用于一些图元,而对于其他图元,存储未变换位置数据。例如,对于简单图元,可以将经变换位置数据存储在存储器中,但是可以通过以未变换状态存储针对可以通过镶嵌被生成的大量(例如数百万)图元的位置数据,来避免存储这些图元的主存储器中的存储器消耗。

图14示出了可以实现图形处理系统300的计算机系统。计算机系统包括cpu1402、gpu1404、存储器302和其他设备1406,诸如显示器1408、扬声器1410和相机1412。几何处理逻辑304和光栅化逻辑306在gpu1404上被实现。在其他示例中,几何处理逻辑304和光栅化逻辑306可以在cpu1402上被实现。计算机系统的组件可以经由通信总线1414彼此通信。

在上述示例中,使用光栅化过程来渲染图元。在其他示例中,可以使用诸如光线跟踪的其他技术来渲染图元。在这些其他示例中,高速缓存系统334、任务组合单元340、任务依赖性单元342和simd处理逻辑346可以基于与上述示例中描述的相同的原理来操作,使得计算实例被聚集到要被输出到simd处理逻辑346的任务中。

通常,可以使用软件、固件、硬件(例如,固定逻辑电路)、或这些实现的任意组合在模块中实现上述任何功能、方法、技术或组件(例如几何处理逻辑304和光栅化逻辑306的组件)。本文中使用的术语“模块”、“功能”、“组件”、“块”、“单元”和“逻辑”通常表示软件、固件、硬件或其任意组合。

在几何处理逻辑304和光栅化逻辑306的组件中的一些的软件实现的情况下,这些组件表示当在处理器上执行时执行指定任务的程序代码。在一个示例中,几何处理逻辑304和光栅化逻辑306的单元和逻辑可以由被配置有以机器可读的形式存储在计算机可读介质上的软件的计算机来执行。计算机可读介质的一种这样的配置是信号承载介质,并且因此被配置成诸如经由网络将指令(例如,作为载波)传输到计算设备。计算机可读介质还可以被配置为非暂态计算机可读存储介质,并且因此不是信号承载介质。计算机可读存储介质的示例包括随机存取存储器(ram)、只读存储器(rom)、光盘、闪存、硬盘存储器、以及可以使用磁、光和其他技术存储指令或其他数据并且可以由机器访问的其他存储器设备。

软件可以是包括用于配置计算机以执行所描述的方法的组成部分的计算机程序代码的计算机程序的形式,或者是包括当程序在计算机上运行时并且在计算机程序可以在计算机可读介质上实现的情况下适于执行本文中所描述的方法中的任何方法的所有步骤的计算机程序代码装置的计算机程序的形式。程序代码可以存储在一个或多个计算机可读介质中。本文中所描述的技术的特征是平台无关的,这意味着该技术可以在具有各种处理器的各种计算平台上被实现。

本领域技术人员还将认识到,本文中所描述的功能、技术或方法的全部或一部分可以由专用电路、专用集成电路、可编程逻辑阵列、现场可编程门阵列等来执行。例如,模块、功能、组件、单元或逻辑(例如,几何处理逻辑304和光栅化逻辑306的组件)可以包括以电路形式的硬件。这样的电路可以包括晶体管和/或在制造过程中可用的其他硬件元件。这样的晶体管和/或其他元件可以用于形成实现和/或包含存储器(诸如寄存器、触发器或锁存器)、逻辑运算器(诸如布尔运算)、数学运算器(诸如加法器、乘法器、或移位器)和互连的电路或结构。这样的元件可以作为定制电路或标准单元库、宏或其他级别的抽象来提供。这样的元件可以以特定的布置互连。模块、功能、组件、单元或逻辑(例如,几何处理逻辑304和光栅化逻辑306的组件)可以包括固定功能电路和可以被编程以执行一个或多个功能的电路;这样的编程可以从固件或软件更新或控制机制来提供。在示例中,硬件逻辑具有实现固定功能操作、状态机或过程的电路。

还旨在包括“描述”或定义实现上述的模块、功能、组件、单元或逻辑的硬件(例如,几何处理逻辑304和光栅化逻辑306的组件)的配置的软件,诸如用于设计集成电路或用于配置可编程芯片以执行所需功能的hdl(硬件描述语言)软件。也就是说,可以提供其上编码有以集成电路定义数据集形式的计算机可读程序代码的计算机可读存储介质,当在集成电路制造系统中被处理时,计算机可读程序代码配置该系统以制造图形处理系统,该图形处理系统被配置成执行本文中所描述的任何方法或者制造包括本文中所描述的任何装置的图形处理系统。ic定义数据集可以是例如以合适的hdl编写的计算机代码的形式,诸如寄存器传送级(rtl)代码。现在将参照图15描述在集成电路制造系统处处理集成电路定义数据集以便配置系统以制造图形处理系统的示例。

图15示出了包括布局处理系统1504和集成电路生成系统1506的集成电路(ic)制造系统1502的示例。ic制造系统1502被配置成接收ic定义数据集(例如,定义如本文中的任何示例中所述的图形处理系统),处理ic定义数据集,并且根据ic定义数据集来生成ic(例如,其实施如本文中的任何示例中所描述的图形处理系统)。ic定义数据集的处理配置ic制造系统1502以制造实施如本文中的任何示例中所描述的图形处理系统的集成电路。更具体地,布局处理系统1504被配置成接收和处理ic定义数据集以确定电路布局。从ic定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成rtl代码以确定要被生成的电路的门级表示,例如,在逻辑组件(例如,nand、nor、and、or、mux和触发器组件)方面。可以通过确定针对逻辑组件的位置信息来从电路的门级表示确定电路布局。这可以自动地或者在用户参与的情况下完成,以便优化电路布局。当布局处理系统1504已经确定了电路布局时,其可以向ic生成系统1506输出电路布局定义。如本领域中已知的,ic生成系统1506根据电路布局定义来生成ic。例如,ic生成系统1506可以实现半导体器件制造工艺以生成ic,其可以涉及光刻和化学处理步骤的多步骤序列,在该步骤期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可以是可以在蚀刻工艺中使用用于根据电路定义生成ic的掩码的形式。替选地,提供给ic生成系统1506的电路布局定义可以是计算机可读代码的形式,ic生成系统1506可以使用该代码来形成合适的掩码用于在生成ic时使用。由ic制造系统1502执行的不同过程可以全部在一个位置中被实现,例如,由一方。替选地,ic制造系统1502可以是分布式系统,使得过程中的一些可以在不同位置处被执行,并且可以由不同方执行。例如,以下阶段中的一些阶段:(i)合成表示ic定义数据集的rtl代码以形成要被生成的电路的门级表示,(ii)基于门级表示生成电路布局,(iii)根据电路布局形成掩码,以及(iv)使用掩码制造集成电路,可以在不同位置中和/或由不同方执行。

在其他示例中,在集成电路制造系统处的集成电路定义数据集的处理可以配置系统以制造图形处理系统,而不对ic定义数据集进行处理,以便确定电路布局。例如,集成电路定义数据集可以定义可重构处理器(诸如fpga)的配置,并且该数据集的处理可以配置ic制造系统以生成具有所定义的配置的可重构处理器(例如,通过将配置数据加载到fpga)。

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

术语“处理器”和“计算机”在本文中用于指代具有处理能力使得其可以执行指令的任何设备或其部分、或者能够执行全部或部分功能或方法的专用电路、或其任意组合。

虽然已经以特定于结构特征和/或方法动作的语言描述了主题,但是应当理解,所附权利要求中限定的主题不一定限于上述具体特征或动作。相反,上面描述的具体特征和动作被公开作为实现权利要求的示例形式。应当理解,上述的益处和优点可以涉及一个示例或者可以涉及若干示例。

如对本领域技术人员显而易见的,本文中给出的任何范围或值可以被扩展或改变而不失去所寻求的效果。本文中所描述方法的步骤可以以任何合适的顺序进行,或在适当的情况下同时进行。上述任何示例的方面可以与所描述的任何其他示例的方面组合以形成另外的示例而不失去所寻求的效果。

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