用于纹理解压缩的解码器单元的制作方法

文档序号:15925248发布日期:2018-11-14 01:04阅读:253来源:国知局

本发明涉及一种解码器单元,该解码器单元用于解码跨一个或更多个编码纹理数据块编码的多个纹素。

背景技术

纹理在图形处理领域内被大量使用。可以使用纹理来表示表面特性、照明(例如,在被成像的场景的环境内)或者将表面细节应用于被渲染的对象。纹理可能需要相对大量的内存存储器,并且纹理访问可能贡献图形设备的内存带宽的很大比例。如此,通常需要压缩纹理数据。

存在各种纹理压缩方案或格式。一类纹理压缩方案被称为基于块的方案。在基于块的方案中,经压缩的纹理数据被编码成一系列给定大小(例如,64位或128位)的数据块。每个数据块对纹理的特定纹素块(例如,2×2或4×4纹素块)的纹理数据进行编码。基于块的纹理压缩方案的示例包括例如powervr纹理压缩(pvrtc)、pvrtc2、s3纹理压缩(s3tc,也称为bc1、bc2和bc3);自适应可缩放纹理压缩(astc);爱立信纹理压缩(etc);etc2;eac;3dc(也称为bc4和bc5);bc6和bc7。

通常期望图形系统同时或并行地解码多个纹素,以便在渲染场景时提高系统的性能。进一步动机来自这样一个事实,即,在许多图形应用中,要解码的纹素可以一起分组到多个纹素的多个组。例如,在许多图形流水线中,通过对映射到被处理的特定像素的多个相邻纹素进行过滤来获得将被应用于该像素的纹理颜色。因此,在处理像素时,可能需要解码多个纹素以在过滤操作中使用,以便获得用于该像素的最终纹理颜色。某些图形系统另外可能同时处理多个像素,每个像素可能需要对多个纹素进行解码作为过滤操作的一部分。

处理对解码多个纹素的这种需求(从性能角度来看)的一种有效方式是简单地具有必需数量的解码器,每个解码器并行地操作,使得可以被并行解码的纹素的总数匹配或超过在给定纹素请求中的纹素数量。然而,该方法存在高硬件要求的缺点,这可能表现为大电路面积。例如,简单地使“n”个解码器并行操作以便在期望性能水平下处理纹理请求导致相称地n倍大的解码器电路。



技术实现要素:

根据本发明,提供了一种解码器单元,该解码器单元被配置为根据纹素请求对多个纹素进行解码,所述多个纹素跨均对纹素块进行编码的一个或更多个编码纹理数据块被编码,解码器单元包括:

第一组一个或更多个解码器,第一组解码器中的每个被配置为从接收到的单个编码纹理数据块解码n个纹素;

第二组一个或更多个解码器,第二组解码器中的每个被配置为从接收到的单个编码纹理数据块解码p个纹素,其中,p<n;以及

控制逻辑,所述控制逻辑被配置为根据纹素请求将编码纹理数据块分配给解码器。

第二组一个或多个解码器中的每个可以被配置为从接收到的编码纹理数据块解码单个纹素。

第二组一个或更多个解码器中的每个可以被配置为从接收到的编码纹理数据块解码两个纹素。

第一组解码器中的每个可以被配置为从接收到的单个编码纹理数据块解码四个纹素。

第一组中的解码器的数量与第二组中的解码器的数量的比率可以是4:2。

第一组中的解码器的数量与第二组中的解码器的数量的比率可以是4:1。

控制逻辑可以被配置为响应于指示跨多于一个编码纹理数据块编码的纹素的2×2子块要被解码的纹素请求,将至少一个编码纹理数据块分配给所述第二组中的两个解码器,所述多于一个编码纹理数据块中的每个对所述2×2子块的至少一个纹素进行编码。

控制逻辑可以被配置为响应于指示2×2子块与两个相邻纹素块的边缘交叠的纹素请求,将对2×2子块的两个纹素进行编码的一个编码纹理数据块分配给第二组中的两个解码器。

控制逻辑可以被配置为响应于指示2×2块与四个相邻纹素块的拐角交叠的纹素请求,将对2×2子块的两个不同纹素进行编码的两个不同编码纹理数据块分配给第二组中的两个解码器。

控制逻辑可以被配置为将与分配给第二组中的解码器的块不同的、对2×2子块的至少一个其它纹素进行编码的编码数据块分配给第一组中的解码器。

可以根据自适应可缩放纹理压缩(astc)格式对每个编码纹理数据块进行编码。

第一组解码器中的每个可以包括:

参数解码单元,该参数解码单元被配置为对接收到的纹理数据块的配置数据进行解码;

颜色解码单元,该颜色解码单元被配置为根据所述配置数据对接收到的块的n个纹素的颜色端点数据进行解码;

权重解码单元,该权重解码单元被配置为根据所述配置数据对接收到的块的n个纹素中的每个的插值权重数据进行解码;以及

至少一个插值器单元,所述至少一个插值器单元被配置为使用接收到的块的n个纹素中的每个纹素的插值权重数据和来自颜色端点数据的一对颜色端点来计算该纹素的颜色值;

其中,参数解码单元、颜色解码单元和权重解码单元中的至少一个被配置为从接收到的块解码中间数据,该中间数据对于该块的纹素的解码是公用的,并且被配置为在从接收到的纹理数据块解码n个纹素中的至少两个纹素时使用该经解码的中间数据。

参数解码单元、颜色解码单元和权重解码单元中的至少一个可以被配置为使用相同数据作为n个纹素中的每个纹素的解码的一部分。

配置数据的第一部分对于n个纹素的解码可以是公用的,并且权重解码单元被配置为使用该配置数据的第一部分来解码n个纹素中的每个纹素的插值权重数据。

配置数据的第一部分可以包括以下中的至少一个:指定权重网格的尺寸的权重网格大小;以及指定由网格的权重占据的值的范围的权重范围。

配置数据的第二部分对于接收到的块的纹素的解码可以是公用的,并且颜色解码单元可以被配置为使用配置数据的该第二部分来解码n个纹素中的每个纹素的颜色端点数据。

配置数据的第二部分可以包括指定如何将一组颜色端点值转换成一对颜色端点的颜色端点模式数据。

参数解码单元可以被配置为:从接收到的纹理数据块解码中间配置数据,作为解码配置数据的一部分;并且使用该同一中间配置数据来解码n个纹素中的每个纹素的分区索引。

中间配置数据可以包括以下中的至少一个:分区模式索引;以及分区号。

颜色解码单元可以被配置为:从接收到的纹理数据块解码中间颜色数据,作为解码颜色端点数据的一部分,所述中间颜色数据对于该块的纹素的解码是公用的;并且使用该中间颜色数据来解码n个纹素中的每个纹素的颜色端点数据。

中间颜色数据可以包括块内用于表示颜色端点的数据的大小。

中间颜色数据还可以包括指定如何将一组颜色端点值转换为一对颜色端点的颜色端点模式数据。

颜色解码单元可以被配置为解码一组颜色值并且将那些值转换成多个纹素中的每个纹素的一对颜色端点,颜色解码单元被配置为使用n个纹素中的两个或更多个纹素的颜色端点中的至少一个。

权重解码单元可以被配置为:从接收到的纹理数据块解码中间权重数据,作为解码插值权重数据的一部分,所述中间权重数据对于该块的纹素是公用的;并且使用该数据来解码n个纹素中的每个纹素的插值权重数据。

中间数据可以包括块内用于表示插值权重数据的数据的大小。

由块表示的纹素可以被划分为np个分区,并且解码器可以包括np个插值器,每个插值器被配置为使用该纹素的插值权重数据和来自颜色端点数据的相应一对颜色端点,计算相应分区中的纹素的子集的颜色值。

可以根据以下纹理压缩格式中的一个来编码纹理数据块:s3tc;pvr-tc;pvr-tc2;astc;etc1;etc2;eac;3dc;以及bc1-bc5。

