CN115794666A - 纹素的内存地址确定方法、装置、设备及存储介质 - Google Patents
纹素的内存地址确定方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN115794666A CN115794666A CN202310046316.3A CN202310046316A CN115794666A CN 115794666 A CN115794666 A CN 115794666A CN 202310046316 A CN202310046316 A CN 202310046316A CN 115794666 A CN115794666 A CN 115794666A
- Authority
- CN
- China
- Prior art keywords
- texel
- texture
- position information
- target
- compressed
- 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.)
- Granted
Links
Images
Landscapes
- Image Generation (AREA)
Abstract
本申请实施例公开了一种纹素的内存地址确定方法、装置、设备及存储介质,其中,所述方法包括:获取纹理数据中目标纹素的第一位置信息和所述纹理数据对应的压缩纹理算法;所述第一位置信息用于确定所述目标纹素在所述纹理数据中的位置;基于所述压缩纹理算法对应的单位纹素块的尺寸,对所述第一位置信息进行处理,得到第二位置信息;所述第二位置信息用于确定包括所述目标纹素的单位纹素块在所述纹理数据中的位置;通过地址转换算法将所述第二位置信息转换为所述目标纹素的内存地址。
Description
技术领域
本申请涉及但不限于数据处理技术领域,尤其涉及一种纹素的内存地址确定方法、装置、设备及存储介质。
背景技术
当前各种应用程序在使用过程中不可避免的需要加载对应的纹理数据在应用程序中显示,而在使用纹理数据时是用图形处理器GPU(Graphics Processing Unit)来进行渲染,在渲染过程中,通常需要通过压缩纹理算法进行纹理数据压缩,得到压缩纹理文件后再加载到图形处理器中进行处理。
上述过程中,针对不同的压缩纹理算法,由于不同的压缩纹理算法需要进行压缩的数据块格式并不相同,在GPU根据纹素的坐标计算内存中的内存地址的过程中,需要为每一压缩纹理算法单独设计一种计算公式,这增大了GPU设计复杂度。
发明内容
有鉴于此,本申请实施例至少提供一种纹素的内存地址确定方法、装置、设备、存储介质。
本申请实施例的技术方案是这样实现的:
一方面,本申请实施例提供一种纹素的内存地址确定方法,所述方法包括:获取纹理数据中目标纹素的第一位置信息和所述纹理数据对应的压缩纹理算法;所述第一位置信息用于确定所述目标纹素在所述纹理数据中的位置;基于所述压缩纹理算法对应的单位纹素块的尺寸,对所述第一位置信息进行处理,得到第二位置信息;所述第二位置信息用于确定包括所述目标纹素的单位纹素块在所述纹理数据中的位置;通过地址转换算法将所述第二位置信息转换为所述目标纹素的内存地址。
在一些实施例中,所述地址转换算法还用于在确定不进行纹理压缩的情况下,将所述目标纹素的第一位置信息转换为所述目标纹素的内存地址。
本申请实施例中相比于传统技术中为常规格式(不进行纹理压缩)设置一种地址转换算法,为压缩纹理算法设置另一种地址转换算法的方案,仅需要设置一种地址转换算法,即可在各种实施场景下确定目标纹素的内存地址,提升了内存地址的计算效率。
在一些实施例中,所述第一位置信息为第一位置坐标序列,所述第二位置信息为第二位置坐标序列;所述基于所述压缩纹理算法对应的单位纹素块,对所述第一位置信息进行处理,得到第二位置信息,包括:基于所述压缩纹理算法中需要压缩的单位纹素块的尺寸,确定第三位置信息在所述第一位置坐标序列中的序列长度;所述第三位置信息用于确定所述目标纹素在所述单位纹素块中的位置;去除所述第一位置坐标序列中所述序列长度的低位比特,得到所述第二位置坐标序列。
在一些实施例中,所述通过地址转换算法将所述第二位置信息转换为所述目标纹素的内存地址,包括:基于所述地址转换算法,对所述第二位置坐标序列进行转换,得到纹素子地址;基于所述纹素子地址和所述纹理数据对应的纹理子地址,得到所述目标纹素的内存地址。
本申请实施例中,在确定目标纹素的内存地址的过程中,基于所述纹素子地址和所述纹理数据对应的纹理子地址确定目标纹素的内存地址。这样,可以使位于同一纹理数据中的纹素存储于内存中的一个数据块中,便于纹素的存储和/或读取。
在一些实施例中,所述去除所述第一位置坐标序列中所述序列长度的低位比特,得到所述第二位置坐标序列,包括:确定所述压缩纹理算法中需要压缩的单位纹素块对应的至少一个位置维度,和每一所述位置维度对应的子序列长度;在所述第一位置坐标序列中,去除每一所述位置维度对应的子序列长度的低位比特;将去除后的第一位置坐标序列确定为所述第二位置坐标序列。
在一些实施例中,所述在所述第一位置坐标序列中,去除每一所述位置维度对应的子序列长度的低位比特,包括:基于所述单位纹素块的尺寸,确定每一所述位置维度对应的子序列长度;在所述第一位置坐标序列中,去除每一所述位置维度的所述子序列长度个低位比特。
在一些实施例中,所述第一位置坐标序列为对应第一位置维度、第二位置维度和第三位置维度;所述单位纹素块对应的至少一个位置维度包括所述第一位置维度和所述第二位置维度。
在一些实施例中,所述第一位置坐标序列为二进制序列,所述在所述第一位置坐标序列中,去除每一所述位置维度的所述子序列长度个低位比特,包括:在所述第一位置坐标序列中,去除所述第一位置维度的低位2比特和所述第二位置维度的低位2比特。
在一些实施例中,所述压缩纹理算法为以下任意之一:BC和ETC。
另一方面,本申请实施例提供一种纹素读取方法,所述方法包括:获取纹理数据中目标纹素的第一位置信息和所述纹理数据对应的压缩纹理算法;所述第一位置信息用于确定所述目标纹素在所述纹理数据中的位置;基于所述压缩纹理算法对应的单位纹素块的尺寸,对所述第一位置信息进行处理,得到第二位置信息;所述第二位置信息用于确定包括所述目标纹素的单位纹素块在所述纹理数据中的位置;通过地址转换算法将所述第二位置信息转换为所述目标纹素的内存地址;基于所述内存地址,从内存中读取所述目标纹素所在的压缩数据块;基于所述压缩纹理算法,对所述压缩数据块进行解压缩,得到所述目标纹素。
本申请实施例中,可以使得不同的压缩纹理算法均可以使用相同的该地址转换算法,确定目标纹素的内存地址,从而可以省去为不同压缩纹理算法设置不同的地址转换算法的方案,同时,针对位于同一单位纹素块的多个纹素,在计算内存地址的过程中,仅需要计算一次,节省了计算量,提升了内存地址的计算效率,进而提高了纹素读取效率。
在一些实施例中,所述第一位置信息为第一位置坐标序列,所述第二位置信息为第二位置坐标序列;所述基于所述压缩纹理算法对应的单位纹素块,对所述第一位置信息进行处理,得到第二位置信息,包括:基于所述压缩纹理算法中需要压缩的单位纹素块的尺寸,确定第三位置信息在所述第一位置坐标序列中的序列长度;所述第三位置信息用于确定所述目标纹素在所述单位纹素块中的位置;去除所述第一位置坐标序列中所述序列长度的低位比特,得到所述第二位置坐标序列。
在一些实施例中,所述基于所述压缩纹理算法,对所述压缩数据块进行解压缩,得到所述目标纹素,包括:截取所述第一位置坐标序列中所述序列长度的低位比特,确定第三位置坐标序列;基于所述压缩纹理算法对所述压缩数据块进行解压缩,得到包括所述目标纹素的单位纹素块;根据所述第三位置坐标序列在所述单位纹素块中确定所述目标纹素。
又一方面,本申请实施例提供一种纹素存储方法,所述方法包括:获取纹理数据中目标纹素的第一位置信息和所述纹理数据对应的压缩纹理算法;所述第一位置信息用于确定所述目标纹素在所述纹理数据中的位置;基于所述压缩纹理算法对应的单位纹素块的尺寸,对所述第一位置信息进行处理,得到第二位置信息;所述第二位置信息用于确定包括所述目标纹素的单位纹素块在所述纹理数据中的位置;通过地址转换算法将所述第二位置信息转换为所述目标纹素的内存地址;基于所述压缩纹理算法对包括所述目标纹素的单位纹素块进行压缩,得到压缩数据块;基于所述内存地址,将所述压缩数据块存储于内存中。
本申请实施例中,可以使得不同的压缩纹理算法均可以使用相同的该地址转换算法,确定目标纹素的内存地址,从而可以省去为不同压缩纹理算法设置不同的地址转换算法的方案,同时,针对位于同一单位纹素块的多个纹素,在计算内存地址的过程中,仅需要计算一次,节省了计算量,提升了内存地址的计算效率,进而提高了纹素存储效率。
又一方面,本申请实施例提供一种纹素的内存地址确定装置,所述装置包括:获取模块,用于获取纹理数据中目标纹素的第一位置信息和所述纹理数据对应的压缩纹理算法;所述第一位置信息用于确定所述目标纹素在所述纹理数据中的位置;处理模块,用于基于所述压缩纹理算法对应的单位纹素块的尺寸,对所述第一位置信息进行处理,得到第二位置信息;所述第二位置信息用于确定包括所述目标纹素的单位纹素块在所述纹理数据中的位置;转换模块,用于通过地址转换算法将所述第二位置信息转换为所述目标纹素的内存地址。
又一方面,本申请实施例提供一种纹素读取装置,所述装置包括:内存地址确定模块,用于获取纹理数据中目标纹素的第一位置信息和所述纹理数据对应的压缩纹理算法;所述第一位置信息用于确定所述目标纹素在所述纹理数据中的位置;基于所述压缩纹理算法对应的单位纹素块的尺寸,对所述第一位置信息进行处理,得到第二位置信息;所述第二位置信息用于确定包括所述目标纹素的单位纹素块在所述纹理数据中的位置;通过地址转换算法将所述第二位置信息转换为所述目标纹素的内存地址;读取模块,用于基于所述内存地址,从内存中读取所述目标纹素所在的压缩数据块;解压缩模块,用于基于所述压缩纹理算法,对所述压缩数据块进行解压缩,得到所述目标纹素。
又一方面,本申请实施例提供一种纹素存储装置,所述装置包括:内存地址确定模块,用于获取纹理数据中目标纹素的第一位置信息和所述纹理数据对应的压缩纹理算法;所述第一位置信息用于确定所述目标纹素在所述纹理数据中的位置;基于所述压缩纹理算法对应的单位纹素块的尺寸,对所述第一位置信息进行处理,得到第二位置信息;所述第二位置信息用于确定包括所述目标纹素的单位纹素块在所述纹理数据中的位置;通过地址转换算法将所述第二位置信息转换为所述目标纹素的内存地址;压缩模块,用于基于所述压缩纹理算法对包括所述目标纹素的单位纹素块进行压缩,得到压缩数据块;存储模块,用于基于所述内存地址,将所述压缩数据块存储于内存中。
再一方面,本申请实施例提供一种计算机设备,包括存储器和处理器,所述存储器存储有可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法中的部分或全部步骤。
又一方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述方法中的部分或全部步骤。
本申请实施例中,通过压缩纹理算法对应的单位纹素块的尺寸对目标纹素在所述纹理数据中的第一位置信息进行变换处理,得到包括目标纹素的单位纹素块在所述纹理数据中的第二位置信息,由此,基于该第二位置信息生成的内存地址,相比于传统技术中基于第一位置信息生成的内存地址,由于去除了压缩纹理算法影响的目标纹素在单位纹素块中的内部位置因素,这样,可以使得不同的压缩纹理算法均可以使用相同的该地址转换算法,确定目标纹素的内存地址,从而可以省去为不同压缩纹理算法设置不同的地址转换算法的方案,降低了GPU的设计复杂度,同时,针对位于同一单位纹素块的多个纹素,在计算内存地址的过程中,仅需要计算一次,节省了计算量,提升了内存地址的计算效率,进而提高了读取/存储效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,而非限制本申请的技术方案。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,这些附图示出了符合本申请的实施例,并与说明书一起用于说明本申请的技术方案。
图1A为本申请实施例提供的一种纹素的内存地址确定方法的实现流程示意图;
图1B为本申请实施例提供的一种二维纹理数据和三维纹理数据之间的关系示意图;
图1C为本申请实施例提供的一种纹素在纹理数据中的位置示意图;
图1D为本申请实施例提供的一种一维纹素块的位置信息示意图;
图1E为本申请实施例提供的一种二维纹素块的位置信息示意图;
图1F为本申请实施例提供的一种三维纹素块的位置信息示意图;
图2A为本申请实施例提供的另一种纹素的内存地址确定方法的实现流程示意图;
图2B为本申请实施例提供的一种目标纹素的第一位置信息的示意图;
图2C为本申请实施例提供的另一种目标纹素的第一位置信息的示意图;
图3为本申请实施例提供的又一种纹素的内存地址确定方法的实现流程示意图;
图4为本申请实施例提供的一种纹素读取方法的实现流程示意图;
图5为本申请实施例提供的另一种纹素读取方法的实现流程示意图;
图6为本申请实施例提供的一种纹素存储方法的实现流程示意图;
图7A为本申请实施例提供的一种常规3d纹理的zigzag排列示意图;
图7B为本申请实施例提供的一种BCn/ETC格式的3d纹理zigzag排列示意图;
图7C为本申请实施例提供的另一种BCn/ETC格式的3d纹理zigzag排列示意图;
图7D为本申请实施例提供的一种GPU纹理处理模块的处理流程图;
图8为本申请实施例提供的一种纹素的内存地址确定装置的组成结构示意图;
图9为本申请实施例提供的一种纹素读取装置的组成结构示意图;
图10为本申请实施例提供的一种纹素存储装置的组成结构示意图;
图11为本申请实施例提供的一种计算机设备的硬件实体示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面结合附图和实施例对本申请的技术方案进一步详细阐述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。所涉及的术语“第一/第二/第三”仅仅是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一/第二/第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请的目的,不是旨在限制本申请。
本申请实施例提供一种纹素的内存地址确定方法,该方法可以由计算机设备的处理器执行。其中,计算机设备指的可以是服务器、笔记本电脑、平板电脑、台式计算机、智能电视、机顶盒、移动设备(例如移动电话、便携式视频播放器、个人数字助理、专用消息设备、便携式游戏设备)等具备数据处理能力的设备。
图1A为本申请实施例提供的一种纹素的内存地址确定方法的实现流程示意图,如图1A所示,该方法包括如下步骤S101至步骤S103:
步骤S101、获取纹理数据中目标纹素的第一位置信息和所述纹理数据对应的压缩纹理算法;所述第一位置信息用于确定所述目标纹素在所述纹理数据中的位置。
其中,纹素(Texel,即texture element或texture pixel的合成字)是纹理元素的简称,它是计算机图形纹理空间中的基本单元。如同图像是由像素排列而成,纹理是由纹素排列表示的。
在一些实施例中,所述纹理数据可以为二维纹理数据、也可以是三维纹理数据,当然,在纹理数据需要携带其他属性数据的情况下,该纹理数据还可以为四维等更高维的纹理数据,本申请对纹理数据的维度不做限定。为了便于理解本申请提供的纹素的内存地址确定方法,以下实施例将以纹理数据为三维纹理数据为例进行说明。
请参阅图1B,其示出了一种二维纹理数据和三维纹理数据之间的关系示意图。其中,二维纹理数据11可以表示为二维纹理图片的形式,相应地,多个二维纹理数据11可以形成一个三维纹理数据12。
在一些实施例中,该第一位置信息用于确定所述目标纹素在所述纹理数据中的位置,在该纹理数据为三维纹理数据的情况下,请参阅图1C,其示出了一种纹素在纹理数据中的位置示意图,该第一位置信息用于确定该目标纹素110在三维纹理数据12中的位置。
其中,当前坐标系包括u、v、s共三个维度,图1C示例性地展示了4个二维纹理数据,该4个二维纹理数据可以形成一个三维纹理数据12,其中,二维纹理数据位于(u, v)形成的二维坐标系下,三维纹理数据位于(u, v, s)形成的三维坐标系下,也就是说,4个二维纹理数据在s维度上进行叠加,形成了三维纹理数据。
为了描述纹理数据中任一纹素的内存地址确定方法,当前实施例以目标纹素的内存地址确定过程为例进行说明。示例性地,在图1C中该目标纹素110在二维纹理数据11中对应的二维位置坐标可以为(2, 0);相应地,该目标纹素110在三维纹理数据12中对应的三维位置坐标可以为(2, 0, 0)。
上述第一位置信息可以为目标纹素在纹理数据中位置坐标,也可以为基于该位置坐标生成的位置坐标序列。示例性地,图1C中的目标纹素110的第一位置信息可以为三维位置坐标(2, 0, 0);在该位置坐标序列为二进制序列的情况下,针对图1C中的目标纹素110,可以将三维位置坐标(2, 0, 0)中的u、v、s分别转换为二进制序列,如,先将三维位置坐标转换为二进制,分别对应,之后,基于公式(1)示出的计算公式,可以得到位置坐标序列。
可以得到图1C中的目标纹素110的位置坐标序列为(0, 0, 0, 0, 0, 1)。
需要说明的是,该计算公式的形式可以基于GPU数据存储方案确定,不同的GPU数据存储方案对应不同的位置坐标序列。
步骤S102、基于所述压缩纹理算法对应的单位纹素块的尺寸,对所述第一位置信息进行处理,得到第二位置信息;所述第二位置信息用于确定包括所述目标纹素的单位纹素块在所述纹理数据中的位置。
在一些实施例中,上述单位纹素块为压缩纹理算法需要进行压缩的数据块,一般来说,相同的压缩纹理算法在进行纹理压缩的过程中,压缩的对象(单位纹素块)的尺寸是固定的。示例性地,以上述坐标系为(u, v, s)为例,该单位纹素块可以是一维纹素块,即1×1×n、1×n×1、n×1×1中的任意一种形式;该单位纹素块还可以是二维纹素块,即1×n1×n2、n1×n2×1、n1×1×n2中的任意一种形式;该单位纹素块还可以是三维纹素块,即n1×n2×n3的形式。
为了便于理解,以单位纹素块包括4个纹素为例,请参阅图1D,其示出了一种一维纹素块的位置信息示意图,在此示意图中,纹理数据14包括4×4×4共64个纹素,其中,由于当前压缩纹理算法对应的单位纹素块为一维纹素块,以(n=4)×1×1的形式为例,即,在u维度上对(n=4)个纹素组成的单位纹素块140进行纹理压缩,如图1D,上述第二位置信息为该目标纹素141对应的单位纹素块140在纹理数据14中的位置,示例性地,可以表示为三维位置坐标(1, 0, 0),可以看出,该三维位置坐标与未压缩之前该目标纹素141在该纹理数据14中的三维位置坐标与(6, 0, 0)不同。上述步骤S102中基于单位纹素块的尺寸对所述第一位置信息进行处理得到第二位置信息的过程,为将三维位置坐标与(6, 0, 0)转换为三维位置坐标与(1, 0, 0)的过程,对应的转换规则可以为((X+1)/n-1,Y,Z),其中,(X,Y,Z)为目标纹素141的第一位置信息。
以单位纹素块包括4个纹素为例,请参阅图1E,其示出了一种二维纹素块的位置信息示意图,在此示意图中,纹理数据15包括4×4×4共64个纹素,其中,由于当前压缩纹理算法对应的单位纹素块为二维纹素块,以(n1=2)×(n2=2)×1的形式为例,即,在(u,v)维度上对(n1=2)×(n2=2)个纹素组成的单位纹素块150进行纹理压缩,如图1E,上述第二位置信息为该目标纹素151对应的单位纹素块150在纹理数据15中的位置,示例性地,可以表示为三维位置坐标(3, 0, 0),可以看出,该三维位置坐标与未压缩之前该目标纹素151在该纹理数据15中的三维位置坐标与(7, 1, 0)不同。上述步骤S102中基于单位纹素块的尺寸对所述第一位置信息进行处理得到第二位置信息的过程,为将三维位置坐标与(7, 1,0)转换为三维位置坐标与(3, 0, 0)的过程,对应的转换规则可以为((X+1)/n1-1,(Y+1)/n2-1, Z),其中,(X, Y, Z)为目标纹素151的第一位置信息。
以单位纹素块包括8个纹素为例,请参阅图1F,其示出了一种三维纹素块的位置信息示意图,在此示意图中,纹理数据16包括4×4×4共64个纹素,其中,由于当前压缩纹理算法对应的单位纹素块为三维纹素块,以(n1=2)×(n2=2)×(n3=2)的形式为例,即,在(u, v,s)维度上对(n1=2)×(n2=2)×(n3=2)个纹素组成的单位纹素块160进行纹理压缩,如图1F,上述第二位置信息为该目标纹素161对应的单位纹素块160在纹理数据16中的位置,示例性地,可以表示为三维位置坐标(3, 0, 0),可以看出,该三维位置坐标与未压缩之前该目标纹素161在该纹理数据16中的三维位置坐标与(7, 1, 1)不同。上述步骤S102中基于单位纹素块的尺寸对所述第一位置信息进行处理得到第二位置信息的过程,为将三维位置坐标与(7, 1,1)转换为三维位置坐标与(3, 0, 0)的过程,对应的转换规则可以为((X+1)/n1-1,(Y+1)/n2-1,(Z+1)/n3-1),其中,(X, Y, Z)为目标纹素161的第一位置信息。
以上3种单位纹素块的附图仅是为了说明步骤S102中基于单位纹素块的尺寸对所述第一位置信息进行处理得到第二位置信息的过程,并不限定压缩纹理算法的实际压缩格式。
步骤S103、通过地址转换算法将所述第二位置信息转换为所述目标纹素的内存地址。
在一些实施例中,该内存地址为该目标纹素对应的压缩数据块(基于压缩纹理算法对目标纹素所在的单位数据块进行压缩后得到的)在内存中的存储地址。
在一些实施例中,得到的目标纹素的内存地址可以用于从内存中将包括该目标纹素的压缩数据块提取出来。即,在得到该目标纹素的内存地址之后,可以基于所述内存地址,从内存中读取所述目标纹素所在的压缩数据块;基于所述压缩纹理算法,对所述压缩数据块进行解压缩,得到所述目标纹素。
在一些实施例中,可以用于对包括该目标纹素的单位数据块进行压缩,并基于该内存地址将得到的压缩数据块存储于内存中。即,在得到该目标纹素的内存地址之后,可以基于所述压缩纹理算法对包括所述目标纹素的单位纹素块进行压缩,得到压缩数据块;基于所述内存地址,将所述压缩数据块存储于内存中。
需要说明的是,针对不同的压缩纹理算法,在通过地址转换算法将所述第二位置信息转换为所述目标纹素的内存地址的过程中,使用的地址转换算法是相同的。
在一些实施例中,该地址转换算法可以是任意的转换算法,本申请对此不做限定。
本申请实施例中,通过压缩纹理算法对应的单位纹素块的尺寸对目标纹素在所述纹理数据中的第一位置信息进行变换处理,得到包括目标纹素的单位纹素块在所述纹理数据中的第二位置信息,由此,基于该第二位置信息生成的内存地址,相比于传统技术中基于第一位置信息生成的内存地址,由于去除了压缩纹理算法影响的目标纹素在单位纹素块中的内部位置因素,这样,可以使得不同的压缩纹理算法均可以使用相同的该地址转换算法,确定目标纹素的内存地址,从而可以省去为不同压缩纹理算法设置不同的地址转换算法的方案,降低了GPU的设计复杂度;同时,针对位于同一单位纹素块的多个纹素,在计算内存地址的过程中,仅需要计算一次,节省了计算量,提升了内存地址的计算效率,进而提高了读取/存储效率。
在一些实施例中,所述地址转换算法还用于在确定不进行纹理压缩的情况下,将所述目标纹素的第一位置信息转换为所述目标纹素的内存地址。
本申请实施例中相比于传统技术中为常规格式(不进行纹理压缩)设置一种地址转换算法,为压缩纹理算法设置另一种地址转换算法的方案,仅需要设置一种地址转换算法,即可在各种实施场景下确定目标纹素的内存地址,提升了内存地址的计算效率。
图2A是本申请实施例提供的纹素的内存地址确定方法的一个可选的流程示意图,该方法可以由计算机设备的处理器执行。基于图1A,所述第一位置信息为第一位置坐标序列,所述第二位置信息为第二位置坐标序列;图1A中的S102可以更新为S201至S202,将结合图2A示出的步骤进行说明。
步骤S201、基于所述压缩纹理算法中需要压缩的单位纹素块的尺寸,确定第三位置信息在所述第一位置坐标序列中的序列长度;所述第三位置信息用于确定所述目标纹素在所述单位纹素块中的位置。
在一些实施例中,该第三位置信息用于确定所述目标纹素在所述单位纹素块中的位置。示例性地,以单位纹素块为包括4个纹素的一维纹素块为例,请参阅图1D,在此示意图中,上述第三位置信息用于确定目标纹素141在单位纹素块140中的位置,可以表示为位置坐标(2)。以单位纹素块为包括4个纹素的二维纹素块为例,请参阅图1E,在此示意图中,上述第三位置信息用于确定目标纹素151在单位纹素块150中的位置,可以表示为位置坐标(1, 1)。以单位纹素块为包括8个纹素的三维纹素块为例,请参阅图1F,在此示意图中,上述第三位置信息用于确定目标纹素161在单位纹素块160中的位置,可以表示为位置坐标(1,1, 1)。
在一些实施例中,上述位置信息为位置坐标序列,该位置坐标序列为任意进制的数值序列。示例性地,该位置坐标序列可以为二进制序列,可以为四进制序列等,在该位置坐标序列可以二进制序列的情况下,图2B中目标纹素221的第一位置信息可以表示为位置坐标(7, 1, 0),当然也可以表示为二进制的(111, 001, 000),分别对应(u2u1u0,v2v1v0, s2s1s0),按照比特从高位到低位的排列顺序对二进制的(111, 001, 000)进行重新排列,可以得到目标纹素221的第一位置序列(1, 0,0, 1, 0, 0, 0, 1, 1),分别对应(u2, v2, s2, u1, v1, s1, s0, u0, v0)。其中,(u2, v2, s2),即(1, 0, 0),用于确定4×4×4的纹素块21在纹理数据20中的位置;(u1, v1, s1, s0)即(1, 0,0, 0),用于确定2×2的单位纹素块22在4×4×4的纹素块21中的位置,由于在s维度上有4个位置,因此这里通过两个二进制比特位(s1, s0)表示单位纹素块22的深度信息;(u0,v0)即(1, 1),用于确定目标纹素221在单位纹素块22中的位置。(u0, v0)在第一位置序列(u2, v2, s2, u1,v1, s1, s0, u0, v0)的序列长度为2,即以进制数为底数且序列长度为指数,对应的幂等于所述单位纹素块中纹素的数量。
在该位置坐标序列可以四进制序列的情况下,单位像素块的尺寸为4×4,图2C中目标纹素241的第一位置信息可以表示为位置坐标(15, 3, 0),当然也可以表示为四进制的(33, 03, 00),分别对应(u1u0, v1v0, s1s0),按照比特从高位到低位的排列顺序对四进制的(33, 03, 00)进行重新排列,可以得到目标纹素241的第一位置序列(3, 0, 0, 0,3, 3),分别对应(u1,v1, s1, s0, u0, v0)。其中,(u1, v1, s1, s0)即(3, 0, 0, 0),用于确定4×4的单位纹素块24在纹理数据20中的位置,由于纹理数据20在s维度上有16个位置,因此这里通过两个四进制比特位(s1, s0)表示单位纹素块24的深度信息;(u0, v0)即(3, 3),用于确定目标纹素241在单位纹素块24中的位置。(u0, v0)在第一位置序列(u2,v2, s2, u1, v1, s1, s0, u0, v0)的序列长度为2,即以进制数为底数且序列长度为指数,对应的幂等于所述单位纹素块中纹素的数量。
可以看出,第三位置信息在所述第一位置坐标序列中的序列长度与单位纹素块的尺寸相关,且与所述第一位置坐标序列的进制相关。
步骤S202、去除所述第一位置坐标序列中所述序列长度的低位比特,得到所述第二位置坐标序列。
在一些实施例中,在第一位置坐标序列已经按照比特从高位到低位的排列顺序进行排列后,可以直接基于上述步骤S201得到的序列长度,将第一位置坐标序列中所述序列长度的低位比特直接去除,得到该第二位置坐标序列。
示例性地,以上述图2B对应的实施例为例,目标纹素221的第一位置序列(1, 0,0, 1, 0, 0, 0, 1, 1),分别对应(u2, v2, s2, u1, v1, s1, s0, u0, v0),相应地,由于对应的序列长度为2,可以直接将处于低位的(1, 1)即(u0, v0)去除,得到(1, 0, 0, 1,0, 0, 0)为上述第二位置坐标序列,分别对应(u2,v2, s2, u1, v1, s1, s0)。
示例性地,以上述图2C对应的实施例为例,目标纹素241的第一位置序列(3, 0,0, 0, 3, 3),分别对应(u1, v1, s1, s0, u0, v0),相应地,由于对应的序列长度为2,可以直接将处于低位的(3, 3)即(u0, v0)去除,得到(3, 0, 0, 0)为上述第二位置坐标序列,分别对应(u1,v1, s1, s0)。
在一些实施例中,可以通过步骤S2021至步骤S2022实现上述去除所述第一位置坐标序列中所述序列长度的低位比特,得到所述第二位置坐标序列。
步骤S2021、确定所述压缩纹理算法中需要压缩的单位纹素块对应的至少一个位置维度,和每一所述位置维度对应的子序列长度。
在一些实施例中,本申请提供的内存地址确定方法可以应用于任何形式压缩纹理算法中,也就是说,在压缩纹理算法包括N个纹素的情况下,可以对上述u维度中的N个纹素进行压缩,也可以对上述v维度中的N个纹素进行压缩,也可以对上述s维度中的N个纹素进行压缩;当然,还可以对处于uv平面上的N个纹素进行压缩,还可以对处于us平面上的N个纹素进行压缩,还可以对处于vs平面上的N个纹素进行压缩;进一步的,还可以对处于uvs三维空间下的N个纹素进行压缩。
由此,步骤S2021中先确定当前单位纹素块所在的至少一个位置维度,同时,需要确定每一位置维度上对应的子序列长度。
示例性地,以单位纹素块为uv平面上的N个纹素,且在u维度为n1,在v维度为n2,则有n1×n2=N。相应地,单位纹素块所在的至少一个位置维度包括u维度和v维度,在u维度上对应的子序列长度为以进制数为底数,n1的对数;在v维度上对应的子序列长度为以进制数为底数,n2的对数。
步骤S2022、在所述第一位置坐标序列中,去除每一所述位置维度对应的子序列长度的低位比特。
在一些实施例中,可以先确定每一位置维度对应的比特序列,该比特序列按照比特从高位到低位的排列。
示例性地,以上述目标纹素221的第一位置信息可以表示为位置坐标(7, 1, 0),并表示为二进制的(111, 001, 000),分别对应(u2u1u0, v2v1v0, s2s1s0)为例,u维度对应的比特序列包括(111),v维度对应的比特序列包括(001),此时,单位纹素块22在u维度和v维度分别对应的子序列长度均为;由此,可以分别去除(111)中的“1”和(001)中的“1”,可以得到去除后的第一位置坐标序列为(11, 00, 000)。
示例性地,以上述目标纹素241的第一位置信息可以表示为位置坐标(15, 3, 0),也可以表示为四进制的(33, 03, 00),分别对应(u1u0, v1v0, s1s0)为例,u维度对应的比特序列包括(33),v维度对应的比特序列包括(03),此时,单位纹素块24在u维度和v维度分别对应的子序列长度均为;由此,可以分别去除(33)中的“3”和(03)中的“3”,可以得到去除后的第一位置坐标序列为(3, 0, 00)。
步骤S2023、将去除后的第一位置坐标序列确定为所述第二位置坐标序列。
基于上述实施例,通过确定单位纹素块对应的至少一个位置维度和每一所述位置维度对应的子序列长度,由此,在第一位置坐标序列中针对每一位置维度,按照对应的子序列长度进行精确的低位比特去除。这样,本申请提供的内存地址确定方法可以应用于任何形式压缩纹理算法中;同时,通过低位比特去除的方法,可以降低了内存地址确定过程中的计算复杂度。
在一些实施例中,图1A中的S103可以更新为S203至S204,将结合图2A示出的步骤进行说明。
步骤S203、基于所述地址转换算法,对所述第二位置坐标序列进行转换,得到纹素子地址。
在一些实施例中,该地址转换算法可以对该第二位置坐标序列进行线性或非线性转换,将转换后得到的序列作为该纹素子地址。其中,该地址转换算法可以是任意形式的转换算法,由管理员预先设置。
步骤S204、基于所述纹素子地址和所述纹理数据对应的纹理子地址,得到所述目标纹素的内存地址。
在一些实施例中,为了保证处于一个纹理数据中的各个纹素存储于同一内存区域,可以先基于纹理数据确定一个固定的纹理子地址,将该纹理子地址作为内存地址的头部信息;在得到目标纹素对应的纹素子地址之后,可以通过拼接的方式,将该纹素子地址拼接至纹理子地址的尾部,得到该目标纹素的内存地址。
本申请实施例中,在确定目标纹素的内存地址的过程中,基于所述纹素子地址和所述纹理数据对应的纹理子地址确定目标纹素的内存地址。这样,可以使位于同一纹理数据中的纹素存储于内存中的一个数据块中,便于纹素的存储和/或读取。
图3是本申请实施例提供的纹素的内存地址确定方法的一个可选的流程示意图,该方法可以由计算机设备的处理器执行。基于图2A,图2A中的S2022可以更新为S301至S303,将结合图3示出的步骤进行说明。
步骤S301、基于所述单位纹素块的尺寸,确定每一所述位置维度对应的子序列长度。
在一些实施例中,所述第一位置坐标序列为对应第一位置维度、第二位置维度和第三位置维度;所述单位纹素块对应的至少一个位置维度包括所述第一位置维度和所述第二位置维度。
步骤S302、在所述第一位置坐标序列中,去除每一所述位置维度的所述子序列长度个低位比特。
在一些实施例中,所述第一位置坐标序列为二进制序列。可以通过步骤S3021实现上述在所述第一位置坐标序列中,去除每一所述位置维度的所述子序列长度个低位比特。
步骤S3021、在所述第一位置坐标序列中,去除所述第一位置维度的低位2比特和所述第二位置维度的低位2比特。
在一些实施例中,所述压缩纹理算法为以下任意之一:BC和ETC(EricssonTexture Compression,爱立信纹理压缩)。
其中,BC压缩纹理算法:基本思想是把4×4的纹素压缩成一个64或128位的数据块,是有损压缩方式。BC1-BC5是S3TC(S3 Texture Compression)算法的五种变化,用于各种Windows设备。其中,BC1格式主要适用于不具透明度的贴图或仅具一位Alpha的贴图,将每4×4个纹素视为一个单位纹素块,压缩后的4×4个纹素占用64位,其中有2个16位的RGB颜色和16个2位索引。BC2和BC3可以表示具有更复杂的透明信息的贴图,这两种格式采用的是显式的Alpha表示,在BC1中,使用64位数据来描述4×4的纹素的颜色信息,在BC2和BC3中,这部分颜色信息是不变的,而是通过另附加64位数据也就是每个纹素4位来表示它们的Alpha透明信息,而这4位的Alpha的信息通常情况下可以采用直接编码的方式来表示即可。BC4和BC5也是用于表示具有复杂的透明信息的贴图,与BC2和BC3不同的是BC4和BC5的Alpha信息是通过线性插值计算所得,类似于BC1的颜色信息。同样的,每4×4的纹素的透明信息占用64位,所不同的是,64位中采用了2个8位的alpha值和16个3位的索引值,既然每个纹素的索引占3位,那么可以表示8种不同的透明状态。
其中,ETC压缩纹理算法:在移动平台中广泛采用。它是一种为感知质量设计的有损算法,其依据是人眼对亮度改变的反应要高于色度改变。类似于BC,ETC也是把4×4的纹素压缩成一个64或128位的数据块,也是有损压缩。ETC1把一个4×4的纹素压成一个64位的数据块。4×4的纹素先被水平或垂直分割成2个4×2的组,每一半组有1个基础颜色(分别是RGB444/RGB444或RGB555/RGB333格式)、1个4位的亮度索引、8个2位纹素索引。每个纹素的颜色等于基础颜色加上索引指向的亮度范围。ETC2是ETC1的扩张,向后兼容ETC1,对RGB的压缩质量更好,并且支持透明通道。
在压缩纹理算法为以下任意之一:BC和ETC的情况下,对应的单位纹素块的尺寸为第一位置维度为4个纹素、第二位置维度为4个纹素。
在位置坐标序列为二进制序列的情况下,上述基于所述单位纹素块的尺寸,确定每一所述位置维度对应的子序列长度中,可以确定第一位置维度的子序列长度为2,第二位置维度的子序列长度也为2。由此,可以在所述第一位置坐标序列中,去除所述第一位置维度的低位2比特和所述第二位置维度的低位2比特。
请参阅图2C,在该位置坐标序列可以二进制序列的情况下,单位像素块的尺寸为4×4,图2C中目标纹素241的第一位置信息可以表示为位置坐标(15, 3, 0),当然也可以表示为二进制的(1111, 0011, 0000),分别对应(u3u2u1u0, v3v2v1v0, s3s2s1s0),第一位置维度对应的比特序列包括(1111),第二位置维度对应的比特序列包括(0011),此时,单位纹素块24在u维度和v维度分别对应的子序列长度均为;由此,可以分别去除(1111)中的低位2比特“11”和(0011)中的低位2比特“11”,可以得到去除后的第一位置坐标序列为(11, 00, 0000)。
基于上述实施例,在压缩纹理算法为BC和/或ETC的情况下,在第一位置坐标序列中,去除第一位置维度的低位2比特和第二位置维度的低位2比特。这样,本申请提供的内存地址确定方法可以同时应用于有压缩纹理算法(BC和/或ETC)和无压缩纹理算法的内存地址处理过程中;同时,通过低位比特去除的方法,可以降低了内存地址确定过程中的计算复杂度。
图4是本申请实施例提供的纹素读取方法的一个可选的流程示意图,该方法可以由计算机设备的处理器执行。该方法包括如下步骤S401至步骤S405。
步骤S401、获取纹理数据中目标纹素的第一位置信息和所述纹理数据对应的压缩纹理算法;所述第一位置信息用于确定所述目标纹素在所述纹理数据中的位置。
步骤S402、基于所述压缩纹理算法对应的单位纹素块的尺寸,对所述第一位置信息进行处理,得到第二位置信息;所述第二位置信息用于确定包括所述目标纹素的单位纹素块在所述纹理数据中的位置。
步骤S403、通过地址转换算法将所述第二位置信息转换为所述目标纹素的内存地址。
这里,上述步骤S401至步骤S403分别对应于前述步骤S101至步骤S103,在实施时可以参照前述步骤S101至步骤S103的具体实施方式。
步骤S404、基于所述内存地址,从内存中读取所述目标纹素所在的压缩数据块。
在一些实施例中,上述压缩纹理算法为以下任意之一:BC和ETC。相应地,该目标纹素的单位纹素块包括4×4的纹素,上述压缩纹理算法可以将包括目标纹素的单位纹素块(4×4的纹素)压缩成一个64或128位的数据块,即该压缩数据块。上述步骤S404可以基于所述内存地址读取目标纹素所在的压缩数据块。
步骤S405、基于所述压缩纹理算法,对所述压缩数据块进行解压缩,得到所述目标纹素。
在一些实施例中,基于该压缩纹理算法对应的解压缩过程,将该压缩数据块(64或128位的数据块)解压缩为包括目标纹素的单位纹素块,进而可以得到该目标纹素。
在一些实施例中,所述地址转换算法还用于在确定不进行纹理压缩的情况下,将所述目标纹素的第一位置信息转换为所述目标纹素的内存地址。
本申请实施例中,通过压缩纹理算法对应的单位纹素块的尺寸对目标纹素在所述纹理数据中的第一位置信息进行变换处理,得到包括目标纹素的单位纹素块在所述纹理数据中的第二位置信息。由此,基于该第二位置信息生成的内存地址,相比于传统技术中基于第一位置信息生成的内存地址,由于去除了压缩纹理算法影响的目标纹素在单位纹素块中的内部位置因素,这样,可以使得不同的压缩纹理算法均可以使用相同的该地址转换算法,确定目标纹素的内存地址,从而可以省去为不同压缩纹理算法设置不同的地址转换算法的方案。同时,针对位于同一单位纹素块的多个纹素,在计算内存地址的过程中,仅需要计算一次,节省了计算量,提升了内存地址的计算效率,进而提高了纹素读取效率。
图5是本申请实施例提供的纹素读取方法的一个可选的流程示意图,该方法可以由计算机设备的处理器执行。基于图4,所述第一位置信息为第一位置坐标序列,所述第二位置信息为第二位置坐标序列;图4中的S402可以更新为S501至S502,将结合图5示出的步骤进行说明。
步骤S501、基于所述压缩纹理算法中需要压缩的单位纹素块的尺寸,确定第三位置信息在所述第一位置坐标序列中的序列长度;所述第三位置信息用于确定所述目标纹素在所述单位纹素块中的位置。
步骤S502、去除所述第一位置坐标序列中所述序列长度的低位比特,得到所述第二位置坐标序列。
这里,上述步骤S501至步骤S502分别对应于前述步骤S201至步骤S202,在实施时可以参照前述步骤S201至步骤S202的具体实施方式。
在一些实施例中,所述通过地址转换算法将所述第二位置信息转换为所述目标纹素的内存地址,包括:基于所述地址转换算法,对所述第二位置坐标序列进行转换,得到纹素子地址;基于所述纹素子地址和所述纹理数据对应的纹理子地址,得到所述目标纹素的内存地址。
在一些实施例中,所述去除所述第一位置坐标序列中所述序列长度的低位比特,得到所述第二位置坐标序列,包括:确定所述压缩纹理算法中需要压缩的单位纹素块对应的至少一个位置维度,和每一所述位置维度对应的子序列长度;在所述第一位置坐标序列中,去除每一所述位置维度对应的子序列长度的低位比特;将去除后的第一位置坐标序列确定为所述第二位置坐标序列。
在一些实施例中,所述在所述第一位置坐标序列中,去除每一所述位置维度对应的子序列长度的低位比特,包括:基于所述单位纹素块的尺寸,确定每一所述位置维度对应的子序列长度;在所述第一位置坐标序列中,去除每一所述位置维度的所述子序列长度个低位比特。
在一些实施例中,所述第一位置坐标序列为对应第一位置维度、第二位置维度和第三位置维度;所述单位纹素块对应的至少一个位置维度包括所述第一位置维度和所述第二位置维度。
在一些实施例中,所述第一位置坐标序列为二进制序列,所述在所述第一位置坐标序列中,去除每一所述位置维度的所述子序列长度个低位比特,包括:在所述第一位置坐标序列中,去除所述第一位置维度的低位2比特和所述第二位置维度的低位2比特。
在一些实施例中,图1中的S405可以更新为S503至S505,将继续结合图5示出的步骤进行说明。
步骤S503、截取所述第一位置坐标序列中所述序列长度的低位比特,确定第三位置坐标序列。
步骤S504、基于所述压缩纹理算法对所述压缩数据块进行解压缩,得到包括所述目标纹素的单位纹素块。
步骤S505、根据所述第三位置坐标序列在所述单位纹素块中确定所述目标纹素。
本申请实施例中,可以准确的从解压缩后的包括所述目标纹素的单位纹素块中,确定目标纹素,提高了纹素读取过程中的准确度。
图6是本申请实施例提供的纹素存储方法的一个可选的流程示意图,该方法可以由计算机设备的处理器执行。该方法包括如下步骤S601至步骤S605。
步骤S601、获取纹理数据中目标纹素的第一位置信息和所述纹理数据对应的压缩纹理算法;所述第一位置信息用于确定所述目标纹素在所述纹理数据中的位置。
步骤S602、基于所述压缩纹理算法对应的单位纹素块的尺寸,对所述第一位置信息进行处理,得到第二位置信息;所述第二位置信息用于确定包括所述目标纹素的单位纹素块在所述纹理数据中的位置。
步骤S603、通过地址转换算法将所述第二位置信息转换为所述目标纹素的内存地址。
这里,上述步骤S601至步骤S603分别对应于前述步骤S101至步骤S103,在实施时可以参照前述步骤S101至步骤S103的具体实施方式。
步骤S604、基于所述压缩纹理算法对包括所述目标纹素的单位纹素块进行压缩,得到压缩数据块。
在一些实施例中,上述压缩纹理算法为以下任意之一:BC和ETC。相应地,该目标纹素的单位纹素块包括4×4的纹素,上述压缩纹理算法可以将包括目标纹素的单位纹素块(4×4的纹素)压缩成一个64或128位的数据块,即该压缩数据块。
步骤S605、基于所述内存地址,将所述压缩数据块存储于内存中。
在一些实施例中,可以将压缩得到的压缩数据块存储于内存的内存地址中。
在一些实施例中,所述地址转换算法还用于在确定不进行纹理压缩的情况下,将所述目标纹素的第一位置信息转换为所述目标纹素的内存地址。
在一些实施例中,所述第一位置信息为第一位置坐标序列,所述第二位置信息为第二位置坐标序列;所述基于所述压缩纹理算法对应的单位纹素块,对所述第一位置信息进行处理,得到第二位置信息,包括:基于所述压缩纹理算法中需要压缩的单位纹素块的尺寸,确定第三位置信息在所述第一位置坐标序列中的序列长度;所述第三位置信息用于确定所述目标纹素在所述单位纹素块中的位置;去除所述第一位置坐标序列中所述序列长度的低位比特,得到所述第二位置坐标序列。
在一些实施例中,所述通过地址转换算法将所述第二位置信息转换为所述目标纹素的内存地址,包括:基于所述地址转换算法,对所述第二位置坐标序列进行转换,得到纹素子地址;基于所述纹素子地址和所述纹理数据对应的纹理子地址,得到所述目标纹素的内存地址。
在一些实施例中,所述去除所述第一位置坐标序列中所述序列长度的低位比特,得到所述第二位置坐标序列,包括:确定所述压缩纹理算法中需要压缩的单位纹素块对应的至少一个位置维度,和每一所述位置维度对应的子序列长度;在所述第一位置坐标序列中,去除每一所述位置维度对应的子序列长度的低位比特;将去除后的第一位置坐标序列确定为所述第二位置坐标序列。
在一些实施例中,所述在所述第一位置坐标序列中,去除每一所述位置维度对应的子序列长度的低位比特,包括:基于所述单位纹素块的尺寸,确定每一所述位置维度对应的子序列长度;在所述第一位置坐标序列中,去除每一所述位置维度的所述子序列长度个低位比特。
在一些实施例中,所述第一位置坐标序列为对应第一位置维度、第二位置维度和第三位置维度;所述单位纹素块对应的至少一个位置维度包括所述第一位置维度和所述第二位置维度。
在一些实施例中,所述第一位置坐标序列为二进制序列,所述在所述第一位置坐标序列中,去除每一所述位置维度的所述子序列长度个低位比特,包括:在所述第一位置坐标序列中,去除所述第一位置维度的低位2比特和所述第二位置维度的低位2比特。
本申请实施例中,通过压缩纹理算法对应的单位纹素块的尺寸对目标纹素在所述纹理数据中的第一位置信息进行变换处理,得到包括目标纹素的单位纹素块在所述纹理数据中的第二位置信息,由此,基于该第二位置信息生成的内存地址,相比于传统技术中基于第一位置信息生成的内存地址,由于去除了压缩纹理算法影响的目标纹素在单位纹素块中的内部位置因素,这样,可以使得不同的压缩纹理算法均可以使用相同的该地址转换算法,确定目标纹素的内存地址,从而可以省去为不同压缩纹理算法设置不同的地址转换算法的方案,同时,针对位于同一单位纹素块的多个纹素,在计算内存地址的过程中,仅需要计算一次,节省了计算量,提升了内存地址的计算效率,进而提高了纹素存储效率。
下面说明本申请实施例提供的纹素存储方法在实际场景中的应用,主要涉及BCn/ETC数据格式在3d纹理上的数据存储。
现有的GPU数据存储方案中,3d纹理在内存中存放是以4×4×4个texel为最小粒度(无压缩)按照zigzag的方式进行排序的,大致上是“Z”字形,如图7A所示,其为常规3d纹理的zigzag排列示意图。假设3d纹理上一个texel在(u, v, s)三个维度上的坐标是(x, y,z),x0表示x的最低位(the least significant bit,lsb),x1表示x的次低位,以此类推,x14是x的最高位(假定x只有15bit),y0~y14和z0~z14也是同样含义。那么可以得到该texel在内存中的排布序列公式如公式(2)所示,由左到右是高位到低位。
其中,表示一个texel在一个2×2的“z”型纹素块中的位置;表示一个2×2的“z”型纹素块在一个4×4的“z”型纹素块中的位置;z1z0表示一个4×4的纹素块,在4×4×4的纹素块中的位置,以此类推。
这种存储方式在通常情况下可以保证良好的数据局部性,所以在GPU领域有着大量的应用。
BCn/ETC是一种以4×4个texel为粒度的压缩格式,在内存中每个最小粒度的数据块都表示4×4个texel,而且这4×4个texel是按照线性排列的,所以GPU内存中texel在3d纹理上的排列顺序如图7B所示,左上角的0~3分别是在s方向上连续的4个压缩数据块。同理,可以推出相应的指定texel在内存中的排布序列公式为公式(3):
从上述存储方式可以看出,对于BCn/ETC这种压缩格式,GPU做了特殊处理,保证了4×4的压缩块内数据是呈线性排列的(“z”型排列呈非线性排列)。但是这种改动导致GPU内的纹理处理模块在根据texel的坐标计算内存中的排布序列时必须为BCn/ETC单独设计一种计算公式,这增大了GPU纹理处理模块的设计复杂度。
为了能让GPU纹理处理模块可以统一处理所有压缩纹理算法的数据格式,本申请修改了GPU内BCn/ETC数据格式的3d纹理存储方式,使得GPU纹理处理模块依然可以使用常规的排布序列公式来计算BCn/ETC这种压缩格式的texel在内存中的序列。
因为BCn/ETC数据格式在内存中的最小数据块粒度的压缩后的4×4个texel,所以本申请设计在GPU纹理处理模块把压缩块作为新的数据单位,每个压缩块之间按照常规3d纹理的zigzag排列存放在内存中。如图7C所示的BCn/ETC格式的3d纹理zigzag排列。可以得出新的BCn/ETC格式的3d纹理排布序列公式为公式(4):
其中,y1y0x1x0是一个4×4压缩块的内部序列索引;表示一个压缩块在一个2×2的“z”型纹素块中的位置;表示一个2×2的“z”型纹素块在一个4×4的“z”型纹素块中的位置;z1z0表示一个4×4,在4×4×4个texel中的位置。
因为GPU纹理处理模块内部把压缩块作为计算地址的最小数据单位,而y1y0x1x0是一个4×4压缩块的内部序列索引,所以可以先把(x, y, z)坐标的x1x0和y1y0拆出来,剩下的3d纹理排布序列公式为公式(5):
可以看出上述公式和常规的3d纹理排布序列公式(2)极为相似,只需要把x和y右移2bit,将原来的x3y3当作新的x0y0,就可以使用常规的3d纹理排布序列公式计算压缩块的地址。
这样GPU纹理处理模块可以先使用常规排布序列公式计算压缩块的地址,然后在取得压缩块的数据后进行解压缩,用拆下来的y1y0x1x0找到4×4 texel内的指定texel。
请参阅图7D,其示出了一种GPU纹理处理模块的处理流程图。
步骤S701、接收目标纹素的坐标;
步骤S702、判断所述目标纹素是否为BCn/ETC格式;
步骤S703、在是BCn/ETC格式的情况下,去除X, Y的低位2bit。
其中,上述步骤可以将坐标分为两部分,一部分为低位2bit,另一部分为剩余bit。
步骤S704、基于常规的计算公式,将坐标确定内存地址;
其中,基于常规的计算公式,将剩余bit转换为内存地址,例如,可以采用公式(2)提供的排布序列公式。
步骤S705、基于内存地址抓取数据;
这里,抓取的数据可以为一个纹素,即未进行纹理压缩的纹素,也可以是4×4个纹素对应的压缩块。
步骤S706、判断数据是否为BCn/ETC格式;
步骤S707、在是BCn/ETC格式的情况下,对压缩块进行解压缩,得到4×4个纹素;
步骤S708、基于X, Y的低位2bit在4×4个纹素中确定目标纹素。
基于上述实施例,通过以BCn/ETC的压缩块作为3d纹理上的存储排序数据单位,进而GPU纹理处理模块在计算texel内存地址时不再区分BCn/ETC和常规格式;同时BCn/ETC格式的坐标在拆下低2bit后,如果当前存在多个texel在相同压缩块内,则内存地址只需要计算一次。与上述相关技术相比,降低了GPU纹理处理模块的复杂度的同时,提高了BCn/ETC格式计算内存地址的效率。
基于前述的实施例,本申请实施例提供一种纹素的内存地址确定装置、纹素读取装置、纹素存储装置,该装置包括所包括的各单元、以及各单元所包括的各模块,可以通过计算机设备中的处理器来实现;当然也可通过具体的逻辑电路实现;在实施的过程中,处理器可以为中央处理器(Central Processing Unit,CPU)、微处理器(Microprocessor Unit,MPU)、数字信号处理器(Digital Signal Processor,DSP)或现场可编程门阵列(FieldProgrammable Gate Array,FPGA)等。
图8为本申请实施例提供的一种纹素的内存地址确定装置的组成结构示意图,如图8所示,纹素的内存地址确定装置800包括:获取模块810、处理模块820、转换模块830,其中:获取模块810,用于获取纹理数据中目标纹素的第一位置信息和纹理数据对应的压缩纹理算法;第一位置信息用于确定目标纹素在纹理数据中的位置;处理模块820,用于基于压缩纹理算法对应的单位纹素块的尺寸,对第一位置信息进行处理,得到第二位置信息;第二位置信息用于确定包括目标纹素的单位纹素块在纹理数据中的位置;转换模块830,用于通过地址转换算法将第二位置信息转换为目标纹素的内存地址。
在一些实施例中,地址转换算法还用于在确定不进行纹理压缩的情况下,将目标纹素的第一位置信息转换为目标纹素的内存地址。
在一些实施例中,第一位置信息为第一位置坐标序列,第二位置信息为第二位置坐标序列;处理模块820,还用于:基于压缩纹理算法中需要压缩的单位纹素块的尺寸,确定第三位置信息在第一位置坐标序列中的序列长度;第三位置信息用于确定目标纹素在单位纹素块中的位置;去除第一位置坐标序列中序列长度的低位比特,得到第二位置坐标序列。
在一些实施例中,转换模块830,还用于:基于地址转换算法,对第二位置坐标序列进行转换,得到纹素子地址;基于纹素子地址和纹理数据对应的纹理子地址,得到目标纹素的内存地址。
在一些实施例中,处理模块820,还用于:确定压缩纹理算法中需要压缩的单位纹素块对应的至少一个位置维度,和每一位置维度对应的子序列长度;在第一位置坐标序列中,去除每一位置维度对应的子序列长度的低位比特;将去除后的第一位置坐标序列确定为第二位置坐标序列。
在一些实施例中,处理模块820,还用于:基于单位纹素块的尺寸,确定每一位置维度对应的子序列长度;在第一位置坐标序列中,去除位置维度的子序列长度个低位比特。
在一些实施例中,第一位置坐标序列为对应第一位置维度、第二位置维度和第三位置维度;单位纹素块对应的至少一个位置维度包括第一位置维度和第二位置维度。
在一些实施例中,处理模块820,还用于:在第一位置坐标序列中,去除第一位置维度的低位2比特和第二位置维度的低位2比特。
在一些实施例中,压缩纹理算法为以下任意之一:BC和ETC。
图9为本申请实施例提供的一种纹素读取装置的组成结构示意图,如图8所示,纹素读取装置900包括:内存地址确定模块910、读取模块920、解压缩模块930,其中:内存地址确定模块910,用于获取纹理数据中目标纹素的第一位置信息和纹理数据对应的压缩纹理算法;第一位置信息用于确定目标纹素在纹理数据中的位置;基于压缩纹理算法对应的单位纹素块的尺寸,对第一位置信息进行处理,得到第二位置信息;第二位置信息用于确定包括目标纹素的单位纹素块在纹理数据中的位置;通过地址转换算法将第二位置信息转换为目标纹素的内存地址;读取模块920,用于基于内存地址,从内存中读取目标纹素所在的压缩数据块;解压缩模块930,用于基于压缩纹理算法,对压缩数据块进行解压缩,得到目标纹素。
在一些实施例中,第一位置信息为第一位置坐标序列,第二位置信息为第二位置坐标序列;内存地址确定模块910,还用于:基于压缩纹理算法中需要压缩的单位纹素块的尺寸,确定第三位置信息在第一位置坐标序列中的序列长度;第三位置信息用于确定目标纹素在单位纹素块中的位置;去除第一位置坐标序列中序列长度的低位比特,得到第二位置坐标序列。
在一些实施例中,解压缩模块930,还用于:截取第一位置坐标序列中序列长度的低位比特,确定第三位置坐标序列;基于压缩纹理算法对压缩数据块进行解压缩,得到包括目标纹素的单位纹素块;根据第三位置坐标序列在单位纹素块中确定目标纹素。
在一些实施例中,内存地址确定模块910,还用于:基于地址转换算法,对第二位置坐标序列进行转换,得到纹素子地址;基于纹素子地址和纹理数据对应的纹理子地址,得到目标纹素的内存地址。
在一些实施例中,内存地址确定模块910,还用于:确定压缩纹理算法中需要压缩的单位纹素块对应的至少一个位置维度,和每一位置维度对应的子序列长度;在第一位置坐标序列中,去除每一位置维度对应的子序列长度的低位比特;将去除后的第一位置坐标序列确定为第二位置坐标序列。
在一些实施例中,内存地址确定模块910,还用于:基于单位纹素块的尺寸,确定每一位置维度对应的子序列长度;在第一位置坐标序列中,去除位置维度的子序列长度个低位比特。
在一些实施例中,内存地址确定模块910,还用于:在第一位置坐标序列中,去除第一位置维度的低位2比特和第二位置维度的低位2比特。
图10为本申请实施例提供的一种纹素存储装置的组成结构示意图,如图8所示,纹素存储装置1000包括:内存地址确定模块1010、压缩模块1020、存储模块1030,其中:内存地址确定模块1010,用于获取纹理数据中目标纹素的第一位置信息和纹理数据对应的压缩纹理算法;第一位置信息用于确定目标纹素在纹理数据中的位置;基于压缩纹理算法对应的单位纹素块的尺寸,对第一位置信息进行处理,得到第二位置信息;第二位置信息用于确定包括目标纹素的单位纹素块在纹理数据中的位置;通过地址转换算法将第二位置信息转换为目标纹素的内存地址;压缩模块1020,用于基于压缩纹理算法对包括目标纹素的单位纹素块进行压缩,得到压缩数据块;存储模块1030,用于基于内存地址,将压缩数据块存储于内存中。
在一些实施例中,第一位置信息为第一位置坐标序列,第二位置信息为第二位置坐标序列;内存地址确定模块1010,还用于:基于压缩纹理算法中需要压缩的单位纹素块的尺寸,确定第三位置信息在第一位置坐标序列中的序列长度;第三位置信息用于确定目标纹素在单位纹素块中的位置;去除第一位置坐标序列中序列长度的低位比特,得到第二位置坐标序列。
在一些实施例中,内存地址确定模块1010,还用于:基于地址转换算法,对第二位置坐标序列进行转换,得到纹素子地址;基于纹素子地址和纹理数据对应的纹理子地址,得到目标纹素的内存地址。
在一些实施例中,内存地址确定模块1010,还用于:确定压缩纹理算法中需要压缩的单位纹素块对应的至少一个位置维度,和每一位置维度对应的子序列长度;在第一位置坐标序列中,去除每一位置维度对应的子序列长度的低位比特;将去除后的第一位置坐标序列确定为第二位置坐标序列。
在一些实施例中,内存地址确定模块1010,用于:基于单位纹素块的尺寸,确定每一位置维度对应的子序列长度;在第一位置坐标序列中,去除位置维度的子序列长度个低位比特。
在一些实施例中,内存地址确定模块1010,还用于:在第一位置坐标序列中,去除第一位置维度的低位2比特和第二位置维度的低位2比特。
以上装置实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。在一些实施例中,本申请实施例提供的装置具有的功能或包含的模块可以用于执行上述方法实施例描述的方法,对于本申请装置实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
需要说明的是,本申请实施例中,如果以软件功能模块的形式实现上述的纹素的内存地址确定方法、纹素读取方法、纹素存储方法,并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。这样,本申请实施例不限制于任何特定的硬件、软件或固件,或者硬件、软件、固件三者之间的任意结合。
本申请实施例提供一种计算机设备,包括存储器和处理器,所述存储器存储有可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法中的部分或全部步骤。
本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述方法中的部分或全部步骤。所述计算机可读存储介质可以是瞬时性的,也可以是非瞬时性的。
本申请实施例提供一种计算机程序,包括计算机可读代码,在所述计算机可读代码在计算机设备中运行的情况下,所述计算机设备中的处理器执行用于实现上述方法中的部分或全部步骤。
本申请实施例提供一种计算机程序产品,所述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,所述计算机程序被计算机读取并执行时,实现上述方法中的部分或全部步骤。该计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一些实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一些实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
这里需要指出的是:上文对各个实施例的描述倾向于强调各个实施例之间的不同之处,其相同或相似之处可以互相参考。以上设备、存储介质、计算机程序及计算机程序产品实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请设备、存储介质、计算机程序及计算机程序产品实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
图11为本申请实施例提供的一种计算机设备的硬件实体示意图,如图11所示,该计算机设备1100的硬件实体包括:处理器1101和存储器1102,其中,存储器1102存储有可在处理器1101上运行的计算机程序,处理器1101执行程序时实现上述任一实施例的方法中的步骤。
存储器1102存储有可在处理器上运行的计算机程序,存储器1102配置为存储由处理器1101可执行的指令和应用,还可以缓存待处理器1101以及计算机设备1100中各模块待处理或已经处理的数据(例如,图像数据、音频数据、语音通信数据和视频通信数据),可以通过闪存(FLASH)或随机访问存储器(Random Access Memory,RAM)实现。
处理器1101执行程序时实现上述任一项的纹素的内存地址确定方法、纹素读取方法、纹素存储方法的步骤。处理器1101通常控制计算机设备1100的总体操作。
本申请实施例提供一种计算机存储介质,计算机存储介质存储有一个或者多个程序,该一个或者多个程序可被一个或者多个处理器执行,以实现如上任一实施例的纹素的内存地址确定方法、纹素读取方法、纹素存储方法的步骤。
这里需要指出的是:以上存储介质和设备实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请存储介质和设备实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
上述处理器可以为目标用途集成电路(Application Specific IntegratedCircuit,ASIC)、数字信号处理器(Digital Signal Processor,DSP)、数字信号处理装置(DigitalSignal Processing Device,DSPD)、可编程逻辑装置(Programmable LogicDevice,PLD)、现场可编程门阵列(Field Programmable Gate Array,FPGA)、中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器中的至少一种。可以理解地,实现上述处理器功能的电子器件还可以为其它,本申请实施例不作具体限定。
上述计算机存储介质/存储器可以是只读存储器(Read Only Memory,ROM)、可编程只读存储器(Programmable Read-Only Memory,PROM)、可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,EPROM)、电可擦除可编程只读存储器(ElectricallyErasable Programmable Read-Only Memory,EEPROM)、磁性随机存取存储器(Ferromagnetic Random Access Memory,FRAM)、快闪存储器(Flash Memory)、磁表面存储器、光盘、或只读光盘(Compact Disc Read-Only Memory,CD-ROM)等存储器;也可以是包括上述存储器之一或任意组合的各种终端,如移动电话、计算机、平板设备、个人数字助理等。
应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本申请的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本申请的各种实施例中,上述各步骤/过程的序号的大小并不意味着执行顺序的先后,各步骤/过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本申请各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(ReadOnly Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。
Claims (18)
1.一种纹素的内存地址确定方法,其特征在于,所述方法包括:
获取纹理数据中目标纹素的第一位置信息和所述纹理数据对应的压缩纹理算法;所述第一位置信息用于确定所述目标纹素在所述纹理数据中的位置;
基于所述压缩纹理算法对应的单位纹素块的尺寸,对所述第一位置信息进行处理,得到第二位置信息;所述第二位置信息用于确定包括所述目标纹素的单位纹素块在所述纹理数据中的位置;
通过地址转换算法将所述第二位置信息转换为所述目标纹素的内存地址。
2.根据权利要求1所述的方法,其特征在于,所述地址转换算法还用于在确定不进行纹理压缩的情况下,将所述目标纹素的第一位置信息转换为所述目标纹素的内存地址。
3.根据权利要求1所述的方法,其特征在于,所述第一位置信息为第一位置坐标序列,所述第二位置信息为第二位置坐标序列;所述基于所述压缩纹理算法对应的单位纹素块,对所述第一位置信息进行处理,得到第二位置信息,包括:
基于所述压缩纹理算法中需要压缩的单位纹素块的尺寸,确定第三位置信息在所述第一位置坐标序列中的序列长度;所述第三位置信息用于确定所述目标纹素在所述单位纹素块中的位置;
去除所述第一位置坐标序列中所述序列长度的低位比特,得到所述第二位置坐标序列。
4.根据权利要求3所述的方法,其特征在于,所述通过地址转换算法将所述第二位置信息转换为所述目标纹素的内存地址,包括:
基于所述地址转换算法,对所述第二位置坐标序列进行转换,得到纹素子地址;
基于所述纹素子地址和所述纹理数据对应的纹理子地址,得到所述目标纹素的内存地址。
5.根据权利要求3所述的方法,其特征在于,所述去除所述第一位置坐标序列中所述序列长度的低位比特,得到所述第二位置坐标序列,包括:
确定所述压缩纹理算法中需要压缩的单位纹素块对应的至少一个位置维度,和每一所述位置维度对应的子序列长度;
在所述第一位置坐标序列中,去除每一所述位置维度对应的子序列长度的低位比特;
将去除后的第一位置坐标序列确定为所述第二位置坐标序列。
6.根据权利要求5所述的方法,其特征在于,所述在所述第一位置坐标序列中,去除每一所述位置维度对应的子序列长度的低位比特,包括:
基于所述单位纹素块的尺寸,确定每一所述位置维度对应的子序列长度;
在所述第一位置坐标序列中,去除每一所述位置维度的所述子序列长度个低位比特。
7.根据权利要求6所述的方法,其特征在于,所述第一位置坐标序列为对应第一位置维度、第二位置维度和第三位置维度;所述单位纹素块对应的至少一个位置维度包括所述第一位置维度和所述第二位置维度。
8.根据权利要求7所述的方法,其特征在于,所述第一位置坐标序列为二进制序列,所述在所述第一位置坐标序列中,去除每一所述位置维度的所述子序列长度个低位比特,包括:
在所述第一位置坐标序列中,去除所述第一位置维度的低位2比特和所述第二位置维度的低位2比特。
9.根据权利要求1至8任一项所述的方法,其特征在于,所述压缩纹理算法为以下任意之一:BC和ETC。
10.一种纹素读取方法,其特征在于,所述方法包括:
获取纹理数据中目标纹素的第一位置信息和所述纹理数据对应的压缩纹理算法;所述第一位置信息用于确定所述目标纹素在所述纹理数据中的位置;
基于所述压缩纹理算法对应的单位纹素块的尺寸,对所述第一位置信息进行处理,得到第二位置信息;所述第二位置信息用于确定包括所述目标纹素的单位纹素块在所述纹理数据中的位置;
通过地址转换算法将所述第二位置信息转换为所述目标纹素的内存地址;
基于所述内存地址,从内存中读取所述目标纹素所在的压缩数据块;
基于所述压缩纹理算法,对所述压缩数据块进行解压缩,得到所述目标纹素。
11.根据权利要求10所述的方法,其特征在于,所述第一位置信息为第一位置坐标序列,所述第二位置信息为第二位置坐标序列;所述基于所述压缩纹理算法对应的单位纹素块,对所述第一位置信息进行处理,得到第二位置信息,包括:
基于所述压缩纹理算法中需要压缩的单位纹素块的尺寸,确定第三位置信息在所述第一位置坐标序列中的序列长度;所述第三位置信息用于确定所述目标纹素在所述单位纹素块中的位置;
去除所述第一位置坐标序列中所述序列长度的低位比特,得到所述第二位置坐标序列。
12.根据权利要求11所述的方法,其特征在于,所述基于所述压缩纹理算法,对所述压缩数据块进行解压缩,得到所述目标纹素,包括:
截取所述第一位置坐标序列中所述序列长度的低位比特,确定第三位置坐标序列;
基于所述压缩纹理算法对所述压缩数据块进行解压缩,得到包括所述目标纹素的单位纹素块;
根据所述第三位置坐标序列在所述单位纹素块中确定所述目标纹素。
13.一种纹素存储方法,其特征在于,所述方法包括:
获取纹理数据中目标纹素的第一位置信息和所述纹理数据对应的压缩纹理算法;所述第一位置信息用于确定所述目标纹素在所述纹理数据中的位置;
基于所述压缩纹理算法对应的单位纹素块的尺寸,对所述第一位置信息进行处理,得到第二位置信息;所述第二位置信息用于确定包括所述目标纹素的单位纹素块在所述纹理数据中的位置;
通过地址转换算法将所述第二位置信息转换为所述目标纹素的内存地址;
基于所述压缩纹理算法对包括所述目标纹素的单位纹素块进行压缩,得到压缩数据块;
基于所述内存地址,将所述压缩数据块存储于内存中。
14.一种纹素的内存地址确定装置,其特征在于,所述装置包括:
获取模块,用于获取纹理数据中目标纹素的第一位置信息和所述纹理数据对应的压缩纹理算法;所述第一位置信息用于确定所述目标纹素在所述纹理数据中的位置;
处理模块,用于基于所述压缩纹理算法对应的单位纹素块的尺寸,对所述第一位置信息进行处理,得到第二位置信息;所述第二位置信息用于确定包括所述目标纹素的单位纹素块在所述纹理数据中的位置;
转换模块,用于通过地址转换算法将所述第二位置信息转换为所述目标纹素的内存地址。
15.一种纹素读取装置,其特征在于,所述装置包括:
内存地址确定模块,用于获取纹理数据中目标纹素的第一位置信息和所述纹理数据对应的压缩纹理算法;所述第一位置信息用于确定所述目标纹素在所述纹理数据中的位置;基于所述压缩纹理算法对应的单位纹素块的尺寸,对所述第一位置信息进行处理,得到第二位置信息;所述第二位置信息用于确定包括所述目标纹素的单位纹素块在所述纹理数据中的位置;通过地址转换算法将所述第二位置信息转换为所述目标纹素的内存地址;
读取模块,用于基于所述内存地址,从内存中读取所述目标纹素所在的压缩数据块;
解压缩模块,用于基于所述压缩纹理算法,对所述压缩数据块进行解压缩,得到所述目标纹素。
16.一种纹素存储装置,其特征在于,所述装置包括:
内存地址确定模块,用于获取纹理数据中目标纹素的第一位置信息和所述纹理数据对应的压缩纹理算法;所述第一位置信息用于确定所述目标纹素在所述纹理数据中的位置;基于所述压缩纹理算法对应的单位纹素块的尺寸,对所述第一位置信息进行处理,得到第二位置信息;所述第二位置信息用于确定包括所述目标纹素的单位纹素块在所述纹理数据中的位置;通过地址转换算法将所述第二位置信息转换为所述目标纹素的内存地址;
压缩模块,用于基于所述压缩纹理算法对包括所述目标纹素的单位纹素块进行压缩,得到压缩数据块;
存储模块,用于基于所述内存地址,将所述压缩数据块存储于内存中。
17.一种计算机设备,包括存储器和处理器,所述存储器存储有可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1至9任一项所述方法中的步骤、或实现权利要求10至12任一项所述方法中的步骤、或实现权利要求13所述方法中的步骤。
18.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至9任一项所述方法中的步骤、或实现权利要求10至12任一项所述方法中的步骤、或实现权利要求13所述方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310046316.3A CN115794666B (zh) | 2023-01-31 | 2023-01-31 | 纹素的内存地址确定方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310046316.3A CN115794666B (zh) | 2023-01-31 | 2023-01-31 | 纹素的内存地址确定方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115794666A true CN115794666A (zh) | 2023-03-14 |
CN115794666B CN115794666B (zh) | 2023-05-05 |
Family
ID=85429261
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310046316.3A Active CN115794666B (zh) | 2023-01-31 | 2023-01-31 | 纹素的内存地址确定方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115794666B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116483285A (zh) * | 2023-06-14 | 2023-07-25 | 北京象帝先计算技术有限公司 | 纹理数据搬运方法、搬运装置、电子组件及电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130033513A1 (en) * | 2010-04-07 | 2013-02-07 | Telefonaktiebolaget L M Ericsson (Publ) | Texture compression and decompression |
CN103782324A (zh) * | 2011-09-12 | 2014-05-07 | 索尼电脑娱乐公司 | 使用纹理坐标导数的加速的纹理查找 |
CN107153617A (zh) * | 2016-03-04 | 2017-09-12 | 三星电子株式会社 | 用于利用缓冲器高效访问纹理数据的高速缓存体系结构 |
CN112316434A (zh) * | 2020-11-16 | 2021-02-05 | 腾讯科技(深圳)有限公司 | 地形贴图的加载方法、装置、移动终端及存储介质 |
-
2023
- 2023-01-31 CN CN202310046316.3A patent/CN115794666B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130033513A1 (en) * | 2010-04-07 | 2013-02-07 | Telefonaktiebolaget L M Ericsson (Publ) | Texture compression and decompression |
CN103782324A (zh) * | 2011-09-12 | 2014-05-07 | 索尼电脑娱乐公司 | 使用纹理坐标导数的加速的纹理查找 |
CN107153617A (zh) * | 2016-03-04 | 2017-09-12 | 三星电子株式会社 | 用于利用缓冲器高效访问纹理数据的高速缓存体系结构 |
CN112316434A (zh) * | 2020-11-16 | 2021-02-05 | 腾讯科技(深圳)有限公司 | 地形贴图的加载方法、装置、移动终端及存储介质 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116483285A (zh) * | 2023-06-14 | 2023-07-25 | 北京象帝先计算技术有限公司 | 纹理数据搬运方法、搬运装置、电子组件及电子设备 |
CN116483285B (zh) * | 2023-06-14 | 2023-11-17 | 北京象帝先计算技术有限公司 | 纹理数据搬运方法、搬运装置、电子组件及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN115794666B (zh) | 2023-05-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111145090B (zh) | 一种点云属性编码方法、解码方法、编码设备及解码设备 | |
US11249721B2 (en) | Multiplication circuit, system on chip, and electronic device | |
US7599975B1 (en) | Decompression of compressed 16 bit data | |
US20170237997A1 (en) | Method and system for interpolating base and delta values of associated tiles in an image | |
CN113014903B (zh) | 点云邻居确定、点云预测、点云编码、点云解码方法及设备 | |
CN115794666B (zh) | 纹素的内存地址确定方法、装置、设备及存储介质 | |
US10158858B2 (en) | Method and system for index compression for fixed block size texture formats and for non-linear interpolation of index values along an edge in a tile | |
CN111340866A (zh) | 深度图像生成方法、装置及存储介质 | |
CN112017228A (zh) | 一种对物体三维重建的方法及相关设备 | |
CN111491169B (zh) | 一种数字图像压缩方法、装置、设备、介质 | |
KR20180077060A (ko) | 화소들의 리스트들을 인코딩 및 디코딩하는 방법 및 장치 | |
US20110157192A1 (en) | Parallel Block Compression With a GPU | |
CN113573056A (zh) | 一种率失真优化量化的方法、装置、存储介质及终端 | |
US9898834B2 (en) | Method and apparatus for generating a bitstream of repetitive structure discovery based 3D model compression | |
CN112419463B (zh) | 一种模型数据处理方法、装置、设备及可读存储介质 | |
CN114125456A (zh) | 数据处理方法及系统、电子设备 | |
CN114692077A (zh) | 一种矩阵计算装置、方法、系统、电路、芯片及设备 | |
CN107124613B (zh) | 对多普勒天气雷达第二类产品数据进行重编码处理的方法 | |
CN115454923A (zh) | 数据计算的装置、板卡、方法以及存储介质 | |
CN112911303B (zh) | 图像编码方法、解码方法、装置、电子设备及存储介质 | |
CN113473150B (zh) | 一种图像处理方法、装置以及计算机可读存储装置 | |
CN111145128A (zh) | 色彩增强方法及相关装置 | |
CN110956670A (zh) | 一种基于深度偏移的多模式自适应z值压缩算法 | |
US10283094B1 (en) | Run-length compression and decompression of media tiles | |
WO2007099327A2 (en) | Data compression |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |