用于在数据处理系统中提供输出表面的方法和装置与流程

文档序号:11635166阅读:296来源:国知局
用于在数据处理系统中提供输出表面的方法和装置与流程



背景技术:

本文所描述的技术涉及用于在数据处理系统中提供输出表面(surface)(如要显示的帧)的方法和系统,并且具体地说,涉及在数据处理系统中提供根据从一个或更多个输入表面(如输入窗口)合成(生成)的输出表面。

许多电子装置和系统使用窗口来在显示屏上向用户显示诸如图形用户接口、游戏、演示等这样的信息(并且允许用户与正被执行的一应用或多个应用进行交互)。

提供这种窗口的常见方法是:使用合成窗口系统,其中,单个输入窗口例如通过合成引擎而恰当地组合(即,合成),并将结果写出至帧缓冲区,其接着由用于所讨论的显示的显示控制器来读取,以便向用户显示该窗口。因为这种系统写出至帧缓冲区,并接着读取该缓冲区以供显示,所以它们通常被称为帧缓冲区合成系统。

除了这种帧缓冲区合成系统之外,还存在直接合成系统,其中,根据输入表面(窗口)生成合成帧,并接着直接(即,不经由帧缓冲区中的中间存储)输出至显示器,例如,通过合成显示控制器。

在这样的合成系统中,许多硬件资源(包括例如存储针对存储器中的帧缓冲区的指针的专用寄存器、帧缓冲区大小、裁剪和格式信息、以及专用输入fifo)通常针如下各个输入表面而被提供:合成系统可以合成到一输出表面中。由于针对每个输入表面所需的硬件资源相当可观,因而,大多数合成引擎或合成显示控制器仅支持有限数量的输入表面,如在三个至八个输入表面之间。

然而,对于可能需要合成的输入表面数量来说通常没有上限。在要合成的输入表面的数量超过组合系统的硬件资源可以支持的输入表面的数量的情况下,可以将一些组合操作卸载到分离的处理器,如图形处理单元(gpu)或cpu,但这并不总是可能或者在理想上是可取的。

因此,申请人认为,合成系统仍有改进的余地。

附图说明

下面,参照附图,仅通过示例的方式对本文所描述的技术的实施方式进行描述,其中:

图1是根据本文所描述的技术的所描述实施方式的、由多个输入表面合成的一输出表面的示例;

图2示意性地示出了可以根据本文所描述的技术的所描述实施方式来操作的数据处理系统;

图3示意性地示出了可以根据本文所描述的技术的所描述实施方式来操作的合成显示控制器;

图4示意性地示出了可以根据本文所描述的技术的所描述实施方式来操作的合成显示控制器的硬件模块;

图5、图6、图7a以及图7b示出了可以根据本文所描述的技术的所描述实施方式来使用的数据结构;

图8、图9a以及图9b示出了可以根据本文所描述的技术的所描述实施方式来合成的次级表面(secondarysurface)的示例;

图10a、图10b以及图10c示出了例示根据本文所描述的技术的实施方式的系统的操作的流程图;

图11示出了例示根据本文所描述的技术的实施方式的显示控制器的操作的流程图;

图12示意性地示出了可以根据本文所描述的技术的另一实施方式来操作的合成显示控制器的硬件模块;

图13a和图13b示出了例示根据图12所示实施方式的系统的操作的流程图;

图14示出了例示图12所示实施方式的显示控制器的操作的流程图;以及

图15示意性地示出了可以根据本文所描述的技术的所描述实施方式来操作的另一数据处理系统。

贯穿附图,相同标号在合适情况下被用于相同特征。

具体实施方式

本文所述的技术的实施方式包括一种方法,该方法包括以下步骤:

当要通过合成处理器从多个输入表面合成输出表面时,进行如下操作:

确定所述多个输入表面中的两个或更多个输入表面是否能够被组合成用于提供给所述合成处理器的单个次级表面;以及

当确定了所述多个输入表面中的两个或更多个输入表面可以被组合成用于提供给所述合成处理器的单个次级表面时,进行如下操作:

将表示所述次级表面的数据提供给所述合成处理器,所述数据指示对所述次级表面有贡献的所述输入表面。

本文所描述的技术的另一实施方式包括一种装置,该装置包括处理电路,该处理电路被配置成:

当要通过合成处理器从多个输入表面来合成输出表面时,该处理电路能够进行如下操作:

确定所述多个输入表面中的两个或更多个输入表面是否能够被组合成用于提供给所述合成处理器的单个次级表面;并且

如果确定所述多个输入表面中的两个或更多个输入表面能够被组合成用于提供给所述合成处理器的单个次级表面,则进行如下操作:

将表示所述次级表面的数据提供给所述合成处理器,所述数据指示对所述次级表面有贡献的所述输入表面。

本文所描述的技术涉及一种合成系统,其中,利用合成处理器(如合成显示控制器或合成引擎)将多个输入表面合成(组合),以提供输出表面(其例如可以接着被显示和/或写出至存储器,例如用于显示)。然而,在本文所描述的技术中,不是简单地将所有输入表面直接提供给组合处理,而是两个或更多个输入表面实际上首先被组合成单个次级(中间)表面,接着在合成输出表面时使用该次级表面。

如下将进一步讨论的,通过将多个输入表面标识并组合成次级表面,然后可以将该次级表面作为相当于任何其它输入表面的单一表面提供给合成处理。因而,这实际上可以允许合成更多输入表面,来提供输出表面,但不需要单独针对每一个输入表面提供明确的硬件支持(例如,fifo缓冲区),或者利用诸如gpu这样的另一处理器来合成一些或全部输入表面。

因此,可以在例如合成引擎或合成显示控制器中容纳更大数量的输入表面,而不会显著增加所需硬件资源,因为在将单个表面合成以形成该输出表面时,该合成处理可以将该次级表面处理为单一表面。

本文所描述的技术中的输入表面和输出表面可以是任何合适和期望的这种表面。如将根据上述清楚,在一个实施方式中,本文所描述的技术用于合成窗口系统,因此输入表面是输入窗口(待显示),并且输出表面是用于显示的输出帧(合成窗口)。在合成窗口系统中,输入表面窗口例如可以用于游戏、演示、图形用户接口(gui)、具有视频数据(例如,具有图形“回放”和“暂停”图标的视频帧)的gui等。

然而,其它布置也是可以的。例如,输出表面可以是一些中间窗口,接着本身将与其它窗口合成为最终输出窗口(帧),或者输出表面例如可以是某种形式的数据结构,如图形纹理(graphicstexture),其旨在被用于进一步(例如,图形)处理。

在实施方式中,输入表面和输出表面都是图像,例如。用于显示的帧。

输入表面可以具有相同或不同的大小,并且输出表面与输入表面可以大小相同或大小不同。

输入表面可以根据需要生成,例如,通过诸如图形处理系统(图形处理器)、视频处理器、cpu等这样的表面(帧)生成器适当地渲染。

在实施方式中,所生成的输入表面存储在适当的存储器中,例如,存储在主存储器中的相应帧缓冲区中,从那里它们可以被检索以供使用。在实施方式中,还生成并存储指示输入表面数据的位置的数据。

可以按任何合适和希望的方式来执行与是否可以使用要合成以形成输出表面的任何输入表面以形成次级表面有关的确定。在实施方式中,所述确定的步骤还确定哪些输入表面(若有的话)用于次级表面(例如,作为同一确定处理的一部分)。

在一个实施方式中,确定是否以及哪些输入表面可以在次级表面中组合的步骤包括:确定来自所述多个输入表面的任何输入表面是否彼此不交叠(例如和来自所述多个输入表面中的任何其它输入表面),接着利用所确定的未交叠(non-overlappinginputsurfaces)的输入表面(若有的话)中的两个或更多个来形成次级表面。由此,在实施方式中,该次级表面由两个或更多个未交叠输入表面形成。

申请人已经认识到,未交叠输入表面(无论如何选择的)更直接组合成次级表面,因为不考虑接着需要假设有关输入表面的大小或位置,即,在记住其它输入表面的同时,输入表面的哪个部分是可见的,例如,由于交叠输入表面或者由于输入表面的透明度(即α(alpha)值)。

在这些布置中,次级表面可以仅由所述多个输入表面中的、不与所述多个输入表面中的任何其它输入表面交叠的输入表面来形成。另选的是,次级表面可以由输入表面的这样的子集形成,即,该子集本身彼此不交叠(即,不交叠形成输入表面的次级表面子集中的任何其它输入表面),但是在输入表面子集内的输入表面接着(潜在地)交叠不包括在用于形成次级表面的输入表面子集中的其它输入表面。

由此,在这种情况下,次级表面将由彼此根本不交叠的一组输入表面形成,但是在要合成的全部多个输入表面中可能存在与用于次级表面的输入表面子集中的一个或多个输入表面交叠的其它输入表面。

在实施方式中,特别是在次级表面由可以交叠或不交叠所述多个输入表面中的、未包括在次级表面中的其它输入表面的输入表面形成的情况下,检查被用于次级表面的输入表面是否不具有交叠它们之间(在被用于次级表面的任何两个输入表面之间)的非(完全)透明输入表面的任何中间体(就深度而言),并且仅不具有交叠它们之间的非(完全)透明的输入表面的任何中间体(就深度而言)的输入表面被用于形成次级表面。

次级表面可以仅由未交叠输入表面形成,并且在这种情况下,每个输入表面的整体可以包括在次级表面中。

然而,申请人进一步认识到,也可以或者代替地将交叠输入表面组合成单个次级表面,因此在实施方式中,这就是所要做的。在这种情况下,次级表面可以仅包括所讨论输入表面中的至少一个的一部分或多部分(但不是全部)。

在考虑交叠输入表面以包含在次级表面中的情况下,接着在实施方式中,当最前面(画面空间)(表面交叠的地方)(完全)不透明时,在次级表面中仅包括一对交叠输入表面。

由此,在实施方式中,确定是否以及哪些输入表面可以在次级表面中组合的步骤包括:针对所述多个输入表面中的、至少部分交叠的输入表面,确定所确定的交叠的输入表面的画面空间中的最前面输入表面在表面交叠的地方是否不透明的,并且,在实施方式中,如果是这样,则将所确定的交叠的输入表面包括在次级表面中。

在一个实施方式中,次级表面仅由不透明输入表面形成,但这不是必需的,并且若希望的话,可以包括一个或更多个非不透明输入表面(例如,不交叠和/或位于次级表面中的其它输入表面后面)。次级表面对于位于其后面的表面来说,可以整体或部分地非不透明(半透明)。

在实施方式中,输入表面在画面空间中按深度次序加以考虑,例如,从画面空间中的最前面的输入表面开始。由此,在实施方式中,首先通过增加画面空间中的深度来对所述多个输入表面进行排序。

由此,在实施方式中,当确定是否以及哪些输入表面包括在次级表面中时,首先考虑按它们在画面空间中的深度次序的第一对输入表面(例如,查看它们是否完全交叠),接着考虑按深度次序的下一个输入表面(例如,查看其是否与已经选择以形成次级表面的任何输入表面交叠)等等,直到确定用于形成次级表面的一组输入表面为止。