根据本公开的第二方面,提供了一种根据纹素请求对多个纹素进行解码的方法,纹素跨均对纹素块编码的一个或更多个编码纹理数据块被编码,所述方法包括:根据所述纹素请求将编码纹理数据块分配给第一组一个或更多个解码器和第二组一个或更多个解码器中的解码器,其中,所述第一组解码器中的每个被配置为从接收到的单个编码纹理数据块解码n个纹素,并且第二组解码器中的每个被配置为从接收到的单个编码纹理数据块解码p个纹素,其中,p<n。

可以存在被配置为执行上述方法的解码器单元。

解码器单元可以被具体实现在集成电路上的硬件中。

可以存在如本文所述的制造解码器单元的方法。

可以提供被配置为使得如本文所描述的方法被执行的计算机可读代码。

可以提供一种在上面编码有计算机可读代码的计算机可读存储介质。

可以提供集成电路定义数据集,当在集成电路制造系统中被处理时,集成电路定义数据集将集成电路制造系统配置为制造如本文所述的解码器单元。

可以提供一种非暂时性计算机可读存储介质,该非暂时性计算机可读存储介质上存储有集成电路的计算机可读描述,当在集成电路制造系统中被处理时,计算机可读描述使得集成电路制造系统制造如本文所述的解码器单元。

可以存在被配置为制造如本文所述的解码器单元的集成电路制造系统。

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

非暂时性计算机可读存储介质,该非暂时性计算机可读存储介质上存储有描述如本文所述的解码器单元的集成电路的计算机可读描述;

布局处理系统,该布局处理系统被配置为处理集成电路描述以便生成具体实现如本文所述的解码器单元的集成电路的电路布局描述;以及

集成电路生成系统,该集成电路生成系统被配置为根据电路布局描述来制造解码器单元。

附图说明

现在将参照附图通过示例的方式描述本发明。在附图中:

图1a示出了作为纹素请求的一部分的要被解码的纹素子块,该纹素子块完全落入由数据块编码的纹素块内。

图1b示出了作为纹素请求的一部分的要被解码的纹素子块,该纹素子块与两个相邻纹素块的边缘交叠。

图1c示出了作为纹素请求的一部分的要被解码的纹素子块,该纹素子块与四个相邻纹素块的拐角交叠。

图2示出了用于解码在纹素请求中指示的多个纹素的解码器单元的示例。

图3例示了如何跨由相应数据块编码的多个纹素块分配纹素请求中指示的纹素。

图4a示出了rg颜色空间中的一对颜色端点。

图4b示出了一个4×4块的每个纹素的纹素权重的示例。

图4c示出了位于rg颜色空间内的两个颜色端点对。

图4d示出了具有指示每个纹素的分区索引的分区掩码的4×4纹素块和指示每个纹素的权重的权重网格。

图5示出了用于图2所示的解码器单元的第一组和可能第二组解码器中的多输出astc解码器的示例。

图6示出了形成图5所示的解码器的一部分的参数解码单元的示例结构。

图7示出了构成图5所示的解码器的一部分的颜色解码单元的示例结构。

图8示出了形成图5所示的解码器的一部分的权重解码单元的示例结构。

图9示出了块中的纹素的坐标如何可以被重新缩放到权重网格的尺寸的图。

图10示出了可以实现解码器单元的计算机系统。

图11示出了集成电路制造系统的示例。

具体实施方式

本公开涉及一种解码器单元,该解码器单元被配置成对跨一个或更多个编码纹理数据块编码的多个纹素进行解码。每个编码纹理数据块都可以对纹理的纹素块进行编码。在纹理解码器被配置为对多个纹素进行解码的情况下,要被解码的纹素可以为一组纹素子块的形式。那些纹素子块中的每个都可以与其它纹素子块连续或不连续。一些纹素子块可能与其它纹素子块交叠。不同纹素子块可以由不同的编码纹理数据块进行编码,和/或一个或更多个纹素子块可以由两个或更多个纹理数据块部分地编码。也就是说,要由解码器解码的纹素子块可以被定位为使得它与两个(或四个)纹理数据块的边缘交叠,每个纹理数据块被编码为单独纹素块。在这种情况下,纹素子块可以由两个或更多(例如,四个)相应数据块编码。图1a至图1c例示了纹素子块与由纹理数据块编码的纹素块之间的可能交叠。

图1a示出了要被解码的纹素子块102完全落入在106处示意性地示出的单个编码纹理数据块中编码的纹素块104内。也就是说,图1a例示了要被解码的纹素子块在单个编码纹理数据块中被编码的情况。图1b示出了要被解码的纹素子块102与在不同纹理数据块106和110中编码的相邻纹素块104和108的边缘交叠的示例。也就是说,在图1b中,纹素子块在编码纹理数据块106中被部分编码并且由编码纹理数据块110部分编码。最后,图1c示出了纹素子块102与分别由不同纹理数据块106、110、116和118编码的相邻纹素块104、108、112和114的拐角交叠的示例。因此,在图1c所示的示例中,纹素子块由纹理数据块106、110、116和118中的每个部分编码。在这些示例中的每个中,由数据块编码的纹素块具有8×8纹素,并且子块具有2×2纹素的尺寸。选择这些值仅用于说明。

尽管在此将纹素子块示出为矩形子块,但将理解,纹素子块可以具有其它形状。例如,纹素子块可以是不规则形状。如果纹素子块是不规则形状,则子块可能与奇数个相邻纹素块交叠(例如,不规则形状纹素子块可以与三个相邻纹素块交叠)。此外,虽然在图1a-图1c中示出以及在本文描述的其它示例中示出的纹理被示出并描述为二维纹理,但是应该理解,本文描述的技术可应用于(例如,如由astc支持的)三维纹理。在3d纹理的情况下,纹理子块可能与多达八个相邻纹素块交叠。

解码器单元包括第一组一个或更多个解码器和第二组一个或更多个解码器。第一组的解码器被配置为从接收到的纹理数据块并行地解码与第二组的解码器不同数量的纹素。解码器还包括控制逻辑,该控制逻辑根据纹素请求将编码纹理数据块分配给第一组的解码器和第二组的解码器。通过具有从纹理数据块解码不同数量纹素的至少两组解码器,其中,至少一组的解码器能够并行地解码多个纹素,解码器单元可以从高性能水平受益,而无需硬件要求或电路尺寸的相称增加。这部分是因为与并行操作多个单输出解码器相比,多解码器能够以更高硬件效率并行地解码多个纹素。将关于下面描述的各种示例对此进行说明。

在下面的示例中,解码器单元包含两组解码器。这仅是为了说明的目的,并且将理解,在其它示例中,解码器单元可以包含多于两组解码器,其中,每组的解码器能够并行地解码不同数量纹素。

图2示出了解码器单元200。解码器单元200包括总体上用202表示的第一组解码器和总体上用204表示的第二组解码器。第一组解码器由q个解码器2061,2,...,q形成,并且第二组解码器由r个解码器2081,2,...,r形成。通常,第一组由一个或更多个解码器(即,q≥1)形成,并且第二组由一个或更多个解码器(即,r≥1)形成。该解码器还包括联接到第一组和第二组的解码器中的每个的控制逻辑210。

第一组解码器202中的每个被配置为从接收到的单个编码纹理数据块解码n个纹素,并且第二组解码器204中的每个被配置为从接收到的单个纹理数据块解码p个纹素,其中p<n。第二组的解码器中的每个解码器从数据块解码至少一个纹素,并且因此第一组的解码器中的每个都是多解码器;也就是说,第一组中的解码器中的每个可以被配置为从接收到的单个纹理数据块并行地解码多个纹素。

解码器单元200被配置为根据纹素请求来解码多个纹素。解码器单元能够同时或并行解码多达nt个纹素,其中,nt=q.n+r.p。要根据纹素请求解码的纹素的数量可以小于或等于能够由解码器单元200同时解码的纹素的数量。如果要根据纹素请求解码的纹素的数量大于值nt,那么形成该请求的纹素可能需要在多个轮次(pass)中被解码。在这种情况下,控制逻辑210可以执行多个分配轮次,其中,在每个分配轮次中,逻辑210将编码纹理数据块分配给多组解码器。

