图形处理单元和使用渲染空间的图块集合的成本指示来控制渲染复杂度的方法与流程

文档序号:14992108发布日期:2018-07-20 22:28阅读:122来源:国知局

图形处理系统通常被配置为(例如从在计算机系统上运行的应用)接收图形数据,并且渲染图形数据以提供渲染输出。例如,提供给图形处理系统的图形数据可以描述待渲染的三维(3d)场景内的几何形状,并且渲染输出可以是已渲染的场景图像。一些图形处理系统(其可以被称为“基于图块”的图形处理系统)使用被细分成多个图块(tile)的渲染空间。“图块”是渲染空间的区域,并且可以具有任何合适的形状,但是通常为矩形(其中术语“矩形”包括正方形)。为了给出一些示例,图块可以覆盖待渲染图像的16×16像素块或32×32像素块。如本领域已知的,将渲染空间细分成图块具有很多益处。例如,将渲染空间细分成图块允许图像以逐图块的方式被渲染,其中图块的图形数据可以在图块的渲染期间被临时存储“在片上”。

基于图块的图形处理系统通常分两个阶段进行操作:几何处理阶段和渲染阶段。在几何处理阶段,分析用于渲染的图形数据以针对每个图块确定该图块内存在哪些图形数据项。然后在渲染阶段,可以通过处理那些被确定为存在于图块内的图形数据项来渲染该图块(而不需要处理在几何处理阶段被确定为不存在于特定图块内的图形数据项)。图形数据项可以表示描述场景中结构的表面的集合形状,其被称为“图元”。常见的图元形状是三角形,但是图元可以是其他2d形状、或者也可以是线条或点。对象可以由一个或多个(例如,数百、数千或数百万个)这样的图元组成。

经渲染的图像可以在显示器上显示。显示器可以按照光栅扫描顺序来刷新像素,使得图像的上部像素行在图像的下部像素行之前被显示。在一些情况下,图像可以实时地渲染和显示。渲染图像与显示图像之间的时延可能不利地影响用户对应用(例如,游戏应用)的感知,特别是在用户与应用交互的情况下。这是虚拟现实应用的特殊问题。为了减少时延,基于图块的渲染系统可以在显示器的光栅扫描之前以光栅扫描顺序渲染图块。这可以允许在图像的其他图块(例如,对应于图像的下部行)已经被渲染之前,渲染并且显示图像的一些图块(例如,对应于图像的上部行)。这可以减少渲染/显示链内的时延。由于图块行的渲染始终必须在相应扫描线的显示之前进行,所以这种方法对图块的渲染引入了严格的实时时序要求。



技术实现要素:

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

在本文中描述的示例中,一种图形处理单元被配置为使用被细分成多个图块的渲染空间来处理图形数据。图形处理单元包括成本指示逻辑,其被配置为获取用于渲染空间的一个或多个图块的多个集合中的每个集合的成本指示,其中一个或多个图块的集合的成本指示表明处理一个或多个图块的集合的成本。图形处理单元被配置为控制基于图块的成本指示来对这些图块中进行渲染的图元的渲染复杂度。这允许基于图块内的图形数据的复杂度、以适合的方式渲染图块。这又允许渲染满足诸如定时约束等约束,即使不同图块的复杂度在图像内可以显著变化。例如,可以存在定时约束,即图块行必须被及时渲染以在显示器的光栅扫描之前显示,并且一行中的图块的成本指示可以提供用于渲染这些图块可能的渲染时间的指示。如果可能的渲染时间不满足定时约束,则可以降低该行中的至少一些图块的渲染复杂度,从而减少该行的渲染时间并且从而满足定时约束。作为示例,可以通过对的为了渲染图块中的图元而处理的每像素样本数目进行控制,来控制渲染复杂度。在另一示例中,在渲染时序不如图像质量重要的情况下,可以针对具有较高成本指示的图块增加渲染复杂度(例如,每像素的样本数),因为这些块可以包括更大的图像细节,并且因此可以受益与具有较低成本指示的图块相比以更高的精确来渲染。

具体地,提供了一种被配置为使用被细分成多个图块的渲染空间来处理图形数据的图形处理单元,图形处理单元包括:成本指示逻辑,其被配置为获取用于渲染空间的一个或多个图块的多个集合中的每个集合的成本指示,其中一个或多个图块的集合的成本指示表明对一个或多个图块的集合进行渲染的成本;以及渲染逻辑,其被配置为对渲染空间的图块中的图元进行渲染;其中图形处理单元被配置为:控制渲染复杂度,其中渲染逻辑根据一个或多个图块的集合的成本指示、该渲染复杂度来在一个或多个图块的集合中的图元进行渲染。

提供了一种使用被细分成多个图块的渲染空间来在图形处理系统中处理图形数据的方法,该方法包括:获取用于渲染空间的一个或多个图块的多个集合中的每个集合的成本指示,其中一个或多个图块的集合的成本指示表明对一个或多个图块的集合进行渲染的成本;对渲染空间的图块中的图元进行渲染;以及控制渲染复杂度,其中一个或多个图块的集合达到图元根据一个或多个图块的集合的成本指示、以该渲染复杂度被渲染。

在一些示例中,渲染复杂度被控制为使得图块的渲染满足一个或多个渲染约束,诸如图块行被渲染的定时。这在图块在显示器的光栅扫描之前以光栅扫描顺序被渲染的情况下是特别有用的,因为这允许图块及时地被渲染以便以降低的时延实时地显示。

成本指示逻辑可以被实施为还包括拼贴单元的几何处理逻辑的一部分。通过在几何处理逻辑中包括成本指示逻辑,可以在渲染逻辑中执行图块的渲染之前,针对图像的一个或多个图块的集合确定成本。拼贴单元可以被配置为生成用于渲染空间的图块的控制流,其指示图块中存在哪些图元,并且其中渲染逻辑被配置为:使用用于图块的控制流来标识该图块中存在哪些图元。拼贴单元可以被配置为将成本指示包括在用于图块的控制流中。

在本文中描述的示例中,渲染逻辑对在一个或多个图块的特定集合中的图元进行渲染的渲染复杂度根据一个或多个图块的特定集合的相应成本指示来控制。

图形处理单元可以被配置为通过控制由渲染逻辑处理的每像素样本数目来控制渲染复杂度。在一些示例中,如果每像素的样本数目被控制为少于每像素一个样本,则对于一些像素,不渲染样本,并且图形处理单元被配置为:通过对附近的已渲染像素值进行组合来确定未渲染像素的值。图形处理单元可以被配置为选择未渲染像素以被均匀地空间分布。

在一些示例中,渲染逻辑包括隐藏表面移除单元和纹理化/着色单元,并且图形处理单元可以被配置为:通过控制由隐藏表面移除单元处理的每像素的样本数目、并且独立地控制由纹理化/着色单元处理的每像素的样本数目来控制渲染复杂度。

图形处理单元可以被配置为:通过对由渲染逻辑向渲染空间内的样本位置处的图元片段应用的一个或多个渲染过程进行控制,来控制渲染复杂度。控制渲染过程可以包括以下中的一项或多项:控制应用于图元片段的过滤操作;当渲染逻辑被配置为应用射线跟踪技术时,控制射线跟踪参数,其包括待处理射线反弹的次数和射线的裁剪距离中的一项或多项;并且控制应用于图元片段的着色效果。

图形处理单元可以被配置为:通过控制每个样本确定的颜色值的数目来控制渲染复杂度。例如,在完全渲染复杂度下,渲染逻辑可以被配置为为每个已渲染样本生成颜色值集合;并且在降低的渲染复杂度的情况下,渲染逻辑可以被配置为为一个或多个已渲染样本生成颜色值集合的子集。

图形处理单元可以被配置为:根据一个或多个图块的集合的成本指示来对渲染逻辑对一个或多个图块的集合中的图元进行渲染的渲染复杂度进行控制,以便满足一个或多个渲染约束。一个或多个渲染约束可以包括以下中的一项或多项:对于已渲染图像的相应部分从渲染逻辑被输出的定时的约束;以及对于已渲染图像从渲染逻辑被输出的定时的约束。一个或多个渲染约束可以包括:由渲染逻辑渲染图像的目标帧速率,并且图形处理单元可以被配置为:根据成本指示来控制渲染复杂度,使得渲染逻辑以满足目标帧速率的速率渲染图像。一个或多个渲染约束可以包括用于在渲染逻辑处对图块行进行渲染的定时约束,并且图形处理单元可以被配置为:根据成本指示来控制渲染复杂度,使得渲染逻辑以满足定时约束的速度渲染图块行。一个或多个渲染约束可以包括用于在渲染逻辑处渲染图块的目标质量,并且图形处理单元可以被配置为根据成本指示来控制渲染复杂度,使得渲染逻辑渲染图块以满足目标质量。