考虑到按深度次序的输入表面(例如,确定给定输入表面与已经选择的输入表面是否存在任何交叠)是确定可以使用哪些输入表面来形成次级表面的特别便利的方式。

在实施方式中,操作系统或应用例如还可以或代替地指定要包括在次级表面中的一个输入表面或多个输入表面,即,输入表面可以通过例如本文所描述的技术的操作之外的处理器或应用而被预定为包括在次级表面中。

在实施方式中,在确定要用于形成次级表面的那些输入表面之前,完全透明的任何输入表面都被丢弃。如将清楚,处理这些透明表面没有意义,因为它们不会对输出表面有贡献。

类似的是,在实施方式中,在确定用于形成次级表面的那些输入表面之前,丢弃完全被其它输入表面的不透明区域(或完全不透明的其它输入表面)覆盖的任何输入表面。如将清楚,处理这种输入表面没有意义,因为它们不会对输出表面有贡献。

如将清楚,输入表面的次序(例如,根据在画面空间中的深度)连同画面空间中的所述多个输入表面的大小和位置一起,对于确定哪些输入表面用于形成次级表面来说特别有用。由此,在实施方式中,所述多个输入表面的一个或更多个属性,例如,以下中的一个或更多个(并且例如,全部):输入表面的排序、每个输入表面的大小、每个输入表面的位置、以及每个输入表面的透明度,被用于确定如下事项:任何输入表面是否能够被组合以形成次级表面,和/或哪些所述输入表面应当组合以形成次级表面。

可以按任何合适和希望的方式提供所述多个输入表面的属性。在一个实施方式中,处理器(例如,gpu或运行操作系统的cpu)被配置成,将所述多个输入表面的一个或更多个属性提供给次级表面确定处理。

所述多个输入表面中的所有输入表面能够被组合在单个次级表面中,即,确定哪些输入表面用于形成次级表面可以导致所有输入表面被选择。然而,在实施方式中,从所述多个输入表面中的输入表面子集生成次级表面。由此,在实施方式中,次级表面是输出表面处理中的“中间”表面,其接着与其它输入表面和/或按本文所描述的技术的方式生成的次级表面进行合成,以形成合成输出表面。

还应清楚,可以有不止一个的输入表面组合,其满足用于形成次级表面的标准,例如,不交叠的一组输入表面。在这种情况下,可以仅形成一个次级表面,但在实施方式中,形成两个或更多个次级表面,例如每个由输入表面的不同子集组成。

由此,在实施方式中,存在两个或更多个次级表面,其接着彼此和任何剩余的输入表面合成以提供合成输出表面。

一旦确定了要组合成次级表面以供给合成处理器的输入表面,就将表示次级表面的数据提供给合成处理器。

该数据可以按任何合适和希望的方式提供给合成处理器。在实施方式中,其被存储在(写入)合成处理器的或合成处理器可访问的合适存储器中,例如,合成处理器的或合成处理器可访问的一个本地存储器或多个本地存储器中。由此,表示次级表面的数据例如可以被写入与合成处理器相关联的一组寄存器(并且在一个实施方式中,这就是所做的),和/或可以将其写入合成处理器的或与合成处理器相关联的合适高速缓冲存储器。

将表示次级表面的数据提供给合成处理器的处理可以简单地包括:向合成处理器提供已经存在的关于输入表面的数据(例如,通过将该数据存储在与合成处理器相关联的寄存器中),或者若希望的话,其可以包括导出新数据(和新数据结构)以指示对次级表面有贡献的输入表面。由此,在实施方式中,本文所描述的技术包括生成表示次级表面的数据,该数据指示对次级表面有贡献的输入表面,接着将该数据提供给合成处理器,例如,通过将其存储在与合成处理器相关联的或合成处理器可访问的合适存储(部存储器)中。

指示对次级表面有贡献的输入表面并且提供给合成处理器的、表示次级表面的数据可以采取任何希望和合适的形式。

例如,其可以简单地指示要对次级表面有贡献的输入表面(例如,不另外指示那些输入表面如何布置在次级表面内)。由此,在一个实施方式中,包括对次级表面有贡献的输入表面的标识,例如,所确定的输入表面的列表。这在例如次级表面由完全未交叠的输入表面形成的情况下可能是恰当的,如在这种情况下,简单地指示哪些输入表面对次级表面有贡献可能足以允许合成处理器确定在次级表面内的任何给定位置处使用哪个输入表面。

在这种布置的一个实施方式中(和例如在其它方面)要用于形成次级表面的输入表面按特定(例如,选定)次序布置,并且指示给合成处理器。在实施方式中,要形成次级表面的输入表面基于它们的水平位置坐标(它们的x坐标)(例如它们的左边缘)来分类(排序)。在实施方式中,次级表面中的输入表面按它们的左边缘的x坐标来分类。这因而易于合成处理/处理器简单地通过输入表面(这些输入表面要针对次级表面的每个水平线从左到右形成次级表面)进行工作,以确定哪个输入表面用于次级表面内的每个相应位置(例如,在如下布置中,其中要形成次级表面的输入表面在该次级表面内不彼此交叠)。

在实施方式中,提供给合成处理器的、指示对次级表面有贡献的输入表面的数据包括:指示存储针对所讨论的输入表面的数据的地方的数据。该数据可以采取任何希望和合适的形式,但在实施方式中,包括以下中的一个或更多个并且例如包括全部:针对用于输入表面的数据存储在存储器中的地方的指针,和存储器中输入表面的大小的指示。这可以是在对次级表面有贡献的输入表面被简单地标识的情况下需要提供给合成处理器的所有数据,例如,其中次级表面仅由未交叠的输入表面形成。

在实施方式中,提供给合成处理器的表示次级表面的数据至少在有限的程度上指示如何将输入表面布置在次级表面中。这在次级表面包括交叠输入表面的情况下可能特别合适,并且将例如有助于减少或避免需要合成处理器本身确定哪个输入表面存在于次级表面内的任何给定位置。

由此,在实施方式中,表示次级表面的数据针对次级表面的两个或更多个区域中的每一个区域,标识要形成次级表面的所述区域的输入表面。

由此,在实施方式中,将表示次级表面的数据提供给合成处理器的步骤包括(并处理电路被配置成):

针对所述次级表面的两个或更多个区域中的每一个区域,确定所述第一个输入表面中的所述两个或更多个输入表面中的哪个输入表面要形成所述次级表面的所述区域;并且

针对所述次级表面的两个或更多个区域中的每一个区域,向所述合成处理器提供如下数据,该数据标识要形成所述次级表面的所述区域的所述输入表面。

在这些实施方式中,因此,针对所述次级表面的所述两个或更多个区域中的每一个区域,包括标识要形成次级表面区域的输入表面的信息的数据结构例如被写入合成处理器的存储部或合成处理器可访问的存储部。

在本文所描述的技术的这些实施方式中,基于具有多个区域的次级表面来指示次级表面内的输入表面的布置,每个都对应于次级表面的、由输入表面形成的区域。

以每个区域为基础指示对次级表面有贡献的输入表面的布置易于具有对次级表面有贡献的输入表面的更复杂布置,如彼此交叠的输入表面和/或具有不规则形状的输入表面。

可以按任何合适和希望的方式来确定要在所述两个或更多个区域处形成次级表面的输入表面。例如,可以确定针对每个区域的最前面的输入表面,并由此在数据结构中为该区域指示。然而,在实施方式中,首先通过应用一个或更多个上述标准来确定要用于形成次级表面的输入表面,这些标准整体上适用于输入表面,例如,它们的交叠、透明度、不透明度、排序等。

因此,预先选择适于形成次级表面的多个输入表面,接着确定要用于在所述两个或更多个区域中的每一个处形成次级表面的输入表面,例如,通过从针对每个区域的预选输入表面集合中确定最前面的输入表面。

在这些实施方式中的布置中,以逐条线为基础来确定要形成次级表面的每个区域的输入表面,即,次级表面的这些区域包括横贯(traversing)次级表面的一个或更多个组一条或更多条线。

通过以逐条线(或一组线)为基础来确定输入表面的布置,合成处理器不需要自己确定横跨穿过整个次级表面的输入表面的布置,例如,它们的大小和位置。

每条线的宽度(即,沿垂直于横贯次级表面的线的长度的方向)可以采取适合和希望的任何值。在实施方式中,每条线的宽度是一个点,例如,采样点,(如存储在存储器中),但这可以针对最终显示加以缩放。

横贯次级表面的线可以按任何合适和希望的方式来定义。在实施方式中,线是直的,并且例如,线水平地横贯次级表面。然而,次级表面(和包括次级表面的帧架)可以在合成之后旋转以供显示。在实施方式中,线横贯次级表面的整个(宽度)(但这不是必需的)。由此,在实施方式中,从最上面的线开始,垂直地处理这些线(既用于确定表示次级表面的数据,又用于合成次级表面),并且每条水平线从左到右考虑。

在本文所描述的技术的这些实施方式中,在次级表面内的输入表面的布置以逐条线(一组线)为基础加以确定。在实施方式中,这通过以下方式来实现,既,将线(或线组)划分成段(其例如沿平行于线的长度方向的方向限定),并且针对每个点或点组(一段),沿着该线(或线组)来确定输入表面中的哪一个将用于形成次级表面。由此,在实施方式中,一线组所述一条或更多条线包括具有一个或更多个点的一个或更多个段。

由此,在实施方式中,生成次级表面的处理包括(和用于生成次级表面的处理电路被配置成):

针对横贯所述次级表面的一个或更多个组一条或更多条线中的每一组,确定所述组的所述一条或更多条线包括具有一个或更多个点的一个或更多个段,该输入表面要在沿着所述组的所述一条或更多条线的每一点处形成所述次级表面;并且该方法还包括以下步骤(并且该处理电路被配置成):

针对每一组一条或更多条线,向所述合成处理器提供(例如,数据结构,该数据结构包括)标识要在所述组的所述一条或更多条线的每一段处形成所述次级表面的输入表面的信息。

在其中以逐条线为基础(即,针对每一条“线段”)确定用于形成次级表面的输入表面的实施方式中,这些点可以表示任何类型的点,如所需和适合的。例如,这些点可以直接对应于次级表面要(潜在地)显示于其上的显示器的像素,或者针对输入表面存储数据的点。然而,在实施方式中,这些点对应于在合成次级表面时使用的采样点,其接着可以针对最终显示而加以缩放。

在这些实施方式中,每组线都可以简单地由横贯次级表面的单个线组成,其中用于在线的每个点处形成次级表面的输入表面被单独确定,并针对每条线而写出至存储介质。然而,申请人已经清楚,因为沿着某条线的输入表面的相同布置通常将针对多条连续线重复,所特别是在输入表面为矩形时(如根据图1中的输入表面的布置将会看出)将这些线分组在一起是有益的。

因此,在实施方式中,每组线可以包含一条或更多条连续线(例如,沿与线的长度方向正交的方向),其具有用于在沿着线的每一段处形成次级表面的输入表面的相同布置。对应地,在实施方式中,存在至少一组线,其包含多条连续线,所述多条连续线具有与沿着线的每一段形成次级表面的输入表面相同的布置。

