一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于将数据存储在图形处理系统的存储器中的方法和装置与流程

2022-12-10 00:36:00 来源:中国专利 TAG:

用于将数据存储在图形处理系统的存储器中的方法和装置
1.本发明涉及用于将数据存储在图形处理系统的存储器中的方法和装置,并且具体地涉及这样的方法和装置,该方法和装置用于将帧(帧缓冲区)和纹理存储在计算机图形处理系统中,或者在另一示例中,用于在图形处理系统正用于机器学习处理时存储机器学习特征映射。
2.图形处理系统中的帧(待显示的图像)和纹理将通常包括大的数据元素阵列(例如,每个数据元素对应于其所表示的图像中的相应采样位置或像素)。存储和访问帧缓冲区和纹理可相应地具有高存储和带宽要求。这对于执行图形处理的移动设备和手持式设备是特别重要的,因为此类设备可固有地在例如其存储、带宽和功率资源和能力方面受到限制。
3.因此,通常以“压缩”形式存储帧(帧缓冲区)和纹理,以便设法减少例如与其相关的存储和带宽负担。
4.将帧和纹理存储在图形处理系统中时的一个考虑因素是,通常将需要以随机访问方式访问所存储的数据(因为可能事先不知道在任何特定时间将需要帧缓冲区或纹理的哪个部分或哪些部分)。这对数据的存储施加了进一步的约束,因为相应地希望能够以适合于(和有效地)随机访问所存储的数据的方式来存储数据。在存储器中的所存储数据的大小可变化的情况下,例如由于应用于数据的压缩率是可变的(例如,在使用无损压缩时通常会出现这种情况),这一问题可能更加严重。
5.存储帧和纹理时的另一个考虑因素是可由用于存储数据的存储(存储器)系统施加的任何约束。例如,许多存储器系统具有最小的有效“存储器事务”大小,它是可在单个存储器访问事务中有效写入或读取的最小数据量。例如,在典型dram的情况下,可能存在64字节的标准的最小(有效)存储器事务大小。
6.还已知提供用于访问存储器的多个(例如两个)独立通道,然后在多个(例如两个)通道上交织地址空间,以受益于从多个通道获得的组合带宽。在这种情况下,存储器地址空间的相应块(范围)将以交替的方式被分配给不同的存储器通道。例如,可向不同的通道分配每隔256字节的地址块(这些可被称为存储器通道“条带化颗粒”)。在这种情况下,希望任何给定的存储器访问都不应跨越通道(交织)边界(因为这样将需要将访问分成两个不同的事务,每个通道一个事务)。因此,这定义了最大(有效)存储器事务大小。
7.当使用图形处理系统来执行机器学习操作时,类似的考虑因素在存储机器学习特征映射时同样适用。例如,机器学习特征映射也可包括可按块压缩的多维数据阵列,并且其中需要随机访问。
8.本技术人相信,仍然需要用于将这种数据存储在存储器中的更有效的布置。
9.根据本发明的第一方面,提供了一种将数据阵列的数据存储在图形处理系统的存储器中的方法,其中使用压缩方案压缩数据阵列的相应块,并且一旦压缩就将其存储在存储器中,该方法包括:
10.对于数据阵列的块,分配用于存储块的存储器区域,所分配的存储器区域对应于当使用压缩方案压缩时数据阵列的块的最大可能大小,并且被分成多个存储器分配子块,该多个存储器分配子块包括具有第一较大大小的至少一个子块和具有第二较小大小的至
少一个子块,当使用压缩方案压缩时,用于分配的子块一起提供对应于数据阵列的块的最大可能大小的存储器分配;
11.使用压缩方案压缩数据阵列的块;
12.以及将数据阵列的压缩块存储在其分配的存储器区域的一个或多个子块中。
13.根据本发明的第二方面,提供了一种用于将数据阵列的数据存储在图形处理系统的存储器中的装置,该装置包括:
14.数据编码器,该数据编码器被配置为:
15.使用压缩方案压缩数据阵列的相应块;以及
16.一旦压缩就将数据阵列的块存储在存储器中;
17.以及
18.存储器分配电路,该存储器分配电路被配置为:
19.对于待被压缩和存储的数据阵列的块,分配用于存储块的存储器区域,所分配的存储器区域对应于当使用压缩方案压缩时数据阵列的块的最大可能大小,并且被分成多个存储器分配子块,该多个存储器分配子块包括具有第一较大大小的至少一个子块和具有第二较小大小的至少一个子块,当使用压缩方案压缩时,用于分配的子块一起提供对应于数据阵列的块的最大可能大小的存储器分配;
20.其中数据编码器被配置为,当其已经使用压缩方案压缩了数据阵列的块时,将数据阵列的压缩块存储在其分配的存储器区域的一个或多个子块中。
21.在本发明中,通过压缩和存储数据阵列的块,将数据阵列的数据(如上文所讨论的,其可以是并且优选是帧缓冲区或纹理)存储在图形处理系统的存储器中。(如将在下文进一步讨论的,最优选地,数据阵列被分成多个块,每个块以本发明的方式被单独压缩和存储。)
22.此外,在本发明中,阵列的(并且优选地每个)块被分配用于存储对应于该块的压缩数据的相应存储器区域,该存储器区域被进一步细分为多个存储器分配子块。然后将数据阵列的压缩块存储在用于该块的所分配存储器区域的一个或多个子块中。(如将在下文进一步讨论的,被分配用于存储块的存储器区域可以是连续的存储器区域,或者可以是由多个非连续的子区域构成的“分布式”存储器区域。)
23.如将在下文进一步讨论的,本技术人已经认识到,以此方式存储数据阵列的压缩数据块可提供存储和访问这种数据的更有效方式,并且可(例如并且优选地)与有利于随机访问数据阵列的任何需要兼容,并且也在给定由存储器系统本身强加的对访问存储器的任何约束的情况下提供更有效的存储器访问(如上文所讨论的)。
24.例如,将数据阵列作为相应块存储在存储器中有利于随机访问阵列,因为可在块级有效地随机访问所存储的数据(即,可对数据阵列分成的各个块进行随机访问)。
25.如将在下文进一步讨论的,在分配给数据阵列的给定块的存储器区域内使用不同大小的子块,有利于以针对存储器系统的任何最小有效存储器事务约束并且也针对任何存储器系统通道对齐(交织)边界而更优化的方式存储块的压缩数据。具体地,它可有利于既减少所需事务的数量和使任何此类事务尽可能地长,又减少或避免跨越存储器通道“边界”的事务,即使在压缩块的大小可从块到块变化的情况下(如将通常在使用可变速率压缩方案(例如,无损压缩方案)的情况下)也是如此。
26.这可全部有助于在系统层面上减少带宽和功率。
27.在本发明中,要存储的数据阵列可以是在图形处理中使用和/或产生(生成)的任何合适的数据阵列。它应当并且优选地确实包括多个数据元素(条目),每个数据元素在阵列中占用不同的位置。阵列可具有任何所需数量的维度。在优选的实施方案中,阵列具有两个维度。数据阵列优选地表示图像。
28.在一个优选的实施方案中,数据阵列包括要显示的帧。因此,在优选的实施方案中,数据阵列是要存储在帧缓冲区中的数据帧,例如用于显示。在另一个实施方案中,数据阵列是图形纹理。
29.在优选的实施方案中,本发明的方法和装置既用于存储纹理又用于存储帧(用于存储帧缓冲区)。
30.在其他实施方案中,阵列是用于机器学习(ml)过程的特征映射。
31.数据阵列中的每个条目(数据元素)的数据可采取任何合适和期望的形式。如本领域的技术人员应当理解的那样,这将取决于用于阵列的数据的性质和阵列数据所处的格式。在是帧缓冲区(并且通常还有纹理)的情况下,阵列中的每个数据条目的数据将包括适当的颜色值的集合,例如适当的rgb或rgbα值,或亮度和色度值。当然,其他布置将是可能的。
32.数据阵列被处理和存储为阵列的相应块。因此,虽然到目前为止,主要针对关于被存储阵列的单个块的操作对本发明进行了描述,但实际上要存储的数据阵列将被分成多个块(优选地涵盖整个阵列),然后以本发明的方式处理每个这样的块。
33.因此,在特别优选的实施方案中,本发明的方法包括(并且装置被相应地配置为):
34.将要存储的数据阵列分成多个块;
35.针对多个块中的每个块,分配用于存储块的存储器区域,所分配的存储器区域对应于当压缩时(使用所讨论的压缩方案)数据阵列的块的最大可能大小,并且被分成多个存储器分配子块,该多个存储器分配子块包括具有第一较大大小的至少一个子块和具有第二较小大小的至少一个子块,当压缩时,用于分配的子块一起提供对应于数据阵列的块的最大可能大小的存储器分配;
36.对于数据阵列的多个块中的一个或多个块,并且优选地对于多个块,并且优选地对于每个块:
37.使用压缩方案压缩块;
38.以及将数据阵列的压缩块存储在其分配的存储器区域的一个或多个子块中。
39.数据阵列出于本发明的目的而分成的块可采取任何合适和期望的形式。每个块应当并且优选地确实包括阵列中的数据元素(位置)的子集,即对应于阵列的特定区域(例如区域)。在优选的实施方案中,阵列被分成(非重叠的)大小和形状规则的块(即,每个块优选地具有相同的大小和配置),诸如并且优选地为矩形块,并且最优选地为正方形块(在二维阵列的情况下)。
40.该装置和方法优选地支持多个不同的块大小和配置。例如,可支持32、64、128、256、512和/或1024个数据元素的块,并且示例性块配置为:8
×
8、16
×
4、16
×
16、32
×
8、64
×
4和/或128
×
2等阵列位置(条目)。因此,在是帧缓冲区的情况下,例如,每个块可对应于(例如)帧的16
×
16(或8
×
8、16
×
4、32
×
8、64
×
4、128
×
2)位置(例如像素)。相应地,在是纹
理映射的情况下,例如,在一个实施方案中,每个块可对应于16
×
16(或8
×
8、16
×
4、32
×
8、64
×
4、128
×
2)纹素。
41.当然,其他布置将是可能的。例如,可使用任何合适的支持的块大小。
42.在优选的实施方案中,块对应于将以其他方式用于所讨论的图形处理器和图形处理系统中的块大小。因此,在是基于图块的图形处理器的情况下,块优选地对应于图形处理器的渲染过程正在其上操作的图块(具有与图块相同的大小和配置)。
43.在本发明中,要存储在存储器中的数据阵列的块被分配用于存储该块的存储器区域,当使用所讨论的压缩方案压缩时,该存储器区域对应于数据阵列的块的最大可能大小。换句话讲,对应于存储块可能需要的最大大小的存储器区域被分配用于存储块。这有利于在存储时随机访问数据阵列的各个块,因为它确保每个块将能够完整地存储在其所分配的存储器区域中(并且独立于任何其他块)。
44.(如将在下文进一步讨论的,被分配用于存储块的存储器区域可以是连续的存储器区域,或者可以是由多个非连续的子区域构成的“分布式”存储器区域。)
45.这应该并且优选地针对数据阵列分成的每个块来进行,即,使得将存在与数据阵列已经分成的块的数量一样多的所分配存储器区域。
46.相应地,至少在数据阵列在以本发明的方式存储时被分成相同形状和配置的多个块的情况下,并且在优选的实施方案中,为数据阵列的每个块分配相同量的存储器(相同大小的存储器区域)用于其存储。
47.被分配用于存储数据阵列的(和每个)块的存储器区域中的大小将取决于并且基于块在被压缩(使用所讨论的压缩方案)时的最大可能大小。这将取决于将要/正在使用的压缩方案。
48.例如,对于(可变速率)无损压缩,被分配用于存储数据阵列的(和每个)块的存储器区域的大小将取决于并且基于数据阵列的“未压缩”格式(即,用于数据阵列的数据元素的(未压缩)格式)和块的大小(根据块中数据元素的数量)(因为如果压缩导致大于块的大小,则压缩方案将默认存储“未压缩”块)。
49.因此,在实施方案中,对于数据阵列的块,被分配用于存储该块的存储器区域对应于未压缩时数据阵列的块的大小。例如,对于r10g10b10a10格式的256像素(16
×
16像素)的块,未压缩(最大)大小将为640字节。因此,对于这种块大小和格式,用于存储该块(以及用于数据阵列的每个块)的存储器分配将为640字节。又如,对于r10g10b10a10格式的128像素的块,未压缩(最大)大小将为320字节,并且可相应地设置存储器分配。其他示例将是具有128像素(384字节)的r8g8b8或具有64像素(192字节)的r8g8b8,同样基于未压缩(最大)大小相应地设置存储器分配。
50.对于其他例如有损可变速率压缩方案,可指定块在被压缩时的最大可能大小,例如使得压缩方案编码为固定(最大)大小。例如,可变速率有损压缩方案可尝试将块无损地压缩到比最大指定大小更小的大小,但如果该操作失败,则应用有损压缩以确保压缩数据的大小满足最大大小要求。在这种情况下,最大可能大小由有损压缩方案指定,并且通常小于未压缩的大小。
51.用于数据阵列的一个(和每个)块的存储器分配被分成多个存储器分配子块,该多个存储器分配子块包括具有第一较大大小的至少一个子块和具有第二较小大小的至少一
个子块。
52.就这一点而言,如果需要,分配将也可包括具有第三大小(其不同于第一大小和第二大小)的一个或多个子块,等等(例如,也可包括具有第四大小的一个或多个子块等)。然而,在特别优选的实施方案中,存储器分配仅被分成两种不同大小的子块,即具有第一较大大小的一个或多个子块,和具有第二较小大小的一个或多个子块。
53.因此,在优选的实施方案中,存在用于数据阵列的一个(和每个)块的存储器分配的两种大小的子块,但在其他实施方案中,如果需要,可存在三种(或多于三种)不同大小的子块。
54.在一个优选的实施方案中,子块配置对于所讨论的数据阵列的所有块是相同的。换句话讲,用于给定数据阵列的每个块的存储器分配将具有相同的子块配置(被分成相同的不同大小的子块集合)(并且是相同的总大小)。
55.在其他实施方案中,不同的子块配置用于所讨论的数据阵列的不同块。在这种情况下,在优选的实施方案中,数据阵列的一些块使用一种特定的子块配置,并且数据阵列的其他子块使用不同的子块配置。用于块的特定子块配置优选地取决于块在所讨论的块序列中的位置(索引)(例如,对于数据阵列的全部或部分)和/或取决于将用于块的存储器分配的任何存储器地址偏移(例如,并且优选地,与最小有效和/或最大有效存储器事务边界相关)。
56.在这种情况下,在特别优选的实施方案中,数据阵列的一组块(例如具有特定的索引值和/或偏移)具有按照本发明的方式的子块配置,即包括至少一个较大子块和一个较小子块。然后用于数据阵列的块的另一配置优选地包括仅包括一个(单个)(优选地连续的)子块的存储器分配,该子块包括块的整个存储器区域(存储器分配)。因此,在这种情况下,对于给定的数据阵列,将存在以本发明的方式存储的一些子块,和被存储为包括块的整个存储器分配的单个连续子块的数据阵列的其他块。这可能尤其是块的存储器分配将适合于整个存储器通道“条带”的情况。
57.在优选的实施方案中,该布置用于一些最大压缩块大小,但其他最大压缩块大小对数据阵列的所有块使用相同的子块配置(以本发明的方式)。
58.在特别优选的实施方案中,相同的一个或多个子块配置用于具有相同最大压缩大小的所有块。换句话讲,给定的最大压缩块大小将始终具有相同的一个或多个子块配置。因此,被分成具有所讨论的最大压缩大小的块的数据阵列将使用与被分成具有相同最大压缩大小的块的任何其他数据阵列相同的一个或多个子块配置。
59.在特别优选的实施方案中,存在系统使用和支持的多个特定的、优选选定的、优选预定义的最大压缩块大小,其中每个这种允许的最大压缩块大小具有其自己的对应的特定的、优选预定义的一个或多个子块配置,每当使用该块大小时都使用该一个或多个子块配置。例如,并且优选地,系统可支持以下中一个或多个,并且优选地多个,并且优选地所有的最大压缩块大小:48、96、192、320、384和640字节,然后每个相应的块大小具有其自己的一个或多个对应的子块配置,每当要压缩和存储该大小的块时都使用该一个或多个对应的子块配置。
60.应当理解,该系统也可并且优选地确实也使用和支持不需要并且优选地不以本发明的特定方式处理的其他块大小,诸如为2的幂的块大小,例如32、64、128、256、512和1024
字节块。(此类块大小将已经与存储器事务边界对齐,并且因此不需要以本发明的特定方式来处理。)
61.当然,其他布置将是可能的。
62.给定存储器分配大小的子块配置(分布)可以是实现期望存储器分配大小的任何合适和期望的配置。这将并且优选地确实取决于存储器分配的大小(即,块可能需要的最大存储器大小)和子块的相应大小。
63.在一个优选的实施方案中,至少对于一些最大压缩块大小,存储器分配被分成具有第一较大大小的一个(并且仅一个)(单个)子块和具有第二较小大小的一个(并且仅一个)子块,即,使得存储器分配将仅包括两个子块,一个较大大小的子块和一个较小大小的子块。
64.在其他实施方案中,至少对于一些最大压缩块大小,存在一个以上特定大小的子块。在这种情况下,优选地存在一种大小的单个子块,并且然后存在另一种大小的多个(例如,并且优选地两个)子块。在这种情况下,优选地存在多个(例如两个)较大大小的子块,并且仅存在单个较小大小的子块。
65.可以任何合适和期望的方式来选择和确定用于存储器分配的相应子块的大小。存储器分配的较大子块大小优选地是用于存储器分配的较小大小子块的整数倍。优选地,在子块的大小之间存在2的幂的关系。最优选地,每个第一较大大小子块是第二较小大小子块的大小的两倍或四倍。
66.子块的大小应当并且优选地至少基于它们构成的存储器分配大小(因为子块的总和应当并且优选地确实等于所讨论的总存储器分配)。
67.子块的大小优选地也基于由所讨论的图形处理器和图形处理系统支持的最小(有效)存储器事务大小,并且基于避免跨越存储器通道边界的任何最大(有效)事务大小。为了便于解释,本文将这些称为最小/最大事务大小。然而,应当理解,这些可能并非是严格的限制,而是可由所讨论的图形处理器和图形处理系统有效处理的最小/最大事务大小。
68.在特别优选的实施方案中,如果数据阵列的块的最大压缩大小大于避免跨越存储器通道“条带”边界的最大存储器事务大小(即,将适合于单个存储器通道“条带”的事务的最大大小),则将数据块的存储器分配分成大小对应于最大事务大小的至少一个子块(存储器通道条带化大小(颗粒度)),和大小小于最大有效事务大小的至少一个子块(存储器通道条带化宽度)。在这种情况下(以及其他情况下),一个或多个较小大小的子块优选地等于最小事务大小或该最小事务大小的整数倍。
69.因此,在优选的实施方案中,如果对于具有大于n(例如,256)字节的最大可能压缩大小的数据阵列的块,最小(有效)存储器事务大小为m(例如,64)字节,并且避免跨越存储器通道边界的最大事务大小(存储器通道条带化(交织)颗粒度)为n(例如,256)字节,则用于块的存储器分配将被分成大小为n(例如,256)字节的至少一个子块,和大小为m或2m(例如64或128字节)的至少一个较小子块。
70.如果数据阵列的块的最大压缩大小小于由图形处理系统支持的最大(有效)事务大小(存储器通道条带化颗粒度),则较大子块大小优选地为最小事务大小的大小、该最小事务大小的整数倍、或该最小事务大小的2分之一的幂、和/或最大事务大小(存储器通道条带化大小)的2分之一的幂,其中较小子块大小则是较大子块大小的2分之一的幂,并且优选
地是其一半。
71.因此,在优选的实施方案中,如果对于具有小于n(例如,256)字节的最大压缩大小的数据阵列的块,最小存储器事务大小为m(例如,64)字节,并且避免跨越存储器通道条带化边界的最大事务大小(存储器通道条带化(交织)大小)为n(例如,256)字节,则用于块的存储器分配将被分成大小为n/2、n/4或n/8(例如,128、64或32)字节的至少一个较大子块,和大小为m、m/2或m/4(例如64、32或16字节)的至少一个较小子块。
72.当然,其他布置将是可能的。
73.在一个优选的实施方案中,用于数据阵列的块的存储器分配包括一组连续的存储器地址。因此,在这种情况下,构成数据块分配的每个子块将被布置在连续的存储器地址处。因此,在实施方案中,被分配用于存储数据块的存储器区域是连续的存储器区域。
74.然而,这不是必需的,并且在其他实施方案中,构成数据阵列的块的存储器分配(和存储器区域)的相应子块彼此不连续(即,不在连续的存储器地址处,而是在存储器地址空间中彼此分离)。
75.因此,一般来讲,被分配用于存储数据块的存储器区域可包括多个子区域,这些子区域可彼此连续或可彼此不连续(在存储器地址空间中)。就这一点而言,各种布置将是可能的。
76.在优选的实施方案中,给定数据阵列的块的所有存储器分配占用存储器地址的连续序列(范围)(但如上文所讨论的,各个块可被分配该地址范围内的非连续地址)。然而,如果需要,也可以使用于数据阵列的至少一些块的存储器分配彼此分离(使用于数据阵列的块的存储器分配不(以其他方式)占用存储器地址的连续序列(范围))。
77.对于数据阵列的块,存储器中的较大和较小大小的块的顺序(它们在块的存储器分配中的顺序(在存储器地址空间中))对于数据阵列的每个块可以是相同的(例如,较大大小的一个或多个块始终在较小大小的一个或多个块之前(反之亦然)(并且在一个优选的实施方案中是这种情况))。
78.例如,对于数据阵列的多个(例如4个)块的相应集合,可存在较大大小块的(优选连续的)序列,后跟(在存储器地址空间中)数据阵列的多个(例如4个)块的该集合的较小大小子块的(优选连续的)序列,其中针对数据阵列的多个块的后续集合重复该模式(即,对于数据阵列的块的下一集合(例如4个),后跟较大子块的集合,对于数据阵列的块的该下一集合,后跟较小大小子块的集合,等等)(并且在一个优选的实施方案中是这种情况)。这在较大子块是较小子块大小的四倍的情况下是优选的。
79.然而,对于数据阵列的块,存储器中较大和较小大小块的顺序可(并且在其他实施方案中确实)对于数据阵列的不同块而不同。例如,并且在一个实施方案中,数据阵列的每个偶数编号的数据块可在较小子块之前具有较大子块,但每个奇数编号的块在其较大子块之前具有其较小子块(反之亦然)(在存储器地址空间中)。这在较大子块是较小子块大小的两倍的情况下是优选的。
80.因此,在一个优选的实施方案中,较大和较小子块的顺序对于数据阵列的不同块而变化,且优选地对于正被存储的数据阵列的连续块而交替。在优选的这种实施方案中,对于数据阵列的第一块,存在后跟较小子块的较大子块,对于数据阵列的第二块,后跟较小子块,并且然后是较大子块,对于数据阵列的第三块,后跟较大子块和较小子块,对于数据阵
列的第四块,后跟较小子块和较大子块,等等(反之亦然)。
81.用于数据阵列的块的存储器分配的给定子块应当并且优选地确实包括连续的存储器地址序列(连续的存储器地址范围)(但如上文所讨论的,用于数据阵列的给定子块的存储器分配(区域)的相应子块可不必在存储器地址空间中彼此连续)。因此,用于数据阵列的块的存储器分配的每个子块将占用连续的地址范围。
82.在特别优选的实施方案中,用于数据阵列的相应块的子块的地址范围被设置为与所讨论的系统的任何存储器访问约束兼容。因此,用于子块的地址范围优选适当地与任何最小(有效)存储器事务大小边界对齐,并且相应地,与任何最大(有效)存储器事务大小(存储器通道条带化(交织))边界对齐。
83.因此,在特别优选的实施方案中,用于数据阵列的相应块的相应子块的地址范围是基于将不跨越存储器通道边界的最大存储器事务大小并且优选地根据其来设置的,以便与任何存储器通道边界对齐,使得子块的存储器事务将不跨越存储器通道边界。
84.因此,在优选的实施方案中,如果子块大小对应于将不跨越通道条带化边界的最大存储器事务大小(存储器通道条带化(交织)大小),则该(和每个这种)子块被分配与用于完整“通道”事务的存储器地址对齐的一组存储器地址(即,以便不跨越存储器通道条带化边界)。
85.相应地,如果存储器分配子块大小小于存储器通道条带化大小(颗粒度),则优选地,将数据阵列的相同和/或不同块的多个完整的这种子块完全分配在将落入相同存储器通道事务内的存储器地址空间内,使得实际上,单个存储器通道事务的地址空间将包括(完整(并且仅完整))多个此类子块,例如并且优选地来自数据阵列的多个不同块中的每个块。
86.例如,如果正在使用具有存储器通道条带化大小的一半大小的子块,则优选地在相同的存储器通道地址范围内分配来自数据阵列的两个不同块的两个此类子块。相应地,如果正在使用存储器通道地址条带化颗粒度的四分之一大小的子块,则优选地在存储器通道的地址宽度上布置四个此类子块,优选地来自数据阵列的四个不同块。
87.因此,在优选的实施方案中,用于整数个数据阵列的块的存储器分配优选被相应地分配给整数个存储器通道(整数个存储器通道的地址范围)。例如,如果数据阵列的每个块具有基本上对应于一个半存储器通道的存储器分配,则用于数据阵列的两个块的存储器分配优选地“占用”三个存储器通道。相应地,如果数据阵列的每个块的分配基本上占用一又四分之一个存储器通道,则数据阵列的四个块优选地跨五个存储器通道分配。当然,其他布置将是可能的。
88.在这种情况下,用于多个块的集合的“存储器通道”地址分配在一个实施方案中是连续的。在另一个实施方案中,它们是不连续的。
89.如上文所讨论的,在特别优选的实施方案中,对构成数据阵列的块的存储器分配的子块的存储器地址范围进行设置和选择,使得子块将不跨越(跨过)存储器通道地址边界。
90.相应地,在特别优选的实施方案中,对构成数据阵列的块的存储器分配的子块的存储器地址范围进行设置和选择,使得子块将(完全)占用整数个系统支持的最小(有效)大小存储器访问事务(即,使得子块地址范围不只是部分地填充(占用)系统的最小大小存储器访问事务)。
91.为了实现这一点,用于数据阵列的块的存储器分配的子块的存储器地址范围优选适当地与任何存储器通道(条带)地址边界对齐,并且/或者也与给定存储器通道内的任何最小(有效)大小存储器访问事务边界对齐。
92.例如,在适当的情况下,子块的开始部分优选地与存储器通道(条带)的第一地址对齐,并且在任何情况下,子块的开始部分与给定存储器通道(条带)内的最小大小存储器访问事务边界的开始部分对齐。
93.用于子块的地址范围与存储器通道地址配置和最小存储器访问事务大小的这种对齐可以任何合适和期望的方式来实现。
94.在特别优选的实施方案中,这通过在从基地址(其表示用于存储数据阵列的基地址)的相应偏移处开始每个存储器分配和/或子块来实现,其中该偏移被配置为将用于存储器分配和/或子块的存储器地址范围与任何存储器通道(条带)和/或最小存储器访问事务边界对齐。
95.在特别优选的实施方案中,存储器分配和/或子块的偏移基于数据阵列的块的索引和存储器通道(条带)的地址宽度和/或所讨论的系统的最小存储器访问事务的大小。
96.因此,在优选的实施方案中,数据阵列的块以特定序列顺序(例如,基于光栅顺序或morton顺序或任何其他合适的块顺序)被编索引(优选地从0开始)。在这种情况下,索引可跨越整个数据阵列,或者可用于整个数据阵列的块的相应子集并且在其内。例如,如果块的相应子集一起存储在定义的“编码容器”中,该编码容器在存储整个数据阵列的缓冲区内具有给定的开始地址,则块可以并且优选地在它们的块的相应子集内被编索引。
97.在这些情况下,对于给定块的存储器分配和/或存储器分配子块,从数据阵列的基地址(或从存储数据阵列的缓冲区内的“编码容器”的基地址)的存储器(地址)偏移优选随后至少部分地基于块索引(作为整体在数据阵列内或在数据阵列的块的相应子集中)来确定,并且优选地也适用于基于(例如,等于或等于存储器通道(条带)的地址宽度和/或所讨论的系统的最小(有效)存储器访问事务的大小的整数倍和/或总和)的(集合)(每块或每子块)存储器地址偏移。
98.例如,如果子块具有对应于存储器通道条带宽度的大小,则每个这样的“全通道宽度”子块优选地在基于块索引乘以存储器通道条带宽度(或存储器通道条带宽度的整数倍)的偏移处被存储。
99.如果子块具有小于存储器通道条带宽度(颗粒度)的大小,则优选地从与最小存储器事务大小对齐的给定存储器通道内的存储器地址(即,这样的存储器地址,其要么是通道的第一地址,要么在从最小(有效)存储器事务大小的整数倍的该开始地址的偏移处)开始存储那些子块。
100.因此,例如,如果存储器通道条带化(交织)宽度(颗粒度)为256字节并且最小(有效)存储器事务大小为64字节,则将优选地在存储器通道条带的地址宽度内从字节0、字节64、字节128或字节192开始存储小于256字节的子块。
101.因此,例如,对于128字节子块,一个这样的子块将从所讨论的存储器通道条带地址范围的地址0开始存储,而另一个128字节子块从地址范围内的128的偏移开始存储。相应地,对于大小为64字节的子块,一个子块(例如,对于数据阵列的第一块)将被存储在地址偏移0处,第二子块(例如,对于数据阵列的第二块)将被存储在从存储器通道条带的开始部分
的64的地址偏移处,第三子块(例如,对于数据阵列的第三块)将被存储在从存储器通道的开始部分的128的地址偏移处,并且第四子块(例如,对于数据阵列的第四块)将被存储在从存储器通道的开始部分的192字节的地址偏移处。
102.就这一点而言,用于数据阵列的块的每块或每子块存储器(地址)偏移对于数据阵列的每个块可以是相同的,或者对于数据阵列的不同块可以是不同的。例如,第一偏移(将随后乘以块索引)可用于偶数编号的块,而不同的偏移(同样将随后乘以块索引)用于奇数编号的块。当然,其他布置将是可能的。
103.在优选的实施方案中,用于存储数据阵列的基地址(例如,开始地址)(将存储压缩数据阵列的缓冲区的开始地址)优选相应地被设置为与任何存储器通道条带化和/或最小存储器访问事务边界对齐。最优选地,用于存储数据阵列的基(开始)地址被设置为给定存储器通道(条带)地址范围的开始地址。因此,存储压缩数据阵列的缓冲区的开始部分(用于存储数据阵列的基地址)优选地在存储器通道条带化边界(如果有的话)上对齐。
104.从上文应当理解,至少在本发明的优选的实施方案中,如果存储器系统具有gra的最小(有效)存储器访问事务大小和将不跨越gbb的存储器通道条带化边界的最大事务大小,其中grb=n*gra,则对于具有m*gra的最大压缩大小的数据阵列的块,大小为m*gra的存储器分配将被分配给该块并且被分成大小为grb的一个或多个子块,和大小为k*gra的单个子块(其中k小于n(即,使得子块小于grb)),其中大小为grb的子块优选地在grb上对齐(并且被存储在连续区域中或与其他此类子块交织),并且来自数据阵列的若干块的大小为k*gra的较小子块优选地被组合在一起以形成在grb上对齐的较大的存储器单元。来自数据阵列的不同块的较小子块优选地各自被分配连续区域,其中来自不同块的子块被密集地打包。
105.当然,其他布置将是可能的。
106.可通过所讨论的系统和/或处理器的任何合适和期望的元件、部件等来执行本发明方式的操作。例如,正在执行压缩的编码器(压缩编解码器)可能够操作以确定数据将存储在(例如,基于所提供的块索引)例如已由软件分配给数据阵列的整个存储器缓冲区内的地址。
107.在本发明中,数据阵列的块被压缩,并且然后压缩块被存储在为该块分配的存储器区域的一个或多个子块中。
108.用于在存储数据阵列的块之前对其进行压缩的压缩方案可以是任何合适和期望的(基于块的)压缩方案。优选地,其为可变速率压缩方案(即,未被约束为始终从给定大小的输入块产生相同大小的压缩块(即,不是固定速率压缩方案))(并且使得可独立于数据阵列的其他块来访问和使用数据阵列的各个块)。
109.压缩方案可以是无损的或有损的,视情况而定。
110.压缩方案可例如包括本技术人先前提出的压缩方案中的一种压缩方案,例如,如us 2012/0281007、us 2013/0036290或us 2013/0198485中所描述的,其全部内容以引用方式并入本文。
111.该系统和装置可仅支持单个压缩方案(然后始终使用),或者可存在多个可用的压缩方案,其中用于给定数据阵列的压缩方案然后在使用中被选择(和可选择)。
112.一旦已经压缩了数据块,就将该块的压缩版本存储在该块的存储器分配中。就这一点而言应当理解,根据压缩块的大小,将需要分配给该块的存储器区域的全部或少于全
部的子块来存储压缩块。同样地,当被压缩时(至少当正在使用可变速率压缩方案时),数据阵列的不同块可具有不同的大小,并且因此用于给定数据阵列的不同压缩块可使用它们相应存储器分配的子块的不同组合。
113.因此,在特别优选的实施方案中,本发明的方法包括(并且编码器相应地被配置为)确定分配给数据阵列的块的存储器区域的哪些子块用于(在其中)存储数据阵列的压缩块。
114.在特别优选的实施方案中,至少基于压缩块的大小来确定用于存储压缩块的子块。最优选地,压缩块仅存储在包含压缩块所需的那么多子块中(使得在例如压缩块将完全适合于较大子块的情况下,不使用较小子块)。该过程优选地还操作为在使用(开始)另一个子块之前完全填充子块。
115.因此,在特别优选的实施方案中,用于存储压缩块的子块的数量基于压缩块的大小。如将在下文进一步讨论的,在特别优选的实施方案中,在存储压缩块时使用的子块的顺序(并且具体地,当存储压缩块时首先使用较大子块还是较小子块)也基于压缩块的大小来确定。
116.在特别优选的实施方案中,压缩块的大小被四舍五入到存储器分配的较小(最小)子块的大小或最小(有效)存储器事务大小(以较小者为准),并且然后当确定压缩块的存储器分配的哪个子块或哪些子块应该用于存储压缩块(以及如何)时,如此四舍五入的大小被用作压缩块的大小。
117.可以任何合适和期望的方式来确定和选择存储压缩块(压缩块的数据)的块的分配区域的特定子块。
118.在一个优选的实施方案中,使用“最大”子块优先策略来存储一个(和每个)压缩块,即,使得首先将压缩块存储在所分配存储器区域的一个或多个最大子块中,然后仅在需要时使用一个或多个较小子块。换句话讲,首先使用最大子块,并且只有当压缩块不适合于最大子块时,才使用较小子块。
119.因此,在这种情况下,如果压缩块将适合于数据块的存储器分配的单个较大子块,则将仅使用该单个较大子块,而任何其他较大子块和用于存储器分配的较小子块都不用于存储压缩块。同样地,如果在已经填充了较大子块后仍然存在压缩块的数据剩余,则另一较大子块(如果有的话)将被用于存储该块的数据,或者较小子块将被用于存储该块的数据(以此类推,在并非压缩块的所有数据都已被存储的情况下)。
120.在这种情况下,当存储一个(和每个)压缩块的数据时,子块顺序将是相同的,而与压缩块的大小无关(并且与阵列的所有块无关),即,与压缩块的大小无关,压缩块的数据将始终首先存储在用于分配的较大子块的开头(或第一较大子块)处,并且将从该第一较大子块开始跨分配存储(如果需要的话)。
121.在特别优选的实施方案中,不是简单地始终存储在分配的最大子块中开始的压缩块,而是使用“最佳拟合”方法,即确定和使用用于存储压缩块的较大和较小子块的最佳组合(即最有效地填充子块(在任何未填充子块中具有最小的备用空间))。于是,这可允许更有效地存储数据阵列的块(从存储器事务的角度来看)。因此,在这种情况下,不是简单地始终首先使用最大子块,而是应确定是否仅使用较小子块即可存储压缩块,并且仅在不是这种情况时,才使用较大子块。
122.因此,在优选的实施方案中,当在其分配的存储器区域的一个或多个子块中存储压缩数据块时,确定该压缩数据块是否将适合于具有所分配存储器区域的第二较小大小的子块,并且如果是,则仅将该数据阵列的压缩块存储在该较小子块中,但当确定该压缩块将不适合于单个较小子块时,从数据阵列的块的存储器分配的较大子块开始存储数据阵列的压缩块。
123.在这种情况下,如果在已经使用较大子块之后,压缩块的任何其他数据仍有待存储,则优选地重复该过程,即确定压缩块的任何剩余数据是否可仅被存储在较小子块中(并且如果是,则将其存储在较小子块中),但如果不是,则将其存储在较大子块中(对于任何剩余数据以此类推,直到已跨越数据阵列的块的所分配存储器区域的子块存储了整个压缩块为止)。
124.在这种情况下,用于压缩块的数据被存储在为数据阵列的块分配的存储器区域的子块中的子块顺序(以及使用哪个子块)将取决于压缩数据的大小。换句话讲,数据阵列的块的分配内的存储布局将取决于该块的压缩数据的大小。同样地,来自相同数据阵列的不同的块可使用彼此不同的子块顺序和/或不同的子块。
125.当确定用于存储数据阵列的压缩块的子块时,或者一旦已经确定了用于存储数据阵列的压缩块的所有子块,则应将压缩块(压缩块的数据)适当地存储在所确定的子块中。这可以任何合适和期望的方式来完成,例如,并且优选地,根据用于将数据存储在所讨论的数据处理系统的存储器中的正常方式(即,使用适当的存储器写事务,分布在适当的存储器通道内等)。
126.可以首先确定要使用的所有子块,并且然后例如依次(根据需要)将压缩块写出到这些子块,或者该过程可仅确定要使用的第一子块,写出到该子块,然后确定是否需要另一个子块,并且如果是,则确定下一个要使用的子块并写出到该子块,以此类推(如果需要的话)。
127.因此,在优选的实施方案中,根据需要,将确定用于压缩块的第一子块,将用于压缩块的数据写入该子块,并且如果存在用于压缩块的任何剩余数据,则确定用于压缩块的下一个子块,并且将数据写入该下一个子块,以此类推。
128.如果例如来自多个不同数据块的较小子块能够在给定存储器通道条带的地址范围内组合在一起,则在特定优选的实施方案中,编码过程和编码器操作以将来自数据阵列的不同块的多个子块组合为单个共同写事务,该写事务将所有那些子块写入相同存储器通道条带内的相同写事务中。这在编码器包括适当的本地存储装置的情况下可能特别适用,使得它可缓冲压缩块数据(并且具体地,要从数据阵列的不同块写入相应子块的压缩块数据),以便然后能够在相同单个事务中将那些子块一起写出到存储器。
129.如果数据阵列的压缩块的数据没有完全填充该块的存储器分配的子块,则尽管不需要用“假”数据来“填充”子块中的任何剩余空间,但在优选的实施方案中,当存储压缩块时,数据被“填充”到最小有效写事务大小。
130.对于(完全)未使用的块的存储器分配的任何子块,则该块的数据将不被存储在该子块中(但该子块应仍然保持可用,并且是该块的存储器分配的一部分(即,不应被例如用于存储其他块的数据(或其他方面)),因为如果存在对阵列的块的改变,则可能需要存储该块的改变版本,改变的块的压缩版本将需要更多的存储器空间,并且因此潜在地使用先前“备用”的一个或多个子块。
131.在特别优选的实施方案中,每个存储的压缩数据块也具有(已经为其生成和存储)相关联的标头,该标头包括用于从存储器检索所存储的块的信息。
132.优选地,对于阵列的每个(存储的)块,存在单独的(并且可单独修改的)标头。
133.所存储的压缩数据块的标头应当并且优选地被存储为与阵列的所存储的压缩数据块适当地关联。可以任何合适和期望的方式和布置来存储标头。优选地,多个标头被存储在一起,使得它们占用存储器通道“条带”。在优选的实施方案中,数据阵列的多个(例如所有)标头被一起存储在数据阵列的“标头缓冲区”中。当然,其他布置将是可能的。
134.块的标头优选地至少包括已经为所讨论的压缩块存储的数据大小的指示(例如,以字节为单位)。这将允许(例如)希望检索所存储的块数据的解码器确定块数据的位置。因此,在一个实施方案中,标头包括数据,该数据指示用于数据阵列的所存储的压缩块中的一些或全部压缩块(并且在一个实施方案中,每个压缩块)的数据的大小(在存储器中)。
135.因此,在本发明的特别优选的实施方案中,本发明的方法还包括(并且编码器被相应地配置为)还为数据阵列的一个(和每个)压缩块生成和存储用于数据阵列的压缩块的标头,该标头包括已经为压缩块存储的数据的大小的指示。
136.标头可简单地根据已经为压缩块存储的数据的总量来指示已经为压缩块存储的数据的大小。在优选的实施方案中,标头指示压缩块的多个较小子单元中每一者的大小(以便有利于随机读取访问压缩块内的子单元),然后将压缩数据块的总大小确定为标头中指示的子单元的所有大小之和。
137.在一个优选的实施方案中,数据块的标头不存储存储器中存储块的数据的位置的任何指示(指针或偏移),代替地,该位置是例如从作为整体的数据阵列的另外提供的基存储器地址以及例如所讨论的块的索引来确定的。在这种情况下,标头可包括标志,该标志可被设置为指示在压缩数据的两个位置之间的选择。
138.在特别优选的实施方案中,通过使用从该基存储器地址的适当的一个或多个偏移,从例如用于数据阵列或数据阵列的一部分的基存储器地址导出单个子块的存储器位置,其中该一个或多个偏移优选地基于所使用的子块配置和/或所讨论的块的索引。
139.在其他实施方案中,数据块的标头也存储存储器中存储块的数据的位置的指示。
140.在这种情况下,标头涉及的数据阵列的块的数据在存储器中的位置的指示可采取任何合适和期望的形式。例如,它可直接指示块数据的存储器位置(地址),或者可例如作为从一些其他(已知)存储器位置(地址)的偏移间接地指示。
141.在这些布置中,标头可包括用于数据阵列的块的存储器分配的每个相应子块的单独指针数据,但在优选的实施方案中,标头包括指向用于数据阵列的块的存储器分配的存储器中的基(例如,开始)位置(基(例如,开始)地址))的指针数据,然后所述分配的各个子块的位置从该基(例如,开始)存储器位置被导出。
142.在特别优选的这种实施方案中,通过使用从该基位置的适当的一个或多个偏移,从基“存储器分配”位置导出单个子块的存储器位置,其中该一个或多个偏移优选地基于所使用的子块配置和/或所讨论的块的索引。
143.如果需要,数据块的标头也可用于存储其他信息。例如,标头可用于指示“特殊情况”块。例如,如果块中的所有数据元素具有相同的值,则标头可存储标志以指示该值以及
公共数据值。
144.在优选的实施方案中,系统支持对块使用两个存储器分配,并且然后使用标头来指示两个分配中的哪一个分配当前正用于该块。这将允许用块的新版本来更新未使用的分配,然后改变标头以指示该新分配,从而降低读取操作使旧标头与新压缩数据混合的风险。
145.当然,标头的其他布置也是可能的。
146.可以任何合适和期望的方式来触发本发明方式的操作,从而以本发明的方式压缩和存储数据阵列。这优选地通过向编码过程(编码器)提供适当的命令(信号)以及适当的参数以使得编码和存储操作以期望的方式执行来完成。
147.在特别优选的实施方案中,编码过程(编码器)在压缩未压缩数据阵列时应当使用的编码参数和/或属性被传送到编码过程和编码器。例如,并且在一个实施方案中,要使用的编码方案的指示被传送到编码过程和编码器。
148.在特别优选的实施方案中,要被压缩和存储的未压缩数据阵列的参数和/或属性也被或替代地,并且优选地也被指示给编码过程和编码器。所指示的参数和/或属性可以是任何合适的参数或属性,诸如数据表示参数和/或属性,诸如数据阵列的数据元素的格式(例如,它们是否是rgb、rgbα、yuv等),数据阵列的分量数,数据阵列的位数(每分量),数据是否以浮点/无符号/有符号整数格式表示等。
149.在特别优选的实施方案中,至少用于数据阵列的未压缩格式和要编码的块的大小(例如,根据块中的数据元素的数量)被传送到编码器和编码过程,因为这然后将允许确定数据阵列的块的未压缩大小(在存储器中)(以及因此将用于数据阵列的块的存储器分配的大小)。
150.在特别优选的实施方案中,基位置(存储器地址)(优选为开始存储器地址,数据阵列将在此处被存储)也被传送到编码器和编码过程。然后,编码器和编码过程优选地使用数据阵列的该基地址来确定用于数据阵列的每个块的每个存储器分配(以及构成存储器分配的子块)的存储器地址。
151.如上文所讨论的,用于数据阵列的给定块的存储器分配(以及用于那些分配内的各个子块)的存储器位置(地址)优选地通过使用从该基存储器地址的适当的一个或多个偏移而从所指示的基“数据阵列”存储器地址导出,其中该一个或多个偏移优选地基于所讨论的块的索引(以及要用于该存储器分配大小的存储器分配大小和子块配置)。
152.在优选的实施方案中,为编码器(以及相应的解码器)提供以下信息以允许确定标头和存储器分配子块的位置:存储所讨论的数据块及其标头的“编码容器”的基地址(在这种情况下,数据阵列的整个存储装置优选地被分成多个“编码容器”,它们都具有相同的布局(在相同的缓冲区内),每个都包含多个数据块及其标头);数据块的索引(在编码容器内);数据元素(例如,像素)格式(例如,ra8g8b8a8);和必要的编码参数(例如,未压缩数据块的大小,压缩是有损还是无损等)。
153.相关编码信息可以任何合适和期望的方式被传送到编码器和编码过程。在一个优选的实施方案中,其作为所讨论的数据阵列的元数据(诸如一个或多个描述符)的一部分被提供。
154.当然,其他布置将是可能的。
155.从上文应当理解,虽然在本发明中,通常对于给定的数据阵列,数据阵列的块将被
分配包括具有不同大小的子块的相应存储器分配,但存储器分配和构成这些分配的子块的实际配置将根据数据阵列的格式和被编码的块的大小(每个块的数据元素的数量)而不同。相应地,存储器分配和子块的不同配置可用于不同的数据阵列。
156.因此,根据数据阵列的格式和要存储的块的大小(每个块的数据元素的数量),将存在并且优选地存在可使用的多个不同的存储器分配和子块配置。
157.因此,本发明的编码器和编码过程优选地支持多个不同的(预定义的)存储器分配和子块配置,并且能够操作以根据数据阵列的格式和/或要存储的块的大小在这些不同的配置之间进行选择。(如上文所讨论的,在优选的实施方案中,至少数据阵列的未压缩格式和要存储的块的大小在编码过程中被传送到编码器。编码器和编码过程相应地优选能够操作,以针对所指示的未压缩数据阵列格式和块大小选择和使用适当的存储器分配和子块配置。)
158.因此,在特别优选的实施方案中,本发明的编码器和编码过程支持多个不同的(预定义的)存储器分配和子块配置,每个都与各自不同的未压缩数据阵列格式和块大小相关联,并且操作以基于数据阵列的未压缩格式以及要压缩和存储的块的大小来选择(并且然后使用)所定义的存储器分配和子块配置中的一者。
159.相应地,可能存在不需要(并且相应地优选不使用)以本发明的方式进行操作的数据阵列格式,诸如其针对期望块大小(每个块的数据元素的数量)的未压缩格式与最小(有效)存储器事务大小和/或与系统支持的存储器通道条带化颗粒度完全对齐(适合)的数据阵列。例如,可简单地使用与适当数量的存储器通道匹配的分配,来存储其中数据阵列的相应块将具有与存储器通道条带化宽度(或该存储器通道条带化宽度的某个整数倍)匹配的最大压缩大小的数据阵列格式,并且因此对于此类数据阵列格式不需要使用具有本发明的特定配置的存储器分配。
160.因此,在特别优选的实施方案中,本发明并不用于可能将要被存储的所有数据阵列,而是在存储数据阵列时选择性地使用,例如并且优选地取决于数据阵列的格式和正被存储的块大小。相应地,当存储数据阵列时,编码器优选地能够操作并且被配置为以本发明的方式选择性地操作,同样优选地取决于数据阵列的格式和正被存储的块大小。
161.虽然上文已经具体参考存储数据阵列的数据描述了本发明,但如本领域的技术人员应当理解的那样,本发明还扩展到读取(和解压缩)已经以本发明的方式存储的数据阵列的数据。
162.因此,在特别优选的实施方案中,本发明的方法还包括(并且装置被相应地配置为):从存储器读取数据阵列的所存储的压缩块;使用(可变速率)压缩方案来解压缩数据阵列的所存储的块;以及提供数据阵列的解压缩块以供使用(例如,通过将其以其未压缩的形式存储在诸如存储器或高速缓存的适当存储装置中,将其提供给显示器以供显示,将其提供给另一处理器以供处理等)。
163.相应地,根据本发明的另一方面,提供了一种从数据阵列的块的压缩版本提供数据阵列的块的未压缩版本的方法,该数据阵列的块的压缩版本已经使用压缩方案压缩并且已经存储在被分配用于存储压缩块的存储器区域的一个或多个子块中,所分配的存储器区域对应于当使用压缩方案压缩时数据阵列的块的最大可能大小,并且被分成多个存储器分配子块,该多个存储器分配子块包括具有第一较大大小的至少一个子块和具有第二较小大
小的至少一个子块,当使用压缩方案压缩时,用于分配的子块一起提供对应于数据阵列的块的最大可能大小的存储器分配;
164.所述方法包括:
165.确定用于数据阵列的块的存储器分配的哪个子块或哪些子块已被用于存储压缩块;
166.从存储器读取所确定的一个或多个子块以获得数据阵列的压缩块;
167.使用压缩方案解压缩数据阵列的压缩块;以及
168.提供数据阵列的解压缩块以供使用。
169.根据本发明的另一方面,提供了一种用于从数据阵列的块的压缩版本提供数据阵列的块的未压缩版本的装置,该数据阵列的块的压缩版本已经使用压缩方案压缩并且已经存储在被分配用于存储压缩块的存储器区域的一个或多个子块中,所分配的存储器区域对应于当使用压缩方案压缩时数据阵列的块的最大可能大小,并且被分成多个存储器分配子块,该多个存储器分配子块包括具有第一较大大小的至少一个子块和具有第二较小大小的至少一个子块,当使用压缩方案压缩时,用于分配的子块一起提供对应于数据阵列的块的最大可能大小的存储器分配;
170.该装置包括:
171.子块确定电路,该子块确定电路被配置为确定用于数据阵列的块的存储器分配的哪个子块或哪些子块已被用于存储压缩块;
172.读取电路,该读取电路被配置为从存储器读取所确定的一个或多个子块以获得数据阵列的压缩块;
173.解码电路,该解码电路被配置为使用压缩方案解压缩数据阵列的压缩块;以及
174.输出电路,该输出电路被配置为提供数据阵列的解压缩块以供使用。
175.如本领域的技术人员应当理解的那样,本发明的这些方面和实施方案视情况而定可以并且优选地确实包括本文所述的本发明的优选的和任选的特征中的一个或多个或所有特征。
176.因此,例如并且优选地,优选地基于存储器中压缩块的大小来确定已经用于存储压缩块的子块。在优选的实施方案中,存储器中压缩块的大小至少用于确定有多少存储器分配的子块已被用于存储压缩块。
177.存储器中压缩块的大小可简单地用于确定已经使用了多少子块来存储压缩块,其中子块始终以特定的、优选选定的、优选预定的子块顺序被读取(最多至要读取的所确定的子块的数量)(并且在一个实施方案中就是如此操作的)。在这种情况下,如上文所讨论的,解码过程将优选地首先读取较大子块,并且如果压缩块的指示大小大于最大的第一子块,则仅读取另外的子块。
178.在其他实施方案中,压缩块的指示大小也用于确定首先读取哪个子块(即,而不是始终以预定顺序读取子块)(即,并且优选地,首先读取较大子块还是较小子块),并且在适当的情况下,根据需要确定接下来读取哪个子块,以此类推。
179.如上文所讨论的,存储器中压缩块的大小优选被适当地传送到解码器,例如,并且优选地,作为与压缩块相关联的标头的一部分。因此,解码过程(和解码器)将优选地读取与压缩块相关联的标头,并且从其确定压缩块的压缩数据的大小,并且然后使用压缩数据的
指示大小来确定需要为压缩块读取多少子块和哪些子块。
180.因此,在特别优选的实施方案中,解码过程包括(并且解码器被配置为):
181.读取数据阵列的压缩块的所存储标头,并且从其确定数据阵列的所存储压缩块的大小;
182.使用数据阵列的压缩块的所指示压缩大小,来确定用于压缩块的数据被存储在的数据阵列的压缩块的存储器分配的一个或多个子块;
183.从存储器读取所确定的一个或多个子块;
184.从子块解压缩所读取的数据以生成数据阵列的块的未压缩版本;以及
185.提供数据阵列的块的未压缩版本以供使用。
186.就这一点而言应当理解,解码过程将基于压缩块的指示大小仅读取所需数量的子块。将不读取任何“空”子块。同样地,在优选的实施方案中,当解压缩读取的压缩块时,仅来自子块的所需指示数据被用于该解压缩操作。
187.在特别优选的实施方案中,也基于数据阵列的未压缩格式和数据阵列的块的大小(根据块中存在多少数据元素)来确定要为压缩数据块读取的子块。如上文所讨论的,该信息将设置并且允许确定块的未压缩大小,并且因此相应地确定存储器分配的大小和该存储器分配内的子块配置(然后解码器和解码过程可将该信息优选地与压缩块的大小一起使用以确定哪些子块将被用于存储压缩块)。
188.因此,在优选的实施方案中,基于数据阵列的未压缩格式和数据阵列的块的大小(即,在块中存在多少数据元素)以及存储器中的压缩块的大小来确定要为压缩数据块读取的子块。
189.在特别优选的实施方案中,解码器和解码过程也操作并且被配置为确定所需一个或多个子块的一个或多个存储器地址。这可以任何合适且期望的方式进行。例如,可为解码器和解码过程提供存储器地址的(直接)指示,例如用于数据阵列的压缩块的存储器分配。
190.在特别优选的实施方案中,所需一个或多个子块的存储器地址基于例如作为整体的数据阵列的基存储器地址,以及基于一个或多个存储器偏移,该一个或多个存储器偏移是基于要解压缩的数据阵列的块的索引(例如在所讨论的数据阵列内)确定的。在这种情况下,解码器和解码过程优选地使用块索引,以及特定的、优选选定的和优选预定的一个或多个存储器地址偏移(例如,并且优选地,针对所讨论的存储器分配大小),来确定从将存储所需一个或多个子块的基存储器地址的偏移(并且然后将继续从所确定的一个或多个地址读取子块)。
191.在这种情况下,所需一个或多个偏移可以并且优选地基于数据阵列的未压缩格式和数据阵列的块的大小(根据数据元素的数量)来确定(如上文所讨论的,其可被适当地传送到解码器和解码过程(因为未压缩格式然后将确定存储器分配的大小和已经用于数据阵列的块的子块的配置)。块索引优选被适当地传送到解码器和解码过程,例如,并且优选地作为触发解码操作的命令的一部分或与之相关联。
192.当然,其他布置将是可能的。例如,数据阵列的块的标头也可传送信息,该信息指示并且/或者可用于确定存储器分配的存储器地址和/或数据阵列的压缩块的存储器分配的各个子块的存储器地址)。
193.一旦已经确定了已用于存储数据阵列的压缩块的子块(以及它们在存储器中的位
置),则从存储器读取一个或多个子块(压缩块)(压缩块的数据)。这可以任何合适和期望的方式来完成,例如,并且优选地,根据用于从所讨论的数据处理系统中的存储器读取数据的正常方式(即,使用适当的存储器读事务,分布在适当的存储器通道内等)。
194.一旦已经确定并且读取了存储压缩块的一个或多个子块,就解压缩该压缩块。
195.用于解压缩数据阵列的块的压缩方案将并且优选地确实对应于用于压缩该块的压缩方案。
196.同样,解码器和解码过程可仅支持单个压缩方案(然后始终使用),或者可存在多个可用的压缩方案,其中用于给定数据阵列的压缩方案然后在使用中被选择(和可选择)。
197.一旦数据阵列的块已被解压缩,则提供解压缩块以供使用。如上文所讨论的,这可包括例如以其未压缩的形式将其存储在诸如存储器或高速缓存的适当存储装置中,将其提供给显示器以供显示,将其提供给另一处理器以供处理等。这可以用于所讨论的处理器和系统的正常方式并且根据数据阵列的预期用途来完成。
198.虽然上文已经具体参考关于数据阵列的单个压缩块的处理描述了解码和解码过程,但如本领域的技术人员应当理解的那样,优选地对于给定数据阵列的多个块,例如对于数据阵列的所有块(其中需要整个数据阵列)重复该过程。然而,例如在是图形纹理的情况下,可能仅需要数据阵列的一些而不是所有块,并且因此不必解压缩整个数据阵列,除非有此需要。
199.可以任何合适和期望的方式,来触发以本发明的方式读取和解压缩数据阵列的所存储的块的操作。这优选地通过向解码过程(解码器)提供适当的命令(信号)以及适当的参数以使得读取和解码操作以期望的方式执行来完成。(提供给解码操作的参数应当并且优选地与用于编码操作的参数相同或至少与之对应。)
200.优选地,至少将数据阵列和待解码的数据阵列的一个或多个块的指示(例如,并且优选地,一个或多个块的索引)提供给解码过程和解码器。
201.在特别优选的实施方案中,解码过程(解码器)在解压缩数据阵列的压缩块时应当使用的解码参数和/或属性被传送到解码过程和解码器。例如,并且在一个实施方案中,要使用的解码方案的指示被传送到解码过程和解码器。
202.在特别优选的实施方案中,已被压缩和存储的未压缩数据阵列的参数和/或属性也被或替代地,并且优选地也被指示给解码过程和解码器。所指示的参数和/或属性可以是任何合适的参数或属性,诸如数据表示参数和/或属性,诸如数据阵列的数据元素的格式(例如,它们是否是rgb、rgbα、yuv等),数据阵列的分量数,数据阵列的位数(每分量),数据是否以浮点/无符号/有符号整数格式表示等。
203.在特别优选的实施方案中,至少用于数据阵列的未压缩格式和要解码的块的大小(根据它包含多少数据元素)被传送到解码器和解码过程,因为这然后将允许确定数据阵列的块的未压缩大小(以及因此用于数据阵列的块的存储器分配的大小)。
204.在特别优选的实施方案中,基位置(存储器地址)(优选为开始存储器地址,数据阵列在此处被存储)也被传送到解码器和解码过程。然后,解码器和解码过程优选地使用数据阵列的该基地址来确定用于数据阵列的块的存储器分配(以及构成存储器分配的子块)的存储器地址。
205.如上文所讨论的,用于数据阵列的给定块的存储器分配(以及用于那些分配内的
各个子块)的存储器位置(地址)优选地通过使用从该基存储器地址的适当的一个或多个偏移而从所指示的基“数据阵列”存储器地址导出,其中该一个或多个偏移优选地基于所讨论的块的索引(以及要用于该存储器分配大小的存储器分配大小和子块配置)。
206.该相关编码信息可以任何合适和期望的方式被传送到解码器和解码过程。在一个优选的实施方案中,其作为所讨论的数据阵列的元数据(诸如一个或多个描述符)的一部分被提供。
207.当然,其他布置将是可能的。
208.同样,解码器和解码过程优选地支持多个不同的(预定义的)存储器分配和子块配置,并且能够操作以根据数据阵列的格式和/或已存储的块的大小在这些不同的配置之间进行选择。(如上文所讨论的,在优选的实施方案中,至少数据阵列的未压缩格式和块的大小(根据每个块的数据元素的数量)被传送到解码器和解码过程。解码器和解码过程相应地优选能够操作,以针对所指示的未压缩数据阵列格式和块大小选择和使用适当的存储器分配和子块配置。)
209.因此,在特别优选的实施方案中,本发明的解码器和解码过程支持多个不同的(预定义的)存储器分配和子块配置,每个都与各自不同的未压缩数据阵列格式和块大小相关联,并且操作以基于数据阵列的未压缩格式以及已压缩和存储的块的大小来选择(并且然后使用)所定义的存储器分配和子块配置中的一者。
210.(同样地,如上文所讨论的,可能存在不使用本发明方式的操作的数据阵列格式。因此,当解压缩数据阵列的块时,解码器和解码过程优选地能够操作并且被配置为以本发明的方式选择性地操作,同样优选地取决于数据阵列的格式和正被存储的块大小。)
211.本发明还扩展到既以上文所讨论的方式存储数据阵列的数据,又在之后对其进行读取的方法和系统。
212.本发明的方法和装置可以任何适当的方式实现,例如在硬件或软件中,并且在任何适当的设备或部件中(并且被包括在其中)。
213.用于以本发明的方式存储数据的实际设备或部件将例如取决于所存储的数据阵列的性质。因此,例如,如果所存储的数据阵列是帧(帧缓冲区),则其可相应地(并且优选地)是以所需方式生成和存储数据的图形处理器。在是图形纹理的情况下,图形处理器可用于以本发明的方式生成和存储纹理。
214.因此,本发明还扩展到包括本发明的装置的图形处理器,以及扩展到操作图形处理器的方法,包括以本发明的方式存储数据阵列的图形处理器。
215.类似地,从操作的数据读取(解码)侧方面,例如,在是纹理数据的情况下,它可以是读取(解码)存储的数据阵列的图形处理器,并且在是用于显示的帧的情况下,它可以是读取(解码)存储的数据阵列的用于显示器的显示控制器。
216.在优选的实施方案中,本发明在图形处理器、显示控制器、图像信号处理器、视频解码器或视频编码器中实现,并且因此本发明还扩展到被配置为使用本发明的方法(以及正在使用本发明的方法)或包括本发明的装置或根据本发明的方法操作的图形处理器、显示控制器、图像信号处理器、视频解码器或视频编码器。
217.如从上文应当理解的那样,以本发明的方式操作的例如图形处理器可以并且优选地确实包括能够以本发明的方式操作的适当的编码器/解码器(编码/解码装置)。可存在单
个这样的编码器/解码器,或一个以上的编码器/解码器。
218.编码器/解码器可布置在例如处理器是其一部分的图形处理器和/或数据处理系统的整个系统架构内的任何合适和期望的位置中。例如,编码器/解码器可与系统的存储器相关联(并且用于对存储在存储器中的数据进行编码和/或对从存储器读取的数据进行解码)。附加地或另选地,编码器/解码器可与系统的一个或多个高速缓存相关联,例如作为主存储器与将处理数据的处理器或处理单元之间的高速缓存分级结构的一部分。因此,在这种情况下,可存在以本发明的方式操作的编码器/解码器,其能够操作以对从高速缓存写出到存储器的数据进行编码(压缩),并且相应地对从存储器读取并被存储在高速缓存中的数据进行解码(解压缩)。
219.当然,其他布置将是可能的。
220.如上文所讨论的,在优选的实施方案中,编码器/解码器包括(本地)存储装置,例如缓冲区,该存储装置被配置为例如在数据正被编码或解码时和/或在数据被写出之前存储要编码或解码的数据。因此,当数据正被编码/解码时、在数据被编写之前等,数据将被临时缓存在编码器/解码器中。
221.受制于需要执行与本发明相关的特定功能的任何硬件,此类图形处理器、显示控制器、图像信号处理器、视频解码器或视频编码器可另外包括图形处理器、显示控制器、图像信号处理器、视频解码器或视频编码器可包括的任何一个或多个或所有通常功能单元等。
222.存储(压缩的)数据块的存储器可包括任何合适的这种存储器,并且可以任何合适和期望的方式配置。例如,它可以是片上缓冲区,或者它可以是外部存储器。类似地,它可以是用于该目的的专用存储器,或者它也可以是用于其他数据的存储器的一部分。
223.在优选的实施方案中,数据阵列的块存储在整个数据处理系统的主存储器中。这可以是用于图形处理系统的主存储器(例如,其中存在用于图形处理器的单独存储器系统),或者是与数据处理系统的其他元件(诸如主机处理器(cpu))共享的数据处理系统的主存储器。
224.任何标头数据(标头)优选地存储在与数据阵列的块相同的物理存储器中,但这不是必需的。
225.当然,其他存储器布置将是可能的。
226.在一个实施方案中,数据处理系统和/或处理器还包括存储本文所述的数据和/或存储用于执行本文所述的过程的软件的一个或多个存储器和/或存储器设备,并且/或者与该一个或多个存储器和/或存储器设备通信。数据处理系统和/或处理器也可与主机微处理器通信,和/或与用于显示图像的显示器通信。
227.本发明优选地在数据处理系统中实现,该数据处理系统可包括例如一个或多个处理器,诸如图形处理器、显示控制器(显示处理器)、视频处理器等,它们可以本发明的方式对数据阵列进行操作;以及主机处理器(cpu)和存储数据阵列的一个或多个存储器。也可例如存在显示器,例如用于显示已经以本发明的方式存储的帧。
228.本发明可以在任何合适的系统诸如可合适地操作的基于微处理器的系统中实现。在一些实施方案中,本发明在基于计算机和/或微处理器的系统中实现。
229.可以任何期望且合适的方式来执行本发明的各种功能。例如,本发明的功能可以
根据需要以硬件或软件来实现。因此,例如,本发明的各种功能元件、阶段、单元和“装置”可包括能够操作为执行各种功能等的一个或多个合适的处理器、一个或多个控制器、功能单元、电路系统、电路、处理逻辑、微处理器布置等,诸如适当专用的硬件元件(处理电路)和/或可被编程为以期望方式操作的可编程硬件元件(处理电路)。
230.在这里还应注意,可在给定的处理器上并行地重复和/或执行本发明的各种功能等。同样,如果需要,各种处理阶段可共享处理电路/电路等。
231.此外,本发明的处理阶段或单元中的任何一者或多者或全部可体现为例如呈一个或多个固定功能单元(硬件)(处理电路/电路系统)的形式和/或呈可被编程为执行期望的操作的可编程处理电路的形式的处理阶段或单元电路/电路系统。同样,可将本发明的一个或多个处理阶段或单元电路/电路系统中的任何一个或多个电路/电路系统作为单独的电路元件提供给其他一个或多个处理阶段或单元电路/电路系统中的任何一个或多个电路/电路系统,并且/或者一个或多个处理阶段或单元电路/电路系统中的任何一个或多个电路/电路系统或全部可以至少部分地由共享的处理电路/电路系统形成。
232.本领域技术人员还将了解,本发明的所有所述实施方案可以视情况包括本文所述的任选特征中的任何一个或多个或所有特征。
233.根据本发明的方法可以至少部分地使用软件例如计算机程序来实现。因此,本发明的另外的实施方案包括:计算机软件,该计算机软件特别适于在安装在数据处理装置上时执行本文所述的方法;计算机程序元件,该计算机程序元件包括用于在该程序元件在数据处理装置上运行时执行本文所述的方法的计算机软件代码部分;和计算机程序,该计算机程序包括适于在该程序在数据处理系统上运行时执行本文所述的一个或多个方法的所有步骤的代码装置。数据处理系统可以是微处理器、可编程fpga(现场可编程门阵列)等。
234.本发明还扩展到包括这种软件的计算机软件载体,该软件在用于操作图形处理器、渲染器或包括数据处理装置的其他系统时致使与所述图形处理装置、所述处理器、渲染器或系统结合以执行本发明的方法的步骤。此类计算机软件载体可以是物理存储介质,诸如rom芯片、cd rom、ram、闪存存储器或磁盘,或者可以是信号,诸如通过导线的电子信号、光信号或无线电信号,诸如到卫星的信号等。
235.还将了解,不是本发明的方法的所有步骤都需要由计算机软件执行,并且因此本发明的另外的实施方案包括计算机软件和安装在计算机软件载体上以用于执行本文阐述的方法的步骤中的至少一个步骤的这种软件。
236.本发明因此可合适地体现为用于与计算机系统一起使用的计算机程序产品。此类具体实施可包括固定在有形非暂态介质上的一系列计算机可读指令,诸如计算机可读介质,例如磁盘、cd rom、rom、ram、闪存存储器或硬盘。其还可包括可经由调制解调器或其他接口设备、通过有形介质(包括但不限于光通信线路或模拟通信线路)、或者使用无线技术(包括但不限于微波、红外或其他传输技术)无形地传输到计算机系统的一系列计算机可读指令。该系列计算机可读指令体现了本文先前所述的功能的全部或部分。
237.本领域的技术人员将会理解,此类计算机可读指令可以多种编程语言编写,以与许多计算机架构或操作系统一起使用。此外,此类指令可使用目前或将来的任何存储器技术(包括但不限于半导体、磁性或光学技术)来存储,或者使用目前或将来的任何通信技术(包括但不限于光学、红外或微波技术)来传输。可以设想的是,此类计算机程序产品可作为
带有附随的印刷或电子文档(例如,收缩包装软件)的可移动介质进行分发,可与计算机系统一起预加载在例如系统rom或固定磁盘上,或者可经由网络(例如,互联网或万维网)从服务器或电子公告板进行分发。
238.现在将仅以举例的方式并参考附图来描述本发明的多个实施方案,其中:
239.图1示意性地示出了根据本发明实施方案的数据阵列的存储;
240.图2示出了本发明实施方案的存储器中的数据阵列的块的存储;
241.图3、图4、图5、图6和图7示出了本发明实施方案中的存储器分配布局;
242.图8示出了本发明实施方案中的解压缩块;
243.图9示意性地示出了可使用根据本发明存储的数据阵列的图形处理系统;以及
244.图10更详细地示出了数据编码器的实施方案。
245.在适当的情况下,类似的附图标号用于附图中的类似元件和特征。
246.现在将描述本发明的多个实施方案。
247.图1示意性地示出了在本发明的实施方案中存储数据阵列20的方式。
248.数据阵列20是含有多个数据元素(在阵列内的多个特定位置处含有数据条目)的二维数据阵列。数据阵列20可以是任何合适和期望的数据阵列,但是在图形处理的上下文中,它可能例如是纹理映射(即纹理元素(纹素)阵列)或表示要显示的帧的数据阵列(在这种情况下,该数据阵列可以是待显示的像素阵列)。在是纹理映射的情况下,数据阵列中的每个数据条目(位置)将表示适当的文素值(例如,颜色值的集合,诸如rgba、或亮度和色度、文素的值)。在是用于显示的帧的情况下,阵列中的每个数据条目(位置)将指示待用于在显示器上显示帧的颜色值(例如,rbg值)的集合。
249.如图1所示,为了将数据阵列20存储在存储器中,将数据阵列20分成多个非重叠、等大小和均匀的块21,每个块对应于数据阵列20的特定区域。例如,数据阵列的每个块21可对应于数据阵列20内的16
×
16元素(位置)的块(即,在是纹理映射的情况下的16
×
16纹素的块)。当然,其他布置将是可能的。
250.为了将数据阵列20存储在存储器中,为数据阵列分成的每个块21存储一组适当的“有效载荷”数据。该块“有效载荷”数据存储在“有效载荷”缓冲区(诸如纹理缓冲区或帧缓冲区)25的存储器中。
251.如图1所示,在本发明中,数据阵列20的每个块在有效载荷缓冲区25内具有对应的存储器分配26,其中将存储数据阵列的该块的数据。如图1所示,用于相应块的存储器分配26以基于数据阵列20的块的相应索引的顺序依次存储在有效载荷缓冲区25中(块按顺序,例如按光栅顺序,例如跨越数据阵列被编索引,以允许它们被识别)。
252.下文将更详细地描述有效载荷缓冲区中的这些存储器分配的组织,以及数据阵列的块的数据如何存储在本发明实施方案的其存储器分配中。
253.在本实施方案中,不是以其完整的原始形式存储数据阵列20,而是使用可变速率压缩方案对每个数据阵列块21进行编码,以给出原始数据的编码表示,该原始数据与其原始的未编码形式的数据相比具有(应该具有)减小的大小。这压缩了原始数据,从而使其存储和处理更有效。任何合适和期望的可变速率、基于块的编码(压缩)都可用于这种编码。
254.因此,在本实施方案中,数据阵列20的每个块在其被存储之前被编码和压缩,因此关于块21存储的数据是可被适当地解码以导出该块的数据条目的数据。
255.除了为数据20分成的每个块21在有效载荷缓冲区25中存储有效载荷数据之外,还为数据阵列20已经分成的每个块21存储标头数据块23。这些标头被存储在存储器的标头缓冲区24中。标头缓冲区24在存储器中的开始地址a处开始,并且标头23各自存储在标头缓冲区24内的存储器地址处,该存储器地址根据(基于)标头23所涉及的块21的索引(例如,在数据阵列内)来确定。
256.在本实施方案中,标头缓冲区24中的每个标头数据块23具有相同的固定大小,其对应于由其中待使用存储的数据阵列的数据处理系统使用的突发大小。这意味着标头数据块23具有可使用系统友好的突发大小而获取的大小。
257.每个标头23包含已经为所讨论的块存储的(压缩的)数据的大小的适当指示(以字节为单位)。
258.当然,标头的其他布置也是可能的。
259.标头缓冲区24和有效载荷缓冲区25可存储在所讨论的数据处理系统的任何合适的存储器中。因此,例如,它们可存储在片上存储器或外部存储器中,诸如数据处理系统的主存储器。在一个实施方案中,它们存储在相同的物理存储器中,但这不是必需的。
260.如上文所讨论的,在本实施方案中,要存储的数据阵列的每个块在有效载荷缓冲区25中被分配存储数据阵列20的(压缩的)块的对应的存储器分配26。现在将参考图2至图4更详细地描述本实施方案中用于数据阵列的相应块的存储器分配26的组织。
261.在本实施方案中,使用无损可变速率编码方案,并且为要存储的数据阵列的每个块分配对应于其未压缩形式的块的大小的存储器分配26。当使用无损可变速率压缩方案时,这有利于随机访问数据阵列的各个块。
262.因此,存储器分配的大小将取决于块的大小(根据块中数据元素的数量),以及块的每个数据元素的未压缩数据量(这将取决于数据元素的数据格式)。例如,r10g10b10α10数据元素的16
×
16块将具有640字节的未压缩(最大)大小,并且因此在这种情况下,每个块将具有640字节的存储器分配。
263.在本实施方案中,并且根据本发明,块的每个存储器分配被进一步分成多个存储器分配子块,该多个存储器分配子块包括至少一个较大大小的子块和至少一个较小大小的子块。在本实施方案中,块的每个存储器分配被分成n个大小为a的较大子块(其中n是大于0的整数)和一个大小为b的较小子块(即a》b)。
264.在本实施方案中,较大子块大小是较小子块大小的整数倍(即a=mb),并且优选是较小子块大小的两倍或四倍。
265.还将数据阵列的块的存储器分配细分为相应子块,以便尽可能地与所讨论的数据处理系统的任何存储器系统约束(并且具体地,任何存储器访问约束)兼容。具体地,存储器分配和用于存储器分配的子块配置被配置为与任何最小有效存储器事务大小(例如,并且优选地,对应于将在类似的单个存储器事务中被写入或读取的最小数据量)以及任何存储器事务交织边界兼容,诸如在存在到存储器的多个(例如,2个)独立通道的情况下可能出现,例如,存储器地址空间然后以交织格式在两个通道上被条带化。
266.在本实施方案中,考虑到这一点,配置存储器分配和用于数据阵列的块的存储器分配的子块,使得任何给定的子块都不应当跨越存储器通道交织边界,并且使得数据阵列的块的存储器事务将具有与跨越存储器通道的地址空间的分布对齐的地址。
267.例如,如果最小有效存储器事务大小为p字节,并且存在两个存储器通道,其中存储器通道地址交织(条带化)是基于每隔4p字节的地址块来进行的,则本实施方案中的存储器分配和子块配置被设置为针对以下存储器系统特性被(尽可能地)优化:最小有效存储器事务为p字节;事务不应跨越4p字节对齐边界;当可能时,事务将在4p字节上对齐地址和长度;以及当不可能在4p字节上对齐地址和长度时,事务将尽可能少和尽可能长。
268.遵循这些原则,并且假设最小有效存储器事务大小为64字节,其中存储器通道地址交织是基于256字节“条带”来进行的,本实施方案针对以下不同块大小使用以下子块配置:
[0269][0270]
对于给定数据阵列和未压缩块大小,上面的存储器分配子块配置将用于要存储的数据阵列的每个块。此外,存储器分配和那些存储器分配内的各个子块将被配置在存储器地址空间内,以便尽可能地与任何存储器通道地址和最小大小存储器事务边界对齐。
[0271]
这是通过将存储器分配和这些存储器分配内的子块存储在从存储数据阵列的缓冲区的基地址(其中缓冲区的基(开始)地址相应地与存储器通道地址边界对齐)的存储器偏移处来完成的,其中存储器地址偏移是基于例如数据阵列内的块的索引以及对应的每块或每块偏移来确定的,该每块或每块偏移被配置为将存储器分配和子块与适当的存储器通道和/或最小存储器事务边界对齐。在这方面用于本实施方案中支持的不同未压缩块大小的偏移将在下文进一步讨论。
[0272]
当在本发明的实施方案中块将要被压缩和存储时,该块的压缩数据将使用该存储器分配内的不同子块被存储在该块的有效载荷缓冲区存储器分配中。如本领域的技术人员应当理解的那样,可以是(并且典型地将是)这样的情况:压缩块可能未完全填充该块的存储器分配,使得例如存储器分配可能未填充该块的存储器分配的所有子块。因此,本实施方案操作以仅将块的压缩数据存储在存储该数据所需的存储器分配的那么多子块中。
[0273]
在本实施方案中,这是在“最佳拟合”的基础上完成的,即,对于压缩块是“最佳拟合”的一个或多个子块被用于存储压缩块。然后,这将最小化存储(并因此读取)压缩块所需的存储器事务,并且还将具有这样的效果:块的存储器分配内的存储布局(根据所使用的子块)将取决于该块的压缩数据的大小。它还将有利于跨越正被压缩和存储的不同块的较小子块的写入的潜在合并。
[0274]
为了实现这种“最佳拟合”操作,在本实施方案中,确定要为压缩块写入的数据是否大于存储器分配的较小子块的大小。如果不是,则将压缩块写入较小子块(并且完成块的写入),但如果是,则将压缩块的数据写入较大子块。如果还存在任何剩余数据,则重复该过程,直到已将压缩块完全写入存储器。
[0275]
图2示出了本发明实施方案中的这种操作。
[0276]
如图2所示,该过程将从要被编码和存储(步骤200)的数据阵列开始(步骤200)。然后将确定和选择数据阵列的适当存储器分配配置(基于数据阵列将分成的块的未压缩大小)(步骤201)。
[0277]
然后将通过首先使用期望的可变速率压缩方案压缩数据阵列的块(步骤203)来处理该块(步骤202)。然后将需要将该块的压缩数据(如图2所示,其将为cu_size字节)写入存储器分配(步骤204)。
[0278]
为此,首先将该块的压缩大小(cu_size)与用于该块的存储器分配的较小子块的大小进行比较(步骤205)。如果块的压缩大小不大于存储器分配的较小子块的大小,则将该块的压缩数据写入较小子块(步骤206),然后完成该压缩块的写入(步骤207)。
[0279]
(这里应当注意,一旦已经写入了块的所有压缩数据,就不写入该块的其他子块,但在该块将要被再次写入并且其压缩大小改变的情况下,它们被保留作为该块的存储器分配的一部分。)
[0280]
另一方面,如果在步骤205处确定块的压缩大小大于存储器分配的较小子块的大小,则代替地,将压缩数据写入分配的较大子块(步骤208)。
[0281]
然后确定压缩块的任何剩余数据的大小(步骤209),并且如果在已经填充了较大子块之后存在要写入的任何剩余数据,则重复该过程以确定用于存储压缩块的数据的下一个子块(步骤210)(以此类推,直到该块的所有压缩数据已经存储在块存储器分配的子块中)。
[0282]
一旦不存在要为压缩块存储的剩余数据,则结束该块(步骤207),然后该过程移动到另一个块(如果有的话)(步骤208)。对要为数据阵列存储的所有块重复此操作,直到要存储的所有块(例如,整个数据阵列)已存储在其各自的存储器分配中,此时完成数据阵列的存储(步骤212)。
[0283]
使用“最佳拟合”操作将压缩块写入存储器的过程可通过该伪代码来描述:
[0284][0285]
现在将更详细地描述本实施方案中用于不同未压缩数据阵列块大小的存储器分配和子块配置布局。
[0286]
图3示出了当存储具有640字节的未压缩大小的数据阵列的块时的实施方案。图3示出了用于两个640字节存储器分配32、33的存储器分配子块配置31(对于随后的640字节分配,将相应地重复该分配布置)。
[0287]
在这种情况下,如图3所示,数据阵列的给定块的640字节存储器分配被分成三个子块,即两个256字节子块和一个较小的128字节子块。如图3所示,对于偶数索引(编号的)块,分配从两个256字节子块开始,后跟128字节子块。对于奇数索引(编号的)块,分配从128字节子块开始,后跟两个256字节子块(按存储器地址顺序)。
[0288]
图3也示出了存储器分配的子块如何与存储器通道条带(颗粒)40对齐(并且跨越其分布)。
[0289]
图3相应地示出了用于块的存储器分配的相应子块的存储器地址偏移34(从数据阵列的有效载荷缓冲区的基(开始)地址)。每个子块占用连续的存储器地址范围,并且在这种情况下,为每个块分配连续的存储器区域(存储器地址范围)。
[0290]
具体地,偶数索引(编号的)块从偏移n*640开始存储,在地址中线性向上前进,直到整个块被存储(其中n是块索引),并且奇数编号的块从偏移n*640 128(例如,偏移768、2048、3328,对于n=1,3,5)开始存储,在地址中线性向上前进,直到块的结束(512字节)。如果块大于512字节,则最后一个128字节被存储在偏移n*640处。
[0291]
这确保尽可能多的块通过对齐的事务被访问。
[0292]
由此可以看出,每个子块将适当地与64字节的最小存储器事务大小和256字节的存储器通道地址宽度对齐(如上文所讨论的)。
[0293]
在这种情况下,当存储用于数据阵列的块(压缩块)的压缩数据时,存储器事务大小被四舍五入到下一个64字节的倍数(是最小存储器事务大小),并且然后按照“最佳拟合”方法将压缩块存储在用于该块的存储器分配的子块中。具体地,当(四舍五入的)压缩块占用128字节或更少时,则仅使用128字节子块。当压缩块大于128字节但小于256字节时,则仅使用一个(也是第一)256字节子块。当压缩块在256字节与384字节之间时,则使用第一256字节子块和128字节子块,以此类推。
[0294]
图3示出了这种布置中的两个压缩块的示例性子块使用和布局35,其中第一压缩块(cu0)占用320字节,并且第二压缩块(cu1)占用384字节。
[0295]
如图3所示,在这种情况下,对于第一320字节压缩块,该块的第一256字节被存储在该块的存储器分配的第一子块36中,而剩余的64字节37则被存储在该块的128字节子块中。对于占用384字节的第二块,该块的第一256字节被存储在该块的存储器分配的第一较大子块38中,并且然后剩余的128字节被存储在该块的较小的128字节子块39中。
[0296]
用于具有384字节的未压缩大小的数据阵列的块的存储器分配和布置将类似于图3所示的用于具有640字节的未压缩大小的块的布置,不同的是用于每个块的存储器分配将仅具有一个较大的256字节子块(和一个较小的128字节子块)。同样,事务大小将被四舍五入到下一个64字节的倍数,并且数据块的每个存储器分配将被分配连续的存储器区域。
[0297]
在这种情况下,偶数索引(编号的)(块)将具有从一个256字节子块开始,后跟128字节子块的存储器分配,而奇数索引(编号的)块具有一个128字节子块,后跟一个256字节子块(按存储器地址顺序)。
[0298]
因此,例如,块索引0将被分配字节0到383,其中256字节子块是字节0到255,并且
128字节子块是字节256到383。块索引1将被分配字节384到767,其中256字节子块是字节512到767,并且128字节子块在字节384到511处(对于索引序列中的后续块以此类推)。
[0299]
在这种情况下,同样,当对于压缩块仅需要存储64或128字节时,则仅使用128字节子块。当要为压缩块存储192或256字节时,则仅使用256子块,并且当要为压缩块存储320或384字节时,则使用256字节子块和128字节子块两者。
[0300]
如果数据阵列的块具有320字节的未压缩大小,则每个这样的块被分配320字节的存储器分配,包括一个较大的256字节子块和一个较小的64字节子块。由于这些存储器分配大小具有64的模256,使得一组四个块存储器分配将在256字节上对齐,因此每组四个块被分配1280字节的连续区域。
[0301]
在所分配的四个块组区域内,在一组4个块中具有索引n的块(假设块在组中被编索引为0、1、2、3)在n*256的偏移处被分配256字节的存储,并且在1024 n*64的偏移处被分配64字节的存储。因此,例如,在一组四个块中具有索引0的块在一组四个块的分配中将被分配字节0到255和1024到1087,块索引1将被分配字节256到511和1088到1151,块索引2将被分配字节512到767和1152到1215,并且块索引3在四个块的存储器分配区域中将被分配字节768到1023和1216到1279。
[0302]
图4示出了这种布置中的一组四个块的示例性存储器分配和子块布局50。因此,图4示出了四个320字节存储器分配的布置,每个存储器分配包括一个256字节的较大子块和一个64字节的较小子块。如图4所示,在这种情况下,首先按顺序分配每个块的较大子块,而每个块的较小子块一起存储在相同的存储器通道宽度57内。图4也示出了用于块的存储器分配的相应子块的存储器地址偏移58。
[0303]
当在这种布置中将压缩块存储在它们的存储器分配中时,存储器事务大小再次被四舍五入到下一个64字节的倍数,并且当为压缩块存储64字节时,则仅使用64字节子块。相应地,当要为压缩块存储128或256字节时,则仅使用256字节子块,但当要为压缩块存储320字节时,则使用该块的64字节子块和256字节子块两者。
[0304]
图4示出了这种布置中的一组四个块的存储器分配和子块使用,其中第一压缩块(cu0)保存192字节的数据,第二压缩块(cu1)保存64字节的数据,第三压缩块(cu2)保存320字节的数据,并且第四压缩块(cu3)保存256字节的数据。
[0305]
如图4所示,对于第一192字节压缩块(cu0),该块的192字节存储在该块的存储器分配的第一子块51中。不使用用于该块的较小子块52。
[0306]
对于第二64字节块(cu1),该块的64字节仅存储在该块的较小子块53中。
[0307]
对于第三320字节压缩块(cu2),使用该块的较大子块54和较小子块55两者来存储该块。对于第四256字节块(cu3),使用该块的较大子块56(的全部)来存储该块。
[0308]
如果数据阵列的块具有192字节的未压缩大小,则每个子块被分配192字节的存储器分配,包括一个较大的128字节子块和一个较小的64字节子块。因为这些存储器分配大小的一组四个块将在256字节上对齐,所以为每组四个块分配768字节的连续区域。
[0309]
在这种情况下,为每个块分配192字节的连续区域,包括较大的128字节子块和较小的64字节子块。子块被组织成使得128字节子块在分配内的128字节边界上对齐。分配的组织取决于块索引:
[0310]
对于被编号(被编索引)使得块索引模4为0的块(例如,块0、4、8等,其中分配偏移
为0、768、1536等),在分配中128字节块在偏移0处,并且64字节块在偏移128处;
[0311]
对于被编索引使得块索引模4为1的块(例如,块1、5、9等,其中分配偏移为192、960、1728等),在分配中128字节子块在偏移64处,并且64字节子块在偏移0处;
[0312]
对于被编索引使得块索引模4为2的块(例如,块2、6、10等,其中分配偏移为384、1152、1920等),在分配中128字节子块在偏移0处,并且64字节子块在偏移128处;
[0313]
对于被编索引使得块索引模4为3的块(例如,块3、7、11等,其中分配偏移为576、1344、2112等),在分配中128字节子块在偏移64处,并且64字节子块在偏移0处。
[0314]
在这种情况下,至少在256字节的存储器通道条带化颗粒度的情况下,对于被编号(被编索引)使得块索引模4为0的块(即,在存储器通道/条带内的0字节的偏移处开始)以及对于被编索引使得块索引模4为3的块(即,在存储器通道条带内的64字节的偏移处开始),完整的192字节存储器分配将适合于相同的存储器通道条带(将不跨越存储器通道条带(通道交织边界))。在这种情况下,对于那些块,存储器分配优选地被认为包括192字节的单个子块,其被使用而不管有多少数据要被存储到所讨论的块的存储器分配中。
[0315]
另一方面,对于被编索引使得块索引模4为1的块,以及对于被编索引使得块索引模4为2的块,使得块分配将跨越存储器通道交织边界,存储器分配被处理为包括较大的128字节子块和较小的64字节子块。在这种情况下,当将数据存储到存储器分配时,事务大小被四舍五入到下一个64字节的倍数,并且当存储64字节时,则仅使用64字节子块,当存储128字节时,则仅使用128字节子块,并且当存储192字节时,则使用128字节子块和64字节子块两者。
[0316]
可以看出,在这种情况下,虽然数据阵列的每个块将具有相同大小的存储器分配,但一些存储器分配将作为连续的“全大小”存储器分配(作为包括整个存储器分配的单个子块)被有效地处理和处置,而用于数据阵列的其他块的存储器分配(并且具体地,取决于所讨论的块序列中的块位置(索引))将以本发明的方式处置,即被处置为包括较大子块和较小子块。因此,用于数据阵列的块的存储器分配将被处理为包括存储器的单个连续子块,或者被处理为包括较大子块和较小子块,具体取决于块索引。
[0317]
图5示出了这种布置中的一组四个块的示例性存储器分配和子块使用,其中第一压缩块(cu0)保存64字节的数据,第二压缩块(cu1)保存192字节的数据,第三压缩块(cu2)保存128字节的数据,并且第四压缩块(cu3)保存192字节的数据。
[0318]
如果数据阵列的块具有96字节的未压缩大小,则每个子块被分配96字节的存储器分配,包括一个较大的64字节子块和一个较小的32字节子块。
[0319]
当存储具有96字节的未压缩大小的块时,存储器事务大小被四舍五入到下一个32字节的较大倍数,并且当存储32字节时,使用32字节子块,当存储64字节时,使用64字节子块,并且当存储96字节时,使用整个分配。
[0320]
图6示出了这种布置中的一组两个块的存储器分配和子块使用,其中第一压缩块(cu0)保存32字节的数据,并且第二压缩块(cu1)保存96字节的数据。图6示出了如何将子块和所存储的数据分配给相应的(64字节)高速缓存行(因为块的存储器分配适合于单个存储器通道条带)。
[0321]
如果数据阵列的块具有48字节的未压缩大小,则每个这样的块被分配48字节的存储器分配,包括一个较大的32字节子块和一个较小的16字节子块。
[0322]
在这种情况下,至少在64字节的最小有效存储器事务的情况下,对于被编号(被编索引)使得块索引模4为0的块(即,在高速缓存行内的0字节的偏移处开始)以及对于被编索引使得块模4为3的块(即,在高速缓存行内的16字节的偏移处开始),完整的48字节存储器分配将适合于相同的高速缓存行(将不跨越最小存储器事务(高速缓存行)边界)。在这种情况下,对于那些块,存储器分配优选地被认为包括48字节的单个子块,其被使用而不管有多少数据要被存储到所讨论的块的存储器分配中。
[0323]
另一方面,对于被编索引使得块索引模4为1的块,以及对于被编索引使得块索引模4为2的块,使得块分配将跨越高速缓存行边界,存储器分配被处理为包括较大的32字节子块和较小的16字节子块。在这种情况下,当存储具有48字节的未压缩大小的块时,存储器事务大小被四舍五入到下一个16字节的较大倍数。当存储16字节时,使用16字节子块,当存储32字节时,使用32字节子块,并且当存储48字节时,使用整个分配。
[0324]
图7示出了这种布置中的一组四个块的存储器分配和子块使用,其中第一压缩块(cu0)保存16字节的数据(但48字节被写入单个48字节子块中),第二压缩块(cu1)保存48字节的数据,第三压缩块(cu2)保存32字节的数据,并且第四压缩块(cu3)保存48字节的数据。图7示出了如何将子块和所存储的数据分配给相应的(64字节)高速缓存行(因为块的存储器分配适合于单个存储器通道条带)。
[0325]
在96字节块和48字节块的情况下,系统优选地在读取和写入这些块大小时使用高速缓存以提高效率(因为这些块大小不是最小有效存储器事务大小的倍数)。例如,当读取时,可使用高速缓存来确保当仅高速缓存行的一部分用于块时所获取的任何额外数据可用于后续块。当写入时,高速缓存可用于缓冲对高速缓存行的部分写入,并且允许将完整块写入存储器。
[0326]
在以本实施方案的方式对数据阵列20进行编码的操作中,适当配置和/或编程的处理电路将从存储器接收和/或获取表示数据阵列20的数据流,并且操作以将数据阵列20分成如上文所讨论的块,生成适当的标头数据块并将这些块存储在标头缓冲区24中,以及生成数据阵列的块的压缩版本并将数据阵列的块的那些编码版本的数据存储在存储器中的有效载荷缓冲区25中的适当的存储器分配和存储器分配的子块中。
[0327]
如果需要,对上述实施方案进行许多补充以及变化和修改将是可能的。
[0328]
例如,不是使用“最佳拟合”方法来确定在存储压缩块时使用存储器分配的哪些子块,而是可使用其他子块确定方案,诸如“最大第一”方法,其中始终首先使用存储器分配的最大一个或多个子块,并且仅当压缩数据不适合于可用的较大一个或多个子块时才使用较小子块。这也将最小化每个压缩块所需的存储器事务的数量。
[0329]
对于存储器约束也将可能的是,诸如最小有效事务大小和最大事务大小(存储器通道条带化宽度)分别不是64字节和256字节。例如,对于读取和写入也可存在不同的最小(有效)事务大小。如果存在不同的最小(有效)事务大小和最大(有效)事务大小,则应当相应地配置存储器分配内的子块中的存储器分配的地址对齐(如上文所讨论的)。
[0330]
同样地,虽然在本实施方案中,每个存储器分配被分成两个不同大小的子块,但如果需要,可使用三个或更多个不同大小的子块。例如,448字节的存储器分配可被分成一个256字节子块、一个128字节子块和一个64字节子块。
[0331]
在本实施方案中,当存在相同大小的多个子块时,首先使用具有最低地址的子块,
但实际上可使用任何顺序。同样地,如果需要,子块的分组可与上文已经描述的那些不同。例如,对于384字节存储器分配,不需要将256字节子块和128字节子块保持在一起。代替地,它们可以任何方便的方式分开放置。
[0332]
在优选的实施方案中,系统也支持除上述那些之外的其他未压缩块大小。例如,在优选的实施方案中,系统也支持256、512和1024字节的未压缩块大小(以及相应的存储器分配)。在这种情况下,分配只是被分配大小为256字节的子块(即不是大小不同的两个子块),它们与存储器通道边界适当地对齐。
[0333]
类似地,系统也优选地支持32、64和128字节的未压缩块大小,其同样优选地仅使用对应于存储器分配的大小的单个子块,并且其与最小存储器事务大小和存储器通道边界适当地对齐。
[0334]
上文主要描述了本实施方案中处理数据阵列并将其存储在存储器中以供使用的方式。当使用如此存储的数据阵列时,例如应用于待渲染的片段(其中所存储的数据阵列是用于图形处理的纹理映射),则所存储的数据阵列的读取和解码过程将实质上包括与上述存储和编码过程相反的过程。
[0335]
因此,解码设备(诸如图形处理器(例如,其中所存储的数据阵列是纹理映射)或显示控制器(例如,其中所存储的数据阵列是要显示的帧))将首先识别所关注(即,待解压缩)的数据阵列的一个或多个块,并且然后操作以通过读取所讨论的一个或多个块的适当的所存储子块来读取所讨论的一个或多个块的压缩数据,解压缩所讨论的一个或多个块,并且提供解压缩块以供使用。
[0336]
可以任何合适和期望的方式来确定要解压缩的数据阵列的一个或多个块。例如,这可基于块的位置和/或数据阵列中感兴趣(即,其值将被确定)的一个或多个特定数据元素的位置。
[0337]
然后,解码器将确定感兴趣块的标头的位置(基于块的索引),并且从该标头读取所存储的压缩块的大小。然后,解码器将基于数据阵列的块的索引、已知的“每块”或“每子块”存储器偏移(其将基于所讨论的数据阵列的块的已知未压缩大小)以及来自标头的压缩数据块的大小,来识别将存储压缩块的一个或多个子块的位置,从存储数据阵列的有效载荷缓冲区的开始部分在所确定的存储器偏移处读取所确定的子块,并且一旦已经读取了存储块的压缩数据的子块,就适当地解压缩该块。
[0338]
然后可对每个感兴趣(即将被解压缩)的块重复该过程。
[0339]
图8示出了本发明实施方案中的这种操作。
[0340]
如图8所示,该过程将从要被解压缩的块(cu)索引n开始(步骤800)。
[0341]
解码器将首先读取块索引n的标头并且确定所存储的块大小(步骤801)。它还将为已经用于存储压缩块的存储器分配确定适当的子块配置(步骤802)。
[0342]
然后它将确定读取哪些子块以获得压缩块。为此,首先将该块的压缩大小(cu_size)与用于该块的存储器分配的较小子块的大小进行比较(步骤803)。如果块的压缩大小不大于存储器分配的较小子块的大小,则读取用于该块的存储器分配的较小子块(步骤804),并且解压缩所读取的块数据(步骤805)以提供解压缩块。
[0343]
另一方面,如果在步骤803处确定块的压缩大小大于存储器分配的较小子块的大小,则代替地,读取存储器分配的较大子块(步骤806)。
[0344]
然后确定压缩块的任何剩余数据的大小(步骤807),并且如果在已经读取较大子块之后存在要读取的任何剩余数据,则重复该过程以确定要为压缩块的数据读取的下一个子块(步骤808),以此类推,直到已经读取了存储该块的压缩数据的所有子块。
[0345]
一旦不存在要为压缩块读取的剩余数据,该块就被解压缩(步骤805),并且该块的过程结束(步骤809)。
[0346]
然后,可针对所需的数据阵列的下一个块重复此操作,以此类推。
[0347]
块的索引、有效载荷缓冲区的基(开始)地址、未压缩块大小等可以任何合适和适当的方式被传送到解码器,例如作为元数据(例如描述符)的一部分,该元数据与数据阵列相关联并且在导致解码器对数据阵列的一个或多个块进行解码的命令中被指示。
[0348]
当然,其他布置将是可能的。
[0349]
就这一点而言应当理解,当解压缩数据阵列时,可能不需要将数据阵列整体分解,而是可仅解压缩数据阵列的各个块。在是仅需要纹理的特定区域的图形纹理的情况下可能尤为如此。
[0350]
图9示意性地示出了图形处理系统1的布置,其可存储和使用已经以本实施方案的方式存储的数据阵列。
[0351]
图9示出了基于图块的图形处理系统。然而,如应当理解并且如上文所讨论的那样,本发明也可在图形处理系统的其他布置中(以及实际上,在其他数据处理系统中)实现。
[0352]
如图9所示,该系统包括基于图块的图形处理器(gpu)1。该图形处理器1响应于其接收到的渲染图形对象等的指令,生成输出数据阵列,诸如旨在用于在诸如屏幕或打印机的显示设备上显示的输出帧。
[0353]
如图9所示,图形处理器1包括顶点着色器2、合并单元3、状态管理单元4、光栅化器件5和渲染流水线形式的渲染器件6。
[0354]
顶点着色器2例如从图形处理器1的驱动器(未示出)接收要绘制的图形对象、顶点等的描述,并对这些对象和顶点等执行适当的顶点着色操作,以便例如对对象和顶点执行适当的变换和照明操作。
[0355]
合并单元3将由图形处理器1生成的输出(诸如要显示的帧)所需的各种图元、对象等分类(合并)为要生成的输出分成的图块的适当的合并(图块列表)(因为如上文所讨论的,该示例性图形处理系统是基于图块的图形处理系统)。
[0356]
状态管理单元4存储和控制状态数据和图形处理单元的状态以控制图形处理操作。
[0357]
光栅器5将其输入图元用作要显示的图元,并且将这些图元光栅化到要渲染的采样位置和片段。
[0358]
渲染流水线6从光栅器5取得片段并渲染这些片段以生成输出数据(用于图形处理器1的输出(例如要显示的帧)的数据)。
[0359]
渲染流水线将包括多个不同的处理单元,诸如片段着色器、混合器、纹理映射器等。
[0360]
如果需要,诸如使用光线跟踪或混合光线跟踪的其他渲染布置也或者替代地将是可能的。
[0361]
如图9所示,渲染单元6尤其可访问存储在能够由图形处理器1访问的存储器9中的
纹理映射10,以便能够将相关纹理应用于其正在渲染的片段。存储纹理映射10的存储器9可以是图形处理器1能够访问的片上缓冲区或外部存储器(例如,主系统存储器)。
[0362]
图形处理器1通过生成表示相应输出数据阵列的不同区域的图块(因为它是基于图块的图形处理器)来生成其输出数据阵列,诸如输出帧。因此,将来自渲染流水线6的输出(渲染片段)输出到图块缓冲区7。
[0363]
然后将图块缓冲区的输出写入帧缓冲区8,例如用于显示。帧缓冲区8可驻留在例如系统(未示出)的主存储器(该存储器可以是ddr sdram)中。如果需要,可在将来自图块缓冲区的数据写入帧缓冲区之前对其进行下采样。
[0364]
纹理映射10和帧缓冲区8可存储在相同的物理存储器中,或者它们可根据需要存储在不同的存储器中。
[0365]
稍后,显示控制器11将读取帧缓冲区3中的数据阵列并将其输出到显示设备以进行显示(未示出)。
[0366]
图9所示的图形处理系统在存储器9中所存储的纹理映射10方面,以及当将其输出数据存储在帧缓冲区8中时,使用本发明实施方案的数据阵列存储和解码布置。
[0367]
因此,存储在存储器9中供渲染单元6使用的每个纹理映射10以上述形式存储。因此,存在数据编码器12,当渲染单元6需要访问纹理映射时,该数据编码器以上述方式读取和解码纹理映射数据,以向渲染器6提供解压缩的纹理。
[0368]
类似地,当来自图形处理器1的所生成的输出数据从图块缓冲区7写入帧缓冲区8时,该数据由数据编码器13处理以从图块缓冲区7取得数据并将其以本实施方案的格式存储在帧缓冲区8中。然后,该数据可由数据编码器14从帧缓冲区8读取和解码,以便提供给要在其上显示帧的显示器的显示控制器11。
[0369]
就这一点而言应当理解,图9中单独示出的数据编码器12、13和14可实际上都是相同的数据编码器(或者这些编码器中的两个编码器可以是相同的编码器),具体取决于系统的底层硬件配置。同样地,一个或多个编码器可被布置在整个系统内的任何适当的位置。例如,它们可耦合到存储数据阵列的存储器,并且/或者它们与一个或多个存储器和将需要所讨论的数据的处理单元之间的高速缓存分级结构的高速缓存相关联。
[0370]
应当理解,如图9所示的图形处理器的器件、元件和单元等中的每一者可根据需要来实现,并且将相应地包括例如用于执行所需的操作和功能的适当的电路/电路系统和/或处理逻辑部件、可编程逻辑部件等,并且将提供用于执行本发明的适当的控制和处理电路/电路系统等。
[0371]
这里还应当理解,图9简单地示意性示出了这些布置,并且因此,例如,本发明的操作中的数据流不需要并且可不是如图9所示的那样,但可例如适当地涉及如图9所示的各个单元和器件之间的数据回送。
[0372]
图10示出了本实施方案中的数据编码器12、13、14的实施方案。如图10所示,该数据编码器(和每个数据编码器)包括相应的读取单元60和写入单元61(电路),其可操作以分别例如从高速缓存和存储器系统读取数据,以及将数据写入高速缓存和存储器系统。数据编码器也包括适当的控制单元(电路)62,该控制单元接收读取请求和写入请求,并且控制数据编码器(编解码器)对那些请求相应地和适当地作出响应。
[0373]
如图10中所示,数据编码器还包括一个或多个编解码器63、64和一组数据缓冲器
65,以用于在处理数据时和/或在等待将数据写入高速缓存或存储器系统时将那个数据临时地存储在数据编码器中。
[0374]
数据编码器可包括任何期望数目的编解码器,例如,该编解码器各自分别能够操作以执行不同的编码(压缩)方案。例如,一个编解码器可被配置为执行一个可变速率压缩方案,其中另一编解码器被配置为执行另选的可变速率压缩方案。
[0375]
例如,虽然上文结合无损可变速率压缩方案描述了实施方案,并且其中存储器分配对应于未压缩时块的大小,但将本发明应用于有损可变速率压缩方案也将是可能的。在这种情况下,压缩方案可具有其编码的设定最大大小。如果可在该大小内对块进行无损编码,则这样做。然而,如果无损压缩将超过设定最大大小,则执行有损编码以确保压缩大小满足有损压缩方案的设定最大大小。在这种情况下,当使用有损可变速率压缩方案进行压缩时,存储器分配对应于块的设定最大大小。
[0376]
当然,其他布置将是可能的。
[0377]
如从上文可以看出的那样,在一些实施方案中,本发明至少提供了用于存储数据阵列的方法和装置,其可允许所存储的数据占用较少的存储空间(被更有效地存储),减少用于读取所存储的数据的存储器流量,并且/或者使得用于读取所存储的数据的存储器流量更有效。从而其可相应地在系统层面上降低功耗和带宽。
[0378]
在一些实施方案中,这至少通过为要存储的数据阵列的块提供相应的存储器分配来实现,其中每个这样的存储器分配被分成多个子块,该多个子块包括至少一个较大子块和一个较小子块。然后,当存储数据阵列的块的压缩版本时,来自该块的存储器分配的适当子块用于存储压缩数据。存储器分配和子块优选地与适当的存储器事务和存储器通道地址边界对齐,以便避免各个子块的事务跨越存储器事务和存储器通道边界。
[0379]
本发明的数据存储布置特别适用于纹理和帧缓冲区,并且可减少外部带宽,以及有利于随机访问所存储的数据,并且例如对于纹理高速缓存能够以线速度解码。在一些实施方案中,本发明的布置至少允许有效地获取整个数据阵列内的给定块的数据,并且具有很少的开销。
[0380]
本发明也可为显示控制器(当用作帧缓冲区格式时)提供可预测的存储器读取模式,同时仍然保持用于例如纹理(用于纹理映射器)的随机访问可能性。对于帧缓冲区和纹理两者使用相同的数据存储格式结构提供了更简化的系统。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献