图形处理单元还可以包括被配置为控制渲染复杂度的控制逻辑。

渲染逻辑可以被配置为以特定顺序渲染图块,使得图块行被渲染以便以光栅扫描顺序实时地输出到显示器。此外,图形处理单元可以包括:被配置为存储已经由渲染逻辑渲染的已渲染图像值的帧缓冲区,其中帧缓冲区可以被配置为:在由渲染逻辑渲染图像的其他已渲染图像值之前,输出图像的一些已渲染图像值行,以用于以光栅扫描顺序显示。

图形处理单元可以被实施于还包括显示器的设备,其中表示已渲染图像的像素的已渲染图像值要被发送到显示器,以在其上显示。

图形处理单元被实施于还包括传输单元的设备中,其中表示已渲染图像的像素的已渲染图像值要被提供给传输单元,以传输到显示器以在其上显示。

图形处理单元可以被实施于还包括视频编码单元的设备,视频编码单元被配置为对由渲染逻辑渲染的已渲染图像值进行编码。

一个或多个图块的集合的成本指示可以基于:影响渲染一个或多个图块的集合的成本的一个或多个因素。例如,成本指示逻辑可以被配置为确定用于渲染空间的一个或多个图块的集合的成本指示,例如,通过对与存在于图块中的图元相关联的得分进行组合,其中与图元相关联的得分可以取决于对象的对象类型,其中图元为该对象的一部分。为了给出一些另外的示例,成本指示逻辑可以被配置为基于以下因素中的一个或多个来确定用于渲染空间的图块的成本指示:(i)图块中图元的数目;(ii)与图块中图元相关联的对象类型;(iii)图块中图元的图块覆盖区域;(iv)为了渲染图块中的图元而要执行的一个或多个着色器(shader)程序的特性;(v)用户输入;以及(vi)先前渲染中的相应图块的处理成本。着色器程序的特性可以包括以下中一个或多个:(i)着色器程序的长度;(ii)着色器程序所使用的资源或寄存器的量;(iii)着色器程序是否包括有条件的流程控制;(iv)着色器程序是否包括在编译时重复次数未定义的循环;以及(v)着色器程序中使用的存储器读取和/或写入的量。图形处理单元可以从编译器接收为了渲染图块中的图元而要执行的一个或多个着色器程序的特性。

成本指示逻辑可以被配置为量化成本指示。

本文中描述的图形处理单元可以用硬件在集成电路上实施。可以提供一种在集成电路制造系统处制造如本文中描述的图形处理单元的方法。可以提供一种集成电路定义数据集,当其在集成电路制造系统中被处理时,系统被配置为制造如本文中描述的图形处理单元。可以提供一种非暂态计算机可读存储介质,其上存储有集成电路的计算机可读描述,其在被处理时使得布局处理系统生成电路布局描述,其在集成电路制造系统中被使用以制造如本文中描述的图形处理单元。

可以提供一种集成电路制造系统,其包括:

非暂态计算机可读存储介质,其具有存储于其上的描述如本文中描述的图形处理单元的计算机可读集成电路描述的;

布局处理系统,其被配置为处理集成电路描述以生成实施图形处理单元的集成电路的电路布局描述;以及

集成电路生成系统,其被配置为根据电路布局描述来制造图形处理单元。

可以提供一种用于执行本文中描述的任何方法的计算机程序代码。可以提供其上存储有计算机可读指令的非暂态计算机可读存储介质,计算机可读指令当在计算机系统处执行时引起计算机系统执行本文中描述的任何方法。

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

附图说明

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

图1示出了图形处理系统;

图2是使用图形处理系统来处理图形数据的方法的流程图;

图3a示出了渲染空间的图块集合;

图3b示出了渲染空间的图块集合经量化的成本指示;

图4a示出了渲染复杂度为每像素四个样本的像素内的样本位置;

图4b示出了渲染复杂度为每像素两个样本的像素内的样本位置;

图5示出了帧缓冲区内的已渲染图块;

图6a是示出理想化的图块工作负载的渲染和显示的时序的图;

图6b是示出在图块工作负载的渲染时间发生小的变化的情况下的图块工作负载的渲染和显示的时序的图;

图6c是示出在图块工作负载的渲染时间发生小的变化的情况下的图块工作负载的渲染和显示的时序的图,其中一些图块的渲染复杂度被控制以满足定时约束;

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

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

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

具体实施方式

为了使本领域技术人员能够制造和使用本发明,作为示例来给出以下描述。本发明不限于本文中描述的实施例,对于本领域技术人员来说,对所公开的实施例的各种修改将是显而易见的。

现在将仅作为示例来描述实施例。

图1示出了可以用于渲染3d场景的图像的图形处理系统100的一些元件。“图像”在本文中也可以被称为“帧”。图形处理系统100包括图形处理单元(gpu)102和两个存储器部分1041和1042的。两个存储器部分1041和1042可以是或者可以不是同一物理存储器的部分。存储器1042被配置为包括帧缓冲区120。gpu102包括几何处理逻辑106和渲染逻辑108。几何处理逻辑106包括成本指示逻辑110和拼贴单元112。几何处理逻辑106被配置为实施图形渲染过程的几何处理阶段,并且因此可以包括除了图1所示的那些元素之外的其他元素(诸如变换单元和剪切/剔除单元),这对于本领域技术人员是显而易见的。如下面更详细地描述的,渲染逻辑108包括隐藏表面移除(hsr)单元114、纹理化/着色单元116和控制逻辑,隐藏表面移除(hsr)单元114被配置为对图元片段执行隐藏表面移除以移除被其他图元片段隐藏的图元片段,纹理化/着色单元116被配置为对渲染空间的图块的图形数据(例如,图元片段)执行纹理化和/或着色,控制逻辑被配置为控制渲染图元的渲染复杂度。图形处理系统100还包括被配置为编译要在gpu102上执行的程序(例如,着色器程序)的编译器122。渲染逻辑可以被配置为实施诸如光栅化或射线跟踪等用于执行渲染的任何合适的渲染技术。

用于执行渲染的图形数据在gpu102处(例如,从与gpu102在相同的计算系统中的cpu上运行的游戏应用)被接收。图形数据可以包括描述待渲染场景中对象的图元的图元数据。图形数据还可以指定要在图元数据上执行的、用于渲染图元的一个或多个着色器程序。参考图2所示的流程图来描述图形处理系统100的示例操作。

在步骤s202中,编译器122编译与图元相关联的着色器程序,并且确定着色器程序的特性。注意,对图元执行用于确定位置的着色器程序(例如,顶点着色器和几何着色器);而对与覆盖像素(或更确切地说,覆盖样本位置)的部分图元相对应的图元片段执行指定图像将如何渲染的着色器(例如,像素着色器)。所确定的特性包括指示着色器程序的复杂度的特性。特别地,确定特性以便给出使用特定着色器程序处理图元的成本指示。例如,可以标识着色器程序的长度(例如,待执行的操作的数目)。着色器程序的“长度”可以指代着色器程序的执行长度(例如,包括其中执行次数事先已知的循环),而不是代码量。此外,如果着色器程序包含执行可变次数的循环,其中该可变数目在运行时被确定,即其不是在编译时已知的数目,则着色器程序被标识为潜在的高成本。诸如这样的循环如果在运行时循环很多次,则执行成本可能非常昂贵。作为另一示例,编译器可以确定着色器程序使用的资源、存储器读取/写入或寄存器的量,并且将其用作与运行着色器程序相关联的处理成本的度量。注意,从存储器(可以是外部存储器)中进行大量读取和/或写入(例如,从纹理采样)的着色器可能比主要由算术指令组成的着色器的处理需要更长的时间。可以确定的其他特性包括着色器程序是否包括条件流控制。