由此,在实施方式中,该方法包括以下步骤(并且对应地,处理电路被配置成):针对一条线,确定用于在该条线的每一段处形成次级表面的输入表面的布置是否与前一条线相同。一旦确定了一条线与上一条线相同,就可以向合成处理器提供:标识用于在该条线的每一段形成次级表面的所确定输入表面的相同信息。

然而,申请人已经清楚,所需信息可以在这样的时候减少,即,在针对所重复的线,仅存储一次标识用于在所述多条线的每一段处形成次级表面的所确定输入表面的信息,然后例如利用行程编码(runlengthencoding)指定该组所重复的线中的线数的时候。由此,在实施方式中,该方法包括以下步骤(并且对应地,处理电路被配置成):针对一组多条连续重复线,确定该组中有多少条线,并接着向合成处理器提供标识该线数的信息,连同标识用于在所述多条线的每一段处形成次级表面的所确定输入表面的信息。

可以按任何合适和希望的方式来指定标识被用于在一组线的每一段处形成次级表面的所确定输入表面的信息。该信息可以在沿该线的每一个单独点处指定,即,每一段可以简单地由单个点(例如,采样点)组成。

然而,按与线组相似的方式,其中,采取重复线组的优势,以便缩减信息的大小,申请人已经清楚,由通常针对沿着一段的多个点(例如,采样点)重复相同的输入表面,即,一段将包括多个点(例如,采样点),由于被用于形成次级表面的输入表面的区域通常具有大于单个点的面积,因而,有益的是,针对整个一段(即,不是单独针对每一点)来指定被用于形成次级表面的输入表面。应当清楚,这可能导致为存储数据结构所需的存储空间的量,以及为确定针对每一段的输入表面所需的处理量(例如,与每一点相对)显著缩减,由此,缩减了该处理的等待时间和功耗。

因此,在实施方式中,一段包括一个或更多个连续点(例如,采样点或像素),对此,使用同一输入表面沿着一条线形成次级表面,并且该方法包括以下步骤:(并且对应地,处理电路被配置成),针对所述一条或更多条线的每一段,确定该段包括多少点。在实施方式中,一旦确定了这个信息,该方法还包括以下步骤(并且对应地,处理电路被配置成):针对所述一条或更多条线中的每一段,向合成处理器提供如下信息,其标识用于形成针对该段的次级表面的所确定的输入表面和该段的长度,例如,点数(例如,采样点或像素)。这可以利用行程编码来进行,其编码从给定输入表面获取每个段中的多少点。

可以按任何希望和合适的方式来存储标识要在次级表面的每个区域或者(线)的每一段处用于次级表面的所确定的输入表面的数据,包括如上所述利用行程编码。在一个实施方式中,该信息包括标识要针对相应区域或段进行显示的输入表面的一个或更多个标签,例如,其接着可以用于查寻要针对各个输入表面显示的数据。然而,在实施方式中,该信息包括一个或更多个指针,即,其指向要针对相应输入表面显示的数据,并因此在由合成处理器读取该信息时被跟随。

在这些实施方式中,针对次级表面线中的这些段的数据,无论作为标签还是指针,例如都可以在单个数据条目中被指示,例如,以每条线为基础。然而,在实施方式中,数据被组织成,使得标识用于在一组一条或更多条线的每一段处形成次级表面的输入表面的信息包括第一数据条目,第一数据条目包括针对该组一条或更多条线的指针(或其它标识符),该指针(或其它标识符)指向针对该组一条或更多条线的一组第二数据条目,在每个第二数据条目内,接着包括标识要在该组线的相应段处用于次级表面的输入表面的信息。

由此,在实施方式中,存在一组第一数据条目(“头部”),该一组第一数据条目(“头部”)针对次级表面中的该组线例如包含指针,其为整个次级表面提供总体数据结构,并且为每组线提供第一数据条目。例如,来自第一数据条目、接着指向各组第二数据条目的所述指针(针对每组线一个)接着详细说明每组线如何布置,即,该输入表面要针对该组线中的线的哪个段来显示。

因此,每组第二数据条目提供用于各组线的数据结构,并且详细说明每组线如何被布置成段。针对沿着(一组)线的每一段提供第二数据条目,并标识要针对该段显示的输入表面。

如前所述,在实施方式中,将这些线分组在一起,例如,针对重复的线。由此,类似的是,针对给定的一组线的该组第二数据条目可以针对该组线中的每条线分别写出,但是,在实施方式中,该组第二数据条目仅针对一组线被写出一次。针对给定组中的所述多条线中的每条线可以存在分离的第一数据条目(例如包括针对用于所述组的该组第二数据条目的指针),但是,在实施方式中,针对一组线中的第一条线写入单个指针(针对该组第二数据条目的第一数据条目),连同表示该组中的线数的信息,即,重复该线的次数,并由此跟随初始指针多少次来提供必需的重复。因此,在实施方式中,该组第一数据条目包括:针对每组线的指针(针对一组第二数据条目),和表示每个组中的线数的信息。

而且,类似的是,第二数据条目可以包括针对一段中的每个点的标签和指针,例如。标识针对为次级表面显示哪个输入表面的数据。然而,如前讨论的,在实施方式中,第二数据条目包括:标识用于形成针对该组线的所述段的次级表面的输入表面的信息,和表示该段的长度的信息。因此,在实施方式中,每组第二数据条目包括:标识用于形成针对该组线的每一段的次级表面的输入表面的信息,和表示每一段的长度的信息。

在实施方式中,随着新线段的到达而生成标识针对特定线段的所确定的输入表面的信息(例如存储在第二数据条目中)。这缩减了系统中存储的持久性数据的量,由此,缩减了所需寄存器的数量。

在实施方式中,一个(和每个)第二数据条目包括指向(存储的)数据的指针,该指针指示要用于针对所讨论的次级表面的区域形成次级表面的输入表面被存储在哪里。由此,在实施方式中,第二数据条目指向一组第三数据条目,其中,每个第三数据条目指示针对相应输入表面的数据存储在哪里。在实施方式中,这些第三数据条目具有上述形式,即,包括以下中的一个或更多个:针对所讨论的输入表面的数据存储在存储器中哪里的指针,和存储器中的输入表面的大小的指示。

如针对上述实施方式阐述的,在实施方式中,次级表面因此将由一组第一数据条目和对应组的第二数据条目和第三数据条目来限定,其中第二数据条目和第三数据条目被方便地作为数据结构在存储介质中而提供。在一些实施方式中,数据结构还可以包括进一步的信息,例如,以下中的一个或更多个:输入帧缓冲区格式信息、旋转信息、缩放信息等。

虽然在一些实施方式中,次级表面完全填充有输入表面,并由此对其后面的一切是不透明或半透明的,即,次级表面的每一条线都完全填充有所显示的输入表面的段,但在其它实施方式中,次级表面包括未被任何输入表面覆盖的区域。因此,例如,每组线都可以包括未限定针对其的输入表面(被用于形成次级表面)的多个部分,即,多段。

在实施方式中,当一组线包括未呈现针对其的输入表面的一部分时,那么同样针对该线的那一部分(或多个部分)限定一线段。由此,在实施方式中,标识用于形成次级表面的输入表面的数据还指示:次级表面的、实际上未呈现输入表面的任何区域(例如,所述段)。这样的区域例如可以适当地加以标记,例如,通过指示其的数据,如空代码。

次级表面的、未被输入表面覆盖的区域可以按任何希望和合适的方式进行处理。例如,这样的区域可以被限定为具有默认颜色(具有恰当的α值)或被限定为透明的。由此,当通过控制器读取标识用于形成次级表面的输入表面的数据,并且遇到没有输入表面的区域(例如,通过使用空代码标识的)时,合成处理/处理器能够恰当地处理那些段,例如,通过利用针对该区域的默认颜色或者简单地将其处理为透明的。

次级表面可以是不透明的,或者次级表面作为整体可以具有半透明性。在后一种情况下,一旦针对次级表面的所有输入表面已被确定,就可以确定次级表面的半透明度。次级表面的半透明度可以针对整个表面来限定(这可以被定义为使得α值横跨该表面变化的函数),或者可以针对每个区域、线组、段和/或横跨次级表面的点来单独定义α值。

次级表面可以覆盖整个输出表面,例如,填充包含显示帧的整个画面。然而,在一个实施方式中,次级表面不覆盖整个输出表面(例如,显示帧),而仅覆盖其一部分。在这种情况下,在实施方式中,输出表面的、被次级表面覆盖(需要加以考虑的)的区域也被指示给合成处理器。在实施方式中,包含次级表面的边界框被限定并提供给合成处理器(例如,合成处理器然后仅在由该边界框指示的区域内合成次级表面)。

可以通过整个数据处理系统的任何合适和希望的处理器或处理部件(如cpu或gpu)来生成次级表面,即,确定哪些输入表面用于形成次级表面,/或哪些输入表面形成次级表面的不同区域(输入表面要如何布置在次级表面内)的步骤。

在实施方式中,次级表面确定和“构造”,以及向合成处理器提供数据,由用于合成处理器的驱动器(driver)(例如、合成引擎和/或合成显示控制器)来执行,其要合成输入表面以生成合成输出表面。该驱动器例如可以在整个数据处理系统的主机处理器上运行,并且响应于来自应用的命令,例如,合成多个输入表面,接着在向合成处理器发出命令和数据以生成合成输出表面之前,按上述方式评估输入表面并制备次级表面。

在实施方式中,像将表示该次级表面或多个次级表面的数据提供给合成处理器一样,针对不是次级表面的一部分的任何剩余输入表面,也向合成处理器提供对应数据。

一旦要组合成一个次级表面(或多个表面)的输入表面已被确定,并且与该次级表面或多个次级表面(以及任何剩余输入表面)有关的数据已经被提供给合成处理器,合成处理器接着就可以执行其合成操作,以合成该次级表面或多个次级表面与任何剩余输入表面中的一个或更多个,以形成希望的输出表面。

在这方面,合成处理器可以包括可以合成多个输入表面以形成输出表面的任何合适的处理器。

由此,其例如可以并且在一个实施方式中包括合成引擎,该合成引擎可以合成输入表面以形成合成输出表面(并接着将该合成输出表面例如存储在帧缓冲区中,以供使用)。在这种情况下,接着,分离的显示控制器例如可以从帧缓冲区读取并显示合成输出表面。

合成处理器同样可以采用合成显示控制器的形式,其可操作以合成和显示输出表面(帧)。在这种情况下,合成显示控制部将从输入表面读取相关数据,合成那些表面,然后将其提供给显示器以供显示,而不必例如将合成输出表面写出至分离的帧缓冲区。

合成处理器也可以采用合成显示控制器的形式,其可操作以合成和显示输出帧,而且若希望的话,同样也将这样的输出帧写入至帧缓冲区以供其它使用。

而且,合成处理器可以采用以下形式:视频引擎、摄像机图像信号处理器、图像信号处理器、gpu或其它处理器,其可操作以合成表面来提供合成输出帧。