如果形成纹理请求的一部分的纹素数量小于值nt,则为了解码由纹素请求指示的多个纹素,解码器单元可能解码多个不想要的纹素(即,该请求未指定的纹素)。这可能导致解码器单元消耗不必要功率。控制逻辑210因此被配置为根据纹素请求将编码纹理数据块分配给第一组和第二组的解码器。控制逻辑可以将纹理数据块分配给解码器,以便最小化不是纹素请求的一部分的、被解码的纹素的数量。这可以减少不必要处理并因此潜在地节能。

跨一个或更多个编码纹理数据块对要被解码的多个纹素进行编码,其中,每个编码纹理数据块对用于纹理的纹素块进行编码。为了简明起见,编码纹理数据块(例如,如图1b中的106和110所示)在本文中可以被称为数据块,并且块因为涉及纹素的布置(例如,图1b中所示的块104和108)可以被称为纹素块。数据块可以具有固定大小(即,位数),这取决于用于对纹理数据进行编码的纹理压缩格式。由每个数据块编码的纹素块的大小也可以取决于纹理压缩格式。

纹素请求可以是来自图形系统(诸如,gpu)的纹理流水线单元的请求。该请求可以响应于图形系统处理用于要渲染的一个或更多个像素的像素数据而做出。一般来说,请求是一组纹素要被解码的指示。因此,该请求可以将多个纹素分组或者链接成一组,并且指示该组中的纹素要被解码。该请求可以是由解码器单元200接收的明确指令的形式。例如,该指令可以指定一组纹素要被解码(例如,通过指定该组中的每个纹素的坐标)。另选地,该请求可以为对一组纹素进行解码的隐式指令的形式。例如,该请求可以包含被处理的一个或更多个像素的指示。解码器单元200然后可以将一个或更多个像素中的每个映射到纹理的相应一个或更多个纹素,以便识别要被解码的纹素。如由该请求指示的将纹素分为一组可以由解码器单元200或解码器所在的图形系统的一些其它部分执行。也就是说,解码器单元可以接收指示一组纹素要被解码(隐式地或显式地)的请求。另选地,解码器单元200可以接收多个子请求,每个子请求指示单个纹素要被解码。然后,解码器单元200可以将那些子请求分组到指示一组纹素要被解码的单个请求。

例如,可以将多个纹素分组到一组,以便借助于由图形系统执行的过滤阶段来计算要应用于被处理的像素的纹素颜色进行解码。例如,图形单元可以执行纹素的双线性过滤,其中,从2×2纹素块的插值来计算要应用于单个像素的纹素颜色。因此,该请求可以是一组四个纹素要被解码的指示。某些图形单元可以另外同时处理多于一个像素。每个像素的处理可能需要多个纹素被解码。例如,如果图形单元同时处理四个像素,则那些像素中的每个可能需要将单独的四个纹素块解码以用于过滤操作,从而导致指示16个纹素要被解码的请求。当然,请求可能指示不同数量的纹素要被解码。在请求中要解码的纹素的数量可能随着不同像素被处理而变化。也就是说,请求中指示的纹素的数量可以在图形系统内的特定实现内变化,因为作为该系统的图形系统处理将渲染的图像的不同像素。另外,请求内指示的纹素的数量对于不同图形系统上的实现可能不同。例如,图形系统能够并行处理的像素越多,请求内指示的最大纹素数量可能越高。

解码器单元200被布置成使得第一组的解码器能够从接收到的单个数据块同时解码不同于第二组的解码器的纹素数量。更具体地说,与第二组的解码器相比,第一组的解码器能够从接收到的数据块并行地解码更多纹素。已经理解,解码器的组合(即,第一组和第二组中的解码器的数量)和解码器的配置(即,每组的解码器能够并行解码的纹素数量)可以被优化,以便以提供一种解码器,该解码器可从提高的硬件效率受益,而不遭受相称的性能下降。这与常规解码器布置形成对比,常规解码器布置通常包括一组解码器,每个解码器可以从数据块解码相同数量的纹素(例如,单纹素)。

为了说明这一点,现在将描述解码器单元200的更具体配置的示例。这些示例配置已经被确定为使用以下认识在硬件效率和性能之间提供潜在有利折衷,该认识为:公用纹素请求的纹素通常被分组为一个或更多个2×2纹素子块。例如,在解码16个纹素的请求中,那16个纹素可以被分组为4个2×2子块。2×2块是纹素请求的常用配置,因为它用于许多过滤操作(诸如,双线性过滤、三线性过滤和各向异性过滤)。

因为纹素请求通常可以包括对要被解码的2×2纹素子块的请求,所以已经认识到,解码器单元200的便利布置是针对第一组的每个解码器被配置为从接收到的单个编码纹理数据块并行解码四个纹素。如果由请求指示的特定纹素子块完全落入由数据块编码的纹素块内(例如,如图1a所示),则第一组的解码器能够同时解码该子块中的所有纹素。与并行操作四个单输出解码器相比,提供能够并行解码四个纹素的多解码器可以提供提高的硬件效率。这是由于多解码器可以比单解码器具有更高硬件效率。

如上参考图1b和图1c所述,由请求指示的纹素子块可能不总是完全位于在单个编码纹理数据块中编码的纹素块中。子块可以例如与两个相邻纹素块的边缘交叠(如图1b所示),或者可以与四个相邻或连续纹素块的拐角交叠(如图1c所示)。在这些情况下,即使该解码器是多输出解码器,也不能使用单个解码器并行解码子块的所有纹素。这是因为在这些情况下,纹素子块不在单个编码纹理数据块内被编码,而是由两个数据块(在图1b中示出的示例中)或者四个数据块(在图1c中示出的示例中)部分编码,并且解码器一次只对单个编码纹理数据块进行操作。因此,在这些情况下,需要以顺序方式按顺序对两个或四个数据块进行解码以解码由请求指示的纹素子块。

处理边缘(图1b)和拐角(图1c)情况的便利方法是布置解码器单元200,使得第二组的解码器均能够仅从接收到的数据块解码单个纹素(即,第二组的解码器是单输出解码器)。尽管可以通过将所需数据块中的每个分配给第一组的相应解码器来处理边缘和拐角情况,但这并不是解码器单元的处理能力的有效利用,这是因为每个解码器仅需要能够由那些解码器解码的多个纹素的子集。例如,在2×2纹素子块与4个纹素块的拐角重叠的情况下,使用来自第一组的四个四输出解码器来对这些纹素进行解码可以为那些解码器提供低至25%的工作效率。

在另选布置中,第二组的解码器中的每个都可以被提供为双输出解码器。也就是说,第二组的解码器中的每个可以被配置为从接收到的单个数据块并行地解码两个纹素。该布置在纹素子块与两个相邻纹素块交叠的处理情况下可能是特别有效的。

第一组和第二组中的每个中的解码器的数量可以取决于针对解码器单元200的给定实现的给定纹素请求内可以指示的纹素数量(或最大数量)。考虑每个请求可能包含解码多达16个纹素的指示的示例,可以理解,需要至少四个四输出解码器能够同时解码请求中指示的所有纹素。当然,在某些情况下,四个四输出解码器将不能同时解码该请求中指示的16个纹素。当16个纹素跨5个或更多个数据块被编码时(因为四个解码器只能同时从四个数据块解码纹素),可能是这种情况。将16个纹素编码在四个或更少数据块内的统计可能性取决于由每个数据块编码的纹素块的大小以及编码纹理数据的性质。由数据块编码的纹素块的大小越大,16个纹素被编码在四个或更少数据块内的可能性就越大。因此,在数据块对较小纹素块编码时,解码器单元可以受益于第一组中具有多于四个四输出解码器。

根据对根据astc格式编码的数据集进行的统计分析,发明人发现,为了解码16个纹素,五个四输出解码器的性能近似等于四个四输出解码器加两个单输出解码器或四个四输出解码器加一个双输出解码器的组合的性能。然而,包括两个单输出解码器或单个双输出解码器的布置已经被认为提供了增加的灵活性。应该理解,这一发现基于对单个数据集的分析,并且对于其它类型的数据集,可能需要解码器组的不同组合与具有单种解码器的解码器单元的性能相匹配。然而,该分析用于说明如何利用包含多组解码器的解码器单元实现与具有一组解码器的解码器单元类似的性能。

