图形处理

文档序号:1954554 发布日期:2021-12-10 浏览:25次 >En<

阅读说明:本技术 图形处理 (Graphics processing ) 是由 O·H·乌伦霍尔特 S·卡卡拉普迪 于 2021-05-07 设计创作,主要内容包括:本发明题为“图形处理”。本发明公开了一种操作图形处理器的方法,该图形处理器包括可渲染基元以使用不同的着色率生成渲染输出的渲染器。基于基元的深度值来确定用于渲染该基元的着色率。这可减少渲染渲染输出所需的处理工作,同时保持可接受的图像质量。(The invention provides graphics processing. A method of operating a graphics processor including a renderer that can render primitives to generate rendered outputs using different shading rates is disclosed. A shading rate for rendering the primitive is determined based on the depth value of the primitive. This may reduce the processing effort required to render the rendered output while maintaining acceptable image quality.)

具体实施方式

本文所述技术的第一实施方案包括一种操作图形处理器的方法,所述图形处理器包括渲染器,所述渲染器可操作为渲染基元以使用不同的着色率生成渲染输出;所述方法包括:

当渲染基元时,基于所述基元的一些或全部的深度值来确定用于渲染所述基元的着色率;以及

所述渲染器使用基于根据所述深度值确定的所述着色率的着色率来渲染所述基元的一些或全部。

本文所述技术的第二实施方案包括一种图形处理器,所述图形处理器包括渲染器电路,所述渲染器电路可操作为渲染基元以使用不同的着色率生成渲染输出;所述图形处理器还包括:

着色率确定电路,所述着色率确定电路被配置为基于基元的一些或全部的深度值来确定用于渲染所述基元的着色率;

其中所述渲染器电路被配置为使用着色率来渲染基元的一些或全部,所述着色率基于由所述着色率确定电路根据所述基元的一些或全部的深度值确定的着色率。

本文所述的技术涉及其中可使用多个不同的可能着色率中的一个或多个着色率来渲染渲染输出的布置,诸如在“可变速率着色”(VRS)的情况下。也就是说,本文所述的技术涉及其中渲染器渲染(采样)单个颜色的渲染输出的区域可以是多种不同可能性中的一种可能的布置。

例如,并且在一个实施方案中,当使用相对精细的着色率时,渲染器可针对渲染输出的仅对应于单个像素的区域对单个颜色进行采样。然而,当使用更粗略的着色率时,渲染器可针对渲染输出的对应于多个像素的块的区域对单个颜色进行采样。

在本文所述的技术中,在确定用于渲染基元的着色率时考虑(Z)深度,使得用于渲染基元的着色率(至少部分地)基于该基元的(Z)深度值。例如,并且在一个实施方案中,第一着色率用于在具有第一(Z)深度的渲染输出中渲染第一基元,并且第二不同的着色率用于在具有第二不同(Z)深度的渲染输出中渲染第二基元。

申请人已经认识到,可能有利的是根据深度改变渲染输出中的处理工作与图像质量之间的平衡。例如,通常情况下在渲染输出的更远离相机(或渲染输出的平面)的区域中,较低渲染质量(例如,就总体感知的图像质量而言)可能是可接受的,使得与渲染输出的更靠近相机(或渲染输出的平面)的区域相比,可在此类区域上花费更少的处理工作。类似地,在应用于渲染输出的模糊程度取决于深度的“景深”方法的情况下,与存在较少模糊的区域相比,较低渲染质量可对渲染输出的应用较大模糊程度的区域中的总体图像质量具有更小的影响。

本文所述的技术通过基于(Z)深度值确定着色率来促进这一点。这意味着,例如,并且在一个实施方案中,可以使用更精细的着色率来渲染更靠近相机(或渲染输出的平面)的基元,并且可以使用更粗略的着色率来渲染更远离相机(或渲染输出的平面)的基元。类似地,并且在一个实施方案中,与将经受更大程度“景深”模糊的深度处的基元相比,更精细的着色率可用于在将经受更低程度“景深”模糊的深度处渲染基元。

这从而意味着可减少渲染渲染输出(例如,用于显示的帧)所需的总体处理工作,同时保持可接受的图像质量。

因此,应当理解,本文所述的技术提供了改进的图形处理器。

该图形处理器应该(并且在一个实施方案中,确实)生成渲染输出。因此,一个实施方案中的渲染器(电路)通过渲染一个或多个基元来生成渲染输出。应当理解,并且在一个实施方案中,该渲染器可以渲染多个基元以便生成渲染输出。在这种情况下,每个基元在一个实施方案中以本文所述技术的方式进行渲染。

该渲染输出可包括任何合适的渲染输出,诸如用于显示的帧或渲染到纹理的输出等……在一个实施方案中,该渲染输出是图形处理器生成的多个输出帧序列中的输出帧。在这种情况下,每个输出帧在一个实施方案中以本文所述技术的方式生成。

该渲染输出通常将包括数据元(采样点)(例如,像素)阵列,针对这些数据元中的每个数据元生成适当的渲染输出数据(例如,颜色值数据集合)。该数据可包括例如红色、绿色和蓝色RGB值集合和透明度(α,a)值。

可生成该渲染输出以用于在具有显示器或包括多个像素的输出的显示设备(诸如计算机监视器或打印机)上显示。因此,对于显示设备的每个输出像素,该渲染输出可包括一个或多个对应数据元(采样点)的集合。每个此类数据元(采样点)集合可仅包括单个数据元(采样点)。另选地,每个数据元集合可包括多个数据元(采样点)。在后一种情况下,每个采样点可有效地对应于显示设备的像素的一部分(例如,子像素),并且该渲染输出可经受适当的下采样操作以生成用于在显示设备上显示最终图像的输出像素值。

该渲染输出应该(并且在一个实施方案中,是)由渲染器(电路)使用多个可能的不同着色率中的一个或多个着色率来生成。因此,在一个实施方案中,存在图形处理器支持和可以使用的多个可能的着色率的集合。因此,在一个实施方案中,确定着色率包括(着色率确定电路)从该多个可能的着色率集合中选择着色率。

相应地,应该存在(并且在一个实施方案中,存在)多个可能的不同大小的渲染输出区域的集合,渲染器可针对该集合对单组颜色值数据(单个颜色)进行采样(渲染)。因此,在一个实施方案中,渲染(该)基元的一些或全部的渲染器(电路)包括渲染器对该基元的一个或多个颜色值数据(颜色)集合进行采样,其中针对其对每组颜色值数据(颜色)进行采样的渲染输出的区域具有符合所使用的着色率的大小。

该多个可能的渲染输出区域集合中的最小渲染输出区域可被称为“精细像素”,并且另一个较大的渲染输出区域可被称为“粗略像素”。每个“精细像素”可具有与输出显示设备的像素相同的大小和位置。另选地,例如在待应用下采样的情况下,每个“精细像素”可对应于输出显示设备的少于一个像素。

在一个实施方案中,每个可能的“粗略像素”的区域对应于多个“精细像素”的块。

可根据着色率所对应的精细像素的数量来指代不同的可能着色率。例如,1×1着色率可表示最精细的可能着色模式,其中针对渲染输出的对应于单个精细像素的区域对单组颜色值数据进行采样,而2×2着色率可表示针对渲染输出的对应于2×2精细像素的块的区域对单个颜色值数据集合进行采样。

该多个可能着色率集合可包括任何合适的着色率。在一个实施方案中,该多个可能着色率集合包括1×1、1×2、2×1、2×2、2×4、4×2和4×4着色率。其他着色率将是可能的。

基元的一些或全部的深度值应该是(并且在一个实施方案中,是)Z深度值(即,表示基元所位于处到正被渲染场景中的距离),例如,在垂直于渲染输出的平面(例如,生成的帧)的方向上从该渲染输出的平面到该基元的距离,或者在视图方向上从相机(视点)到该基元的距离。

