图形处理系统的制作方法

文档序号:26012544发布日期:2021-07-23 21:33阅读:98来源:国知局
图形处理系统的制作方法

本文所描述的技术涉及计算机图形的处理,特别是,涉及在生成渲染输出时操作图形处理器的方法。



背景技术:

正常情况下,执行图形处理首先是通过将待渲染的图形处理(渲染)输出(诸如待显示的帧)划分成多个相似的基本组件(所谓的“图元(primitive)”),以使更容易执行图形处理操作。这些“图元”通常采用简单多边形的形式,诸如三角形。

各个图元在这个级通常是由顶点集限定并表示的。图元的各个顶点都已经关联其与表示该顶点的数据集(诸如位置、颜色、纹理以及其它属性数据)。然后,例如在栅格化(rasterising)和渲染与该顶点相关的图元时使用这种“顶点数据”,以便生成图形处理系统的希望渲染输出。

对于要由图形处理系统生成的给定输出(例如,待显示的帧),通常作为针对所讨论的输出而定义的顶点集。然后,要针对该输出进行处理的图元将被指示为包括正被生成的图形处理输出的顶点集中的给定顶点。通常,将总体输出(例如,待生成的帧)划分成较小的处理单位(称为“绘制调用(drawcall)”)。各个绘制调用将具有为其而定义的相应的顶点集和使用这些顶点的图元集。

一旦生成和定义了图元及其顶点,就可以由图形处理系统对它们进行处理,以便生成希望的图形处理输出(渲染输出),诸如用于显示的帧。这基本上涉及确定与待处理的渲染输出面积相关联的采样点阵列中的哪些采样点被图元覆盖,然后确定各个采样点应具有的表现(例如,根据其颜色等)来表示该采样点处的图元。这些处理分别被通称为栅格化和渲染。

栅格化处理确定应当用于图元的采样位置(即,要用于表示输出(例如,待显示的场景)中的图元的采样点的(x、y)位置)。这通常是使用图元的顶点的位置来完成的。渲染处理然后导出为表示采样点处的图元(即,“着色”各个采样点)所必需的数据(诸如红、绿以及蓝(rgb)颜色值,和“alpha”(透明度)值)。这例如可以涉及应用纹理、混合采样点数据值等。(有时使用术语“栅格化”是指图元转换成样本位置和渲染两者。然而,本文中使用“栅格化”仅仅是指将图元数据转换成采样点地址。)

这些处理通常通过以下步骤来执行:测试多组一个或一个以上的采样点,并接着针对被发现包括处于所讨论(被测试)图元内部(被其覆盖)的一采样点的每组采样点,来生成通常被称为执行图形处理操作(诸如渲染)的“片段(fragment)”的离散图形实体。因此,实际上,将所覆盖采样点处理为将用于渲染所讨论采样点处的图元的片段。“片段”是经过渲染处理(渲染流水线)的图形实体。根据图形处理系统如何配置,生成和处理的各个片段例如可以表示单个采样点或一组多个采样点。

因此,“片段”实际上是(与之相关联的)一组图元数据,这些图元数据被插值到图元的给定的一个或多个输出空间采样点。片段还可以包括为在所讨论采样点(片段位置)处着色图元所需的每图元(per-primitive)和其它状态数据。各个图形片段的大小和位置通常可以与输出(例如,输出帧)的“像素”相同(因为像素是最终显示器中的奇点(singularity),所以图形处理器操作(渲染)的“片段”与显示器的像素之间可以存在一对一的映射)。然而,可能会存在以下情况:片段与显示像素之间不存在一对一的对应关系,例如,在显示最终图像之前,对经渲染的图像执行特定形式的后处理的情况下。

还存在以下情况:由于给定位置处的多个片段(例如,来自不同的重叠图元)可能会彼此影响(例如,由于透明度和/或混合),因此,最终像素输出可能取决于该像素位置处的多个或所有片段。

相应地,采样点与显示器的像素之间可能存在一对一的对应关系,但更典型地,采样点与显示像素之间可能不存在一对一的对应关系,这是因为可能会对经渲染的样本值进行下采样以生成用于显示最终图像的输出像素值。类似地,在给定位置处的多个采样点值(例如,来自不同的重叠图元)彼此影响(例如,由于透明度和/或混合)的情况下,最终像素输出还将取决于该像素位置处的多个重叠样本值。

图形处理的一种形式使用所谓的“基于图块(tile-based)”的渲染。在基于图块的渲染方面,将二维渲染输出(即,渲染处理的输出,诸如待显示的输出帧)渲染为多个较小面积区域,通常被称为“图块”。在这样的布置中,通常将渲染输出划分(按面积)成规则尺寸和形状的渲染图块(它们例如通常是正方形或矩形)。(通常用于“图块化”和“基于图块”渲染的其它术语包括“分块(chunking)”(渲染图块被称为“块(chunk)”)和“桶形(bucket)”渲染。为方便起见,将在下文中使用术语“图块”和“图块化”。但应理解,这些术语旨在涵盖其中将渲染输出渲染为多个较小面积区域的任何和所有另选和等效术语和技术)。

通常将这些图块分别进行渲染,并接着将经渲染的图块重新组合,以提供完整的渲染输出(例如,用于显示的帧)。通常例如使用表示图元的几何图形数据集以及指示要在渲染图元时执行的操作的状态数据,来执行对图块的图元的渲染。

在处理用于显示的图形时(在显示计算机生成的图像时)遇到的一个问题是,所显示的图像被量化到正被使用的显示器(例如,监视器或打印机)的离散像素位置。这限制了所显示的图像的分辨率,并且可能产生不想要的视觉伪像,例如,在输出显示装置的分辨率不足以显示平滑线条的情况下。这些影响通常被称为“混叠(aliasing)”。

图1例示了这种混叠影响。图1的左侧示出了待绘制的图像,而右侧示出了所显示的实际图像。如可以看出,实际上,白色对象的希望平滑曲线在显示器上呈锯齿状。这是混叠。(在图1中,各个正方形表示显示器的像素,并且十字表示各个(x、y)像素位置处的点,针对该点确定(采样)该像素位置的颜色值。例如,图1中的像素a被绘制为全白色,这是因为该像素位置的颜色采样点落入白色对象内。应注意,在图1中,仅示出了关注像素上的样本十字,然而实际上所有像素均会被采样。)

通过使用足够高分辨率的显示器,可以去除肉眼可见的所有混叠伪影。然而,电子显示器和打印机的分辨率通常受到限制,因此许多图形处理系统使用其它技术来尝试去除或减少混叠的影响。此类技术通常被称为抗混叠技术。一种已知的抗混叠技术被称为超采样(supersampling)或过采样(oversampling)。

在这样的布置中,最终显示器的每像素有多个采样点(位置),并且针对各个(覆盖的)单独采样点取得单独的颜色样本(例如,通过将各个采样点渲染为单独的片段)。这样的效果是,在渲染处理期间,针对由图元覆盖的显示像素的各个采样点,取得不同的颜色样本。

这意味着针对显示器的各个像素取得多个颜色样本(该像素的各个采样点取得一个样本,这是因为针对各个采样点渲染了单独的颜色值)。然后,在显示像素时,将这些多个颜色样本组合成该像素的单一颜色。这具有使所讨论的像素位置处的原始图像的颜色值平滑或平均的效果。

图2例示了超采样处理。在图2所示的示例中,针对显示器中的各个像素确定四个采样点,并且在渲染处理期间针对各个采样点取得单独的颜色样本。(因此,各个这样的样本可以有效地视为“子像素”,并且显示器中的各个像素是由四个这样的子像素组成的。)然后将给定像素的四个颜色值样本(子像素)进行组合(下过滤(downfiltered)),使得用于显示器中的像素的最终颜色是针对该像素取得的四个颜色样本的颜色的适当平均值(混合)。

这具有使所显示的图像平滑的效果,并且例如通过用中间的颜色阴影包围混叠伪影来减少混叠伪影的突出。这可以在图2中看出,其中,像素a现在具有两个“白色”样本和两个“黑色”样本,因此在所显示的图像中设置成例如50%“白色”。以这种方式,基于例如发现有多少个样本落在该白色对象的边缘的每一侧上,使绕所述边缘的像素变模糊以产生更平滑的边缘。

实际上,超采样以比实际用于该显示器的分辨率高得多的分辨率处理屏幕图像,然后在显示经处理的图像之前,将该图像按比例缩放并过滤(下采样)成最终分辨率。这样的效果是提供了一种具有减少混叠伪影的改进图像,但是需要更大的处理能力和/或时间,这是因为图形处理系统实际上必须处理的采样数与采样数一样多(使得例如对于4×超采样(即,其中针对各个显示像素取得四个采样),处理要求将比没有超采样时高四倍)。

因此,提出了其它抗混叠技术,其虽然仍提供了图像质量的某种改善,但是比完整的超采样具有更少的处理要求。一种常见的此类技术被称为“多采样”。

对于多采样的情况来说,再次针对各个显示像素测试多个采样点,以确定在将图像栅格化成片段时(在栅格化级)给定的图元是否覆盖了采样点。因此,以与“超采样”系统类似的方式确定多采样系统中图元的采样点覆盖范围(因此,在多采样系统中,图元的外部几何边缘的位置仍被有效地“超采样”(过采样))。

然而,在多采样系统的渲染处理中,所讨论的图元所覆盖的给定显示像素的所有采样点均被分配了同一单个共同颜色值数据集(而不是像超采样的情况那样,各个颜色值具有它们自己单独的数据集)。