步骤s202可以在运行时之前(即,在脱机过程中)执行。例如,着色器程序可以在应用加载时被编译。具体地,着色器程序可以在渲染开始之前(例如,在拼贴阶段开始之前)以及在着色器与任何特定几何图形相关联之前被编译。然而,在其他示例中,着色器程序可以在主渲染开始之前在运行时期间(例如,响应于确定将使用着色器程序来处理图元)而被编译。编译器122可以标记可以存在于着色器程序中的大量可能消耗大的事物。编译器122被布置为将所确定的着色器程序的特性提供给拼贴单元112。编译器122被布置为将经编译的着色器程序提供给渲染逻辑108,以由纹理化/着色单元116执行来处理图元。

可以在几何处理逻辑106处接收由应用提供的图元序列。在几何处理阶段,如下所述,几何处理逻辑106执行各种功能,诸如剪切和剔除以去除没有落入可见视图中的图元,将图元投影到屏幕空间中,以及对图元进行拼贴。

在步骤s204中,拼贴单元112确定图形处理系统100的渲染空间的每个图块内存在哪些图元。拼贴单元112通过创建用于图块的控制流来向渲染空间的图块指派图元,其中用于图块的控制流包括图块内存在哪些图元的指示。控制流和图元从拼接单元112输出并且存储在存储器1041中。几何处理阶段(由几何处理逻辑106执行)考虑了整个图像的图元,即针对图像中的所有图块。然后在渲染阶段,渲染逻辑108渲染图像的图块,并且将已渲染图块的输出存储在帧缓冲区120的适当部分中。当图像的所有图块已经被渲染时,帧缓冲区120存储整个图像的已渲染结果(例如,像素值)。在本文中描述的示例中,在几何处理阶段所提供的、用于在渲染图像的图块之前评估图像的所有数据的机会被用于确定关于图像的信息,该信息对于控制渲染阶段可能是有用的。在下面描述的示例中,例如,渲染逻辑108渲染不同图块的渲染复杂度可以根据图块估计的渲染时间来控制,使得图块可以被渲染以满足定时约束。

在步骤s206中,成本指示逻辑110确定渲染空间的图块的成本指示。如上所述,图块的成本指示表明处理(例如,渲染)图块的成本。成本指示逻辑110可以至少部分地基于:在步骤s202中由编译器122确定的着色器程序的所确定的特性来确定成本指示。例如,图块的成本指示可以至少部分地基于:与图块中所包括的图元相关联的所确定的着色器程序的特性。此外,如下所述,通常,可以为一个或多个图块的集合确定成本指示,即可以为图块确定成本指示和/或可以为图块的集合确定成本指示。为了简单起见,本文中的一些解释指的是存在图块的成本指示,但是应当理解,通常,该解释可以扩展到对于图块集合(即,包括多个图块的集合)具有成本指示。在本描述中,高成本指示对应于高处理成本,而低成本指示对应于低处理成本。在一些示例中,一个或多个图块的集合的成本指示指示影响处理一个或多个图块的集合的成本的一个或多个因素。

不同的示例中,成本指标在可以采取不同的形式。在一些示例中,图块的成本指示可以是当图块由渲染逻辑108处理时对将发生的处理成本的估计。如上所述,处理成本可以是处理时间的长度、所执行的计算操作的数目、所消耗的处理能力、来自/去往存储器的读取/写入的数目、或处理图块的成本的任何其他合适的度量。然而,在一些示例中,图块的成本指示可以不是处理成本的直接估计。一个或多个图块的集合的成本指示可以基于一个或多个图块的集合的内容。一个或多个图块的集合的成本指示可以基于影响处理一个或多个图块的集合的成本的一个或多个因素。例如,成本指示可以是存在于图块中图元的数目。图块中图元的数目不是对处理图块的成本的直接估计,而是指示处理图块时可能涉及的近似处理成本。例如,图块中的大量图元可以暗示图块将导致更大的处理成本。在广义上,图块的成本指示可以是暗示处理图块的成本的任何参数,即提供用于在对图块之间进行区分时使用的可能处理成本的某种度量的参数。还注意,成本指示可以并不总是准确地反映处理图块的真实处理成本,但是它们的目的在于提供图块的处理成本的更好指示,而不是完全不确定成本指示。

在简单的示例中,图块的成本指示是图块中存在的图元的数目。与具有相对较少图元的图块相比,与相对较多图元交叠的图块倾向于产生更大的处理成本,因此图块中图元的数目是有用的成本指示,即使它并不总是反映渲染图块的准确的实际处理成本。此外,在拼贴单元112中计算图块中图元的数目是非常简单的,因为可以直接从图块的控制流中观察到该数目,即,在拼贴阶段的结束时在图块的控制流中包括的图元标识符的数目指示该图块中的图元的数目。所以,在这个示例中,成本指示逻辑110没有为几何处理逻辑106增加显著的复杂度。

在稍微更复杂的示例中,成本指示逻辑110通过对与存在于图块中的图元相关联的得分进行组合来确定图块的成本指示。与图元相关联的得分可以取决于对象的对象类型,其中图元时该对象的一部分。例如,在渲染逻辑108中处理与不透明对象类型相关联的图元可以是相对简单的,因此这些图元可以与低得分相关联;而在渲染逻辑108中处理与其他对象类型(例如,半透明或穿透对象类型、或者允许图元在渲染期间改变它们的深度的对象类型)相关联的图元可以是相对复杂的,因此这些图元可以与高得分相关联。具体地,这些更复杂的对象类型(例如,半透明和穿透类型、以及允许对象在渲染期间改变深度的类型)的渲染可以利用混合操作、或者在渲染逻辑108中需要多次遍历的其他操作来对由这些图元覆盖的像素进行解析。例如,与不透明对象类型相关联的每个图元可以被赋予得分1,与半透明或穿透对象类型相关联的每个图元可以被赋予得分10,以及可以在渲染期间改变深度的每个图元可以被赋予得分8。这反映了不同类型的图元的处理成本的可能差异。图块内的图元的得分可以相加,或以另一方式组合,以提供图块的成本指示。在不同的示例中,不同对象类型的得分可以与本文中描述的不同。

细分(tessellation)是一种允许在渲染期间将图形数据项(其可以被称为“图像片(patch)”)扩展成很多图元的技术。在细分的情况下,在步骤s204中被分类为图块的可以是图像片(而不是扩展的图元)。与被分类为图块的标准三角形图元相比,图像片可以与更高的成本相关联。细分对于表示复杂的(例如,弯曲的)表面可以是有用的,但是可能导致大量的图元被渲染。图块的成本指示可以基于是否将细分应用于图像片以在图块中形成图元。例如,可以使用标志来指示图块中存在要细分的图像片,如果在渲染逻辑108中按需执行细分,则这可能是特别有用的。作为示例,如果图块包括要细分的图像片,则图块的成本指示可以更高,例如图块的成本指示可以取决于由于图像片的细分而产生的三角形的数目。

在其他示例中,成本指示可以以不同方式确定。例如,当确定图块的成本指示时,可以考虑图块中的图元的图块覆盖区域。图元的图块覆盖区域指示该图元在图块内可能可见的样本位置的数目,并且因此提供当在渲染逻辑108中处理图块中的图元时将执行的处理的量的指示。在一些示例中,用户可以提供用于指导图块的成本指示的确定的用户输入。在这个意义上,成本指示逻辑110可以经由输入来接收图块的成本指示。例如,用户可以能够直接指定图块的成本指示(例如,经由api扩展),以允许开发者使用与特定图块相关联的工作负载的先验知识来明确地提供图块成本,从而确保高效的性能。

驱动器机制可以将来自编译器122的信息传递给拼接单元112,并且该信息可以包括由编译器122确定的着色器程序的特性。可选地,驱动器可能希望被用来标记为必须被重新生成的几何形状(例如,诸如几何着色器和细分着色器等流水线阶段可以用于扩展图元以创建多个图元),并且在一些图形处理系统中,扩展的图元在几何处理阶段之后不被存储,并且在渲染阶段使用之前必须被重新生成。

上述示例涉及与当前渲染的处理相关的因素,其可以用于估计用于对渲染的不同图块进行渲染的可能处理成本。除了这些因素之外,成本指示逻辑110可以确定先前渲染(例如,紧接在前的渲染,例如前一帧)的图块的处理成本(预测成本或实际成本),并且可以将它们用作确定当前渲染的图块的成本指示的因素。如果帧序列中的两个帧在序列中彼此靠近,例如如果它们是连续的帧,则这两个帧可能是相似的,除非存在场景变化或内容的突然变化。因此,前一帧中的特定图块的处理成本提供当前帧中的相应图块的处理成本的良好指示。不同帧中的“相应图块”可以是在渲染空间内的相同位置的图块,或者可以相对于彼此移位,例如移位表示场景中内容运动的量(例如,由运动矢量表示)。此外,系统可以获知所测量的特性如何对应于渲染时间,并且相应地对用于根据测量的特性来确定成本指示其模型进行优化。