基元的一些或全部的(Z)深度值可以表示该基元的一些或全部的任何合适的深度,诸如该基元的一些或全部的最小、最大或平均(Z)深度,或者该基元在特定位置处的(Z)深度,诸如其中心(例如,质心),例如,如投影到渲染输出的平面上。

基元的(Z)深度值可以是(表示)(整个)该基元的全部的深度值,或者是(表示)(仅)该基元的一些的深度值。在一个实施方案中,(Z)深度值表示(仅)基元的区域。例如,并且在一个实施方案中,基元的(Z)深度值是从该基元生成的片段的(Z)深度。

因此,在一个实施方案中,图形处理器包括被配置为光栅化基元以生成片段的光栅化器(rasteriser)(电路);该渲染器(电路)可操作为通过渲染由该光栅化器生成的片段来渲染基元;该光栅化器光栅化该基元以生成片段;并且通过(着色率确定电路)基于该片段的深度值确定着色率来执行确定着色率。该渲染器(电路)然后可使用基于根据该片段的深度值确定的该着色率的着色率来渲染该片段。

可(通过光栅化器)从(相同的)基元生成一个或多个(例如,多个)片段。在这种情况下,在一个实施方案中,考虑从基元生成的一个或多个或每个片段的深度值,并且以本文所述技术的方式相应地处理该片段。因此,应当理解,渲染(该)基元的全部的渲染器(电路)可包括渲染器渲染由光栅化器(电路)从该基元生成的每个片段(针对其对颜色值进行采样)。相应地,渲染器渲染(该)基元的一些可包括渲染器渲染由光栅化器从该基元生成的片段中的一个或多个(但不是全部)片段(针对其对颜色值进行采样)。

申请人已经认识到,对于渲染输出中的不同采样点(例如,像素),与渲染输出的平面不平行的基元的Z深度可能是不同的。通过将基元的深度值确定为从该基元生成的一个或多个片段的(Z)深度值,能够以简单的方式考虑任何此类深度变化。例如并且在一个实施方案中,这然后允许使用多个不同的着色率来渲染单个(该)基元。例如,可以使用第一着色率来渲染具有第一深度的基元的第一区域(作为第一片段),并且可以使用第二不同的着色率来渲染具有第二不同深度的(相同的)基元的第二区域(作为第二不同片段)。这然后可允许减少渲染该基元所需的处理工作。

光栅化器(电路)将生成用于渲染以针对渲染输出的采样点生成渲染输出数据的图形片段。由光栅化器生成的每个片段应该(并且在一个实施方案中,确实)具有与其相关联的渲染输出的采样点集合,并且可以用于针对与片段相关联的采样点集合中的一个或多个采样点生成渲染输出数据。

可以根据需要选择与每个片段相关联的采样点集合。每个采样点集合(以及相应地,每个采样点)将表示渲染输出中的位置(x、y位置),例如待显示的帧。还可以根据需要选择每个采样点集合中的采样点的模式和(相对)位置(采样模式)。

在渲染输出将被显示在具有显示器或包括多个像素的输出的显示设备上的情况下,在一个实施方案中,片段可与之相关联的每个采样点集合对应于输出设备(例如,显示器或打印机)的给定像素(像素位置)的采样点集合,或者对应于输出设备的像素的一部分(例如,子像素)的采样点集合。在后一种布置中,在一个实施方案中,多个采样点集合的组构成显示器的像素的采样点的总体集合。在这些布置中,每个片段可以有效地渲染显示设备(例如,显示器或打印机)的给定像素的片段数据。

片段的(Z)深度值可以表示任何合适和期望的深度。例如,片段的(Z)深度值可以表示片段中心(例如,与该片段相关联的所有采样点的中心)处的(Z)深度。另选地,片段的(Z)深度值可以表示质心采样位置处(例如,最靠近与该片段相关联的所有被覆盖的采样点的中心的采样点的位置处)的(Z)深度。

另选地,片段的(Z)深度值可以根据在与该片段相关联的每个(在一个实施方案中,被覆盖的)采样点位置处的(Z)深度来确定。例如,可确定最小、平均或最大(Z)深度。

(Z)深度值可仅用于确定着色率的目的。然而,在一个实施方案中,(Z)深度值(也)用于其他目的。例如,并且在一个实施方案中,除了用于确定着色率之外,(Z)深度值还用于执行Z深度测试。因此,可重复使用相同的(Z)深度值。这可减少总体处理工作。

因此,在一个实施方案中,图形处理器包括深度测试电路;并且该深度测试电路使用与着色率确定电路用于确定着色率相同的深度值来执行深度测试。所使用的(Z)深度值可由深度测试电路确定。

不通过深度测试的片段应被(并且在一个实施方案中,被)丢弃(剔除)并因此不被渲染器渲染,而通过深度测试的片段应(并且在一个实施方案中,确实)传递到图形处理流水线的后期阶段进行处理。

一旦确定了深度值,就可以任何合适和期望的方式基于该深度值来确定着色率。

在一个实施方案中,一个或多个可能的深度值中的每个深度值与相应的着色率相关联,然后在一个实施方案中基于深度值通过(着色率确定电路)确定深度值与之相关联的着色率来确定着色率。

深度值和着色率可以任何合适和期望的方式彼此相关联。在一个实施方案中,正在生成渲染输出并且在一个实施方案中由主机处理器执行的应用程序针对一个或多个深度值中的每个深度值指定基于深度的着色率。

因此,在一个实施方案中,着色率由图形处理器(的着色率确定电路)确定基于深度值来确定,该图形处理器确定已经由正在生成渲染输出的应用程序针对深度值指定的着色率。

由应用程序指定的基于深度的着色率可以任何合适和期望的方式(从主机处理器)传送到图形处理器。在一个实施方案中,应用程序向用于在主机处理器上执行的图形处理器的驱动器发送指示所指定着色率的命令和/或数据,该驱动器响应于此而向该图形处理器发送指示所指定着色率的命令和/或数据。

因此,在一个实施方案中,该方法包括(并且图形处理器被对应地配置)图形处理器接收指示由正在生成渲染输出的应用程序指定的着色率的命令和/或数据,以及(着色率确定电路)根据命令和/或数据确定基于深度的着色率。因此,这些命令和/或数据应该(并且在一个实施方案中,确实)指示基于深度的着色率应如何根据深度而变化。

可以任何合适和期望的方式来指示着色率应根据深度而变化的方式(通过命令和/或数据)。例如,可提供指定着色率应如何根据深度而变化的函数(通过应用程序)。

在一个实施方案中,提供了指示一个或多个深度或深度范围中的每一者的着色率的信息(通过应用程序);并且通过(着色率确定电路)确定由对应于深度值的深度或深度范围的信息指示的着色率来确定基于深度的着色率。

该着色率指示信息可采用任何合适和期望的形式,但在一个实施方案中为阵列形式,其指定了着色率应如何根据深度变化,例如,并且在一个实施方案中为查找表的形式。申请人已经发现查找表是一种特别有效且方便的基于深度来指定着色率的方法。

着色率指示阵列(查找表)应该(并且在一个实施方案中,确实)包括数据元阵列,每个数据元指定特定深度或深度范围的着色率。然后在一个实施方案中,着色率(通过着色率确定电路)被确定为在对应于(Z)深度值的阵列(查找表)元素中指定的着色率。

着色率指示阵列(查找表)可明确地指定阵列中指定的每个着色率所适用的深度或深度范围。然而,在一个实施方案中,阵列中指定的每个着色率所适用的深度或深度范围对于该阵列是隐式的(即,阵列本身中未明确指定)。

例如,并且在一个实施方案中,着色率指示阵列(查找表)中的每个元素指定特定的(在一个实施方案中为选择的、在一个实施方案中为预先确定的)深度或深度范围的着色率。因此,(该)着色率指示阵列(查找表)在一个实施方案中为一维阵列,该一维阵列中的每个元素指定预先确定的深度或深度范围的着色率。这然后可减少指定着色率指示阵列(查找表)所需的数据量,并且促进对着色率指示阵列(查找表)的有效访问。