因此,解码器单元200在对由纹素请求指示的多达16个唯一纹素进行解码时的一种方便布置可以是在第一组解码器202中提供四个四输出解码器;以及第二组解码器204中提供两个单输出解码器或一个双输出解码器。与并行操作四个单输出解码器相比,使用四输出解码器可以提供硬件节省,并且从而与并行操作16个单输出解码器的常规布置相比,四个四输出解码器加两个单输出解码器(或一个双输出解码器)的组合可以提供硬件节省。此外,与16单输出布置相比,这样的布置可能不遭受相称性能下降,这将在下面的示例中更详细地说明。

当然,可以在请求中指示的纹素的最大数量可以取除了16以外的值,并且因此通常解码器单元200可以被布置为使得在第二组中的每个解码器是双输出解码器的情况下,第一组中的解码器的数量与第二组中的解码器的数量的比率是4:1;或者在第二组中的每个解码器是单输出解码器的情况下为4:2。

关于图3例示了包括四个四输出解码器和两个单输出解码器的解码器单元如何操作以解码由纹素请求指示的16个唯一纹素的示例。图3示出了请求中指示的16个纹素由被表示为302、304、306和308的四个2×2纹素子块构成。纹素块310、312、314和316表示在相应数据块内编码的纹素,并且是更宽纹理的纹素块(为了清楚起见,其余部分未在图3中示出)。每个纹素块具有nb×mb个纹素的尺寸,该尺寸可以由用于将纹理块编码到相应数据块中的纹理压缩格式确定。在该示例中,子块302、304和306分别完全位于纹素块310、312和314内。子块308与相邻纹素块310和316的边缘交叠。这里示出每个纹素块为8×8块以用于说明。

响应于解码器单元200接收到指示这16个纹要将被解码的纹素请求,控制逻辑210可以将完全位于编码在那些数据块内的纹素块内的子块的数据块分配给第一组202的四输出解码器。因此,在该示例中,子块302、304和306的数据块被分配给第一组的相应四输出解码器。

对于由两个或更多个不同数据块(诸如,子块308)部分编码的数据块,控制逻辑可以根据第一组和第二组内的解码器的可用性,将编码该子块的纹理数据块分配给第一和第二组的解码器。控制逻辑可以根据优先级方案将数据块分配给解码器,由此,当纹素子块由那些数据块部分编码时,到第二组的解码器的数据块分配优先于第一组的解码器(例如,在边缘和拐角情况下)。因此,在该示例中,控制逻辑可以作为优先级将子块308的数据块编码纹素318的实例分配给单输出解码器,并且将子块308的该数据块编码纹素320的另一实例分配给第二单输出解码器。如果仅存在两个单输出解码器(如在该示例中那样),则控制逻辑然后可以将对子块308的两个剩余纹素进行编码的数据块分配给第一组的可用四输出解码器(即,与分配给单输出解码器的数据块不同的数据块)。另选地,分配方案可以保持用于非交叠和交叠子块的队列,并且使每组的编码器的数量与每个队列相关。分配方案可以保持针对边缘和拐角交叠纹素子块的单独队列。

在子块与四个相邻纹素块的拐角交叠的情况下(即,子块的每个纹素由不同相应数据块编码),控制逻辑可以将对子块的两个不同纹素编码的两个不同数据块分配给第二组的相应单输出解码器。控制逻辑然后可以向第一组的相应解码器分配两个另外数据块(每个数据块不同于被分配给第二组的解码器的数据块),其中,分配给第一组的解码器的每个数据块对子块的剩余纹素中的不同的一个纹素进行编码。当然,其它分配也是可能的。

在上面的示例中,包括两个单输出解码器和四个四输出解码器的解码器单元200能够同时或者并行地解码在纹理请求中指示的16个唯一纹素。此外,由于多输出解码器的提高硬件效率,解码器单元的硬件要求可能低于并行操作16个单输出解码器。该示例用于说明解码器单元如何在具有改进硬件效率的情况下对在请求中指示的多个唯一纹素进行解码,而没有相称性能下降(在该特定示例中,不遭受任何性能损失)。

解码器单元200可有效获得硬件效率与性能之间的正折衷的一种纹理压缩格式是astc。

在astc中,经压缩的图像或纹理被细分为多个数据块,其中,每个数据块表示形成纹理的纹素块的纹理数据。每个数据块具有128位的固定内存印迹(memoryfootprint)(即,具有固定大小)。然而,数据块能够表示不同数量的纹素(即,对于不同大小或尺寸的纹素块)的纹理数据。由单个数据块表示的纹素的数量可以被称为块印迹(blockfootprint)。对于给定的纹理,块印迹可能是固定的。块印迹的高度和宽度(以纹素为单位)通常可从多个预定义的大小中选择,并且块的印迹不需要是方形的。对于2d纹理,块印迹的示例包括4×4纹素;6×6纹素;8×8纹素以及12×12纹素(给出分别8位每像素(bpp);3.56bpp;2bpp和0.89bpp的压缩率)。

块内每个纹素的颜色被定义为一对颜色之间的线性梯度上的点。该对颜色被称为一对“颜色端点”。每个纹素的颜色可以通过在一对颜色端点之间进行插值来计算。插值权重可以用于指定两个颜色端点(即,在那些颜色端点之间的线性梯度上的位置)的加权平均值,从而定义该纹素的颜色。在图4a中示意性地例示该过程,图4a示出了在标记为402的红-绿(rg)颜色空间中的一对颜色端点a(表示为404)和b(表示为406)。在该示例中,每个纹素可以具有五个权重中的一个:0/4(对应于颜色a);1/4;2/4;3/4;或4/4(对应于颜色b)。在图4b中示出了一个4×4块的每个纹素的纹素权重的示例。尽管针对rg颜色空间的简单示例示出,但当在诸如rgb或rgbα的不同颜色空间中工作时也应用相同的方法。

每个颜色端点可以由一个或更多个颜色值组成。颜色端点可以由最多四个颜色值组成。在对纹素进行解码时,颜色值将从数据块被解码,并且然后将那些值转换为颜色端点。颜色值转换为颜色端点的方式由被称为颜色端点模式的参数来定义。关于纹素的颜色端点模式的信息在数据块内被编码。astc规范定义了16个可能的颜色端点模式,所述模式从根据单个颜色值计算颜色端点到根据四个颜色值计算颜色端点而变化。

插值权重可以以权重网格的形式被存储,该权重网格是与数据块中表示的纹素块对应的权重值的2-d网格。在某些编码中,可以为数据块中的每个纹素存储插值权重(即,权重网格的尺寸对应于块印迹的尺寸)。然而,对于表示较大量的纹素(例如,12×12个纹素)的纹理数据的数据块,块内可能没有足够的数据来存储每个纹素的插值权重。在这种情况下,可以存储包含比每个数据块内的纹素数量更少的权重的稀疏权重网格。然后,可以从该稀疏权重网格的插值计算数据块中的每个纹素的权重。

为了做到这一点,块中的纹素的坐标首先被缩放为权重网格的尺寸。坐标通过比例因子进行缩放,该比例因子将权重网格的尺寸缩放为块印记的尺寸。纹素相对于权重网格的重新缩放位置然后被用来选择权重网格的权重的子集并且对那些权重进行插值以计算纹素的权重。例如,可以选择来自权重网格的四个权重并进行插值以计算纹素的权重。

在某些情况下,单个一对颜色端点可以用于计算数据块内每个纹素的颜色。然而,在其他情况下,块可以表示具有不同颜色的混合的纹素,所述混合不能通过在单个一对颜色端点之间进行插值来合理地表示。为了解决这个问题,可以将数据块中的每个纹素分配给最多四个分区中的一个,其中,每个分区都与其自己的颜色端点对相关联。为了确定块内纹素的颜色,确定纹素所属的分区,并根据该纹素的插值权重和与该分区相关联的颜色端点对计算颜色。插值权重可以独立于颜色端点对(即,独立于纹素所属的分区)被存储和编码在数据块内。