为了总结上面描述的一些示例,成本指示逻辑110可以基于以下因素中的一个或多个来确定渲染空间的图块的成本指示:(i)图块中图元的数目;(ii)与图块中的图元相关联的对象类型;(iii)图块中图元的图块覆盖区域;(iv)为了渲染图块中的图元而要执行的一个或多个着色器程序的特性;(v)用户输入;以及(vi)先前渲染中相应图块的处理成本。然而,显而易见,在其他示例中可以使用其他因素来确定成本指示。成本指示逻辑110可以基于多个因素来确定图块的成本指示,例如,根据任何合适的组合,这些因素可以被加权或可以不被加权,以支持一个因素而不是另一因素。

如上所述,着色器程序的特性可以包括以下中的一个或多个:(i)着色器程序的长度;(ii)着色器程序所使用的资源或寄存器的量;(iii)着色器程序是否包括有条件的流程控制;(iv)着色器程序是否包括在编译时重复次数未被定义的循环;以及(v)在着色器程序中使用的存储器读取和/或写入的量。

如上所述,可以为一个或多个图块的每个集合确定成本指示。一个或多个图块的每个集合包括相同数目的图块正是这种情况。在一些示例中,一个或多个图块的集合每个包括单个图块。在其他示例中,一个或多个图块的集合各自包括多个图块。图块集合可以是渲染空间的图块(例如,连续图块)的块。就术语而言,本公开指的是表示一组图块的图块的“集合”,而对该组中的图块的空间位置没有任何隐含的限制,而图块的“块”是指在渲染空间中在空间上连续的一组图块。图块的块可以采取任何合适的尺寸和形状。仅给出一些示例,图块的块可以是2×2、3×2、4×2或4×4的图块的块。

成本指示逻辑110可以量化成本指示。具体地,量化的成本指示可以被量化以用多个位来表示,位的数目在1到8的范围内。在极端的示例中,量化的成本指示每个具有单个位,使得它们用作指示图块是高成本图块还是低成本图块的标志。即使成本指示被量化到这种程度,成本指示的使用对区分高成本图块和低成本图块也是有用的。量化成本指示减少了用于存储成本指示的数据量。

在步骤s208中,拼接单元112将所确定的成本指示包括在要存储在存储器1041中的图块的控制流中。例如,拼贴单元112可以将所确定的成本指示包括在尾指针高速缓存中,尾指针高速缓存包括指向相应图块的图元id列表的尾部的指针。在拼接单元112中处理渲染的几何图像结束之后,指针可以在被包括用于渲染空间的图块的尾指针高速缓存中,并且此时成本指示逻辑110已经确定了图块的成本指示,所以这是在控制流中的适当位置添加成本指示而不必显著改变拼接单元112的操作的良好机会。在几何处理阶段结束时,图块的控制流(包括成本指示)被存储在存储器1041中。

现在参考图3a和3b描述示例。图3a示出了具有896×512个像素的渲染空间302。如图3a所示,每个图块是32×32像素块,使得渲染空间302具有28列16行图块。如图3a中的粗线所示,图块被一起分组成4×4块,其中图块的每个4×4块被认为是要确定成本指示的图块集合。在该示例中,如上所述,成本指示逻辑110通过确定成本指示或者通过经由api接收成本指示,来获取渲染空间中的每个图块的成本指示。然后基于相应集合内的图块的成本指示来为每个4×4图块集合确定成本指示。为了给出一些示例,成本指示逻辑可以通过确定以下内容来确定图块集合的成本指示:(i)该集合内图块的成本指示的平均值,(ii)该集合内图块的成本指示的总和,(iii)该集合内图块的成本指示的最大值,或(iv)该集合内具有高于阈值的成本指示的图块的数目。在其他示例中,集合内图块的成本指示可以以其他方式组合,以确定集合整体的成本指示。此外,在一些示例中,为图块集合确定成本指示,而不首先确定集合内的各个图块的单独的成本估计。

图3b示出了图3a所示的4×4图块集合的量化的成本指示。在这个示例中,针对每个图块确定成本指示,并且然后通过对该图块集合内的各个图块的成本指示进行组合,并且然后将成本指示向下量化为1位的值来确定4×4图块集合的成本指示(例如,通过查找各个成本指示的总和)。在1位的成本指示的这个简单示例中,每个成本指示是0或1。可以看出,在渲染空间302的右下方附近存在渲染相对昂贵的区域,例如,因为这个区域中的图形内容是特别详细的(例如,在这个区域中可能涉及半透明或穿透图元的大量图元),或者用于渲染这个区域的效果需要复杂的着色器程序。为了给出一些示例,场景中的叶子、烟雾或火焰的区域(粒子系统)的渲染可能是昂贵的。相比之下,渲染空间302的左上区域的渲染并不这么昂贵,例如,因为这个区域的图形数据很简单,例如这个区域可以表示在场景中没有多少细节的简单背景。

在渲染阶段,渲染逻辑108接收用于当前渲染的渲染空间的图块的控制流。控制逻辑118从控制流接收成本指示。在步骤s210中,控制逻辑118分析图块的成本指示,并且根据成本指示来确定图块的渲染复杂度。例如,一个或多个图块的特定集合的渲染复杂度可以根据一个或多个图块的特定集合的相应成本指示来控制。

在步骤s212中,渲染逻辑108根据所确定的渲染复杂度来对渲染空间的图块中的图元进行渲染。可以同时执行步骤s210和s212,使得在渲染逻辑108渲染先前已经确定渲染复杂度的其他图块集合时,确定图块集合的渲染复杂度。渲染逻辑108使用图块的控制流来标识图块中存在哪些图元,并且从存储器1041提取与那些图元有关的数据,使得可以对图块中的图元进行渲染。

在不同的示例中,控制图块渲染的渲染复杂度的方式可以不同。例如,渲染复杂度可以涉及每像素被渲染的样本数,使得渲染复杂度可以通过控制针对图块被渲染的每像素的样本数来控制。渲染逻辑108对在渲染空间内的样本位置处的图元数据进行处理。在射线跟踪渲染器中,可以通过每个样本位置来跟踪主射线。低复杂度渲染可以包括每像素单个样本,使得样本位置处的已渲染值提供已渲染图像的像素值。更复杂的渲染可以包括每像素多个样本,其中像素值可以通过对来自相关样本位置的已渲染值进行组合来确定。对于像素值的抗混叠,每像素使用多个样本例如可以是有用的,因为可以使用多个已渲染样本值的组合(例如,平均值)来确定已渲染像素值。增加每像素由渲染逻辑108处理的样本数可以增加已渲染图像的质量,但是将增加在渲染图像时涉及的处理的量(并且因此增加渲染时间和处理功耗)。图4a示出了其中表示十六个像素(其中之一被表示为402)的示例,其中对于每像素,处理四个样本(其中之一被表示为404)。图4b示出了另一示例,其对应于比图4a所示的示例更低的渲染复杂度,其中表示了16个像素(其中之一被表示为406),其中对于每像素,存在两个样本(其中之一被表示为408)。在其他示例中,可以实施每像素的不同数目的样本。此外,在其他示例中,样本位置可以以与图4a和图4b所示的模式不同的模式来布置。