可根据需要选择对应于着色率指示阵列(查找表)的元素的(预先确定的)深度或深度范围。在一个实施方案中,最小深度和最大深度之间的范围被分成相等的深度子范围(即,每个深度子范围跨越相同的深度范围)。然后,基于着色率指示阵列(查找表)中的元素排序,将每个相等深度的子范围(隐式地)与着色率指示阵列(查找表)中的相应元素相关联。例如,在一个实施方案中,着色率指示阵列(查找表)中的第一个元素(隐式地)对应于最浅(或最深)深度子范围,并且在一个实施方案中,着色率指示阵列(查找表)中的最后一个元素(隐式地)对应于最深(或最浅)深度子范围等。在这种情况下,着色率指示阵列(查找表)中的元素数量应相应地(精确地)等于深度子范围的数量。

最小深度和最大深度可以是任何合适的深度。在一个实施方案中,最小深度和最大深度分别对应于基元可具有并且在渲染输出中被渲染的最小深度和最大深度。即,在一个实施方案中,最小深度和最大深度分别对应于所使用的视锥的近平面和远平面的深度。

因此,在一个实施方案中,(该)着色率指示阵列(查找表)包括有序元素的(一维)阵列。因此,每个元素可(并且在一个实施方案中)(隐式地)与能够标识相应元素的相应索引值相关联。例如,在一个实施方案中,着色率指示阵列(查找表)包括N个元素,其中第一个元素由索引i=0指代,并且最后一个元素由索引i=N-1指代。然后在一个实施方案中,通过(着色率确定电路)确定对应于(Z)深度值的着色率指示阵列(查找表)元素的索引值,然后检索在该着色率阵列(查找表)中该索引值处指定的着色率来确定着色率。

可以任何合适和期望的方式确定到(该)着色率指示阵列(查找表)的索引。在一个实施方案中,从(Z)深度值确定到(该)着色率指示阵列(查找表)的索引。例如,并且在一个实施方案中,从深度值Z通过计算:来确定到具有N个条目的查找表的索引值i(=0、1、...、N-1),并且四舍五入到最接近的整数,其中Zmin和Zmax分别为最小深度和最大深度。

在一个实施方案中,图形处理器(的着色率确定电路)包括一个或多个功能单元,这些功能单元各自可操作为执行融合乘加(FMA)操作,并且索引确定操作被优化以供这些“FMA单元”执行。申请人已经认识到,如将在下文更详细地讨论,可以通过FMA单元执行单个融合乘加操作来以特别有效的方式执行指数确定操作。

因此,在一个实施方案中,图形处理器(的着色率确定电路)包括可操作为执行融合乘加(FMA)操作的一个或多个功能单元;并且在一个实施方案中,该一个或多个功能单元中的一个功能单元通过执行单个融合乘加(FMA)操作来从深度值确定索引值。该单个融合乘加(FMA)操作可以是融合乘加缩放操作,即包括缩放融合乘加(FMA)操作的结果的操作。

此外,并且如下文还将更详细地讨论,申请人已经认识到,该操作所需的常数也可由FMA单元确定。因此,在一个实施方案中,该一个或多个功能单元中的一个功能单元确定在单个融合乘加(FMA)操作中使用的一个或多个常数。

指示着色率应如何随深度(例如,以(该)着色率指示阵列(查找表)的形式)变化的信息可由从外部存储器(即,与图形处理器不在同一芯片上的存储器)读取的图形处理器(的着色率确定电路)访问。然而,申请人已经认识到这可导致延迟和带宽要求增加。因此,在一个实施方案中,信息(着色率指示阵列(查找表))被本地存储到图形处理器,即存储在与图形处理器在同一物理芯片上的存储装置(存储器)中。图形处理器(的着色率确定电路)然后访问本地存储的信息以便确定着色率。例如,这然后可减少延迟和带宽要求。

着色率可以任何合适和期望的方式根据深度而变化。一般来讲,可针对已知或可能是图像质量的任何所得降低对于用户而言将不太明显和/或更可接受的深度来指定更粗略的着色率。相反,可针对已知或可能是图像质量的任何所得降低对于用户而言将更明显和/或不太可接受的深度来指定更精细的着色率。

例如,并且在一个实施方案中,可针对较浅深度(更靠近相机/渲染输出的平面)指定更精细的着色率,并且可针对较深深度(更远离相机/渲染输出的平面)指定更粗略的着色率。除此之外或另选地,可针对将较大程度的失真(例如,模糊)应用于渲染输出的深度指定更粗略的着色率,并且可针对将较小程度的失真(例如,模糊)应用于渲染输出的深度指定更精细的着色率。

一旦基于基元(从其生成片段)的深度值确定了着色率,则该着色率可由渲染器(电路)用于渲染基元(从其生成片段),而不管任何其他因素如何。另选地,当确定由渲染器(电路)使用的最终着色率时,可考虑一个或多个其他因素。因此,由渲染器(电路)使用的着色率可基于深度值,并且在一个实施方案中基于一个或多个其他因素来确定。

例如,并且在一个实施方案中,可基于基元的一些或全部的深度值以及以下各项中的任何一者或多者来确定用于渲染基元的着色率:基元所属的绘制调用、基元与之相关联的发起顶点,以及基元落入其内的渲染输出的区域。

在一个实施方案中,针对待考虑的每个此类因素确定着色率,然后基于每个此类确定的着色率来确定由渲染器实际使用的着色率。因此,由渲染器使用的着色率在一个实施方案中基于根据深度值确定的着色率来确定,并且在一个实施方案中基于各自根据另一个因素确定的一个或多个着色率来确定。

在这种情况下,基于不同因素确定的着色率可能彼此不同。因此,在一个实施方案中,基于不同因素确定的着色率被组合成由渲染器使用的单个着色率。

该组合可以任何合适的方式进行。在一个实施方案中,使用组合函数将着色率组合成单个着色率。该组合函数可指定例如基于不同因素确定的着色率应通过使用最精细或最粗略的着色率、或通过确定和使用平均着色率来组合。

在一个实施方案中,应用于确定着色率的因素和/或用于组合任何不同着色率的组合函数由正在生成渲染输出的应用程序来指定。

因此,应当理解,渲染器(电路)实际用于渲染基元(从其生成的片段)的着色率可以与基于深度值(单独地)确定的着色率相同或不同。

一旦已经确定了待使用的着色率,渲染器(电路)就在渲染(从其生成的片段)基元时使用该着色率。这应该(并且在一个实施方案中,确实)具有以下效果:与确定更粗略的着色率相比,当确定更精细的着色率时由渲染器对更多数量的颜色进行采样。这可以任何合适和期望的方式实现。

例如,光栅化器(电路)可以基于着色率将基元光栅化为片段,使得渲染输出的与由该光栅化器生成的片段对应的区域根据着色率而变化。因此,在一个实施方案中,光栅化器(电路)根据所使用的着色率来将基元光栅化。例如,当使用更粗略的着色率时,光栅化器可以生成对应于渲染输出的较大区域的片段,并且当使用更精细的着色率时,生成对应于渲染输出的较小区域的片段。渲染器然后可对每个这样生成的片段的单个颜色值数据集合(单个颜色)进行采样。与使用更粗略的着色率相比,当使用更精细的着色率时,这将具有生成更多数量的片段的效果,从而对颜色进行采样。

在一个实施方案中,光栅化器(电路)可操作为以“正常”方式生成片段。也就是说,在一个实施方案中,光栅化器(始终)操作以生成片段,每个片段对应于渲染输出的相同大小的区域,例如对应于一个像素或子像素(“精细像素”),而不管所使用的着色率如何。然后在一个实施方案中,根据所使用的着色率将以这种方式生成的片段“组合”成一个或多个片段集合,并且针对每个此类一个或多个片段集合对单组颜色值数据(单个颜色)进行采样。例如,并且在一个实施方案中,与使用更精细的着色率时相比,当使用更粗略的着色率时,在片段集合中包括更多数量的片段。这将具有以下效果:与使用更粗略的着色率相比,当使用更精细的着色率时,对更多数量的颜色进行采样。