这在图4c和图4d中被示意性地例示。图4c示出了rg颜色空间412内的由端点颜色a和b形成的第一颜色端点对408以及由端点颜色c和d形成的第二颜色端点对410。第一端点对属于第一分区,并且第二端点对属于第二分区。因此,在该示例中存在两个分区。每个颜色端点对可以利用五个权重在其间进行插值。图4d示出了由纹理数据块表示的纹素块414。分区掩码(partitioningmask)被示出为覆盖在指示每个纹素属于哪个分区的纹素块上。分区掩码是值的网格,其中,每个值表示纹素属于哪个分区。每个值可以像这样被称为分区索引。具体地,值1表示纹素属于第一分区(与颜色端点对408相关联);并且值2表示纹素属于第二分区(与颜色端点对410相关联);还示出了每个纹素的权重。为了确定纹素的颜色,分区索引被用于标识颜色端点对,并权重被用于在该对之间进行插值。例如,纹素416具有1的分区索引和3/4的权重,并且因此具有由rg颜色空间中的位置418定义的颜色。纹素420具有2的分区索引和1/4的权重,并且因此具有由rg颜色空间中的位置422定义的颜色。

如上所述,由数据块编码的纹素块的大小(即,用于astc编码的块印迹)影响请求中指示的特定2×2纹素块完全落入纹素块内的可能性。假设每个纹素同样可能地被请求,可以表明,对于4×4的纹素块大小,2×2子块完全落入纹素块中的可能性是56%(9/16),而对于12×12纹素块,该可能性增加至约77%(111/114)。2×2纹素子块完全落入由数据块编码的纹素块内(即,在astc规范支持的每个可能块印迹上求平均)的平均可能性为72%。使用以上,并且根据来自glbenchmarkv2.7的opengl2测试对要求解码16个唯一纹素的唯一高速缓存行的数量的分析,发明人估计,平均来说,四个四输出解码器操作以解码16个唯一纹素实现并行工作的16个单输出解码器的大约75%的性能。发明人已经使用opengl测试的结果来估计当认识到高速缓存行(128位)的大小与astc数据块相同时对astc编码数据进行解码时的解码器的性能,并且因此解码16个唯一纹素所要求的唯一高速缓存行的数量被期望给予解码16个唯一纹素所要求的唯一astc数据块的数量的合理估计。

进一步分析表明,增加第五个四输出解码器可以将解码器单元的性能提高到并行的16个单输出解码器的约89%。然而,已经发现,通过包括两个单输出解码器或者单个双输出解码器而不是第五个四输出解码器,可以获得至少类似性能水平,同时受益于改进硬件要求。

还可以将第三个单输出解码器添加到第二组的解码器中以改善拐角情况的处理,但是对于8×8纹素块(其大致等于由astc支持的平均纹素块大小),2×2纹素子块仅在1/64的情况下(1.56%)与四个纹素块的拐角交叠。由此得出的结论是,在第二组中包含第三个单输出解码器不在性能和硬件要求之间提供有利折衷。

基于以上所述,发明人已经发现,对于astc编码纹理,包括四个四输出解码器和两个单输出解码器或单个双输出解码器的、被配置为解码在纹素请求中指示的16个唯一纹素的解码器单元可以实现并行操作的16个单输出解码器的大约90%的性能。

当然,如果在纹素请求内指示的唯一纹素的最大数量不是16,则可以提供第一组和第二组中的不同数量的解码器。例如,如果解码器单元200可能是其一部分的图形系统操作以同时处理8个纹素,则可能期望纹素请求指示多达32个唯一纹素要被解码。在这种情况下,解码器单元可以包括第一组中的八个四输出解码器和第二组中的四个单输出解码器或两个双输出解码器。通常,具有在第一组的四输出解码器与第二组的双输出解码器的数量之间的比率为4:1或在第一组的四输出解码器与第二组的单输出解码器的数量之间的比率为4:2的解码器能够解码在纹理请求中指示的多达m个唯一纹素,同时具有并行操作的m个单输出astc解码器的大约90%的性能。另外,在第一组中提供多输出解码器可能意味着解码器单元的整体硬件要求可以小于并行操作的m个单输出解码器。

图5中示出了与并行操作的等量单输出解码器相比可以提供改进硬件效率的多输出astc解码器的示例。图5中示出的解码器500是第一组解码器或第二组解码器204中的解码器的示例(在第二组的解码器不是单输出解码器的情况下)。

解码器包括参数解码单元502、颜色解码单元504、权重解码单元506和至少一个插值器单元508。参数解码单元联接到颜色解码单元和权重解码单元。具体地,参数解码单元的输出端联接到权重解码单元和颜色解码单元两者的输入端。颜色解码单元和权重解码单元中的每个都联接到至少一个插值器单元。更具体地说,权重解码单元和颜色解码单元的输出端被联接到插值器单元的输入端。

解码器500被配置为接收astc编码纹理数据块作为输入,如在510处示出的。可以从控制逻辑210向解码器分配数据块。如上所提及的,块具有128位的大小或内存印迹。纹理数据块510对nb×mb纹素块的纹素颜色进行编码。该nb×mb纹素块可以形成经压缩的图像或纹理的一部分。纹理可以由多个这样的纹理块组成,其中,那些块中的每个块被编码在相应128位数据块中。块的尺寸(即,nb和mb的值)可从由astc标准指定的多个固定替代方案中选择。

解码器500操作以从纹理块510解码多个纹素。解码器可以从块510解码的纹素的最大数量被表示为nt,其中,nt可以例如是2或4。解码器可以并行解码多个纹素。解码器可以例如包括用于输出相应解码后的纹素的多个输出端。解码器可以操作以根据解码处理来解码多个纹素。该解码处理可以包括一系列解码步骤或操作。经历了解码特定纹素的一系列步骤可以被称为解码流水线。因此,解码器500可以操作以从块510解码多个纹素,其中,根据解码流水线对每个纹素进行解码。如从下面将理解,解码器500能够从块510解码任何数量的纹素。也就是说,2≤nt≤nb.mb。

在下面的示例中,为了说明的目的,纹理数据块510对纹素块310进行编码(如图3所示),并且解码器500操作以对2×2纹素子块302进行解码(即,nt=4)。当然,解码器能够从块解码任何nt个纹素,无论所述纹素是否被布置在子块中。由数据块表示的纹理数据可以被划分成多个分区。

参数解码单元502接收数据块510。参数解码单元操作以对块510的配置数据进行解码。配置数据可以是指定块510内的纹理数据及其编码的参数的数据。配置数据例如可以包括:权重网格的大小和/或权重值的范围;纹理数据是单平面还是双平面的指示;分区计数(即,数据块510的分区数)和颜色端点模式。

颜色解码单元504使用从数据块510解码的配置数据来对从块510解码的nt个纹素中的每一个的颜色端点数据进行解码。颜色端点数据包括被解码的纹素中的每一个的一对颜色端点。如果数据块具有一的分区计数,则被解码的纹素中的每一个与同一颜色端点对相关联。颜色端点数据可以包括形成四个颜色端点对的多达八个颜色端点(对于四的分区计数)。颜色端点中的一个或更多个可以与从数据块510解码的该组纹素中的多个纹素相关联;即,被解码的纹素中的一些可以共享公用的颜色端点或公用的颜色端点对。例如,如果从数据块510并行地解码多于四个纹素,那么这些纹素中的至少两个将共享公用的颜色端点或颜色端点对,因为astc标准将分区的数量限制为最多四个(并且因此彩色端点对的数量被限制为最多四个)。

权重解码单元506使用由参数解码单元502解码的配置数据来对从块510解码的nt个纹素中的每一个的插值权重数据进行解码。给定纹素的插值权重数据可以是单个权重(例如,如果块中的纹理数据是单平面)或一对权重(例如,如果块中的纹理数据是双平面)。因此,权重解码单元可以对从块510解码的每个纹素的权重进行解码,或者对从块510解码的每个纹素的一对权重进行解码。这些权重值由插值单元508接收。

插值单元508使用每个纹素的颜色端点数据和每个纹素的权重值来计算被解码的nt个纹素中的每一个的颜色值。

解码器500然后可以输出nt个纹素中的每一个的经解码颜色值。也就是说,解码器可以输出nt个纹素颜色值。这些值可以被并行输出。

在图6中更详细地示出了参数解码单元502的示例。如所例示的,参数解码单元502包括块模式单元602;颜色端点单元604和分区索引单元606。

