亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

利用分層加速結(jié)構(gòu)的圖形渲染的制作方法

文檔序號:6596713閱讀:215來源:國知局
專利名稱:利用分層加速結(jié)構(gòu)的圖形渲染的制作方法
利用分層加速結(jié)構(gòu)的圖形渲染
背景技術(shù)
本發(fā)明一般地涉及圖形處理期間的渲染圖元。可按照諸如三角形或多邊形之類的圖元來分析要處理的圖像,這些圖元共同地表示整體圖形圖像。在很多情況下,在光柵化期間分析三角形或多邊形。通常搜索圖形圖元。圖形處理中的一個常見任務(wù)是確定哪些多邊形或三角形位于給定的塊或片中。這可能涉及在適當圖元中進行幾何近似搜索。需要搜索圖元的另一個示例是光線跟蹤。其中通過搜索算法,識別與光線或一組光線相交的最接近的多邊形。渲染算法使用加速結(jié)構(gòu)來降低解決搜索問題的復(fù)雜性。這些加速結(jié)構(gòu)也可被稱為 空間或幾何索引。通常,它們涉及在端節(jié)點處存儲圖元的分層樹狀數(shù)據(jù)結(jié)構(gòu)。這種分層加速結(jié)構(gòu)的示例包括k維樹即k-d樹、包圍體層次(BVH)、包圍間隔層次(BIH)或二元空間分割(BSP)。附圖簡述圖I是對根據(jù)一個實施例的內(nèi)部節(jié)點的數(shù)據(jù)結(jié)構(gòu)的描繪;圖2是對用于根據(jù)本發(fā)明的一個實施例的葉節(jié)點或64位擴展的數(shù)據(jù)結(jié)構(gòu)的描繪;圖3是對根據(jù)一個實施例的父節(jié)點及其子的數(shù)據(jù)結(jié)構(gòu)的描繪;圖4示出根據(jù)一個實施例的存儲器區(qū)域和節(jié)點表之間的關(guān)系;圖5是對根據(jù)一個實施例的所分配的存儲器區(qū)域之間的關(guān)系的描繪;圖6是本發(fā)明的一個實施例的流程圖;圖7是本發(fā)明的另一個實施例的流程圖;以及圖8是一個實施例的示意性描繪。
具體實施例方式根據(jù)一個實施例,可使用k維樹加速結(jié)構(gòu),即k-d樹。然而,也可使用任何其它分層加速結(jié)構(gòu)。在k-d樹中,根據(jù)價值函數(shù)(cost function)將3D空間分成兩個非重疊的區(qū)域。在第一次分裂之后,每個所得區(qū)域在第二次分裂中被分成兩個區(qū)域,形成k-d樹的兩個內(nèi)部節(jié)點,然后所得的四個區(qū)域中的每一個在第三次分裂中被分成兩個區(qū)域,形成k-d樹的更多節(jié)點。該過程遞歸地繼續(xù),直到滿足專用終止標準。未再分裂的節(jié)點稱為葉節(jié)點。葉節(jié)點存儲與其區(qū)域相交的圖元。在一些實施例中,葉存儲對圖元的參考而非圖元本身。葉節(jié)點中的圖元參考以圖元索引陣列的形式存儲?;跇涞臄?shù)據(jù)結(jié)構(gòu)具有大量的內(nèi)部節(jié)點和對其它節(jié)點的參考。結(jié)果,其存儲占用量可能很大且不可預(yù)測。構(gòu)造這種基于樹的數(shù)據(jù)結(jié)構(gòu)的計算成本高。為了實現(xiàn)交互式圖形應(yīng)用所需的性能,需要使用高速并行計算來創(chuàng)建基于樹的結(jié)構(gòu)。在一些實施例中,可實現(xiàn)緊湊的存儲布局,這減少所消耗的存儲量。緊湊表示的優(yōu)點是不會減慢各遍歷步驟,在所述遍歷步驟中,各個圖元在搜索操作中被遍歷。此外,可將加速結(jié)構(gòu)存儲在盤上并加載到不同的地址空間??蓪⒓铀俳Y(jié)構(gòu)傳送到具有不同地址空間的另一個計算設(shè)備。加速結(jié)構(gòu)及其數(shù)據(jù)格式的這種表示有利地支持了由多個并行線程進行的結(jié)構(gòu)創(chuàng)建,因此允許使用高速并行計
笪在一些實施例中,用于包含大量圖元的模型的加速結(jié)構(gòu)擴展到圖形處理架構(gòu)的64位地址空間。一般地,64位地址空間需要64位大小的參考,但一些實施例可用偏移代替指針來參考子節(jié)點。在這種情況下,即使在擴展到64位地址空間的較大加速結(jié)構(gòu)中,大多數(shù)偏移仍可以通過32位來編碼,而僅有少部分偏移可能需要全64位編碼。加速結(jié)構(gòu)可編碼需要64位偏移的特殊類型的節(jié)點,這種特殊類型的節(jié)點被進一步稱為64位擴展。由于默認使用32位偏移并且將64位偏移編碼為特殊擴展,因此用于適合32位地址空間的小模型的加速結(jié)構(gòu)可有利地在64位計算機架構(gòu)上具有相同的二進制表示,從而使32位結(jié)構(gòu)能夠在64位計算機上不變地使用。參考圖I和2,在一個實施例中,每個k-d樹節(jié)點可存儲在兩個字中,每個字為四 字節(jié)。也可使用其它字長度。在圖I中示出的內(nèi)部節(jié)點的第一字由位組28和30構(gòu)成。圖I中示出的位組28存儲了從字28和30到子節(jié)點的第一字節(jié)的偏移34,或者在節(jié)點是葉的情況下,存儲了從字28和30到圖元索引陣列39的第一字節(jié)的偏移34,如圖2所示。通過存儲偏移而不是指針,數(shù)據(jù)結(jié)構(gòu)可不依賴其所處的基址。結(jié)果,在一些實施例中,向另一個計算設(shè)備存儲和加載或傳送該結(jié)構(gòu)將不需要預(yù)處理。參考圖3,父節(jié)點40的兩個子節(jié)點42和44可存儲在一起。在一些實施例中,這可允許在父節(jié)點中僅存儲單個偏移,而不是兩個偏移。在一個實施例中,每個節(jié)點和葉索引陣列可至少通過四字節(jié)邊界對齊。結(jié)果,任意兩節(jié)點之間的偏移可具有至少兩個等于零的最低有效位。這兩個位(圖I中的位組30)可用于存儲附加信息。如針對內(nèi)部節(jié)點所指示的(

圖1),位組30中的值1、2和3對與x、y或z軸對應(yīng)的分裂面位置進行編碼。圖2中示出的葉節(jié)點中的位30的值可為零,使得位組30用作葉節(jié)點指示符。 參照圖6,根據(jù)一個實施例,操作序列可在硬件、軟件或固件中實現(xiàn)。在軟件或固件實施例的情況下,該序列可按存儲的計算機可執(zhí)行指令的形式存儲在適當?shù)拇鎯υO(shè)備或介質(zhì)中。適當?shù)拇鎯υO(shè)備包括光盤或硬盤驅(qū)動以及半導體存儲器,僅提及幾個示例。最初,節(jié)點被訪問,如框10所指示的。然后,在菱形12中,進行檢查,確定節(jié)點是否為內(nèi)部的。如果是,則內(nèi)部節(jié)點被處理,如框14所指示的。如果節(jié)點不是內(nèi)部的,則它是葉節(jié)點或64位擴展。64位擴展是需要64位偏移來參考其子節(jié)點之一或兩個子節(jié)點的特殊類型的節(jié)點。當然,本發(fā)明可應(yīng)用于任何尺寸的擴展。在任何情況下,它被處理為葉,如框16所指示的。因為遍歷算法訪問內(nèi)部節(jié)點比訪問葉節(jié)點更頻繁,所以處理葉中而不是內(nèi)部節(jié)點中的擴展實質(zhì)上減少了用于檢查擴展的操作數(shù)量。在菱形18中,進行檢查,確定節(jié)點是否具有64位擴展。如果否,則可進行常規(guī)的葉處理。如果是,則處理64位擴展,如框20所指示的,然后該流程可繼續(xù),如同框16處的葉處理操作或框14處的內(nèi)部節(jié)點處理。在圖6所示的流程的每次遍歷期間,在每個遍歷步驟處執(zhí)行葉/內(nèi)部節(jié)點測試12,且分支取決于其結(jié)果。將零作為葉指示符允許在分支前將測試減少到恰好一個指令以及節(jié)點,0x03
jz處理葉為了處理所得到的樹尺寸的不可預(yù)測性,構(gòu)造算法可按照連續(xù)區(qū)域來分配存儲器。如圖7所示,在框22,一區(qū)域最初被分配在可在諸如固件之類的硬件或軟件中實現(xiàn)、作為一系列計算機可執(zhí)行指令而被存儲在計算機可讀存儲介質(zhì)中的序列中。然后在菱形24,進行檢查,確定該區(qū)域何時滿。如果該區(qū)域滿了,則在框26中分配連續(xù)區(qū)域。該算法在其當前區(qū)域中繼續(xù)構(gòu)造,直到當前區(qū)域為滿,然后從存儲器分配系統(tǒng)請求新區(qū)域。所構(gòu)造的樹的大的連接區(qū)域(區(qū)域k、k+l和j)位于每個區(qū)域中,如圖5所指示的。結(jié)果,每個區(qū)域包含子樹。在該示例中,當子樹長得比區(qū)域k大時,分配連續(xù)的區(qū)域k+1。這些子樹之間的連結(jié)數(shù)可相對較小,在一個實施例中,小于連結(jié)總數(shù)的百分之一。因此,指向位于另一個存儲區(qū)域中的子節(jié)點的節(jié)點數(shù)較小。例如,典型的存儲區(qū)域尺寸小于4千兆字節(jié)。所以當樹被分成子樹,且每個子樹位 于連續(xù)區(qū)域中時,節(jié)點可使用32位偏移來參考相同區(qū)域(例如,區(qū)域k和/或k+1)內(nèi)的子節(jié)點。在一個實施例中,64位偏移僅用于在另一個存儲區(qū)域中具有子節(jié)點定位(例如,當父節(jié)點在區(qū)域j中時子節(jié)點在區(qū)域k中)的節(jié)點。因為這種節(jié)點的數(shù)量小,它們可被編碼為32位節(jié)點的擴展。結(jié)果,該樹可被存儲為32位樹,且以64位偏移擴展小部分節(jié)點。如果節(jié)點具有64位偏移,則將指示符與節(jié)點數(shù)據(jù)一起存儲在軸30中。為了避免在每個遍歷步驟處測試64位擴展指示符,在一個實施例中,在圖2中以零值將擴展節(jié)點存儲在軸30中。因此,在這一實施例中,零可指示該節(jié)點是葉。然后可修改圖6中的遍歷算法以測試64位擴展,但僅當內(nèi)部節(jié)點測試未通過時。因此,任何64位擴展節(jié)點是特殊類型的葉。因為與遍歷到內(nèi)部節(jié)點的可能性相比,遍歷到葉的可能性非常小,所以在一些實施例中僅在很少部分的遍歷步驟中執(zhí)行附加的64位擴展測試。真實葉節(jié)點的第二個四字節(jié)字在該葉處存儲若干圖元,所以該值可大于或等于零。圖元計數(shù)器中的負值指示該葉是特殊的且它是64位擴展節(jié)點。在一個實施例中,以自上而下的方式構(gòu)造樹,從父節(jié)點至子節(jié)點。當以多個線程的方式構(gòu)造樹時,每個線程構(gòu)成子樹。因此,不同的線程可形成父節(jié)點和子節(jié)點。所以當形成父節(jié)點時,到子節(jié)點的偏移可能是未知的。該事實可防止將下一個64位偏移數(shù)據(jù)分配給節(jié)點。在一個實施例中,如圖4所示,64位擴展節(jié)點數(shù)據(jù)可存儲在特殊的表中,例如在ext字段64中。在一些情況下,該64位擴展節(jié)點數(shù)據(jù)是實際的64位偏移66,實際的葉/軸68和實際的計數(shù)/分裂字段70。參考圖1,在內(nèi)部節(jié)點的情況下,節(jié)點數(shù)據(jù)的第二個4字節(jié)字32作為分裂面沿軸的位置來處理,其中所述軸在30處被編碼,該浮點值被稱為SPLIT。在葉節(jié)點的情況下,圖2中示出的節(jié)點數(shù)據(jù)的第二字38作為圖元(例如三角形)的計數(shù)來處理,稱為整數(shù)值COUNTER。在64位擴展的情況下,COUNTER小于0且它對包含實際的節(jié)點數(shù)據(jù)的表和索引進行編碼。在圖4中(實際的節(jié)點數(shù)據(jù)),如果節(jié)點72是葉,則70作為該葉中圖元的計數(shù)來處理。如果節(jié)點72是內(nèi)部節(jié)點,則70作為分裂面位置來處理。所以,表中存儲的擴展節(jié)點的編碼原理與主數(shù)據(jù)結(jié)構(gòu)中的相同,但第一字是64位(8字節(jié))用以處理64位偏移。ext字段64可對負索引58進行編碼,其中該索引是表52中的條目72。ext字段64還存儲-(tbl+1)值56,其中tbl的值是表52的編號。如果-(tbl+1)值56位于區(qū)域j (圖5)中,則64位偏移66就可參考區(qū)域k中的子節(jié)點42、44。作為示例,多線程環(huán)境中每個構(gòu)造線程可形成其自身的64位節(jié)點表48、52或54。所以,在一些實施例中,用于更新表的線程之間沒有競爭。如果表變?yōu)闈M,則相應(yīng)的線程僅由于再分配和數(shù)據(jù)復(fù)制而增加了其尺寸。因為表可以較小,所以它不會影響構(gòu)造性能。在一個實施例中,存儲或傳輸位于多個存儲區(qū)域中的樹可涉及對交叉區(qū)域偏移的壓縮和再分配。因為64位節(jié)點表可在從屬節(jié)點上存儲信息且這些從屬節(jié)點恰好是具有交叉區(qū)域參考的節(jié)點,因此壓縮操作可僅涉及對表中存在的節(jié)點進行表掃描和更新,而不是對所有樹節(jié)點進行掃描和更新。因此,在一些實施例中,僅用兩位對以下兩者進行編碼1)葉以及2)內(nèi)部節(jié)點指示符和分裂面取向。兩個最低有效位可用于葉/節(jié)點指示符,允許支持負偏移,這有助于實現(xiàn)多線程的構(gòu)造。在一些實施例中,由于用這兩個最低有效位對信息進行特殊編碼,所以可 以進行單指令的葉/節(jié)點測試。在一些實施例中,存儲器可被分配用于多個區(qū)域的樹節(jié)點, 而不是來自單個連續(xù)陣列。因此,在一些實施例中,僅在需要時使用64位偏移,而將所有其它偏移存儲為32位格式。特殊的表用于存儲具有64位偏移的節(jié)點。最后,64位節(jié)點可被處理為特殊類型的葉。圖8中示出的計算機系統(tǒng)130可包括硬驅(qū)動器134和的可卸式介質(zhì)136,它們通過總線104耦合到芯片組核邏輯110。在一個實施例中,核邏輯可(通過總線105)耦合到圖形處理器112,并耦合到主處理器100。圖形處理器112還可通過總線106耦合到幀緩沖器114。幀緩沖器可通過總線107耦合到顯示屏118,又通過總線108耦合到常規(guī)組件,諸如鍵盤或鼠標120。在軟件實現(xiàn)的情況下,相關(guān)代碼可存儲在任何適當?shù)陌雽w存儲器、磁存儲器或光存儲器中,包括主存儲器132。因此,在一個實施例中,代碼139可存儲在機器可讀介質(zhì)中,諸如主存儲器132,以便由諸如處理器100或圖形處理器112之類的處理器來執(zhí)行。在軟件實施例中,例如,圖6和7所示的序列可以是圖形處理器112的一部分。然而,序列還可在如139所指示的存儲在主存儲器中的軟件中實現(xiàn)。當然,該軟件可駐留在圖形處理器112或任意其它存儲設(shè)備上。本文中所描述的圖形處理技術(shù)可用各種硬件架構(gòu)來實現(xiàn)。例如,圖形功能可整合在芯片組內(nèi)。作為替換,可使用分立的圖形處理器。作為又一實施例,圖形功能可由通用處理器(包括多核處理器)來實現(xiàn)。貫穿本說明書引述的“一個實施例”或“一實施例”意指結(jié)合該實施例描述的特定特征、結(jié)構(gòu)或特性被包含在本發(fā)明內(nèi)所涵蓋的至少一個實現(xiàn)方式中。由此,短語“一個實施例”或“一實施例”的出現(xiàn)不一定引述同一實施例。此外,所述特定特征、結(jié)構(gòu)或特性可被設(shè)立成除了所示特定實施例以外的其他合適形式,且所有此類形式可被涵蓋在本申請的權(quán)利要求書內(nèi)。盡管本發(fā)明已針對有限數(shù)量的實施例作了描述,然而本領(lǐng)域技術(shù)人員將會從其中領(lǐng)會到許多修改和變型。所附權(quán)利要求旨在覆蓋所有這樣的修改和變型,只要其落在本發(fā)明的真實精神和范圍內(nèi)。
權(quán)利要求
1.ー種方法,包括 利用32位格式建立用于圖形處理的分層加速結(jié)構(gòu);以及 僅在需要64位偏移時使用64位偏移。
2.如權(quán)利要求I所述的方法,其特征在于,用于建立分層加速結(jié)構(gòu)的步驟包括建立k-d樹。
3.如權(quán)利要求I所述的方法,其特征在于,包括將節(jié)點存儲在兩個四字節(jié)字中。
4.如權(quán)利要求3所述的方法,其特征在于,包括存儲自一字起的偏移。
5.如權(quán)利要求4所述的方法,其特征在于,所述節(jié)點是葉,存儲到圖元索引陣列的第一字節(jié)的偏移。
6.如權(quán)利要求4所述的方法,其特征在于,包括存儲到子節(jié)點的第一字節(jié)的偏移。
7.如權(quán)利要求I所述的方法,其特征在于,包括隨同一父節(jié)點至少存儲兩個子節(jié)點。
8.如權(quán)利要求I所述的方法,其特征在干,使用位組對與X、y或z軸對應(yīng)的分裂面位置進行編碼。
9.如權(quán)利要求8所述的方法,其特征在干,包括使用所述位組來指示節(jié)點是否是葉節(jié)點。
10.如權(quán)利要求I所述的方法,其特征在于,包括確定節(jié)點是葉節(jié)點還是64位擴展。
11.如權(quán)利要求10所述的方法,其特征在于,僅當內(nèi)部節(jié)點測試未通過時,測試64位擴展。
12.如權(quán)利要求I所述的方法,其特征在于,包括按照連續(xù)區(qū)域分配存儲器。
13.一種存儲指令的計算機可讀介質(zhì),所述指令由計算機執(zhí)行以 建立用于圖形處理器的分層加速結(jié)構(gòu);以及 僅當內(nèi)部節(jié)點測試未通過時,測試64位擴展。
14.如權(quán)利要求13所述的介質(zhì),其特征在于,還存儲僅當需要64位擴展時才使用64位擴展的指令。
15.如權(quán)利要求13所述的介質(zhì),其特征在于,還存儲通過建立k-d樹來建立分層樹的指令。
16.如權(quán)利要求13所述的介質(zhì),其特征在于,還存儲將節(jié)點存儲在兩個四字節(jié)字中的指令。
17.如權(quán)利要求16所述的介質(zhì),其特征在于,還存儲用于存儲自一字起的偏移的指令。
18.如權(quán)利要求17所述的介質(zhì),其特征在于,還存儲當所述節(jié)點是葉時,存儲到圖元索引陣列的第一字節(jié)的偏移的指令。
19.如權(quán)利要求18所述的介質(zhì),其特征在于,還存儲用于存儲到子節(jié)點的第一字節(jié)的偏移的指令。
20.如權(quán)利要求13所述的介質(zhì),其特征在干,還存儲用于隨同一父節(jié)點至少存儲兩個子節(jié)點的指令。
21.如權(quán)利要求13所述的介質(zhì),其特征在于,還存儲使用位組對與X、y或z軸對應(yīng)的分裂面位置進行編碼的指令。
22.如權(quán)利要求21所述的介質(zhì),其特征在干,還存儲使用所述位組來指示節(jié)點是否是葉節(jié)點的指令。
23.如權(quán)利要求13所述的介質(zhì),其特征在于,還存儲確定節(jié)點是葉節(jié)點還是64位擴展的指令。
24.如權(quán)利要求23所述的介質(zhì),其特征在于,還存儲按照連續(xù)區(qū)域分配存儲器的指令。
25.ー種裝置,包括 圖形處理器,用于用32位格式建立分層加速結(jié)構(gòu)并且僅當需要64位偏移時使用64位偏移;以及 耦合至所述處理器的存儲器。
26.如權(quán)利要求25所述的裝置,其特征在于,所述分層加速結(jié)構(gòu)包括k-d樹。
27.如權(quán)利要求25所述的裝置,其特征在于,僅當內(nèi)部節(jié)點測試未通過時,所述圖形處理器才測試64位擴展。
28.如權(quán)利要求25所述的裝置,其特征在于,所述圖形處理器按照連續(xù)區(qū)域分配存儲器。
29.如權(quán)利要求25所述的裝置,其特征在于,所述圖形處理器使用位組來指示節(jié)點是否是葉節(jié)點。
30.如權(quán)利要求29所述的裝置,其特征在于,所述圖形處理器確定節(jié)點是葉節(jié)點還是64位擴展。
全文摘要
利用32位格式建立用于圖形處理的分層加速結(jié)構(gòu)。在一個實施例中,加速結(jié)構(gòu)可以是k-d樹,但也可使用其它加速結(jié)構(gòu)。僅在需要64位偏移時使用64位偏移。
文檔編號G06T5/00GK102696055SQ200980163256
公開日2012年9月26日 申請日期2009年10月30日 優(yōu)先權(quán)日2009年10月30日
發(fā)明者A·M·索皮科夫, A·V·瑞斯特夫, M·Y·謝伏特索夫 申請人:英特爾公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1