该片段的“组合”可以任何合适和期望的方式实现。

在一个实施方案中,渲染器(电路)包括可编程处理阶段(电路)(着色器),该可编程处理阶段可操作为通过执行(着色器)程序指令的执行线程来生成渲染输出数据。在一个实施方案中,通过执行(着色器)程序的每个执行线程来生成单个颜色值数据集合(对单个颜色进行采样)。在这种情况下,实际上通过在一个实施方案中针对每个一个或多个片段集合向可编程处理阶段(着色器)发布(仅)一个执行线程来“组合”片段。这于是具有以下效果:可编程处理阶段(着色器)针对每个一个或多个片段集合(仅)执行一次(着色器)程序,使得针对每个“组合”片段集合(仅)对单个颜色值数据集合进行采样。

在一个实施方案中,执行线程被分组为线程的“组”或“束”,其中一组线程以锁步的方式运行,一次一条指令。这可改善着色器程序执行效率,因为可以在组中的所有线程之间共享指令获取和调度资源。用于此类线程组的其他术语包括“线程束(warp)”和“线程组(wave front)”。为方便起见,本文将使用术语“线程组(thread group)”,但除非另外指明,否则这旨在涵盖所有等同的术语和布置。

在这种情况下,在一个实施方案中,片段的“组合”在确定待由可编程处理阶段(着色器)执行的线程组时发生。因此,在一个实施方案中,渲染器(电路)包括线程组生成阶段(电路),该线程组生成阶段可操作为生成包括供可编程处理阶段(电路)(着色器)执行的执行线程的线程组。

在这种情况下,在一个实施方案中,渲染基元的渲染器(电路)包括线程组生成阶段(电路)基于所使用的着色率(以及执行线程组中的执行线程的可编程处理阶段(电路)(着色器))生成包括供可编程处理阶段(着色器)执行的执行线程的线程组。

一旦渲染器(执行(着色器)程序)已对颜色(颜色值数据集合)进行了采样,该颜色就应该(并且在一个实施方案中,确实)被“广播”到渲染输出中该颜色所应用的每个(例如,覆盖的)采样位置。这应该(并且在一个实施方案中,确实)具有以下效果:与使用更精细的着色率相比,当使用更粗略的着色率时,单个颜色将用于渲染输出中的更多采样位置。

在一个实施方案中,渲染输出数据被“广播”到输出缓冲区(例如,图块缓冲区)中的每个对应采样位置。这可包括基于所使用的着色率将由渲染器(直接)产生的渲染输出数据写入输出缓冲区。另选地,在需要混合的情况下,图形处理流水线的混合器阶段可基于所使用的着色率将由渲染器新生成的渲染输出数据与已存储在输出缓冲区中的渲染输出数据适当地混合。

该图形处理器可以执行任何合适和期望的图形处理流水线,并且可以(并且在一个实施方案中,确实)包括用于该目的的任何合适和期望的处理电路、处理逻辑、部件和元件。

该图形处理器和图形处理流水线可以是(并且在一个实施方案中,是)可操作为生成总体渲染输出(例如,帧)的图块的基于图块的图形处理器和处理流水线。

该图形处理器执行的图形处理流水线可包括用于生成(该)渲染输出(例如,帧)的任何合适和期望的处理阶段。因此,除了上述阶段(诸如光栅化器、渲染器和深度测试器)之外,图形处理流水线可以包括(并且在一个实施方案中,确实包括)图形处理流水线通常包括的其他处理阶段中的任何一者或者一者或多者(并且在一个实施方案中,包括全部)。因此,例如,在一个实施方案中,图形处理流水线还包括顶点着色阶段、基元设置阶段等。在流水线为基于图块的流水线的情况下,在一个实施方案中,流水线还包括图块阶段和/或用于将图块缓冲区中的数据(例如,一旦图块缓冲区中的数据完成)写出到外部(主)存储器(例如,到帧缓冲区)的写出单元。

可根据需要实现图形处理流水线(处理器)的(和每个)处理阶段(电路),例如实现为固定功能硬件单元(电路)或实现为可编程处理电路(其被编程以执行期望的操作)。

如本领域的技术人员将理解的,本文所述技术的图形处理器可以是总体图形处理系统的一部分,该总体图形处理系统包括(例如,并且在一个实施方案中)主机处理器,该主机处理器例如执行需要由图形处理器处理的应用程序。该主机处理器将向图形处理器发送适当的命令和数据,以控制该图形处理器来执行图形处理操作并产生在主机处理器上执行的应用所需的图形处理输出。为了促进这一点,该主机处理器应该(并且在一个实施方案中,确实)还执行用于图形处理器的驱动器以及用于编译待由图形处理器(的可编程处理阶段(着色器))执行的程序的一个或多个编译器。

该图形处理器还可包括存储本文所述的数据和/或由图形处理器生成的输出数据,并且/或者存储用于执行本文所述的过程的软件(例如,(着色器)程序)的一个或多个存储器和/或存储器设备,并且/或者与该一个或多个存储器和/或存储器设备通信。图形处理器还可与主机微处理器通信,并且/或者与用于基于由图形处理器生成的数据来显示图像的显示器通信。

本文所述的技术可用于能够使用数据处理器(和处理流水线)生成的所有形式的输出。例如,就图形处理而言,图形处理流水线可以生成用于显示、渲染到纹理输出等的帧。在一个实施方案中,来自处理流水线的输出数据值被导出到外部(例如,主存储器)以用于存储和使用,诸如导出到用于显示的帧缓冲区。

本文所述的技术适用于图形处理器和图形处理系统的任何合适的形式或配置。其特别适用于基于图块的图形处理器和图形处理系统。因此,在一个实施方案中,图形处理器是基于图块的图形处理器(和流水线)。

在一个实施方案中,本文所述技术的各种功能在单个图形处理平台上执行,该单个图形处理平台生成和输出数据(诸如写入帧缓冲区的渲染片段数据),例如用于显示设备。

本文所述的技术可在任何合适的系统(诸如适当配置的基于微处理器的系统)中实现。在一个实施方案中,本文所述的技术在基于计算机和/或微处理器的系统中实现。

在一个实施方案中,本文所述的技术在便携式设备(诸如在一个实施方案中,移动电话或平板电脑)中实现。

本文所述技术的各种功能可以任何期望且合适的方式执行。例如,本文所述技术的功能可根据需要以硬件或软件实现。因此,例如,本文所述技术的各种功能元件、阶段和“装置”可包括一个或多个合适的处理器、一个或多个控制器、功能单元、电路、处理逻辑部件、微处理器布置等,这些元件能够操作以执行各种功能,诸如能够被编程以按期望方式操作的适当专用硬件元件(处理电路)和/或可编程硬件元件(处理电路)。

此处还应当指出的是,如本领域的技术人员将理解的,本文所述技术的各种功能等可在给定处理器上复制和/或并行执行。同样,如果需要,各种处理阶段可共享处理电路等。

本领域的技术人员还应当理解,本文所述技术的全部所述实施方案可视情况包括本文所述可选特征中的任何一者或多者或全部。

根据本文所述技术的方法可至少部分地使用软件例如计算机程序来实现。因此,可以看出,当从另外的实施方案来看时,本文所述的技术提供了:计算机软件,该计算机软件特别适于在安装在数据处理器上时执行本文所述的方法;计算机程序元件,该计算机程序元件包括用于当该程序元件在数据处理器上运行时执行本文所述方法的计算机软件代码部分;和计算机程序,该计算机程序包括适于当该程序在数据处理系统上运行时执行本文所述的一个或多个方法的所有步骤的代码。数据处理系统可以是微处理器、可编程FPGA(现场可编程门阵列)等……