块模式单元602被配置为对包括权重网格大小(其高度和宽度,即,其尺寸)和可以由权重网格的权重占据的权重值范围的配置数据的一部分进行解码。

分区索引单元606被配置为计算要从块510解码的每个纹素(在该示例中,纹素块302)的分区索引。分区索引标识每个纹素所属的分区,并且是配置参数的示例。

根据块602内的种子、分区计数和纹素的坐标计算每个纹素的分区索引。种子、分区计数和纹素坐标可以被称为中间配置数据,因为它们是用于解码配置参数(分区索引)的数据的示例,但它们本身不是配置参数。分区计数由形成分区索引单元606的一部分的分区计数单元610从数据块510解码。种子由种子计算块608根据从数据块510解码的分区模式索引来计算。纹素的坐标由纹素坐标单元(tcu)612来计算。tcu612可以包括用于并行地计算纹素块302中的每一个纹素的坐标的硬件。分区索引单元包括用于从种子、分区计数和纹素坐标计算分区索引的索引计算器614。索引计算器计算被解码的纹素块302中的每一个纹素的分区索引。

颜色端点单元604被配置为从数据块510解码颜色端点模式。在纹理数据具有大于1的分区计数的情况下(即,存在多个分区),颜色端点单元可以对每个分区的颜色端点模式进行解码。如上所述,颜色端点模式指定如何将从块510解码的颜色值转换成颜色端点。通常,astc规范指定了16种可能的颜色端点模式,其中,模式需要不同数量的颜色值以形成颜色端点。具体地,模式中的四种从单个颜色值(例如,亮度)形成单个颜色端点,并且因此对于每个颜色端点对来说需要两个颜色值;模式中的四种从两个颜色值形成单个颜色端点,并且因此对于每个颜色端点对来说需要四个颜色值;模式中的四种需要三个颜色值来形成每个颜色端点,并且因此对于每个颜色端点对来说需要6个颜色值;以及模式中的四种需要四个颜色值来形成单个颜色端点(例如,rgbα),并且因此对于每个颜色端点对来说需要8个颜色值。

由参数解码单元502解码和/或计算的配置数据中的一部分独立于从数据块510解码的纹素。也就是说,不管从该块解码的纹素,块510的配置数据的一部分是相同的;即,配置数据的一部分对于块的纹素中的每一个的解码是公用的。因此,配置数据的该部分对于从纹理数据块解码的多个纹素中的每一个的解码是公用的。该数据可以说是按照每数据块而不是每纹素指定的。在某些情况下,‘每数据块’配置数据的该部分可以形成配置数据的实质性部分。

便利地,由参数解码单元解码的该每块配置数据可以由颜色解码单元604和权重解码单元606用作块302中的纹素中的每一个的解码过程的一部分。每块配置数据的第一子集或一部分可以被颜色解码单元使用,并且每块配置数据的第二子集或一部分可以被权重解码单元使用。也就是说,颜色解码单元可以使用每块配置数据的第一部分来对块302中的所有纹素的端点数据进行解码;并且权重解码单元可以使用每块配置数据的第二部分来对块302中的所有纹素的插值插权重数据进行解码。这意味着参数解码单元在解码器500要从块并行地解码nt个纹素时不需要对每块配置数据解码nt次。相反,当解码器502从块510并行地解码nt个纹素时,参数解码单元502仅对每块配置数据解码一次。这转而又意味着参数解码单元502不需要硬件来对每块配置数据并行地解码nt次,导致潜在的硬件节省。

在该特定示例中,权重网格大小和权重值的范围是对于块510中的纹素的解码公用的配置数据的示例,并且因此这些相同的配置参数被用于块302中的纹素中的每一个的解码。因此,块模式单元602由大致相同的硬件形成,就好像解码器500仅是单输出解码器。换言之,块模式单元602可以跨要从块510解码的纹素中的每一个的解码流水线共享或被用作要从块310解码的纹素中的每一个的解码流水线的一部分。

由颜色端点单元604解码的颜色端点模式数据也独立于从块510解码的纹素。因此,由该单元解码的相同颜色端点模式数据被用于块302中的纹素中的每一个的解码。换句话说,该数据跨被解码的纹素中的每一个的解码流水线被共享。

关于分区索引单元606,(根据从数据块510解码的分区模式索引生成的)分区计数和种子这两者是独立于被解码的纹素的每块参数。因此,可以在计算块302中的纹素中的每一个的分区索引时使用相同的种子和经解码的分区计数,并且因此种子计算单元608和分区计数单元610可以跨被解码的这些纹素中的每一个的解码流水线被共享。

与由多个并行操作的常规astc解码器形成的多解码器相比,参数解码单元502的硬件资源因此可以减少。

在图7中示出了颜色解码单元504的示例结构。颜色解码单元包括颜色数据选择器单元(cdsu)702、序列解码器单元708、颜色去量化单元704和颜色端点计算单元706。

cdsu702被配置为确定数据块510内的颜色数据的大小(即,块内用于表示颜色端点的数据的大小)。在astc中,颜色数据作为可变长度位串在数据块内被编码。颜色数据根据有界整数序列编码(bise)方案进行编码。颜色数据的大小可以根据(由分区计数单元610解码的)分区计数和由块模式单元602解码的块模式数据来确定。因此,cdsu702仅使用独立于从块510解码的纹素的配置数据的一部分来确定颜色数据的大小。cdsu702还可以对数据块内的颜色数据的位置进行解码。该信息可以再次从分区计数和块模式数据来确定。

如上所述,分区计数和块模式数据是每数据块指定的参数,并且对于块510中编码的所有纹素的解码是公用的。因此,颜色解码单元504可以将配置数据的该部分用作子块302中的纹素中的每一个的解码的一部分。具体地,cdsu702可以执行块510内的颜色数据大小的单个确定,并且该确定然后可以用作子块302中的纹素中的每一个的解码流水线的一部分。

序列解码器单元708被配置为执行颜色数据的整数序列解码。如上所提及的,根据二进制整数序列编码(bise)方案将颜色数据编码在数据块内。bise方案的使用使颜色值能够以少的位数(afractionalnumberofbits)被编码。一系列值可以使用三进制数位(trits)(基-3表示)或五进制数位(quints)(基-5表示)来表示。还可以使用其他基本表示。

颜色去量化单元704被配置为从经解码的颜色数据提取颜色值并对这些颜色值进行去量化。去量化意味着将经编码的颜色值恢复到其原始范围(例如,[0,1,...255])。在某些情况下,由解码器500并行解码的子块302的纹素中的每一个可以位于不同的分区中,在这种情况下,可能需要八个颜色端点(每分区两个颜色端点)。如果这些分区中的每一个还与每个颜色端点由四个颜色值形成的颜色端点模式相关联,则这将需要从数据块510提取和去量化32个颜色值。然而,astc规范将可以在128位数据块内编码的颜色值的数量限制为18。

为了使多解码器能够最好地适应上述情况,颜色去量化单元704可以被配置为(或使适当的硬件能够)从数据块510并行地提取和去量化18个颜色值。应当注意,因为不可能从数据块510解码32个颜色值,所以对于分区数据(例如,具有3或4的分区计数的数据)的某些颜色端点模式是不可能的。

端点计算单元706被配置为将由去量化单元704解码的去量化颜色值转换成一组颜色端点。端点计算单元706可以使用要解码的块302中的纹素中的每一个的分区索引和相关联的颜色端点模式来计算该组颜色端点。如果要解码超过四个纹素(例如,如果要解码10个纹素),那么对于那些纹素将在分区索引和相关联的颜色端点模式中存在冗余(因为数据块只能具有最多四个分区)。因此,为了减少计算量,端点计算单元可以使用要解码的纹素所跨越的一组分区索引(和相关联的颜色端点模式)来将颜色值转换成一组颜色端点。去量化单元704可以从分区索引单元606和颜色端点单元604接收该信息。

端点计算单元可以输出针对从块510解码的每个纹素的一对颜色端点。为此,端点计算单元706可以使用被解码的每个纹素的分区索引从该组颜色端点选择一端点对。另选地,它可以输出每个分区的颜色端点和每个纹素的分区索引。

