CN116483285B - 纹理数据搬运方法、搬运装置、电子组件及电子设备 - Google Patents
纹理数据搬运方法、搬运装置、电子组件及电子设备 Download PDFInfo
- Publication number
- CN116483285B CN116483285B CN202310700053.3A CN202310700053A CN116483285B CN 116483285 B CN116483285 B CN 116483285B CN 202310700053 A CN202310700053 A CN 202310700053A CN 116483285 B CN116483285 B CN 116483285B
- Authority
- CN
- China
- Prior art keywords
- texture
- block
- data
- sub
- unit
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 49
- 238000012545 processing Methods 0.000 claims description 21
- 238000012163 sequencing technique Methods 0.000 claims description 9
- 238000006243 chemical reaction Methods 0.000 abstract description 8
- 238000010586 diagram Methods 0.000 description 14
- 230000005540 biological transmission Effects 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 102100035964 Gastrokine-2 Human genes 0.000 description 3
- 101001075215 Homo sapiens Gastrokine-2 Proteins 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 3
- 230000004075 alteration Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000009877 rendering Methods 0.000 description 2
- MHABMANUFPZXEB-UHFFFAOYSA-N O-demethyl-aloesaponarin I Natural products O=C1C2=CC=CC(O)=C2C(=O)C2=C1C=C(O)C(C(O)=O)=C2C MHABMANUFPZXEB-UHFFFAOYSA-N 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0661—Format or protocol conversion arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/258—Data format conversion from or to a database
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- 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
- G06T7/00—Image analysis
- G06T7/40—Analysis of texture
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Human Computer Interaction (AREA)
- Data Mining & Analysis (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Image Generation (AREA)
Abstract
本公开提供一种纹理数据搬运方法、搬运装置、电子组件及电子设备,旨在提升纹理数据的搬运速率。其中,数据搬运方法包括:从待搬运的纹理数据中读取纹理块,并将纹理块存储至搬运装置的存储单元;其中,纹理块的高度等于扭转单位的高度的整数倍;针对纹理块的每个子块,按照该子块中的扭转单位的顺序,对每个扭转单位对应的纹理像素逐行或逐列地进行线性排序;将每个子块的线性排序后的多个纹理像素写入该子块对应的目的地址。本公开中,通过搬运装置在搬运纹理数据的同时,在搬运装置内通过对子块的纹理像素进行线性排序,从而实现纹理数据的格式转换,能有效提升纹理数据的转换效率,并提升纹理数据的搬运速率。
Description
技术领域
本公开涉及数据处理技术领域,尤其涉及一种纹理数据搬运方法、纹理数据搬运装置、电子组件及电子设备。
背景技术
图形处理单元(例如图形处理器GPU)在加载纹理数据前,通常需要将线性格式的纹理数据转换成扭序(英文名称为twiddle)格式的纹理数据,以提升渲染性能。
在现有技术中,纹理数据在主机内存中通常存储为线性格式,当图形处理单元加载纹理数据时,主机端需要先通过软件的方式,将线性格式的纹理数据转换成扭序格式,然后将扭序格式的纹理数据搬运至显存(例如GDDR,英文全称为Graphics Double DataRate),接着图形处理单元从显存中加载扭序格式的纹理数据。
通过软件方式实现纹理数据格式转换,虽然实现方式比较灵活,但是需要消耗较多指令周期,导致纹理数据的搬运速率低,也影响了纹理数据的加载效率。
发明内容
本公开的目的是提供一种纹理数据搬运方法、纹理数据搬运装置、电子组件及电子设备,旨在提升纹理数据的搬运速率,从而帮助提高纹理数据的加载效率。
根据本公开的一个方面,提供一种纹理数据搬运方法,应用于搬运装置,该方法包括:
从待搬运的纹理数据中读取纹理块,并将纹理块存储至搬运装置的存储单元;其中,待搬运的纹理数据是线性格式的纹理数据;纹理块的高度等于扭序格式的第一扭转单位的高度的整数倍,纹理块包括一个或多个子块,每个子块是由扭序格式下地址连续的多个纹理像素所组成的;
针对每个子块,按照该子块中的第二扭转单位的顺序,对每个第二扭转单位对应的纹理像素逐行或逐列地进行线性排序;
将每个子块的线性排序后的多个纹理像素写入该子块对应的目的地址。
本公开一种可行的实现方式中,扭序格式具有多种扭转单位,多种扭转单位具有不同的大小,小的扭转单位被包含在大的扭转单位之内;第一扭转单位和第二扭转单位均是多种扭转单位中的一种。
本公开一种可行的实现方式中,第二扭转单位是多种扭转单位中的最小扭转单位。
本公开一种可行的实现方式中,在第二扭转单位不是最小扭转单位的情况下,在将每个子块的线性排序后的多个纹理像素写入该子块对应的目的地址之前,该方法还包括:
按照预设交换方式,对多个目标纹理像素进行位置交换;多个目标纹理像素是线性排序后的多个纹理像素中的一部分纹理像素;
将每个子块的线性排序后的多个纹理像素写入该子块对应的目的地址的步骤包括:
将线性排序后且交换位置后的多个纹理像素写入相应子块对应的目的地址。
本公开一种可行的实现方式中,该方法还包括:
接收处理器发送的指示信息;
根据指示信息,确定以下多种参数和/或方式中的至少一种:纹理块的高度、纹理块的宽度、对纹理像素进行线性排序的方式、目标纹理像素在线性排序结果中的位置、目标纹理像素之间的预设交换方式。
本公开一种可行的实现方式中,该方法还包括:
计算每个子块对应的目的地址。
本公开一种可行的实现方式中,计算每个子块对应的目的地址的步骤包括:
根据每个子块的第一个纹理像素在待搬运的纹理数据中的坐标,计算第一个纹理像素的地址偏移量;
根据地址偏移量和每个纹理像素的位宽,计算该子块的目的地址。
本公开一种可行的实现方式中,根据每个子块的第一个纹理像素在待搬运的纹理数据中的坐标,计算第一个纹理像素的地址偏移量的步骤包括:
将坐标的每个坐标分量分别处理成一个二进制数;每个二进制数的位宽等于相应坐标分量对应的预设位宽,每个坐标分量对应的预设位宽与该坐标分量所在维度所包括的纹理像素个数相关;
按照从低位到高位的顺序,对多个坐标分量的二进制数进行间插,并将间插结果作为地址偏移量。
本公开一种可行的实现方式中,待搬运的纹理数据被划分为从小到大的多种数据单位,小的数据单位被包含在大的数据单位之内;该方法还包括:
记录每种数据单位的起始地址;
当目标数据单位对应的纹理像素全部被读取后,根据目标数据单位当前的起始地址,以及目标数据单位对应的起始地址差值,针对不大于目标数据单位的每种数据单位的起始地址进行更新;其中,目标数据单位是多种数据单位中的一种数据单位,目标数据单位对应的起始地址差值是两个相邻的目标数据单位的两个起始地址之间的差值。
本公开一种可行的实现方式中,从待搬运的纹理数据中读取纹理块的步骤包括:
根据最小数据单位的起始地址和最小数据单位包括的纹理像素个数,从待搬运的纹理数据中读取纹理像素;纹理块的规格与多种数据单位中的一种数据单位的规格相等。
本公开一种可行的实现方式中,纹理块的宽度等于第一扭转单位的宽度的整数倍。
本公开一种可行的实现方式中,待搬运的纹理数据是二维纹理图像或三维纹理图像。
本公开一种可行的实现方式中,搬运装置是用于搬运纹理数据的DMA。
根据本公开的另一方面,还提供一种纹理数据搬运装置,该装置包括控制器、存储单元、读端口及写端口;
控制器用于控制读端口从待搬运的纹理数据中读取纹理块,并将纹理块存储至存储单元;待搬运的纹理数据是线性格式的纹理数据;纹理块的高度等于扭序格式的第一扭转单位的高度的整数倍,纹理块包括一个或多个子块,每个子块是由扭序格式下地址连续的多个纹理像素所组成的;
控制器还用于针对每个子块,按照该子块中的第二扭转单位的顺序,对每个第二扭转单位对应的纹理像素逐行或逐列地进行线性排序;
控制器还用于控制写端口,将每个子块的线性排序后的多个纹理像素写入该子块对应的目的地址。
本公开一种可行的实现方式中,扭序格式具有多种扭转单位,多种扭转单位具有不同的大小,小的扭转单位被包含在大的扭转单位之内;第一扭转单位和第二扭转单位均是多种扭转单位中的一种。
本公开一种可行的实现方式中,第二扭转单位是多种扭转单位中的最小扭转单位。
本公开一种可行的实现方式中,在第二扭转单位不是最小扭转单位的情况下,在控制写端口,将每个子块的线性排序后的多个纹理像素写入该子块对应的目的地址之前,控制器还用于:按照预设交换方式,对多个目标纹理像素进行位置交换;多个目标纹理像素是线性排序后的多个纹理像素中的一部分纹理像素;
控制器在控制写端口,将每个子块的线性排序后的多个纹理像素写入该子块对应的目的地址时,具体用于:控制写端口,将线性排序后且交换位置后的多个纹理像素写入相应子块对应的目的地址。
本公开一种可行的实现方式中,控制器还用于:
接收处理器发送的指示信息;
根据指示信息,确定以下多种参数和/或方式中的至少一种:纹理块的高度、纹理块的宽度、对纹理像素进行线性排序的方式、目标纹理像素在线性排序结果中的位置、目标纹理像素之间的预设交换方式。
本公开一种可行的实现方式中,控制器还用于:计算每个子块对应的目的地址。
本公开一种可行的实现方式中,控制器在计算每个子块对应的目的地址时,具体用于:
根据每个子块的第一个纹理像素在待搬运的纹理数据中的坐标,计算第一个纹理像素的地址偏移量;
根据地址偏移量和每个纹理像素的位宽,计算该子块的目的地址。
本公开一种可行的实现方式中,控制器在根据每个子块的第一个纹理像素在待搬运的纹理数据中的坐标,计算第一个纹理像素的地址偏移量时,具体用于:
将坐标的每个坐标分量分别处理成一个二进制数;每个二进制数的位宽等于相应坐标分量对应的预设位宽,每个坐标分量对应的预设位宽与该坐标分量所在维度所包括的纹理像素个数相关;
按照从低位到高位的顺序,对多个坐标分量的二进制数进行间插,并将间插结果作为地址偏移量。
本公开一种可行的实现方式中,待搬运的纹理数据被划分为从小到大的多种数据单位,小的数据单位被包含在大的数据单位之内;
存储单元还用于记录每种数据单位的起始地址;
控制器还用于:当目标数据单位对应的纹理像素全部被读取后,根据目标数据单位当前的起始地址,以及目标数据单位对应的起始地址差值,针对不大于目标数据单位的每种数据单位的起始地址进行更新;其中,目标数据单位是多种数据单位中的一种数据单位,目标数据单位对应的起始地址差值是两个相邻的目标数据单位的两个起始地址之间的差值。
本公开一种可行的实现方式中,控制器在控制读端口从待搬运的纹理数据中读取纹理块时,具体用于:
根据最小数据单位的起始地址和最小数据单位包括的纹理像素个数,从待搬运的纹理数据中读取纹理像素;纹理块的规格与多种数据单位中的一种数据单位的规格相等。
本公开一种可行的实现方式中,纹理块的宽度等于第一扭转单位的宽度的整数倍。
本公开一种可行的实现方式中,待搬运的纹理数据是二维纹理图像或三维纹理图像。
本公开一种可行的实现方式中,搬运装置是用于搬运纹理数据的DMA。
根据本公开的另一方面,还提供一种电子组件,该电子组件包括上述任一实施例中所述的纹理数据搬运装置。在一些使用场景下,该电子组件的产品形式体现为显卡;在另一些使用场景下,该电子组件的产品形式体现为CPU主板。
根据本公开的另一方面,还提供一种电子设备,该电子设备包括上述的电子组件。在一些使用场景下,该电子设备的产品形式是便携式电子设备,例如智能手机、平板电脑、VR设备等;在一些使用场景下,该电子设备的产品形式是个人电脑、游戏主机等。
附图说明
图1a是线性格式的纹理数据示意图;
图1b是第一种扭序格式的纹理数据示意图;
图1c是第二种扭序格式的纹理数据示意图;
图1d是第三种扭序格式的纹理数据示意图;
图1e是第四种扭序格式的纹理数据示意图;
图2是本公开一实施例提供的纹理数据搬运方法的流程示意图;
图3是本公开一实施例提供的针对纹理块中的子块进行处理的示意图;
图4是本公开另一实施例提供的针对纹理块中的子块进行处理的示意图;
图5是本公开一实施例提出的计算目的地址的流程示意图;
图6是本公开一实施例中对纹理数据的划分示意图;
图7是本公开一实施例提供的纹理数据的读取流程示意图;
图8是本公开一实施例提供的纹理数据搬运装置的结构示意图。
具体实施方式
在介绍本公开实施例之前,应当说明的是:
本公开部分实施例被描述为处理流程,虽然流程的各个操作步骤可能被冠以顺序的步骤编号,但是其中的操作步骤可以被并行地、并发地或者同时实施。
本公开实施例中可能使用了术语“第一”、“第二”等等来描述各个特征,但是这些特征不应当受这些术语限制。使用这些术语仅仅是为了将一个特征与另一个特征进行区分。
本公开实施例中可能使用了术语“和/或”,“和/或”包括其中一个或更多所列出的相关联特征的任意和所有组合。
应当理解的是,当描述两个部件的连接关系或通信关系时,除非明确指明两个部件之间直接连接或直接通信,否则,两个部件的连接或通信可以理解为直接连接或通信,也可以理解为通过中间部件间接连接或通信。
为了使本公开实施例中的技术方案及优点更加清楚明白,以下结合附图对本公开的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本公开的一部分实施例,而不是所有实施例的穷举。需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。
图形处理单元(例如图形处理器GPU)在加载纹理数据前,通常需要将线性格式的纹理数据转换成扭序格式的纹理数据,以提升渲染性能。其中,扭序的英文名称为twiddle。为了便于理解线性格式和扭序格式,请参见图1a至图1e,图1a是线性格式的纹理数据的示意图,图1b至图1e是四种扭序格式的纹理数据的示意图。
以二维(即2D)的纹理数据为例,可以将二维纹理数据简称为纹理图像。如图1a所示,在线性格式的纹理图像中,每个小方格表示一个纹理像素,多个小方格中的数字表示多个纹理像素在存储器中的存储顺序。例如,线性格式的纹理图像被存储在主机内存中,则多个小方格中的数字表示多个纹理像素在主机内存中的存储顺序。
如图1a所示,对于线性格式的纹理图像,每一行的多个纹理像素的存储顺序是连续的,且上一行的最后一个纹理像素与下一行的第一个纹理像素的存储顺序也是连续的。此外,如图1a所示,线性格式的纹理图像中的折线及其箭头,也能表示多个纹理像素的存储顺序。
同样地,如图1b至图1e所示,在扭序格式的纹理图像中,每个小方格表示一个纹理像素,多个小方格中的数字表示多个纹理像素在存储器中的存储顺序。例如,扭序格式的纹理图像被存储在显存(例如GDDR,英文全称为Graphics Double Data Rate)中,则多个小方格中的数字表示多个纹理像素在显存中的存储顺序。
如图1b至图1e所示,对于扭序格式的纹理图像,纹理像素的存储顺序按照Z字型或倒N字型的方式排列。以图1b所示的第一种扭序格式的纹理图像为例,其第一行第一列的纹理像素(即数字0对应的纹理像素)是存储顺序中的第一个纹理像素,其第一行第二列的纹理像素(即数字1对应的纹理像素)是存储顺序中的第二个纹理像素,其第二行第一列的纹理像素(即数字2对应的纹理像素)是存储顺序中的第三个纹理像素,其第二行第二列的纹理像素(即数字3对应的纹理像素)是存储顺序中的第四个纹理像素。此外,如图1b所示,扭序格式的纹理图像中的折线及其箭头,也能表示多个纹理像素的存储顺序。
需要说明的是,图1b至图1e仅示例性地给出了几种扭序格式的纹理图像,在具体实施时,扭序格式的纹理图像的具体规格(即高度、宽度、高宽比、扭转方式等)并不局限于图1b至图1e所示的四种规格。此外,纹理数据还可以是三维(3D)、四维(4D)等更多维的。在具体实施时,并不局限于二维的纹理数据。
在相关技术中,纹理数据在主机内存中通常存储为线性格式,当图形处理单元加载纹理数据时,主机端需要先通过软件的方式,将线性格式的纹理数据转换成扭序格式,然后将扭序格式的纹理数据搬运至显存(例如GDDR,英文全称为Graphics Double DataRate),接着图形处理单元从显存中加载扭序格式的纹理数据。相关技术中,通过软件方式实现纹理数据格式转换,虽然实现方式比较灵活,但是需要消耗较多指令周期,导致纹理数据的搬运速率低,也影响了纹理数据的加载效率。
需要说明的是,虽然相关技术中可以通过软件方式转换纹理数据的格式,但并不是承认上述软件方式构成本公开的现有技术,上述软件方式有可能是本公开的申请人内部使用的技术,也就是说上述软件方式并不一定处于公开状态。
针对纹理数据搬运速率低,影响纹理数据加载效率的问题,本公开通过一下实施例提出一种纹理数据搬运方法、纹理数据搬运装置、电子组件及电子设备,旨在提升纹理数据的搬运速率,从而帮助提高纹理数据的加载效率。
参考图2,图2是本公开一实施例提供的纹理数据搬运方法的流程示意图。如图2所示,该方法包括以下步骤:
S210:从待搬运的纹理数据中读取纹理块,并将纹理块存储至搬运装置的存储单元。
其中,待搬运的纹理数据是线性格式的纹理数据;纹理块的高度等于扭序格式的第一扭转单位的高度的整数倍,纹理块包括一个或多个子块,每个子块是由扭序格式下地址连续的多个纹理像素所组成的。
本公开中,纹理块是纹理数据的一部分,对于二维的纹理数据,其纹理块也是一个二维的纹理数据,纹理块具有高度和宽度,纹理块的高度可以理解为纹理块中的纹理像素的行数,纹理块的宽度可以理解为纹理块中的纹理像素的列数。同样地,对于三维的纹理数据,其纹理块也是一个三维的纹理数据,纹理块具有高度、宽度及深度,纹理块的高度可以理解为纹理块中的纹理像素的行数,纹理块的宽度可以理解为纹理块中的纹理像素的列数,纹理块的深度可以理解为纹理块中的纹理像素的层数。纹理块的高度、宽度和/或深度,通常小于待搬运的纹理数据的高度、宽度和/或深度,不过也可能存在等于的情况,例如纹理块的宽度等于待搬运的纹理数据的宽度,或者纹理块的高度等于待搬运的纹理数据的高度。
搬运装置每次读取纹理数据的一个或多个纹理块,并按照下述步骤S220和S230的方式对读取的纹理块进行相应处理和向外写出,从而分多次将纹理数据搬运到目的地址,比如分多次将主机内存中的纹理数据搬运至显存。
如图1b所示,扭转单位是指:按照纹理像素的扭转顺序对纹理像素进行一定程度的分组。为了便于理解,如图1b所示,在第一种扭序格式的纹理图像中,对应数字0、1、2、3的四个纹理像素可以视为一个扭转单位,对应数字4、5、6、7的四个纹理像素可以视为一个扭转单位,对应数字8、9、10、11的四个纹理像素可以视为一个扭转单位...对应数字252、253、254、255的四个纹理像素可以视为一个扭转单位。或者,在第一种扭序格式的纹理图像中,对应数字0-15的十六个纹理像素可以视为一个扭转单位,对应数字16-31的十六个纹理像素可以视为一个扭转单位...对应数字240-255的十六个纹理像素可以视为一个扭转单位。或者,在第一种扭序格式的纹理图像中,对应数字0-63的六十四个纹理像素可以视为一个扭转单位...对应数字192-255的六十四个纹理像素可以视为一个扭转单位。
可见,扭序格式可以具有多种扭转单位,多种扭转单位具有不同的大小,小的扭转单位被包含在大的扭转单位之内。例如,在第一种扭序格式的纹理图像中,对应数字0、1、2、3的四个纹理像素所组成的扭转单位,被包含在对应数字0-15的十六个纹理像素所组成的扭转单位之内。在第一种扭序格式的纹理图像中,由四个纹理像素组成的扭转单位是最小的扭转单位。
此外,扭序格式也可以仅具有一种扭转单位,例如在图1e的第四种扭序格式的纹理图像中,该纹理图像是8×8的,共包括64个纹理像素,该纹理图像的扭序格式仅具有一种扭转单位,该扭转单位是由十六个纹理像素所组成的。具体地,对应数字0-15的十六个纹理像素视为一个扭转单位,对应数字16-31的十六个纹理像素视为一个扭转单位,对应数字31-47的十六个纹理像素视为一个扭转单位,对应数字48-63的十六个纹理像素视为一个扭转单位。
本公开中,纹理块的高度等于扭序格式的第一扭转单位的高度的整数倍,第一扭转单位是扭序格式的一种或多种扭转单位中的一种。以图1b中的第一种扭序格式的纹理图像为例,第一扭转单位可以是由四个纹理像素组成的扭转单位,则第一扭转单位的高度为2行纹理像素,纹理块的高度为2行纹理像素的整数倍,例如,纹理块的高度可以是2行、4行、6行、8行...或者16行纹理像素。
需要说明的是,本公开中将纹理块的高度限定为扭转单位的高度的整数倍,使得纹理块在高度方向包括整数个扭转单位,比如扭转单位的高度为2个纹理像素,纹理块的高度为4个纹理像素,则纹理块在高度方向包括2个扭转单位。由于一个扭转单位内的多个纹理像素是扭序格式下地址连续的多个纹理像素,因此通过将纹理块的高度限定为扭转单位的高度的整数倍,使得读回的纹理块中可以包括一段或多段在扭序格式下地址连续的纹理像素,从而在执行下述步骤S220和S230之后,能将每段地址连续的纹理像素写入相应的目的地址,以达到提高纹理数据的搬运速率和加载效率的目的。
此外,纹理块的宽度最好是等于第一扭转单位的宽度的整数倍,其好处是避免一个纹理块中的子块过于零散化。换言之,可以使得一个纹理块仅包括少量子块,而每个子块中的纹理像素个数较多,有利于进一步提升纹理数据搬运效率。如果一个纹理块中的子块过于零散化,也就是一个纹理块中包括大量子块,许多子块中的纹理像素个数较少,则不利于进一步提升纹理数据的搬运效率。但需要说明的是,纹理块的宽度也可以不等于第一扭转单位的宽度的整数倍,在此情况下,也能一定程度地提升纹理数据的搬运效率。
本公开中,纹理块包括一个或多个子块,每个子块是由扭序格式下地址连续的多个纹理像素所组成的。参考图3,图3中的纹理块是从图1b所示的第一种扭序格式的纹理图像中读取的,图3所示的纹理块存储在搬运装置内部的存储单元中,该存储单元可以是二维的存储阵列,存储阵列中的每个单位用于存储一个纹理像素。该纹理块的高度等于4行纹理像素,宽度等于16列纹理像素。该纹理块中每个纹理像素上标识的数字,表示纹理像素在扭序格式下的存储顺序。如图3所示,对应数字0-31的三十二个纹理像素的存储顺序是彼此连续的,因此这三十二个纹理像素在扭序格式下的存储地址是连续的,这三十二个纹理像素可以视为第一个子块。同样地,对应数字64-95的三十二个纹理像素在扭序格式下的存储地址也是连续的,这三十二个纹理像素也可以视为第二个子块。
S220:针对每个子块,按照该子块中的第二扭转单位的顺序,对每个第二扭转单位对应的纹理像素逐行或逐列地进行线性排序。
S230:将每个子块的线性排序后的多个纹理像素写入该子块对应的目的地址。
本公开中,每个子块中可以包括一个第二扭转单位,或者可以包括多个第二扭转单位,第二扭转单位也是扭序格式的一种或多种扭转单位中的一种。子块中的第二扭转单位的顺序是指:在子块中包括多个第二扭转单位的情况下,多个扭转单位在扭序格式下的存储顺序。为便于理解,如图1b所示的第一种扭序格式的纹理图像中的折线和箭头所示,以及如图3所示的纹理块中的直线和箭头所示,第二扭转单位1-第二扭转单位8在扭转格式下的存储顺序是:第二扭转单位1、第二扭转单位2、第二扭转单位3、第二扭转单位4、第二扭转单位5、第二扭转单位6、第二扭转单位7、第二扭转单位8。
如图3所示,按照步骤S220对图3中的第一个子块进行处理时,首先对第二扭转单位1对应的纹理像素逐行地进行线性排序,排序结果为:纹理像素0、纹理像素1、纹理像素2、纹理像素3;在该排序结果的基础上,接着对第二扭转单位2对应的纹理像素逐行地进行线性排序,排序结果为:纹理像素0、纹理像素1、纹理像素2、纹理像素3、纹理像素4、纹理像素5、纹理像素6、纹理像素7。依此类推,最终第一个子块对应的线性排序结果为:纹理像素0、纹理像素1、纹理像素2、纹理像素3、纹理像素4、纹理像素5、纹理像素6、纹理像素7、纹理像素8、纹理像素9、纹理像素10、纹理像素11、纹理像素12、纹理像素13、纹理像素14、纹理像素15、纹理像素16、纹理像素17、纹理像素18、纹理像素19、纹理像素20、纹理像素21、纹理像素22、纹理像素23、纹理像素24、纹理像素25、纹理像素26、纹理像素27、纹理像素28、纹理像素29、纹理像素30、纹理像素31。
可以看出,该线性排序结果与每个纹理像素在扭序格式下的存储顺序是一致的。因此,可以将该子块的线性排序后的多个纹理像素写入该子块对应的目的地址。
本公开中,搬运装置按照步骤S210的方式从待搬运的纹理数据中读取纹理块,并且对纹理块的高度限定为扭转单位的高度的整数倍,由于扭转单位内的纹理像素在扭序格式下的地址是连续的,因此读回的纹理块中可以包括一个或多个子块,每个子块是由扭序格式下地址连续的多个纹理像素所组成的;接着搬运装置按照子块中的第二扭转单位的顺序,对每个第二扭转单位对应的纹理像素逐行或逐列地进行线性排序,得到的线性排序结果与每个纹理像素在扭序格式下的存储顺序是一致的,因此可以将子块的线性排序后的多个纹理像素写入该子块对应的目的地址。写入到目的地址的多个纹理像素自然呈扭序状态。本公开中,通过搬运装置在搬运纹理数据的同时,在搬运装置内通过对子块的纹理像素进行线性排序,从而实现纹理数据的格式转换,能有效提升纹理数据的转换效率,并提升纹理数据的搬运速率,进而帮助提高纹理数据的加载效率。
在一些具体实施方式中,第二扭转单位是多种扭转单位中的最小扭转单位。如图3所示,图3中的第二扭转单位就是多种扭转单位中的最小扭转单位,即图1b中的第一种扭序格式的纹理图像的多种扭转单位中的最小扭转单位。在第二扭转单位是最小扭转单位的情况下,线性排序后的多个纹理像素的排列顺序,恰好可以等于多个纹理像素在扭序格式下的存储顺序,因此可以直接将线性排序后的多个纹理像素写入相应目的地址。
在另一些具体实施方式中,第二扭转单位不是最小扭转单位,在此情况下,在将每个子块的线性排序后的多个纹理像素写入该子块对应的目的地址之前(也就是在执行步骤S230之前),纹理数据搬运方法还包括:按照预设交换方式,对多个目标纹理像素进行位置交换。然后再将线性排序后且交换位置后的多个纹理像素写入相应子块对应的目的地址。其中,多个目标纹理像素是线性排序后的多个纹理像素中的一部分纹理像素。
为便于理解,参考图4,图4中的纹理块是从图1b所示的第一种扭序格式的纹理图像中读取的,图4所示的纹理块存储在搬运装置内部的存储单元中,该存储单元可以是二维的存储阵列,存储阵列中的每个单位用于存储一个纹理像素。该纹理块的高度等于4行纹理像素,宽度等于16行纹理像素。该纹理块中每个纹理像素上标识的数字,表示纹理像素在扭序格式下的存储顺序。如图4所示,对应数字0-31的三十二个纹理像素的存储顺序是彼此连续的,因此这三十二个纹理像素在扭序格式下的存储地址是连续的,这三十二个纹理像素可以视为第一个子块。同样地,对应数字64-95的三十二个纹理像素在扭序格式下的存储地址也是连续的,这三十二个纹理像素也可以视为第二个子块。
图4中的第一个子块包括第二扭转单位1和第二扭转单位2。按照步骤S220对图4中的第一个子块进行处理时,首先对第二扭转单位1对应的纹理像素逐行地进行线性排序,排序结果为:纹理像素0、纹理像素1、纹理像素4、纹理像素5、纹理像素2、纹理像素3、纹理像素6、纹理像素7、纹理像素8、纹理像素9、纹理像素12、纹理像素13、纹理像素10、纹理像素11、纹理像素14、纹理像素15;在该排序结果的基础上,接着对第二扭转单位2对应的纹理像素逐行地进行线性排序,最终的排序结果为:纹理像素0、纹理像素1、纹理像素4、纹理像素5、纹理像素2、纹理像素3、纹理像素6、纹理像素7、纹理像素8、纹理像素9、纹理像素12、纹理像素13、纹理像素10、纹理像素11、纹理像素14、纹理像素15、纹理像素16、纹理像素17、纹理像素20、纹理像素21、纹理像素18、纹理像素19、纹理像素22、纹理像素23、纹理像素24、纹理像素25、纹理像素28、纹理像素29、纹理像素26、纹理像素27、纹理像素30、纹理像素31。
上述线性排序结果中,纹理像素4和纹理像素5、纹理像素2和纹理像素3是两组需要进行位置交换的纹理像素;同样地,纹理像素12和纹理像素13、纹理像素10和纹理像素11是两组需要进行位置交换的纹理像素;纹理像素20和纹理像素21、纹理像素18和纹理像素19是两组需要进行位置交换的纹理像素;纹理像素28和纹理像素29、纹理像素26和纹理像素27是两组需要进行位置交换的纹理像素。
按照如图4所示的预设交换方式对每两组纹理像素进行交换后,得到的排序结果与每个纹理像素在扭序格式下的存储顺序是一致的。因此,可以将线性排序后且交换位置后的多个纹理像素写入相应目的地址。
本公开的第一种应用场景是:搬运装置只能将纹理数据由线性格式转换成一种固定的扭序格式,比如该固定的扭序格式是图1b中的第一种扭序格式,换言之,搬运装置每次搬运纹理数据时,都只能将纹理数据由线性格式转换为图1b中的第一种扭序格式,并且,搬运装置只能按照固定的方式读取纹理块和处理子块。在这种应用场景下,可以将纹理块的高度和宽度、对纹理像素进行线性排序的方式、需要交换位置的纹理像素在线性排序结果中的位置、纹理像素之间的位置交换方式等参数或方式,固化在搬运装置中(比如固化在搬运装置的控制器中),使得搬运装置按照既定的方式读取纹理块、处理子块及向外写出纹理像素。
例如,搬运装置每次从待搬运的纹理数据中读取高度等于4行纹理像素、宽度等于16行纹理像素的纹理块。
然后,搬运装置针对纹理块的第1-4列的16个纹理像素,逐行地进行线性排序,再针对纹理块的第5-8列的16个纹理像素,逐行地进行线性排序;接着,搬运装置针对线性排序结果中的第3、4个纹理像素和第5、6个纹理像素进行对调,针对线性排序结果中的第11、12个纹理像素和第13、14个纹理像素进行对调,针对线性排序结果中的第19、20个纹理像素和第21、22个纹理像素进行对调,针对线性排序结果中的第27、28个纹理像素和第29、30个纹理像素进行对调;最后,搬运装置按照多个纹理像素的最新顺序,将多个纹理像素写入目的地址。
在此之后,或者与此同时,搬运装置针对纹理块的第9-12列的16个纹理像素,逐行地进行线性排序,再针对纹理块的第13-16列的16个纹理像素,逐行地进行线性排序;接着,搬运装置针对线性排序结果中的第3、4个纹理像素和第5、6个纹理像素进行对调,针对线性排序结果中的第11、12个纹理像素和第13、14个纹理像素进行对调,针对线性排序结果中的第19、20个纹理像素和第21、22个纹理像素进行对调,针对线性排序结果中的第27、28个纹理像素和第29、30个纹理像素进行对调;最后,搬运装置按照多个纹理像素的最新顺序,将多个纹理像素写入目的地址。
其中,纹理块的第1-8列的32个纹理像素是第一个子块,纹理块的第9-16列的32个纹理像素是第二个子块。纹理块的第1-4列的16个纹理像素是第一个子块中的第二扭转单位1,纹理块的第5-8列的16个纹理像素是第一个子块中的第二扭转单位2,纹理块的第9-12列的16个纹理像素是第二个子块中的第二扭转单位1,纹理块的第13-16列的16个纹理像素是第二个子块中的第二扭转单位2。
本公开的第二种应用场景是:搬运装置只能将纹理数据由线性格式转换成一种固定的扭序格式,但是搬运装置在读取纹理块和处理子块时,支持多组读取方式和处理方式。在这种应用场景下,可以针对每组读取方式和处理方式,将该组方式对应的以下参数或信息:纹理块的高度和宽度、对纹理像素进行线性排序的方式、需要交换位置的纹理像素在线性排序结果中的位置、纹理像素之间的位置交换方式等参数或信息,固化在搬运装置中(比如固化在搬运装置的控制器中),使得搬运装置可以根据外部(比如CPU)的指示信息,按照指示的参数和/或方式读取纹理块、处理子块及向外写出纹理像素。
本公开的第三种应用场景是:搬运装置支持固定的几种(比如2种、3种或4种)扭序格式,搬运装置可以将纹理数据由线性格式转换成其支持的几种扭序格式中的一种,并且针对每种扭序格式,搬运装置在读取纹理块和处理子块时,还支持多组读取方式和处理方式。在这种应用场景下,可以针对每种扭序格式的每组读取方式和处理方式,将该组方式对应的以下参数或信息:纹理块的高度和宽度、对纹理像素进行线性排序的方式、需要交换位置的纹理像素在线性排序结果中的位置、纹理像素之间的位置交换方式等参数或信息,固化在搬运装置中(比如固化在搬运装置的控制器中),使得搬运装置可以根据外部(比如CPU)的指示信息,按照指示的扭序格式、参数和/或方式读取纹理块、处理子块及向外写出纹理像素。
总言之,在上述第二种和第三种应用场景中,搬运装置需要接收处理器发送的指示信息,并根据该指示信息,确定以下多种参数和/或方式中的至少一种:纹理块的高度、纹理块的宽度、对纹理像素进行线性排序的方式、目标纹理像素在线性排序结果中的位置、目标纹理像素之间的预设交换方式。
其中,搬运装置接收的指示信息可以是一个标识,该标识的形式可以是高/低电频、二进制数或者字符串,该标识与上述多种参数和/或方式中的至少一种对应,搬运装置在接收到该标识后,可以确定出该标识对应的参数和/或方式,从而可以根据确定出的参数和/或方式,执行上述纹理块读取、子块处理、纹理像素位置交换等步骤。
或者,搬运装置接收的指示信息就是纹理块的高度、纹理块的宽度、目标纹理像素的位置等参数本身,和/或就是线性排序方式信息、预设交换方式信息本身。搬运装置在接收到指示信息后,可以直接根据指示信息,执行上述纹理块读取、子块处理、纹理像素位置交换等步骤。
在一些具体实施方式中,搬运装置还会计算每个子块对应的目的地址。
参考图5,图5是本公开一实施例提出的计算目的地址的流程示意图。如图5所示,搬运装置在计算每个子块对应的目的地址时,包括以下步骤:
S510:根据每个子块的第一个纹理像素在待搬运的纹理数据中的坐标,计算第一个纹理像素的地址偏移量;
S520:根据地址偏移量和每个纹理像素的位宽,计算该子块的目的地址。
其中,每个子块的第一个纹理像素是指:扭序格式下地址连续的多个纹理像素中,存储地址最小的纹理像素。在搬运装置内部的二维存储阵列中,每个子块的第一个纹理像素通常是该子块的左上角的纹理像素。
在按照步骤S510的方式计算地址偏移量时,具体可以采用的一种方式是:将第一个纹理像素的坐标的每个坐标分量分别处理成一个二进制数;按照从低位到高位的顺序,对多个坐标分量的二进制数进行间插,并将间插结果作为地址偏移量。
其中,每个二进制数的位宽等于相应坐标分量对应的预设位宽,每个坐标分量对应的预设位宽与该坐标分量所在维度所包括的纹理像素个数相关。具体地,坐标分量x的预设位宽等于向上取整后的结果,其中X是坐标分量x所在维度所包括的纹理像素个数。为便于理解,示例性地,纹理图像的宽度(即x方向)为128个像素,则坐标分量x的预设位宽等于7,坐标分量x表示为x[6:0]。同样地,坐标分量y的预设位宽等于/>向上取整后的结果,其中Y是坐标分量y所在维度所包括的纹理像素个数。为便于理解,示例性地,纹理图像的高度(即y方向)为60个像素,则坐标分量v的预设位宽等于6,坐标分量y表示为y[5:0]。
其中,按照从低位到高位的顺序,对多个坐标分量的二进制数进行间插,其间插结果为x[6],y[5],x[5],y[4],x[4],y[3],x[3],y[2],x[2],y[1],x[1],y[0],x[0]。
沿用上述示例,假设一个子块的第一个纹理像素在待搬运的纹理数据中的坐标(x,y)为(40,12),则坐标分量x对应的二进制数为0101000,坐标分量y对应的二进制数为001100,对0101000和001100的间插结果为0010011100000,然后将该间插结果作为地址偏移量。
在按照步骤S510的方式计算地址偏移量时,具体可以采用的一种方式是:利用地址偏移量乘以每个纹理像素的位宽,将相乘结果作为子块的目的地址。其中,纹理像素的位宽是一个纹理像素所占用的字节数,比如每个纹理像素有8位,则纹理像素所占用的字节数是1,纹理像素的位宽也就是1。
本公开中,搬运装置计算子块的目的地址的步骤,可以与搬运装置处理子块的步骤并行执行,从而有利于进一步提升纹理数据的搬运效率。
需要说明的是,本公开对于目的地址的计算方式并不做限定,除了可以采用上述具体实施方式中提供的计算方式,还可以采用其他方式计算目的地址。
在另一些具体实施方式中,搬运装置也可以不计算每个子块的目的地址,而是接收外部(比如CPU)发送的每个子块的目的地址,从而根据接收到的目的地址,将每个子块的纹理像素写入相应的目的地址。
本公开中,为了使得纹理数据的读取更具流程化,在一些具体实施方式中,如图6所示,待搬运的纹理数据被划分为从小到大的多种数据单位,小的数据单位被包含在大的数据单位之内。
图6中,第四种数据单位是M行纹理像素,也就是以纹理图像的M行纹理像素为一个数据单位,其中M等于第一扭转单位的高度的整数倍;第三种数据单位是纹理块,换言之,第三种数据单位的高度和宽度分别等于纹理块的高度和宽度,第三种数据单位被包含在第四种纹理单位之内;第二种数据单位是纹理块中的每一行纹理像素,第二种数据单位被包含在第三种数据单位之内;第一种数据单位被包含在第二种数据单位之内,第一种数据单位是第二种数据单位中每次突发传输的数据量。
如图6所示,搬运装置还记录每种数据单位的起始地址。其中,每种数据单位的起始地址是指:该种数据单位中的第一个纹理像素在线性格式下的存储地址。图6中,每个数据单位中经斜纹填充的小方格表示该数据单位的第一个纹理像素。为便于说明,将第一种数据格式的起始地址表示为rd_burst_saddr,将第二种数据格式的起始地址表示为rd_x_saddr,将第三种数据格式的起始地址表示为rd_Nk_x_saddr,将第四种数据格式的起始地址表示为rd_M_row_x_saddr。
当目标数据单位对应的纹理像素全部被读取后,搬运装置根据目标数据单位当前的起始地址,以及目标数据单位对应的起始地址差值,针对不大于目标数据单位的每种数据单位的起始地址进行更新;其中,目标数据单位是多种数据单位中的一种数据单位,目标数据单位对应的起始地址差值是两个相邻的目标数据单位的两个起始地址之间的差值。
在读取纹理块时,搬运装置根据最小数据单位的起始地址和最小数据单位包括的纹理像素个数,从待搬运的纹理数据中读取纹理像素;纹理块的规格与多种数据单位中的一种数据单位的规格相等。
其中,最小数据单位是图6中的第一种数据单位,纹理块的规格是指纹理块的高度和宽度。
为便于理解,参考图7,图7是本公开一实施例提供的纹理数据的读取流程示意图。图7中,搬运装置采用突发传输的方式读取待搬运的纹理数据。如图7所示,主要步骤以下步骤:
S701:首先将rd_burst_saddr、rd_x_saddr、rd_Nk_x_saddr、rd_M_row_x_saddr这四种起始地址初始化为src_addr,src_addr表示待搬运的纹理数据的起始地址。
S702:发起突发读请求,并执行突发读传输;
S703:当突发读传输执行完毕后,判断当前纹理块的当前行是否被读取完;若否,则执行步骤S704;若是,则执行步骤S705;
S704:将rd_burst_saddr更新为下一次突发传输读取的第一个纹理像素的地址,并返回步骤S702,从而继续读取当前纹理块的当前行中的纹理数据;
其中,rd_burst_len表示突发数据读请求的数据长度。
S705:判断x方向和y方向是否均读取完成,即判断纹理数据是否已经被全部读取完;若是,则返回步骤S701,从而准备读取下一个纹理数据;若否,则执行步骤S706:
S706:判断x方向是否读取完成,即判断当前M行纹理像素是否均读取完成;若是,则执行步骤S707;若否,则执行步骤S708;
S707:将rd_burst_saddr、rd_x_saddr、rd_Nk_x_saddr、rd_M_row_x_saddr这四种起始地址更新为下一个M行纹理像素的起始地址,并返回步骤S702,从而开始读取下一个M行中的纹理数据;
其中,x_stride_len表示纹理图像中每一行跳到下一行间隔的纹理像素个数。
S708:判断当前纹理块是否读取完成;若是,则执行步骤S709;若否,则执行步骤S710;
S709:将rd_burst_saddr、rd_x_saddr、rd_Nk_x_saddr这三种起始地址更新为下一个纹理块的起始地址,并返回步骤S702,从而开始读取下一个纹理块中的纹理数据;
其中,x_inNk_step_len表示纹理块中每一行的纹理像素个数,也就是纹理块的宽度。
S710:将rd_burst_saddr、rd_x_saddr这两种起始地址更新为当前纹理块的下一行的起始地址,并返回步骤S702,从而开始读取当前纹理块的下一行纹理数据。
需要说明的是,图7仅示出了一种可选的纹理数据读取方法,本公开对于纹理数据的具体读取方式并不限定。
在一些具体实施方式中,待搬运的纹理数据是二维纹理图像或三维纹理图像。本公开的上述实施例基本上是以二维纹理图像为例,当纹理数据是三维纹理图像时,仅需要在x和y这两种维度的基础上,按照同样的发明构思,延伸为x,y及z这三种维度。
在一些具体实施方式中,搬运装置是用于搬运纹理数据的DMA(Direct MemoryAccess,直接内存访问)。本公开中,通过专用DMA搬运纹理数据,专用DMA在搬运纹理数据的同时,可以在DMA内部将纹理数据由线性格式转换为扭序格式。
以上,本公开通过多个实施例提供了一种或多种纹理数据搬运方法,以下,本公开通过实施例提供一种或多种纹理数据搬运装置。由于本公开的搬运装置与搬运方法基于同一发明构思,因此为了避免重复,以下仅对搬运装置做简要说明,搬运装置的一些具体实施方式可以参考前述搬运方法的具体实施方式。
参考图8,图8是本公开一实施例提供的纹理数据搬运装置的结构示意图。如图8所示,该装置包括:控制器、存储单元、读端口及写端口。
其中,控制器用于控制读端口从待搬运的纹理数据中读取纹理块,并将纹理块存储至存储单元;待搬运的纹理数据是线性格式的纹理数据;纹理块的高度等于扭序格式的第一扭转单位的高度的整数倍,纹理块包括一个或多个子块,每个子块是由扭序格式下地址连续的多个纹理像素所组成的。
控制器还用于针对每个子块,按照该子块中的第二扭转单位的顺序,对每个第二扭转单位对应的纹理像素逐行或逐列地进行线性排序。
控制器还用于控制写端口,将每个子块的线性排序后的多个纹理像素写入该子块对应的目的地址。
本公开中,通过搬运装置在搬运纹理数据的同时,在搬运装置内通过对子块的纹理像素进行线性排序,从而实现纹理数据的格式转换,能有效提升纹理数据的转换效率,并提升纹理数据的搬运速率,进而帮助提高纹理数据的加载效率。
在一些具体实施方式中,存储单元包括二维存储阵列和线性存储单元,二维存储阵列用于存储读取回的纹理块,线性存储单元用于存储线性排序后的多个纹理像素。
在一些具体实施方式中,扭序格式具有多种扭转单位,多种扭转单位具有不同的大小,小的扭转单位被包含在大的扭转单位之内;第一扭转单位和第二扭转单位均是多种扭转单位中的一种。
在一些具体实施方式中,第二扭转单位是多种扭转单位中的最小扭转单位。
在一些具体实施方式中,在第二扭转单位不是最小扭转单位的情况下,在控制写端口,将每个子块的线性排序后的多个纹理像素写入该子块对应的目的地址之前,控制器还用于:按照预设交换方式,对多个目标纹理像素进行位置交换;多个目标纹理像素是线性排序后的多个纹理像素中的一部分纹理像素;
控制器在控制写端口,将每个子块的线性排序后的多个纹理像素写入该子块对应的目的地址时,具体用于:控制写端口,将线性排序后且交换位置后的多个纹理像素写入相应子块对应的目的地址。
在一些具体实施方式中,控制器还用于:
接收处理器发送的指示信息;
根据指示信息,确定以下多种参数和/或方式中的至少一种:纹理块的高度、纹理块的宽度、对纹理像素进行线性排序的方式、目标纹理像素在线性排序结果中的位置、目标纹理像素之间的预设交换方式。
在一些具体实施方式中,控制器还用于:计算每个子块对应的目的地址。
在一些具体实施方式中,控制器在计算每个子块对应的目的地址时,具体用于:
根据每个子块的第一个纹理像素在待搬运的纹理数据中的坐标,计算第一个纹理像素的地址偏移量;
根据地址偏移量和每个纹理像素的位宽,计算该子块的目的地址。
在一些具体实施方式中,控制器在根据每个子块的第一个纹理像素在待搬运的纹理数据中的坐标,计算第一个纹理像素的地址偏移量时,具体用于:
将坐标的每个坐标分量分别处理成一个二进制数;每个二进制数的位宽等于相应坐标分量对应的预设位宽,每个坐标分量对应的预设位宽与该坐标分量所在维度所包括的纹理像素个数相关;
按照从低位到高位的顺序,对多个坐标分量的二进制数进行间插,并将间插结果作为地址偏移量。
在一些具体实施方式中,待搬运的纹理数据被划分为从小到大的多种数据单位,小的数据单位被包含在大的数据单位之内;
存储单元还用于记录每种数据单位的起始地址;
控制器还用于:当目标数据单位对应的纹理像素全部被读取后,根据目标数据单位当前的起始地址,以及目标数据单位对应的起始地址差值,针对不大于目标数据单位的每种数据单位的起始地址进行更新;其中,目标数据单位是多种数据单位中的一种数据单位,目标数据单位对应的起始地址差值是两个相邻的目标数据单位的两个起始地址之间的差值。
在一些具体实施方式中,控制器在控制读端口从待搬运的纹理数据中读取纹理块时,具体用于:
根据最小数据单位的起始地址和最小数据单位包括的纹理像素个数,从待搬运的纹理数据中读取纹理像素;纹理块的规格与多种数据单位中的一种数据单位的规格相等。
在一些具体实施方式中,纹理块的宽度等于第一扭转单位的宽度的整数倍。
在一些具体实施方式中,待搬运的纹理数据是二维纹理图像或三维纹理图像。
在一些具体实施方式中,搬运装置是用于搬运纹理数据的DMA,搬运装置中的控制器是DMA控制器,英文简称为DMAC。
本公开实施例还提供一种电子组件,该电子组件包括上述任一实施例中所述的纹理数据搬运装置。在一些使用场景下,该电子组件的产品形式体现为显卡;在另一些使用场景下,该电子组件的产品形式体现为CPU主板。
本公开实施例还提供一种电子设备,该电子设备包括上述的电子组件。在一些使用场景下,该电子设备的产品形式是便携式电子设备,例如智能手机、平板电脑、VR设备等;在一些使用场景下,该电子设备的产品形式是个人电脑、游戏主机、工作站、服务器等。
尽管已描述了本公开的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本公开范围的所有变更和修改。
显然,本领域的技术人员可以对本公开进行各种改动和变型而不脱离本公开的精神和范围。这样,倘若本公开的这些修改和变型属于本公开权利要求及其等同技术的范围之内,则本公开也意图包含这些改动和变型在内。
Claims (28)
1.一种纹理数据搬运方法,应用于搬运装置,所述方法包括:
从待搬运的纹理数据中读取纹理块,并将所述纹理块存储至所述搬运装置的存储单元;所述待搬运的纹理数据是线性格式的纹理数据;所述纹理块的高度等于扭序格式的第一扭转单位的高度的整数倍,所述纹理块包括一个或多个子块,每个子块是由扭序格式下地址连续的多个纹理像素所组成的;
针对每个子块,按照该子块中的第二扭转单位的顺序,对每个第二扭转单位对应的纹理像素逐行或逐列地进行线性排序;
将每个子块的线性排序后的多个纹理像素写入该子块对应的目的地址。
2.根据权利要求1所述的方法,所述扭序格式具有多种扭转单位,多种扭转单位具有不同的大小,小的扭转单位被包含在大的扭转单位之内;所述第一扭转单位和所述第二扭转单位均是所述多种扭转单位中的一种。
3.根据权利要求2所述的方法,所述第二扭转单位是所述多种扭转单位中的最小扭转单位。
4.根据权利要求2所述的方法,在所述第二扭转单位不是最小扭转单位的情况下,在将每个子块的线性排序后的多个纹理像素写入该子块对应的目的地址之前,所述方法还包括:
按照预设交换方式,对多个目标纹理像素进行位置交换;所述多个目标纹理像素是所述线性排序后的多个纹理像素中的一部分纹理像素;
所述将每个子块的线性排序后的多个纹理像素写入该子块对应的目的地址的步骤包括:
将线性排序后且交换位置后的多个纹理像素写入相应子块对应的目的地址。
5.根据权利要求4所述的方法,所述方法还包括:
接收处理器发送的指示信息;
根据所述指示信息,确定以下多种参数和/或方式中的至少一种:纹理块的高度、纹理块的宽度、对纹理像素进行线性排序的方式、所述目标纹理像素在线性排序结果中的位置、所述目标纹理像素之间的所述预设交换方式。
6.根据权利要求1所述的方法,所述方法还包括:
计算每个子块对应的目的地址。
7.根据权利要求6所述的方法,所述计算每个子块对应的目的地址的步骤包括:
根据每个子块的第一个纹理像素在所述待搬运的纹理数据中的坐标,计算第一个纹理像素的地址偏移量;
根据所述地址偏移量和每个纹理像素的位宽,计算该子块的目的地址。
8.根据权利要求7所述的方法,所述根据每个子块的第一个纹理像素在所述待搬运的纹理数据中的坐标,计算第一个纹理像素的地址偏移量的步骤包括:
将所述坐标的每个坐标分量分别处理成一个二进制数;每个二进制数的位宽等于相应坐标分量对应的预设位宽,每个坐标分量对应的预设位宽与该坐标分量所在维度所包括的纹理像素个数相关;
按照从低位到高位的顺序,对多个坐标分量的二进制数进行间插,并将间插结果作为地址偏移量。
9.根据权利要求1所述的方法,所述待搬运的纹理数据被划分为从小到大的多种数据单位,小的数据单位被包含在大的数据单位之内;所述方法还包括:
记录每种数据单位的起始地址;
当目标数据单位对应的纹理像素全部被读取后,根据所述目标数据单位当前的起始地址,以及所述目标数据单位对应的起始地址差值,针对不大于所述目标数据单位的每种数据单位的起始地址进行更新;其中,所述目标数据单位是所述多种数据单位中的一种数据单位,所述目标数据单位对应的起始地址差值是两个相邻的目标数据单位的两个起始地址之间的差值。
10.根据权利要求9所述的方法,所述从待搬运的纹理数据中读取纹理块的步骤包括:
根据最小数据单位的起始地址和所述最小数据单位包括的纹理像素个数,从所述待搬运的纹理数据中读取纹理像素;所述纹理块的规格与所述多种数据单位中的一种数据单位的规格相等。
11.根据权利要求1至10任一项所述的方法,所述纹理块的宽度等于所述第一扭转单位的宽度的整数倍。
12.根据权利要求1至10任一项所述的方法,所述待搬运的纹理数据是二维纹理图像或三维纹理图像。
13.根据权利要求1至10任一项所述的方法,所述搬运装置是用于搬运纹理数据的DMA。
14.一种纹理数据搬运装置,所述装置包括控制器、存储单元、读端口及写端口;
所述控制器用于控制所述读端口从待搬运的纹理数据中读取纹理块,并将所述纹理块存储至所述存储单元;所述待搬运的纹理数据是线性格式的纹理数据;所述纹理块的高度等于扭序格式的第一扭转单位的高度的整数倍,所述纹理块包括一个或多个子块,每个子块是由扭序格式下地址连续的多个纹理像素所组成的;
所述控制器还用于针对每个子块,按照该子块中的第二扭转单位的顺序,对每个第二扭转单位对应的纹理像素逐行或逐列地进行线性排序;
所述控制器还用于控制所述写端口,将每个子块的线性排序后的多个纹理像素写入该子块对应的目的地址。
15.根据权利要求14所述的装置,所述扭序格式具有多种扭转单位,多种扭转单位具有不同的大小,小的扭转单位被包含在大的扭转单位之内;所述第一扭转单位和所述第二扭转单位均是所述多种扭转单位中的一种。
16.根据权利要求15所述的装置,所述第二扭转单位是所述多种扭转单位中的最小扭转单位。
17.根据权利要求15所述的装置,在所述第二扭转单位不是最小扭转单位的情况下,在控制所述写端口,将每个子块的线性排序后的多个纹理像素写入该子块对应的目的地址之前,控制器还用于:按照预设交换方式,对多个目标纹理像素进行位置交换;所述多个目标纹理像素是所述线性排序后的多个纹理像素中的一部分纹理像素;
所述控制器在控制所述写端口,将每个子块的线性排序后的多个纹理像素写入该子块对应的目的地址时,具体用于:控制所述写端口,将线性排序后且交换位置后的多个纹理像素写入相应子块对应的目的地址。
18.根据权利要求17所述的装置,所述控制器还用于:
接收处理器发送的指示信息;
根据所述指示信息,确定以下多种参数和/或方式中的至少一种:纹理块的高度、纹理块的宽度、对纹理像素进行线性排序的方式、所述目标纹理像素在线性排序结果中的位置、所述目标纹理像素之间的所述预设交换方式。
19.根据权利要求14所述的装置,所述控制器还用于:计算每个子块对应的目的地址。
20.根据权利要求19所述的装置,所述控制器在计算每个子块对应的目的地址时,具体用于:
根据每个子块的第一个纹理像素在所述待搬运的纹理数据中的坐标,计算第一个纹理像素的地址偏移量;
根据所述地址偏移量和每个纹理像素的位宽,计算该子块的目的地址。
21.根据权利要求20所述的装置,所述控制器在根据每个子块的第一个纹理像素在所述待搬运的纹理数据中的坐标,计算第一个纹理像素的地址偏移量时,具体用于:
将所述坐标的每个坐标分量分别处理成一个二进制数;每个二进制数的位宽等于相应坐标分量对应的预设位宽,每个坐标分量对应的预设位宽与该坐标分量所在维度所包括的纹理像素个数相关;
按照从低位到高位的顺序,对多个坐标分量的二进制数进行间插,并将间插结果作为地址偏移量。
22.根据权利要求14所述的装置,所述待搬运的纹理数据被划分为从小到大的多种数据单位,小的数据单位被包含在大的数据单位之内;
所述存储单元还用于记录每种数据单位的起始地址;
所述控制器还用于:当目标数据单位对应的纹理像素全部被读取后,根据所述目标数据单位当前的起始地址,以及所述目标数据单位对应的起始地址差值,针对不大于所述目标数据单位的每种数据单位的起始地址进行更新;其中,所述目标数据单位是所述多种数据单位中的一种数据单位,所述目标数据单位对应的起始地址差值是两个相邻的目标数据单位的两个起始地址之间的差值。
23.根据权利要求22所述的装置,所述控制器在控制所述读端口从待搬运的纹理数据中读取纹理块时,具体用于:
根据最小数据单位的起始地址和所述最小数据单位包括的纹理像素个数,从所述待搬运的纹理数据中读取纹理像素;所述纹理块的规格与所述多种数据单位中的一种数据单位的规格相等。
24.根据权利要求14至23任一项所述的装置,所述纹理块的宽度等于所述第一扭转单位的宽度的整数倍。
25.根据权利要求14至23任一项所述的装置,所述待搬运的纹理数据是二维纹理图像或三维纹理图像。
26.根据权利要求14至23任一项所述的装置,所述搬运装置是用于搬运纹理数据的DMA。
27.一种电子组件,包括权利要求14至26任一项所述的装置。
28.一种电子设备,包括权利要求27所述的电子组件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310700053.3A CN116483285B (zh) | 2023-06-14 | 2023-06-14 | 纹理数据搬运方法、搬运装置、电子组件及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310700053.3A CN116483285B (zh) | 2023-06-14 | 2023-06-14 | 纹理数据搬运方法、搬运装置、电子组件及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116483285A CN116483285A (zh) | 2023-07-25 |
CN116483285B true CN116483285B (zh) | 2023-11-17 |
Family
ID=87227146
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310700053.3A Active CN116483285B (zh) | 2023-06-14 | 2023-06-14 | 纹理数据搬运方法、搬运装置、电子组件及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116483285B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102113305A (zh) * | 2008-06-05 | 2011-06-29 | 微软公司 | 高动态范围纹理压缩 |
CN104519353A (zh) * | 2013-09-29 | 2015-04-15 | 联想(北京)有限公司 | 图像处理方法和电子设备 |
CN113473123A (zh) * | 2020-03-30 | 2021-10-01 | 畅想科技有限公司 | 用于对图像数据进行解压缩的方法和解压缩单元 |
CN115294230A (zh) * | 2022-08-19 | 2022-11-04 | 智绘微电子科技(南京)有限公司 | 一种二维纹理贴图的操作方法 |
CN115794666A (zh) * | 2023-01-31 | 2023-03-14 | 摩尔线程智能科技(北京)有限责任公司 | 纹素的内存地址确定方法、装置、设备及存储介质 |
CN115880414A (zh) * | 2021-08-06 | 2023-03-31 | 想象技术有限公司 | 纹理地址产生 |
CN116166583A (zh) * | 2023-04-26 | 2023-05-26 | 太初(无锡)电子科技有限公司 | 一种数据精度的转换方法、装置、dma控制器及介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8238437B2 (en) * | 2007-09-20 | 2012-08-07 | Canon Kabushiki Kaisha | Image encoding apparatus, image decoding apparatus, and control method therefor |
-
2023
- 2023-06-14 CN CN202310700053.3A patent/CN116483285B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102113305A (zh) * | 2008-06-05 | 2011-06-29 | 微软公司 | 高动态范围纹理压缩 |
CN104519353A (zh) * | 2013-09-29 | 2015-04-15 | 联想(北京)有限公司 | 图像处理方法和电子设备 |
CN113473123A (zh) * | 2020-03-30 | 2021-10-01 | 畅想科技有限公司 | 用于对图像数据进行解压缩的方法和解压缩单元 |
CN115880414A (zh) * | 2021-08-06 | 2023-03-31 | 想象技术有限公司 | 纹理地址产生 |
CN115294230A (zh) * | 2022-08-19 | 2022-11-04 | 智绘微电子科技(南京)有限公司 | 一种二维纹理贴图的操作方法 |
CN115794666A (zh) * | 2023-01-31 | 2023-03-14 | 摩尔线程智能科技(北京)有限责任公司 | 纹素的内存地址确定方法、装置、设备及存储介质 |
CN116166583A (zh) * | 2023-04-26 | 2023-05-26 | 太初(无锡)电子科技有限公司 | 一种数据精度的转换方法、装置、dma控制器及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN116483285A (zh) | 2023-07-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102750664B (zh) | 基于寄存器的对纹理请求的排队 | |
CN107392309A (zh) | 一种基于fpga的通用定点数神经网络卷积加速器硬件结构 | |
CN108681984A (zh) | 一种3*3卷积算法的加速电路 | |
CN111242277A (zh) | 一种基于fpga设计的支持稀疏剪枝的卷积神经网络加速器 | |
CN116541647A (zh) | 运算加速器、处理方法及相关设备 | |
CN107748723B (zh) | 支持无冲突跨步按块访问的存储方法及访存装置 | |
CN110163338B (zh) | 具有运算阵列的芯片运算方法、装置、终端及芯片 | |
CN108022269A (zh) | 一种GPU压缩纹理存储Cache的建模结构 | |
CN109840585B (zh) | 一种面向稀疏二维卷积的运算方法和系统 | |
EP2618301B1 (en) | 3D rendering engine with embedded memory | |
CN110807170A (zh) | 多样本多通道卷积神经网络Same卷积向量化实现方法 | |
CN113762493A (zh) | 神经网络模型的压缩方法、装置、加速单元和计算系统 | |
CN116483285B (zh) | 纹理数据搬运方法、搬运装置、电子组件及电子设备 | |
CN112988621A (zh) | 一种张量数据的数据载入装置及方法 | |
CN1105358C (zh) | 具有运算功能的半导体存储器及使用该存储器的处理器 | |
US8539207B1 (en) | Lattice-based computations on a parallel processor | |
CN116051345A (zh) | 图像数据处理方法、装置、计算机设备及可读存储介质 | |
CN111078589B (zh) | 一种应用于深度学习计算的数据读取系统、方法及芯片 | |
CN110322389A (zh) | 池化方法、装置及系统、计算机可读存储介质 | |
CN108460784A (zh) | 一种基于fpga的灰度及二值图像膨胀腐蚀处理方法 | |
CN116433464B (zh) | 存储地址偏移量计算装置、方法、电子组件及电子设备 | |
CN111767246A (zh) | 数据处理方法、相关设备及计算机可读介质 | |
JP2001051668A (ja) | 画像処理装置 | |
CN114281554B (zh) | 用于3d图像处理的3d-cnn加速方法及装置、电子设备 | |
JP5310079B2 (ja) | 画像描画装置 |
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 |