本文所述的技术还扩展到包括此类软件的计算机软件载体,该软件在用于操作图形处理器、渲染器或包括数据处理器的其他系统时,致使所述处理器、渲染器或系统结合所述数据处理器执行本文所述的技术的方法的步骤。此类计算机软件载体可以是物理存储介质,诸如ROM芯片、CD ROM、RAM、闪存存储器或磁盘,或者可以是信号,诸如通过导线的电子信号、光信号或无线电信号,诸如到卫星的信号等。

还应当理解,并非本文所述技术的方法的所有步骤都需要由计算机软件执行,因此相对于另一个广泛的实施方案,本文所述的技术提供了计算机软件和安装在计算机软件载体上的用于执行本文所述方法的步骤中的至少一个步骤的此类软件。

因此,本文所述的技术可适当地体现为与计算机系统一起使用的计算机程序产品。此类具体实施可包括固定在有形非暂态介质上的一系列计算机可读指令,诸如计算机可读介质,例如磁盘、CD ROM、ROM、RAM、闪存存储器或硬盘。其还可包括一系列计算机可读指令,这些计算机可读指令能够经由调制解调器或其他接口设备通过有形介质(包括但不限于光通信线路或模拟通信线路)或者无源地使用无线技术(包括但不限于微波、红外或其他传输技术)传输到计算机系统。该系列计算机可读指令体现了本文先前所述的功能的全部或部分。

本领域的技术人员将会理解,此类计算机可读指令可以多种编程语言编写,以与许多计算机架构或操作系统一起使用。此外,此类指令可使用目前或将来的任何存储器技术(包括但不限于半导体、磁性或光学技术)来存储,或者使用目前或将来的任何通信技术(包括但不限于光学、红外或微波技术)来传输。可以设想的是,此类计算机程序产品可以作为带有附随的印刷或电子文档(例如收缩包装软件)的可移动介质分发,可以预加载计算机系统(例如系统ROM或固定磁盘),或者可以通过网络(例如互联网或万维网)从服务器或电子公告板分发。

现在将参考附图描述本文所述技术的实施方案。

当待显示计算机图形图像时,通常首先将其限定为一系列基元(多边形),然后将这些基元划分(光栅化)为图形片段,继而用于图形渲染。这些片段是经过渲染过程(渲染流水线)的处理实体。在正常图形渲染操作期间,渲染器通常针对每个片段对单个颜色(例如,红色、绿色和蓝色RGB值集合和透明度(α,a)值)进行采样,使得片段可被正确地显示。一旦这些片段已完全遍历渲染器,则将其相关联的颜色值存储在存储器中准备好输出,例如用于在显示设备上显示。

每个图形片段通常将具有与输出显示设备的“像素”相同的大小和位置。另选地,例如在待应用下采样的情况下,每个图形片段可有效地对应于输出显示设备的少于一个像素。

因此,渲染过程通常可产生包括采样点阵列的渲染输出,针对该采样点阵列中的每个采样点生成适当的数据(例如,颜色值数据集合)。对于每个输出像素,通常在渲染输出中存在一个或多个对应的采样点集合。每个此类采样点集合可包括仅一个采样点,或者在使用下采样的情况下,每个采样点集合可包括多个采样点。

如上所述,“可变速率着色”(VRS)是允许使用不同着色率来渲染渲染输出的技术,即,使得可以针对渲染输出中的多个可能的不同大小区域中的一个区域对单个颜色(颜色值数据集合)进行采样(渲染)。例如,可针对渲染输出的仅对应于单个像素的区域对单个颜色进行采样,或者可针对渲染输出的对应于多个像素的块中的每个像素的区域对单个颜色进行采样。

与对每个采样点的单独颜色进行采样相比,对单个颜色进行采样(渲染)并将其应用于多个采样点(例如,像素)将减少那些采样点所需的处理工作,但通常将以降低图像质量为代价。

在“可变速率着色”(VRS)中,通常将存在图形处理器支持并能够使用的多个可能的着色率集合。即,通常将存在可针对其对单个颜色(颜色值数据集合)进行采样的一组多个可能的不同大小的渲染输出区域。这些渲染输出区域中最小的可能区域可被称为“精细像素”,并且另一个较大的渲染输出区域可被称为“粗略像素”。

每个“精细像素”通常将具有与输出显示设备的像素相同的大小和位置。然而,例如在待应用下采样的情况下,每个“精细像素”也可以有效地对应于输出显示设备的少于一个像素。

每个可能的“粗略像素”的区域通常对应于多个“精细像素”的块。然后根据着色率所对应的精细像素的数量来指代不同的可能着色率。例如,1×1着色率将表示最精细的可能着色模式,其中应针对单个精细像素对单个颜色进行采样,而2×2着色率将表示应针对对应于2×2精细像素的块的区域对单个颜色进行采样。图形处理器通常可支持例如1×1、1×2、2×1、2×2、2×4、4×2和4×4着色率。

图2示出了使用1×1和2×2着色率正被渲染的示例性基元201的比较。图2示出了待相对于精细像素202的6×6块渲染的示例性基元201的位置。每个小正方形表示“可变速率着色”(VRS)过程的精细像素中的一个像素。

在1×1着色率的情况下,渲染过程针对基元覆盖的每个精细像素对单个颜色(颜色值数据集合)进行采样(渲染)。在这种情况下,基元201在图示的36个精细像素中的(覆盖)23个像素中是可见的,因此渲染过程将对总共23个颜色(颜色值数据集合)进行采样。

图2中的每个较大正方形表示在2×2着色率过程中使用的一个2×2粗略像素。每个2×2粗略像素涵盖2×2精细像素的块。在这种情况下,渲染过程针对基元覆盖的每个此类粗略像素对单个颜色(颜色值数据集合)进行采样(渲染)。在这种情况下,基元201覆盖图示的9个2×2粗略像素中的8个像素,因此渲染过程将仅对8个颜色(颜色值集合)进行采样。

因此,应当理解,与更精细的着色率相比,更粗略的着色率与较低密度的渲染颜色相关联。此外,应当理解,与使用更精细的着色率渲染基元201相比,使用更粗略的着色率渲染基元201将减少处理要求。然而,这通常将以降低图像质量为代价。

如上所述,申请人已经认识到,可能期望根据渲染输出中出现的对象的深度来改变着色率(即,针对其对单个颜色进行采样的渲染输出的区域的大小)。

例如,通常情况下在渲染输出的更远离相机(或渲染输出的平面)的区域中,较低渲染质量(例如,就总体感知的图像质量而言)可能是可接受的,使得与渲染输出的更靠近相机(或渲染输出的平面)的区域相比,可在此类区域上花费更少的处理工作。类似地,在应用于渲染输出的模糊程度取决于深度的“景深”方法的情况下,与存在较少模糊的区域相比,在渲染输出的应用较大模糊程度的区域中较低的渲染质量可能更可接受。

例如,图3示出了由相机在观察(Z)方向94上从视点93观察到的包括两个对象(锥体91和立方体92)的示例性场景90。在场景90的该视图中,立方体92位于比锥体91更浅的深度处(即,更靠近相机)。因此,对于锥体91使用比立方体92更低的渲染质量通常可能更可接受。

在本文所述的技术中,在确定用于渲染基元或片段的着色率时考虑(Z)深度。例如,可以使用更精细的着色率来渲染更靠近相机(或渲染输出的平面)的基元,并且可以使用更粗略的着色率来渲染更远离相机(或渲染输出的平面)的基元。这然后可导致渲染输出的区域的处理工作减少,在该区域渲染质量的随之而来的降低可能不太明显和/或更可接受。