本文中描述的每像素的样本数可以是指在图像的某个部分上(例如,在整个图像上或在图块上或在一组图块上)的每像素的平均样本数。然而,注意,图块内的每像素的样本数可以变化(例如,与用于图元的中央中每像素的每像素的样本数相比,用于包含图元边缘的像素的每像素的样本数可以更多)。在一些示例中,渲染复杂度可以被降低,甚至(平均)低于每像素一个样本。如上所述,减少处理图块中的样本数目将减少在渲染该图块时涉及的处理的量(并且因此减少渲染时间和处理功耗)。这可能是有用的,例如,在图块行被渲染并且然后被直接传递以实时地以光栅扫描顺序显示的情况下,并且如果其中对图块行的渲染的定时约束是:使得如果图块以每像素一个样本被渲染,则图块将不会被及时地渲染以显示而没有显著的时延。在这种情况下,低于每像素一个样本的渲染可以帮助满足定时约束,使得可以实时地显示图块而没有显著的时延,并且这个优点可以被认为是超过了由于减少每像素已渲染样本数而产生的质量下降的缺点。例如,在gpu102中处理的图块内样本的总数可以通过随机地(或某种其他模式)不对图块内的一些像素进行采样而减少到低于图块内存在的像素的数目。以这种方式,对于图块中的一些像素,可以在gpu102中处理样本,但是对于图块中的其他像素(称为“丢弃像素”或“未渲染像素”),样本不在gpu102中处理。可能优选的是,丢弃像素被均匀地分布在图块上,所以可以使用规则模式的丢弃像素,或者可以使用不偏向于丢弃特定像素的其他模式。因此,gpu102被配置为选择丢弃像素以被均匀地空间分布。丢弃像素的规则模式可能在已渲染图像中引入不希望的人为因素,因此选择随机丢弃哪些像素(其中“随机”包括“伪随机”)可以是有益的。如果使用了丢弃像素的规则模式,则有可能对不期望的人为因素进行补偿,例如,通过在mip映射(mipmapped)纹理化处理中改变细节等级(lod)计算,使得能够选择适合于实际采样率的分辨率(即,在mip映射级别)的纹理以应用于像素。

如果像素已经被丢弃(即,没有为像素渲染样本),则可以基于附近的已渲染(即,未丢弃)像素在渲染输出处重构丢弃像素值。也就是说,可以通过组合附近的已渲染像素值来确定未渲染像素(即,丢弃像素)的值。例如,可以通过检查一个或多个相邻像素值并且根据重构方案对丢弃像素值进行重构,来确定丢弃像素的值。例如,可以使用简单的滤波器来确定丢弃像素值。作为另一示例,可以使用相邻像素值(例如,水平相邻和垂直相邻的像素值)的平均值。在更复杂的示例中,可以使用更复杂的重建方案,例如,可以使用卷积神经网络(cnn)基于渲染图像中的附近的未丢弃像素值来确定丢弃像素值。

由于降低采样率而导致的视觉质量降低取决于所渲染的内容。这是因为与场景中的平坦部分的外观相比,降低的采样率易于不利地影响场景中的边缘的外观(例如,导致边缘模糊和可能导致边缘出现锯齿的混叠)。因此,在步骤s210中,当针对特定图块选择采样率时,可以考虑降低用于渲染特定图块的采样率的效果。例如,如果图块包括很多图元边缘,则与图块包括较少图元边缘的情况相比,该图块的采样率可能不太可能被减小。例如,图形处理单元可以确定图块的边缘指示,其提供图块中包括哪些图元边缘的程度的指示。可以根据所确定的图块的边缘指示来控制针对图块被处理的每像素的样本数。为了给出一些示例,可以通过确定存在于特定图块内图元边缘的数目或长度,或者通过确定图块中存在的顶点的数目来确定图块的边缘指示。与确定图块内的边缘的数目或长度相比,确定图块中存在的顶点的数目可能更简单。图块被渲染的边缘指示提供了降低各个图块的采样率的有害效果的度量,并且当在步骤s210中控制用于渲染图块的采样率时可以考虑这些边缘指示。例如,如果图块的边缘指示为高,则与边缘指示为低的图块相比,该图块可能不太可能以降低的采样率被渲染。

此外,在由gpu102执行的处理的不同部分中,采样率(即,被处理的每像素样本数)可以不同。例如,如果采样率(每像素的样本数)为了满足渲染约束(例如,定时约束)而要被减少,则在一些示例中,gpu102可以在几何处理逻辑106和/或hsr单元114中使用未降低的采样率(例如,gpu102的这些部分可以使用由提交待渲染数据的应用指定的采样率),但是在纹理化/着色单元116中处理的样本数可以独立地减少,从而降低渲染成本。通过在几何处理逻辑106和hsr单元114中保持未减小的采样率,场景中对象的边缘可以保持预期的分辨率,例如,因为拼贴和深度测试以预期的分辨率被执行,并且因此可以保持渲染图像的视觉质量下降很小。渲染成本(例如,渲染时间和功耗)的很大一部分是由于纹理化/着色单元116执行的纹理化和着色操作引起的,因此通过减少在纹理化/着色单元116a中处理的样本数,可以实现渲染成本(例如,时间和/或功率)的显著降低。通过与几何处理逻辑106和/或hsr单元114中的采样率无关地减小纹理化/着色单元116的采样率,与对于在gpu102中执行的所有处理降低采样率的情况相比,质量的可见降低可以较小。几何处理逻辑106可以涉及取决于图块内的样本的位置的过程,并且因此取决于采样率。这样的处理包括小对象剔除(其中,与在渲染空间中的任何样本位置不交叠的对象在拼贴之前被剔除)和样本精确拼贴(其中仅在与图块内的至少有一个样本点交叠的情况下,图元在图块的显示列表中被标识)。此外,由几何处理逻辑106执行的细分可以获知采样率,使得细分可以被执行到每个样本存在近似一个细分的图元的细分级别。

可能的情况是,控制逻辑118增加较低成本的图块的渲染复杂度。这可以帮助针对不同图块维持大致相似的处理成本(例如,渲染时间)。在那种情况下,作为示例,参考图3a、3b、4a和4b所示的示例,量化的成本指示为0的图块集合(例如,图3b中的左上方的图块集合)中的图元可以以相对较高的渲染复杂度(例如,每像素四个样本,如图4a所示)来渲染;而量化的成本指示为1的图块集合(例如,图3b中的右下方的图块集合)中的图元可以以相对较低的渲染复杂度(例如,每像素两个样本,如图4b所示)来渲染。

然而,在其他情况下,控制逻辑118可以增加成本较高的图块的渲染复杂度。这可以允许具有更多图像细节的区域中的图像质量高于具有更少图像细节的区域中的图像质量。在图像没有被渲染用于实时显示以使得图像质量比渲染时间更重要的情况下,这可能是有益的。在这些情况下,作为示例,参考图3a、3b、4a和4b所示的示例,量化的成本指示为0的图块集合(例如,图3b中的左上方的图块集合)中的图元可以以相对较低的渲染复杂度(例如,每像素两个样本,如图4b所示)来渲染;而量化的成本指示为1的图块集合(例如,图3b中的右下方的图块集合)中的图元可以以相对较高的渲染复杂度(例如,每像素四个样本,如图4a所示)来渲染。

渲染逻辑108可以执行延迟渲染,如图1所示,使得(由hsr单元114)对图元执行隐藏表面移除以移除场景中的其他图元无法看到的图元片段,并且然后在隐藏表面移除已经被应用于那些图元片段之后,纹理化和/或着色被用于图元片段(由纹理化/着色单元116)。对通过hsr阶段的片段执行的纹理化/着色确定可以被传递到存储器1042,以于存储在帧缓冲区120中的已渲染图像的像素颜色值。纹理数据可以在渲染逻辑108处从存储器1041接收,以便将纹理化应用于图元片段。可以执行着色器程序以将着色应用于图元片段,从而将视觉效果添加到图元片段的渲染。这些着色器程序是由编译器122编译并且提供给渲染逻辑108的上述着色器程序。纹理化/着色过程可以包括向图元片段应用另外的处理(例如,α混合和其他过程),以便确定图像的已渲染像素值。

术语“片段”是指采样点处的图元的样本,其对图像的像素进行渲染而被处理。在一些示例中,可以存在样本位置到像素的一对一映射。在其他示例中,可以有比像素更多的样本位置,并且这种过采样可以实现像素值的更高质量的渲染,例如,通过支持可以应用于用于渲染每像素值的多个片段的抗混叠和其他滤波。

在其他示例中,处理逻辑108可以执行非延迟渲染,使得能够将纹理化/着色应用于图元片段,并且然后对纹理化/着色的图元片段执行隐藏表面移除,以移除场景中的其他图元无法看到的图元片段。非延迟渲染方法可以比延迟渲染方法效率低,因为它们涉及最终在场景中隐藏的图元片段的不必要的着色和纹理化。

上面描述的延迟渲染和非延迟渲染系统都实施了用于渲染图元数据的栅格化技术。在其他示例中,可以在渲染逻辑中使用其他渲染技术,例如可以使用射线跟踪技术来渲染图元数据。主射线可以针对每个样本位置被处理。射线跟踪技术在本领域中是已知的,并且因此本文中不详细描述实现射线跟踪渲染技术的细节。

