CN109741433B - 一种基于Tile的三角形多向并行扫描方法及结构 - Google Patents
一种基于Tile的三角形多向并行扫描方法及结构 Download PDFInfo
- Publication number
- CN109741433B CN109741433B CN201910014883.4A CN201910014883A CN109741433B CN 109741433 B CN109741433 B CN 109741433B CN 201910014883 A CN201910014883 A CN 201910014883A CN 109741433 B CN109741433 B CN 109741433B
- Authority
- CN
- China
- Prior art keywords
- triangle
- scanning
- half space
- block
- pixel
- 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 32
- 230000006870 function Effects 0.000 claims abstract description 39
- 238000012545 processing Methods 0.000 claims abstract description 16
- 238000004458 analytical method Methods 0.000 claims abstract description 10
- 238000012886 linear function Methods 0.000 claims abstract description 4
- 238000004364 calculation method Methods 0.000 claims description 11
- 238000004422 calculation algorithm Methods 0.000 abstract description 38
- 238000012360 testing method Methods 0.000 abstract description 7
- 238000009877 rendering Methods 0.000 description 10
- 238000010586 diagram Methods 0.000 description 9
- 238000013461 design Methods 0.000 description 4
- 230000002457 bidirectional effect Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 239000012634 fragment Substances 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 230000001154 acute effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002035 prolonged effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本发明提供一种基于Tile的三角形多向并行扫描方法及结构,方法包括:根据边界函数方程,通过三角形三条边的线性函数确定出属于三角形内的像素点;对三角形从上下左右四个方向同时进行遍历,选择2×2大小的像素块作为扫描像素块的尺寸,采用并行方式一次处理16个像素,通过边界函数算法判断出属于三角形内部的像素点,完成在Tile内对三角形内像素的遍历。经过对不同种类的三角形进行实验分析与性能对比,可以得出结论:该算法能够显著提高三角形的遍历速度,使得像素填充率最大可达到100%。对硬件电路进行FPGA测试,测试结果表明,该电路可以正确且高效地实现三角形遍历功能,适用于高性能的图形处理器。
Description
技术领域
本发明涉及硬件技术,特别是一种基于Tile的三角形多向并行扫描方法及结构。
背景技术
在图形应用快速发展的背景下,复杂的3D图形应用需求与日俱增,图形处理器(Graphic Processing Unit,GPU)作为显示系统的核心,以硬件加速的形式实现了3D图形的绘制,在计算机系统中的作用日益增高。光栅化是GPU的关键单元,是将几何图元转换为片段的重要过程,其扫描填充率的高低直接影响到GPU图形加速的性能。因此,如何设计合理的三角形光栅扫描方法,使得硬件电路设计简单,扫描填充速度快成为了研究的热点。
传统的光栅扫描方法会产生大量无关像素,现有技术中介绍一种的Zigzag扫描算法与一种中心线扫描算法都能够减少对大量多余像素的遍历,但是通过中心线算法在对三角形进行处理时,会出现中心线偏离三角形的情况,导致扫描行起始点在三角形外,从而增加无效像素的遍历。另外,现有技术中还提出一种中点遍历算法,该中点遍历算法将三角形以中间顶点划分为上下两部分,可以解决中心线扫描算法中心线偏离的情况。但是以上算法都只能从一个方向对三角形进行扫描,并行度低,当三角形面积过大时,扫描周期变长,填充效率较低。
现有技术还提出基于块的等半空间三角形光栅化,例如,将三角形通过包围盒平分线划分为上半空间和下半空间两部分,并且以像素块为单位同时从两个方向对三角形进行遍历,一次可以处理两个像素块,提高了扫描效率。但是该算法上半空间和下半空间的交汇点固定为三角形包围盒的平分线,当上半空间和下半空间像素分布相差比较大时,会出现其中一个半空间扫描结束,另一半空间仍有大部分像素还未扫描的情况,导致长时间的等待问题。因此,算法对三角形遍历也不能达到最佳效果。
为此,提供一种并行度高的显著提高三角形遍历速度的方法成为当前需要解决的问题。
发明内容
针对现有技术中的问题,本发明提供一种基于Tile的三角形多向并行扫描方法及结构。
第一方面,本发明提供一种基于Tile的三角形多向并行扫描结构,包括:
三角形设置模块、上半空间扫描模块、下半空间扫描模块和判断模块;
所述三角形设置模块和判断模块均连接上半空间扫描模块、下半空间扫描模块;
所述三角形设置模块用于获取三角形的边界方程系数、三角形的最大顶点、最小顶点;
所述三角形设置模块将获取的三角形的边界方程系数、三角形的最大顶点、最小顶点均发送所述上半空间扫描模块和下半空间扫描模块;
所述上半空间扫描模块根据所述三角形设置模块的输出数据对最小顶点起始的扫描行进行左右扫描,完成对三角形上半空间的遍历,输出三角形内有效像素点;
所述下半空间扫描模块根据所述三角形设置模块的输出数据对最大顶点起始的扫描行进行左右扫描,完成对三角形下半空间的遍历,输出三角形内有效像素点;
所述判断模块用于决定三角形的下一行水平扫描线是进行上半空间扫描还是下半空间扫描,或者停止扫描,并将判断结果送入对应的模块。
可选地,所述上半空间扫描模块和下半空间扫描模块的结构相同;
所述上半空间扫描模块包括:起始像素块边界函数计算模块和扫描模块;
所述扫描模块包括:左右并行扫描模块和下一像素块边界函数计算模块;
其中,所述起始像素块边界函数计算模块根据三角形设置模块的输出数据或扫描模块的输出数据计算出第一行或下一水平扫描行的起始像素块的边界函数值,并将计算的边界函数值输入扫描模块,以判定像素块相对于三角形的位置;
所述扫描模块的左右并行扫描模块对当前水平扫描行进行左右并行扫描;所述下一像素块边界函数计算模块根据边界方程计算出扫描像素块的边界函数值,完成对三角形上半空间和下半空间的遍历。
可选地,所述三角形的多向并行光栅扫描结构位于TBR架构或者TBDR架构的像素处理模块的光栅化单元中;
和/或,所述三角形的多向并行光栅扫描结构基于所述TBR架构或者TBDR架构内划分的Tile块在每个Tile块内进行像素分析处理的。
第二方面,本发明还提供一种基于Tile的三角形的多向并行扫描方法,包括:
S1、根据边界函数方程,通过三角形三条边的线性函数确定出属于三角形内的像素点;
S2、根据所述三角形的最大顶点和最小顶点开始,将三角形的扫描分为上半空间和下半空间,针对上半空间从上到下进行左右并行扫描,针对下半空间从下到上进行左右并行扫描,直到两个方向的扫描相遇时停止。
可选地,所述步骤S1包括:
将一整个屏幕划分成不同的块,每一个块是一个Tile,针对每一个Tile内像素的处理包括:
假定每一个Tile左上方为坐标原点,一个三角形由点A(x1,y1)、B(x2,y2)、C(x3,y3)绕逆时针顺序组成,通过公式(1)计算出P(x,y)点相对于三角形三条边的边界方程,并通过Top_left原则判断出该像素点与三角形的位置关系;
对公式(1)进行变形,得到公式(2):
其中,
采用Top_left原则对系数dx12、dx23、dx31、dy12、dy23、dy31进行约束,得到公式(3):
当三角形三条边的边界方程值都小于0时,像素点P在三角形内部;当有其中一条边的边界方程值为0,并且同时满足公式(3)时,像素点P在三角形内部;若不满足以上两种情况,则像素点P在三角形外部。
可选地,所述步骤S2包括:
S21、获取三角形的最大顶点和最小顶点分别对应的起始像素块坐标;(xmax_block,ymax_block)为最大顶点的起始像素块坐标,(xmin_block,ymin_block)为最小顶点的起始像素块坐标;
S22、将三角形分为上半空间和下半空间;
S23、从两个起始像素块坐标开始同时对上、下半空间进行左右并行扫描;
S24、在对每一空间中的每一行进行扫描时,针对每一像素块,根据边界函数值判断是否是属于三角形内部或者是边缘像素块,如果属于三角形内部,则输出并将进行下一个像素块的扫描,在遇到三角形之外的像素块时停止,并将遇到三角形之外的像素块的前一个像素块为边界像素块;
当左右方向扫描均遇到三角形之外的像素块,则停止扫描当前行;
计算下一行起始扫描像素块,开始进行下一行的扫描,下一行水平扫描线的起始块坐标通过当前水平扫描行的边界像素块坐标得到;
start_block_x=left_bound+(right_bound-left_bound)>>1
start_block_y=currert_y±2
其中,start_block_x为下一行水平扫描线的起始块x坐标,start_block_y为下一行水平扫描行的y坐标,current_y为当前行水平扫描行的y坐标,left_bound、right_bound分别为当前水平扫描行的左边界和右边界;
S25、根据预设的判断条件判断出下一行是停止扫描还是继续扫描,若是继续扫描,判断出下一行的水平扫描线是属于上半空间还是下半空间;若是停止扫描,则三角形遍历结束。
可选地,预设的判断条件包括:
第一、当上半空间和下半空间同时完成当前水平扫描行时:满足top_start_block_y=down_start_block_y,下半空间停止扫描,上半空间完成下一行扫描后三角形遍历结束;
若满足top_start_block_y=down_start_block_y+2,停止上半空间和下半空间扫描,三角形遍历结束;
第二、当上半空间正在扫描当前行,下半空间开始下一行扫描时,若满足top_current_y+2=down_start_block_y,上半空间完成当前行扫描停止,下半空间完成下一行扫描停止;三角形遍历结束;
第三、当下半空间正在扫描当前行,上半空间开始下一行扫描时,若满足top_start_block_y+2=down_current_y,下半空间完成当前行扫描停止,上半空间完成下一行扫描停止;三角形遍历结束;
第四、若不满足上述第一、第二、第三条件,从下一行的起始像素块开始,执行步骤S23。
可选地,所述步骤S24中,依据下述公式(4)直接计算一个2×2像素块内相邻像素块的边界方程值;
此时,Δx和Δy的值取1。
可选地,所述步骤S1包括:
根据输入的三角形顶点坐标信息,分别确定x,y坐标的最大值和最小值,
其中,x(y_max),x(y_min)分别表示当y值最大和最小时x的值。
第三方面,本发明还提供一种图形处理器,包括上述第一方面任一所述的基于Tile的三角形多向并行扫描结构。
本发明具有的有益效果:
在适用于分块式渲染(Tile Based Rendering,TBR)架构的基础上,提出了一种高效的三角形的多向并行光栅扫描方法。该方法在避免了对无关像素处理的基础上,与其他光栅扫描算法相比,并行度更高,可以显著提高三角形的遍历速度,对三角形的填充率最大可达到100%,适用于高性能的移动图形处理器。
附图说明
图1为当前的TBR架构图;
图2为当前的TBDR架构图;
图3为本发明一实施例提供的基于Tile的三角形的多向并行扫描方法的示意图;
图4为本发明一实施例提供的基于Tile的三角形的多向并行扫描结构的电路框图;
图5为采用图3所示的方法对不同三角形的绘制结果的示意图;
图6为对图4所示的电路进行FPGA测试结果的示意图。
具体实施方式
为了更好的解释本发明,以便于理解,下面结合附图,通过具体实施方式,对本发明作详细描述。
一、适用于分块式渲染的图形处理器
为了适用于移动GPU低带宽,低功耗需求,基于Tile(块)的GPU架构被广泛用于移动平台,该架构通常分为TBR架构和分块式延迟渲染(Tile Based Deferred Rendering,TBDR)架构。
TBR架构将屏幕划分为若干个很小的Tile,并且对每一个Tile进行光栅化等后续处理。与传统的渲染架构相比,该架构可以将整个Tile的帧缓冲区、深度缓冲区和模板缓冲区保存在片上高速缓存中,利用内部存储直接对其进行渲染,从而减少GPU对外部存储的访问和内存带宽的消耗。TBR架构如图1所示。
为了在TBR架构上进一步降低带宽的消耗,提出了TBDR渲染架构。该架构和TBR架构原理相似,都是以Tile为单位对三角面进行绘制。但该架构对每个光栅化生成的像素都进行深度测试操作,提前剔除掉被遮挡的像素,减少不必要渲染的片段,降低了带宽的需求。TBDR架构如图2所示。
本实施例中的基于Tile的三角形多向并行扫描结构的硬件电路图(如图4所示),其属于图1和图2中像素处理中光栅化的一部分,用于实现扫描遍历的功能,但并没有完成整个光栅化的过程。
二、光栅化扫描算法分析
2.1边界函数算法分析
本申请提出的方法基于边界函数方程,边界函数方程可以有效地对像素点进行判断,基本思想是通过三角形三条边的线性函数确定出属于三角形内部的像素点,判断过程如下:
假定屏幕左上方为坐标原点,一个三角形由点A(x1,y1)、B(x2,y2)、C(x3,y3)绕逆时针顺序组成,通过公式(1)计算出P(x,y)点相对于三角形三条边的边界方程,并通过Top_left原则判断出该像素点与三角形的位置关系。
对(1)式进行推导变形为:
其中
采用Top_left原则对系数dx12、dx23、dx31、dy12、dy23、dy31进行约束,得到公式(3):
当三角形三条边的边界方程值都小于0时,像素点P在三角形内部;当有其中一条边的边界方程值为0,并且同时满足公式(3)时,像素点P在三角形内部;若不满足以上两种情况,则像素点P在三角形外部。
2.2三角形光栅化扫描算法分析
通过对边界函数算法的分析,在适用于分块式渲染的GPU架构基础上,提出一种基于Tile的三角形多向并行扫描算法,在不同大小的Tile内,从三角形的最大顶点(xmax_block,ymax_block)和最小顶点(xmin_block,ymin_block)开始,将三角形分为上下两个半空间,以2×2大小的像素块为单位,分别从下到上和从上到下同时进行左右并行扫描,直到两个方向的扫描相遇时停止。
需要说明的是,上半空间和下半空间不是直接对三角形划分得来的,而是取决于向上扫描和向下扫描的交汇处,在硬件电路图中,判断模块主要完成这个功能。
以16×16大小的Tile为例,扫描过程如下图3所示。每个框代表一个2×2像素块,其中斜线框表示边缘像素块,灰色框表示边界像素块(边缘像素块的一种),竖线框表示内部像素块,虚线箭头表示扫描起始块像素坐标,垂直方向箭头表示当前行扫描属于上半空间还是下半空间,这需要在每一次对当前行扫描完成之后通过条件判断后得到,水平方向箭头表示对当前行进行的左右遍历。
(1)首先计算对三角形扫描的起始像素块,根据输入的三角形顶点坐标信息,分别确定x,y坐标的最大值和最小值,利用下列公式计算出三角形的两个起始像素块坐标(xmax_block,ymax_block)和(xmin_block,ymin_block),如图3中虚线箭头所示。
其中,x(y_max),x(y_min)分别表示当y值最大和最小时x的值。
(2)从两个起始像素块坐标开始同时对上、下半空间进行左右并行扫描,根据边界函数值判断并输出属于三角形内部和边缘像素块,如图3中斜线框和竖线框所示,直到遇到位于三角形之外的像素块时停止,并且记前一个像素块为边界像素块,如图3中灰色框表示。当左右方向扫描都停止时,该行扫描结束。
在对当前水平行扫描时,每当扫描到一个像素块,先计算该像素块相对于三角形三条边的边界函数值,再根据边界函数值判断是否属于三角形内部或者是边缘像素块,如果属于,则输出,然后进行下一个像素块扫描,以此重复,直到遇到三角形之外的像素块时停止。
(3)计算下一行起始扫描像素块,开始进行下一行的扫描,下一行水平扫描线的起始块坐标可以通过当前水平扫描行的边界像素块坐标得到,具体做法如下公式:
start_block_x=left_bound+(right_bound-left_bound)>>1,
start_block_y=current_y±2
其中,start_block_x为下一行水平扫描线的起始块x坐标,start_block_y为下一行水平扫描行的y坐标,current_y为当前行水平扫描行的y坐标,left_bound、right_bound分别为当前水平扫描行的左边界和右边界。
(4)判断出下一行是停止扫描还是继续扫描,如若是继续扫描,判断出该水平扫描线是属于上半空间还是下半空间,如若是停止扫描,则三角形遍历结束。
判断条件如下:
a.当上半空间和下半空间同时完成当前水平扫描行时。若满足top_start_block_y=down_start_block_y,下半空间停止扫描,上半空间完成下一行扫描后三角形遍历结束;若满足top_start_block_y=down_start_block_y+2,停止上半空间和下半空间扫描,三角形遍历结束。
b.当上半空间正在扫描当前行,下半空间开始下一行扫描时,若满足top_current_y+2=down_start_block_y,上半空间完成当前行扫描停止,下半空间完成下一行扫描停止。三角形遍历结束。
c.当下半空间正在扫描当前行,上半空间开始下一行扫描时,若满足top_start_block_y+2=down_current_y,下半空间完成当前行扫描停止,上半空间完成下一行扫描停止。三角形遍历结束。
d.若不满足上述a,b,c条件,从下一行的起始像素块开始,执行步骤(2)。
在上述扫描遍历方式中,为了得到三角形内部的像素块,需要采用公式(2)对每一个像素块进行边界方程计算,从而导致大量的乘法操作使得算法计算量大,实现效率低下。因此,在实际电路设计中,为了简化电路设计,加快硬件处理速度,对公式(2)再进行推导得到公式(4),从而根据当前像素边界方程值可直接计算一个2×2像素块内相邻像素块的边界方程值。
此时,Δx和Δy的值取1。
实现该算法的伪代码如下:
三、光栅化扫描硬件实现
根据对光栅化扫描遍历算法的分析,将其硬件电路实现分为四个模块:三角形设置模块,上半空间扫描模块,下半空间扫描模块和判断模块,硬件电路结构框图如下图4所示。
三角形设置模块主要完成对边界方程系数dx12,dy12,dx23,dy23,dx31,dy31,c12,c23,c31以及三角形最大顶点和最小顶点的计算,并将其结果送入上半空间扫描模块和下半空间扫描模块。
上半空间扫描模块和下半空间扫描模块分为起始像素块边界函数计算模块和扫描模块。起始像素块边界函数计算模块根据三角形设置模块的输出数据或者扫描模块的输出数据。
计算出第一行或者下一水平扫描行的起始像素块的边界函数值,并将结果送入扫描模块,以判定像素块相对于三角形的位置。扫描模块对当前水平扫描行进行左右并行扫描,并且根据公式(4)计算出扫描像素块的边界函数值,完成对三角形上半空间和下半空间的遍历,输出三角形内有效像素点。
判断模块决定三角形的下一行水平扫描线是进行上半空间扫描还是下半空间扫描,或者是停止扫描,并将判断结果送入上一模块。
四、性能分析与FPGA实现
4.1性能分析
考虑到对于不同的三角形会有不同的绘制效果,为了验证该算法的适用性,在16×16大小的Tile内对等腰三角形、直角三角形、任意锐角三角形、钝角三角形以及特殊狭长三角形进行了功能验证,并将电路仿真结果对三角形进行填充,如下图5所示。
通过对图5的分析,该算法可以正确完成对三角形的扫描遍历过程。对于图(e)和图(f)中的狭长三角形来说,该算法具有一定的局限性。从图中可以看出,对狭长三角形的填充会有误差,造成三角形失真,当三角形两条狭长边在横坐标或者纵坐标跨度越小时,绘制的三角形更接近于一条直线,三角形失真越严重。这是因为当两条狭长边越接近于一条直线时,两条边内的像素往往只占半个1×1像素块,无法得到精确的绘制。要解决这个问题,需要将一个1×1像素块再进行划分,假设对1×1像素块再进行2×2像素划分,则绘制的像素个数会成为原来的4倍,这样虽然会得到更精准的狭长三角形,但牺牲了填充率,对于一般三角形而言,会显著降低对三角形的绘制速率,延长三角形的绘制时间,因而降低在图形绘制中光栅化的实现效率,并且,在一般高分辨率图像显示中,这种误差并不影响人们的视觉体验。因此,为了提高三角形的填充率,本文选择该算法完成对三角形的扫描遍历。
衡量像素填充率最重要的性能指标是平均每个周期能够产生多少个像素,根据本申请所设计电路的实验结果,通过对不同种类三角形填充的像素个数以及完成对三角形遍历所使用的时钟数,计算出三角形的像素填充率。结果如下表1所示。
表1对不同三角形的遍历结果
Table1 traversing results for different triangles
从表1可以看出,本申请所设计的算法对直角三角形和等腰三角形的填充率可以达到100%,对钝角三角形和任意锐角三角形的填充率也达到80%以上。对狭长三角形的填充率只有30.16%,这是因为当三角形足够窄时,对三角形的绘制更趋近于一条直线,一行只需遍历一个像素甚至半个像素,无法发挥算法的并行优势。但对于大部分三角形来说,该算法能够有效地提高三角形的填充率。
为了能够更好地说明提出的扫描算法的高效性,将三角形处理过程中一个时钟节拍所能够处理的像素数目进行统计,与现有技术的两种扫描算法例如,Zigzag扫描算法和基于块的等半空间光栅化算法进行比较,结果如下表2所示。
表2不同算法在一个时钟节拍处理的像素数目比较
Table2 comparison of the number of pixels processed by differentalgorithms in one clock beat
从表2可以看出,本文提出的扫描算法最大的优势是可以在同一时刻处理更多的像素,处理速度更快,并行度更高。与现有技术的基于块的等半空间光栅化算法相比,该算法可以解决三角形上下半空间长时间的等待问题,并且将像素的处理效率提高2倍。
4.2FPGA实现
在真实的图形绘制中,一个Tile内可能会处理多个三角形,本文对各种不同单个三角形完成功能验证后,对一个16×16Tile内的多个三角形同样进行验证,并且采用Xilinx公司的ISE开发环境进行综合,通过Xilinx公司的ZYNQ系列芯片XC7Z045-2-FFG900对硬件电路进行FPGA测试,通过Chipscope抓取需要直接观测的信号。为了验证FPGA测试的正确性,将抓取到的信号坐标通过Matlab仿真软件进行填充,图(c)和图(d)的颜色是自定义的,所得到的结果如下图6所示。由于该结果是将小分辨的图像放大得到的,因此,对于没有经过反走样的三角形,锯齿效果明显,但是这并不影响扫描算法对三角形内部像素的填充。
由图6可以看出,本文所设计的电路能够正确完成对三角形的扫描遍历功能,并且由图可以发现,当不同的三角形共用一条边时,依然能够正确完成对三角形的绘制。因此,FPGA测试结果正确。
在基于Xilinx V6-760FPGA上对电路进行综合后,资源占用情况与现有技术中的“基于扫描线填充的三角形双向光栅化技术”对比如下表3所示。可以看出,相对于现有技术的“基于扫描线填充的三角形双向光栅化技术”,本申请中的硬件电路Slice Registers资源使用率减少了59.6%,Slice LUTs资源使用率减少了16.9%,降低了对资源的使用,更易于硬件的实现。
表3硬件电路资源使用对比情况
Table3 hardware circuit resource usage
五、结论
在基于分块式渲染架构的基础上,本申请提出的高效三角形双向并行扫描方法,经过实验分析,与其他扫描算法相比,具有更高的并行性,可以在Tile内对三角形一次处理16个像素,像素填充率最大可以达到100%。最终能够通过在Xilinx公司的ZC706开发板上进行验证,实现三角形的扫描遍历功能,适用于高性能图形处理器。
上述各个实施例可以相互参照,本实施例不对各个实施例进行限定。
最后应说明的是:以上所述的各实施例仅用于说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分或全部技术特征进行等同替换;而这些修改或替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (7)
1.一种基于Tile的三角形多向并行扫描结构,其特征在于,包括:
三角形设置模块、上半空间扫描模块、下半空间扫描模块和判断模块;
所述三角形设置模块和判断模块均连接上半空间扫描模块、下半空间扫描模块;
所述三角形设置模块用于获取三角形的边界方程系数、三角形的最大顶点、最小顶点;
所述三角形设置模块将获取的三角形的边界方程系数、三角形的最大顶点、最小顶点均发送所述上半空间扫描模块和下半空间扫描模块;
所述上半空间扫描模块根据所述三角形设置模块的输出数据对最小顶点起始的扫描行进行左右扫描,完成对三角形上半空间的遍历,输出三角形内有效像素点;
所述下半空间扫描模块根据所述三角形设置模块的输出数据对最大顶点起始的扫描行进行左右扫描,完成对三角形下半空间的遍历,输出三角形内有效像素点;
所述判断模块用于决定三角形的下一行水平扫描线是进行上半空间扫描还是下半空间扫描,或者停止扫描,并将判断结果送入对应的模块;
所述上半空间扫描模块和下半空间扫描模块的结构相同;
所述上半空间扫描模块包括:起始像素块边界函数计算模块和扫描模块;
所述扫描模块包括:左右并行扫描模块和下一像素块边界函数计算模块;
其中,所述起始像素块边界函数计算模块根据三角形设置模块的输出数据或扫描模块的输出数据计算出第一行或下一水平扫描行的起始像素块的边界函数值,并将计算的边界函数值输入扫描模块,以判定像素块相对于三角形的位置;
所述扫描模块的左右并行扫描模块对当前水平扫描行进行左右并行扫描;所述下一像素块边界函数计算模块根据边界方程计算出扫描像素块的边界函数值,完成对三角形上半空间和下半空间的遍历;
其中,所述起始像素块边界函数计算模块,用于将一整个屏幕划分成不同的块,每一个块是一个Tile,针对每一个Tile内像素的处理包括:
假定每一个Tile左上方为坐标原点,一个三角形由点A(x1,y1)、B(x2,y2)、C(x3,y3)绕逆时针顺序组成,通过公式(1)计算出P(x,y)点相对于三角形三条边的边界方程,并通过Top_left原则判断出该像素点与三角形的位置关系;
对公式(1)进行变形,得到公式(2):
采用Top_left原则对系数dx12、dx23、dx31、dy12、dy23、dy31进行约束,得到公式(3):
当三角形三条边的边界方程值都小于0时,像素点P在三角形内部;当有其中一条边的边界方程值为0,并且同时满足公式(3)时,像素点P在三角形内部;若不满足以上两种情况,则像素点P在三角形外部;
以及,扫描模块用于:
获取三角形的最大顶点和最小顶点分别对应的起始像素块坐标;
(xmax_block,ymax_block)为最大顶点的起始像素块坐标,
(xmin_block,ymin_block)为最小顶点的起始像素块坐标;
将三角形分为上半空间和下半空间;
从两个起始像素块坐标开始同时对上、下半空间进行左右并行扫描;
在对每一空间中的每一行进行扫描时,针对每一像素块,根据边界函数值判断是否是属于三角形内部或者是边缘像素块,如果属于,则输出并将进行下一个像素块的扫描,在遇到三角形之外的像素块时停止,并将遇到三角形之外的像素块的前一个像素块为边界像素块;
当左右方向扫描均遇到三角形之外的像素块,则停止扫描当前行;
计算下一行起始扫描像素块,开始进行下一行的扫描,下一行水平扫描线的起始块坐标通过当前水平扫描行的边界像素块坐标得到;
start_block_x=left_bound+(right_bound-left_bound)>>1
start_block_y=current_y±2
其中,start_block_x为下一行水平扫描线的起始块x坐标,start_block_y为下一行水平扫描行的y坐标,current_y为当前行水平扫描行的y坐标,left_bound、right_bound分别为当前水平扫描行的左边界和右边界;
根据预设的判断条件判断出下一行是停止扫描还是继续扫描,若是继续扫描,判断出下一行的水平扫描线是属于上半空间还是下半空间;若是停止扫描,则三角形遍历结束。
2.根据权利要求1所述的结构,其特征在于,
所述三角形的多向并行光栅扫描结构位于TBR架构或者TBDR架构的像素处理模块的光栅化单元中;
和/或,所述三角形的多向并行光栅扫描结构基于所述TBR架构或者TBDR架构内划分的Tile块在每个Tile块内进行像素分析处理的。
3.一种基于Tile的三角形多向并行扫描方法,其特征在于,包括:
S1、根据边界函数方程,通过三角形三条边的线性函数确定出属于三角形内的像素点;
S2、根据所述三角形的最大顶点和最小顶点开始,将三角形的扫描分为上半空间和下半空间,针对上半空间从上到下进行左右并行扫描,针对下半空间从下到上进行左右并行扫描,直到两个方向的扫描相遇时停止;
所述步骤S1包括:
将一整个屏幕划分成不同的块,每一个块是一个Tile,针对每一个Tile内像素的处理包括:
假定每一个Tile左上方为坐标原点,一个三角形由点A(x1,y1)、B(x2,y2)、C(x3,y3)绕逆时针顺序组成,通过公式(1)计算出P(x,y)点相对于三角形三条边的边界方程,并通过Top_left原则判断出该像素点与三角形的位置关系;
对公式(1)进行变形,得到公式(2):
其中,
采用Top_left原则对系数dx12、dx23、dx31、dy12、dy23、dy31进行约束,得到公式(3):
当三角形三条边的边界方程值都小于0时,像素点P在三角形内部;当有其中一条边的边界方程值为0,并且同时满足公式(3)时,像素点P在三角形内部;若不满足以上两种情况,则像素点P在三角形外部;
所述步骤S2包括:
S21、获取三角形的最大顶点和最小顶点分别对应的起始像素块坐标;(xmax_block,ymax_block)为最大顶点的起始像素块坐标,(xmin_block,ymin_block)为最小顶点的起始像素块坐标;
S22、将三角形分为上半空间和下半空间;
S23、从两个起始像素块坐标开始同时对上、下半空间进行左右并行扫描;
S24、在对每一空间中的每一行进行扫描时,针对每一像素块,根据边界函数值判断是否是属于三角形内部或者是边缘像素块,如果属于,则输出并将进行下一个像素块的扫描,在遇到三角形之外的像素块时停止,并将遇到三角形之外的像素块的前一个像素块为边界像素块;
当左右方向扫描均遇到三角形之外的像素块,则停止扫描当前行;
计算下一行起始扫描像素块,开始进行下一行的扫描,下一行水平扫描线的起始块坐标通过当前水平扫描行的边界像素块坐标得到;
start_block_x=left_bound+(right_bound-left_bound)>>1
start_block_y=current_y±2
其中,start_block_x为下一行水平扫描线的起始块x坐标,start_block_y为下一行水平扫描行的y坐标,current_y为当前行水平扫描行的y坐标,left_bound、right_bound分别为当前水平扫描行的左边界和右边界;
S25、根据预设的判断条件判断出下一行是停止扫描还是继续扫描,若是继续扫描,判断出下一行的水平扫描线是属于上半空间还是下半空间;若是停止扫描,则三角形遍历结束。
4.根据权利要求3所述的方法,其特征在于,预设的判断条件包括:
第一、当上半空间和下半空间同时完成当前水平扫描行时:满足top_start_block_y=down_start_block_y,下半空间停止扫描,上半空间完成下一行扫描后三角形遍历结束;
若满足top_start_block_y=down_start_block_y+2,停止上半空间和下半空间扫描,三角形遍历结束;
第二、当上半空间正在扫描当前行,下半空间开始下一行扫描时,若满足top_current_y+2=down_start_block_y,上半空间完成当前行扫描停止,下半空间完成下一行扫描停止;三角形遍历结束;
第三、当下半空间正在扫描当前行,上半空间开始下一行扫描时,若满足top_start_block_y+2=down_current_y,下半空间完成当前行扫描停止,上半空间完成下一行扫描停止;三角形遍历结束;
第四、若不满足上述第一、第二、第三条件,从下一行的起始像素块开始,执行步骤S23。
7.一种图形处理器,其特征在于,包括上述权利要求1至2任一所述的基于Tile的三角形多向并行扫描结构。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910014883.4A CN109741433B (zh) | 2019-01-08 | 2019-01-08 | 一种基于Tile的三角形多向并行扫描方法及结构 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910014883.4A CN109741433B (zh) | 2019-01-08 | 2019-01-08 | 一种基于Tile的三角形多向并行扫描方法及结构 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109741433A CN109741433A (zh) | 2019-05-10 |
CN109741433B true CN109741433B (zh) | 2023-05-05 |
Family
ID=66363890
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910014883.4A Active CN109741433B (zh) | 2019-01-08 | 2019-01-08 | 一种基于Tile的三角形多向并行扫描方法及结构 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109741433B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113706556B (zh) * | 2021-08-20 | 2022-06-10 | 珠江水利委员会珠江水利科学研究院 | 一种影像切片边缘碎片快速探测与替换方法 |
CN115661298B (zh) * | 2022-12-15 | 2023-04-07 | 南京航空航天大学 | 一种无失真三角形的区域划分绘制方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101661741A (zh) * | 2008-08-29 | 2010-03-03 | 富士通株式会社 | 图形光栅扫描中的三角形遍历方法和装置 |
CN108009978A (zh) * | 2017-11-24 | 2018-05-08 | 中国航空工业集团公司西安航空计算技术研究所 | 一种非阻塞并行三角形光栅化单元结构 |
CN108022201A (zh) * | 2017-11-24 | 2018-05-11 | 中国航空工业集团公司西安航空计算技术研究所 | 一种三角形图元并行光栅化定序方法 |
CN109102456A (zh) * | 2018-08-07 | 2018-12-28 | 芯视图(常州)微电子有限公司 | 按行扫描透视校正3d图形渲染的三角形光栅化加速器 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9501859B2 (en) * | 2013-07-19 | 2016-11-22 | Adobe Systems Incorporated | Triangle rasterization |
-
2019
- 2019-01-08 CN CN201910014883.4A patent/CN109741433B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101661741A (zh) * | 2008-08-29 | 2010-03-03 | 富士通株式会社 | 图形光栅扫描中的三角形遍历方法和装置 |
CN108009978A (zh) * | 2017-11-24 | 2018-05-08 | 中国航空工业集团公司西安航空计算技术研究所 | 一种非阻塞并行三角形光栅化单元结构 |
CN108022201A (zh) * | 2017-11-24 | 2018-05-11 | 中国航空工业集团公司西安航空计算技术研究所 | 一种三角形图元并行光栅化定序方法 |
CN109102456A (zh) * | 2018-08-07 | 2018-12-28 | 芯视图(常州)微电子有限公司 | 按行扫描透视校正3d图形渲染的三角形光栅化加速器 |
Non-Patent Citations (1)
Title |
---|
TBR架构GPU中三角形高效光栅化;符鹤等;《中国图象图形学报》;20150409;第1-6页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109741433A (zh) | 2019-05-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100510131B1 (ko) | 픽셀 캐쉬 및 이를 이용한 3차원 그래픽 가속 장치 및 방법 | |
CN108305318B (zh) | 图形处理单元和使用渲染空间的图块集合的成本指示来控制渲染复杂度的方法 | |
US9965892B2 (en) | Rendering tessellated geometry with motion and defocus blur | |
US7505043B2 (en) | Cache efficient rasterization of graphics data | |
US6323874B1 (en) | System and method for rendering an image | |
TW200818054A (en) | Tile based precision rasterization in graphics pipeline | |
KR20080010356A (ko) | 가속화된 개시 타일 검색 | |
US10540789B2 (en) | Line stylization through graphics processor unit (GPU) textures | |
US11257181B2 (en) | Tiling a primitive in a graphics processing system by edge-specific testing of a subset of tiles in a rendering space | |
JP2002529865A (ja) | 画像処理装置 | |
US9519982B2 (en) | Rasterisation in graphics processing systems | |
CN109741433B (zh) | 一种基于Tile的三角形多向并行扫描方法及结构 | |
US20190206121A1 (en) | Graphic processor performing sampling-based rendering and method of operating the same | |
US20210383600A1 (en) | Graphics processing | |
US20160314618A1 (en) | Tiling a primitive in a graphics processing system | |
CN111127299A (zh) | 一种加速光栅化遍历的方法、装置及计算机存储介质 | |
CN111145286A (zh) | 一种基于gpu的用于边缘计算场景的点九图片贴图绘制方法 | |
JP2006235839A (ja) | 画像処理装置および画像処理方法 | |
US8355580B2 (en) | Method and system for generating boundary in the process of rasterizing vector graphic as well as method for producing the system | |
JPH11126261A (ja) | テクスチャマッピング方法及びその装置 | |
CN108519867B (zh) | Gpu中一种实现三角形反走样的装置和方法 | |
KR102178260B1 (ko) | 이미지 출력 장치 및 이의 이미지 렌더링 방법 | |
US20220036634A1 (en) | Methods and apparatus for pixel packing | |
US11748933B2 (en) | Method for performing shader occupancy for small primitives | |
CN111243012B (zh) | 一种gpu点光栅化点大小奇偶配置顶点坐标映射的tlm装置 |
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 |