因此,例如,不同的着色率可用于渲染具有不同深度的不同对象的基元。例如,在图3的示例中,可以使用比锥体91的基元更精细的着色率来渲染立方体92的基元。此外,不同的着色率可用于渲染具有不同深度的相同对象的不同基元。例如,在图3的示例中,可以使用更精细的着色率来渲染立方体92的更靠近相机的基元,而不是立方体92的更远的基元。此外,不同的着色率可用于渲染相同基元的具有不同深度的不同区域。例如,在图3的示例中,锥体91的正面可以是单个基元,该单个基元被光栅化为具有不同深度的多个片段,并且可使用更精细的着色率来渲染比更远的片段(或多个片段)更靠近相机的片段(或多个片段)。

这从而意味着可减少渲染渲染输出(例如,用于显示的帧)所需的总体处理工作,同时保持可接受的图像质量。

图1示出了可根据本文所述技术的实施方案操作的图形处理系统。该图形处理系统包括主机处理器(CPU)1、图形处理单元(GPU)3以及用于存储主机处理器1和图形处理器3所需和/或生成的数据的存储器5。

当正在主机处理器1上执行的应用程序2需要来自图形处理器3的图形处理(诸如待显示的帧)时,应用程序2向正在主机处理器1上运行的图形处理器3的驱动器4发送适当的命令和数据。

在本实施方案中,这些命令和数据包括指示应由图形处理器3在生成渲染输出时使用的着色率的信息。在本实施方案中,除了根据基元的深度来指定着色率之外,应用程序2还能够基于该基元所属的绘制调用和/或该基元与之相关联的发起顶点,和/或该基元出现在其内的渲染输出的区域来指定着色率。因此,除了指定“按深度”的着色率之外,应用程序2还可指定“按绘制调用”的着色率和/或“按基元”的着色率,和/或“按屏幕空间”的着色率。

在应用程序2基于两个或更多个不同标准指定着色率的情况下,则可能的情况是不同标准返回相同基元(片段)的不同着色率。因此,应用程序2还可指定应如何组合不同的着色率。为此,应用程序2指定了应用于组合不同着色率的组合器功能集合。例如,应用程序2可指定应通过使用最精细或最粗略的着色率,或通过确定平均着色率来组合不同的着色率。

响应于来自应用程序2的这些命令和数据,驱动器4然后向图形处理器3发送适当的命令和数据以使其生成应用程序2所需的渲染输出。驱动器4通过写入存储器5向图形处理器3发送命令和数据。

由驱动器4提供的命令和数据将包括用于渲染待由图形处理器3生成的渲染输出的基元的命令,以及表示待用于渲染输出的基元的顶点的相关联顶点数据。它们还将包括指示由应用程序2指定的着色率的信息。

发送到图形处理器3的命令使得图形处理器3从存储器5读取顶点数据,并且处理所读取的顶点数据以相应地生成渲染输出。图形处理器3通常将使用基元的顶点数据以将该基元光栅化为一个或多个片段,每个片段(潜在地)应用于渲染输出的区域。然后可渲染这些片段。

完成的渲染输出(例如,帧)可被写入存储器5中的帧缓冲区中,可从该帧缓冲区提供完成的渲染输出以用于在显示设备诸如屏幕或打印机上显示。

图4示出了根据一个实施方案的可由图形处理器3执行的图形处理流水线300。图4示出了与本发明实施方案的操作相关的图形处理流水线300的主要元件和流水线阶段。如本领域的技术人员将理解的,可存在图形处理流水线的在图4中未示出的其他元件。此处还应当指出的是,图4仅是示意性的,并且例如在实践中,即使所示的功能单元和流水线阶段在图4中被示意性地示出为独立阶段,但它们也可共享重要的硬件电路。还应当理解,如图4所示的图形处理器的阶段、元件和单元等中的每一者可根据需要来实现,并且将相应地包括例如用于执行所需的操作和功能的适当电路和/或处理逻辑等。

图4所示的图形处理流水线300是基于图块的渲染器,因此将产生渲染输出数据阵列的图块,诸如待生成的输出帧。

渲染输出数据阵列通常可以是旨在用于在显示设备诸如屏幕或打印机上显示的输出帧,但也可以例如包括旨在用于稍后渲染遍历的中间数据(也称为“渲染到纹理”输出)等。

在基于图块的渲染中,而不是如在立即模式渲染中那样有效地一次性处理整个渲染输出(例如帧),渲染输出(例如,待显示的帧)被划分为多个较小的子区域(通常称为“图块”)。每个图块(子区域)被单独渲染(通常一个接一个地处理),并且所渲染的图块(子区域)然后被重新组合以提供完整的渲染输出,例如用于显示的帧。在此类布置中,渲染输出通常被划分为规则大小和形状的子区域(图块)(其通常为例如正方形或矩形),但这不是必需的。

此类基于图块的渲染的优点是不适用于给定图块的图形处理命令(基元)不必针对该图块进行处理,因此在处理该图块时可被忽略。这允许减小给定渲染输出所需的图形处理的总量。

在基于图块的渲染系统中,因此通常期望能够识别和知道实际应用于给定渲染图块的那些命令(基元),以便例如避免不必要地处理实际上不应用于该图块的命令和基元。

为了促进这一点,在本实施方案中,针对渲染输出的不同区域准备待处理的基元列表。这些“基元列表”(其也可被称为“图块列表”或“多边形列表”)标识(例如,通过参考基元指示符)待针对所考虑的区域进行处理的基元。渲染输出的可针对其准备基元列表的区域可对应于例如单个渲染图块或多个渲染图块集合。一旦已针对渲染输出区域准备了基元列表,每个渲染图块就可以通过光栅化和渲染针对涵盖渲染图块的区域列出的基元来处理。

还可以对这些基元的顶点数据执行任何合适和期望的顶点着色操作。顶点着色操作可操作以将每个顶点的属性转换成用于后续图形处理操作的期望形式。这可包括例如将顶点位置属性从它们最初被限定用于的世界或用户空间转换到待在其中显示图形处理系统的输出的屏幕空间。然后可将基元列表和经处理的顶点数据存储在存储器5中。

图4示出了在生成和存储基元列表和经处理(顶点着色)的顶点数据之后的图形处理流水线300的阶段。这些阶段操作以继而使用存储在存储器5中的基元列表和经处理的顶点数据来生成渲染输出的每个图块。然后组合以这种方式生成的图块以生成整个渲染输出。

如图4所示,图形处理流水线300包括片段着色端点(“FSE”)301,该片段着色端点调度图形处理流水线300需要执行以便生成图块的渲染工作。

响应于片段着色端点(“FSE”)301调度用于图块的渲染工作,基元列表读取器(“PLR”)302从存储器5读取该图块的适当基元列表以识别待进行渲染以用于该图块的基元。

如图4所示,基元列表读取器(“PLR”)302还从存储器5读取“按绘制调用”的着色率、“按屏幕空间”的着色率和组合器功能信息。

资源分配器(“RA”)303然后配置GPU 3的各种元件以用于渲染基元列表读取器(“PLR”)302已经识别的将被渲染用于图块的基元。例如,资源分配器(“RA”)303适当地配置图块缓冲区318以用于存储用于正被渲染的图块的输出数据。

图块缓冲区318被提供为位于图形处理流水线(芯片)上(本地)的RAM的一部分。图块缓冲区318存储颜色缓冲区和深度缓冲区,这些缓冲区分别针对缓冲区表示的每个采样点(本质上针对正被处理的图块的每个采样点)存储适当的颜色等或Z值。这些缓冲区存储表示总体渲染输出(例如,待显示的图像)的部分(图块)的数据阵列,其中缓冲区中的相应采样值集合对应于总体渲染输出的相应像素(例如,每个2×2采样值集合可对应于输出像素,其中使用4×多采样)。

顶点加载器(“VL”)304然后从存储器5读取待渲染的基元的适当经处理的顶点数据,并将基元(即,其经处理的顶点数据)提供给三角形设置单元(“TSU”)305。

如图4所示,顶点加载器(“VL”)304还从存储器5读取“按基元”的着色率信息。