因此,在多采样中,再次针对构成最终显示器的各个像素取得多个样本,而不是在渲染“像素”时确定各个样本的单独的颜色值(对于完整的超采样系统来说就是这种情况),确定单个颜色值并将其应用于显示像素的、被发现在最终图像中属于同一对象的所有样本。换句话说,多采样针对场景中的给定对象来计算给定显示像素的单个颜色值,将该颜色值应用于(重用于)该对象所覆盖的显示像素的所有样本(子像素)(这与针对各个样本确定单独的颜色值的超采样相反)。

因为仅将单个颜色值用于给定显示像素的多个样本,所以与超采样相比,多采样的处理强度较低,并因此与超采样相比,可以实现更快的处理和性能。

一般而言,可以执行任何合适级别的多采样或超采样(例如,4×、8x、16x),并且通常根据需要将现代图形处理系统配置为能够支持各种级别的多采样和/或超采样。

当在基于图块的图形处理系统中实现这样的多采样/超采样技术时,渲染器由此可以处理每显示像素的多个采样点(例如,对于4×msaa,每显示像素有四个采样点),以确定采样点的适当数据(例如,颜色)值。然后,将输出的片段数据值写入适当的(例如,图块(颜色等))缓冲器中,然后从该缓冲器中,例如可以将该片段数据值输出至帧缓冲器中,以在希望写出输出时进行显示。还将输出片段的深度值适当地写入至图块缓冲器内的z缓冲器。

因此,图块(颜色等)缓冲器和z缓冲器将分别存储该缓冲器表示的各个采样点(本质上,正被处理的图块的各个采样点)的适当颜色等或z值。因此,图块缓冲器以第一“完整”(经多采样的(multisampled))分辨率(即,每显示像素使用多个采样点)存储一组经多采样的片段数据,该片段数据实际上表示渲染输出的一部分(与所讨论的图块相对应的面积)。

当要写出该片段数据时,例如,以希望的(较低)分辨率(即,通过将显示像素的经多采样的片段数据下解析成单个像素值)来生成渲染输出时,因此,通常先将来自图块缓冲器的经多采样的片段数据输入至下采样(多采样解析(multisampleresolve))单元,该下采样单元将希望的下采样执行至希望的(较低)分辨率,然后再将表示渲染输出的希望的(较低)分辨率的数据元例如输出至输出缓冲器,诸如显示装置的帧缓冲器。

然而,本申请人认为对于图形处理来说仍存在技术改进范围。



技术实现要素:

根据本公开的一方面,提供了一种在生成渲染输出时操作图形处理器的方法,所述图形处理器包括:

栅格化器电路,所述栅格化器电路对输入的图元进行栅格化,以生成待处理的图形片段,各个图形片段具有与该图形片段相关联的一组一个或更多个采样点;以及

渲染器电路,所述渲染器电路对由所述栅格化器电路生成的图形片段进行渲染,以生成所述图形片段的经渲染的片段数据,并且所述渲染器电路能够操作以生成表示渲染输出的第一较高分辨率的数据元阵列,并且在写出所述渲染输出时,对第一分辨率的数据元阵列进行下采样,以生成表示所述渲染输出的第二较低分辨率的数据元阵列;

所述方法包括以下步骤:

所述图形处理器通过对图形图元进行处理以生成表示渲染输出的所述第一分辨率的数据元阵列,来生成所述渲染输出;以及

存储表示所述渲染输出的所述第一分辨率的数据元;

所述方法还包括以下步骤:

所述图形处理器停止生成所述渲染输出,并且在所述图形处理器这样做时,进行如下操作:

对所述渲染输出的所存储的所述第一分辨率的数据元进行下采样,以生成表示所述渲染输出的所述第二分辨率的数据元阵列;

确定如下差值集,该差值集指示表示所述渲染输出的所述第一分辨率的数据元与所生成的表示所述渲染输出的所述第二分辨率的数据元阵列之间的差异;以及

将表示所述渲染输出的所述第二分辨率的数据元阵列与所确定的差值集一起写出至存储器;并且

所述图形处理器恢复所述渲染输出的处理;并且在所述图形处理器这样做时,进行如下操作:

从所述存储器加载表示所述渲染输出的所述第二分辨率的数据元阵列和所确定的差值集;

使用所加载的所述第二分辨率的数据元阵列以及所加载的差值集,来重建表示所述渲染输出的所述第一分辨率的数据元阵列;以及

当继续所述渲染输出的处理时,使用所重建的表示所述渲染输出的所述第一分辨率的数据元阵列。

根据本公开的另一方面,还提供了一种存储计算机软件代码的非暂时性计算机可读存储介质和一种包括图形处理器的图形处理系统。

附图说明

现在,仅通过示例的方式并且参照附图,对本文所描述的技术的多个实施方式进行描述,其中:

图1示意性地示出了混叠的影响;

图2示意性地示出了超采样抗混叠技术;

图3示意性地示出了待显示的图像;

图4示出了当执行4×msaa时可以根据本文所描述的技术操作的图形处理流水线的实施方式;

图5示意性地示出了当暂停渲染输出的生成时,根据本文所描述的技术的实施方式的数据流;

图6示意性地示出了根据实施方式的在暂停渲染输出的生成时数据的存储;以及

图7示意性地示出了当要恢复先前暂停的渲染输出的生成时,根据本文所描述的技术的实施方式的数据流。

在适当的情况下,将相同的标号用于图中相同的特征和组件。

具体实施方式

本文所描述的技术的第一实施方式包括一种在生成渲染输出时操作图形处理器的方法,所述图形处理器包括:

栅格化器电路,所述栅格化器电路对输入的图元进行栅格化,以生成待处理的图形片段,各个图形片段具有与该图形片段相关联的一组一个或更多个采样点;以及

渲染器电路,所述渲染器电路对由所述栅格化器电路生成的图形片段进行渲染,以生成所述图形片段的经渲染的片段数据,并且所述渲染器电路能够操作以生成表示渲染输出的第一较高分辨率的数据元阵列,并且在写出所述渲染输出时,对所述第一分辨率的数据元阵列进行下采样,以生成表示所述渲染输出的第二较低分辨率的数据元阵列;

所述方法包括以下步骤:

所述图形处理器通过对图形图元进行处理以生成表示渲染输出的所述第一分辨率的数据元阵列,来生成所述渲染输出;以及

存储表示所述渲染输出的所述第一分辨率的数据元;

所述方法还包括以下步骤:

所述图形处理器停止生成所述渲染输出,并且在所述图形处理器这样做时,进行如下操作:

对所述渲染输出的所存储的所述第一分辨率的数据元进行下采样,以生成表示所述渲染输出的所述第二分辨率的数据元阵列;

确定差值集,所述差值集指示表示所述渲染输出的所述第一分辨率的数据元与所生成的表示所述渲染输出的所述第二分辨率的数据元阵列之间的差异;以及

将表示所述渲染输出的所述第二分辨率的数据元阵列与所确定的差值集一起写出至存储器;并且

所述图形处理器恢复所述渲染输出的处理;并且在所述图形处理器这样做时,进行如下操作:

从所述存储器加载表示所述渲染输出的所述第二分辨率的数据元阵列和所确定的差值集;

使用所加载的所述第二分辨率的数据元阵列以及所加载的差值集,来重建表示所述渲染输出的所述第一分辨率的数据元阵列;以及

当继续所述渲染输出的处理时,使用所重建的表示所述渲染输出的所述第一分辨率的数据元阵列。

本文所描述的技术的第二实施方式包括一种包括图形处理器的图形处理系统,所述图形处理系统包括:

栅格化器电路,所述栅格化器电路对输入的图元进行栅格化,以生成待处理的图形片段,各个图形片段具有与该图形片段相关联的一组一个或更多个采样点;以及

渲染器电路,所述渲染器电路对由所述栅格化器电路生成的图形片段进行渲染,以生成所述图形片段的经渲染的片段数据,并且所述渲染器电路能够操作以生成表示渲染输出的第一较高分辨率的数据元阵列,并且在写出所述渲染输出时,对所述第一分辨率的数据元阵列进行下采样,以生成表示所述渲染输出的第二较低分辨率的数据元阵列;

所述图形处理器被配置成进行如下操作:

通过对图形图元进行处理以生成表示渲染输出的所述第一分辨率的数据元阵列,来生成所述渲染输出;以及

存储表示所述渲染输出的所述第一分辨率的数据元;

所述图形处理器还被配置成,当所述图形处理器在完成所述渲染输出之前停止生成所述渲染输出时,进行如下操作:

对所述渲染输出的所存储的所述第一分辨率的数据元进行下采样,以生成表示所述渲染输出的所述第二分辨率的数据元阵列;

确定差值集,所述差值集指示表示所述渲染输出的所述第一分辨率的数据元与所生成的表示所述渲染输出的所述第二分辨率的数据元阵列之间的差异;以及

将表示所述渲染输出的所述第二分辨率的数据元阵列与所确定的差值集一起写出至存储器;并且

所述图形处理器还被配置成,当所述图形处理器恢复先前停止的渲染输出的处理时:

从所述存储器加载表示所述渲染输出的所述第二分辨率的数据元阵列和所确定的差值集;

使用所加载的所述第二分辨率的数据元阵列以及所加载的差值集,来重建表示所述渲染输出的所述第一分辨率的数据元阵列;以及