可以按任何希望和合适的方式来执行次级表面和任何剩余输入表面的合成。例如,可以通过混合或以其它方式组合次级和输入表面,而由次级表面和输入表面生成合成输出表面。若希望的话,该处理还可以涉及将变换(歪斜、旋转、缩放等)应用至次级和输入表面或多个表面。

合成处理器可以在其执行合成操作时,按任何合适和希望的方式使用提供给其的、指示对次级表面有贡献的输入表面的信息。

在实施方式中,合成处理器使用该信息来确定提取什么表面数据用于次级表面,并且具体来说,针对次级表面内的任何给定位置(例如,针对次级表面的该区域内的每个位置(例如,采样点或像素))确定使用(并且提取)哪个输入表面数据。在实施方式中,合成处理器接着将该输入表面数据用于次级表面,其中输入表面数据用于对应数据位置,或者来自任何其它次级或输入表面的、次级表面要与其合成(并且例如,交叠)的位置,以生成针对所讨论数据位置的合成输出表面。

由此,在实施方式中,本文所描述的技术还包括(并且所述装置还包括合成处理器,其被配置成),至少利用次级表面来合成输出表面,其中,至少利用所述次级表面合成所述输出表面的步骤包括以下步骤:从由指示对所述次级表面有贡献的所述输入表面的数据所指示的所述输入表面,来提取要用于形成所述次级表面的数据。

由此,在实施方式中,合成处理器使用标识要对次级表面有贡献的输入表面的信息,来确定要在(例如,每个)要被合成到输出表面中的次级表面位置处使用的输入表面(并且用于提取针对所确定输入表面的数据)。

要做到这一点,在实施方式中,合成处理/处理器读取标识要形成次级表面的输入表面的信息,接着使用该数据来从所标识输入表面提取要用于形成次级表面的每个区域的数据,以利用次级表面来合成输出表面。

由此,在实施方式中,该合成处理包括以下步骤(并且该合成处理器被配置成):针对所述次级表面的两个或更多个区域中的每一个区域,进行如下操作:

读取标识要形成所述次级表面的所述区域的所述输入表面的所存储数据;并且

从要用于形成所述次级表面的所述区域的标识的所述输入表面来提取数据。

由此,本文所描述的技术的另一实施方式包括一种从多个输入表面来合成输出表面的方法,该方法包括以下步骤:

至少利用次级表面来合成所述输出表面,所述次级表面由要被合成以形成所述输出表面的两个或更多个输入表面的相应至少一部分或多个部分形成;其中,合成所述输出表面的步骤包括以下步骤:针对所述次级表面的两个或更多个区域中的每一个区域,进行如下操作:

读取标识要形成所述次级表面的所述区域的所述输入表面的数据;

从要用于形成所述次级表面的所述区域的标识的所述输入表面来提取数据;以及

利用所提取的输入表面数据来合成所述输出表面。

本文所描述的技术的另一实施方式包括一种用于从多个输入表面来合成输出表面的合成处理器,所述合成处理器包括处理电路,该处理电路被配置成进行如下操作:

至少利用次级表面合成输出表面,所述次级表面由要被合成以形成所述输出表面的两个或更多个输入表面的相应至少一部分或多个部分来形成;其中,为了合成所述输出表面,所述合成处理器被配置成,针对所述次级表面的两个或更多个区域中的每一个区域,进行如下操作:

读取要形成所述次级表面的所述区域的所述输入表面的数据;

从要用于形成所述次级表面的所述区域的标识的所述输入表面来提取数据;以及

利用所提取的输入表面数据来合成所述输出表面。

标识要形成次级表面的一区域的输入表面的信息可以用于按任何合适和希望的方式从所标识输入表面提取数据。这例如取决于所提供的、标识要形成次级表面的输入表面数据的性质。

例如,在该数据简单地指示输入表面存储在存储器中哪里的情况下,接着可以提取相关输入表面数据。在这种情况下,合成处理/处理器接着还可以操作以确定针对次级表面的每个区域要使用哪个输入表面。在实施方式中,如上所述,在这种情况下,所确定的输入表面被排序(分类),例如根据每个输入表面的最左边缘的水平坐标,并接着依次由合成处理/处理器加以考虑。

另选的是,在指示要形成次级表面的输入表面的数据是更复杂的数据结构(例如,包括如上所述第一数据条目、第二数据条目以及第三数据条目)的情况下,接着,在实施方式中,依次读取相关数据条目,跟着允许提取针对该输入表面的数据。

由此,在一个实施方式中,该方法还包括以下步骤(并且该合成处理器被配置成):

针对所述次级表面的每组一条或更多条线进行如下操作:

读取标识要在沿着所述组的所述一条或更多条线的每一段处形成所述次级表面的输入表面的信息;并且

针对每一段,从要在所述段处用于形成所述次级表面的标识的所述输入表面来提取数据。

由此,在这种情况下,合成处理/处理器将沿着次级表面的线,确定哪些输入表面将要用于形成次级表面,并且该信息接着用于提取针对相应输入表面的数据。

在这些实施方式中,标识用于在每一段处形成次级表面的输入表面的数据在实施方式中由合成处理器读取到缓冲区中,其中,其可以用于合成次级表面。在一个实施方式中,该组第一数据条目,(即,关于次级表面中的线组如何布置的信息)被提取到缓冲区中,例如,“头部”缓冲区。因此,该方法包括以下步骤(并且合成处理器被配置成):将一组第一数据条目读取到缓冲区中。这使得能够在本地引用该组第一数据条目,而不必在每次需要其时都从例如主存储器提取该数据。

在实施方式中,接着读取针对该组线的第一数据条目,并将所指示的该组第二数据条目(即,关于该线组中的段如何布置的信息)提取到缓冲区中,例如,“线段”缓冲区。因此,该方法还包括以下步骤(并且合成处理器还被配置成):读取针对一组线的第一数据条目,并且将所指示的该组第二数据条目提取到缓冲区中,该组第二数据条目标识用于在该组线的相应段处形成次级表面的输入表面。这意味着,针对给定的一组线的该组第二数据条目不需要分别针对该组线中的每一条线(在其中一组线包括多条重复线的实施方式中)从例如主存储器中读取,而是可以在本地从缓冲区读取。

一旦已经读取了标识用于在每一段处形成次级表面的输入表面的信息,在实施方式中,就接着将其用于提取要针对所标识输入表面显示的数据。

在实施方式中,该操作针对该组线中的每一段加以重复,以便合成由该组线描述的次级表面的一部分。接着,该操作可以针对次级表面中的每组线加以重复,以便合成次级表面。

在实施方式中,所提取的输入表面数据被本地高速缓存至合成处理/处理器,以使在可能情况下,可以更快速重复使用其。

因此,针对给定的标识输入表面,在实施方式中,首先查询高速缓存与其是否包含要用于所标识输入表面有关的数据。如果要用于所标识输入表面的数据存在于高速缓存(高速缓存“命中”)中,则其可以用于合成次级表面,如果不是,则该数据需要从例如主存储器提取到高速缓存中。

当需要要用于输入表面(例如,用于特定次级表面段)的数据时,可以针对合成操作读取针对整个输入表面的数据,并接着确定并选择针对例如所需段(其通常小于整个输入表面)的希望数据。然而,在实施方式中,仅将必需输入表面数据从例如高速缓存读入。

由此,在实施方式中,合成处理(并且对应地,合成处理器被配置成)包括以下步骤:针对每一段,确定所述段的位置和长度,并且仅提取要针对所确定的输入表面显示的数据,确定输入表面要用于针对该段的长度来形成次级表面。(然而,当输入表面被提取到高速缓存中(若使用的话)时,在实施方式中,整个输入表面被提取,因为很可能的是,输入表面的、除了最初所需的特定段以外的不同部分将需要用于次级表面的不同部分。)

接着,用于次级表面(或次级表面部分)的所提取输入表面数据例如可以被合成为输出表面的一部分,并且写入至存储介质(例如,帧缓冲区)以供后续使用(例如,显示),和/或直接提供给显示器以供显示等。

输入表面数据、次级表面数据以及输出表面数据中的一个或更多个可以按压缩形式存储和/或使用。被处理的数据最初例如可以按压缩形式存储,但是按未压缩形式处理,在这种情况下,在实施方式中,所述装置包括解压缩器。所处理的数据随后被压缩,在这种情况下,在实施方式中,所述装置包括压缩器。具体来说,当合成次级表面,和/或要用于形成输出和/或输出表面的任何剩余输入表面被写出至例如帧缓冲区时,它们可能在这个阶段被压缩。

由此,在实施方式中,如合适和所希望的,要用于次级表面的所提取输入表面数据与其它次级表面和/或剩余输入表面组合,以形成输出表面,即,在实施方式中,该方法包括以下步骤(并且合成处理器被配置成):将次级表面与一个或更多个其它次级表面,和/或与任何剩余输入表面中的一个或多个一起组合成输出表面。然后,该输出表面可以作为帧本身或者作为帧的一部分,准备显示,如上所述。

对应地,在实施方式中,该方法包括以下步骤(并且对应于,合成处理器被配置成):写出输出表面以供显示。这可以是去往用于显示的帧缓冲区、去往系统的另一部分(例如,以供进一步处理),或者去往系统外部的装置。

在实施方式中,接着,针对要合成的下一个输出表面(例如,下一个显示帧)重复该操作,等等。

本文所描述的技术可以在任何合适的数据和/或媒体处理系统中实现,如基于适当配置的微处理器的系统。在一些实施方式中,本文所描述的技术在基于计算机和/或微处理器的系统中实现。

实现本文所描述的技术的数据处理系统可以包含任何希望和恰当以及合适的部件和组件。由此,其可以包括以下各项中的一个或更多个:cpu、gpu、合成处理器(例如,合成显示控制器,或者合成引擎和显示控制器)、显示器、以及用于存储所需的各种表面(帧)和其它数据(例如,与哪些输入表面要用于形成次级表面有关的信息)的恰当存储介质(存储器)。另外,或另选的是,对于gpu来说,该数据处理系统可以包括:视频引擎、摄像机图像信号处理器和/或图像信号处理器。

在本文所描述的技术的实施方式中,合成处理/处理器可以按本文所描述的技术的方式来支持使用仅单个次级表面,或者多个(例如,两个)这种次级表面。在实施方式中,其还支持使用至少一个(例如,多个)单个输入表面与次级表面或多个次级表面组合。

与合成处理/处理器可以按单个操作合成(即使按本文所描述的技术的方式使用次级表面或多个次级表面)相比,在输出表面要针对更多输入表面加以合成的情况下,那么在实施方式中,一些或全部“过量”输入表面的合成被卸载至另一处理器(如系统的gpu或cpu)并且在其上执行。

用于合成输出表面的合成处理器和/或装置可以,并且在实施方式中还包括:和/或与之通信的存储本文所述数据和/或存储用于执行本文所述处理的软件的一个或更多个存储器和/或存储器装置。该合成处理器和/或装置可以与主机微处理器和/或与用于基于所生成数据来显示图像的显示器通信。