三角形设置单元(“TSU”)305执行基元设置操作以设置待渲染的基元。这包括从基元的顶点确定表示基元边缘的边缘信息。然后将基元的边缘信息传递到光栅化器306。

当光栅化器306接收到用于渲染的图形基元(即,包括其边缘信息)时,该光栅化器将该基元光栅化为采样点并生成具有用于渲染基元的适当位置(表示适当采样位置)的一个或多个图形片段。

由光栅化器306生成的片段然后传递到Z深度和模版测试重新排序缓冲区(“ZSRob”)307。Z深度和模版测试重新排序缓冲区(“ZSRob”)307可操作以将片段重新排序成适于由Z深度和模版测试阶段(“ZS”)308进行后续处理的顺序。

Z深度和模版测试阶段(“ZS”)308对其从Z深度和模版测试重新排序缓冲区(“ZSRob”)307接收的片段执行Z深度测试,以查看在该阶段是否可丢弃(剔除)任何片段。为此,其确定片段的Z深度值,并且将所确定的Z深度值与存储在Z深度缓冲区中的对应Z深度值进行比较,以确定该片段是否将被先前渲染的数据遮挡。如果确定该片段将被遮挡(例如,如果确定该片段的深度值大于深度缓冲区中的对应深度值),则该片段不通过Z深度测试并被丢弃。同时,也可执行早期模版测试。然后将通过Z深度和模版测试阶段(“ZS”)308的片段向上发送到流水线的其余部分以进行处理。

片段的Z深度值可在该片段的中心处或在质心采样位置处确定。另选地,可使用在所有被覆盖的采样点处确定的Z深度的函数来确定该深度,诸如最小或最大函数。

然后存在深度着色率查找阶段309,该深度着色率查找阶段操作以基于由Z深度和模版测试阶段(“ZS”)308提供的片段的Z深度来确定应用于渲染该片段的“按深度”的着色率。下文将更详细地讨论该操作。

然后,着色率组合器阶段310可使用从存储器5读取的组合器功能信息将由深度着色率查找阶段309确定的“按深度”的着色率与“按绘制调用”和/或“按基元”和/或“按屏幕空间”的着色率组合。该过程导致总体组合着色率用于所考虑的片段。

然后可对片段进行进一步剔除操作,诸如通过前向像素杀死阶段(“FPK”)311进行的“前向像素杀死”测试,例如如美国专利申请公布2019/0088009(Arm Limited)中所述。

在前向像素杀死阶段(“FPK”)311后存留下来的片段随后传递到线程束封装阶段312。线程束封装阶段312结合线程束管理器(“WM”)313操作以向执行引擎(“EE”)314发布适当组的执行线程(“线程束”)以供执行。

在本实施方案中,执行引擎314针对向其发布的每个执行线程执行着色器程序以生成适当的渲染输出数据,包括颜色(红色、绿色和蓝色RGB)和透明度(α,a)数据。着色器程序由应用程序2提供,并且可被编译以供驱动器4执行。

一组执行线程(“线程束”)中的线程各自以锁步的方式执行,一次一条指令。以这种方式将执行线程分组为组可提高执行引擎314的执行效率,因为可以在组中的所有线程之间共享指令获取和调度资源。

在本实施方案中,线程束封装阶段312生成线程组(“线程束”),每个线程组包括总共十六个执行线程。当然,其他线程分组也是可能的。

通常,线程组(“线程束”)中的每个线程将对应于渲染输出中的一个或多个采样点的固定集合并且计算渲染输出数据。然而,在本实施方案中,线程对应的采样点(例如,像素)的数量取决于所使用的着色率。为了促进这一点,线程束封装阶段312操作以基于由着色率组合器阶段310确定的着色率生成线程组(“线程束”)。

例如,当着色率组合器阶段310指示1×1着色率时,线程束封装阶段312生成包括一个或多个线程的线程组(“线程束”),执行线程将各自执行着色器程序以针对渲染输出中对应于相应单个精细像素的一个或多个采样点生出渲染输出数据。然而,当使用1×2着色率时,线程束封装阶段312生成包括一个或多个线程的线程组(“线程束”),该一个或多个线程将各自执行着色器程序以针对渲染输出中对应于相应1×2粗略像素的一个或多个采样点生成渲染输出数据。其他着色率将以对应的方式处理。

因此,执行引擎314可执行表示精细像素的执行线程,并且在正使用更粗略着色率的情况下,执行表示粗略像素的执行线程。

由线程束封装阶段312生成的线程组(“线程束”)然后传递到线程束管理器313,该线程束管理器将线程适当地发布到执行引擎(“EE”)314以供执行。线程束管理器313还在线程束状态存储装置315(在存储器5中)中存储指示与向执行引擎314发布的线程组(“线程束”)相关联的着色率的信息。

执行引擎(“EE”)314然后适当地执行线程组(“线程束”)内的执行线程,以便执行适当的着色操作并针对每个执行线程生成适当的渲染输出数据,即包括颜色(红色、绿色和蓝色RGB)和透明度(α,a)数据。

如图4所示,流水线300的变化的插值阶段(“VAR”)316负责执行执行引擎(“EE”)314的插值任务。变化的插值阶段(“VAR”)316例如从基元的顶点到当前采样点位置,按顶点属性(诸如按顶点的颜色、纹理坐标等)进行插值。

当执行可变速率着色时,变化的插值阶段316的插值可取决于着色率,例如其中每个粗略像素或精细像素将在其几何中心处采样(因为例如2×2粗略像素的几何中心与1×1精细像素或2×1粗略像素不同)。因此,变化的插值阶段(“VAR”)316可从线程束状态存储装置315接收着色率信息。来自变化的插值阶段(“VAR”)316的插值结果可返回到执行引擎(“EE”)314,例如以用于进一步处理。

然后将由执行引擎(“EE”)314生成的输出数据适当地写入图块缓冲区318。如果需要混合,则由混合器阶段(“混合”)317执行与已存储在图块缓冲区318中的数据的任何必要的混合操作,然后将混合数据写入图块缓冲区318。另选地,在不需要混合的情况下,混合器阶段(“混合”)317可将输出数据直接写入图块缓冲区318。

由混合器阶段317读取存储在线程束状态存储装置315中的着色率信息并将其用于控制数据的写入。例如,在1×1着色率的情况下,单个输出数据值集合将被写入图块缓冲区318中对应于(仅)单个精细像素的一个或多个采样点。在使用更粗略着色率的情况下,单个输出数据值集合将被写入图块缓冲区318中对应于多个精细像素的块的一个或多个采样点。例如,在1×2着色率的情况下,单个输出数据值集合将被写入图块缓冲区318中对应于1×2精细像素的块的一个或多个采样点。其他着色率将以对应的方式处理。

因此,(混合的)输出数据(值)被写入图块缓冲区318,从该处例如可将它们输出到帧缓冲器以进行显示。输出Z深度值也被适当地写入图块缓冲区318内的Z缓冲区。

执行引擎(“EE”)314可包括消息块,执行引擎(“EE”)314可使用该消息块通过发送消息来与一个或多个从单元(诸如变化的插值阶段(“VAR”)316、纹理单元和混合器(“混合”)317)通信。例如,当执行引擎(“EE”)314在其着色器程序中执行变化的插值指令时,执行引擎(“EE”)314可指示消息块创建发送到变化的插值阶段(“VAR”)316的消息。当执行可变速率着色时,消息块将从线程束状态存储装置315读取由线程束管理器313在派生了线程束(线程组)时准备的着色率。然后视情况将着色率提供给变化的插值阶段(“VAR”)316和/或混合器317。

在正使用下采样的情况下,来自图块缓冲区318的数据的输出可包括被输入到下采样(多重采样解析)写出单元(未示出)的图块缓冲区数据,从而输出(回写)到外部存储器输出缓冲区,诸如存储器5中的显示设备的帧缓冲区。显示设备可包括例如包括像素阵列的显示器,诸如计算机监视器或打印机。在这种情况下,下采样和写出单元将存储在图块缓冲区318中的数据下采样到输出缓冲区(设备)的适当分辨率(即,使得生成对应于输出设备的像素的像素数据阵列),以生成用于到输出缓冲区的输出的输出值(像素)。