在步骤s214中,输出已渲染图像值。例如,已渲染图像值可以被输出到存储器1042,并且被存储在帧缓冲区120中。已渲染图像值可以表示已渲染图像的像素,并且可以以任何合适的方式使用。例如,已渲染图像的像素可以显示在显示器上,或者(例如,通过诸如因特网和/或移动电话网络等网络)被传输到另一设备。如果渲染是子渲染,则渲染的结果可以用于后续渲染,例如,子渲染的结果可以是在后续渲染中应用的纹理、阴影图或环境。在这种情况下,渲染的结果可以被存储(例如,在存储器1042中),并且随后被提供回渲染逻辑108以在后续渲染中使用。或者,渲染的结果可以被存储在gpu102自身上。

gpu102可以被配置为满足一个或多个渲染约束。在一些示例中,约束是系统的实时要求。渲染约束可以通过以下来被满足:根据成本指示来控制渲染逻辑108对图块集合中的图元进行渲染的渲染复杂度。

渲染约束可以是:对从渲染逻辑108输出已渲染图像的各个部分(例如,图块、图块行或其他部分)的定时约束。类似地,渲染约束可以是:对从渲染逻辑108输出已渲染图像的定时约束。在渲染各个图块之前,控制逻辑118使用成本指示来确定渲染各个图块的可能的处理成本(例如,渲染时间)。因此,控制逻辑118可以基于由成本指示提供的信息来控制渲染复杂度,使得图块的渲染满足定时约束。在这些情况下,为了满足实时要求(即时间约束),可以(通过降低渲染复杂度)牺牲图像的一些或全部图块的图像质量。

例如,图形处理系统100可以渲染图像以输出给显示器,以用于实时显示。显示器(例如,如图7中的附图标记708所示)通常被布置为以预定的帧速率显示图像。在不同的示例中可以使用很多不同的帧速率,并且为了给出仅一些示例,通常的示例包括50hz、60hz和100hz。图形处理系统100因此具有输出渲染图像的定时约束以满足显示器的帧速率。换言之,图形处理系统100渲染图像以满足目标帧速率(例如,对应于实时显示图像的帧速率)。如果图像未被渲染以满足目标帧速率,则图像的显示可能失速。用于渲染图像的图块的渲染复杂度可以根据图块的成本指示来控制,使得渲染逻辑108以满足目标帧速率的速率渲染图像。也就是说,可以使用成本指示来提供用于以特定渲染复杂度(例如,当每像素使用四个样本时)渲染图像的可能渲染时间的指示。如果可能的渲染时间满足目标帧速率(即,如果可能的渲染时间小于或等于目标帧速率的倒数),则渲染逻辑108以特定的渲染复杂度(例如,每个四个样本像素)渲染图像;而如果可能的渲染时间不满足目标帧速率(即,如果可能的渲染时间大于目标帧速率的倒数),则渲染逻辑108以降低的渲染复杂度(例如,每像素两个样本)渲染图像中的一些或所有图块。在这种情况下,渲染逻辑108(例如,控制逻辑118)可以确定要以降低的复杂度来渲染哪些图块(如果有的话)。例如,与具有高成本指示的图块相比,具有低成本指示的图块可以以较低的复杂度来渲染。这表示,与图像的具有较少图像细节的区域相比,图像的具有更多图像细节的区域(其倾向于具有更高的成本指示)将以每像素更多的样本来渲染,这可以有助于保持图像最详细的区域中的图像质量,而图像较不详细的区域可能不需要如此高的图像质量,以便保持已渲染图像中良好的感知质量。在其他示例中,与具有低成本指示的图块相比,具有高成本指示的图块可以以更低的复杂度来渲染。这表示,与图像的具有较少图像细节的区域相比,图像的具有更多图像细节的区域(其倾向于具有更高的成本指示)将以每像素区域更少的样本来渲染,这可以有助于跨越图像的不同区域保持相似的渲染时间,在图像的区域需要以规则的间隔进行渲染的情况下(例如,在直接在显示器的光栅扫描之前渲染图块行的情况下),这可以是有用的。

在已渲染图像以光栅扫描顺序被显示在显示器上的情况下,可以根据显示器的扫描顺序来渲染图块行(line)(例如,图块排(row)),使得它们准备好显示,而不需要在图像的任何像素值被提供给显示器之前等待整个图像被渲染。换言之,渲染逻辑108可以被配置为按照特定顺序来渲染图块,以使得图块行被渲染为以光栅扫描顺序实时地输出到显示器。图5示出了存储在帧缓冲区120中的图块502的示例。帧缓冲区120被实施为循环缓冲区,其中图块以光栅扫描顺序(例如,以图块行)被渲染,并且已渲染图块的像素值被放置到帧缓冲区120中的适当位置。同时,像素值的行可以从帧缓冲区120输出到显示器,以根据显示器的光栅扫描来显示。换言之,帧缓冲区120存储已经由渲染逻辑108渲染的已渲染图像值,并且帧缓冲区120被配置为:在由渲染逻辑108已经渲染图像的已渲染图像值的其他行之前,输出图像的已渲染图像值的一些行,以按照光栅扫描顺序进行显示。图5示出了帧缓冲区120中具有交叉影线的一些图块502以表示已经渲染和显示的图块;图5还示出了帧缓冲区120中具有斜线影线的一些图块502以表示已经渲染并且存储在帧缓冲区120中但尚未显示的图块;图5还示出了帧缓冲区120中尚未渲染的当前帧的图块的一些空间。图块504已经被渲染逻辑108渲染,并且被放置在帧缓冲区120中的适当的可用空间中。已渲染图块506正被输出到显示器以在其上显示。在图5所示的示例中,图块的渲染在显示器的扫描之前,使得图块504和506与相同的图像相关。在其他示例中,图块的渲染可以在显示器的扫描之后,使得正在渲染的图块是针对当前图像的较高区域的,而正在显示的图块是针对先前图像的较低区域的。

在传统系统中,可以使用两个帧缓冲区,并且整个帧可以被渲染到第一帧缓冲区中,而存储在第二帧缓冲区中的图像被输出到显示器,并且然后帧缓冲区交换,使得下一帧可以被渲染到第二帧缓冲区中,而存储在第一帧缓冲区中的图像被输出到显示器。这将帧时延周期添加到流水线中,因为整个帧在任何帧开始显示之前被渲染。与此相反,根据显示器的光栅扫描提供已渲染图块行的图块的渲染的如图5所示的(单个)帧缓冲区的使用意味着:在应用向图形处理系统100发送图形数据的时间与在显示器上显示渲染图像的时间之间的时延减少了高达一个帧周期。时延的这种减少对于诸如游戏应用等向用户提供用户要与其交互的实时显示器的应用是重要的。如果图形处理系统100要被包括在虚拟现实(vr)系统(例如,vr耳机)中,则减少时延尤其重要。虚拟现实系统旨在给用户在虚拟世界中的“存在”的印象,并且如果在图像的显示中存在显著的时延,则用户在虚拟世界中的感知被减少。

因此,渲染逻辑108可以根据用于渲染图块行的定时约束来操作,使得每行图块可以在需要根据显示器的光栅扫描被显示之前被渲染。控制逻辑118根据它们的成本指示来控制图块的渲染复杂度,使得渲染逻辑108以满足定时约束的速率渲染图块行。可以使用成本指示来提供用于以特定渲染复杂度(例如,当每像素使用四个样本时)渲染图块的可能渲染时间的指示。如果图块行的可能渲染时间满足用于渲染该图块行的定时约束,则渲染逻辑108以特定渲染复杂度(例如,每像素四个样本)渲染图像;而如果可能的渲染时间不满足定时约束,则渲染逻辑108以减小的渲染复杂度(例如,每像素两个样本)渲染图块行的部分或全部图块。渲染逻辑108(例如,控制逻辑118)可以确定要以降低的复杂度渲染哪些图块(如果有的话)。例如,与具有低成本指示的图块相比,具有高成本指示的图块可以以较低的复杂度来渲染。这将有助于跨越图像的不同区域保持相似的渲染时间。

图6a到图6c示出了示出不同示例中的图块工作负载的渲染和显示的定时的图。特别地,图6a示出了理想化的图块工作负载,其中每行图块的渲染需要相同的时间量。标记为0到9的块示出渲染逻辑108正在渲染特定行的图块的时间。水平虚线示出了开始在显示器上显示来自各个图块行的像素的时间。在图6a所示的理想化的示例中,每行图块在其应当在显示器上显示的时间之前被渲染,所以图块可以全部以正常渲染复杂度(例如,每像素四个样本)被渲染。

但是,在更现实的情况下,不同图块的渲染可以需要不同的时间。图6b是示出在图块工作负载的渲染时间中具有小变化的图块工作负载的渲染和显示的定时的图。在图6b所示的示例中,不同图块的渲染复杂度不变,并且每个图块以正常渲染复杂度(例如,每像素四个样本)被渲染。可以看出,图块行0、1和2在它们要被显示的时间之前被渲染,但是行3中图块的渲染是昂贵的,并且因此需要很长时间,使得行3没有在行3的像素被显示的时间之前被完全渲染。行4也没有在行4的像素被显示的时间之前被完全渲染。行5和行6具有特别便宜的图块,使得它们被足够快速地渲染以便按时显示。然而,行7中的图块的渲染需要很长时间,因此行7和8没有在相应行7和8的像素被显示的时间之前被完全渲染。然而,第9行包括便宜的图块,因此行9被及时渲染以显示。阴影区域6061、6062、6063和6064指示应当显示一行图块但是因为它还没有被渲染而不能被显示的时间。这可能会导致已渲染图像的实时显示发生问题,并且显示的图像中可能会出现明显的错误。

图6c是示出如图6b所示的相同图块工作负载的渲染和显示的定时的图,其中图块工作负载的渲染时间存在小的变化。然而,在图6c中,基于图块的成本指示来控制一些图块的渲染复杂度,以便满足图块行被及时渲染以在相应的行显示时间被显示的时间限制。成本指示提供可能的渲染时间的指示,并且控制逻辑118确定行3和7中的图块的成本指示是高的,并且因此降低这些行中图块的渲染复杂度(例如,使得图块以每像素两个样本被渲染)。图块3和图块7的渲染用阴影示出以指示降低的渲染复杂度。其他图块行以正常的渲染复杂度(例如,每像素四个样本)被渲染。在图6c中可以看出,每行图块被及时渲染以满足各个行的目标显示时间。

在另一示例中,渲染约束可以是用于渲染图块的目标质量。图块的渲染复杂度可以根据成本指示来控制,使得渲染逻辑108渲染图块以满足目标质量。例如,高成本图块可能具有高水平的图像细节,因此高成本图块以高渲染复杂度渲染(例如,使用每像素四个样本),以便满足用于图块渲染的目标质量可能是有用的;而低成本图块可能具有低水平的图像细节,因此低成本图块可以以较低的渲染复杂度(例如,每像素使用两个样本)来渲染,而不显著影响已渲染图像的质量,使得目标质量仍然可以满足。

在上述示例中,gpu102被实施于还包括显示器的设备中实,其中表示已渲染图像的像素的已渲染图像值被发送到显示器以在其上显示。

在一些示例中,gpu102可以被实施于还包括传输单元(例如,如图7中的附图标记712所示)的设备中,其中表示已渲染图像的像素的已渲染图像值被提供给传输单元,以传输到另一设备,例如以传输到显示器以在其上显示。传输可以通过有线或无线连接进行,例如,通过诸如本地wifi网络等本地网络,或者通过诸如因特网或电信网络等更广泛的网络。

在一些实例中,gpu102可以被实施于还包括被配置为对由渲染逻辑108已经渲染的图像值进行编码的视频编码单元(例如,如图7中的附图标记710所示)的设备中。视频编码可以减少用于表示一个或多个图像(例如,图像序列)的数据量,并且因此在已编码图像然后通过网络传输(由于所使用的带宽将减少)的情况下,或者在已编码图像然后被存储(由于所使用的存储量将减少)的情况下可以特别有用。视频编码方法在本领域中是已知的,其通常符合视频编码标准。有很多不同的视频编码标准,诸如h.265、h.264、vp8、vp9、divx视频标准等。编码图像的目的通常是减少用于表示图像的数据量。因此,图像的编码可以涉及图像的一些压缩。压缩可以是无损的或有损的。

在上面描述的示例中,gpu102通过对每像素的在渲染逻辑108中处理的样本数进行控制来控制渲染复杂度。在一些示例中,gpu102(例如,控制逻辑118)可以通过对由渲染逻辑108应用于渲染空间内的样本位置处的图元片段的一个或多个渲染过程进行控制,来控制渲染图块中图元的渲染复杂度。例如,渲染过程可以包括过滤操作,例如,对由渲染逻辑108应用于图元片段的纹理的纹理过滤操作。例如,如果使用低渲染复杂度来渲染图块中的图元,则可以使用诸如线性过滤等简单过滤操作来处理图元片段(例如,可以使用诸如双线性滤波等低成本滤波处理来对要应用于图元片段的纹理进行纹理滤波);而如果使用高渲染复杂度来渲染图块中的图元,则可以使用诸如高阶滤波等更复杂的滤波操作来处理图元片段(例如,可以使用诸如各向异性滤波等高成本滤波处理来对要应用于图元片段的纹理进行纹理滤波)。作为另一示例,可以通过对由纹理化/着色单元116应用于图块中的图元片段的着色效果进行控制来控制渲染过程。例如,如果使用高的渲染复杂度来渲染图块中的图元,则可以由纹理化/着色单元116将复杂的着色效果应用于图元片段;而如果使用低的渲染复杂度来渲染图块中的图元,则可以由纹理化/着色单元116将相对简单的渲染效果应用于图元片段。例如,图元的图元数据可以指示可以用于处理图元的两个或更多个不同着色器程序的集合,并且渲染逻辑108可以在不同的着色器程序之间进行选择,以便基于要渲染图元的渲染复杂度来渲染图元。在这种情况下,要渲染图块内的图元的渲染复杂度可以基于并非完全由着色器程序的复杂度确定的成本指示。

作为另一示例,渲染逻辑108可以被配置为应用用于渲染图元的射线跟踪方法,并且渲染过程可以通过控制在射线跟踪方法中使用的射线跟踪参数来控制。例如,可以控制待处理的光线反弹次数和/或射线的裁剪距离,从而控制渲染复杂度。例如,如果使用高渲染复杂度,则可以考虑大量的射线反弹和/或可以为射线设置大的剪裁距离;而如果使用低渲染复杂度,则可以考虑少量的射线反弹和/或可以为射线设置短的裁剪距离。

作为另一示例,渲染逻辑108可以被配置为为已渲染图像的每个样本生成颜色值集合。可以通过对针对每个样本而确定的颜色值的数目进行控制来控制渲染复杂度。例如,在完全渲染复杂度下,渲染逻辑可以为每个已渲染样本生成颜色值集合;同时在降低的渲染复杂度下,渲染逻辑可以为一个或多个已渲染样本生成颜色值集合的子集。在样本与像素之间可以存在一对一的映射,但是如上所述,在不同示例中,每像素的样本数可以不同,并且在每像素有多个样本的情况下,可以对像素的已渲染样本进行组合以确定已渲染图像的已渲染像素。样本的颜色值集合可以例如包括红色值、绿色值和蓝色值(被称为“rgb”值)。例如,可以使用预定数目的位(例如,8位)来表示样本的每个颜色值。还有很多其他颜色格式可以用来代替rgb,诸如ycbcr颜色格式。在完全渲染复杂度下,对于样本确定颜色值集合的每个颜色值。然而,用于降低渲染复杂度的一种方法是:不生成一个或多个样本的颜色值集合中的一个或多个颜色值。例如,对于一个或多个样本(例如,要降低渲染复杂度的图块中的每个样本),生成整个颜色值集合的子集。术语“子集”在这里用来表示完整“集合”中的至少一个值而不是全部值。例如,可以为每个样本生成单个颜色值(例如,r、g或b)。优选地,对于每个样本,颜色值的子集将不相同。例如,可以根据对不同的样本生成不同的颜色值(例如,r、g或b)的模式,来确定针对要以降低的复杂度来渲染的图块内的样本所要确定的颜色值。例如,该模式可以与拜耳过滤器的模式相匹配,使得对于每个2×2块样本,样本之一(仅)具有确定的蓝色值,样本之一(仅)具有确定的红色值,以及样本中的两个(仅)具有确定的绿色值。在不同的示例中可以使用其他模式。例如,可以选择模式以与在显示已渲染图像的显示器中使用的模式相匹配。减少为样本确定的颜色值的数目可以显著降低渲染复杂度,并且仍然可以在已渲染图像中提供可接受的质量水平。在适当的情况下,可以使用去马赛克技术在图像被渲染之后为像素生成缺失的颜色值。