本文所描述的技术的各种功能可以按任何希望和合适方式来执行。例如,本文所描述的技术的功能可以如所希望地按硬件或软件来实现。由此,例如,本文所描述的技术的各种功能性部件和“装置”可以包括合适的处理器或多个处理器、控制器或多个控制器、功能性单元、电路、处理逻辑、微处理器布置等,其可操作以执行各种功能等,如可以被编程成按希望方式操作的适当专用的硬件部件(处理电路)和/或可编程硬件部件(处理电路)。类似的是,要显示这些表面的显示器可以是任何合适的这种显示器,如电子装置的显示屏,计算机的监视器等。

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

本领域技术人员还应清楚,本文所描述的技术的全部描述实施方式在合适时候,可以包括本文所述可选特征中的任一个或更多个或者全部。

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

本文所描述的技术还扩展至包括这样的软件的计算机软件载体,即,当该软件用于操作图形处理器、渲染器、合成显示控制器、或包括数据处理器的其它系统时,使与所述数据处理器、所述处理器、渲染器、控制器或系统结合地执行本文所描述的技术的方法的步骤。这种计算机软件载体可以是物理存储介质,如rom芯片、cdrom、ram、闪速存储器或磁盘。

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

本文所描述的技术可以适当地具体实施为,供与计算机系统一起使用的计算机程序产品。这种实现可以包括:在诸如计算机可读介质(例如,软盘、cdrom、rom、ram、闪速存储器或硬盘)这样的有形非暂时介质上固定的一系列计算机可读指令。该系列计算机可读指令具体实施本文所述全部或部分功能。

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

如图1所示,合成输出表面(例如,显示帧)10的典型示例包括四个分离的输入表面1、2、3、4,其中每个输入表面都包含要显示的矩形。表面4不交叠任何其它表面,但表面1、2以及3皆彼此交叠并且α-混合,即,表面1和3是半透明的,并且表面1位于表面3的前方,表面3在画面空间中又位于表面2的前方。

图2示意性地示出了可以执行本文所描述的技术的基本操作的示例性数据处理系统21。

如图2所示,数据处理系统21包括芯片上系统(soc)22,其包括:cpu23、gpu24以及显示控制器25,这些经由互连部27通信,并且可以经由存储器控制器26使用芯片-外存储器28。在这个实施方式中,显示控制器25是本身有能力并且操作以从多个输入表面合成显示帧的合成显示控制器。显示控制器25具有用于与显示器19进行数据通信的显示接口29。用于显示控制器25的驱动器140在cpu23上运行。

若希望的话,该系统还可以或者代替(例如,代替gpu24)地包括:视频引擎(处理器)、摄像机图像信号处理器、和/或图像信号处理器。

根据本实施方式,要合成到输出表面中的输入表面根据需要生成,例如通过由gpu24适当地渲染。接着,将所生成的输入表面写入至芯片外存储器28。

为了缩减数据处理系统对硬件资源的需求,在本实施方式中,用于显示控制器25的驱动器140将多个输入表面组合成中间次级表面。该次级表面接着可以在合成输出表面(例如,与其它次级表面和任何剩余输入表面,如适于合成输出表面的)时使用。

要做到这一点,如下所述,驱动器140首先选择要哪些输入表面用于形成次级表面。根据这样选择的输入表面,驱动器140接着确定如何将这些输入表面布置成形成次级表面。接着,按恰当的方式生成指示输入表面的布置的信息,例如,通过使用写出至一个或更多个缓冲区的数据结构。然后可以使用该次级表面连同如必需的其它表面,来合成输出表面。

图3示意性地示出了可以根据本文所描述的技术的所描述的实施方式来操作的示例性合成显示控制器25。

如图3所示,合成显示控制器25包括总线接口30,经由该总线接口30可以读取由gpu24生成的输入表面,如下所述。总线接口30与多个(这里是三个)硬件模块31、32、33进行数据通信,其中的两个模块(硬件模块32和33)可操作以(至少部分地)从多个输入表面来生成次级表面,以供在最终输出帧中合成。另一硬件模块31被配置成,处理用于与另外两个次级表面合成到最终显示帧中的输入表面。

硬件模块31、32、33中的每一个都包括一些控制逻辑34、35、36以及输入fifo缓冲区37、38、39,并将其输出发送至合成块40,合成块40将来自硬件模块31中的一个的输入表面和来自其它硬件模块32、33的次级表面组合成输出显示帧。来自合成块40的输出显示帧,连同来自显示定时模块41的显示定时信息一起,被发送至显示接口29。

对于如图1所示的显示帧10来说,例如,次级表面(例如根据输入表面1和4形成的)将需要与其它输入表面2、3进行α混合,以形成最终显示帧。由此,次级表面可以保持在合成显示控制器25的一个硬件模块32中,并且每个输入表面被保持在其它硬件模块31、33中,从那里,通过合成块40将它们组合起来,并输出至显示接口29。

图4示意性地示出了可以根据本文所描述的技术的所描述实施方式来操作的合成显示控制器25的示例性硬件模块32或33。

如图4所示,硬件模块32包括内部总线接口42,其与显示控制器的总线接口30(如图3所示)进行通信,以读入由gpu24生成的、与输入表面有关并且用于输入表面的数据。内部总线接口42与判优器(arbiter)43进行数据通信,判优器43(如将在下面更详细地描述的)确定该输入表面要任何在次级表面中使用。

判优器43使用如将描述的、根据本文所描述的技术的实施方式生成的信息,其被存储在头部缓冲区44、线段缓冲区46以及表面高速缓存45中,以根据该输入表面形成次级表面。还如图3所示,硬件模块32还包括输入fifo38,fifo38接收由判优器43集合的像素数据,以输出至显示控制器25的合成块40(如图3所示)。硬件模块32还包括形成硬件模块32的控制逻辑35的状态机48。

下面,将参照图5、6以及7所示的数据结构,对头部缓冲区44、表面高速缓存45以及线段缓冲区46进行更详细描述。

图5示出了数据结构49,其中,该数据结构49由用于合成显示控制器25的驱动器140生成,并且随后被读入合成显示控制器25的硬件模块32的头部缓冲区44和线段缓冲区46中,以便详细说明次级表面中的输入表面的布局。数据结构49包括由头部指针51引用的“头部”数据结构50,并且包括包含针对“线”数据结构53的指针52的多条线,以及重复计数器54,重复计数器54指定在次级表面中连续重复每条线多少次,即,每个指针52要被跟随多少次。在图6中更详细地示出了“线”数据结构53。

图6示出了针对次级表面的一条线的数据结构53。该线被分成多段,沿着其,将同一输入表面用于形成次级表面,并且每一段在线数据结构53中被分配一条目55。在需要时,将这些条目55被读入硬件模块32的线段缓冲区46中。在该实施方式中,每一段条目55是16位宽,并且针对被用于形成针对该线段的次级表面的输入表面的id56分配位0-6,并且针对该线段的长度57分配位7-15,即,该线段中的像素数。输入表面id56允许在需要时提取针对每条线段的输入表面的细节。

图7a中示出了针对输入表面的示例数据结构58。针对输入表面的数据结构58由皆为32位宽的三个数据字描述。用于该输入表面的这些数据结构58随着需要它们和在需要它们时被提取到硬件模块32的表面高速缓存45中。数据结构58包括:针对用于输入表面的实际数据的指针59(第一个字)、阵列的步幅60(第二个字)、以及输入表面的水平和垂直大小61、62(第三个字)。若希望的话,输入表面数据结构58还可以包含其它信息,如帧缓冲区格式信息、旋转信息和/或缩放信息等。

图7b示出了用于多个输入表面的示例数据结构63。该数据结构包括多个条目64,其中每一个条目都表示一输入表面,并且具有与图7a所示的单个数据结构58相同的格式。由此,用于输入表面的各个数据结构以背对背方式存储在存储器中。针对一特定输入表面的数据结构的地址,即,其在整个数据结构63中的行号,可以通过获知所述多个输入表面的数据结构63的开始处的地址,以及总体数据结构63内的单个数据结构的位置来容易地计算。该输入表面例如可以根据其在次级表面中的深度而在总体数据结构63中排序,尽管这不是必要的。

图8示出了可以利用本文所描述的技术的一实施方式,从多个输入表面来合成的次级表面65的示例。次级表面65包括三个输入表面66、67、68,它们在形状上都是矩形的并且不交叠。次级表面的其余部分不被任何输入表面覆盖,因此是空白的。通常来说,这意味着次级表面的这些部分对于背后的任何次级表面来说将是透明的,和/或被设置为成默认背景颜色。

图9a示出了可以利用本文所描述的技术来合成的次级表面70的另一示例。次级表面70包括五个输入表面71、72、73、74、75,其中四个数目表面71、72、73、74彼此具有一定程度的不透明交叠,并且一个输入表面75与其它四个输入表面71、72、73、74完全不交叠。