像参数解码单元502一样,颜色解码单元504被配置为从块510解码独立于被解码的纹素的数据。也就是说,颜色解码单元504被配置为对对于在数据块501中编码的所有纹素是公用的数据进行解码,作为子块302中的纹素的颜色端点数据的解码的一部分。颜色解码单元504使用该同一数据来对被解码的子块302中的所有纹素的颜色端点数据进行解码。也就是说,由颜色解码单元504解码的相同的每块数据被用在子块302中的纹素中的每一个的解码流水线中。

例如,如由cdsu702解码的数据块510内的颜色数据的大小和位置是在每块级别上指定的参数,并且独立于从数据块解码的那些纹素。该数据可以被称为中间颜色数据,因为它是从该块解码的数据,所述数据被用于解码从颜色解码单元输出的颜色端点数据。因为该中间数据独立于被解码的纹素,所以当解码从数据块510解码的子块302中的纹素中的每一个的端点数据时,该中间数据由颜色解码单元504的其余部分使用。也就是说,中间颜色数据对于每个纹素从数据块510的解码是公用的。通过仅计算该中间颜色数据一次并将其重新用作被解码的纹素中的每一个的解码流水线的一部分,cdsu702的硬件要求可以大致上与单输出astc解码器的硬件要求相同。

由序列解码器单元708解码并且由颜色去量化单元704去量化的颜色值可以跨子块302中的所有纹素的解码流水线被部分共享。例如,astc将可以存储在数据块310内的颜色值的数量限制为18。当从数据块510解码单个纹素时,需要多达八个颜色值(对于形成单个颜色端点对的两个颜色端点,多达每颜色端点四个颜色值)。因此,当解码单个纹素时,可以对八个颜色值进行bise解码和去量化。当解码器正并行解码多于(18/8)个纹素(即,当解码器并行地解码三个或更多纹素时)时,所有18个颜色值可以被bise解码和去量化。然而,因为被bise解码和去量化的颜色值的数量小于被并行解码的纹素的数量乘以每纹素所需的颜色值的数量,所以bise解码和去量化的颜色值跨纹素的解码流水线被部分共享。换句话说,在一些情况下,bise解码颜色数据在从数据块并行解码的纹素的解码流水线之间被至少部分地共享。类似地,去量化颜色值在一些情况下在被解码的纹素的解码流水线之间被至少部分地共享。换句话说,bise解码和去量化的颜色数据对于从块310并行解码的至少一些纹素是公用的。bise解码的颜色数据和去量化颜色值因此也可以是公用中间数据的示例。

更一般地,当从数据块解码的颜色值的数量(表示为nv)小于分区数量乘以颜色端点对中的颜色值的数量(表示为2.np.ncv,其中,np=分区数量并且ncv=形成单个颜色端点的颜色值的数量)时,则解码和去量化颜色值的子集可以被转换为由被解码的多个纹素共享的颜色端点(即使那些纹素属于不同的分区)。

图8示出了用于权重解码单元506的示例内部结构。这里,权重解码单元包括缩放单元802、权重数据选择器单元(wdsu)804、序列解码器单元818、权重去量化单元806和权重插值单元808。缩放单元802联接到wdsu804,wdsu联接到去量化单元806并且去量化单元联接到权重插值单元808。

缩放单元802被配置为识别将在插值中使用的权重网格的权重,以便为子块302中的纹素中的每一个生成权重。缩放单元802可以从用于被解码的每个纹素的权重网格识别一组权重。然后可以对每组权重进行插值,以便生成每个纹素的最终权重。

如上所述,根据块印迹的大小,可以不针对由数据块表示的每个纹素明确地存储权重。对于较大块印迹(例如,12×12纹素),权重网格比块尺寸具有更稀疏分辨率。在这种情况下,为了获得每个纹素的权重,将纹素的坐标缩放到权重网格的尺寸,然后针对每个纹素执行权重插值,以计算那些纹素的权重。

缩放单元802包括缩放因子单元810和权重选择器单元812。缩放因子单元810从数据块510解码将权重网格的大小缩放到块印迹的大小的缩放因子。权重选择器单元812使用缩放因子将被解码的子块302中的纹素中的每一个的坐标缩放到权重网格,并且选择将在用于子块302中的纹素中的每一个的插值中使用的权重网格的权重来计算那些纹素的权重。由缩放因子单元810计算的相同缩放因子由权重选择器单元812使用以缩放子块302中的纹素中的每一个的坐标。因此,可以使用缩放因子来计算该子块中的纹素中的每一个的权重。

该处理在图9中示意性地示出。6×6纹素块印迹通过“十字”标记(总体上由902表示)示出,并且5×5权重网格通过“点”标记示出并且通常以904表示。因此权重网格具有低于块印迹的尺寸的分辨率。出于说明的目的,块印迹和权重网格被示出为彼此交叠。然后将缩放因子应用到纹素的坐标,以将块印迹重新缩放到权重网格的尺寸。应用该缩放因子的结果通常在906处示出。在该示例中,出于说明的目的,缩放因子已经应用于块印迹中的所有纹素(而不仅仅是被解码的选定纹素)。然后使用重新缩放的纹素坐标来选择权重网格的一组权重来插值,以便计算每个纹素的权重。例如,纹素a(圈出来以用于识别)的坐标从位置908重新缩放到位置910。然后选择该组权重912、914、916和918用于插值,以使用该纹素关于权重网格的重新缩放位置生成纹素a的最终权重。

权重数据选择器单元804确定块内的权重数据的大小以及用于权重网格中的要在针对被解码的子块302中的所有纹素的插值中使用的选定权重的数据的位置。

wdsu包括权重数据大小单元814和权重定位器单元816。数据大小单元814被配置为确定块510内的权重数据的大小。数据大小单元814基于权重值范围和由块模式单元602解码的权重网格的大小对此进行确定。块510内的权重数据的大小被用作针对被解码的子块302中的所有纹素的权重数据解码的一部分。

权重定位器单元816被配置为针对子块302中的纹素中的每一个在块510内定位要用于权重插值的每组权重的权重数据。也就是说,权重定位器单元816可以针对被解码的每个纹素在块内单独定位要用于权重插值的权重数据。它可以并行地定位针对每个纹理的该权重数据。

像颜色数据一样,权重数据也可以被bise编码。序列解码器单元818被配置为执行权重数据的二进制整数序列解码。

权重去量化单元806被配置针对子块302中的纹素中的每一个对经解码的一组权重进行去量化(即,使每个权重从它们的编码范围返回到它们的原始范围)。针对被解码的纹素中的每一个的该组权重彼此独立,并且因此去量化单元可以包括对用于对被并行解码的纹素中的每一个的权重组进行去量化的硬件。

权重插值单元808被配置为对被解码的每个纹素的该组权重进行插值,以针对那些纹素中的每个计算最终插值权重数据(例如,针对被解码的每个纹素的每平面最终插值权重)。权重插值单元可以针对从块510并行解码的每个纹素计算最终插值权重数据。

然后,从权重解码单元506输出被解码的子块302中的纹素中的每一个的插值权重数据。

像参数解码单元502和颜色解码单元504一样,权重解码单元506从块510解码对于所有纹素从块510的解码是公用的数据。因此,权重解码单元解码每块数据(即,基于每块指定的数据)作为对插值权重数据进行解码的一部分。由于该数据是从数据块510解码并用于解码由权重解码单元输出的最终插值权重数据的数据,所以该数据可以被称为中间权重数据。权重解码单元使用同一每块(中间)数据来解码子块302中的所有纹素的插值权重数据。也就是说,由权重解码单元解码的每块数据被重新用于子块302中的纹素中的每一个的解码流水线。这有利地使得解码该数据的组件在针对从该块解码的纹素中的每一个的解码流水线之间被共享。

例如,将如由缩放因子单元810解码的、将块印迹的尺寸缩放到权重网格的缩放因子是每数据块指定的参数,并且独立于被解码的纹素。因此,同一缩放因子可以由权重选择器单元812使用以缩放子块302中的纹素中的每一个的坐标。因此,缩放因子单元可以具有大致相同的硬件要求,如同解码器500是单输出解码器。