图7示出了其中可以实施本文中描述的图形处理系统的更宽的计算机系统。计算机系统包括cpu702、gpu102、存储器704和其他设备706,诸如上述显示器708、视频编码单元710和传输单元712。计算机系统的部件可以经由通信总线714相互通信。存储器704可以包括图1所示的存储器1041和1042。

图形处理系统100被示出为包括多个功能块。这仅仅是示意性的,并不是为了定义这样的实体的不同逻辑元素之间的严格划分。每个功能块可以以任何合适的方式提供。应当理解,本文中描述为由图形处理系统形成的中间值不需要由图形处理系统在任何蚀刻在物理上生成,并且可以仅仅表示方便地描述由图形处理系统在其输入和输出之间执行的处理的逻辑值。

本文中描述的图形处理单元可以用硬件在集成电路上实施。本文中描述的图形处理单元可以被配置为执行本文中描述的任何方法。通常,上述任何功能、方法、技术或部件可以用软件、固件、硬件(例如,固定逻辑电路)或其任何组合来实施。本文中可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来总体上表示软件、固件、硬件或其任何组合。在软件实现的情况下,模块、功能、部件、元件、单元、块或逻辑表示当在处理器上执行时执行指定任务的程序代码。本文中描述的算法和方法可以由执行使得处理器执行算法/方法的代码的一个或多个处理器来执行。计算机可读存储介质的示例包括随机存取存储器(ram)、只读存储器(rom)、光盘、闪速存储器、硬盘存储器、以及可以使用磁、光学和其他技术来存储指令或其他数据并且可以被机器访问的其他存储器设备。

本文中使用的术语计算机程序代码和计算机可读指令是指用于处理器的任何种类的可执行代码,包括以机器语言、解释型语言或脚本语言表达的代码。可执行代码包括二进制代码、机器代码、字节代码、定义集成电路的代码(诸如硬件描述语言或网表)、以及以诸如c、java或opencl等编程语言代码表示的代码。可执行代码可以任何种类的软件、固件、脚本、模块或库,其例如当在虚拟机或其他软件环境中适当地执行、处理、解释、编译时引起支持可执行代码的计算机系统的处理器执行由代码指定的任务。

处理器、计算机或计算机系统可以是具有能够执行指令的处理能力的任何种类的设备、机器或专用电路、或者其集合或其部分。处理器可以是任何种类的通用或专用处理器,诸如cpu、gpu、片上系统、状态机、媒体处理器、专用集成电路(asic)、可编程逻辑阵列、现场可编程门阵列(fpga)等。计算机或计算机系统可以包括一个或多个处理器。

还旨在涵盖定义如本文中描述的硬件的配置的软件,诸如用于设计集成电路、或者用于配置可编程芯片以执行期望的功能的hdl(硬件描述语言)软件。也就是说,可以提供一种计算机可读存储介质,其上编码有集成电路定义数据集形式的计算机可读程序代码,当该集成电路定义数据集在集成电路制造系统中处理时,该系统配置为制造被配置为执行本文中描述的任何方法的图形处理单元或者制造包括本文中描述的任何装置的图形处理单元。集成电路定义数据集可以是例如集成电路描述。

因此,可以提供一种在集成电路制造系统处制造如本文中描述的图形处理单元的方法。此外,可以提供一种集成电路定义数据集,其当在集成电路制造系统中处理时引起制造图形处理单元的方法被执行。

集成电路定义数据集可以是计算机代码的形式,例如作为网表、用于配置可编程芯片的代码、在任何级别定义集成电路的硬件描述语言,包括寄存器传输级(rtl)代码、诸如verilog或vhdl等高级电路表示和诸如oasis(rtm)和gdsii等低级电路表示。逻辑上定义集成电路(诸如rtl)的较高级表示可以在计算机系统处被处理,该计算机系统被配置用于在软件环境的上下文中生成集成电路的制造定义,该软件环境包括电路元件的定义和用于组合这些元件以便生成由表示所定义的集成电路的制造定义的规则。如通常在计算机系统处执行以定义机器的软件的情况,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以使被配置用于生成集成电路的制造定义的计算机系统能够执行定义集成电路以便生成该集成电路的制造定义的代码。

现在将关于图8描述在集成电路制造系统处理集成电路定义数据集以便配置系统以制造图形处理单元的示例。

图8示出了包括布局处理系统804和集成电路生成系统806的集成电路(ic)制造系统802的示例。ic制造系统802被配置为接收ic定义数据集(例如,定义如本文中的任何示例中描述的图形处理单元)、处理ic定义数据集、并且根据ic定义数据集(例如,其实施本文中的任何示例中描述的图形处理单元)来生成ic。ic定义数据集的处理将ic制造系统802配置为:制造实施如本文中的任何示例中描述的图形处理单元的集成电路。

布局处理系统804被配置为:接收和处理ic定义数据集以确定电路布局。从ic定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成rtl代码以确定要生成的电路的门级表示,例如,在逻辑部件(例如,nand、nor、and、or、mux和flip-flop部件)方面。可以从电路的门级表示中通过确定逻辑部件的位置信息来确定电路布局。这可以自动完成或者在用户参与下完成,以优化电路布局。当布局处理系统804确定了电路布局时,其可以将电路布局定义输出到ic生成系统806。电路布局定义可以是例如电路布局描述。

如现有技术中已知的,ic生成系统806根据电路布局定义来生成ic。例如,ic生成系统806可以实现半导体器件制造工艺以生成ic,其可以涉及光刻和化学处理步骤的多步骤序列,在这些步骤期间电子电路逐渐形成在由半导体材料制成的晶片上。电路布局定义可以是掩模的形式,其可以在用于根据电路定义来生成ic的光刻工艺中使用。可选地,提供给ic生成系统806的电路布局定义可以是ic生成系统806可以用来形成用于在生成ic时使用的合适的掩模的计算机可读代码的形式。

由ic制造系统802执行的不同过程可以全部在一个位置,例如,由一方实施。或者,ic制造系统802可以是分布式系统,使得一些过程可以在不同位置执行,并且可以由不同方执行。例如,以下中的一些阶段可以在不同位置和/或由不同方执行:(i)合成表示ic定义数据集的rtl代码,以形成要生成的电路的门级表示,(ii)基于门级表示来生成电路布局,(iii)根据电路布局来形成掩模,以及(iv)使用掩模来制造集成电路。

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

在一些实施例中,当在集成电路制造系统中处理时,集成电路制造定义数据集可以使得集成电路制造系统生成如本文中描述的设备。例如,由集成电路制造定义数据集按照以上关于图8所描述的方式来配置集成电路制造系统可以使得如本文描述的设备被制造。

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

与已知实施方式相比,在本申请中阐述的概念在设备、装置、模块和/或系统中(以及本文中实现的方法中)的实施方式可以产生性能改进。性能改进可以包括以下中的一个或多个:增加的计算性能、减少的时延、增加的吞吐量和/或降低的功耗。在制造这样的设备、装置、模块和系统(例如,在集成电路中)的过程中,性能改进可以对照物理实施方式来折中,由此改进了制造方法。例如,性能改进可以对照布局区域来折中,从而与已知实施方式的性能相匹配,但是使用更少的硅。这可以例如通过以串行化方式重用功能块或者在设备、装置、模块和/或系统的元件之间共享功能块来完成。相反,本申请中提出可以改善设备、装置、模块和系统的物理实施方式(例如,减小的硅面积)的概念可以为了改善性能而被折中。这可以通过例如在预定义的区域预算内制造模块的多个实例来完成。

申请人由此独立地公开了本文中描述的每个单独的特征以及两个或更多个这样的特征的任何组合,只要这样的特征或组合能够根据本领域技术人员的普通通用知识基于本说明书作为整体来执行,而不管这样的特征或特征组合是否解决了本文中公开的任何问题。鉴于前面的描述,对于本领域技术人员而言显而易见的是,可以在本发明的范围内进行各种修改。

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