图9b显示了根据本文所描述的技术的实施方式,如何将次级表面70划分成多条线76,为清楚起见,将其中之一77分离地示出。(而且为清楚起见,这些线皆具有几个像素的厚度,而至少在本文所描述的技术的实施方式中,每条线可能仅有一个像素厚。)如分离线77所示,每条线76因此由输入表面的段78、79组成,使得可以由各段78、79的长度和要在相应段中显示的输入表面、以及空白的部分80(即,不被输入表面覆盖(并因此透明)来限定每个线76。

下面,参照图1至11,对根据本文所描述的技术的实施方式的、图2的数据处理系统21的操作进行描述。图10a、图10b以及图10c示出了例示根据本文所描述的技术的实施方式的系统的操作的流程图。

为了生成输出帧(步骤201,图10a),举例来说,如图1所示(显示帧10a),首先,要形成显示帧10的多个输入表面1、2、3、4被数据处理系统21的gpu24渲染,并存储在主存储器28中的相应帧缓冲区中。表面4不交叠任何其它表面,但表面1、2以及3皆彼此交叠并且α-混合,即,在画面空间中位于表面2的前方的表面1和3是半透明的。输入表面1、2、3、4的、由gpu24在渲染它们时生成的属性(例如,它们的大小、位置、深度排序(在画面空间中从前至后)以及半透明度(α值))也与输入表面相关联地存储。

合成显示控制器25的驱动器140(即,例如,在cpu23上执行)使用输入表面1、2、3、4的属性信息,并创建输入表面1、2、3、4的“层列表”(步骤202,图10a)。从层列表中的第一输入表面开始(步骤203,图10a),针对该输入表面的α值被用于确定该输入表面何时完全透明,即,当α等于0时(步骤204,图10a)。例如,这是直接确定何时针对整个输入表面来设置输入表面的α值。在更复杂的情况下,例如,当每像素存储该α值时,若希望的话,(否则)可能跳过该步骤。当该输入表面完全透明时,将其从层列表中丢弃(步骤205,图10a),否则将它保留在层列表中。

接着,驱动器140检查是否考虑了层列表中的所有输入表面(步骤206,图10a),而如果不是这样,则处理层列表中的下一个输入表面(步骤207,图10a),并且其α值用于确定该输入表面何时完全透明(步骤203,图10a)。处理继续,直到驱动器140考虑了层列表中的所有输入表面为止。(从图1可以看出,输入表面1、2、3、4都不是完全透明的,所以在这个阶段,将它们全部保留在层列表中。)

在这个阶段,驱动器140现在具有:不包括任何完全透明的输入表面的更新层列表。从更新层列表中的第一输入表面开始(步骤208,图10a),该输入表面的大小和位置,连同针对更新层列表中的其它输入表面的大小、位置以及α值,被驱动器140用于确定第一输入表面何时被完全不透明的输入表面完全覆盖(步骤209,图10a)。当该输入表面被完全遮盖时,将其从层列表中丢弃(步骤210,图10a),否则将它保留在层列表中。

接着,驱动器140检查是否考虑了层列表中的所有输入表面(步骤211,图10a),而如果不是这样,则处理层列表中的下一个输入表面(步骤212,图10a),以确定其是否被其它不透明的输入表面完全覆盖(步骤209,图10a)。处理继续,直到驱动器140考虑了更新层列表中的所有输入表面为止。(从图1可以看出,输入表面1、2、3、4都没有被完全遮盖,所以在这个阶段,将它们全部保留在层列表中。)

在这个阶段,驱动器140现在具有更新的层列表,该更新的层列表不包括任何完全透明的输入表面,或被其它不透明输入表面完全遮盖的输入表面。为了执行下一步,首先将输入表面根据它们在画面空间中的深度加以重新排序,即,从最前面开始并且按深度增加(步骤213,图10b)。接着,从更新并重新排序的层列表中的第一输入表面开始(步骤214,图10b),针对更新层列表中的该输入表面的α值被驱动器140用于确定该输入表面(即,最前面)何时是半透明的(步骤215,图10b),即,具有在0与1之间但不包括0与1的α值。当输入表面是半透明时,利用最前面的输入表面的大小和位置,连同更新层列表中的其它输入表面的大小和位置,将更新层列表中的、其至少部分交叠的任何其它输入表面从层列表中丢弃(步骤216,图10b),否则将这些输入层保留在层列表中。

接着,驱动器140检查是否考虑了层列表中的所有输入表面(步骤217,图10b),而如果不是这样,则处理层列表中的下一个输入表面(按照重排序层列表中的深度)(步骤218,图10b),以确定其是否是半透明的(步骤215,图10b),并接着确定其是否与更新层列表中的任何其它输入表面交叠(步骤216,图10b)。处理继续,直到驱动器140考虑了更新层列表中的所有输入表面为止。(从图1可以看出,输入表面1是半透明的,并且交叠输入表面2和3并处于输入表面2和3的前方。从层列表中移除表面2和3,因此更新层列表包含表面1和4。)

在这个阶段,更新层列表现在包含输入表面,即,输入表面1和4,其可能适于组合成次级表面。

一旦确定了可能适于组合成次级表面的输入表面的列表,(即,输入表面1和4),正在cpu上执行的、用于合成显示控制器25的驱动器140就接着确定是否和如何将层列表中的输入表面组合成次级表面。

下面,参照图10c和图11,对根据这些输入表面来生成并合成次级表面进行描述。

为了生成要用作图1所示的显示帧10的一部分的次级表面,用于合成显示控制器25的驱动器140确定更新层列表中的输入表面1、4哪些对次级表面有贡献和如何贡献,即,确定输入表面1、4在次级表面的平面中以及其内的深度次序方面两者相对于彼此的定位。这通过将次级表面分割成横跨显示帧10水平行进的分离线来完成。

对于次级表面的每一条线来说,从次级表面中的第一垂直线开始(步骤219,图10c),用于合成显示控制器25的驱动器140确定输入表面1、4中的哪个要用于形成针对沿着该线的所有点的次级表面,以及是否存在没有输入表面要用于形成次级表面的任何点,例如,次级表面是空白且透明的。

从该线中的第一水平像素开始(步骤220,图10c),在更新层列表中剩余的输入层1、4中,针对该像素确定最前面的输入表面(在画面空间中)(步骤221,图10c)。将针对该像素的输入表面与针对先前像素的输入表面进行比较,以查看其是否不同(步骤222,图10c)。如果这些像素具有相同的输入表面,则驱动器确定是否已经达到水平线的末端(步骤224,图10c)。如果没有,则水平坐标递增(步骤225,图10c),并且考虑下一像素关于其最前面的输入表面(即,重复步骤221,图10c)。

如果相邻像素具有不同的输入表面,即,已经达到一段的结尾,则包含针对先前考虑段的条目55的数据条目53(指示该段的长度57和要针对该段显示的输入表面56,或者该段是空白的(例如,利用空代码)),被驱动器写出至适当的存储部(步骤223,图10c)。

参照图1,可以看出,在第一条垂直线中,输入表面1是针对整个水平线的最前面的输入表面,并由此被用于形成次级表面。

一旦达到水平线的末端,驱动器就确定是否已经达到垂直线的末端,即,考虑了所有的水平线(步骤226,图10c)。如果没有,则垂直坐标递增(步骤227,图10c),并且考虑下一水平线(即,回到步骤220,图10c)。

返回参照图1,可以看出,针对第一组水平线,输入表面1是最前面的输入表面,并由此用于形成次级表面。一旦达到了输入表面1的垂直范围,就可以看出,针对下一组水平线,在针对次级表面的更新层列表中不存在输入表面,即,对于被半透明输入表面1交叠来说,将输入表面2和3丢弃。最后,在显示帧10的底部,输入表面4是最前面的输入表面,并由此用于形成次级表面。

一旦考虑了所有的垂直线,该数据结构就完全了(步骤228,图10c)。图1中的次级表面由此根据输入表面1和4(连同中部没有使用输入表面的区域)形成,并且写出必要的信息,以形成该数据结构。

由于被确定为形成次级表面的输入表面1、4中的每一个都自始至终横跨显示帧10水平延伸,即,它们用于形成针对沿着横跨次级表面的每条线的多个连续点的次级表面,每条线都由针对使用同一输入表面1或4来形成次级表面的单个段形成。

用于合成显示控制器25的驱动器140,根据表面属性信息(即,由gpu24提供给驱动器140的、如图1所示的输入表面的大小、位置以及排序)来确定针对次级表面的每条线的段信息。接着,由驱动器140将针对每条线的段信息写出至存储器,从该存储器中,其可以被合成显示控制器25的硬件模块32读取并按图6所示格式存储在线段缓冲区46中,即,针对每条线,分离的数据条目53包含针对每一段的条目55,其指示该段的长度57以及要针对该段显示的输入表面56,或者该段是否是空白的(例如,使用空代码)。

连同由驱动器写出针对每条线的“线段”数据条目53,针对次级表面的“头部”数据条目50(如图5所示)也被写出并存储。为了确定要写出至该数据条目50的信息,合成数据控制器25的驱动器必须确定一条线的布局是否与前一条线的布局相同,即,该段信息是否相同,如果是,则重复布局多少次。这导致针对次级表面的数据条目50能够被作为一系列重复计数器54和线指针52而写入至针对每条线的数据条目53,使得线指针52可以跟随正确数量的重复次数。由此,在该分析之后,只有彼此不同的线段作为“线段”数据条目53的一部分被写出。

在图1所示的示例显示帧10中,可以看出,针对多条水平线重复输入表面1,接着,针对大量水平线重复没有输入表面的区域,然后针对较少数量的水平线重复输入表面4。

一旦生成并存储了针对次级表面的数据结构,即,针对输入表面1和4的数据结构58、63,针对次级表面的数据条目50以及针对每条线的数据条目53,就可以利用该次级表面合成输出表面。下面,参照图11,对其进行描述,该图示出了例示根据本文所描述的技术的实施方式的显示控制器的操作的流程图。

首先,启动绘制新的输出表面(帧)(步骤101,图11)。

为了在合成输出表面时确定要用于次级表面的像素数据,用于次级表面的“头部”数据条目50被提取到头部缓冲区44中(步骤102,图11)。在“头部”数据条目50中,跟随针对第一条线(线0)的线指针52(步骤103,图11),以检索针对第一条线的数据条目53,包含针对要沿着该条线显示的每一段55的条目55。该数据条目53被提取到线段缓冲区46中(步骤104,图11)。

从第一条线(线0)的第一段(段0)开始,查询表面高速缓存45有关指示要针对该段显示的输入表面存储在哪里的数据(即,具有表面id56的输入表面,该表面id56在数据条目55的位0至6中指定,该数据条目55针对用于第一条线的数据条目53的第一段)是否存在于高速缓存45中(步骤105,图11)。如果指示输入表面存储在哪里的数据不存在(高速缓存未命中),则将指示存储输入表面数据的地方的所需数据提取到表面高速缓存45中(步骤106,图11)。

当指示要针对该段显示的输入表面存储在哪里的所需数据被存储在表面高速缓存45中时,计算要针对该段提取的输入表面中的像素数据的地址和长度(步骤107,图11),即,利用线位置、段位置以及段长度,并且从该地址提取像素数据(步骤108,图11)。

另选的是,当该段为空白的时,读取空代码,而不需要获取要针对输入表面显示的数据,即,合成显示控制器25获知将次级表面的该部分设置为透明或默认颜色。

一旦已经提取了针对用于所讨论次级表面的区域(段)的输入表面的像素数据,接着,可以将该数据读入硬件模块32、33的输入fifo38、39,用于所讨论的次级表面,并从那里提供给合成显示控制器25的合成块40,以与其它表面合成,如来自硬件模块33的另次级表面和来自硬件模块34的另一输入表面,从而提供针对所讨论的像素位置的总体合成输出表面。如本领域所已知的,该合成处理可以包括混合或以其它方式组合次级表面和/或输入表面。接着,将该合成输出表面像素提供给显示器以供显示。

针对次级表面中的所有线的所有段重复该处理,直到合成了针对次级表面的所有像素数据为止。

详细地说,这通过确定是否已经处理了所讨论的线中的所有段来完成(步骤109,图11),而如果没有,则处理下一段(步骤110,图11),即,通过重复图11的步骤105–108。

一旦已经处理了该线中的所有段,就确定是否已经处理了次级表面中的所有线(步骤111,图11),而如果没有,则确定该线是否是前一条线的重复(步骤112,图11),即,来自头部数据条目50中的重复计数器54。当该线是重复的时,通过从该线中的第一段开始(步骤113,图11),重复针对该线的步骤(步骤105–111,图11)。应当注意,在重复该线时,所需输入表面数据通常已经存在于表面高速缓存45中,因此可能不需要步骤106。同样地,所需线数据结构53通常已经存在于线段缓冲区46中,并由此可能不需要重新提取。

重复这些步骤达重复计数器54所指定的多少次,即,直到步骤112确定该线未被重复为止。针对新线(步骤114,图11),需要将新的线数据结构53提取到线段缓冲区46中(步骤104,图11),并接着可以根据需要针对该新线中的段重复步骤105–110。此外,确定该线是否被重复(步骤112,图11),直到确定已经处理了次级表面中的所有线为止(步骤111,图11)。在这点上,对次级表面的处理是完全的(步骤115,图11)。

接着,通过显示控制器25将该次级表面与其它输入表面组合。在图1所示的显示帧10中,由输入表面1和4形成的次级表面与输入表面2和3进行α混合,即,该次级表面的顶部部分被输入表面1覆盖,并且交叠的输入表面2和3本身彼此进行了α混合,以便形成显示帧10,显示帧10接着经由显示接口29发送至显示器19。

然后,根据需要,针对下一个输出帧重复整个处理。(所有缓冲区和高速缓存对于每一个帧来说都无效。)

下面,参考已经被选择成适于组合成图9a所示的次级表面70的该组输入表面71、72、73、74、75(即,根据参照图10a和10b描述的处理),尤其是参照图9a、9b、10c以及11,对生成次级表面的操作的另一示例进行描述。

为了生成图9a所示的次级表面70,用于合成显示控制器25的驱动器140确定输入表面71、72、73、74、75哪些对次级表面70有贡献和如何贡献,即,确定输入表面71、72、73、74、75在次级表面70的平面中以及其内的深度次序方面两者,相对于彼此的定位。这通过将次级表面70分成分离的线76来完成,如图9b所示,并且将参照图10c进行描述。

针对次级表面70的每一条线76,从次级表面70中的第一垂直线开始(步骤219,图10c),用于合成显示控制器25的驱动器确定输入表面71、72、73、74、75中的哪个要用于形成针对沿着该线的所有点的次级表面,以及是否存在没有输入表面要用于形成次级表面的任何点,例如,次级表面是空白且透明的。

从该线中的第一水平像素开始(步骤220,图10c),在更新层列表中剩余的输入层71、72、73、74、75中,针对该像素确定最前面的输入表面(在画面空间中)(步骤221,图10c)。将针对该像素的输入表面与针对先前像素的输入表面进行比较,以查看它们是否不同(步骤222,图10c)。如果这些像素具有相同的输入表面,则驱动器确定何时达到水平线的末端(步骤224,图10c)。如果没有,则水平坐标递增(步骤225,图10c),并且关于下一像素最前面的输入表面来考虑该下一像素(即,重复步骤221,图10c)。

当相邻像素具有不同的输入表面时(即,已经达到一段的结尾),包含针对先前考虑段的条目55的数据条目53(指示该段的长度57和要针对该段显示的输入表面56,或者该段是空白的(例如,利用空代码)),被驱动器写出至确定存储部(步骤223,图10c)。

一旦达到水平线的末端,驱动器就确定何时达到垂直线的末端,即,考虑了所有的水平线(步骤226,图10c)。如果没有,则垂直坐标递增(步骤227,图10c),并且考虑下一水平线(即,回到步骤220,图10c)。一旦考虑了所有的垂直线,该数据结构就完全了(步骤228,图10c)。

通常来说,由于输入表面71、72、73、74、75将用于形成针对沿着横跨次级表面70的线76的多个连续点的次级表面,因而,该线76被分成段78、79(对于其来说,将同一输入表面71、72、73、74、75用于形成次级表面),和空白的段80。以线77之一为例(参见图9b),可以看出,可见次级表面70包括空白段80,跟着是其中一个输入表面71用于形成次级表面的段78,之后是另一空白段80,接着是其中另一个输入表面74用于形成次级表面的段79,并由空白段80完成。

用于合成显示控制器25的驱动器,根据表面属性信息(即,由gpu24提供给驱动器的、如图7b所示的输入表面的大小、位置以及排序)来确定针对次级表面70的每条线76的段信息。接着,由驱动器将针对每条线76的段信息写出至存储器,从该存储器中,该段信息可以被合成显示控制器25的硬件模块32读取并按图6所示格式存储在线段缓冲区46中,即,针对每条线,分离的数据条目53包含针对每一段的条目55,该条目55指示该段的长度57以及要针对该段显示的输入表面56,或者该段是否是空白的(例如,使用空代码)。

连同由驱动器写出的针对每条线76的“线段”数据条目53,针对次级表面70的“头部”数据条目50(如图5所示)也被写出并存储。为了确定要写出至该数据条目50的信息,合成数据控制器25的驱动器必须确定一条线的布局是否与前一条线的布局相同,即,该段信息是否相同,如果是,则重复布局多少次。这导致针对次级表面70的数据条目50能够被作为一系列重复计数器54和线指针52写入至针对每条线76的数据条目53,使得线指针52可以被跟随正确数量的重复次数。

在图9a所示的示例次级表面70中,可以看出,第四和第五条线76,连同倒数两条线被重复。然而,通常来说,次级表面(合成线是单个采样点或像素宽,而非出于例示目的的图9a所示的非常粗的线)可能有许多重复的线。

一旦生成并存储了针对次级表面的数据结构,即,针对输入表面71、72、73、74、75的数据结构58、63,针对次级表面70的数据条目50以及针对每条线76的数据条目53,就可以利用该次级表面70来合成输出表面。下面,这将参照图11进行描述。

首先,启动绘制新的输出表面(帧)(步骤101,图11)。

为了在合成输出表面时确定要用于次级表面70的像素数据,用于次级表面70的“头部”数据条目50被提取到头部缓冲区44中(步骤102,图11)。在“头部”数据条目50中,跟随针对第一条线(线0)的线指针52(步骤103,图11),以检索针对第一条线的数据条目53,包含针对要沿着该条线76显示的每一段55的条目55。该数据条目53被提取到线段缓冲区46中(步骤104,图11)。

从第一条线(线0)的第一段(段0)开始,查询表面高速缓存45有关指示要针对该段78显示的输入表面存储在哪里的数据(即,具有表面id56的输入表面,该表面id56在数据条目55的位0至6中被指定,该数据条目55针对用于第一条线的数据条目53的第一段)是否存在于高速缓存45中(步骤105,图11)。如果指示输入表面存储在哪里的数据不存在(高速缓存未命中),则将指示存储输入表面数据的地方的所需数据提取到表面高速缓存45中(步骤106,图11)。

如果指示要针对所述段78显示的输入表面存储在哪里的所需数据被存储在表面高速缓存45中,则计算要针对该段提取的输入表面中的像素数据的地址和长度(步骤107,图11),即,利用线位置,段位置以及段长度,并且从该地址提取像素数据(步骤108,图11)。

另选的是,当该段为空白的使,读取空代码,而不需要获取要针对输入表面显示的数据,即,合成显示控制器25获知将次级表面的该部分设置为透明或默认颜色。

一旦已经提取了针对用于所讨论的次级表面的区域(段)的输入表面的像素数据,接着,可以将该数据读入硬件模块32、33的输入fifo38、39,用于所讨论的次级表面,并从那里提供给合成显示控制器25的合成块40,以与其它表面合成,如来自硬件模块33的另一次级表面和来自硬件模块34的另一输入表面,从而提供针对所讨论的像素位置的总体合成输出表面。如本领域所已知的,该合成处理可以包括混合或以其它方式组合次级表面和/或输入表面。接着,将该合成输出表面像素提供给显示器以供显示。

针对次级表面70中的所有线76的所有段78、79、80重复该处理,直到合成了针对次级表面的所有像素数据为止。

详细地说,这通过确定是否已经处理了所讨论的线中的所有段78来完成(步骤109,图11),而如果没有,则处理下一段(步骤110,图11),即,通过重复图11的步骤105–108。

一旦已经处理了该线中的所有段,就确定是否已经处理了次级表面70中的所有线(步骤111,图11),而如果没有,则确定该线是否是前一条线的重复(步骤112,图11),即,来自头部数据条目50中的重复计数器54。当该线是重复的时,则重复针对该线的步骤(步骤105–111,图11),通过从该线中的第一段开始(步骤113,图11)。应当注意,在重复该线时,所需输入表面数据通常已经存在于表面高速缓存45中,因此可能不需要步骤106。

重复这些步骤达重复计数器54所指定的多少次,即,直到步骤112确定该线未被重复为止。针对新线(步骤114,图11),需要将新的线数据结构53提取到线段缓冲区46中(步骤104,图11),并接着可以根据需要针对该新线中的段重复步骤105–110。此外,确定该线是否被重复(步骤112,图11),直到确定已经处理了次级表面70中的所有线76为止(步骤111,图11)。在这点上,对次级表面的处理是完全的(步骤115,图11)。

然后通过显示控制器25,将该次级表面与要形成显示帧但未被选择以形成次级表面的任何其它输入表面组合。接着,将该显示帧经由显示接口29发送至显示器19。

然后,根据需要,针对下一个输出帧重复整个处理。(所有缓冲区和高速缓存对于每一个帧来说都无效。)

在上述实施方式中,将描述次级表面内的输入表面的布局的特定数据结构提供给合成处理。

在另一实施方式中,不是提供详细描述次级表面内的输入表面的布局的这种数据结构,而相反,将简单地指示对次级表面有贡献的输入表面和输入表面的数据存储在哪里的数据提供给合成处理。这种布置具体在例如次级表面由完全未-交叠的输入表面形成的情况下使用。

在这个实施方式中,合成显示控制器25的基本配置如图3所示。然而,可以处理次级表面的每个硬件模块32、33具有与上述实施方式所描述的略微不同的配置。

图12示意性地示出了可以根据本文所描述的技术的该实施方式来操作的合成显示控制器25的示例性硬件模块32或33。

如图12所示,在这个实施方式中,硬件模块32包括内部总线接口242,其与显示控制器的总线接口30(如图3所示)进行通信,以读入用于对次级表面有贡献的输入表面的数据。

次级表面处理硬件模块32还包括多个输入表面(子层)寄存器244、245以及246。这些寄存器被用于存储指示要形成次级表面的输入表面被存储在哪里的数据,采用针对存储器中的输入表面数据的指针的形式和其它指示,如存储器中的输入表面的大小。

内部总线接口242也与硬件模块32的判优器243进行数据通信,其确定如何将输入表面形成为次级表面。

判优器243确定哪个输入表面要用于次级表面的任何给定区域,提取输入表面像素数据,并将对应像素数据提供给输入fifo247,以供输出至显示控制器25的合成块40(如图3所示)。

硬件模块32还包括状态机248,状态机248被配置成控制硬件模块的操作。

下面,参照图1、8以及12至14,对本文所描述的技术的这个实施方式的操作进行描述。

此外,为了生成合成输出帧(步骤301,图13a),合成显示控制器25的驱动器首先使用要被合成的输入表面的属性信息,来创建输入表面的“层列表”(步骤302,图13a)。

从层列表中的第一输入表面开始(步骤303,图13a),针对该输入表面的α值用于确定该输入表面何时完全透明,即,当α等于0时(步骤304,图13a)。例如,这是直接确定何时针对整个输入表面来设置一输入表面的α值。由此,在更复杂的情况下,例如,当每像素存储该α值时,该步骤可能被跳过。当该输入表面完全透明时,将其从层列表中丢弃(步骤305,图13a),否则将它保留在层列表中。

接着,驱动器140检查是否考虑了层列表中的所有输入表面(步骤306,图13a),而如果不是这样,则处理层列表中的下一个输入表面(步骤307,图13a),并且其α值用于确定该输入表面何时完全透明(步骤303,图13a)。处理继续,直到驱动器考虑了层列表中的所有输入表面为止。

在这个阶段,驱动器140现在具有不包括任何完全透明的输入表面的更新层列表。从更新层列表中的第一输入表面开始(步骤308,图13a),该输入表面的大小和位置,连同针对更新层列表中的其它输入表面的大小、位置以及α值被驱动器140用于确定第一输入表面何时被完全不透明的输入表面完全覆盖(步骤309,图13a)。如果该输入表面被完全遮盖,则将其从层列表中丢弃(步骤310,图13a),否则将它保留在层列表中。

接着,驱动器140检查是否考虑了层列表中的所有输入表面(步骤311,图13a),而如果不是这样,则处理层列表中的下一个输入表面(步骤312,图13a),以确定其是否被其它不透明的输入表面完全覆盖(步骤309,图13a)。处理继续,直到驱动器考虑了更新层列表中的所有输入表面为止。

在这个阶段,驱动器140现在具有其他更新层列表,其不包括任何完全透明的输入表面或被其它不透明输入表面完全遮盖的输入表面。从更新层列表中的第一输入表面开始(步骤313,图13b),该输入表面的大小和位置,连同针对更新层列表中的其它输入表面的大小、位置,被驱动器140用于确定第一输入表面何时被任何其它输入表面覆盖(步骤314,图13b)。当考虑的输入表面不与任何其它输入表面交叠时,则将其添加至用于形成次级表面(“智能层”)的输入表面列表中,并从被处理以供在次级表面中考虑的输入表面的“层列表”中移除(步骤315,图13b)。

接着,驱动器140检查是否考虑了层列表中的所有输入表面(步骤316,图13b),而如果不是这样,则处理层列表中的下一个输入表面(步骤317,图13b),以确定其是否交叠任何其它输入表面(步骤314,图13b)。处理继续,直到驱动器140考虑了更新层列表中的所有输入表面为止,在其结束时,“智能层”次级表面列表已经开始由不与任何其它输入表面交叠的所有输入表面形成。

该处理中的下一步是,将由一应用或操作系统指定的、要被包括在次级表面中的任何输入层添加至“智能层”列表,并从“层列表”中移除(步骤318,图13b)。

下面,考虑输入表面的更新层列表,从更新层列表中的最前面输入表面开始(步骤319,图13b),该输入表面的大小、位置以及深度次序,连同针对先前已经添加至“智能层”次级表面列表中的其它输入表面的大小、位置以及深度次序,被驱动器140用于确定最前面输入表面何时被“智能层”列表中的任何其它输入表面覆盖(步骤320,图13b)。当所考虑的输入表面未被已经处于“智能层”次级表面列表中的任何其它输入表面覆盖时,则将其添加至用于形成次级表面(“智能层”)的输入表面列表(步骤321,图13b)。

接着,驱动器检查是否考虑了更新层列表中的所有输入表面(步骤322,图13b),而如果不是这样,则处理层列表中的下一个输入表面(按照深度)(步骤323,图13b),以确定其是否被更新“智能层”次级表面列表中的任何其它输入表面覆盖(步骤320,图13b)。处理继续,直到驱动器考虑了更新层列表中的所有输入表面为止,在其结束时,已经由不与任何其它输入表面交叠的所有输入表面形成“智能层”次级表面列表(步骤324,图13b)。

(可以看出,在图1所示的输入表面的情况下,该处理将导致包含输入表面1和4的“智能层”次级表面列表,因为输入表面4不与而任何其它输入表面1、2、3交叠,并且输入表面1是最前面的输入表面,且不被输入表面4覆盖。输入表面2和3被输入表面4覆盖,因此这些输入表面2、3不被添加至“智能层”列表。)(应当清楚,如果初始层列表上的输入表面1、2、3、4的排序不同,则输入表面2和4,或者3和4可以另选地被选择为被包括在更新层列表中。)

在这个阶段,“智能层”列表现在包含适于组合成次级表面的输入表面。下面,尤其参照图1、图12以及图14,对利用由图1中的输入表面1和4形成的次级表面来合成输出表面的处理进行描述。

首先,启动合成新的输出帧(或其窗口)(步骤401,图14),即,换句话说,该输出表面要被合成。使用由驱动器制备的针对次级表面的输入表面1、4的列表,该输入表面根据其左边缘的水平坐标来排序,该排序列表中的第一输入表面具有最小水平坐标(步骤402,图14)。因此,在图1中,输入表面1、4被排序为1、4(即使输入表面1和4具有相同的最小水平坐标,也首先任意选择表面1)。

指示用于所确定输入表面的数据被存储在哪里的数据接着按其左边缘的确定次序,被加载到硬件模块32的寄存器244、245、246中(因此针对最-左表面1的数据被加载到第一个寄存器244中,等等)。

为了形成次级表面,判优器243考虑帧中的第一垂直坐标(步骤403,图14),并且考虑所排序的“智能层”列表中的第一输入表面(步骤404,图14)。如果该输入表面在第一垂直坐标的水平线上具有任何像素(步骤405,图14)(可以看出,图1中的输入表面1具有针对从第一垂直坐标起行进的整个水平线的像素),则利用相应寄存器244中的数据来提取针对该输入表面的像素数据244(步骤406,图14)。

接着,判优器243确定所排序的“智能层”列表中的最后一个输入表面是否已被处理(步骤407,图14)。如果没有,则考虑所排序的“智能层”列表中的下一个输入表面(步骤408,图14)。接着,判优器243确定下一个输入表面是否水平地具有沿该水平线的任何像素(步骤405,图14),直到“智能层”次级表面列表中的所有输入层已经被处理为止(可以看出,仅图1中的输入表面1具有沿着从第一垂直坐标起行进的水平线的任何像素)。

一旦“智能层”次级表面列表中的所有输入表面被考虑用于第一垂直坐标,就确定是否已经达到垂直线的末端,即,帧的底部(步骤409,图14)。如果没有,则垂直坐标增加(步骤410,图14),以便考虑横跨该帧的下一条水平线。

重复其,直到在该帧完成时,考虑了所有的水平线为止(直到达到垂直线的终点为止)(步骤411,图14)。

按这种方式,应当看出,将达到图1中的输入表面1和4(输入表面4在多条中间水平线的间隙之后到达),并且针对它们的像素数据由判优器243提取并提供给合成块40(其将在恰当时候,将该次级表面与其它次级表面和/或剩余输入表面组合,即,利用α混合,将由图1中的输入表面1和4形成的次级表面与输入表面2和3组合)。

下面,参照图8,对利用次级表面来合成输出表面的操作的另一示例进行描述,图8示出了已经通过上述标准选择成适于组合成次级表面65的另一示例性组的输入表面66、67、68(即,根据参照图13a和图13b描述的处理)。下面,尤其参照图8、12以及14,对利用包括这些输入表面66、67、68的次级表面来合成输出表面进行描述。

首先,启动合成新的输出帧(或其窗口)(步骤401,图14),即,换句话说,该输出表面要被合成。利用由驱动器制备的针对次级表面的输入表面的列表,该输入表面根据其左边缘的水平坐标来排序,该排序列表中的第一输入表面具有最小水平坐标(步骤402,图14)。因此,在图8中,输入表面66、67、68被排序为68、66、67。

指示用于所确定输入表面的数据被存储在哪里的数据接着按其左边缘的确定次序而被加载到硬件模块32的寄存器244、245、246中(因此,针对最-左表面68的数据被加载到第一个寄存器244中,等等)。

为了形成次级表面65,由判优器243考虑帧中的第一垂直坐标(步骤403,图14),并且考虑排序的“智能层”列表中的第一输入表面(步骤404,图14)。如果该输入表面在第一垂直坐标的水平线上具有任何像素(步骤405,图14)(可以看出,图8中的输入表面68没有沿从第一垂直坐标起行进的水平线的任何像素),则利用相应寄存器244中的数据来提取针对该输入表面的像素数据244(步骤406,图14)。

接着,判优器243确定排序的“智能层”列表中的最后一个输入表面是否已被处理(步骤407,图14)。如果没有,则考虑排序的“智能层”列表中的下一个输入表面(步骤408,图14)。接着,判优器243确定下一个输入表面是否水平地具有沿该水平线的任何像素(步骤405,图14),直到“智能层”次级表面列表中的所有输入层已经被处理为止(可以看出,图8中的其它输入表面66、67都没有沿着从第一垂直坐标起行进的水平线的任何像素)。

一旦“智能层”次级表面列表中的所有输入表面被考虑用于第一垂直坐标,就确定是否已经达到垂直线的末端,即,帧的底部(步骤409,图14)。如果没有,则垂直坐标增加(步骤410,图14),以便考虑横跨该帧的下一条水平线。

重复其,直到在该帧完成时,考虑了所有的水平线为止(直到达到垂直线的终点为止)(步骤411,图14)。

按这种方式,应当看出,最终将达到图8中的输入表面67,接着是66,然后是68,并且针对它们的像素数据由判优器243提取并提供给合成块40(其将在恰当时候,将该次级表面65与其它次级表面和/或剩余输入表面组合(例如,利用α混合))。

图15示意性地示出了针对图2所示的数据处理系统的、也可以按本实施方式的方式操作的另一示例性数据处理系统121。

此外,图15所示的数据处理系统121在芯片上系统122上包括经由互连部127通信的cpu123和gpu124,cpu123和gpu124都可以经由存储器控制器126使用芯片-外存储器128。然而,在这种情况下,数据处理系统121包括合成引擎130和分离的显示控制器125,而非组合的合成显示控制器。如在图2的数据处理系统21中,针对图15的数据处理系统121,显示控制器125具有用于与显示器131通信的显示接口129。用于合成引擎的驱动器141在cpu123上运行。

图15所示的实施方式的操作与上面参照图2-14针对图2的实施方式描述的操作非常相似。唯一的差别是,分离的合成引擎130处理和合成次级和输入表面,然后将所合成的输出表面写入至存储器128中的帧缓冲区,从那里,显示控制器125提取所合成的输出表面以供显示。

针对上述处理的变化和修改是可能的。例如,不需要检测和去除完全透明或被完全覆盖的层(输入表面),和/或可以在其它地方执行那些处理。而且,可以使用用于确定对次级表面有贡献的输入表面的步骤的不同集合或次序。

该输入、次级和/或输出表面可以被压缩、旋转和/或缩放等。

从上面可以看出,至少在其实施方式中,本文所描述的技术包括如下步骤,其中,多个输入表面可以被合成成输出表面,同时需要更少的硬件资源。还能够合成可能交叠和/或具有任何任意形状的输入表面。

在本文所描述的技术的实施方式中,这至少通过将要合成的一些或全部输入表面组合成中间次级表面,然后将其提供给合成处理/处理器来实现。这避免了需要合成处理/处理器必须彼此独立地处理那些输入表面。多个输入表面能够被组合成中间次级表面(例如以逐条线为基础确定的),使得合成处理不需要了解横跨整个次级表面的输入表面的总体布置。

次级表面可以由可以交叠的和具有任何形状和布局的大量输入表面形成。因此,本文所描述的技术的方法和系统可以适应任何任意数量的输入表面、任何形状的输入表面、以及交叠的输入表面等。

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

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