CN106127671A - 顶点数据压缩方法和装置及相关的顶点数据解压缩方法和装置 - Google Patents
顶点数据压缩方法和装置及相关的顶点数据解压缩方法和装置 Download PDFInfo
- Publication number
- CN106127671A CN106127671A CN201510852281.8A CN201510852281A CN106127671A CN 106127671 A CN106127671 A CN 106127671A CN 201510852281 A CN201510852281 A CN 201510852281A CN 106127671 A CN106127671 A CN 106127671A
- Authority
- CN
- China
- Prior art keywords
- summit
- value
- data cell
- data
- compression
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T9/00—Image coding
- G06T9/001—Model-based coding, e.g. wire frame
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T9/00—Image coding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T9/00—Image coding
- G06T9/005—Statistical coding, e.g. Huffman, run length coding
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Computer Graphics (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明提出一种顶点数据压缩方法和装置及相关的顶点数据解压缩方法和装置。该顶点数据压缩方法包括:收集多个顶点组成顶点块;从顶点块中提取至少一个数据单元阵列,其中,每一数据单元阵列包括多个数据单元,多个数据单元分别从多个顶点的多个顶点组分中选取,并对应于同一通道,且每一数据单元均小于一字节;及对于每一数据单元阵列,检查数据单元阵列中的数据单元,以选取压缩算法,并根据所选取的压缩算法对数据单元阵列中的多个数据单元进行压缩。本发明提出的顶点数据压缩方法和装置及相关的顶点数据解压缩方法和装置,能够降低对存储流量和存储空间的需求。
Description
技术领域
本发明涉及图形处理,更具体地,涉及一种通过分析通道特性压缩顶点数据的顶点数据压缩方法和装置,以及相关的顶点数据解压缩方法和装置。
背景技术
如本领域所熟知的,图形处理通常是以管线(pipelined)的形式执行的,其中,多个管线级段对数据进行操作以产生最终渲染输出,如用于显示的画帧。现在,许多的图形处理管线包括一个或多个可编程处理级段,通常称为“着色器”,其执行程序来进行图形处理操作,以产生需要的图形数据。例如,图形处理管线可包括顶点着色器和像素(片段)着色器。这些着色器为可编程处理级段,其可对输入数据值执行着色器程序,以生成一组需要的输出数据值,用于图形管线的剩余级段进行进一步处理。图形处理管线的着色器可共享可编程处理电路,也可以是不同的可编程处理单元。
举例来说,顶点着色操作可包括顶点位置着色操作和顶点属性着色操作,其用以对每一画帧中的图元(primitives)的顶点进行处理。对于延迟渲染方案(如基于仓的渲染方案)而言,一种传统的设计是在分仓过程(也即顶点级段(vertex phase)通道)中执行顶点位置着色操作和顶点属性着色操作,并将画帧中所有图元的顶点的顶点位置着色结果和顶点属性着色结果存储至仓存储器(bin memory)中,分仓过程完成之后,再在渲染过程(也即像素级段(pixel phase)通道)中执行像素/片段着色操作。由于仓存储器需要用来存储许多顶点的顶点位置着色结果和顶点属性着色结果,因此,对于存储流量和存储空间的需求很大。此外,顶点级段所写入的数据流量和像素级段所读取的数据流量可导致延迟渲染方案的性能下降。
因此,需要一种创新的用于顶点数据压缩的设计方案,其能够降低对存储流量和存储空间的需求。
发明内容
本发明的目标之一为提供一种通过分析通道特性压缩顶点数据的顶点数据压缩方法和装置,以及相关的顶点数据解压缩方法和装置。
根据本发明的第一个方面,公开一种的顶点数据压缩方法。该顶点数据压缩方法包括:收集多个顶点组成顶点块;从顶点块中提取至少一个数据单元阵列,其中,每一数据单元阵列包括多个数据单元,这些数据单元分别从多个顶点的多个顶点组分中选取,并对应于同一通道,且每一数据单元均小于一字节;以及对于每一数据单元阵列,检查数据单元阵列中的数据单元,以选取压缩算法,进而根据所选取的压缩算法对数据单元阵列中的数据单元进行压缩。
根据本发明的第二个方面,公开一种顶点数据解压缩方法。该顶点数据解压缩方法包括:接收从压缩顶点块中读取的数据,其中,压缩顶点块包括标头部分和主体部分,压缩顶点块通过对从顶点块中提取的至少一个数据单元阵列进行压缩而生成,每一数据单元阵列包括多个数据单元,这些数据单元分别从顶点块的多个顶点的多个顶点组分中选取,并对应于同一通道,且每一数据单元均小于一字节;对标头部分进行解码以获得记录值;以及至少部分地根据从标头部分所获取的记录值来生成一顶点的至少一部分的解压缩顶点组分。
根据本发明的第三个方面,公开一种顶点数据压缩装置。该顶点数据压缩装置包括接收电路和压缩器。接收电路用于接收多个顶点组成顶点块。压缩器用于从顶点块中提取至少一个数据单元阵列,其中,每一数据单元阵列包括多个数据单元,这些数据单元分别从多个顶点的多个顶点组分中选取,并对应于同一通道,且每一数据单元均小于一字节;并且对于每一数据单元阵列,检查数据单元阵列中的数据单元,以选取压缩算法,并根据所选取的压缩算法对数据单元阵列中的数据单元进行压缩。
根据本发明的第四个方面,公开一种顶点数据解压缩装置。该顶点数据解压缩装置包括接收电路和解压缩器。接收电路用以接收从压缩顶点块中读取的数据,其中,压缩顶点块包括标头部分和主体部分,压缩顶点块通过对从顶点块中提取的至少一个数据单元阵列进行压缩而生成,每一数据单元阵列包括多个数据单元,这些数据单元分别从顶点块的多个顶点的多个顶点组分中选取,并对应于同一通道,且每一数据单元均小于一字节。解压缩器用于对标头部分进行解码以获取记录值,并至少部分地根据从标头部分所获取的记录值来生成顶点的至少一部分的解压缩顶点组分。
本发明提出的顶点数据压缩方法和装置及相关的顶点数据解压缩方法和装置,能够降低对存储流量和存储空间的需求。
通过阅读下述于附图中所揭露的优选实施例的详细说明书之后,本发明的这些以及其他的目标对本领域的普通技术人员来说无疑是很明显的。
附图说明
图1为本发明一实施例的图形处理系统的方块图。
图2为从顶点块的多个顶点的多个顶点组分中提取数据单元阵列的一实例的示意图。
图3为对八个顶点的多个顶点组分进行压缩的一实例的示意图。
图4为本发明一实施例的顶点位置组分的通道化压缩率和顶点属性组分的通道化压缩率的示意图。
图5为本发明一实施例的压缩顶点块的数据结构的示意图。
图6为本发明一实施例的顶点数据压缩方法的流程图。
图7为本发明一实施例的顶点数据解压缩方法的流程图。
具体实施方式
下面的描述中使用了一些术语,其代表特定的元件。本领域的熟练技术人员可以理解的是,电子设备制造商可用不同的名字来代表同一元件。本文件通过功能而不是名字的差异来对元件进行区分。在下面的说明书和权利要求书中,词语“包括”是开放式的,其应理解为“包括,但不限于...”。同样,词语“耦接”意为间接的或直接的电连接。相应地,如果一设备耦接至另一设备,所述连接可通过直接的电连接实现,或通过经由其他设备和连接的间接的电连接实现。
图1为本发明一实施例的图形处理系统的方块图。图形处理系统100中至少一部分可为电子设备中使用的图形处理单元(graphics processingunit,GPU)的一部分。图形处理系统100可包括顶点着色器102、分仓模块(binning module)104、顶点数据压缩装置106、存储设备108、顶点数据解压缩装置110和像素着色器112。应该指出的是,图1仅显示与本发明相关的元件。在实践中,图形处理系统100可包括其他额外的元件,以实现其他的功能。顶点数据压缩装置106用于对从先前三维(three-dimentinal,3D)图形处理管线级段(如分仓模块104)中所接收的原始顶点数据进行数据压缩,并存储压缩/编码后的顶点数据至存储设备(如片外仓存储器(off-chip bin memory))108中,顶点数据压缩装置106包括接收电路122和压缩器124。顶点数据解压缩装置110用于对从存储设备108中所读取的压缩/编码后的顶点数据执行数据解压缩,并输出解压缩/解码的顶点数据至下一3D图形处理管线级段(如像素着色器112),顶点数据解压缩装置110包括接收电路126和解压缩器128。因为压缩的顶点数据在顶点级段(vertex phase)通道中存储至存储设备108,并在像素级段(pixel phase)通道中从存储设备108中读取,因此可降低对于存储流量和存储空间的需求。
顶点着色器102、分仓模块104、顶点数据压缩装置106、顶点数据解压缩装置110和像素着色器112可通过可编程处理电路来实现。顶点着色器102可用以在分仓过程(如顶点级段通道)中执行顶点位置着色(如顶点位置计算)和顶点属性着色(如顶点属性计算)。像素着色器112可用以在分仓过程之后在渲染过程(如像素级段通道)中执行像素(片段)着色。在该实施例中,像素着色器112可采用基于仓的渲染方案。因而,在顶点级段通道中,分仓模块104可根据顶点位置信息将屏幕空间(如画帧)划分为多个仓,其中,顶点位置信息由顶点着色器102所执行的顶点位置着色给出。具体地,考虑到每一图元均具有多个由先前的顶点着色器102处理的顶点,并且需要之后的像素着色器112进行处理,因而,分仓模块104可检查屏幕空间中图元的分布情况以找出图元所覆盖的仓,并输出图元所覆盖的每一仓的顶点数据,其中,顶点数据可包括顶点位置数据和相关的顶点属性数据。由于本发明的重点是顶点数据压缩和解压缩,因此关于顶点着色器102、分仓模块104和像素着色器112的进一步细节在这里将不再赘述。
对于顶点数据压缩装置106而言,其接收电路122用以收集/聚合多个顶点以组成顶点块(vertex block,VB)。举例来说,每16个顶点可聚合起来形成顶点块VB,用作供压缩器124进行处理的压缩单元。当剩余顶点的数量小于16个时,可仅对剩余的顶点进行收集/聚合以生成顶点块VB。顶点块VB中的每一顶点均可具有多个32位顶点组分,包括记录顶点位置(如X坐标值和Y坐标值)的顶点组分,记录顶点属性(如Z坐标值、W坐标值、R(红色通道)值、G(绿色通道)值、B(蓝色通道)值等)的顶点组分。压缩器124耦接至接收电路122,并用以从顶点块VB中提取至少一个数据单元阵列(如至少一半字节阵列),其中,每一数据单元阵列包括多个数据单元,这些数据单元分别从多个顶点的多个顶点组分中选取,并对应于同一通道,且每一数据单元均小于一字节。例如,每一顶点组分可具有分别对应于多个半字节通道(nibble channels)的多个半字节,每一数据单元可为从一半字节通道中提取的一半字节,进而每一数据单元阵列为一半字节阵列,该半字节阵列包括从不同顶点的多个顶点组分的同一半字节通道中提取的多个半字节。简言之,一32位顶点组分中的M个连续的位可收集为一个数据单元,其中,M≦4。如果顶点块VB具有N个顶点,那么从顶点块VB中提取的每一数据单元阵列的尺寸便为M×N,其中,N≦16。
图2为从顶点块的多个顶点的多个顶点组分中提取数据单元阵列的一实例的示意图。在该实例中,顶点块VB包括16个顶点V0-V15,其中,每一顶点均具有多个32位顶点组分。取每一顶点V0-V15的顶点组分VC0为例,其具有分别对应于多个通道的多个数据单元。若每一数据单元为半字节(4位),而每一顶点V0-V15的顶点组分VC0均具有32位B0-B31,那么其可视为具有8个数据单元(半字节)DU0-DU7,分别对应于8个通道CH0-CH7。压缩器124可提取包括多个数据单元(如半字节)的数据单元阵列(如半字节阵列),这些数据单元从顶点V0-V15的多个顶点组分中选取并且对应于同一通道(如半字节通道)。例如,当选取通道CH0用于顶点数据压缩时,所提取的数据单元阵列包括从所有顶点V0-V15的顶点组分VC0中选取的多个数据单元DU0。又如,当选取通道CH7用于顶点数据压缩时,所提取的数据单元阵列包括从所有顶点V0-V15的顶点组分VC0中选取的多个数据单元DU7。
对于所提取的每一数据单元阵列,压缩器124进一步用以对所提取的数据单元阵列中的数据单元进行检查,以选取压缩算法,并根据所选取的压缩算法对所提取的数据单元阵列中的数据单元进行压缩。也就是说,可根据通道的特性从多个预定义的压缩算法中选取所需要的压缩算法。在该实施例中,压缩器124可执行分类操作,以将所提取的数据单元阵列中的数据单元所具有的值分类为至少一簇,并参照该分类操作所创建的至少一簇来确定所需的压缩算法。当分类操作所确定的簇的数量没有超过第一预定阈值时,且分类操作所确定的每一簇所具有的值偏移不超过第二预定阈值,则分簇操作成功。举例来说,第一预定阈值可设定为4,而第二预定阈值可设定为3。因此,压缩器124可发现多达4簇,并且每一簇所具有的值偏移至多为3。但是,这仅是出于解释的目的,而不应理解为对本发明的限制。根据对所提取的数据单元阵列中的数据单元具有的值所进行的分簇结果,压缩器124可决定是否对所提取的数据单元阵列进行数据压缩。当分簇操作可成功地发现有效的簇时,压缩器124便从多个预定义的压缩算法(如,“唯一半字节(unique nibble,un)”类型压缩、“有限值域(limited range)”类型压缩或“常见半字节(common nibble,cn)”类型压缩)中选取压缩算法,并使用所选取的压缩算法对所提取的数据单元阵列中的数据单元所具有的值进行压缩。但是,当分簇操作不能发现任何有效的簇时,则越过数据压缩,如此,所提取的数据单元阵列中的数据单元所具有的原始值就保存至压缩器124的输出之中。压缩器124根据原始顶点块VB生成压缩顶点块VB’至存储设备108中,其中,通过所选取的压缩算法对顶点块VB中的至少一个数据单元阵列(如至少一半字节阵列)进行压缩。所提出的压缩算法的进一步细节描述如下。
当所提取的数据单元阵列中的数据单元所具有的值被分类为具有单一值(single value)的单一簇(single cluster)时,压缩器124应用“un”类型压缩对所提取的数据单元阵列中的数据单元所具有的值进行压缩。取图2所示的包括多个数据单元DU7的数据单元阵列为例,其中,多个数据单元DU7分别从顶点V0-V15的顶点组分VC0中选取。如果顶点V0-V15的顶点组分VC0中的多个数据单元DU7具有同一值(如0x3),那么对顶点V0-V15的顶点组分VC0中的多个数据单元DU7具有的值所进行的分簇结果将仅具有单一簇,且该单一簇仅具有单一值0x3。压缩器124将该4位值(bit value)0x3以及指明压缩类型“un”的3位类型值(type value)记录至压缩顶点块VB’的标头部分,其中,顶点V0-V15的顶点组分VC0中的多个数据单元DU7所具有的值0x3均不记录至顶点块VB’的主体部分。换言之,多个数据单元DU7所具有的每一值0x3均缩减为一0位数据,因此,其不记录至顶点块VB’的主体部分。当不启用顶点数据压缩时,存储未压缩的数据单元阵列所需要的存储空间为(4*16)位,其中,“4”为每一数据单元中位的数量,而“16”为顶点块中顶点的数量。然而,当启用所提出的“un”类型压缩算法时,存储压缩的数据单元阵列所需要的存储空间仅为(4+3)位,其中,“4”为记录唯一数据单元(如0x3)所需要的位的数量,而“3”为记录相关的压缩类型所需要的位的数量。因此,压缩率(compressing rate,CR)为(4+3)/(4*16)=10.9%。
当所提取的数据单元阵列中的数据单元所具有的值被分类为具有多个连续值的单一簇时,压缩器124应用“有限值域”类型压缩对所提取的数据单元阵列中的数据单元所具有的值进行压缩。取图2所示的包括多个数据单元DU7的数据单元阵列为例,其中,多个数据单元DU7分别从顶点V0-V15的顶点组分VC0中选取。考虑这样的情况,顶点V0-V15的顶点组分VC0中的多个数据单元DU7具有位于有限值域(如{0x5,0x8})内的4个连续值,那么对顶点V0-V15的顶点组分VC0中的多个数据单元DU7具有的值所进行的分簇结果将仅具有单一簇,且该单一簇具有多个连续值0x5、0x6、0x7和0x8,而该单一簇的最大偏移等于3。因此,压缩器124选取“range1_2”压缩算法,其中第一指引“1”代表值域(如簇)的数量,而第二指引“2”代表为指明最大偏移所需要的位的数量。因此,压缩器124将从该单一簇的值中所选取的特定值(如值域起始值0x5)和指明压缩类型“range1_2”的3位类型值记录至压缩顶点块VB’的标头部分。对于所提取的数据单元阵列中的多个数据单元所具有的每一个值,压缩器124将特定值(如值域起始值0x5)和数据单元所具有的值之间的2位偏移值记录至压缩顶点块VB’的主体部分,其中,该数据单元所具有的值不记录至压缩顶点块VB’的主体部分。如果所提取的数据单元阵列中的数据单元所具有的值为0x5,那么原始的4位值0x5将缩减为2位偏移值b00,进而该2位偏移值b00被记录至压缩顶点块VB’的主体部分。如果所提取的数据单元阵列中的数据单元所具有的值为0x6,那么原始的4位值0x6将缩减为2位偏移值b01,进而该2位偏移值b01被记录至压缩顶点块VB’的主体部分。如果所提取的数据单元阵列中的数据单元所具有的值为0x7,那么原始的4位值0x7将缩减为2位偏移值b10,进而该2位偏移值b10被记录至压缩顶点块VB’的主体部分。如果所提取的数据单元阵列中的数据单元所具有的值为0x8,那么原始的4位值0x8将缩减为2位偏移值b11,进而该2位偏移值b11被记录至压缩顶点块VB’的主体部分。当不启用顶点数据压缩时,存储未压缩的数据单元阵列所需要的存储空间为(4*16)位,其中,“4”为每一数据单元中位的数量,而“16”为顶点块中的顶点的数量。然而,当启用所提出的“range1_2”压缩算法时,存储压缩的数据单元阵列所需要的存储空间仅为[(4+3)+2*16]位,其中,“4”为记录该单一簇的连续值中的值(如0x5)所需要的位的数量,“3”为记录相关的压缩类型所需要的位的数量,“2”为记录偏移值所需要的位的数量,而“16”为顶点块中顶点的数量。因此,压缩率为[(4+3)+2*16]/(4*16)=60.9%。
前面提到的所选取的“range1_2”压缩算法除了用于具有多个连续值的单一簇的情况之外,该“有限值域”类型压缩算法还可支持其他类型的压缩算法如“range1_1”压缩算法和“range1_3”压缩算法。
考虑这样的情况,顶点V0-V15的顶点组分VC0中的多个数据单元DU7具有位于有限值域(如{0x5,0x6})内的2个连续值,那么对顶点V0-V15的顶点组分VC0中的多个数据单元DU7具有的值所进行的分簇结果将仅具有单一簇,且该单一簇具有多个连续值0x5和0x6,而该单一簇的最大偏移等于1。因此,压缩器124选取“range1_1”压缩算法,其中,第一指引“1”代表值域(如簇)的数量,而第二指引1代表为指明最大偏移所需要的位的数量。因此,压缩器124将从该单一簇的值中所选取的特定值(如值域起始值0x5)和指明压缩类型“range1_1”的3位类型值记录至压缩顶点块VB’的标头部分。对于所提取的数据单元阵列中的多个数据单元所具有的每一值,压缩器124将特定值(如值域起始值0x5)和数据单元所具有的值之间的1位偏移值记录至压缩顶点块VB’的主体部分,其中,该数据单元所具有的值不记录至压缩顶点块VB’的主体部分。如果所提取的数据单元阵列中的数据单元所具有的值为0x5,那么原始的4位值0x5将缩减为1位偏移值b0,进而该1位偏移值b0被记录至压缩顶点块VB’的主体部分。如果所提取的数据单元阵列中的数据单元所具有的值为0x6,那么原始的4位值0x6将缩减为1位偏移值b1,进而该1位偏移值b1被记录至压缩顶点块VB’的主体部分。因此,压缩率为[(4+3)+1*16]/(4*16)=35.9%。
考虑另外一种情况,顶点V0-V15的顶点组分VC0中的多个数据单元DU7具有位于一有限值域(如{0x5,0x9})内的5个连续值,那么对顶点V0-V15的顶点组分VC0中的多个数据单元DU7具有的值所进行的分簇结果将仅具有单一簇,且该单一簇具有多个连续值0x5、0x6、0x7、0x8和0x9,而该单一簇的最大偏移等于4。因此,压缩器124选取“range1_3”压缩算法,其中第一指引“1”代表值域(如簇)的数量,而第二指引3代表为指明最大偏移所需要的位的数量。因此,压缩器124将从该单一簇的值中所选取的特定值(如值域起始值0x5)和指明压缩类型“range1_3”的3位类型值记录至压缩顶点块VB’的标头部分。对于所提取的数据单元阵列中的多个数据单元所具有的每一值,压缩器124将特定值(如值域起始值0x5)和数据单元所具有的值之间的3位偏移值记录至压缩顶点块VB’的主体部分,其中,该数据单元所具有的值不记录至压缩顶点块VB’的主体部分。如果所提取的数据单元阵列中的数据单元所具有的值为0x5,那么原始的4位值0x5将缩减为3位偏移值b000,进而该3位偏移值b000被记录至压缩顶点块VB’的主体部分。如果所提取的数据单元阵列中的数据单元所具有的值为0x6,那么原始的4位值0x6将缩减为3位偏移值b001,进而该3位偏移值b001被记录至压缩顶点块VB’的主体部分。如果所提取的数据单元阵列中的数据单元所具有的值为0x7,那么原始的4位值0x7将缩减为3位偏移值b010,进而该3位偏移值b010被记录至压缩顶点块VB’的主体部分。如果所提取的数据单元阵列中的数据单元所具有的值为0x8,那么原始的4位值0x8将缩减为3位偏移值b011,进而该3位偏移值b011被记录至压缩顶点块VB’的主体部分。如果所提取的数据单元阵列中的数据单元所具有的值为0x9,那么原始的4位值0x9将缩减为3位偏移值b100,进而该3位偏移值b100被记录至压缩顶点块VB’的主体部分。因此,压缩率为[(4+3)+3*16]/(4*16)=85.9%。
当所提取的数据单元阵列中的数据单元所具有的值被分类为分别具有多个连续值的多个簇时,压缩器124应用“有限值域”类型压缩对所提取的数据单元阵列中的数据单元所具有的值进行压缩。取图2所示的包括多个数据单元DU7的数据单元阵列为例,其中,多个数据单元DU7分别从顶点V0-V15的顶点组分VC0中选取。考虑这样的情况,顶点V0-V15的顶点组分VC0中的多个数据单元DU7具有一组位于有限值域(如{0x5,0x8})内的4个连续值以及一组位于不同的有限值域(如{0xa,0xc})内的3个连续值,那么对顶点V0-V15的顶点组分VC0中的多个数据单元DU7具有的值所进行的分簇结果将具有两簇,其中一簇具有多个连续值0x5、0x6、0x7和0X8,且该簇的最大偏移等于3,另一簇具有多个连续值0xa、0xb和0xc,且该另一簇的最大偏移等于2。因此,压缩器124选取一“range2_2”压缩算法,其中第一指引“2”代表值域(如簇)的数量,而第二指引“2”代表为指明每一值域的最大偏移所需要的位的数量。因此,压缩器124将从其中一簇的值中所选取的特定值(如值域起始值0x5)、从其中另一簇的值中所选取的特定值(如值域起始值0xa)和指明压缩类型“range2_2”的3位类型值记录至压缩顶点块VB’的标头部分。对于所提取的数据单元阵列中的多个数据单元所具有的每一值,压缩器124将同一数据单元具有的值相关的簇的1位指引值(index value)记录至压缩顶点块VB’的主体部分,并进一步将该相关簇的特定值(specific value)(如0x5或0xa)和该数据单元所具有的值之间的偏移值记录至压缩顶点块VB’的主体部分,其中,该数据单元所具有的值不记录至压缩顶点块VB’的主体部分。
如果所提取的数据单元阵列中的数据单元所具有的值为0x5,那么原始的4位值0x5将缩减为相关簇/值域{0x5,0x8}的1位指引值b0和2位偏移值b00,进而该1位指引值b0和该2位偏移值b00均被记录至压缩顶点块VB’的主体部分。如果所提取的数据单元阵列中的数据单元所具有的值为0x6,那么原始的4位值0x6将缩减为相关簇/值域{0x5,0x8}的1位指引值b0和2位偏移值b01,进而该1位指引值b0和该2位偏移值b01均被记录至压缩顶点块VB’的主体部分。如果所提取的数据单元阵列中的一数据单元所具有的值为0x7,那么原始的4位值0x7将缩减为相关簇/值域{0x5,0x8}的1位指引值b0和2位偏移值b10,进而该1位指引值b0和该2位偏移值b10均被记录至压缩顶点块VB’的主体部分。如果所提取的数据单元阵列中的数据单元所具有的值为0x8,那么原始的4位值0x8将缩减为相关簇/值域{0x5,0x8}的1位指引值b0和2位偏移值b11,进而该1位指引值b0和该2位偏移值b11均被记录至压缩顶点块VB’的主体部分。
如果所提取的数据单元阵列中的数据单元所具有的值为0xa,那么原始的4位值0xa将缩减为相关簇/值域{0xa,0xc}的1位指引值b1和2位偏移值b00,进而该1位指引值b1和该2位偏移值b00均被记录至压缩顶点块VB’的主体部分。如果所提取的数据单元阵列中的一数据单元所具有的值为0xb,那么原始的4位值0xb将缩减为相关簇/值域{0xa,0xc}的1位指引值b1和2位偏移值b01,进而该1位指引值b1和该2位偏移值b01均被记录至压缩顶点块VB’的主体部分。如果所提取的数据单元阵列中的数据单元所具有的值为0xc,那么原始的4位值0xc将缩减为相关簇/值域{0xa,0xc}的1位指引值b1和2位偏移值b10,进而该1位指引值b1和该2位偏移值b10均被记录至压缩顶点块VB’的主体部分。
当不启用顶点数据压缩时,存储一未压缩的数据单元阵列需要的存储空间为(4*16)位,其中,4为每一数据单元中位的数量,而16为顶点块中顶点的数量。然而,当启用所提出的“range2_2”压缩算法时,存储压缩的数据单元阵列所需要的存储空间仅为[(4*2+3)+(2+1)*16]位。因此,压缩率为[(4*2+3)+(2+1)*16]/(4*16)=92.1%。
前面提到的所选取的“range2_2”压缩算法除了可用于分别具有多个值的多个簇的情况之外,所述“有限值域”类型压缩算法还可支持其他类型的压缩算法如“range2_1”压缩算法。考虑这样的情况,顶点V0-V15的顶点组分VC0中的多个数据单元DU7具有一组位于有限值域(如{0x5,0x6})内的2个连续值以及一组位于不同的有限值域(如{0xa,0xb})内的2个连续值,那么对顶点V0-V15的顶点组分VC0中的多个数据单元DU7具有的值所进行的分簇结果将具有两簇,其中一簇具有多个连续值0x5和0x6,且该簇的最大偏移等于1,另一簇具有多个连续值0xa和0xb,且该另一簇的最大偏移等于1。因此,压缩器124选取“range2_1”压缩算法,其中第一指引“2”代表值域(如簇)的数量,而第二指引“1”代表为指明每一值域的最大偏移所需要的位的数量。因此,压缩器124将从其中一簇的值中所选取的特定值(如值域起始值0x5)、从其中另一簇的值中所选取的特定值(如值域起始值0xa)和指明压缩类型“range2_1”的3位类型值记录至压缩顶点块VB’的标头部分。对于所提取的数据单元阵列中的多个数据单元所具有的每一值,压缩器124将同数据单元所具有的值相关的簇的1位指引值记录至压缩顶点块VB’的主体部分,并进一步将该相关簇的特定值(如0x5或0xa)和该数据单元所具有的值之间的1位偏移值记录至压缩顶点块VB’的主体部分,其中,该数据单元所具有的值不记录至压缩顶点块VB’的主体部分。
如果所提取的数据单元阵列中的数据单元所具有的值为0x5,那么原始的4位值0x5将缩减为相关簇/值域{0x5,0x6}的1位指引值b0和1位偏移值b0,进而该1位指引值b0和该1位偏移值b0均被记录至压缩顶点块VB’的主体部分。如果所提取的数据单元阵列中的数据单元所具有的值为0x6,那么原始的4位值0x6将缩减为相关簇/值域{0x5,0x6}的1位指引值b0和1位偏移值b1,进而该1位指引值b0和该1位偏移值b1均被记录至压缩顶点块VB’的主体部分。如果所提取的数据单元阵列中的一数据单元所具有的值为0xa,那么原始的4位值0xa将缩减为相关簇/值域{0xa,0xb}的1位指引值b1和1位偏移值b0,进而该1位指引值b1和该1位偏移值b0均被记录至压缩顶点块VB’的主体部分。如果所提取的数据单元阵列中的数据单元所具有的值为0xb,那么原始的4位值0xb将缩减为相关簇/值域{0xa,0xb}的1位指引值b1和1位偏移值b1,进而该1位指引值b1和该1位偏移值b1均被记录至压缩顶点块VB’的主体部分。因此,压缩率为[(4*2+3)+(1+1)*16]/(4*16)=67.1%。
当所提取的数据单元阵列中的数据单元所具有的值被分类为均具有单一值的多个簇时,压缩器124应用“cn”类型压缩对所提取的数据单元阵列中的数据单元所具有的值进行压缩。取图2所示的包括多个数据单元DU7的数据单元阵列为例,其中,多个数据单元DU7分别从顶点V0-V15的顶点组分VC0中选取。考虑这样的情况,即顶点V0-V15的顶点组分VC0中的多个数据单元DU7仅具有4个互异值0x4、0x8、0xa和0xf,那么对顶点V0-V15的顶点组分VC0中的多个数据单元DU7具有的值所进行的分簇结果将包括仅有单一值0x4的第一簇、仅有单一值0x8的第二簇、仅有单一值0xa的第三簇和仅有单一值0xf的第四簇。因此,压缩器124选取“cn4”压缩算法,其中,指引“4”代表数据单元阵列中的多个数据单元所共享的互异值的数量。因此,压缩器124分别将不同簇的互异值0x4、0x8、0xa和0xf以及指明压缩类型“cn4”的3位类型值记录至压缩顶点块VB’的标头部分。对于所提取的数据单元阵列中的多个数据单元所具有的每一值,压缩器124将同一数据单元所具有的值相关的簇的2位指引值记录至压缩顶点块VB’的主体部分,其中,该数据单元所具有的值不记录至压缩顶点块VB’的主体部分。如果所提取的数据单元阵列中的数据单元所具有的值为0x4,那么原始的4位值0x4将缩减为相关簇[0x4]的2位指引值b00,进而该2位指引值b00被记录至压缩顶点块VB’的主体部分。如果所提取的数据单元阵列中的数据单元所具有的值为0x8,那么原始的4位值0x8将缩减为相关簇[0x8]的2位指引值b01,进而该2位指引值b01被记录至压缩顶点块VB’的主体部分。如果所提取的数据单元阵列中的数据单元所具有的值为0xa,那么原始的4位值0xa将缩减为相关簇[0xa]的2位指引值b10,进而该2位指引值b10被记录至压缩顶点块VB’的主体部分。如果所提取的数据单元阵列中的数据单元所具有的值为0xf,那么原始的4位值0xf将缩减为相关簇[0xf]的2位指引值b11,进而该2位指引值b11被记录至压缩顶点块VB’的主体部分。
当不启用顶点数据压缩时,存储未压缩的数据单元阵列需要的存储空间为(4*16)位,其中,4为每一数据单元中位的数量,而16为顶点块中顶点的数量。然而,当启用所提出的“cn4”压缩算法时,存储压缩的数据单元阵列所需要的存储空间仅为[(4*4+3)+2*16]位。因此,压缩率为[(4*4+3)+2*16]/(4*16)=79.6%。
前面提到的所选取的“cn4”压缩算法除了可用于均具有多个值的多个簇的情况之外,所述“cn”类型压缩算法还可支持其他类型的压缩算法,如“cn3”压缩算法。考虑这样的情况,即顶点V0-V15的顶点组分VC0中的多个数据单元DU7仅具有3个互异值0x4、0x8和0xa,那么对顶点V0-V15的顶点组分VC0中的多个数据单元DU7具有的值所进行的分簇结果将包括仅有单一值0x4的第一簇、仅有单一值0x8的第二簇和仅有单一值0xa的第三簇。因此,压缩器124选取“cn3”压缩算法,其中,指引“3”代表数据单元阵列中的多个数据单元所共享的互异值的数量。因此,压缩器124将不同簇的互异值0x4、0x8和0xa以及指明压缩类型“cn3”的3位类型值记录至压缩顶点块VB’的标头部分。对于所提取的数据单元阵列中的多个数据单元所具有的每一值,压缩器124将同一数据单元所具有的值相关的簇的2位指引值记录至压缩顶点块VB’的主体部分,其中,该数据单元所具有的值不记录至压缩顶点块VB’的主体部分。如果所提取的数据单元阵列中的数据单元所具有的值为0x4,那么原始的4位值0x4将缩减为相关簇[0x4]的2位指引值b00,进而该2位指引值b00被记录至压缩顶点块VB’的主体部分。如果所提取的数据单元阵列中的数据单元所具有的值为0x8,那么原始的4位值0x8将缩减为相关簇[0x8]的2位指引值b01,进而该2位指引值b01被记录至压缩顶点块VB’的主体部分。如果所提取的数据单元阵列中的数据单元所具有的值为0xa,那么原始的4位值0xa将缩减为相关簇[0xa]的2位指引值b10,进而该2位指引值b10被记录至压缩顶点块VB’的主体部分。因此,压缩率为[(4*3+3)+2*16]/(4*16)=73.4%。
为了更好地理解所提出的顶点数据压缩方法的技术特征,图3阐释了对8个顶点的多个32位顶点组分(如R组分)进行压缩的一个实例。其中,位[31:28]对于所有的顶点均为0x4。因此,对其选取并应用“un”类型压缩算法以存储0x4至压缩顶点块的标头部分作为其唯一半字节值,且不存储任何位至压缩顶点块的主体部分。位[27:24]的范围为{0xa,0xd},因此,选取并应用“range1_2”压缩算法以存储0xa至该压缩顶点块的标头部分作为值域起始值,并存储2位偏移值至该压缩顶点块的主体部分。由于a=a+0、b=a+1、c=a+2且d=a+3,因而,半字节通道[27:24]的半字节阵列[0xb,0xb,0xc,0xc,0xb,0xb,0xd,0xa]可被编码为[01,01,10,10,01,01,11,00]。位[23:20]的范围值域为{0x1,0x2}和{0x9,0xa},因此,对其选取并应用“range2_1”压缩算法以存储0x1和0x9至该压缩顶点块的标头部分作为两个值域起始值,并存储1位指引值至该压缩顶点块的主体部分用于值域的选取,以及存储1位偏移值至该压缩顶点块的主体部分。由于{0x1,0x2}为第一值域,{0x9,0xa}为第二值域,且9=9+0、a=9+1、1=1+0、2=1+1,因此,半字节通道[23:20]的半字节阵列[0x9,0xa,0xa,0x9,0x1,0x2,0x2,0x1]可被编码为[10,11,11,10,00,01,01,00],其中,对于每一2位阵列元素,其第一位为指引值,而其第二位为偏移值。位[19:16]具有3个常见半字节0x1、0x8和0xe,因此,对其选取并应用“cn3”压缩算法以存储常见半字节0x1、0x8和0xe至压缩顶点块的标头部分,并存储2位指引值至该压缩顶点块的主体部分。由于0x1为第一常见半字节,0x8为第二常见半字节,且0xe为第三常见半字节,因此,半字节通道[19:16]中的半字节阵列[0x1,0x8,0x8,0xe,0xe,0x1,0x8,0x8]可被编码为[00,01,01,10,10,00,01,01]。由于位[15:0]不可压缩,因此跳过对其的数据压缩。其中,将其1位类型值(如b1)存储至压缩顶点块的标头部分,而将位[15:0]存储至压缩顶点块的主体部分。
压缩类型和值(如唯一半字节、常见半字节、有限值域基值)依次被存储至压缩顶点块的标头部分。在该实例中,压缩顶点块的标头部分可存储{“un”,“range1_2”,“range2_1”,“cn3”,0x4,0xa,0x1,0x9,0x1,0x8,0xe},其中,每一压缩类型“un”,“range1_2”,“range2_1”和“cn3”可进一步进行编码,例如,可编码为3位。
如上所述,当所提取的数据单元阵列中的数据单元所具有的值被分类为具有单一值的单一簇时,压缩器124应用“un”类型压缩,进而,将所提取的数据单元阵列中的所有数据单元所共享的值(如4位值)和相关的压缩类型信息(如3位值)记录至压缩顶点块VB’的标头部分。当所有通道CH0-CH7的数据单元均被提取以用于数据压缩,且每一提取的数据单元阵列中的多个数据单元所具有的值均被分类为具有单一值的单一簇时(例如,每一提取的对应于通道CH0-CH7的数据单元阵列中,对应于同一通道的数据单元所具有的值相同),那么压缩器124所应用的“un”类型压缩将记录8*(4+3)位至压缩顶点块VB'的标头部分。为了改善此情况下的压缩效率,也即顶点V0-V15的顶点组分VC0彼此相同时,本发明进一步提出一种“唯一组分(unique component,uc)”类型压缩算法。当选取该“uc”类型压缩算法时,压缩器124将同顶点V0-V15的任一顶点组分VC0相等的32位值和1位类型值(如uc=1)记录至标头部分,其中,顶点V0-V15的顶点组分VC0均不记录至压缩顶点块VB’的主体部分。相比较于“un”类型压缩算法需要存储8*(4+3)位至压缩顶点块VB’的标头部分,该“uc”类型压缩算法仅需存储(32+1)位至压缩顶点块VB’的标头部分。应当指出的是,该“uc”类型压缩算法是可选的。也就是说,在一可选择的设计中,可根据实际的设计考虑,省略该“uc”类型压缩算法。
图2所示的顶点组分VC0可为顶点块VB所包括的顶点的多个顶点组分之一。例如,该顶点组分VC0可为32位的顶点属性组分。另外,该顶点组分VC0也可为32位的顶点位置组分。当顶点块中的所有顶点的X坐标值和Y坐标值均可通过12.4定点格式来表示(也就是说,顶点块中的所有顶点均位于屏幕内而不在剪切空间中),那么顶点的X坐标值和Y坐标值可打包并存储为32位顶点组分,而不是存储为两个单独的分别位于剪切空间中的顶点组分fp32(剪切值x)和fp32(剪切值y)。但是,当顶点块中的所有顶点的X坐标值和Y坐标值均不能通过12.4顶点格式来表示时,那么顶点的X坐标值和Y坐标值将分别存储为位于剪切空间中的两个顶点组分如fp32(剪切值x)和fp32(剪切值y)。
在典型设计中,可选择性地对每一通道进行顶点数据压缩,进而对顶点块的多个顶点的多个顶点组分中所提取的数据单元阵列(如半字节阵列)进行压缩。为提高压缩/解压缩速度并降低硬件成本,本发明进一步提出一种通道选择性顶点数据压缩方案,其仅对特定通道进行顶点数据压缩。例如,压缩器124可跳过对一些半字节通道的压缩。在该实施例中,压缩器124用以根据顶点块VB中的多个顶点的多个顶点组分的数据类型,来确定多个数据单元阵列,用于选择性顶点数据压缩。
图4为本发明一实施例的顶点位置组分的通道化压缩率和顶点属性组分的通道化压缩率的示意图。从图4的子图(A)中可以看出,顶点位置组分的4个最高有效位(most significant bit,MSB)通道(也即通道4-7)的压缩率要优于该顶点位置组分的剩余通道(也即通道0-3)的压缩率。此外,从图4的子图(B)中可以看出,顶点属性组分的3个MSB通道(也即通道5-7)和一个最低有效位(least significant bit,LSB)通道(也即通道0)的压缩率要优于该顶点属性组分的剩余通道(也即通道1-4)的压缩率。鉴于以上观察,当顶点组分为顶点位置组分时,通道选择性顶点数据压缩方案可仅对4个高位数据单元(如4个MSB半字节)进行压缩,而当顶点组分为顶点属性组分时,通道选择性顶点数据压缩方案可仅对3个高位数据单元(如3个MSB半字节)和一个低位数据单元(如1个LSB半字节)进行压缩。通过这种方式,便可实现压缩速度和压缩质量之间的平衡。
如上面所提到的,压缩顶点块VB’包括标头部分和主体部分。在一典型设计中,标头部分可进一步划分为固定长度部分和可变长度部分。不同的压缩顶点块的标头部分的位宽可根据所使用的不同的压缩算法而彼此不同。当所存储的每一标头部分均使用固定长度部分和可变长度部分时,不同压缩顶点块的固定长度部分的位宽将被限制为彼此相同,但是不同压缩顶点块的可变长度部分的位宽可允许彼此不同。
图5为本发明一实施例的压缩数据块的数据结构的示意图。在一典型设计中,压缩顶点块VB’的标头部分划分为位于主体部分之前的标头前部(header-front portion,HF portion)和紧接主体部分之后的标头后部(header-back portion,HB portion),其中,标头前部为前面提到的固定长度部分,而标头后部为前面提到的可变长度部分。压缩类型(如“un”,“uc”,“range1_1”,“range1_2”,“range1_3”,“range2_1”,“range2_2”,“cn3”和“cn4”)均仅存储至标头前部。而值(如唯一半字节、常见半字节、有限值域基值)通常存储至标头后部。但是,当所有的压缩类型均存储至标头前部之后,而标头前部仍然具有空闲空间的话,那么也可将一部分值(如唯一半字节、常见半字节、有限值域基值)存储至标头前部。
当将压缩顶点块VB’存储至存储设备108时,标头前部、主体部分和标头后部可存储至连续的地址中。由于压缩顶点块VB’以标头前部开始,且标头前部具有固定的位宽,因此,标头部分所记录的信息可容易地从存储设备108中获取。在该实施例中,标头部分所包括的信息可用以判定主体部分中的每一压缩顶点V0’-V15’的位宽(其可包括指引值和/或偏移值)和标头后部的位宽。因此,顶点数据解压缩装置110可从存储设备108中获取压缩顶点块VB’的标头前部,并对标头前部进行解码以了解主体部分和标头后部的数据配置。在了解了压缩顶点块VB’的主体部分和标头后部的数据配置之后,顶点数据解压缩装置110可很容易地于主体部分找出图元的压缩顶点,并于标头部分(如标头前部和/或标头后部)找出其相关值,然后对压缩顶点进行解压缩,以获得解压缩顶点。由于压缩器124所使用的压缩算法是无损压缩,因此,解压缩顶点应该同原始顶点完全一致。
顶点块VB中的顶点V0-V15使用相同的压缩算法组合来进行压缩,其中,对所选取的通道应用这些压缩算法。因此,压缩顶点V0’-V15’的位宽是相同的。更具体地说,每一压缩顶点V0’-V15’均具有相同的数据结构和相同的跨幅。而这能够实现对存储设备108中存储的压缩顶点V0’-V15’进行随机存取。此外,本发明所提出的顶点数据压缩和相关的顶点数据解压缩简单快捷,因此其对3D图形的渲染性能影响甚微。
对于顶点数据解压缩装置110而言,其接收电路126用以接收从压缩顶点块VB’中所读取的数据,其中,压缩顶点块VB’包括标头部分和主体部分。压缩顶点块VB’通过对从顶点块VB中所提取的至少一个数据单元阵列进行压缩而生成,每一数据单元阵列包括多个数据单元,这些数据单元分别从顶点块VB中的多个顶点的多个顶点组分中选取,并对应于同一通道,且每一数据单元均小于一字节。解压缩器128用于对标头部分进行解码以获取记录值(如唯一组分、唯一半字节、常见半字节或有限值域基值),并至少部分地根据从标头部分所获取的记录值来生成一顶点的至少一部分的解压缩顶点组分。
例如,顶点数据解压缩装置110可获取同图元的顶点相关的图元信息(Addr,V_0,V_1,V_2)。根据存储设备108中所存储的压缩顶点块VB’的起始地址Addr,接收电路126从压缩顶点块VB’中接收具有固定位宽(其为预定值)的标头前部。解压缩器128对所接收到的标头前部进行解码,以了解压缩顶点块VB’的主体部分和标头后部的数据配置情况,其包括每一压缩顶点的位宽(即压缩顶点的跨幅)和标头后部的位宽。接下来,根据解压缩的顶点跨幅、标头前部的固定位宽和压缩顶点块VB’的起始地址Addr,解压缩器122计算顶点标识符V_0,V_1,V_2所指向的压缩顶点的起始地址。接收电路126根据计算出的所需要的压缩顶点的起始地址,接收从压缩顶点块VB’中读取的所需要的压缩顶点,并将所接收的压缩顶点发送至解压缩器128,以用于解压。接下来,解压缩器128应用同压缩器124所使用的压缩算法相匹配的解压缩算法,并生成解压缩顶点至像素着色器112,以用于像素(片段)着色。
如果解压缩器128参照标头部分所记录的压缩类型从而确定所使用的对多个原始顶点的顶点组分进行压缩的压缩算法为“uc”类型,那么解压缩器128便对标头部分(如标头前部和/或标头后部)进行解码,以获取作为完整顶点组分(即唯一顶点组分)的记录值,并将该从标头部分获取的记录值设置为顶点的解压缩顶点组分,而无需参照压缩顶点块的主体部分。
如果解压缩器128参照标头部分所记录的压缩类型从而确定所使用的对多个原始顶点的顶点组分中的数据单元进行压缩的压缩算法为“un”类型,那么解压缩器128便对标头部分(如标头前部和/或标头后部)进行解码,以获取作为该顶点的部分组分(如唯一半字节)的记录值,并将该从标头部分获取的记录值设置为顶点的解压缩顶点组分的一数据单元,而无需参照压缩顶点块的主体部分。
如果解压缩器128参照标头部分所记录的压缩类型从而确定所使用的对多个原始顶点的顶点组分中的数据单元进行压缩的压缩算法为“cn”类型,那么解压缩器128便对压缩顶点块的主体部分(如相应的压缩顶点)进行解码,以获取指引值,并参照该指引值从标头部分(如标头前部和/或标头后部)获取该顶点组分的记录值,并输出该从标头部分获取的记录值,作为顶点的解压缩顶点组分的数据单元。
如果解压缩器128参照标头部分所记录的压缩类型从而确定所使用的对多个原始顶点的顶点组分的数据单元进行压缩的压缩算法为“有限值域”类型,例如,“range1_1”压缩算法,“range1_2”压缩算法或“range1_3”压缩算法,那么解压缩器128便对压缩顶点组块的主体部分(如相应的压缩顶点)进行解码,以获取偏移值,从标头部分(如标头前部和/或标头后部)获取基值,并将该偏移值添加至基值以生成顶点的解压缩顶点组分的数据单元。
如果解压缩器128参照标头部分所记录的压缩类型从而确定所使用的对一些原始顶点的顶点组分的数据单元进行压缩的压缩算法为“有限值域”类型,例如,“range2_1”压缩算法或“range2_2”压缩算法,那么解压缩器128便对压缩顶点块的主体部分(如相应的压缩顶点)进行解码,以获取指引值和偏移值,从标头部分(如标头前部和/或标头后部)的多个记录基值中(如有限值域的起始值)选取目标基值,并将该偏移值添加目标基值,以生成顶点的解压缩顶点组分的一数据单元。
图6为本发明一实施例的顶点数据压缩方法的流程图。如果结果实质上相同,图6中的步骤不必按其所示的确切顺序执行。顶点数据压缩方法可应用于图1所示的顶点数据压缩装置106,该顶点数据压缩方法可简述如下。
步骤600:开始。
步骤602:收集多个顶点组成顶点块。
步骤604:对于所选取的通道,从其顶点块中提取数据单元阵列,其中,数据单元阵列包括多个数据单元,这些数据单元分别从多个顶点的多个顶点组分中选取,并均对应于所选取的通道,且每一数据单元均小于一字节。
步骤606:检查数据单元阵列中的数据单元,以确定压缩算法。
步骤608:根据所选取的压缩算法对数据单元阵列中的数据单元进行压缩,并生成相应的包括压缩类型和压缩相关值的标头信息。
步骤610:检查是否有更多的通道需要进行数据压缩。如果是,则执行步骤604;否则,执行步骤612。
步骤612:将压缩顶点块存储至存储设备中(如片外仓存储器),其中,该压缩顶点块包括用于记录压缩顶点的标头信息的标头部分和用于记录压缩顶点的主体部分。
步骤614:结束。
本领域的熟练技术人员在阅读上述关于顶点数据压缩装置106的段落之后,可以容易地理解图6所示的每一步骤的细节,因此,出于简洁性考虑,进一步的细节在这里不再赘述。
图7为本发明一实施例的顶点数据解压缩方法的流程图。如果结果实质上相同,图7中的步骤不必按其所示的确切顺序执行。顶点数据解压缩方法可应用于图1所示的顶点数据解压缩装置110,该顶点数据解压缩方法可简述如下。
步骤700:开始。
步骤702:接收标头前部(其为压缩顶点块的标头的第一部分)。
步骤704:对标头前部进行解码,以了解压缩顶点块的主体部分和标头后部(其为压缩顶点块的标头部分的第二部分)的数据配置。
步骤706:对标头部分(如标头前部和/或标头后部)进行解码以获取对应于顶点的顶点组分的至少一部分记录值(如唯一组分、唯一半字节、常见半字节或有限值域基值)。
步骤708:至少部分地根据从标头部分所获取的记录值生成顶点的至少一部分解压缩顶点组分。例如,解压缩顶点组分可直接通过记录值进行设定。此外,解压缩顶点组分的数据单元可通过记录值和偏移值的总和进行设定,其中,偏移值通过对压缩顶点块的主体部分中对应的压缩顶点进行解码而获得。
步骤710:检查是否有多个通道或多个压缩顶点需要进行解压缩。如果是,则执行步骤706;否则,执行步骤712。
步骤712:结束。
本领域的熟练技术人员在阅读上述关于顶点数据解压缩装置110的段落之后,可以容易地理解图7所示的每一步骤的细节,因此,出于简洁性考虑,进一步的细节在这里不再赘述。
本领域的熟练技术人员将容易地观察到,可对本发明的装置和方法做出大量的修改和替换,同时保留本发明的指导内容。相应地,上述公开内容应被解释为,仅通过所附的权利要求书的界限和范围来进行限定。
Claims (23)
1.一种顶点数据压缩方法,其特征在于,所述顶点数据压缩方法包括:
收集多个顶点组成顶点块;
从所述顶点块中提取至少一个数据单元阵列,其中,该至少一个数据单元阵列中的每一个包括多个数据单元,所述多个数据单元分别从所述多个顶点的多个顶点组分中选取,所述多个数据单元对应于同一通道,且所述多个数据单元中的每一个均小于一字节;及
对于该至少一个数据单元阵列中的每一个,检查数据单元阵列中的所述多个数据单元,以选取压缩算法,并根据选取的所述压缩算法对所述数据单元阵列中的所述多个数据单元进行压缩。
2.如权利要求1所述的顶点数据压缩方法,其特征在于,压缩顶点块包括多个压缩顶点,所述多个压缩顶点通过对所述顶点块中的所述多个顶点进行压缩而生成,且所述多个压缩顶点具有相同的位宽。
3.如权利要求1所述的顶点数据压缩方法,其特征在于,检查所述数据单元阵列中的所述多个数据单元,以选取所述压缩算法包括:
将所述多个数据单元所具有的多个值分类为至少一簇;及
参照通过所述分类步骤建立的所述至少一簇以选取所述压缩算法。
4.如权利要求3所述的顶点数据压缩方法,其特征在于,所述多个数据单元具有的所述多个值被分类为仅具有单一值的单一簇。
5.如权利要求4所述的顶点数据压缩方法,其特征在于,压缩顶点块包括标头部分和主体部分,且所述选取的压缩算法包括:
记录所述标头部分的所述单一值,其中,所述多个数据单元所具有的所述多个值均不记录至所述主体部分。
6.如权利要求3所述的顶点数据压缩方法,其特征在于,所述多个数据单元具有的所述多个值被分类为具有多个连续值的单一簇。
7.如权利要求6所述的顶点数据压缩方法,其特征在于,压缩顶点块包括标头部分和主体部分,且所述选取的压缩算法包括:
将从所述单一簇的所述多个连续值中选取的特定值记录至所述标头部分;及
对于所述多个数据单元具有的所述多个值中的每一值,将所述特定值和所述多个数据单元中的每一个所具有的值之间的偏移值记录至所述主体部分,其中,所述多个数据单元所具有的值不记录至所述主体部分。
8.如权利要求3所述的顶点数据压缩方法,其特征在于,所述多个数据单元所具有的多个值被分类为多簇,每一簇均仅具有单一值。
9.如权利要求8所述的顶点数据压缩方法,其特征在于,压缩顶点块包括标头部分和主体部分,且所述选取的压缩算法包括:
将所述多簇的多个单一值记录至所述标头部分;及
对于所述多个数据单元所具有的所述多个值中的每一值,将所述多个数据单元中的每一个所具有的值相关的簇的指引值记录至所述主体部分,其中,所述多个数据单元具有的所述值不记录至所述主体部分。
10.如权利要求3所述的顶点数据压缩方法,其特征在于,所述多个数据单元具有的所述多个值被分类为多个簇,每一簇均具多个连续值。
11.如权利要求10所述的顶点数据压缩方法,其特征在于,压缩顶点块包括标头部分和主体部分,且所述选取的压缩算法包括:
对于每一簇,将从簇的所述多个连续值中选取的特定值记录至所述标头部分;及
对于所述多个数据单元具有的所述多个值中的每一值,将所述多个数据单元中的每一个所具有的值相关的簇的指引值以及相关的簇的所述特定值和所述多个数据单元的每一个所具有的值之间的偏移值记录至所述主体部分,其中,所述多个数据单元具有的所述值不记录至所述主体部分。
12.如权利要求3所述的顶点数据压缩方法,其特征在于,所述多个顶点的所述多个顶点组分中的每一个均被划分为分别对应于多个通道的多个数据单元;分别按照所述多个通道提取多个数据单元阵列;且对于每一数据单元阵列,将对应于同一通道的数据单元阵列中的多个数据单元所具有的多个值分类为仅具有单一值的单一簇。
13.如权利要求12所述的顶点数据压缩方法,其特征在于,压缩顶点块包括标头部分和主体部分,且所述选取的压缩算法包括:
将同每一顶点组分相等的值记录至所述标头部分,其中,所述多个顶点组分均不记录至所述主体部分。
14.如权利要求1所述的顶点数据压缩方法,其特征在于,压缩顶点块包括标头部分,且所述标头部分包括固定长度分部和可变长度分部。
15.如权利要求1所述的顶点数据压缩方法,其特征在于,顶点组分包括X坐标值和Y坐标值,所述X坐标值和所述Y坐标值均通过定点格式来表示。
16.如权利要求1所述的顶点数据压缩方法,其特征在于,所述顶点数据压缩方法进一步包括:
参照所述多个顶点组分的数据类型以从所述多个顶点的所述多个顶点组分中选取多个所述数据单元阵列,以用于选择性顶点数据压缩。
17.一种顶点数据解压缩方法,其特征在于,所述顶点数据解压缩方法包括:
接收从压缩顶点块中读取的数据,其中,所述压缩顶点块包括标头部分和主体部分,所述压缩顶点块通过对从顶点块中提取的至少一个数据单元阵列进行压缩而生成,每一数据单元阵列包括多个数据单元,所述多个数据单元分别从所述顶点块的多个顶点的多个顶点组分中选取,所述多个数据单元均对应于同一通道,且每一数据单元均小于一字节;
对所述标头部分进行解码以获取记录值;及
至少部分地根据从所述标头部分获取的所述记录值来生成顶点的至少一部分的解压缩顶点组分。
18.如权利要求17所述的顶点数据解压缩方法,其特征在于,生成顶点的所述至少一部分的解压缩顶点组分包括:
不参照所述主体部分将所述记录值设定为所述解压缩顶点组分;或
不参照所述主体部分将所述记录值设定为所述解压缩顶点组分的数据单元。
19.如权利要求17所述的顶点数据解压缩方法,其特征在于,所述顶点数据解压缩方法进一步包括:
对所述主体部分进行解码以获取偏移值;
其中,对所述标头部分进行解码包括:
获取所述记录值作为基值;及
生成顶点的所述至少一部分的解压缩顶点组分包括:
添加所述偏移值至所述基值以生成顶点的所述解压缩顶点组分的数据单元。
20.如权利要求17所述的顶点数据解压缩方法,其特征在于,所述顶点数据解压缩方法进一步包括:
对所述主体部分进行解码,以获取指引值和偏移值;
其中,对所述标头部分进行解码进一步包括:
参照所述指引值以从多个记录基值中选取所述记录值作为目标基值;及
生成顶点的所述至少一部分的解压缩顶点组分包括:
添加所述偏移值至所述目标基值以生成顶点的所述解压缩顶点组分的数据单元。
21.如权利要求17所述的顶点数据解压缩方法,其特征在于,所述顶点数据解压缩方法进一步包括:
对所述主体部分进行解码以获取指引值;
其中,对所述标头部分进行解码进一步包括:
参照所述指引值以从所述标头部分的多个值中选取所述记录值;及
生成顶点的所述解压缩顶点组分包括:
输出所述记录值作为顶点的所述解压缩顶点组分的数据单元。
22.一种顶点数据压缩装置,其特征在于,所述顶点数据压缩装置包括:
接收电路,用于收集多个顶点以组成顶点块;和
压缩器,用于从所述顶点块中提取至少一个数据单元阵列,其中,每一数据单元阵列包括多个数据单元,所述多个数据单元分别从所述多个顶点的多个顶点组分中选取,并对应于同一通道,且每一所述数据单元均小于一字节;并且对于每一数据单元阵列,检查所述数据单元阵列中的所述多个数据单元,以选取压缩算法,并根据所述选取的压缩算法对所述数据单元阵列中的所述多个数据单元进行压缩。
23.一种顶点数据解压缩装置,其特征在于,所述顶点数据解压缩装置包括:
接收电路,用于接收从压缩顶点块中读取的数据,其中,所述压缩顶点块包括标头部分和主体部分,所述压缩顶点块通过对从顶点块中提取的至少一个数据单元阵列进行压缩而生成,每一数据单元阵列包括多个数据单元,所述多个数据单元分别从所述顶点块的所述多个顶点的多个顶点组分中选取,所述多个数据单元对应于同一通道,且每一所述数据单元均小于一字节;
解压缩器,用于对所述标头部分进行解码以获取记录值,并至少部分地根据从所述标头部分获取的所述记录值来生成顶点的至少一部分的解压缩顶点组分。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/705,949 US9589315B2 (en) | 2015-05-06 | 2015-05-06 | Vertex data compression method and apparatus for compressing vertex data through analyzing channel properties and related vertex data decompression method and apparatus |
US14/705,949 | 2015-05-06 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106127671A true CN106127671A (zh) | 2016-11-16 |
Family
ID=57222940
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510852281.8A Pending CN106127671A (zh) | 2015-05-06 | 2015-11-27 | 顶点数据压缩方法和装置及相关的顶点数据解压缩方法和装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US9589315B2 (zh) |
CN (1) | CN106127671A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108122189A (zh) * | 2016-11-29 | 2018-06-05 | 三星电子株式会社 | 硬件中的顶点属性压缩和解压缩 |
CN108848082A (zh) * | 2018-05-31 | 2018-11-20 | 深圳市腾讯网络信息技术有限公司 | 数据处理方法、装置、存储介质及计算机设备 |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10460418B2 (en) * | 2017-02-10 | 2019-10-29 | Microsoft Technology Licensing, Llc | Buffer index format and compression |
US10546393B2 (en) * | 2017-12-30 | 2020-01-28 | Intel Corporation | Compression in machine learning and deep learning processing |
US11748839B2 (en) | 2020-04-16 | 2023-09-05 | Samsung Electronics Co., Ltd. | Efficient fast random access enabled geometry attribute compression mechanism |
US20230004533A1 (en) * | 2021-07-01 | 2023-01-05 | Microsoft Technology Licensing, Llc | Hybrid intermediate stream format |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6028607A (en) * | 1998-01-15 | 2000-02-22 | Sun Microsystems, Inc. | Method of producing a sequence of triangles from a vertex raster with and without half resolution edges while decompressing a compressed geometry stream |
CN103098094A (zh) * | 2010-09-10 | 2013-05-08 | 想象技术有限公司 | 用于基于图块的3d计算机图形系统的可随机访问的无损参数数据压缩 |
CN104143990A (zh) * | 2013-05-09 | 2014-11-12 | 想象技术有限公司 | 顶点参数数据压缩 |
-
2015
- 2015-05-06 US US14/705,949 patent/US9589315B2/en active Active
- 2015-11-27 CN CN201510852281.8A patent/CN106127671A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6028607A (en) * | 1998-01-15 | 2000-02-22 | Sun Microsystems, Inc. | Method of producing a sequence of triangles from a vertex raster with and without half resolution edges while decompressing a compressed geometry stream |
CN103098094A (zh) * | 2010-09-10 | 2013-05-08 | 想象技术有限公司 | 用于基于图块的3d计算机图形系统的可随机访问的无损参数数据压缩 |
CN104143990A (zh) * | 2013-05-09 | 2014-11-12 | 想象技术有限公司 | 顶点参数数据压缩 |
US20140354666A1 (en) * | 2013-05-09 | 2014-12-04 | Imagination Technologies Limited | Vertex parameter data compression |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108122189A (zh) * | 2016-11-29 | 2018-06-05 | 三星电子株式会社 | 硬件中的顶点属性压缩和解压缩 |
CN108122189B (zh) * | 2016-11-29 | 2021-11-30 | 三星电子株式会社 | 硬件中的顶点属性压缩和解压缩 |
CN108848082A (zh) * | 2018-05-31 | 2018-11-20 | 深圳市腾讯网络信息技术有限公司 | 数据处理方法、装置、存储介质及计算机设备 |
Also Published As
Publication number | Publication date |
---|---|
US20160328822A1 (en) | 2016-11-10 |
US9589315B2 (en) | 2017-03-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106127671A (zh) | 顶点数据压缩方法和装置及相关的顶点数据解压缩方法和装置 | |
CN101154291B (zh) | 图像数据压缩方法、图像显示方法及其相应装置 | |
CN101919254B (zh) | 基于预测的图像处理 | |
CN101233542B (zh) | 基于权重的图像处理 | |
CN107103629A (zh) | 在3d计算机图形系统中压缩顶点参数数据的方法和设备 | |
US7307642B2 (en) | Graphics compression | |
US20170185712A1 (en) | A method of storing/reconstructing a multitude of sequences in/from a data storage structure | |
CN108122189B (zh) | 硬件中的顶点属性压缩和解压缩 | |
GB2539966A (en) | Data processing method and apparatus | |
US7847802B1 (en) | Apparatus, method, and system for coalesced Z data and color data for raster operations | |
CN110113617B (zh) | 图像压缩与解压缩的方法、装置、电子设备及存储介质 | |
CN110808738B (zh) | 数据压缩方法、装置、设备及计算机可读存储介质 | |
CN111405294B (zh) | 一种图像栅格数据的存储及传输方法 | |
CN106849956A (zh) | 压缩方法、解压缩方法、装置和数据处理系统 | |
CN105719321A (zh) | 一种压缩纹理的方法及装置 | |
KR101470505B1 (ko) | 공간 데이터 압축 장치 및 그 방법과, 압축된 공간 데이터 복원 장치 및 그 방법 | |
CN105407338A (zh) | 一种图像色彩填充方法和装置 | |
US20150178248A1 (en) | Delayed rendering of content | |
CN113938572A (zh) | 图片传输方法、显示方法、装置、电子设备及存储介质 | |
US20110075942A1 (en) | Methods for digital image compression | |
US20020081038A1 (en) | Graphic image coding | |
US6912305B1 (en) | Computer animation | |
CN109146766B (zh) | 对象选择方法及装置 | |
Zhang | The studies and implementation for conversion of image file format | |
CN115550661B (zh) | 一种图像压缩方法、复原方法、计算设备及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20161116 |