类似地,块510内的权重数据的大小也是独立于被解码的纹素的参数。因此,如由权重数据大小单元814解码的权重数据的大小由权重定位器单元816用来定位用于被解码的子块中的所有纹素的权重数据。因此,数据大小单元814也可以具有大致相同硬件要求,如同解码器500是单输出解码器。

返回参考图5,至少一个插值器单元508被配置成使用被解码的子块302中的纹素中的每一个的插值权重数据和来自颜色端点的一对颜色端点数据来计算该纹素的颜色值。插值器单元可以根据从权重解码单元506输出的被解码的每个纹素的插值权重数据和从颜色解码单元504输出的该纹素的颜色端点对,计算该纹素的最终颜色。最终颜色值可以相对于rgbα颜色空间被指定(即,每个解码颜色可以是rgbα格式)。

插值器单元508可以通过使用每个纹素的插值权重在相关联的颜色端点对之间进行插值来计算该纹素的颜色。

插值器单元508可以被配置为计算被并行解码的纹素中的每一个的最终纹素颜色。插值器单元508的数量可以等于被解码的纹理数据的分区数量。另选地,插值器单元的数量可以等于从数据块510解码的纹素的数量。

上述解码器500是多输出解码器,该多输出解码器可以从根据astc规范压缩的纹理数据块解码多个纹素。如在以上示例中那样,解码器可以操作以并行地解码多个纹素。然而,有利地,解码器500可以使用从纹理数据块解码的数据的特定部分作为从该数据块解码的所有纹素的解码处理的一部分。因此可以从该块并行解码多个纹素,而不需要针对解码处理的每个阶段的并行处理。这意味着与并行操作多个常规astc单解码器相比,解码器500可以具有降低的硬件要求(例如,如果在集成电路上实现,则具有减小的面积)。具体地,发明人已经发现,通过以上述方式实现多输出解码器来解码四个纹素,芯片面积可以减少到常规单输出astc解码器的芯片面积的大约2.37倍,大约等于四个单解码器的面积的三分之二。换句话说,与并行操作的四个单输出解码器相比,上述四输出解码器可以节省大约40%的芯片面积。与16个单输出解码器的布置相比,对于包含四个四输出解码器500和两个单输出解码器的解码器单元200,这产生大约25%的芯片面积节省。

上述示例说明了被配置为根据已经被astc编码的纹素请求来解码m个纹素的解码器单元如何可以实现并行操作的m个单输出解码器的平均90%的性能,同时节省高达约25%的芯片面积。

对于一组样本请求,本文使用的术语“性能”通过计算混合解码器单元相比于具有m个单解码器的解码器单元处理所有m个所请求纹素需要多少个周期来确定。由于m个单个解码器系统总是在1个周期内处理每个请求,所以可以比较由混合解码器采用的周期数以提供性能度量的比较。

虽然上面的示例已经参照astc编码进行了描述,但是应该理解,这仅仅是为了说明的目的,并且本文描述的解码器单元可以被配置为对根据一些其它编码方案编码的纹素进行解码,一些其它编码方案诸如例如:pvrtc;pvrtc2;etc1;etc2;eac;s3tc;3dc;或bc1-bc5。这些压缩方案中的每个将纹素块的纹理数据编码为数据块,并且因此根据本文的示例配置的、解码由这些方案中的一个编码的纹理数据的解码器可以受益于改进的性能与硬件要求折衷。

此外,虽然上述示例涉及包含第一组和第二组解码器的解码器单元,但应该理解,解码器组的其它组合也是可能的。例如,解码器单元可以包含:第一组一个或更多个解码器,每个解码器被配置为从接收到的单个纹理数据块并行解码n个纹素;第二组一个或更多个解码器,第二组中的每个解码器被配置为从接收到的单个纹理数据块解码p个纹素;以及第三组一个或更多个解码器,第三组中的每个解码器被配置为从接收到的单个纹理数据块解码s个纹素,其中,s<p<n。例如,n=4,p=2和s=1。即,第三组中的每个解码器可以是单输出解码器。第一组与第二组和第三组中的解码器的数量的比率可以是4:2:2;4:1:1;4:1:2;4:2:1等。在其它布置中,解码器单元可以包括多个解码器组,其中,每一组的解码器被配置为从接收到的纹理数据块并行解码不同数量的纹素。每个解码器组可能只包含单个解码器。

如本文所述的控制逻辑可以被配置为根据纹素请求和分配方案将编码纹理数据块分配给解码器。分配方案还可以取决于要解码的纹素在纹素块内的相对定位(即,用于对请求的纹素进行编码的纹理数据块的数量)。所请求的纹素被编码的纹理数据块的数量越低,可以给予多输出解码器的优先级越高。分配方案可以遵循一组优先化分配。如果所请求的纹素子块包含在由该编码纹理数据块编码的纹素块中的多个纹素,则该分配方案可以仅包括将编码纹理块分配给多输出解码器(例如,第一组中的解码器)。如果纹素子块仅包含每个纹素块内的单个纹素,则该分配方案可以指定对那些纹素块编码的经编码纹理块被分配给单输出解码器。一般分配方案可以如下:首先,确定由相应纹理数据块编码的任何纹素块是否包含多于一个请求纹素,并且如果是,则根据需要将那些纹理数据块分配给一个或更多个多输出解码器,或者分配给能够并行解码最大数量纹素的组的解码器。纹理请求的剩余纹素然后可以通过将合适的纹理数据块分配给仅可以并行解码较少纹素的该组的解码器来解码。当然,也可以适当地使用其它分配方案。

图10示出了可以实现本文描述的解码器单元的计算机系统1000。该计算机系统包括cpu1002、gpu1004、存储器1006、以及诸如显示器1016、扬声器1018和相机1012的其它设备1014。解码器单元1010在gpu1004上实现。在其它示例中,解码器单元1010可以在cpu1002上实现。计算机系统的组件可以经由通信总线1020彼此通信。

图5至图8的解码器单元被示出为包括多个功能块或单元。这仅仅是示意性的,并不旨在限定这种实体的不同逻辑元素之间的严格划分。每个功能块可以以任何合适方式提供。应该理解,本文描述为由单元或块形成的中间值不需要由单元/块在任何点被物理地生成,并且可以仅表示逻辑值,这方便地描述由单元/块在其输入端和输出端之间执行的处理。

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

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

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

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

因此,可以提供一种在集成电路制造系统处制造如本文所述的解码器单元的方法。此外,可以提供一种集成电路定义数据集,该集成电路定义数据集在集成电路制造系统中被处理时使得制造解码器单元的方法被执行。

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

现在将参照图11描述在集成电路制造系统处处理集成电路定义数据集以便将系统配置为制造解码器单元的示例。

图11示出被配置成制造如本文的任一示例中所描述的解码器单元的集成电路(ic)制造系统1102的示例。具体地,ic制造系统1102包括布局处理系统1104和集成电路生成系统1106。ic制造系统1102被配置为接收ic定义数据集(例如,定义如本文的任何示例中所述的解码器),处理ic定义数据集,并且根据ic定义数据集(例如,其具体实现本文的任何示例中描述的解码器单元)来生成ic。ic定义数据集的处理将ic制造系统1102配置为制造具体实现如本文的任何示例中所述的解码器的集成电路。

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

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

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

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

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

在一些示例中,集成电路定义数据集可以包括在数据集处定义的硬件上运行的软件或者与数据集处定义的硬件相结合的软件。在图11所示的示例中,ic生成系统还可以由集成电路定义数据集配置,以在制造集成电路时,根据在集成电路定义数据集处定义的程序代码将固件加载到集成电路或者另外给集成电路提供由集成电路使用的程序代码。

申请人在此单独地公开了本文描述的每个单独特征以及两个或更多个这种特征的任意组合,以达到以下程度:这些特征或组合能够根据本领域技术人员的公知常识,基于本说明书作为整体被实现,而不管这些特征或特征的组合是否解决了本文所公开的任何问题,并且不限制权利要求的范围。申请人指出,本发明的各个方面可以由任何这样的单独特征或特征的组合组成。鉴于前面的描述,对于本领域技术人员而言显而易见的是,可以在本发明的范围内进行各种修改。

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