图元预处理和处理方法、图形处理方法及其处理器、装置技术领域
本发明涉及图形处理,特别涉及一种图元预处理方法及处理方法、一种
图形处理以及一种图元预处理器及处理器、一种图形处理装置。
背景技术
现在的用户对计算机应用程序的视觉效果要求越来越高,尤其是游戏类
应用程序,常需要描绘复杂且精美的图形,仅一个场景往往就涉及大量的图
形。这势必带来大量不间断的图形运算,相应地,对图形处理芯片的运算能
力也要求越来越高。
现有技术中使用图元作为图形绘制的基本单位。每个图元包含一个或多
个顶点。比如:一个点的图元就是一个顶点,一条线段的图元包含两个顶点,
一个三角形的图元包含三个顶点,一个四边形的图元包含四个顶点,以此类
推。图元可由绘图应用接口(Application Programming Interface,API)
标准定义。常用的绘图应用接口有开放式绘图函数库(Open Graphics
Library,OpenGL)、Direct 3D(D3D)等。OpenGL是一个跨编程语言、跨平
台的编程接口,可独立于窗口系统和操作系统开发二维/三维的计算机绘图应
用程序,以它为基础开发的应用程序可以十分方便地在各种平台间移植。D3D
是微软公司的标准,可与不同的微软系统配合进行二维/三维的图形处理。
任意一个复杂的图形都能被拆分成多个相对简单的图元。比如:一个人
的图形可以被拆成一个圆形代表头,一个大矩形代表躯干,四个小矩形代表
四肢,其中圆形又是由无数个三角形图元组合而成的。为了方便绘制,会把
一个复杂的图形尽量拆分成简单图元,比如:三角形、四边形等。
绘制一个图形,就是把组成该图形的各个图元绘制出来。这些图元的信
息存储在内存(例如,DDR类型的内存)中。这些图元信息首先包括一张含全
部顶点的索引表,该索引表给出各顶点对应数据的实际物理存储地址。其次
包括各顶点的数据,另外还会给出图元信息表,表明每个图元是由哪几个顶
点组成的。绘制图元的过程就是根据组成该图元的顶点索引信息,按其实际
物理存储地址,到内存中读取相应的顶点数据进行图形绘制。由于内存读取
速度的局限性,现有的3D图形芯片设计中,均采用顶点高速缓存的方式读取
顶点数据,此技术被广泛应用。该技术把最近使用的顶点数据存放在一个高
速缓冲存储器(Cache)中。高速缓冲存储器容量比内存小得多,仅能存储有
限的数据,但其读取速度也同样比内存迅速许多,常用于存储在下一步很可
能为处理器所用的数据。基于图形程序中顶点的空间局部性和时间局部性原
理,读取前后的两个图元常会有共用的顶点,将这样的顶点加入高速缓存中,
能加快下次读取相同顶点数据的时间。
由于高速缓存的容量有限,无法存储所有的顶点数据,在高速缓存已满
时,需按一定策略进行数据替换。所以,需要设置标示(Tag),以表明该顶
点是否在高速缓存中。每当读取一个新的图元,需要把图元所属的顶点索引
与高速缓存中的标示(Tag)做比较,如果相同则表示命中,该顶点数据在高
速缓存中,可直接读取高速缓存。否则表示缺失,需要从片外的内存中取进
缺失的顶点,替换掉高速缓存中的顶点,之后再读取高速缓存。
比如某内存的容量可存储1024个顶点的数据,则每个顶点需要用10个比
特表示(因210=1024)。高速缓存的容量可存储8个顶点的数据,则每个顶点
仅需要用3个比特即可表示(因23=8),通常是用最低的3位表示。即:顶点0
在内存中表示为0000000000,在高速缓存中表示为最低的3位000。顶点1在内
存中表示为0000000001,在高速缓存中表示为001。顶点7在内存中表示为
0000000111,在高速缓存中表示为111。问题是,顶点8在内存中表示为
0000001000,而在高速缓存中用最低的3位表示也同样为000。此时,将无法
区分该顶点到底是表示顶点0,还是顶点8。所以,需要为各顶点设置标示
(Tag),用来保存各顶点的高位。即顶点0的Tag为0000000,而顶点8的Tag
为0000001。通过比较Tag值,能确定某顶点是否已在高速缓存中。所以高速
缓存中除了要保存顶点数据外,还要保存顶点的标示(Tag),占用高速缓存
的存储空间,同时还要增加大量控制逻辑,增加了芯片设计复杂度、芯片面
积和芯片功耗。
发明内容
本发明所要解决的技术问题是无需设置高速缓存中的标示,就可实现绘
制图形,节省图形处理芯片的面积,并降低图形处理芯片的设计复杂度和功
耗。
为了解决上述问题,本发明提供了一种图元预处理方法,包括:
模拟该图元的实际输出过程,以获得实际输出该图元时高速缓存中顶点
和该图元各顶点进入高速缓存的先后顺序;
根据所述实际输出该图元时高速缓存中顶点,获得该图元各顶点在高速
缓存中的索引值;所述高速缓存中的索引值与所述高速缓存中顶点之间存在
一一对应关系;
按照所述该图元各顶点进入高速缓存的先后顺序,将该图元的各顶点进
行重排序,获得顶点索引序列表;所述顶点索引序列表存储各顶点数据的索
引,根据所述索引可得到该顶点数据的实际物理地址,获取该顶点的数据;
基于实际输出该图元时高速缓存中的顶点和下一图元的顶点,给出该图
元的需替换顶点数量n,n为自然数。
可选的,所述的重排序包括:
取该图元的任一顶点为当前顶点;
重复以下步骤,直至该图元各顶点均被处理:
若顶点索引序列表中的顶点数量小于高速缓存可容纳的顶点数量,则将
其加入顶点索引序列表;
否则,若当前顶点不在实际输出该图元的上一图元时的高速缓存中,将
其加入顶点索引序列表;
若加入当前顶点后的顶点索引序列表中的顶点数量大于或等于高速缓存
可容纳的顶点数量,则判断实际进行顶点替换时最早存储进高速缓存的顶点
是否为该图元的顶点;若是,则将最早存储进高速缓存中的顶点加入顶点索
引序列表,将次早存储进高速缓存中的顶点调整为最早存储进高速缓存中的
顶点;重复本步骤直至实际进行顶点替换时最早存储进高速缓存的顶点不是
该图元的顶点为止。
将该图元的下一顶点调整为当前顶点。
可选的,所述的加入顶点索引序列表至少包括:
当顶点索引序列表为空时,该顶点为所述顶点索引序列表的首个顶点;
当顶点索引序列表不为空时,将该顶点加到所述顶点索引序列表的末尾。
可选的,所述的给出该图元的需替换顶点数量n至少包括:
该图元的需替换顶点数量n设为初始值;
当该图元各顶点重排序后获得的顶点索引序列表中的顶点数量大于或等
于高速缓存可容纳的顶点数量时,取下一图元的任一顶点为当前顶点,重复
以下步骤,直至按图元读取顺序的下一图元的各顶点均被处理,获得该图元
的需替换顶点数量:
若当前顶点不在实际输出该图元时的高速缓存中,则该图元的需替换顶
点数量n加1;
加1之后,判断实际进行顶点替换时最早存储进高速缓存的顶点是否是
下一图元的顶点;若是,则该图元的需替换顶点数量n加1,将次早存储进高
速缓存中的顶点调整为最早存储进高速缓存中的顶点;重复本步骤直至实际
进行顶点替换时最早存储进高速缓存的顶点不是下一图元的顶点为止;
将下一图元的下一顶点调整为当前顶点。
可选的,用所述预处理方法对需绘制的图元串中的每一个图元进行预处
理。
本发明还提供了一种图元处理方法,包括:根据该图元各顶点在高速缓
存中的索引值,从高速缓存中获取各顶点数据,输出该图元;当该图元的需
替换顶点数量n不为初始值时,用顶点索引序列表中的n个顶点,替换高速
缓存中的n个顶点。
可选的,当该图元是首图元时,在所述的输出该图元及所述的替换高速
缓存中的n个顶点之前,还包括:从顶点索引序列表的首个顶点开始,逐个
按照顶点的索引获取顶点的数据,并存储到高速缓存中,直至高速缓存存满;
将顶点索引序列表中还未读取的首个顶点调整为当前顶点。
可选的,所述的用顶点索引序列表中的n个顶点,替换高速缓存中的n
个顶点至少包括:
从所述的顶点索引序列表中的当前顶点开始,逐个读取n个顶点,并用
该n个顶点的数据,替换最早存储进高速缓存的n个顶点的数据,调整最早
存储进高速缓存的顶点;
将所述的顶点索引序列表中还未读取的首个顶点调整为当前顶点。
可选的,将所述的高速缓存划分为预留空间和输出空间,预留空间存储
替换所需的顶点数据,输出空间存储输出图元所需的顶点数据;
在输出图元的同时,并行地从顶点索引序列表中预读取替换所需的顶点
数据,存储在该预留空间中;
替换时,从该预留空间中读取顶点数据,替换高速缓存中输出空间的顶
点数据。
本发明还提供了一种图形处理方法,包括:按照所述图元串中各图元顺
序,用所述任一种图元处理方法依次对该图元串中的每个图元进行处理。
可选的,当所述的绘制为首次绘制时,在用所述任一种图元处理方法依
次对该图元串中的每个图元进行处理之前,还包括:用所述任一种的图元预
处理方法对该图元串中的每个图元进行预处理,以获得每个图元各顶点在高
速缓存中的索引值、顶点索引序列表以及每个图元的需替换顶点数量n。
本发明还提供了一种图元预处理器,包括:
模拟单元,用于模拟该图元的实际输出过程,以获得实际输出该图元时
高速缓存中顶点和该图元各顶点进入高速缓存的先后顺序;
索引值单元,用于根据所述实际输出该图元时高速缓存中顶点,获得该
图元各顶点在高速缓存中的索引值;
重排序单元,用于按照所述该图元各顶点进入高速缓存的先后顺序,将
该图元的各顶点进行重排序,获得顶点索引序列表;
顶点数量单元,用于基于实际输出该图元时高速缓存中的顶点和下一图
元的顶点,给出该图元的需替换顶点数量n。
本发明还提供了一种图元处理器,包括:
首图元设置单元,用于从顶点索引序列表的首个顶点开始,逐个按照顶
点的索引获取顶点的数据,并存储到高速缓存中,直至高速缓存存满,再将
顶点索引序列表中还未读取的首个顶点调整为当前顶点;
输出单元,用于根据该图元各顶点在高速缓存中的索引值,从高速缓存
中读取各顶点数据,输出该图元。
替换单元,用于当该图元的需替换顶点数量n不为0时,用顶点索引序
列表的n个顶点数据,替换高速缓存中的n个顶点数据。
可选的,还包括:预读取单元,用于在输出图元的同时,并行地从顶点
索引序列表中预读取替换所需的顶点数据。
本发明还提供了一种图形处理装置,包括:接收单元,用于接收需绘制
的图元串的图元信息,包括:顶点数据及图元信息表,所述图元信息表包含
构成每个图元的顶点索引;所述图元信息存储于内存中;
所述的图元预处理器,用于对所述图元串中各图元进行预处理;
所述的图元处理器,用于实现所述图元串中各图元的绘制。
本发明与现有技术相比,其优点在于:
1、由于事先知道各图元的绘制顺序,可事先计算需要替换的顶点数量,
通过将需要替换的顶点按照其被替换进高速缓存的前后次序排序,替换时总
是从该序列的当前位置读取顶点,按一定的替换策略,替换高速缓存中的顶
点,省去了传统高速缓存的标示(Tag),节省了芯片面积。
2、由于省去了标示,也就无需在替换时比较标示位,因此节约了大量控
制逻辑,降低了芯片的设计复杂度,同时降低了芯片的功耗。
附图说明
图1是本发明的运行环境示意图;
图2是本发明的图元预处理方法的一种具体实施方式的流程图;
图3是本发明的图元预处理方法中重排序步骤的一种具体实施方式的流
程图;
图4是本发明的图元预处理方法中给出需替换顶点数量步骤的一种具体
实施方式的流程图;
图5是本发明的图元处理方法的一种具体实施方式的流程图;
图6是本发明的图形处理方法的一种具体实施方式的流程图;
图7是使用本发明的图形处理方法的一实施例需绘制的图形示意图;
图8是本发明的图元预处理器的一种具体实施方式的结构示意图;
图9是本发明的图元处理器的一种具体实施方式的结构示意图;
图10是本发明的图形处理装置的一种具体实施方式的结构示意图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本发明。但是本发
明能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不
违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施
的限制。
正如前文所述,由于高速缓存的容量有限,无法存储所有的顶点数据,
所以在高速缓存已满时,需按一定策略进行数据替换。鉴于现有技术能提供
的高速缓存容量暂时还无法满足图形绘制的需要,所以这种顶点数据的替换
在图形处理中仍不可避免。
现有技术中之所以需要使用标示(tag)动态地管理顶点数据,是因为图
形芯片事先不了解顶点数据流具体顺序,即图形芯片不知道这些图元的先后
绘制顺序。但如果事先已能确定所需绘制的图元串中各图元的先后顺序,即
可预知顶点数据流的顺序,可预知顶点数据的行为,也就无需再如此复杂地
动态管理顶点数据了。而在现实中,事先确定需绘制图元串的情况是很寻常
的。一个场景中的一串图元经常会被图形芯片反复绘制,比如制作动画时,
每一帧的图形一模一样,区别仅仅是所在位置的改变。该串顶点数据流会被
图形芯片反复地读取,图元在反复绘制中不会变化,顶点数据流的顺序也不
会变化,顶点数据的行为是可以预知的。
本发明正是利用了确定的图元绘制顺序,通过本发明的预处理方法,事
先计算出需要替换的顶点数量,并将这些替换所需的顶点按照进入高速缓存
的前后次序排序。替换时,利用本发明的处理方法,总是从该序列的当前位
置读取顶点,按即定的替换策略,替换高速缓存中的顶点,无需再设置传统
的高速缓存标示位(Tag),节省了芯片面积,同时降低了图形处理芯片的设
计复杂度和功耗。
如前文所述的,在绘制复杂图形时,会尽量将图形拆分成顶点数少的图
元以方便绘制,比如:三角形、四边形。因此在绘制复杂图形时,涉及单个
图元的最大顶点数一般都不会很大。目前高速缓存能容纳的顶点数一般都远
大于单个图元的最大顶点数。也就是说,不会发生这种情况,即某图元的最
大顶点数大于高速缓存能容纳的顶点数,即便高速缓存都已存满,该图元还
有顶点还未被读入高速缓存,无法输出。一旦出现上述情况,无论现有技术
的处理方法或本方法,都将无法实现。
首先对本发明所涉及的一些术语进行解释。
高速缓存:是介于中央处理器和主存储器之间的高速小容量存储器。至
少包括:Cache存储体、地址转换部件及替换部件。该Cache存储体存放由主
存调入的指令与数据块。该地址转换部件建立目录表以实现主存地址到缓存
地址的转换。该替换部件在缓存已满时按一定策略进行数据块替换,并修改
地址转换部件。所建立的目录表中包含高速缓存中的索引值,根据该高速缓
存中的索引值,可在高速缓存中找到数据实际存储位置。
替换策略:当处理器所需的数据不在高速存储器中,而此时高速存储器中
又没有空的位置时,便淘汰高速缓存中的某些数据以腾出位置存放新调入的
数据,这称为替换。确定替换的规则叫替换策略,常用的替换策略有:最近最
少使用法(LRU)、先进先出法(FIFO)和随机法(RAND)等。
顶点数据:至少包括顶点索引,及具体的数据值。根据顶点索引,可以
找到该顶点数据实际存放的物理地址,以读取具体的数据值。该顶点索引所
占存储空间很少。该具体的数据值所占存储空间,根据数据包含属性的多少
有所出入,但相较顶点索引都大得多,可包括多种属性及数值,在读取时可
选择性读取。
图元信息:至少包括该图元是由哪些顶点构成的,及该些顶点的顶点索
引。根据该些顶点的顶点索引,可在必要时读取顶点数据。
为了实现上述目的,本发明提供了一种图元预处理方法、一种图元处理
方法以及一种图形处理方法。
图1所示的是本发明的运行环境示意图。如图1所示,中央处理器(CPU)
先从高速缓存中(Cache)读取所需数据。只有当所需数据不在高速缓存中时,
才到主存(内存)中将所需数据调到高速缓存中,再从高速缓存中读取。本
发明对中央处理机处理能力的要求,根据所处理图形复杂程度不同而不同,
所以在此不做具体限定。但至少要求运行环境能提供一定容量的高速缓存,
以及远大于高速缓存容量的内存。该高速缓存的容量应至少大于所绘制的图
元串中单个图元的最大顶点数,以满足输出单个图元的需要。该内存除了可
以存储所有的顶点数据、图元信息之外,还需有足够的容量以存储本发明预
处理的结果信息,至少包括顶点索引序列表、每个图元各顶点在高速缓存中
的索引值以及每个图元需替换的顶点数量。
图2所示的是本发明的图元预处理方法的一种具体实施方式的流程图,至
少包括以下步骤:
执行步骤S201,模拟该图元的实际输出过程,以获得实际输出该图元时
高速缓存中顶点和该图元各顶点进入高速缓存的先后顺序。
执行步骤S202,获得该图元各顶点在高速缓存中的索引值;即,根据所
述实际输出该图元时高速缓存中顶点,获得该图元各顶点在高速缓存中的索
引值;所述高速缓存中的索引值与所述高速缓存中顶点之间存在一一对应关
系。由于已知各图元的绘制顺序,所以根据所选择的顶点替换策略及步骤S201
的模拟,可以预知到输出该图元时,高速缓存中还有哪些顶点。该图元所需
的顶点即便之前不在高速缓存中,也会在该图元的上一图元输出后被替换进
来,所以能保证此时该图元所需的顶点已经都在高速缓存中。本步骤需要给
出该图元中各顶点在高速缓存中的索引值,以便后续输出步骤能按照索引值
读取高速缓存中的顶点数据。
执行步骤S203,按照所述该图元各顶点进入高速缓存的先后顺序,将该
图元的各顶点进行重排序,获得顶点索引序列表;所述顶点索引序列表存储
各顶点数据的索引,根据所述索引可得到该顶点数据的实际物理地址,获取
该顶点的数据。由于预知各图元的绘制顺序,所以根据所选择的顶点替换策
略,可以预知顶点被替换进高速缓存的先后顺序。通过本步骤的重排序,在
后续的顶点替换步骤中,可以方便地从本步骤产生的顶点索引序列表中按序
读取需替换的顶点。需要说明的是,根据所选择的顶点替换策略的不同,本
步骤产生的顶点索引序列表亦会不同。
执行步骤S204,基于实际输出该图元时高速缓存中的顶点和下一图元的
顶点,给出该图元的需替换顶点数量n,n为自然数。该图元的需替换顶点数
量即下一图元的顶点有多少不在高速缓存中,需要在后续替换步骤中被替换
进来。需要说明的是,根据所选择的顶点替换策略的不同,本步骤产生的高
速缓存中需要替换的顶点数量亦会不同。
需要说明的是,图2中各步骤产生的处理结果,均存储于内存中。在后
续步骤中若需要使用这些处理结果时,再从内存中读取,而不占用高速缓存
空间。
需要说明的是,虽然本具体实施方式中,预处理是按步骤S202获得该图
元各顶点在高速缓存中的索引值、S203重排序、S204给出该图元的需替换顶
点数量进行的,但实际上步骤S202、S203和S204的先后顺序并无关紧要,只
需要在实际输出该图元前完成上述这些步骤即可。
图3是本发明的图元预处理方法中重排序步骤的一种具体实施方式的流
程图。结合图3,具体说明图2中的重排序步骤S203。
执行步骤S301,取该图元的任一顶点为当前顶点;
执行步骤S302,判断当前顶点是否已处理?若是,则当前图元的各顶点
重排序已完成。
若否,则表明该图元还有顶点未被处理。
执行步骤S303,判断顶点索引序列表中的顶点数量是否小于或等于高速
缓存可容纳的顶点数量。若是,则执行S304a,判断当前顶点是否在顶点索引
序列表中。若是,则执行步骤S312,将该图元的下一顶点调整为当前顶点,
然后从步骤S302开始循环,继续处理该图元的下一顶点。若否,则执行步骤
S305。
若顶点索引序列表中的顶点数量大于高速缓存可容纳的顶点数量,则执
行步骤S304b,判断当前顶点是否在实际输出该图元的上一图元时的高速缓存
中?若是,则执行步骤S312,将该图元的下一顶点调整为当前顶点,然后从
步骤S302开始循环,继续处理该图元的下一顶点。
若否,则表明当前顶点不在当时的高速缓存中,需要被后续替换进高速
缓存。执行步骤S305,判断顶点索引序列表是否为空?若是,则执行步骤S306,
当前顶点为顶点索引序列表的首个顶点。若否,则执行步骤S307,将当前顶
点加到顶点索引序列表的末尾,以更新顶点索引序列表。
执行步骤S308,判断加入当前顶点后的顶点索引序列表中的顶点数量是
否大于高速缓存可容纳的顶点数量?若否,则表明此时高速缓存中还有剩余
空间,当前顶点直接存入即可,无需进行替换。执行步骤S312,将该图元的
下一顶点调整为当前顶点,从步骤S302开始循环,继续处理该图元的下一顶
点。
若是,则表明高速缓存中需要进行替换。执行步骤S309,判断实际进行
顶点数据替换时最早存储进高速缓存中的顶点是否是该图元的顶点?鉴于此
具体实施方式采用的替换策略是,在高速缓存已满时,总是将最早存入高速
缓存中的那个顶点替换掉。所以此处需要判断该被替换掉的顶点是否也是该
图元的顶点,若是,则该顶点是该图元的顶点,需要将该顶点在被替换后再
次存入高速缓存中。执行步骤S310,将最早存储进高速缓存中的顶点加到顶
点索引序列表的末尾。执行步骤S311,将次早存储进高速缓存中的顶点调整
为最早存储进高速缓存中的顶点。
若否,则该顶点不是该图元的顶点,不用再考虑后续再次存储进高速缓
存的问题。执行步骤S312,将该图元的下一顶点调整为当前顶点,从步骤S302
开始循环,继续处理该图元的下一顶点。
图4是本发明的图元预处理方法中给出需替换顶点数量步骤的一种具体
实施方式的流程图;结合图4,具体说明图2中步骤S204。
执行步骤S401,将该图元的需替换顶点数量n设为0,即先默认需替换的
顶点数量为0,在后续步骤中再确定需替换的顶点数量,改动该数值。
执行步骤S402,判断该图元各顶点重排序后获得的顶点索引序列表中的
顶点数量是否大于或等于高速缓存可容纳的顶点数量?若否,则表明此时高
速缓存中还有剩余空间,无需进行替换,需替换的顶点数量为0,无需改动。
若是,则表明高速缓存中都已放满,若再存入新数据,就必须进行替换。
执行步骤S403,取下一图元的任一顶点为当前顶点。执行步骤S404,判断当
前顶点是否已处理?若是,则该图元的高速缓存中需要替换的顶点数量已给
定。
若否,则执行步骤S405,判断当前顶点是否在实际输出该图元时的高速
缓存中?若是,表明无需替换,执行步骤S410,将下一图元的下一顶点调整
为当前顶点。从步骤S404开始循环,继续处理下一图元的下一顶点。
若否,表明该顶点需要进行替换,该图元的高速缓存中需要替换的顶点
数量n需要调整。执行步骤S406,该图元的需替换顶点数量n加1。
执行步骤S407,判断实际进行顶点数据替换时最早存储进高速缓存的顶
点是否是下一图元的顶点?鉴于此具体实施方式采用的替换策略是,在高速
缓存已满时,总是将最早存入高速缓存中的那个顶点替换掉。所以此处需要
判断该被替换掉的顶点是否也是下一图元的顶点。若否,则该顶点不需要被
再次替换进来,执行步骤S410,将下一图元的下一顶点调整为当前顶点。从
步骤S404开始循环,继续处理下一图元的下一顶点。
若是,则该顶点需要再次被替换进来,该图元的高速缓存中需要替换的
顶点数量n需要调整。即执行步骤S408,该图元的需替换顶点数量n加1。执行
步骤S409,将次早存储进高速缓存中的顶点调整为最早存储进高速缓存中的
顶点。从步骤S407开始循环,直至实际进行顶点数据替换时最早存储进高速
缓存的顶点不是下一图元的顶点为止。执行步骤S410,将下一图元的下一顶
点调整为当前顶点。从步骤S404开始循环,继续处理下一图元的下一顶点。
需要说明的是,根据不同的替换策略,图2步骤S203重排序所得的顶点索
引序列表不尽相同。相应的,图2步骤S204所得的该图元的需要替换顶点数量
n也会有所不同。本实施方式中采取的替换策略是:高速缓存已满时,总是将
最早存入高速缓存中的那个顶点替换掉,但不应理解为本方法可使用的替换
策略仅限于此。事实上,仅需按照替换策略,使重排序和给出该图元的需替
换顶点数量的方法相匹配,传统高速缓存的替换策略皆能应用本方法来实现,
比如:高速缓存已满时,总是将最后进入高速缓存中的那个顶点替换掉。或
者将高速缓存中相同最低位的那个顶点替换掉,即如前文所述的容量为8个顶
点的高速缓存,顶点8(最低位为000)进入高速缓存中时,替换掉顶点0(最
低位同样为000)。或者将高速缓存中的各顶点按使用频率排序,每次总是替
换掉最少使用的那个顶点。又或者任意提供一个哈希值,每隔哈希个顶点,
替换掉一个顶点,等等。
图5所示的是本发明的图元处理方法的一种具体实施方式的流程图,至少
包括以下步骤:
执行步骤S501,判断该图元是否为首图元?若否,则无需进行初始设置
的相关步骤,可直接开始输出该图元,从步骤S504开始继续执行。
若是,则需进行初始设置的相关步骤,执行步骤S502,从顶点索引序列
表的首个顶点开始,逐个读取顶点,按照顶点数据的索引获取顶点数据,并
存储到高速缓存中,直至高速缓存存满。执行步骤S503,将顶点索引序列表
中还未读取的首个顶点调整为当前顶点。
执行步骤S504,输出该图元,即根据该图元各顶点在高速缓存中的索引
值,从高速缓存中获取各顶点数据,输出该图元。该图元各顶点在高速缓存
中的索引值可通过之前的预处理给出,且在上一图元的替换步骤中已经将该
图元不在高速缓存中的顶点给替换了进来,保证了该图元输出时,所有的顶
点都已在高速缓存中,根据该图元各顶点在高速缓存中的索引值直接读取输
出即可。
输出后,执行步骤S505,判断该图元的需替换顶点数量n是否为0?若是,
则表明下一图元的各定点都已在高速缓存中,不需要替换。
若否,则表明下一图元中还有n个顶点不在高速缓存中,需要替换。执行
步骤S506,用顶点索引序列表中的n个顶点数据,替换高速缓存中的n个顶点
数据。具体地,从顶点索引序列表的当前顶点开始,逐个读取n个顶点,并用
该n个顶点的数据,替换最早存储进高速缓存的n个顶点的数据。顶点索引序
列表可通过预处理获得。预处理中已按顶点被替换入高速缓存的先后顺序进
行了重排序,所以此时顶点索引序列表中从当前位置开始的n个顶点即为下一
图元中不在高速缓存中的n个顶点,直接替换即可。替换完成后,将顶点索引
序列表中还未读取的首个顶点调整为当前顶点。
在可选方案中,还可以在高速缓存中划分为预留空间和输出空间,预留
空间存储替换所需的顶点数据,输出空间存储输出图元所需的顶点数据。比
如:容量为8个顶点的高速缓存,其中7个顶点作为输出空间,存储输出图
元所需的顶点,1个作为预留空间;或者6个顶点作为输出空间,存储输出图
元所需的顶点,2个作为预留空间。具体分配可根据实际需求,在高速缓存容
量允许的范围内,自主调配。在图形处理芯片输出图元的同时,可并行地从
顶点索引序列表中读取替换所需的顶点数据,存储在该预留空间中;替换时,
从该预留空间中读取顶点数据,替换高速缓存中输出空间的顶点数据。如此
并行操作,可进一步加快图形处理芯片的执行效率。
需要说明的是,由于当绘制的是一串图元时,输出图元和替换顶点数据
是一个循环往复的过程,所以其先后顺序并不重要。即可以是替换当前图元
的顶点数据,输出当前图元,如此往复。亦或者输出当前图元,替换下一图
元的顶点数据,如此往复。
图6是本发明的图形处理方法的一种具体实施方式的流程图,至少包括以
下步骤:
执行步骤S601,判断绘制该图元串是否为首次绘制?若否,则之前的绘
制中已经过预处理,且因为绘制的是同一串图元,再次预处理,结果和第一
串图元也是一样的。所以,可直接使用之前预处理的结果,从步骤S604开始
执行。
需要说明的是,出于统一处理考虑,再次绘制也并不禁止重复预处理的
步骤,仅仅是处理效率会相应有所降低。本发明的图形处理方法使用在重复
绘制同一串图元时,优势更为明显。
若是首次绘制,则执行步骤S602,判断该图元串中的每个图元是否都已
经过预处理?若是,则预处理完毕,执行步骤S604步骤;若否,则执行步骤
S603,用图元预处理方法对图元进行预处理。然后从步骤S602开始循环,直
至该图元串中的每个图元都已经过预处理。
执行步骤S604,判断该图元串中的每个图元是否都已经处理,即是否每
个图元都已经输出并为下一个图元的输出替换了顶点数据。若是,则本次绘
制图形结束。
若否,则执行步骤S605,用图元处理方法对图元进行处理,即输出图元
并为下一图元的输出替换顶点数据。然后从步骤S604开始循环,直至该图元
串中的每个图元都已经处理,绘制图形完毕。
需要说明的是,本领域技术人员可以理解,上述具体实施方式的图元预
处理方法、图元处理方法及图形处理方法的全部或部分可以通过程序来指令
相关的硬件完成,所述的程序可被固定于计算机可读存储介质中,所述存储
介质包括ROM、RAM、磁碟、光盘等。
下面通过一具体实施例,以更直观地理解本方法。图7是本实施例需绘制
的图形示意图。该图形已进行了图元拆分,被拆分成序号为①-⑨的9个图元,
每个图元均含3个顶点。图元信息由下面的图元信息表1给出:
图元序号
顶点索引
顶点索引
顶点索引
①
0
1
2
②
0
2
3
③
0
3
4
④
0
4
5
⑤
0
5
6
⑥
0
6
7
⑦
0
7
8
⑧
0
8
9
⑨
0
9
1
表1
本例中的高速缓存最多可容纳8个顶点的数据。
首先对该串图元进行预处理。
图元①为首个图元,模拟图元①实际输出时高速缓存中顶点的情况,因
为是首图元,所以此时的高速缓存中的顶点为输出时初始设置完的状态,即
高速缓存中有8个顶点,即0、1、2、3、4、5、6、7。给出该图元的各顶点
在高速缓存中的索引值为0、1、2。由于图元①为首图元,处理第一个顶点0
时,顶点索引序列表为空,所以顶点0为顶点索引序列表的首个顶点。处理
第二顶点1,此时顶点索引序列表中有1个顶点0,小于高速缓存可容纳的顶
点数8个,所以,将1加到0的后面,更新顶点索引序列表。处理第三个顶
点2,此时顶点索引序列表中有0、1两个顶点,仍小于高速缓存可容纳的顶
点数8个,将2加到1的后面,形成新的顶点索引序列表为:0、1、2。接着
将需替换的顶点数量n设为0。由于此时的索引序列表中的顶点数量为3,小
于高速缓存可容纳的8个顶点,所以高速缓存中仍有剩余空间,无需进行替
换,需替换的顶点数量n即为0。
接着处理图元②,由于上一图元①输出后无需进行顶点替换,所以此时
的高速缓存中仍是原来的8个顶点,即0、1、2、3、4、5、6、7。给出图元
②的各顶点在高速缓存中的索引值为0、2、3。此时顶点索引序列表中的顶点
数为3个,小于高速缓存可容纳的顶点数8个,且图元②有一顶点3不在顶
点索引序列表中,将3加到索引序列表中2的后面,形成新的顶点索引序列
表:0、1、2、3。接着将需替换的顶点数量n设为0。由于此时的索引序列表
中的顶点数量为4,小于高速缓存可容纳的8个顶点,所以高速缓存中仍有剩
余空间,无需进行替换,需替换的顶点数量n即为0。
对图元③、④、⑤图元进行类似的预处理,此处不再赘述。
之前各图元输出后均不需替换顶点数据,所以此时的高速缓存中仍是0、
1、2、3、4、5、6、7,8个顶点。给出图元⑥的各顶点在高速缓存中的索引
值为0、6、7。此时的顶点索引序列表有7个顶点,即0、1、2、3、4、5、6,
小于高速缓存可容纳的顶点数量8。图元⑥有一顶点7不在当前的顶点索引序
列表中,将7加到索引序列表的末尾,形成新的顶点索引序列表为:0、1、2、
3、4、5、6、7。接着将需替换的顶点数量设为0。此时的索引序列表中的顶
点数量为8,等于高速缓存可容纳8个顶点,需进行替换。下一图元⑦有3个
顶点0、7、8。其中0和7已经在实施输出图元⑥时的高速缓存中了,只有顶
点8不在高速缓存中,图元⑥的高速缓存中需替换的顶点数量n由0变1。此
时最早存储进高速缓存的顶点是顶点0,即顶点8进入高速缓存中时,替换掉
的是顶点0,而顶点0同样是下一图元⑦的顶点。因此,顶点0需要再次被替
换进来,即图元⑥的高速缓存中需替换的顶点数量n再加1,由1变为2。将
次早存储进高速缓存中的顶点1调整为最早存储进高速缓存中的顶点。再次
判断顶点1是否是下一图元⑦的顶点。顶点1不是下一图元⑦的顶点,至此,
获得图元⑥的高速缓存中需替换的顶点数量n为2。即实际输出图元⑥之后,
发生了2次顶点替换,第一次是顶点8替换了顶点0,第二次是顶点0替换了
顶点1。
此时高速缓存中的顶点为8、0、2、3、4、5、6、7。给出图元⑦各顶点
在高速缓存中的索引值设为1、7、0。此时的顶点索引序列表为、1、2、3、4、
5、6、7,正好等于高速缓存可容纳的顶点数。图元⑦有1个顶点8不在当前
的顶点索引序列表中,将顶点8加到索引序列表的末尾,形成新的顶点索引
序列表为:0、1、2、3、4、5、6、7、8,大于高速缓存可容纳的顶点数8。
此时需继续判断实际进行顶点数据替换时最早存储进高速缓存的顶点0是否
时图元⑦的顶点?顶点0是图元⑦的顶点,所以需要将顶点0加到顶点索引
序列表的末尾,形成新的顶点索引序列表为:0、1、2、3、4、5、6、7、8、
0。继续判断次早存储进高速缓存中的顶点1是否是图元⑦的顶点。顶点1不
是图元⑦的顶点,所以重排序完毕。接着将需替换的顶点数量设为0。下一图
元⑧有3个顶点:0、8、9。其中一个顶点9不在高速缓存中,图元⑦的高速
缓存中需替换的顶点数量n由0变1。此时高速缓存中的顶点为8、0、2、3、
4、5、6、7,最早存储进高速缓存的顶点是顶点2,即顶点9进入高速缓存中
时,替换掉的是顶点2,而顶点2不是下一图元⑧的顶点,所以需替换的顶点
数量无需改变,图元⑦的高速缓存中需替换的顶点数量n为1,即实际输出图
元⑦后需要进行一次顶点替换,即顶点9替换顶点2。
图元⑧、⑨也进行类似的预处理,此处不再赘述。
重排序后产生的顶点索引序列表为:0、1、2、3、4、5、6、7、8、0、9、
1。
经预处理后产生的结果及输出该图元时高速缓存中的顶点情况见表2:
表2
接着,开始实际输出图元。首次绘制时,必须进行初始设置,即从顶点
索引序列表的首个顶点0开始,将顶点数据逐个存储到高速缓存中,直至高
速缓存放满,此时高速缓存中的顶点数据为0、1、2、3、4、5、6、7。将顶
点索引序列表中的当前顶点设为第9个,即顶点8。
接着,对该串图元循环进行输出和顶点替换。
参见表2,输出图元①时,高速缓存中的顶点为0、1、2、3、4、5、6、
7。图元①的各顶点索引为0、1、2,对应高速缓存中第0位、第1位、第2
位的顶点数据,读取高速缓存中第0、1、2位的顶点数据0、1、2,输出图元
①。由于图元①的需替换的顶点数量n为0,无需替换顶点数据。
继续参见表2,输出图元②时,高速缓存中的顶点仍为0、1、2、3、4、
5、6、7。图元②的各顶点索引为0、2、3,对应高速缓存中第0位、第2位、
第3位的顶点数据,读取高速缓存中第0、2、3位的顶点数据0、2、3,输出
图元②。由于图元②的高速缓存中需替换的顶点数量n为0,无需替换顶点数
据。
继续参见表2,输出图元③时,高速缓存中的顶点仍为0、1、2、3、4、
5、6、7。图元③的各顶点索引为0、3、4,对应高速缓存中第0位、第3位、
第4位的顶点数据,读取高速缓存中第0、3、4位的顶点数据0、3、4,输出
图元③。由于图元③的高速缓存中需替换的顶点数量n为0,无需替换顶点数
据。
继续参见表2,输出图元④时,高速缓存中的顶点仍为0、1、2、3、4、
5、6、7。图元④的各顶点索引为0、4、5,对应高速缓存中第0位、第4位、
第5位的顶点数据,读取高速缓存中第0、4、5位的顶点数据0、4、5,输出
图元④。由于图元④的高速缓存中需替换的顶点数量n为0,无需替换顶点数
据。
继续参见表2,输出图元⑤时,高速缓存中的顶点仍为0、1、2、3、4、
5、6、7。图元⑤的各顶点索引为0、5、6,对应高速缓存中第0位、第5位、
第6位的顶点数据,读取高速缓存中第0、5、6位的顶点数据0、5、6,输出
图元⑤。由于图元⑤的高速缓存中需替换的顶点数量n为0,无需替换顶点数
据。
继续参见表2,输出图元⑥时,高速缓存中的顶点仍为0、1、2、3、4、
5、6、7。图元⑥的各顶点索引为0、6、7,对应高速缓存中第0位、第6位、
第7位的顶点数据,读取高速缓存中第0、6、7位的数据0、6、7,输出图元
⑥。图元⑥的高速缓存中需替换的顶点数量n为2,说明需要替换2个顶点。
先从顶点索引序列表的当前位置读取1个顶点,即顶点8,替换最早进入高速
缓存中的顶点,即顶点0。调整最早进入高速缓存中的顶点为顶点1,调整顶
点索引序列表的当前顶点为顶点0。继续从顶点索引序列表的当前位置读取1
个顶点,即顶点0,替换最早进入高速缓存中的顶点,即顶点1。调整最早进
入高速缓存中的顶点为顶点2,调整顶点索引序列表的当前顶点为顶点9。
继续参见表2,输出图元⑦时,原高速缓存中的顶点被替换掉了2个,现
在为8、0、2、3、4、5、6、7。图元⑦各顶点索引为1、7、0,对应高速缓
存中第1位、第7位、第0位的顶点数据,读取高速缓存中第1、7、0位的
数据0、7、8,输出图元⑦。图元⑦的高速缓存中需替换的顶点数量n为1,
说明需要替换1个顶点。从顶点索引序列表的当前位置读取1个顶点,即顶
点9,替换最早进入高速缓存中的顶点,即顶点2。调整最早进入高速缓存中
的顶点为顶点3,调整顶点索引序列表的当前顶点为顶点1。
继续参见表2,输出图元⑧时,原高速缓存中的顶点被替换掉了1个,现
在为8、0、9、3、4、5、6、7。图元⑧各顶点索引为1、0、2,对应高速缓
存中第1位、第0位、第2位的顶点数据,读取高速缓存中第1、0、2位的
数据0、8、9,输出图元⑧。图元⑧的高速缓存中需替换的顶点数量n为1,
说明需要替换1个顶点。从顶点索引序列表的当前位置读取1个顶点,即顶
点1,替换最早进入高速缓存中的顶点,即顶点3。调整最早进入高速缓存中
的顶点为顶点4。顶点1已为顶点索引序列表的末尾位置,没有还未读取的顶
点了,所以不再进行调整。
继续参见表2,输出图元⑨时,原高速缓存中的顶点被替换掉了1个,现
在为8、0、9、1、4、5、6、7。图元⑨各顶点索引为1、2、3,对应高速缓
存中第1位、第2位、第3位的顶点数据,读取高速缓存中第1、2、3位的
数据0、9、1,输出图元⑨。图元⑨的高速缓存中需替换的顶点数量n为0,
说明无需替换。
至此,按照各图元读取的顺序,该串图元的每个图元都已输出,绘制结
束。
本发明还提供了一种图元预处理器、一种图元处理器以及一种图形处理
装置。
图8是本发明的图元预处理器的一种具体实施方式的结构示意图。如图8
所示,图元预处理器U8包括模拟单元801、索引值单元802、重排序单元803以
及顶点数量单元804。模拟单元801根据图元信息、高速缓存、该图元的顶点
数据等信息模拟该图元的实际输出过程,将获得的实际输出该图元时高速缓
存中的顶点输入索引值单元802和顶点数量单元804,将获得的该图元各顶点
进入高速缓存的先后顺序输入重排序单元803。索引值单元802根据实际输出
该图元时高速缓存中顶点,获得该图元各顶点在高速缓存中的索引值,存储
于内存中。重排序单元803按照该图元各顶点进入高速缓存的先后顺序,将该
图元的各顶点进行重排序,获得顶点索引序列表,存储于内存中。顶点数量
单元804基于实际输出该图元时高速缓存中的顶点和输入的下一图元顶点,给
出该图元的需替换顶点数量n,存储于内存中。
图9是本发明的图元处理器的一种具体实施方式的结构示意图。如图9
所示,图元处理器U9包括首图元设置单元901、输出单元902、预读取单元
903及替换单元904。首图元设置单元901用于从顶点索引序列表的首个顶点
开始,逐个按照顶点的索引获取顶点的数据,存储到高速缓存中,直至高速
缓存存满,再将顶点索引序列表中还未读取的首个顶点调整为当前顶点。输
出单元902用于根据该图元各顶点在高速缓存中的索引值,从高速缓存中读
取各顶点数据,输出该图元。预读取单元903用于输出单元902输出图元的
同时,并行地从顶点索引序列表中预读取替换所需的顶点数据。替换单元904
用于当该图元的需替换顶点数量n不为0时,用顶点索引序列表的n个顶点
数据,替换高速缓存中的n个顶点数据。
图10是本发明的图形处理装置的一种具体实施方式的结构示意图。如图
10所示,图形处理装置U10包括接收单元101、图元预处理器U8和图元处理
器U9。接收单元101用于接收需绘制的图元串的图元信息,存储于内存(图
未示)。图元信息包括:顶点数据及图元信息表,图元信息表包含构成每个图
元的顶点索引。图元预处理器U8用于对图元串中各图元进行预处理。图元处
理器U9用于实现图元串中各图元的绘制。
本发明虽然已以较佳实施例公开如上,但其并不是用来限定本发明,任
何本领域技术人员在不脱离本发明的精神和范围内,都可以利用上述揭示的
方法和技术内容对本发明技术方案做出可能的变动和修改,因此,凡是未脱
离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何
简单修改、等同变化及修饰,均属于本发明技术方案的保护范围。