当继续所述渲染输出的处理时,使用所重建的表示所述渲染输出的所述第一分辨率的数据元阵列。

本文所描述的技术涉及处理图形图元以生成渲染输出。特别地,本文所描述的技术涉及图形处理的方法(和设备),其中,通过首先生成渲染输出的较高分辨率表示来生成渲染输出,但是接着例如以希望的输出分辨率(例如,用于显示)进行“下采样”,以将渲染输出的第一较高分辨率表示解析成该渲染输出的第二较低分辨率表示。

可以作为这种情况的典型示例是在执行例如如上所述的抗混叠(anti-aliasing)技术(诸如多采样抗混叠(msaa:multi-samplinganti-aliasing)或超采样时,其中,每输出显示像素(例如,对于4×msaa,每显示像素有四个采样点)存储和处理多个样本(采样点),并且其中,当对显示像素的片段的渲染完成时,对多个样本将进行“下采样”,以给出渲染输出的单个像素值。这种下采样通常被称为“解析(resolve)”处理。例如,最简单的“解析”处理是取得与显示像素相关联的多个样本的数据值的平均值(可以是加权平均值)。然而,也可以使用其它解析处理。

由此,在实施方式中,渲染输出的第一较高分辨率表示是渲染输出的“多采样”版本,其中,针对渲染输出中的各个显示部件(像素)存储多个(例如,四个)采样点,因此,渲染输出的第一较高分辨率版本的数据元表示这些多个采样点中的各个采样点的相应的数据值。当要写出渲染输出时,接着对渲染输出的这种多采样表示进行下采样,以生成渲染输出的第二较低分辨率(经解析的)表示,然后写出渲染输出的该较低分辨率(经解析的)版本。因此,在实施方式中,渲染输出的第二较低分辨率表示是渲染输出的“单采样”版本,其中,针对各个显示部件(像素)仅存储了单个采样点。

例如,在实施方式中,对于4×msaa的情况来说,针对渲染输出的第二较低分辨率表示的各个数据元(第二较低分辨率版本的数据元对应于显示像素),渲染输出的第一较高分辨率表示使用四个数据元(对应于四个相应的采样位置)。然而,本文所描述的技术当然不限于4×多采样,而是可以根据需要应用任何级别的多采样/超采样(例如,8x、16x等)。

其它布置也是可以的,并且本文所描述的技术通常可以应用于可以以下任何情形:按如上所述的类似方式(但不一定出于msaa的目的),首先以第一较高分辨率生成渲染输出,然后该对渲染输出进行下采样。

本文所描述的技术特别涉及以下情形:可以停止渲染输出的生成(例如,因为需要切换成处理另一渲染输出,和/或需要生成和/或提供另一些数据以使能够处理该渲染输出的更多部分),但是可以在稍后时间恢复渲染输出的生成。

申请人在这点上已经认识到,在执行图形处理时可能需要停止和恢复给定渲染输出的处理的情况就是如此。例如,对于留出有限的存储器用于为处理渲染输出所需的数据结构的情况来说,可能在生成渲染输出的完整数据结构之前就填满了该存储器。在该情况下,于是可能希望处理渲染输出的现有数据结构(以便实际上“清除(flush)”存储器中的那些数据结构),然后生成所讨论的渲染输出的新数据结构等等。因此,在这种情况下,正被生成的渲染输出例如可以作为一序列“递增(incremental)”处理来生成,其中,对渲染输出的数据的第一部分进行处理,跟着是暂停和/或某一其它渲染输出的处理,然后再返回初始渲染输出以完成(或至少继续该初始渲染输出的处理)。

例如,这可能会在基于图块的图形处理系统中出现,其中,可能会暂停一个图块的处理,然后切换成另一图块的处理等等,并且在不同的图块之间交替进行处理,例如,因为生成和用掉了不同图块的数据结构。由此,在实施方式中,正被生成的渲染输出是正通过图形处理器(因此图形处理器是基于图块的图形处理器)生成的总体输出(诸如待显示的帧)的区域(例如,图块)。

申请人进一步认识到,可能仅部分地处理了给定的渲染输出(例如,可能是已经出于渲染的目的将较大的渲染输出划分成的图块),使得需要在稍后时间恢复该渲染输出(例如,图块)的处理,然后,可能需要保留目前为止作为渲染输出的处理的一部分而生成的数据结构,以使在恢复所讨论的渲染输出的处理时,可以接着重使用所生成的数据结构并继续。

申请人进一步认识到,这一方面是部分地处理了渲染输出,并且希望在稍后时间继续该渲染输出的处理,再则是希望远离渲染输出的所述部分处理保留由此生成的渲染输出值,以在恢复渲染输出的处理时使用。

本文所描述的技术通过以下方式解决了这一问题:当停止仅部分完成的渲染输出的处理时,将从渲染输出的该部分处理生成的数据存储出至存储器,使得然后可以在恢复渲染输出的处理时恢复该数据值。

例如,在msaa的情况下,可以在停止渲染输出的生成的时间,写出针对该部分渲染的所有经多采样的样本的完整分辨率数据值,然后,当要继续所讨论的渲染输出区域的渲染时,恢复该部分渲染的完整分辨率样本。然而,这将涉及相对较高的数据传递和存储带宽。

为了解决这个问题,并且减少所需的存储带宽等,不是在存在“部分”(递增)渲染(例如,如上所述的清除)时,以“完整”方式写出当前的多样本值,而是当写出“部分”渲染的经处理的数据时,即,当停止(暂停)渲染输出的生成时,本文所描述的技术代替地按照样本的当前实际情况执行这些样本所需的解析操作,并写出渲染输出的最终经解析的“下采样”版本,和对渲染输出的下采样版本的数据元与渲染输出的完整多采样版本的数据元阵列之间的差异进行指示的差(例如,增量)值集。

换句话说,对于正被处理的所有采样位置,不是写出目前为止生成的渲染输出的第一较高分辨率的所有数据元(完整的多样本值(以多样本分辨率)),而是本文所描述的技术按照渲染输出的当前实际情况将该渲染输出解析成希望的较低采样分辨率,并且以完整的方式写出表示渲染输出的较低分辨率的经解析的(下采样的)数据阵列,和对表示渲染输出的(第一)较低分辨率的数据元与所生成的表示渲染输出的(第二)较高分辨率的数据元阵列之间的差异进行指示的差值集,然后可以它们用于例如在恢复渲染输出的处理时,重建表示该渲染输出的第一分辨率的数据元阵列。

因此,申请人在这点上已经认识到,可以并且将有可能从渲染输出的经解析的较低分辨率表示中,并且以适当高效的方式,通过存储和使用指示所述两种表示之间的差异的数据,来恢复渲染输出的较高分辨率(多采样)表示,使得可以省略写出供以后(重)使用的渲染输出的较高分辨率表示的完整数据元。

这样,可以减少在存在“部分”(递增)渲染(清除)时需要写出的数据量。例如,在实施方式中,对于4×msaa的情况来说,针对各个像素,不是写出4×样本值的完整阵列,而是将写出表示渲染输出的对应像素的经解析的(下采样的)像素值的数据元阵列,和一组4×样本值,但是各个样本值是由差值(而不是“完整”样本值)来表示的。

这因而具有的优点是,减少了在中途停止渲染输出的处理时所需的存储要求和存储带宽等,例如,因为不需要写出完整的分辨率数据值(因此可以将其丢弃),从而使总体处理更高效。

这也意味着,如果实际上在能够恢复渲染输出的生成时不需要到目前为止(直到停止渲染输出的生成的时刻)通过处理生成的渲染输出的数据元,那么根本不需要载入被写出至存储器的数据值(因此在实施方式中,就没有这样做)。例如,如果(确定)在能够恢复处理时没有所讨论的渲染输出的待处理的另一些图元,那么因为已经执行了解析操作,所以渲染完成,并且针对该渲染输出不需要进行更多的处理。因此,通过执行“早期”解析操作,即,在停止渲染输出的处理的时刻,本文所描述的技术可以有助于避免将数据从存储器不必要地加载回,从而进一步减少了存储带宽。

相比之下,当在更常规的基于图块的渲染系统中实现msaa技术时,只有当完成了图块的渲染时,才能解析多个采样点的集合,然后在该级将经解析的(经下采样的)像素值写回至存储器(储存器)。由于完成了图块的渲染,并且完成了图块的处理,因此,不需要将完整分辨率的多个样本写回至存储器(储存器),因此可以简单地丢弃。

然而,本文所描述的技术认识到,当可能“部分地”(递增地)渲染图块时(即,在不是所有几何图形可用和被处理的情况下),这种下采样操作可能不会那样高效。

因此,在本文所描述的技术中,在暂停(停止)渲染输出的生成的时刻执行解析操作。同时,生成了差值集,这些差值可与渲染输出的解析版本一起使用,以恢复渲染输出的较高分辨率版本。因而这仍然可使不写出完整分辨率的多个样本并丢弃,以帮助减少存储带宽。

另一方面,如果存在所讨论的渲染输出的尚待处理的另一些图元,并且这些图元的进一步处理可能需要使用到目前为止的渲染输出的部分处理的完整分辨率输出值(如上所述),则可以将经下采样的数据值和差值载入并用于恢复渲染输出的完整分辨率版本,然后将其用于继续处理渲染输出。因此,当恢复渲染输出的处理时,仍可以恢复较高分辨率(在需要时)。

本文所描述的技术的图形处理器通常包括栅格化器和渲染器。

可以将栅格化器(栅格化器电路)可以被配置成,以任何合适和希望的方式操作,举例来说,如在已知的栅格化排布结构中。该栅格化器应当根据覆盖(至少部分地)采样点阵列中的哪些采样点(或哪些采样点集)来生成用于处理的图形片段,该采样点阵列覆盖由该栅格化器接收到的渲染输出的面积、给定图元等。

在实施方式中,栅格化器生成由正被栅格化的所述(和各个)图元所覆盖的各个采样点的图形片段,和/或以下各组多个采样点(例如,采样掩模)的图形片段:所述各组多个采样点被发现包括由正被栅格化的所述(和各个)图元所覆盖的采样点(以及出于另一理由(诸如因图元未通过早期深度测试)而原本未能从处理中剔除的采样点)。相应地,由栅格化器生成的各个片段可以根据需要来表示单个采样点(或与该采样点相关联)或者多个采样点。在实施方式中,各个片段表示一组多个采样点,在实施方式中,一组四个采样点(并且在实施方式中,是2×2的采样点阵列)。

图形处理器的渲染器(渲染器电路)应当能够操作以渲染(着色)该渲染器所接收到的图形片段,以生成希望的输出图形片段数据。该渲染器可以包含任何合适和希望的渲染部件,并且可以以任何合适和希望的方式进行配置。因此,例如,该渲染器可以包括固定功能渲染流水线,包括一个或更多个固定功能渲染级(电路),诸如纹理映射器(texturemapper)、混合器(blender)、雾化(fogging)单元等。在实施方式中,渲染器包括片段着色器(着色器流水线)(即,可编程处理电路,该可编程处理电路能够操作并且可以被编程为对片段执行片段着色程序以便渲染这些片段)。

渲染器将处理该渲染器接收到的片段,然后生成输出的经渲染片段数据,在实施方式中,然后,将该经渲染的片段数据写入至外部存储器中的输出缓冲器(诸如帧缓冲器)以供使用(例如,在显示器上显示帧)。可以将经渲染的片段数据经由诸如图块(例如,颜色)缓冲器的中间缓冲器写入至(外部)输出缓冲器(如在基于图块的图形处理系统中的情况一样)。

待生成的渲染输出可以包括要通过图形处理器生成的任何渲染输出。因此,该待生成的渲染输出例如可以包括要在基于图块的图形处理器中生成的图块,和/或输出的片段数据的帧的全部或一部分。

如上提及,在实施方式中,正被生成的渲染输出是正通过图形处理器(因此图形处理器是基于图块的图形处理器)生成的总体输出(诸如待显示的帧)的区域(例如,图块)。

申请人已经在这点上认识到,在基于图块的图形处理系统中,可能希望从处理一个图块切换成处理另一或另一些图块,然后再返回以继续处理较早的图块等等。这例如在以下情况时可能出现:可以用于要在渲染图块时使用的图块数据结构的存储器的量受到限制,使得例如可能希望处理仅已部分地完成了相关数据结构的图块,以便释放被那些数据结构所占用的存储器空间。然而,这意味着仅已部分地处理了该图块,因此,接着可能必需在稍后时间恢复该图块的处理,例如,当已经生成了包含该图块的先前未被处理的新数据的新数据结构时等等。

可以以任何合适和希望的方式来触发停止对渲染输出的处理,从而触发存储渲染输出的下采样版本的数据元和所述差值集,例如,如上所述。

例如,该停止可以由正被处理的渲染输出的当前数据结构被用尽来触发。例如,对于基于图块的图形处理系统的情况来说,将准备图块的各种数据结构,以使能够生成该图块。当将图形处理器触发以对图块进行处理时,图块的数据结构可能不完整(不包含完全处理该图块所需的所有数据)。因此,在该情况下,图形处理器将处理该图形处理器接收到的图块的(不完整的)数据结构,但是当完成了这些数据结构时,该图形处理器接着需要等待可用(待处理)的该图块的包含进一步数据的新数据结构,然后才可以继续该图块的处理。

例如,在图形处理器需要切换以生成不同的总体渲染输出(例如,帧)的情况下,也可以触发该停止。例如,在用于虚拟现实时间扭曲(timewarp)操作的背景切换的情况下,可能会出现这种情况,例如,其中,以全帧速率(例如,60fps)渲染“时间扭曲”帧,并且在“时间扭曲”的关闭周期期间渲染vr应用的完整帧,然后根据需要抢先进行时间扭曲处理。然后,在发生抢先时,将遇到部分帧。该操作也可能因与其它数据(诸如几何图形高速缓存)的交互而被触发,例如,在希望以牺牲像素流量为代价将几何图形保持在高速缓存中的情况下。

各种其它布置当然也是可以的。

在本文所描述的技术中,当生成渲染输出时,保持并存储渲染输出的第一较高分辨率版本。这可以例如以常见的方式存储在例如图块缓冲器中。这些图块缓冲器应被存储在图形处理器的适当(本地)存储器中和/或可由图形处理器访问,诸如并且在实施方式中,图形处理器的(本地)ram或者与图形处理器相关联的(本地)ram。因此,在实施方式中,图形处理器存储表示渲染输出的第一分辨率的数据元的步骤包括将第一分辨率的数据元存储在图形处理器的(本地)存储器和/或图形处理器可访问的(本地)存储器中。

可以将图块缓冲器存储在不同的物理存储器中,但是在实施方式中,将图块缓冲器存储在同一物理存储器中。

图块缓冲器存储要应用于渲染输出的片段颜色等的值,并且可以以任何适当和希望的方式进行配置。图块缓冲器应当并且在实施方式中确实存储正被生成的渲染输出(例如,图块)的各个采样位置的颜色等的值。因此,图块的图块缓冲器应当并且在实施方式中确实存储所讨论的图块内的各个采样位置的当前颜色等的值。在图块缓冲器中存储的颜色等的值应当并且在实施方式中随着对图元进行栅格化/渲染以生成新的片段输出数据而进行存储和更新。

因此,在实施方式中,本文所描述的技术中的数据元包括要用于渲染输出中的采样位置的、采用颜色等的值的形式的片段数据。在实施方式中,在渲染输出的生成期间,对片段数据(颜色等)值进行多采样并且相应地以第一较高分辨率(多采样)格式进行存储,然后进行解析以给出渲染输出的各个像素的单个片段数据(颜色等)值。

在实施方式中,还对深度值进行多采样并且可以以类似的方式例如存储在图块缓冲器内的z缓冲器中。在实施方式中,也以相同方式处理经多采样的深度值。

当停止所讨论的渲染输出的处理,从而触发将部分渲染输出的片段数据值(例如,颜色等的值和深度值)写出至存储器时,将渲染输出的下采样版本写出至存储器。可以以任何适当和希望的方式进行这种下采样,例如并且在实施方式中,对于所讨论的图形处理器和图形处理系统以正常的方式进行这种下采样。例如,图形处理器对存储的渲染输出的第一分辨率的数据元进行下采样以生成表示渲染输出的所述第二分辨率的数据元阵列的步骤包括:对第一分辨率的数据元进行平均化。然而,根据需要,下采样可以包括其它合适的解析操作。

渲染输出的下采样版本的数据元可以它们的原始格式写出。另选地,根据需要,表示渲染输出的所述第二分辨率的数据元阵列可以以编码(压缩)格式写出。在这点上存在各种合适的编码方案。

在本文所描述的技术中,还写出对表示渲染输出的第一分辨率的数据元与所生成的表示渲染输出的所述第二分辨率的数据元阵列之间的差异进行指示的差值集,和渲染输出的下采样版本。对该差值进行配置,使得差值集和渲染输出的下采样版本一起使得能够恢复渲染输出的第一较高分辨率(多采样)表示。因此,应意识到,由图形处理器在图形图元的处理期间存储的渲染输出的第一较高分辨率表示的数据元此刻无需写出至存储器(并且不被写出至存储器)并且可以丢弃。

在本文所描述的技术中,该差值可以以任何合适和希望的方式来指示表示渲染输出的第一分辨率的数据元与所生成的表示渲染输出的所述第二分辨率的数据元阵列之间的差异,使得能够使用该差值恢复渲染输出的第一较高分辨率表示。

在实施方式中,所存储的差异仅表示经解析的数据值与以下数据值之间的(有符号的)差异(增量):应用了解析(下采样)操作以获得经解析的数据值的(经多采样的)数据元集的数据值(例如,对于4×msaa,在实施方式中,差异数据表示经解析的像素值与和该像素相关联的4×采样点的值之间的差异)。因此,在实施方式中,该差值集表示表示渲染输出的第二分辨率的经下采样的数据元与所存储的渲染输出的第一分辨率的数据元之间的差异。

因此,可以基于例如所应用的多采样的级别和/或所应用的解析(下采样)操作来适当地确定差异数据。例如,在解析操作包括对一组经多采样的值取平均值的情况下,差值因而可以是与该平均值的差(增量)的集。然而,其它布置当然也是可以的,并且可以根据需要以更复杂(或不太复杂)的方式来执行差异的编码。例如,也可以对彼此相对的差异(以及对经解析的数据值的差异)进行编码。在该情况下,可以将经多采样的数据元中的一个数据元(例如,表示第一采样位置)视为参考值,然后计算与该参考值相对的差异(增量)。另一示例是计算与中值样本值相对的差异。

该差值集可以以它们的原始格式写出,或者可以以经编码(压缩)的格式写出。

将渲染输出的下采样版本和较高分辨率的差值集写入的存储器可以是图形处理器(和图形处理系统)的任何合适和希望的存储器,或者是图形处理器(和图形处理系统)可用的任何合适和希望的存储器。在实施方式中,该存储器是图形处理器的适当的存储器(主存储器)或者图形处理器可用的适当的存储器(主存储器),例如作为其中图形处理器作为一部分的总体图形处理系统(数据处理系统)的一部分。由此,在实施方式中,将渲染输出的下采样版本和较高分辨率的差值集一起写出至总体图形(数据)处理系统的适当的dram(或其它主存储器)。其它布置当然也是可以的。

当然,可以将渲染输出的下采样版本写入与较高分辨率的差值集相同或不同的存储器,只要它们能够以适当方式一起恢复即可。

像该经解析的渲染输出的较低分辨率版本,以及高分辨率的差值集一样,在实施方式中,当在完成渲染输出之前停止渲染输出的处理时,在恢复渲染输出的处理时将需要恢复的任何其它数据结构也被适当地写出至存储器。

一旦图形处理器停止了处理所讨论的渲染输出(并且数据结构已被写出至存储器),然后图形处理器就可以执行其它处理,诸如另一渲染输出(诸如帧的不同图块)的处理的一些或全部。

然后,在稍后的时间点,图形处理器将被触发以恢复仅部分地完成的渲染输出的处理。再次地,对渲染输出的处理的这种恢复可以根据需要进行触发,例如,根据存在现在准备处理的所讨论的渲染输出(例如,图块)的包含新数据的新数据结构、根据vr时间扭曲的背景切换等。

当恢复渲染输出区域的处理时,图形处理器能够操作以从存储器加载渲染输出的下采样版本和较高分辨率的差值集,并使用所述下采样版本和差值集来重新创建(恢复)渲染输出的较高分辨率版本,然后可以将所述较高分辨率版本例如加载到渲染输出的图块(彩色)缓冲器等中,以使在继续渲染输出的处理时可以使用那些缓冲器。

然而,申请人进一步认识到,在一些情况下,当恢复渲染输出的处理时,可能不需要从存储器加载渲染输出的下采样版本或者较高分辨率的差值集。例如,当图形处理器能够操作以确定是否存在渲染输出的需要处理的任何进一步的图形图元时,可能就是这种情况。如果不存在渲染输出的需要处理的进一步的图形图元,则无需载入该渲染输出的的数据值,因此在实施方式中,就没有这样做。

因此,在实施方式中,从存储器加载表示渲染输出的所述第二分辨率的数据元阵列和所确定的差值集的步骤可以根据是否存在渲染输出的待处理的其他图形图元而有条件地执行。

如果不存在所讨论的渲染输出的待处理的另一些图元,则由此完成该渲染输出的生成。因此,无需将该渲染输出的(任何)数据加载回,从而在这种情形下节省了存储带宽。这起作用是因为,在本文所描述的技术中,已经执行了所需的解析操作,即,在暂停渲染输出的生成时,并且渲染输出已经以希望的解析格式写出。

在实施方式中,从所述存储器加载表示所述渲染输出的所述第二分辨率的数据元阵列和所确定的差值集的步骤包括:确定是否存在所述渲染输出的待处理的另一些图元,并且仅在确定存在所述渲染输出的待处理的其他图形图元时,加载表示所述渲染输出的所述第二分辨率的数据元阵列和所确定的差值集。

可以相信,这种从存储器有条件地加载这样的数据是新颖的且本身有优势的。

因此,本文所描述的技术的另一实施方式包括一种在生成渲染输出时操作图形处理器的方法,所述图形处理器包括:

栅格化器电路,所述栅格化器电路对输入的图元进行栅格化,以生成待处理的图形片段,各个图形片段具有与该图形片段相关联的一组一个或更多个采样点;以及

渲染器电路,所述渲染器电路对由所述栅格化器电路生成的图形片段进行渲染,以生成所述图形片段的经渲染的片段数据,并且所述渲染器电路能够操作以生成表示渲染输出的第一较高分辨率的数据元阵列,并且在写出所述渲染输出时,对所述第一分辨率的数据元阵列进行下采样,以生成表示所述渲染输出的第二较低分辨率的数据元阵列;

所述方法包括以下步骤:

所述图形处理器通过对图形图元进行处理以生成表示渲染输出的所述第一分辨率的数据元阵列,来生成所述渲染输出;以及

存储表示所述渲染输出的所述第一分辨率的数据元;

所述方法还包括以下步骤:

所述图形处理器停止生成所述渲染输出,并且在所述图形处理器这样做时,进行如下操作:

对所述渲染输出的所存储的所述第一分辨率的数据元进行下采样,以生成表示所述渲染输出的所述第二分辨率的数据元阵列;

确定差值集,所述差值集指示表示所述渲染输出的所述第一分辨率的数据元与所生成的表示所述渲染输出的所述第二分辨率的数据元阵列之间的差异;以及

将表示所述渲染输出的所述第二分辨率的数据元阵列与所确定的差值集一起写出至存储器;并且

当图形处理器能够恢复渲染输出的处理时,该图形处理器:

确定是否存在所述渲染输出的待处理的另一些图元;而在确定存在渲染输出的待处理的另一些图元时,

加载表示渲染输出的所述第二分辨率的数据元阵列和所确定的差值集,并且在继续渲染输出的处理时使用这些数据元阵列和差值集。

本文所描述的技术的另一实施方式包括一种包括图形处理器的图形处理系统,所述图形处理系统包括:

栅格化器电路,所述栅格化器电路对输入的图元进行栅格化,以生成待处理的图形片段,各个图形片段具有与该图形片段相关联的一组一个或更多个采样点;以及

渲染器电路,所述渲染器电路对由所述栅格化器电路生成的图形片段进行渲染,以生成所述图形片段的经渲染的片段数据,并且所述渲染器电路能够操作以生成表示渲染输出的第一较高分辨率的数据元阵列,并且在写出所述渲染输出时,对所述第一分辨率的数据元阵列进行下采样,以生成表示所述渲染输出的第二较低分辨率的数据元阵列;

所述图形处理器被配置成进行如下操作:

通过对图形图元进行处理以生成表示渲染输出的所述第一分辨率的数据元阵列,来生成所述渲染输出;以及

存储表示所述渲染输出的所述第一分辨率的数据元;

所述图形处理器还被配置成,当所述图形处理器在完成所述渲染输出之前停止生成所述渲染输出时,进行如下操作:

对所述渲染输出的所存储的所述第一分辨率的数据元进行下采样,以生成表示所述渲染输出的所述第二分辨率的数据元阵列;

确定差值集,所述差值集指示表示所述渲染输出的所述第一分辨率的数据元与所生成的表示所述渲染输出的所述第二分辨率的数据元阵列之间的差异;以及

将表示所述渲染输出的所述第二分辨率的数据元阵列与所确定的差值集一起写出至存储器;并且

图形处理器还被配置成,当图形处理器能够恢复渲染输出的处理时:

确定是否存在渲染输出的待处理的另一些图元;并且

在确定存在渲染输出的待处理的另一些图元时,加载表示渲染输出的所述第二分辨率的数据元阵列和所确定的差值集,并且在继续渲染输出的处理时使用这些数据元阵列和差值集。

如本领域技术人员应当清楚,本文所描述的技术的这些方面可以并且在实施方式中确实包括本文所描述的技术的可选特征中的任一个或更多个或全部特征。

在这些实施方式中,在确定存在所讨论的渲染输出的待处理的另一些图元时,即,使得数据确实需要载入以恢复渲染输出的较高分辨率版本,例如,以上述方式,在要恢复渲染输出(例如,图块)的生成时,从存储器读回渲染输出的解析版本,以及针对该解析版本的经差异编码的多样本。

例如,然后可以使用经解析的(经下采样的)面和多样本差值来重新生成完整的多样本值,并存储在适当的(例如,图块)缓冲器中,以在继续渲染输出时(例如,该图块)的生成时(重新)使用。

然后,当要重新开始渲染输出的处理时,使用存储至存储器的经解析的渲染输出和差异数据,来恢复在停止渲染输出的生成那一刻,按照实际情况的渲染输出的较高分辨率版本,并且使用所恢复的(先前存储的)经解析的渲染输出和差异数据来生成较高分辨率渲染输出的新版本,以供在继续处理渲染输出时使用。

对于图块缓冲器的情况来说,这可以并且在实施方式中通过以下步骤来完成:从存储器加载已保存的数据元,使用差异数据来重建渲染输出的较高分辨率版本的数据元,然后将渲染输出的较高分辨率版本加载回到图块(例如、颜色等)缓冲器和z-缓冲器中,以供在继续渲染输出的处理时使用。因此,一旦读入了所存储的经解析的数据元和差值,然后就可以适当地重建渲染输出的第一较高分辨率版本,例如,通过将下采样的值与所述差值中的各个差值相加,其中,所述差值就是以这种方式进行编码的。

这将相应地以图块缓冲器在停止渲染输出的处理时的状态来重新创建该图块缓冲器。因此,在暂停图块的渲染的情况下,本文所描述的技术在实施方式中可以用于(并且是用于)恢复图块的(多采样)图块缓冲器。

可以将先前保存的数据元用于创建图块缓冲器,以供在以任何适当和希望的方式继续渲染输出的处理时使用。在实施方式中,使用dma(直接存储器访问(directmemoryaccess))处理来读入所存储的数据元和差值,但是其它布置当然也是可以的。例如,图形处理器的处理核心(着色器核心)也可以执行所存储的数据元和差值的加载。

像在停止渲染输出的处理时该渲染输出的当前颜色(图块)缓冲器以及z缓冲器一样,在实施方式中,被需要继续渲染输出(例如,图块)的处理的任何其它数据结构也相应地在适当时候并且以适当的方式从它们的先前保存的值进行恢复。

一旦适当地创建(恢复)了正恢复其处理的渲染输出的颜色(图块)缓冲器以及任何其它数据结构,然后就可以并且在实施方式中恢复渲染输出的处理。因此,一旦被写出至存储器的数据元已经被加载并用于重建渲染输出的较高分辨率版本,以供在继续渲染输出的处理时使用,图形处理器就将恢复渲染输出的图元的处理,包括适当地栅格化和渲染图元,以便继续生成渲染输出。

因此,随着接收到要处理的新图元,将第一较高分辨率的渲染输出(例如,存储在图块缓冲器中的第一较高分辨率的渲染输出)进行更新。然后,如上所述,如果再次暂停关联的图块的渲染,则可以再次写出经更新的图块缓冲器,和经更新的差异数据集(和/或一旦完成图块的渲染,在该情况下,无需写出差异数据(尽管仍可以写出,但接着会被丢弃))。

因此,在实施方式中,在从存储器加载回表示渲染输出的第二分辨率的下采样数据元和关联的差值,以及用于重建第一分辨率的渲染输出(即,重新填充图块缓冲器)之后,在实施方式中,渲染输出的生成通过以下步骤继续:处理新的图形图元,以存储渲染输出的第一分辨率的新数据元,并由此更新第一分辨率的渲染输出(更新图块缓冲器)。在图形处理器停止生成渲染输出的情况下,然后对经更新的渲染输出的第一分辨率的数据元进行下采样,以确定经更新的表示渲染输出的第二分辨率的数据元,并且确定经更新的差值集,然后将该经更新的差值集和经下采样的数据元例如以与上述相同的方式写出,以使在图形处理器恢复渲染输出的处理时能够恢复第一分辨率的渲染输出。

从上面可以意识到,至少在实施方式中,本文所描述的技术将涉及部分地处理第一渲染输出(例如,图块),然后在处理另一渲染输出(例如,图块)时暂停该第一渲染输出的处理,再然后恢复第一渲染输出的处理等等,例如其中,在处理不同的渲染输出之间重复切换。

由此,在实施方式中,本文所描述的技术的方法包括(并且图形处理器被相应地配置成):

所述图形处理器停止第一渲染输出的处理,并且在所述图形处理器这样做时,进行如下操作:

对所述第一渲染输出的所存储的所述第一分辨率的数据元进行下采样,以生成表示所述第一渲染输出的所述第二分辨率的数据元阵列;

确定如下差值集,该差值集指示表示所述第一渲染输出的所述第一分辨率的数据元与所生成的表示所述第一渲染输出的所述第二分辨率的数据元阵列之间的差异;以及

将表示所述第一渲染输出的所述第二分辨率的数据元阵列与所确定的差值集一起写出至存储器;并且

在停止所述第一渲染输出的处理之后,进行如下操作:

对图元进行处理以生成不同的第二渲染输出,对图元进行处理以生成表示所述第二渲染输出的所述第一分辨率的数据元阵列;以及

存储表示所述第二渲染输出的所述第一分辨率的数据元;

所述图形处理器停止所述第二渲染输出的处理,并且在所述图形处理器这样做时,进行如下操作:

对所述第二渲染输出的所存储的所述第一分辨率的数据元进行下采样,以生成表示所述第二渲染输出的所述第二分辨率的数据元阵列;

确定如下差值集,该差值集指示表示所述第二渲染输出的所述第一分辨率的数据元与所生成的表示所述第二渲染输出的所述第二分辨率的数据元阵列之间的差异;以及

将表示所述第二渲染输出的所述第二分辨率的数据元阵列与所确定的差值集一起写出至存储器。

当停止第二输出的生成时,然后,图形处理器可以根据需要切换回处理第一渲染输出等等。

在这种情况下,在实施方式中,第一渲染输出和第二渲染输出包括正被生成的总体渲染输出(载入待显示的帧)的相应不同的图块。

相应地,可以以这种方式交错两个以上的渲染输出(例如,图块)的处理。同等地,给定渲染输出的处理可以被停止并恢复多次(不止一次),例如直到已经完成渲染输出。

像栅格化器和渲染器等一样,图形处理器及其执行的图形处理流水线可以包括并且应当包括图形处理器和处理流水线中通常存在的其它处理电路和级,诸如图块缓冲器(和其它缓冲器)、深度测试器、回写单元、混合器等。

图形处理器还可以包括并且在实施方式中确实还包括存储本文所描述的数据(诸如片段数据、经渲染的片段和输出数据、差异数据以及其它状态信息等)和/或存储用于执行本文所描述的处理的软件的一个或更多个存储器和/或存储器装置,和/或与所述一个或更多个存储器和/或存储器装置进行通信。图形处理器还可以与主机微处理器和/或与用于基于通过图形处理器生成的数据来显示图像的显示器通信。

可以使用本文所描述的技术,而与图形处理器可以提供的输出形式无关。因此,例如,可以在渲染输出打算形成用于显示(例如在屏幕或打印机上)的图像(帧)的情况下使用(并且在实施方式中就是这种情况)。然而,本文所描述的技术也可以在渲染输出不打算用于显示的情况下使用,例如,在渲染输出是图形处理器正用于生成的纹理(例如,在“渲染至纹理”操作中)的情况下,或者,实际上,在图形处理器正用于生成的输出是任何其它形式的数据阵列的情况下。

本文所描述的技术的各种功能可以以任何希望和合适的方式来执行。例如,本文所描述的技术的功能可以根据需要以硬件或软件来实现。由此,例如,本文所描述的技术的各种功能部件、处理级以及“装置(means)”可以包括能够操作以执行各种功能等的合适的一个或多个处理器、一个或多个控制器、功能单元、电路、电路系统、处理逻辑、微处理器排布结构等,诸如可以被编程成以希望的方式操作的适当配置的专用硬件部件(处理电路/电路系统)和/或可编程硬件部件(处理电路/电路系统)。

这里还应注意,如本领域技术人员将意识到,本文所描述的技术的各种功能等可以在给定处理器上复制和/或并行执行。同等地,若希望的话,各种处理级可以共用处理电路/电路系统等。

本文所描述的技术可应用于任何合适的形式或配置的图形处理器系统、图形处理器以及图形处理流水线。本文所描述的技术特别可应用于基于图块的图形处理器和图形处理系统。由此,在实施方式中,图形处理器是基于图块的图形处理器。

针对为执行上面讨论的特定功能所必需的任何硬件的主题,图形处理器可以以其它方式包括该图形处理器所包括的常见功能单元、电路等中的任一个或更多个或全部。

本领域技术人员还应意识到,本文所描述的技术的全部所描述的实施方式在合适的情况下,可以包括本文所描述的可选特征中的任一个或更多个或全部特征。

根据本文所描述的技术的方法可以至少部分地使用软件(例如,计算机程序)来实现。由此,可以看出,当从另一些实施方式观察时,本文所描述的技术包括:计算机软件,该计算机软件当被安装在数据处理器上时具体适于执行本文所描述的方法;计算机程序部件,该计算机程序部件包括计算机软件代码,该计算机软件代码用于当该程序部件在数据处理器上运行时执行本文所描述的方法;以及计算机程序,该计算机程序包括代码,该代码适于当该程序在数据处理系统上运行时,执行本文所描述的方法的所有步骤或者其中一个方法的所有步骤。所述数据处理系统可以是微处理器、可编程fpga(现场可编程门阵列)等。

本文所描述的技术还扩展至包括这样的软件的计算机软件载体,即,当该软件用于操作图形处理器、渲染器或包括数据处理器的微处理器系统时,使与所述数据处理器、所述处理器、渲染器或系统结合地执行本文所描述的技术的方法的步骤。这种计算机软件载体可以是物理存储介质,例如rom芯片、cdrom、ram、闪速存储器或磁盘,或者可以是信号,诸如导线传输电子信号、诸如卫星的光学信号或无线电信号等。

还应意识到,不是本文所描述的技术的方法的所有步骤都需要通过计算机软件来执行,并由此,根据另一宽泛的实施方式,本文所描述的技术包括用于执行本文所阐述的方法的步骤中的至少一个步骤的计算机软件和安装在计算机软件载体上的这种软件。

因此,本文所描述的技术可以适当地具体实现为供与计算机系统一起使用的计算机程序产品。这种实现可以包括在诸如非暂时性计算机可读介质(例如,软盘、cdrom、rom、ram、闪速存储器或硬盘)的有形介质上固定的一系列计算机可读指令。这种实现还可以包括能通过有形的介质(包括但不限于光学或模拟通信线路),或者利用无线技术(包括但不限于微波、红外线或其它传输技术)无形地,经由调制解调器或其它接口装置向计算机系统传输的一系列计算机可读指令。该一系列计算机可读指令具体实现本文先前所描述的全部或部分功能。

本领域技术人员应意识到,这种计算机可读指令可以采用许多编程语言来编写,以供与许多计算机架构或操作系统一起使用。而且,这种指令可以利用当前或将来的任何存储器技术(包括但不限于半导体、磁或光学存储器技术)来存储,或者利用当前或将来的任何通信技术(包括但不限于光学、红外线或微波通信技术)来传送。设想的是,这种计算机程序产品可以作为具有附随打印或电子文档的可去除介质(例如,收缩包装软件)分发、随计算机系统预装(例如,在系统rom或固定盘上),或者从服务器或电子公告板通过网络(例如,互联网或万维网)分发。

现在,对本文所描述的技术的多个实施方式进行描述。

当要显示计算机图形图像时,其通常首先被定义为一系列图元(多边形),该图元接着依次被划分(栅格化)成用于图形渲染的图形片段。在正常图形渲染操作期间,渲染器将修改与各个片段相关联的(例如)颜色(红、绿以及蓝,rgb)和透明度(alpha,a)数据,以使可以正确地显示该片段。一旦该片段已经完全经过渲染器,然后就将它们的关联数据值存储在存储器中,准备输出以用于显示。

本实施方式特别涉及在尤其是显示计算机图形图像时促进抗混叠操作。通过取得待显示的图像的多个样本,然后将那些样本下采样到显示器的输出分辨率来执行抗混叠。

图3(其示意性地示出了本实施方式中使用的基本抗混叠布置)示出了将采样掩模34重复应用至待显示的图像。采样掩模34的每次应用对应于将被显示的图像的像素。

每个采样掩模包括采样点集,该采样点集将用于对所讨论的输出像素的图像进行采样,并且相应地确定该像素要如何在最终显示器上显示。

图3还示出了以单个图元32的形式覆盖在采样掩模阵列30上的图像。(这里应意识到,为简单起见,在图3中已经将图像示出为包括单个图元。实际上,图像(或其它输出)可能并且通常会包括许多重叠的图元。)如可以从图3看出,图元32覆盖采样掩模阵列30中的一些采样掩模,但是仅穿过其它一些采样掩模的一部分。

为了处理图像的图元32,渲染系统本质上将在栅格化级确定各个采样掩模应用的各个采样点集中的哪些采样点是被图元32覆盖着,然后渲染并存储那些所覆盖的采样点的数据,以使图元32的图像可以正确地显示在显示装置上。

现在,将参照图4描述在本实施方式中以这种方式显示的图元32的图像的处理,图4示意性地示出了可以根据本文所描述的技术进行操作的图形处理流水线1。图4所示图形处理流水线1是基于图块的渲染器,并由此其将生成渲染输出数据阵列的图块,诸如待生成的输出帧。(如本领域技术人员应意识到,若希望的话,可以使用其它渲染布置。)

(在基于图块的渲染方面,不是将整个渲染输出(例如,帧)按即时模式(inimmediatemode)有效地一次性处理为渲染,而是将该渲染输出(例如,待显示的帧)划分成多个较小的子区域,通称为“图块”。各个图块(子区域)单独进行渲染(通常是一个接一个地),然后将经渲染的图块(子区域)重新组合,以提供完整的渲染输出,例如,用于显示的帧。在这样的布置中,通常将渲染输出划分成规则尺寸和形状的子区域(图块)(其例如通常是正方形或矩形),但这不是必要的)。

渲染输出数据阵列通常可以是打算在显示装置(诸如屏幕或打印机)上显示的输出帧,但是例如也可以包括打算在稍后的渲染工序(pass)(还已知为“渲染至纹理”输出)等中使用的中间数据。

图4示出了与本实施方式的操作相关的图形处理流水线1的主要部件和流水线级。如本领域技术人员应意识到,可以存在图4中未例示的图形处理流水线的其它部件。在这里还应注意,图4仅是示意性的,并且例如,实际上,所示功能性单元和流水线级可以共用有效硬件电路/电路系统,即使在图4中将它们示意性地示出为单独的级。还应意识到,如图4所示的图形处理流水线的级、部件以及单元等中的每一个可以根据需要来实现,并且相应地,例如包括用于执行必需操作和功能的适当的电路/电路系统和/或处理逻辑等。

图4示意性地示出了在已经生成用于输入至栅格化处理的图形图元(多边形)2之后的流水线级。因此,在此刻,图形数据(顶点数据)已经经历了片段前端操作8(诸如变换和照明操作(未示出)),以及图元设定级(未示出),以响应于提供给图形处理器的命令和顶点数据,来设定待渲染的图元。

如图4所示,图形处理流水线1的这个部分包括多个级,包括栅格化级3、早期z(深度)和模板测试级4、片段着色器6、后期z(深度)和模板测试级7、混合级9、图块缓冲器10以及下采样与写回(多样本解析)级11。

特别地,图4示意性地示出了当执行4×msaa时图形处理流水线1的操作(然而当然可以应用任何希望级别的msaa,例如8x、16x等)。因此,如图4所示,由于执行了4×msaa,因此,栅格化器3将针对待生成的输出应用(测试)具有四个采样位置(即,4×采样掩模)的采样掩模,并且将其为渲染而生成的各个片段与对应于采样掩模的给定应用的四个采样点的集合相关联。换句话说,将单个片段用于一次性地共同渲染采样掩模(和相应地输出中的像素)的给定应用的采样点集中的所有四个采样点。

因此,在本示例中,考虑包括图3所示的图元32的图像,栅格化器3将从图形处理系统的片段前端处理级8接收该图元,然后确定图像的哪些采样点集(即,实际上阵列30中的采样掩模34的哪些应用)包括被图元32覆盖的采样点。(这可以以本领域中已知的任何适当的方式来执行。)然后,栅格化器3将针对被发现包括由图元32所覆盖的采样点的采样掩模的每次应用生成片段。因此,栅格化器3将生成与四个采样点的集合相关联的片段。然后栅格化器将那些片段输出至图形处理流水线1的后续级以进行处理。

图形处理流水线1的栅格化级3进行操作以将组成渲染输出的图元(例如,待显示的图像)栅格化成用于处理的单独图形片段。为了做到这一点,栅格化器3接收用于渲染的图形图元2,针对采样点栅格化该图元,并且生成用于渲染该图元的具有适当位置(表示适当的采样位置)的图形片段。

在本实施方式中,栅格化器3的该样本测试器被配置成能够测试每时钟周期包含四个采样点的采样掩模(即,实际上是测试将与以下片段相关联的四个采样点的集合:如果这四个采样点中的至少一个采样点处于图元内,则将针对这四个采样点的集合来生成片段),并因此,栅格化器3“天然地”支持4×msaa。

栅格化器针对被发现包括图元的采样掩模的每个应用生成片段。然后,将这些片段向前发送至流水线的其余部分以供处理。

早期z/模板级4如本领域所已知地针对其从栅格化器3接收的片段执行z(深度)测试,以查看在该级是否可以丢弃(剔除)任何片段。为了做到这一点,该早期z/模板级比较从栅格化器3发出的片段(和其相关联)的深度值与已经渲染的片段的深度值(这些深度值被存储在作为图块缓冲器10的一部分的深度(z)缓冲器中),以确定新的片段是否会被已经渲染的片段遮蔽(或者不遮蔽)。同时,执行早期模板测试。

将早期深度和模板测试4配置成能够在每时钟周期对四个样本进行深度和模板测试,并因此“天然地”支持4×msaa。

然后,将通过片段早期z和模板测试级4的片段发送至片段着色级6。片段着色级6针对通过早期z和模板测试的片段执行适当的片段处理操作,以便处理该片段从而生成适当的片段数据等,以用于渲染输出(例如,用于片段的显示)。

该片段处理可以包括任何合适和希望的片段着色处理,诸如针对片段执行片段着色器程序、向片段应用纹理、向片段应用雾化或其它操作等,以生成适当的片段数据。在本实施方式中,片段着色级6采用着色器流水线的形式(可编程片段着色器)。但是,根据需要,诸如也使用固定功能片段着色单元或者代替固定功能着色单元的其它布置也是可以的。

将片段着色器6配置成,并行处理与其接收到的片段相关联的所有采样点,即,作为整体处理其接收到的各个片段。

片段着色级6具有与其相关联的变化插值器(变化位置评估器)12,该变化插值器12用于确定当前片段的正确变化值。对于某些插值模式,诸如质心映射(centroidmapping),变化插值器使用片段的关联覆盖掩模来选择片段内的正确位置,以对变化的数据进行插值。因此,将变化插值器12配置成能够并行处理与其接收到的片段相关联的所有采样点,以便能够为质心映射选择正确的插值位置,而无论片段是有四个还是八个与其关联的采样点。

然后,存在“后期”片段z和模板测试级7,该后期片段z和模板测试级尤其是针对经着色的片段执行末端的流水线深度测试,以确定是否实际上在最终图像中看到经渲染的片段。该深度测试通过比较从片段着色级6发出的片段(和其相关联)的深度值与已经渲染的片段的深度值(如存储在深度缓冲器中),来针对在图块缓冲器10的z缓冲器中存储的片段的位置使用z缓冲值,以确定新片段的片段数据是否应当替换已经渲染的片段的片段数据。该后期片段深度和模板测试级7还针对片段执行任何必需的“后期”alpha和/或模板测试。

还将后期深度和模板测试级7配置成能够在每时钟周期对四个样本进行深度和模板测试,并因此“天然地”支持4×msaa。

然后,根据需要,使通过后期片段测试级7的片段与已经存储在图块缓冲器10中的片段在混合器9中经受任何必需的混合操作。针对片段必需的任何其它剩余操作(诸如抖动(dither)等)(未示出)也是在该级执行的。

将混合器9配置成能够在每时钟周期对四个样本进行混合,并因此“天然地”支持4×msaa。

最后,将(经混合的)输出片段数据(值)写入至图块缓冲器10,从该图块缓冲器例如可以将它们输出至帧缓冲器以用于显示。还将输出片段的深度值适当地写入至图块缓冲器10内的z缓冲器。(图块缓冲器和z缓冲器将分别存储该缓冲器表示的各个采样点(本质上,正被处理的图块的各个采样点)的适当颜色等或z值。)图块缓冲器存储表示渲染输出(例如,待显示的图像)的一部分的一批片段数据。

在本实施方式中,设置了三个图块缓冲器。各个图块缓冲器以32×32阵列存储其片段数据(即,对应于待生成的输出中(例如,待显示的图像中)的采样位置的32×32阵列)。各个32×32数据位置图块缓冲器可以相应地对应于(并将“天然”支持)例如要以4×的抗混叠效果(即,在每像素取得4个样本时)进行显示的帧的16×16像素“图块”。

可以将这些图块缓冲器设置为单独的缓冲器,或者实际上可以全部是同一较大缓冲器的一部分。它们位于图形处理流水线(芯片)上(本地的)。

在这个实施方式中,将这三个图块缓冲器中的两个图块缓冲器用于存储各个采样点的颜色(红色、绿色、蓝色)值(为此可以使用一个图块缓冲器,但两个可能更好),并且将一个图块缓冲器用于存储各个采样点的z(深度)值和模板值。其它布置当然也是可以的。

将来自图块缓冲器10的数据输入至下采样(多样本解析)单元11,并且从那里输出(写回)至输出缓冲器13(其可能不在图形处理平台本身上),诸如显示装置的帧缓冲器(未示出)。(该显示装置例如可以包括包括像素阵列的显示器,诸如计算机监视器或打印机。)

下采样单元11将图块缓冲器10中存储的片段数据下采样至输出缓冲器(装置)的适当分辨率(即,使得生成与输出装置的像素相对应的像素数据阵列),以生成用于输出至输出缓冲器13的输出值(像素)14。

将本实施方式中的图形处理流水线1中的下采样单元11配置成,能够在一个下采样操作(时钟周期)中将来自图块缓冲器10的四个采样位置值下采样至例如用于输出至输出缓冲器13的单个输出值14。因此,在本实施方式中,将下采样和写回单元11配置成,“天然”支持4×抗混叠。

该下采样可以以任何合适的方式来进行。在本实施方式中,将数据的线性混合用于下采样该数据。然而,根据需要,其它布置也是可以的。如果需要,下采样单元11还可以对其输出至输出缓冲器13的数据应用适当的伽马校正,或者这可以例如作为片段着色操作或者以任何其它合适和希望的方式来完成。

一旦渲染输出的图块已经被处理,并且其数据被导出至主存储器(例如,主存储器中的帧缓冲器(未示出))以供存储,就接着处理下一图块等等,直到已经处理了足够图块以生成全部渲染输出(例如,待显示的帧(图像))。

用于图形处理流水线1的其它布置当然是可以的。例如,虽然将上述图形处理流水线1配置成“天然”支持4×多采样,但是通常可以将图形处理流水线1被配置成以类似的方式支持各种级别的多采样/超采样。

现在,将更详细地描述本文所描述的技术的实施方式。本实施方式特别涉及例如如上所述在以下情形中操作图形处理流水线1的基于图块的图形处理器的操作:当正被渲染的图块的处理被中断,使得然后需要在稍后的时间恢复该处理的时候。

例如递增地渲染图块(例如,使用每图块多次通过)就是这种情况,其中,图块的多次通过散置在其它图块的处理中。在例如为处理图块而可以生成的数据的量受到限制的情况下,这种操作就可能会出现,使得图块的处理将在仅已生成为完整地处理该图块所需的数据中的一些但非全部之后才开始,并且一旦最初生成的数据结构已经被用掉,就必须暂停该图块的处理,当生成用于处理图块的进一步的数据时,并且一旦已经生成了用于该图块的处理的更多数据,就恢复该图块的处理等等。可以对组成总体渲染输出(例如,待显示的帧)的多个图块重复该操作。

因此,图5在左侧示出了在单个这样的处理工序期间对图块的处理。如图所示,在该遍处理工序期间(步骤50:“该遍处理工序(pass)结束了?–否”),接收要处理的绘制调用(步骤51),然后,例如以上述方式处理该绘制调用内的图元(步骤52),生成片段(颜色等和深度)数据,然后将其写入图块缓冲器10中(步骤53)。

在该遍处理工序结束时(步骤50:“该遍处理工序结束了?–是”)(可以不是所讨论的图块的处理的结束,并且在本实施方式中不是所讨论的图块的处理的结束,使得仅仅暂停该图块的渲染,以在稍后时刻恢复),然后,将当前存储在图块缓冲器10中的数据传递至写回(多样本解析)级11,然后,该写回级11按照当前实际情况解析图块缓冲器中的数据(步骤54)。然后,计算完整分辨率差值集,该完整分辨率差值表示经解析的数据(来自步骤54)与当前存储在图块缓冲器中的数据之间的差异(步骤55)。然后,将经解析的缓冲写出至存储器(步骤56),和写出该差异数据集(步骤57)。

因此,当暂停图块的渲染时,对当前存储在图块缓冲器10中的数据执行部分解析,然后,将经解析的面与针对该经解析的面的完整分辨率的差异数据集一起写出至存储器,从而使得然后能够重建完整的图块缓冲器(例如,不是尝试以完整的方式,按经多采样的分辨率从图块缓冲器10中写出数据值)。

即,如图6所示,在暂停图块的渲染的那一刻,不是写出存储在图块缓冲器10中的数据的完整的经多采样的数据值s0,0、s0,1等,而是以较低分辨率写出经解析的像素值r0、r1等和完整分辨率的差集(δ0,0、δ0,1)等,从而使得能够重建完整的经多采样的数据值s0,0、s0,1。例如,在解析操作包括取平均值的情况下,经解析的像素值r0是与具有像素值r0的显示像素相关联的四个采样点s0,0、s0,1、s1,0、s1,1的值的平均值,并且将该差值计算为该平均值r0的增量。

因此,在该情况下,将经解析的像素值66与差值阵列67相加,从而使得能够重建完整分辨率的经多采样的数据值63。然而,其它布置也是可以的,例如取决于解析操作和/或如何对差异进行编码。

如图7所示,当恢复所讨论的图块的处理时(步骤70),因此,可以从存储器中加载所存储的数据(步骤73),并且被相应地用于恢复经多采样的图块缓冲器(步骤74)。特别地,当恢复图块的处理时,可以将经解析的数据和完整分辨率的差异一起读回,并且用于恢复完整分辨率的图块缓冲器,然后在继续生成渲染输出时使用该完整分辨率的图块缓冲器(步骤75)。因此,当接收到要处理的其他图元时,对这些图元适当地进行栅格化和渲染以更新图块缓冲器,然后将经更新的图块缓冲器最终传递至下采样单元以生成渲染输出(在下一次暂停渲染输出的生成时,或者在完成图块的处理时)。

在暂停渲染输出的生成那一刻,图形处理器可能不知道针对哪些(若有的话)图块的渲染完成了,因而,在本实施方式中,经解析的缓冲器和差异数据在实施方式中总是在这一刻写出。

然而,可能是以下情况:单独图块的渲染实际上在这一刻已经完成(但是这尚未得到确定)。

因此,在本实施方式中,图形处理器能够操作以检测单独的块是否具有待渲染的任何其他图元。如果不存在其他图元,则无需将完整分辨率的样本加载到图块缓冲器中。因此,在本实施方式中,当图形处理器能够恢复图块或图块集的处理时,检查有关是否存在该图块(或图块集)的待渲染的任何进一步的图形图元,如果不存在(步骤71–“否”),则完成图块的处理(步骤72),并且无需从存储器载入任何数据。另一方面,如果存在待处理的附加图元(步骤71–是),则恢复处理,例如如上所述。

实际上,本实施方式的益处在于,由于在暂停渲染输出的生成时执行解析操作,因此,当实际上不需要该数据时,无需从存储器加载回该数据,从而节省了带宽。

这样,可以根据需要暂停/恢复渲染输出的生成,同时减少了存储带宽需求。例如,当暂停图块的渲染时,完整分辨率的数据值不会被写出至存储器,并且可以在该一刻将该数据值丢弃。如果存在所讨论的图块的待处理的另一些图元,则可以将经解析的数据和该差值一起加载回,并且用于重新填充完整分辨率的图块缓冲器,以便继续渲染图块。另一方面,如果不存在待处理的其他图元,则完成渲染,这是因为已经执行了解析操作。

已经出于例示和描述的目的呈现了前述详细描述。不是旨在排它或将本文所描述的技术限制成所公开的精确形式。鉴于上述教导,许多修改和变化都是可以的。选择所描述的实施方式,以便最佳地说明本文所描述的技术的原理及其实践应用,由此使得本领域其它技术人员能够在各种实施方式中并且以如适于预期特定用途的各种修改例来最佳地利用本文所描述的技术。旨在通过所附的权利要求来限定该保护范围。

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