嵌入式gpu中面積有效、功能復(fù)用的裁剪模塊的制作方法
【專利摘要】本實(shí)用新型涉及計(jì)算機(jī)圖形學(xué)和集成電路設(shè)計(jì)領(lǐng)域,為提高裁剪率,減少裁剪周期,提高嵌入式GPU的整體性能,本實(shí)用新型采取的技術(shù)方案是,嵌入式GPU中面積有效、功能復(fù)用的裁剪模塊,包括6個(gè)小模塊:寄存器組(Register?Group)、編碼單元(Outcoding?Unit)、預(yù)裁剪單元(Pre-Clipping?Unit)、SH(Sutherland-Hodgeman)裁剪單元(SH?Clipping?Unit)、共用運(yùn)算單元(Shared?Arithmetic?Unit)、以及控制單元(Control?Unit);方法分為預(yù)裁剪和裁剪兩部分,預(yù)裁剪將會(huì)處理一些容易判斷位置的圖形。而當(dāng)預(yù)裁剪判定該圖形需要裁剪時(shí),則需要對(duì)圖形進(jìn)行裁剪,得到新的圖形輸出到下一個(gè)階段。本實(shí)用新型主要應(yīng)用于計(jì)算機(jī)圖形學(xué)和集成電路設(shè)計(jì)。
【專利說(shuō)明】嵌入式GPU中面積有效、功能復(fù)用的裁剪模塊
【技術(shù)領(lǐng)域】
[0001]本實(shí)用新型涉及計(jì)算機(jī)圖形學(xué)和集成電路設(shè)計(jì)領(lǐng)域,具體講,涉及嵌入式GPU中面積有效、功能復(fù)用的裁剪單元。
技術(shù)背景
[0002]目前在圖形學(xué)中傳統(tǒng)的裁剪算法主要有Cohen-Sutherland算法、Liang-Barsky算法、Nicholl-Lee-Nicholl算法、Sutherland-Hodgeman算法。其中前三者是相對(duì)于線段而言,最后一個(gè)是對(duì)于多邊形的裁剪。
[0003]在嵌入式GPU領(lǐng)域,目前對(duì)于裁剪模塊有研究的有韓國(guó)科學(xué)技術(shù)學(xué)院(KAIST)的Lee-Sup Kim教授帶領(lǐng)的課題組,其成果主要是2005年發(fā)表的論文“AnllM-triangles/sec3D Graphics Clipping Engine for Triangle Primitives” 和 2008 年發(fā)表的論文“Clipping-Ratio_Independent3D Graphics Clipping Engine by Dual-ThreadAlgorithm”和臺(tái)灣國(guó)立中山大學(xué)在2008年發(fā)表的論文“Efficient Pre-Clipping andClipping Algorithms for3D Graphics Geometry Computation,,。第一篇論文在預(yù)裁剪階段采用的是編碼方法,在裁剪階段,論文改進(jìn)了裁剪算法,從而增強(qiáng)了性能,并且提出了相關(guān)的硬件架構(gòu),給出了最終的時(shí)鐘頻率和所占面積。第二篇論文提出了一種新的硬件架構(gòu),該架構(gòu)同時(shí)處理兩個(gè)三角形的裁剪。第三篇論文提出了一種更加有效的預(yù)裁剪算法,提高裁剪率,而在裁剪算法里,改進(jìn)了 Sutherland-Hodgeman算法,用相對(duì)應(yīng)的兩個(gè)平面來(lái)做裁剪,減少了裁剪周期。
[0004]臺(tái)灣國(guó)立中山大學(xué)在2008年發(fā)表的一篇論文中,在預(yù)裁剪階段增加了斜率判定,提高了剔除率,但是由于該算法只是理論研究,實(shí)際在硬件實(shí)現(xiàn)上存在兩個(gè)問(wèn)題:1:在時(shí)間上,計(jì)算斜率涉及到除法運(yùn)算,在硬件上,除法消耗的周期較長(zhǎng)。2:在面積上,由于增加了斜率判定,必定會(huì)增加許多運(yùn)算單元,這在嵌入式GPU來(lái)說(shuō)是致命的問(wèn)題。
【發(fā)明內(nèi)容】
[0005]為克服現(xiàn)有技術(shù)的不足,提高裁剪率,減少裁剪周期,提高嵌入式GPU的整體性能,為此,本實(shí)用新型采用的技術(shù)方案是,嵌入式GPU中面積有效、功能復(fù)用的裁剪模塊,包括6個(gè)小模塊:寄存器組(Register Group)、編碼單元(Outcoding Unit)、預(yù)裁剪單元(Pre-Clipping Unit)、SH (Sutherland-Hodgeman)裁剪單兀(SH Clipping Unit)、共用運(yùn)算單元(Shared Arithmetic Unit)、以及控制單元(Control Unit);在以上的各個(gè)模塊中,數(shù)據(jù)通路如下:
[0006]裁剪模塊接收到頂點(diǎn)數(shù)據(jù),將數(shù)據(jù)存放在寄存器組;
[0007]編碼單元對(duì)頂點(diǎn)數(shù)據(jù)編碼,得到的編碼存放回寄存器組,編碼完后預(yù)裁剪單元判定三角形是否需要裁剪,產(chǎn)生相關(guān)信號(hào)并將信號(hào)傳給控制單元;
[0008]控制單元根據(jù)預(yù)裁剪單元傳回的信號(hào),判定是否需要進(jìn)行SH裁剪,如果根據(jù)信號(hào)判定三角形和可視窗口相交則需要SH裁剪,將頂點(diǎn)數(shù)據(jù)傳入SH裁剪單元,經(jīng)過(guò)三級(jí)裁剪-X和-x,Y和-Y,Z和-Z ;產(chǎn)生新的數(shù)據(jù)并傳回頂點(diǎn)寄存器組,最后將新的頂點(diǎn)數(shù)據(jù)重組若干個(gè)三角形輸出,如果信號(hào)表明三角形在可視窗口內(nèi),則控制單元直接將頂點(diǎn)數(shù)據(jù)傳給下一個(gè)模塊;如果信號(hào)表明三角形在可視窗口外,則控制單元?jiǎng)h除頂點(diǎn)數(shù)據(jù),并接收下一組頂點(diǎn)數(shù);
[0009]共用運(yùn)算單元由兩個(gè)4維向量?jī)?nèi)積運(yùn)算單元(Floating_point4D Vector DotProduct, DP4)組成;一共有4對(duì)四維向量輸入,來(lái)自預(yù)裁剪單元2對(duì),來(lái)自SH裁剪單元2對(duì),并根據(jù)控制信號(hào)來(lái)選擇哪2對(duì)進(jìn)行運(yùn)算,如果控制信號(hào)顯示目前處于預(yù)裁剪階段,則選擇來(lái)自預(yù)裁剪單元的向量,反之,則選擇裁剪單元的向量;
[0010]所述寄存器組:裁剪模塊中需要存放三種不同的數(shù)據(jù),輸入的三角形頂點(diǎn)數(shù)據(jù),頂點(diǎn)的編碼和新生成的頂點(diǎn),其中每個(gè)頂點(diǎn)所占的位寬為16*4*4=256字節(jié),而每個(gè)編碼占6位;所述編碼單元(Outcoding Unit),由浮點(diǎn)比較器構(gòu)成,一個(gè)頂點(diǎn)需要6個(gè)浮點(diǎn)比較器。
[0011]所述預(yù)裁剪單元用于:首先從寄存器組中獲得頂點(diǎn)的編碼并對(duì)編碼進(jìn)行與和或運(yùn)算依次來(lái)判定三角形和可視窗口的位置關(guān)系,如果編碼能判定,則輸出相關(guān)信號(hào)給控制單元,如果不能,則進(jìn)行斜率判定。
[0012]所述SH裁剪單元用于求交計(jì)算,由DP4、除法器、寄存器、3、4級(jí)寄存、乘法器組成,DP4的周期為4,除法器的周期為3,DP4_1在第一個(gè)周期,輸入是分母的一對(duì)4維向量((xb, wb, xa,wa), (1,1,-1,-1)根據(jù)公式9),計(jì)算分母的值,結(jié)果傳入到除法器中求倒數(shù),然后將倒數(shù)放在寄存器中,從第二個(gè)周期起,輸入是分子的一對(duì)4維向量,由于在第5個(gè)周期時(shí),DP4已經(jīng)計(jì)算完分子的值,而分母的倒數(shù)沒(méi)有計(jì)算完,所以在設(shè)計(jì)上加上3級(jí)寄存,以等待倒數(shù)計(jì)算完成,一起做乘法,得到新頂點(diǎn)的每個(gè)分量值;DP4_2從第一個(gè)周期起,就開始計(jì)算分子的值,所以在乘法器之前需要4級(jí)寄存,由于每求一個(gè)頂點(diǎn)需要計(jì)算63個(gè)分量,而DP4_1在第一個(gè)周期計(jì)算分母,所以DP_1計(jì)算31個(gè)分量,DP4計(jì)算32個(gè)分量,每個(gè)DP4都剛好計(jì)算32對(duì)向量。
[0013]本實(shí)用新型具有如下技術(shù)效果:
[0014]本實(shí)用新型采用6個(gè)嵌入式GPU中面積有效、功能復(fù)用的裁剪模塊,因而本實(shí)用新型能夠提高裁剪率,減少裁剪周期,具有較高的整體性能。
【專利附圖】
【附圖說(shuō)明】
[0015]附圖1圖形流水線。
[0016]附圖23D空間的編碼。
[0017]附圖3三角形和區(qū)域。
[0018]附圖4率判定原理。
[0019]附圖5斜率判定。
[0020]附圖6邊和裁剪線的四種關(guān)系。
[0021]附圖7線段和裁剪線的九種關(guān)系。
[0022]附圖8裁剪單元的硬件框架。
[0023]附圖9編碼單元。
[0024]附圖10共用運(yùn)算單元架構(gòu)圖。
[0025]附圖11裁剪單元的求交計(jì)算。[0026]附圖12GPU硬件框架。
【具體實(shí)施方式】
[0027]嵌入式GPU是嵌入式系統(tǒng)的圖形處理單元,將輸入的圖形數(shù)據(jù)經(jīng)過(guò)圖形流水線處理,并最終顯示在屏幕上。圖形流水線如附圖1所示。
[0028]從圖形流水線中可知,裁剪是其中重要的一步,所以裁剪單元的性能影響著嵌入式GPU的整體性能。
[0029]裁剪模塊是GPU中一個(gè)重要的模塊。該模塊接收來(lái)自圖元組裝模塊的數(shù)據(jù),然后剔除處于可視窗口之外的點(diǎn)和圖形,或者計(jì)算交點(diǎn),產(chǎn)生新的點(diǎn)和圖形,最后進(jìn)行透視除法并將數(shù)據(jù)組成新的三角形傳遞給光柵化模塊。
[0030]本實(shí)用新型是在預(yù)裁剪階段,增加斜率判定方法,但在判定期間,避免除法,而且和裁剪運(yùn)算單元共用運(yùn)算單元。在時(shí)間和面積上符合嵌入式GPU的要求。 [0031]1:算法設(shè)計(jì):該算法分為預(yù)裁剪和裁剪兩部分,預(yù)裁剪將會(huì)處理一些容易判斷位置的圖形。而當(dāng)預(yù)裁剪判定該圖形需要裁剪時(shí),則需要對(duì)圖形進(jìn)行裁剪,得到新的圖形輸出到下一個(gè)階段。該算法步驟為:
[0032]步驟1:接收三角形數(shù)據(jù),并將三角形的頂點(diǎn)編碼。如果沒(méi)有數(shù)據(jù),則算法結(jié)束。
[0033]步驟2:根據(jù)編碼,判定三角形:A全部都在可視窗口內(nèi),B全部在可視窗口外,C 一部分在可視窗口內(nèi),一部分在可視窗口外,D不能清除知道和窗口的位置關(guān)系。如果是A,則轉(zhuǎn)到步驟3,如果是B,則轉(zhuǎn)到步驟4,如果是C,則轉(zhuǎn)到步驟6,如果是D轉(zhuǎn)到步驟5。
[0034]步驟3:將數(shù)據(jù)傳遞給下一個(gè)階段,轉(zhuǎn)到步驟I。
[0035]步驟4:將數(shù)據(jù)剔除,轉(zhuǎn)到步驟I。
[0036]步驟5:對(duì)圖形進(jìn)行斜率判定,如果三角形和可視窗口相交,則轉(zhuǎn)到步驟6,如果不相交,則剔除數(shù)據(jù),轉(zhuǎn)到步驟I。
[0037]步驟6:對(duì)圖形進(jìn)行裁剪,生成新的頂點(diǎn),組成新的三角形并傳遞給下一個(gè)階段,轉(zhuǎn)到步驟I。
[0038]1.1頂點(diǎn)編碼以及判定。頂點(diǎn)編碼方法將3D空間分為27個(gè)區(qū)域,用6位二進(jìn)制數(shù)表示每個(gè)區(qū)域。如附圖2所示。而三角形三個(gè)頂點(diǎn)會(huì)通過(guò)計(jì)算得到每個(gè)頂點(diǎn)的編碼值。編碼的算法:
[0039]int Outcode (Point A (xa, ya, za, wa))
[0040]int code;
[0041 ] code= (xa+wa>=0) ?0:1; code = (xa - wa<=0) ?0:2;
[0042]code | = (ya+wa>=0) ?0:4; code = (ya - wa<=0) ?0:8;
[0043]code | = (za+wa>=0) ?0:16; code | = (za - wa<=0) ?0:32;
[0044]return code
[0045]當(dāng)三角形的每個(gè)頂點(diǎn)得到一個(gè)編碼值后,對(duì)編碼進(jìn)行運(yùn)算,以判定三角形和可視窗口的位置關(guān)系。設(shè)三角形ABC,編碼得到三個(gè)頂點(diǎn)的編碼值為Acode,Bcode,Ccode。如果
[0046]Acode | Bcode | Ccode==O,則表示三個(gè)頂點(diǎn)都在可視窗口內(nèi)。
[0047]Acode&Bcode&Ccode! =0,則表示三個(gè)頂點(diǎn)都在可視窗口外。
[0048]頂點(diǎn)編碼方法只是簡(jiǎn)單地進(jìn)行編碼的與或操作,所以只能剔除部分可視窗口外的三角形。如附圖3。通過(guò)編碼方法只能剔除三角形1,不能剔除處于可視窗口外的三角2和3,所以我們需要利用斜率判定方法來(lái)提高剔除率。
[0049]1.2斜率判定。當(dāng)編碼方法不能判定一個(gè)三角形是否在可視窗口外時(shí),就需要利用斜率判定來(lái)確定三角形是否可以剔除。斜率判定的原理如附圖4所示,三角形ABC在可視窗口外,圖中有兩點(diǎn)OdP O2我們稱為逆時(shí)針判定點(diǎn)和順時(shí)針判定點(diǎn),從圖中我們可以看到,如果三角形在O1的逆時(shí)針或者在O2的順時(shí)針則表示三角形在可視窗口外。以上的原理適合在二位空間中,在三維空間中,該原理也適用,三維空間中的斜率判定的算法如下:
[0050]步驟1:將3D空間上的三角形分別映射到X-Y,Y-Z和X-Z平面。如果三個(gè)平面都映射過(guò),則三角形和可視窗口相交,并結(jié)束算法。
[0051]步驟2:依次取三角形的三個(gè)頂點(diǎn)的一個(gè)頂點(diǎn)作為基點(diǎn)Α,如果三個(gè)點(diǎn)都做過(guò)基點(diǎn),則返回步驟1.[0052]步驟3:根據(jù)基點(diǎn)所在的位置確定和基點(diǎn)對(duì)應(yīng)的逆時(shí)針判定點(diǎn)O1和順時(shí)針判定點(diǎn)O2,每個(gè)區(qū)域所對(duì)應(yīng)的兩個(gè)點(diǎn)如附圖5所示。
[0053]步驟4:設(shè)基點(diǎn)和O1, O2相連的直線為L(zhǎng)I和L2。如果基點(diǎn)和另外兩個(gè)頂點(diǎn)的線段都在LI的逆時(shí)針或者都在L2的順時(shí)針,則判定三角形在可視窗口外,并結(jié)束算法。如果不滿足,則返回步驟2。
[0054]斜率判定中計(jì)算量最大的當(dāng)屬順逆時(shí)針的判定,在二維空間中,使用向量的叉乘來(lái)判定順逆時(shí)針。例如平面中有A向量(Xl,Y1)和B向量(x2,y2)。而 [0055]AxB = (X1 * y2~ Vi* X 2) N(I)
[0056]其中巟為垂直于A、B向量所在平面的單位向量(以后的叉乘公式中會(huì)省略掉刃)。所以當(dāng)Xfy2IfX2為正數(shù)時(shí),B向量在A向量的順時(shí)針?lè)较?,為?fù)數(shù)時(shí),B向量在A向重的逆時(shí)針?lè)较颍瑸榱銜r(shí),兩者重合。
[0057]在實(shí)際裁剪模塊中,頂點(diǎn)數(shù)據(jù)經(jīng)過(guò)之前的投影變化,當(dāng)數(shù)據(jù)進(jìn)入裁剪模塊時(shí),頂點(diǎn)數(shù)據(jù)是在一個(gè)裁剪坐標(biāo)系下,頂點(diǎn)的信息用(x,y,z,w)四維向量來(lái)表示,所以需要先透視除法,將坐標(biāo)系變?yōu)闃?biāo)準(zhǔn)設(shè)備坐標(biāo)系,然后再向每個(gè)平面上做投影。如附圖4,設(shè)該平面為X-Y 平面,A 為基點(diǎn),則 A 坐標(biāo)為(xa/wa, ya/wa),B 坐標(biāo)為(xb/wb, yb/wb),C 坐標(biāo)為(x。/?。,yc/wc),O1 坐標(biāo)為(-1,I), O2 的坐標(biāo)為(-1,-1) ο 所以向量 AB 為(xb/wb-xa/wa, yb/wb-ya/wa),AC為(xc/wc-xa/wa,yc/wc-ya/wa),AO1 為(-l-xa/wa, l-ya/wa),AO2 為(-l_xa/wa, -l-ya/wa)。
「00581 Ag X ~AO^ = ^Xa^yb~Xa^Wb+Wa*yb^ya^Xb+ya^Wb~Wa*Xb^(2)
「00591 A~C X ~Αθ ' — ^Xa*yc~Xa*Wc+Wa*yc^~^ya*Xc^ya*Wc~Wa*Xc^⑶
1Wa^wc
[0060] ~AB X AO^ = ^Xa^yb+Xa^Wb+Wa^yb^ya^Xb+ya^Wb+Wa^Xh>i(4)
2Wa^Wfy
[0061 ] AC X AO^ = (%a*yc+^^Wc+Wa*yc)-(ya:^c+ya!"Wc+WtI:^c)(5)
Wa^Wc
[0062]如果公式2和3的結(jié)果為負(fù)數(shù),或者公式4和5的結(jié)果為正數(shù),就能判斷三角形ABC在可視窗口外。由于只需要判定式子的符號(hào),實(shí)際上,以上所有公式的計(jì)算都不需要除法,所以減少了除法操作,在硬件上節(jié)約了周期和面積。[0063]經(jīng)過(guò)編碼方法和斜率判定后還不能剔除的三角形則需要裁剪。
[0064]1.3裁剪與求交。當(dāng)三角形和可視窗口相交時(shí),則需要裁剪掉在可視窗口外的部分,然后重新組成三角形。在裁剪階段,使用的裁剪算法為Sutherland-Hodgman算法,但是在該算法的基礎(chǔ)上修改了一點(diǎn)。原來(lái)的算法是-X,X,-Y,Y,-Z,Z平面依次裁剪,本實(shí)用新型將X和-X,Y和-Y,Z和-Z兩個(gè)平面同時(shí)裁剪,減少了流水的級(jí)數(shù)。在Sutherland-Hodgeman算法中,線段和裁剪平面的位置關(guān)系只有四種如附圖6所示,而修改的算法中,由于是兩個(gè)平面同時(shí)裁剪,位置關(guān)系增加到9種,如附圖7所示。
[0065]在裁剪中,最主要的是求交運(yùn)算。當(dāng)三角形的線段和裁剪面相交時(shí),需要計(jì)算交
點(diǎn)。交點(diǎn)計(jì)算如下:
[0066]
t = - xa^wa (裁剪面為—X)(6)
Ofc+WiO-Oa+Wa)、7' '
[0067]Xnew =^a+1(% _ Xa)O)
[0068]公式6和7是計(jì)算得到交點(diǎn)的X坐標(biāo),而交點(diǎn)的其他屬性,如I坐標(biāo),顏色值等等也可以公式7得到:
[0069]Qnew=Qa+t (Qb-Qa) (Q 為頂點(diǎn)的其他屬性) (8)
[0070]將公式6代入公式8中得:`
η _ Xb*Qa+wb*Qa-Xa*Qb-wa Qb,n、
[0071 ] Q-W — ^fe+w6)-(,a+wa)^(9)
[0072]在裁剪過(guò)程中,每個(gè)頂點(diǎn)一共有16個(gè)屬性,每個(gè)屬性有4個(gè)分量,例如想POSITION屬性有X、Y、z、W分量。所以每求一個(gè)交點(diǎn)就需要將公式9執(zhí)行64次,因而求交是裁剪模塊中最費(fèi)時(shí)的。
[0073]1.4復(fù)用設(shè)計(jì)。從公式2-5和公式9可以看出,這些公式的分子都是乘累加操作,而且公式2-5和公式9計(jì)算的順序并不會(huì)發(fā)生沖突,所以如果兩者能共用一個(gè)運(yùn)算單元,在硬件設(shè)計(jì)上可以大大減少面積。4維內(nèi)積運(yùn)算單元(Floating-point4D Vector Dot Product,DP4)能很好的處理乘累加運(yùn)算,每個(gè)DP4能處理一對(duì)四維向量的點(diǎn)乘。從公式2可以看出,一共有6個(gè)乘法,5個(gè)加法,所以需要2個(gè)DP4進(jìn)行計(jì)算。對(duì)公式9而言,分子一共4個(gè)乘法,3個(gè)加法,只需要I個(gè)DP4,但是由于在計(jì)算交點(diǎn)的過(guò)程中,公式9需要計(jì)算64次,并且每次計(jì)算都是可以并行執(zhí)行的,所以可以利用2個(gè)DP4并行計(jì)算新交點(diǎn)的屬性從而減少一半的運(yùn)算周期。
[0074]2:硬件設(shè)計(jì)
[0075]裁剪單元的硬件框架如附圖8所示,一共包括6個(gè)小模塊,寄存器組(Register Group)、編碼單兀(Outcode Unit)、預(yù)裁剪單兀(Pre-Clipping Unit)、SH(Sutherland-Hodgeman)裁剪單兀(SH Clipping Unit)、共用運(yùn)算單兀(SharedArithmetic Unit)、以及控制單元(Control Unit)。裁剪單元接收到頂點(diǎn)數(shù)據(jù),將數(shù)據(jù)存放在寄存器組,編碼單元對(duì)頂點(diǎn)數(shù)據(jù)編碼,得到的編碼存放回寄存器組,編碼完后預(yù)裁剪單元判定三角形是否需要裁剪,產(chǎn)生相關(guān)信號(hào)并將信號(hào)傳給控制單元。當(dāng)判定需要裁剪時(shí),數(shù)據(jù)會(huì)傳入SH裁剪單元,產(chǎn)生的數(shù)據(jù)傳回寄存器組,最后由重組單元重組若干個(gè)三角形傳給下個(gè)模塊。[0076]2.1寄存器組。裁剪模塊中需要存放三種不同的數(shù)據(jù),輸入的三角形頂點(diǎn)數(shù)據(jù),頂點(diǎn)的編碼和新生成的頂點(diǎn)。其中每個(gè)頂點(diǎn)所占的位寬為16*4*4=256字節(jié),而每個(gè)編碼占6位。
[0077]2.2編碼單元(Outcode Unit),在1.1中已經(jīng)闡述了編碼的原理和算法,編碼單元的主要部件是浮點(diǎn)比較器,一個(gè)頂點(diǎn)需要6個(gè)比較器,附圖9所示是編碼一個(gè)頂點(diǎn)所需的部件。
[0078]2.3共用運(yùn)算單元。共用運(yùn)算單元主要是為預(yù)裁剪單元和SH裁剪單元進(jìn)行向量?jī)?nèi)積的運(yùn)算,當(dāng)預(yù)裁剪單元和SH裁剪單元需要進(jìn)行向量?jī)?nèi)積運(yùn)算時(shí),將向量輸入到共用運(yùn)算單元,并得到相應(yīng)的運(yùn)算結(jié)果。在共用運(yùn)算單元中,主要是由兩個(gè)4維向量?jī)?nèi)積運(yùn)算單元(Floating-point4D Vector Dot Product, DP4)組成,4維向量?jī)?nèi)積運(yùn)算單兀主要用于兩個(gè)向量的內(nèi)積運(yùn)算,其運(yùn)算公式為:xa*ab+ya*yb+za*zb+wa*wb,其中(xa, ya, za, wa)為向量A, (xb,yb,Zb,wb)為向量B,其運(yùn)算結(jié)果為一個(gè)32/64位的浮點(diǎn)數(shù)。附圖10是共用運(yùn)算單元的硬件結(jié)構(gòu)圖,該單元一共有4對(duì)四維向量輸入,來(lái)自預(yù)裁剪單元2對(duì),來(lái)自SH裁剪單元2對(duì),并根據(jù)控制信號(hào)來(lái)選擇哪2對(duì)進(jìn)行向量的乘累加運(yùn)算。如果控制信號(hào)顯示目前處于預(yù)裁剪階段,則選擇來(lái)自預(yù)裁剪單元的向量,反之,則選擇裁剪單元的向量,最后將運(yùn)算結(jié)果送回給相應(yīng)的單元。
[0079]2.4預(yù)裁剪單元。預(yù)裁剪單元包括兩個(gè)小部分,首先從寄存器組中獲得頂點(diǎn)的編碼并對(duì)編碼進(jìn)行與和或運(yùn)算依次來(lái)判定三角形和可視窗口的位置關(guān)系,如果編碼能判定,則輸出相關(guān)信號(hào)給控制單元,如果不能,則需要斜率判定。根據(jù)公式2-5,分子可以拆成兩對(duì)4維向量的內(nèi)積運(yùn)算,交給共用運(yùn)算單元運(yùn)算,運(yùn)算結(jié)束后,將結(jié)果傳回預(yù)裁剪模塊,然后將傳回的兩個(gè)結(jié)果進(jìn)行加法操作,得到分子的正負(fù)性。分母是兩個(gè)頂點(diǎn)的w分量,由于w分量是浮點(diǎn)型的,根據(jù)IEEE-754標(biāo)準(zhǔn),w的第一位是符號(hào)位,所以可以將w的第一位進(jìn)行異或非(同或)運(yùn)算,然后將該結(jié)果和分子的結(jié)果再次進(jìn)行異或非(同或),從而得到整個(gè)算式的正負(fù)性。
[0080]2.5SH裁剪單元。在裁剪單元中,最主要的是求交計(jì)算。附圖11是求交計(jì)算的部分硬件邏輯圖。圖中每個(gè)DP4的周期為4,除法器的周期為3。圖中DP4_1在第一個(gè)周期,輸入是分母的一對(duì)4維向量((Xb,wb,Xa,wa),(1,1,-1,-1)根據(jù)公式9),計(jì)算分母的值,結(jié)果傳入到除法器中求倒數(shù),然后將倒數(shù)放在寄存器中,從第二個(gè)周期起,輸入是分子的一對(duì)4維向量,由于在第5個(gè)周期時(shí),DP4已經(jīng)計(jì)算完分子的值,而分母的倒數(shù)沒(méi)有計(jì)算完,所以在設(shè)計(jì)上加上3級(jí)寄存,以等待倒數(shù)計(jì)算完成,一起做乘法,得到新頂點(diǎn)的每個(gè)分量值。DP4_2從第一個(gè)周期起,就開始計(jì)算分子的值,所以在乘法器之前需要4級(jí)寄存。由于每求一個(gè)頂點(diǎn)需要計(jì)算63個(gè)分量(和裁剪面相同的分量不需要求解),而DP4_1在第一個(gè)周期計(jì)算分母,所以DP_1計(jì)算31個(gè)分量,DP4計(jì)算32個(gè)分量,每個(gè)DP4都剛好計(jì)算32對(duì)向量。
[0081]由于裁剪模塊是嵌入式GPU中圖形流水線的一部分,其輸入是從圖元組裝單元得至IJ,而輸出則傳給光柵化單元,然后才能顯示在屏幕上,所以裁剪模塊必須和其他單元一起才能工作,附圖12給出了一個(gè)嵌入式GPU的硬件架構(gòu)。如圖所示,一個(gè)完整的GPU渲染模塊至少需要頂點(diǎn)拾取單元、頂點(diǎn)著色器、圖元組裝,以及光柵化單元才能顯示一幅圖片,所以為了能展示裁剪模塊的功能,就必須具備這些模塊。但由于編寫這些模塊的RTL代碼時(shí)間較長(zhǎng),并且難度較大,所以我們選擇在FPGA上用軟件模擬這些模塊以達(dá)到目的。[0082]我們選用的FPGA 是 Xilinx 的 xc5vlxl55t。
[0083]由于本實(shí)用新型在預(yù)裁剪階段增加了斜率判定,所以提高了剔除率。下表是在QuakeIV游戲場(chǎng)景中分別釆用編碼方式和編碼方式+斜率判定所得到的需要裁剪的三角形個(gè)數(shù)以及提高的剔除率統(tǒng)計(jì)。
[0084]
【權(quán)利要求】
1.一種嵌入式GPU中面積有效、功能復(fù)用的裁剪模塊,其特征是,包括6個(gè)小模塊:寄存器組(Register Group)、編碼單元(Outcode Unit)、預(yù)裁剪單元(Pre-ClippingUnit)、SH (Sutherland-Hodgeman)裁剪單兀(SH Clipping Unit)、共用運(yùn)算單兀(SharedArithmetic Unit)、以及控制單元(Control Unit);在以上的各個(gè)模塊中,數(shù)據(jù)通路如下: 裁剪模塊接收到頂點(diǎn)數(shù)據(jù),將數(shù)據(jù)存放在寄存器組; 編碼單元對(duì)頂點(diǎn)數(shù)據(jù)編碼,得到的編碼存放回寄存器組,編碼完后預(yù)裁剪單元判定三角形是否需要裁剪,產(chǎn)生相關(guān)信號(hào)并將信號(hào)傳給控制單元; 控制單元根據(jù)預(yù)裁剪單元傳回的信號(hào),判定是否需要進(jìn)行SH裁剪,如果根據(jù)信號(hào)判定三角形和可視窗口相交則需要SH裁剪,將頂點(diǎn)數(shù)據(jù)傳入SH裁剪單元,經(jīng)過(guò)三級(jí)裁剪:X和-X,Y和-Y,Z和-Z ;產(chǎn)生新的數(shù)據(jù)并傳回頂點(diǎn)寄存器組,最后將新的頂點(diǎn)數(shù)據(jù)重組若干個(gè)三角形輸出,如果信號(hào)表明三角形在可視窗口內(nèi),則控制單元直接將頂點(diǎn)數(shù)據(jù)傳給下一個(gè)模塊;如果信號(hào)表明三角形在可視窗口外,則控制單元?jiǎng)h除頂點(diǎn)數(shù)據(jù),并接收下一組頂點(diǎn)數(shù); 共用運(yùn)算單元由兩個(gè)4維向量?jī)?nèi)積運(yùn)算單元(Floating-point4D Vector DotProduct, DP4)組成;一共有4對(duì)四維向量輸入,來(lái)自預(yù)裁剪單元2對(duì),來(lái)自SH裁剪單元2對(duì),并根據(jù)控制信號(hào)來(lái)選擇哪2對(duì)進(jìn)行運(yùn)算,如果控制信號(hào)顯示目前處于預(yù)裁剪階段,則選擇來(lái)自預(yù)裁剪單元的向量,反之,則選擇裁剪單元的向量。
2.如權(quán)利要求1所述的嵌入式GPU中面積有效、功能復(fù)用的裁剪模塊,其特征是,所述寄存器組:裁剪模塊中需要存放三種不同的數(shù)據(jù),輸入的三角形頂點(diǎn)數(shù)據(jù),頂點(diǎn)的編碼和新生成的頂點(diǎn),其中每個(gè)頂點(diǎn)所占的位寬為16*4*4=256字節(jié),而每個(gè)編碼占6位;所述編碼單元(Outcode Unit),由浮點(diǎn)比較器構(gòu)成,一個(gè)頂點(diǎn)需要6個(gè)浮點(diǎn)比較器。
3.如權(quán)利要求1所述的嵌入式GPU中面積有效、功能復(fù)用的裁剪模塊,其特征是,所述預(yù)裁剪單元用于:首先從寄存器組中獲得頂點(diǎn)的編碼并對(duì)編碼進(jìn)行與和或運(yùn)算依次來(lái)判定三角形和可視窗口的位置關(guān)系,如果編碼能判定,則輸出相關(guān)信號(hào)給控制單元,如果不能,則進(jìn)行斜率判定。
4.如權(quán)利要求1所述的嵌入式GPU中面積有效、功能復(fù)用的裁剪模塊,其特征是,所述SH裁剪單元用于求交計(jì)算,由DP4、除法器、寄存器、3、4級(jí)寄存、乘法器組成,DP4的周期為4,除法器的周期為3,DP4_1在第一個(gè)周期,輸入是分母的一對(duì)4維向量((xb, Wb, xa,wa), (1,1,-1,-1)根據(jù)公式9),計(jì)算分母的值,結(jié)果傳入到除法器中求倒數(shù),然后將倒數(shù)放在寄存器中,從第二個(gè)周期起,輸入是分子的一對(duì)4維向量,由于在第5個(gè)周期時(shí),DP4已經(jīng)計(jì)算完分子的值,而分母的倒數(shù)沒(méi)有計(jì)算完,所以在設(shè)計(jì)上加上3級(jí)寄存,以等待倒數(shù)計(jì)算完成,一起做乘法,得到新頂點(diǎn)的每個(gè)分量值;DP4_2從第一個(gè)周期起,就開始計(jì)算分子的值,所以在乘法器之前需要4級(jí)寄存,由于每求一個(gè)頂點(diǎn)需要計(jì)算63個(gè)分量,而DP4_1在第一個(gè)周期計(jì)算分母,所以DP_1計(jì)算31個(gè)分量,DP4計(jì)算32個(gè)分量,每個(gè)DP4都剛好計(jì)算32對(duì)向量。
【文檔編號(hào)】G06T9/00GK203535692SQ201320452545
【公開日】2014年4月9日 申請(qǐng)日期:2013年7月25日 優(yōu)先權(quán)日:2013年7月25日
【發(fā)明者】魏繼增, 王航勝, 常軼松, 孫濟(jì)洲, 郭煒 申請(qǐng)人:天津大學(xué)