一旦渲染输出的图块已被处理并且其数据被导出到主存储器5(例如,被导出到主存储器5中的帧缓冲区)以用于存储,则接着处理下一个图块,以此类推,直到已处理足够的图块以生成整个渲染输出(例如,待显示的帧(图像))。然后针对下一个渲染输出(例如,帧)重复该过程,以此类推。

当然,图形处理流水线300的其他布置也是可能的。

在本实施方案中,作为向驱动器4提供命令和数据的应用程序2的一部分,应用程序2指示应使用基于深度的着色率,并且以查找表的形式提供指示应使用的特定着色率的信息。查找表针对多个Z深度范围中的每个范围指示应用于具有在相应Z深度范围内的Z深度的片段的相应着色率。

驱动器4然后将适当的命令和数据发送到图形处理器3,包括将指示查找表的信息写入存储器5。

在渲染遍历开始时,图形处理器3然后操作以从存储器5读取查找表信息,并将对应信息存储在图形处理器3本地(即,在与该图形处理器相同的芯片上)的存储装置(例如,存储器)中。在渲染遍历期间,图形处理器3然后视情况从其本地存储装置访问查找表信息。

因此,图形处理器3仅从外部存储器5读取查找表信息一次,然后深度着色率查找阶段309可在渲染遍历期间多次从本地存储装置访问该信息。与始终从外部存储器5访问查找表信息相比,以这种方式本地存储和访问查找表信息可减少延迟和带宽要求,并且减少或避免数据读取丢失。为了促进该本地存储,查找表中条目的数量(即大小)可被限制为二的小幂,诸如四、八或十六。

在本实施方案中,应用程序2在每次渲染遍历中仅指定单个查找表。然而,在其他实施方案中,针对渲染遍历指定了多个查找表,例如,针对多个视口中的每个视口指定一个查找表。在这种情况下,将使用片段与之相关联的视口的查找表来确定该片段的“按深度”的着色率。

在本实施方案中,查找表指定了应用于落在Znear至Zfar范围内的Z深度的着色率。例如,最小深度Znear和最大深度Zfar可分别对应于正被渲染的视锥的近平面和远平面的深度。

例如,在请求深度表范围之外的深度的着色率的情况下,或者在返回“Inf”或“NaN”结果的情况下,可以默认为1×1着色率。

范围Znear至Zfar被划分为相等的子范围,并且在查找表中针对每个此类子范围指定着色率。将深度范围分成相等的子范围避免了需要明确指定深度子范围的最小值和最大值,从而减少了指定查找表所需的数据量。

此外,这种布置可促进对查找表的特别快速且有效的访问。具体地讲,在这种情况下,可通过以下计算来针对深度Z确定到具有N个条目的查找表的索引i(=0、1、...、N-1):

然后四舍五入至最接近的整数。公式(1)可重新排列成以下形式:

i=(AZ-B)N, (2)

其中A=1/(Zfar-Znear),并且B=Znear/(Zfar-Znear)。

申请人已经认识到,根据公式(2)的索引确定操作基本上等同于用于从数字的浮点表示转换为数字的无符号整数表示的操作,并且因此可以特别有效的方式计算。具体地讲,该操作可由FMA(融合乘加)单元在硬件中有效地计算。

例如,以下伪代码示出了根据本实施方案如何确定索引。

F32 depth; //粗略像素的深度

F32 Znear; //近平面的深度

F32 Zfar; //远平面的深度

U32 size; //深度表的大小的Log2

F32 range=Zfar–Znear;//深度表的深度范围

F32 A=recip(range) //深度范围的倒数

F32 B=Znear*A; //最小深度除以深度范围

U32 idx=(depth*A–B)*pow(2,-149+size);//到查找表中的无符号整数索引

此处,粗略像素(片段)的深度“depth”由Z深度和模版测试阶段(“ZS”)308提供为32位浮点数。从适当的描述符中将视锥的近平面和远平面的深度作为32位浮点数获得。深度表的大小表示为32位无符号整数,其以二次幂的指数表示大小。

然后计算值“范围”、“A”和“B”。由于这些值不取决于基元深度,因此它们对于每个视口是恒定的。因此,它们在渲染遍历的开始处进行一次计算,存储在本地,并在一个或多个后续索引确定操作的每一者中使用。

具体地讲,在本实施方案中,作为开始步骤,由FMA单元将常数“范围”、“A”和“B”计算为小的微代码序列。这涉及首先由执行减法运算的FMA单元计算值“范围”。然后由FMA使用Newton-Raphson迭代确定先前结果(“范围”)的倒数来计算“A”。然后由FMA将先前结果(“A”)乘以“Znear”的值来计算“B”。

然后,使用先前计算的常数,由FMA单元计算索引“idx”作为单个FMA缩放运算。具体地讲,项(depth*A-B)计算为融合乘加(FMA)运算,并且

按查找表大小缩放2^size。将索引“idx”计算为32位无符号整数,则具有四舍五入成最接近整数的效果。

此处,值“-149”用于从浮点到整数的转换,以考虑32位浮点数的最大可表示指数范围以及23位尾数范围。然后,由浮点计算产生的位模式就是所需的整数表示。

图5示出了根据一个实施方案的操作图形处理流水线300的方法。如图5所示,在步骤401处,由光栅化器306生成的片段(光栅化基元)由图形处理流水线300的Z深度和模版测试阶段(“ZS”)308进行深度插值操作。该深度插值操作确定了该片段的Z深度值。然后,该Z深度值可被Z深度和模版测试阶段(“ZS”)308用于对该片段执行Z深度测试。

在步骤402处,(假设片段通过Z深度测试)深度着色率查找阶段309使用所确定的深度值来确定片段应基于其深度被着色时的着色率。这通过基于所确定的深度值在深度查找表中查找该“深度着色率”来完成。

在步骤403处,由着色率组合器阶段310将基于片段的深度确定的着色率与基于其他着色率标准确定的其他着色率组合,从而导致片段将根据其进行着色的“组合着色率”。

在步骤404处,线程束封装阶段312使用该组合着色率来通知生成线程组(“线程束”)的过程,该线程组在由执行引擎(“EE”)314执行时将生成片段的输出像素数据。

例如,在1×1着色率的情况下,线程束封装阶段312包括线程组(“线程束”)中的将单独产生片段的输出像素数据的执行线程。然而,在本实施方案中,使用更粗略的着色率,并且线程束封装阶段312因此包括线程组(“线程束”)中的执行线程,该执行线程将与一个或多个其他片段一起产生片段的输出数据。在这种情况下,片段实际上将被着色为表示多个“精细像素”(片段)的“粗略像素”。

在步骤405处,表示粗略像素的执行线程由执行引擎(“EE”)314执行,以生成粗略像素的输出像素数据。

在步骤406处,所生成的像素数据相对于粗略像素表示的每个精细像素被写入图块缓冲区318。因此,相同的像素数据用于多个精细像素,从而减少了针对那些精细像素的处理工作。

从上面应当理解,本文所述的技术至少在其实施方案中提供了可减少生成渲染输出(例如,用于显示的帧)所需的处理的布置。在本文所述技术的实施方案中,这至少通过基于深度确定着色率来实现。

上述具体实施方式是为了举例说明和描述的目的而呈现的。其并非旨在穷举或将本文所述的技术限制为所公开的精确形式。按照上述教导内容,许多修改形式和变型形式是可能的。选择所述实施方案以便最好地解释本文所述的技术及其实际应用的原理,从而使得本领域的其他技术人员能够在各种实施方案中并且通过适合于所设想的特定用途的各种修改最好地利用本文所述的技术。本发明的范围旨在由所附权利要求限定。

29页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种用于FAST角点检测的向量化硬件装置

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!