專利名稱:用于圖形渲染的多階段細(xì)分的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算裝置,且明確地說,涉及由計(jì)算裝置進(jìn)行的圖形渲染。
背景技術(shù):
計(jì)算裝置越來越多地需要高級(jí)二維(2D)和三維(3D)圖形應(yīng)用程序。舉例來說, 計(jì)算裝置越來越多地提供游戲、角色動(dòng)畫、圖形菜單系統(tǒng)和其它需要高級(jí)圖形渲染的應(yīng)用 程序。此高級(jí)圖形渲染(尤其是對(duì)于3D圖形)涉及大量數(shù)據(jù)處理。高級(jí)圖形渲染的質(zhì)量 可能受到處理資源量、可用處理資源的能力、可用功率量等的限制。舉例來說,需要以高渲染速率(例如,按幀/秒測(cè)量)進(jìn)行的高級(jí)圖形渲染的應(yīng)用 程序可能會(huì)對(duì)可用的計(jì)算資源造成相當(dāng)大的負(fù)擔(dān)。對(duì)可用計(jì)算資源的造成的負(fù)擔(dān)可能會(huì)因 對(duì)計(jì)算資源造成的重負(fù)荷而導(dǎo)致其它應(yīng)用程序中的性能降低、低質(zhì)量的圖形渲染或以上兩 種情況。在移動(dòng)計(jì)算裝置(例如個(gè)人數(shù)字助理(PDA)、無線通信裝置、全球定位裝置等)的 環(huán)境下,圖形渲染所需要的計(jì)算密集的數(shù)據(jù)處理可能消耗移動(dòng)計(jì)算裝置的大量可用功率。多媒體處理器可包括耦合到圖形處理單元(GPU)的通用中央處理單元(CPU)。GPU 專用于執(zhí)行圖形渲染操作以將經(jīng)計(jì)算機(jī)化的圖形顯示于顯示器上。GPU構(gòu)建有高度并行的 結(jié)構(gòu),對(duì)于一系列復(fù)雜圖形相關(guān)算法來說,所述結(jié)構(gòu)提供比常規(guī)的通用CPU更高效的處理。 當(dāng)在CPU上執(zhí)行的圖形相關(guān)算法需要圖形處理時(shí),CPU細(xì)分所述圖形,并將細(xì)分結(jié)果提供給 GPU以供渲染到顯示器。GPU的高度并行性質(zhì)允許GPU比用CPU將圖像直接繪制到顯示器 更快地在顯示器上創(chuàng)建復(fù)雜的三維圖像。GPU可用于各種各樣的應(yīng)用,且在圖形密集應(yīng)用 (例如視頻游戲應(yīng)用)、復(fù)雜圖形用戶接口應(yīng)用、用于工程設(shè)計(jì)或藝術(shù)應(yīng)用的計(jì)算機(jī)輔助設(shè) 計(jì)程序、或任何其它類型的使用2D或3D圖形的軟件應(yīng)用程序中非常常見。
發(fā)明內(nèi)容
本發(fā)明描述一種用于在圖形渲染期間細(xì)分曲線的多階段細(xì)分技術(shù)。在至少兩個(gè)細(xì) 分階段中細(xì)分所述曲線。第一細(xì)分階段將曲線細(xì)分為第一組線段,所述線段各表示所述曲 線的一部分。第二細(xì)分階段進(jìn)一步將所述曲線的由第一組線段中的每一者表示的部分細(xì)分 為額外線段,所述額外線段更精細(xì)地表示所述曲線的形狀。以此方式,曲線的在第一細(xì)分階 段后由僅一個(gè)線段表示的每一部分在第二細(xì)分階段后由一個(gè)以上線段表示。在一個(gè)實(shí)例 中,第一細(xì)分階段可(例如)由中央處理單元(CPU)執(zhí)行,且第二細(xì)分階段可由細(xì)分組件執(zhí) 行,所述細(xì)分組件例如為圖形處理單元(GPU)或?qū)S眉?xì)分硬件。在一些例子中,多階段細(xì)分 技術(shù)可涉及兩個(gè)以上細(xì)分階段。在一個(gè)方面中,一種方法包含用第一計(jì)算單元來細(xì)分曲線,以將所述曲線劃分為 若干第一線段;以及用第二計(jì)算單元將所述曲線的由所述第一線段中的一者表示的部分細(xì) 分為若干第二線段。在另一方面中,一種裝置包含第一計(jì)算單元,其細(xì)分曲線,以將所述曲線劃分為 若干第一線段;以及第二計(jì)算單元,其將所述曲線的由所述第一線段中的一者表示的部分細(xì)分為若干第二線段。在另一方面中,一種裝置包含第一裝置,其用于細(xì)分曲線,以將所述曲線劃分為 若干第一線段;以及第二裝置,其將所述曲線的由所述第一線段中的一者表示的部分細(xì)分 為若干第二線段。本發(fā)明中所描述的技術(shù)可以硬件、軟件、固件或其任一組合來實(shí)施。如果以軟件實(shí) 施,那么所述軟件可在處理器中執(zhí)行,所述處理器可指代一個(gè)或一個(gè)以上處理器(例如微 處理器)、專用集成電路(ASIC)、現(xiàn)場(chǎng)可編程門陣列(FPGA)或數(shù)字信號(hào)處理器(DSP)或其 它等效的集成或離散邏輯電路。包含用以執(zhí)行所述技術(shù)的指令的軟件最初可存儲(chǔ)在計(jì)算機(jī) 可讀媒體內(nèi),并由處理器加載和執(zhí)行。因此,本發(fā)明還涵蓋計(jì)算機(jī)可讀媒體,其包含用以致 使處理器執(zhí)行本發(fā)明中所描述的多種技術(shù)中的任一技術(shù)的指令。在一些情況下,所述計(jì)算 機(jī)可讀媒體可形成計(jì)算機(jī)程序產(chǎn)品的一部分,所述計(jì)算機(jī)程序產(chǎn)品可被銷售給制造商且/ 或用于裝置中。所述計(jì)算機(jī)程序產(chǎn)品可包括計(jì)算機(jī)可讀媒體,且在一些情況下,還可包括包 裝材料。附圖和以下描述中陳述一個(gè)或一個(gè)以上方面的細(xì)節(jié)。將從描述內(nèi)容和圖式且從所 附權(quán)利要求書中明白所述技術(shù)的其它特征、目標(biāo)和優(yōu)點(diǎn)。
圖1是說明執(zhí)行多階段細(xì)分的實(shí)例計(jì)算裝置的框圖。圖2是說明一起操作以執(zhí)行多階段細(xì)分的CPU和GPU的框圖。圖3A到圖3D是說明曲線的實(shí)例兩階段細(xì)分的圖。圖4A到圖4D是說明曲線的另一實(shí)例多階段細(xì)分的圖。圖5是說明根據(jù)本發(fā)明中所描述的多階段細(xì)分技術(shù)來細(xì)分曲線的計(jì)算裝置的實(shí) 例操作的流程圖。圖6是說明執(zhí)行細(xì)分的頂點(diǎn)著色器的實(shí)例操作的流程圖。圖7是說明執(zhí)行多階段細(xì)分的另一實(shí)例計(jì)算裝置的框圖。圖8是說明根據(jù)本發(fā)明中所描述的技術(shù)執(zhí)行細(xì)分的實(shí)例細(xì)分硬件電路的示意圖。圖9是說明經(jīng)配置以作為兩個(gè)并行的三階段乘法與累加(MAC)陣列而操作的細(xì)分 硬件電路的示意圖,所述兩個(gè)陣列各計(jì)算一個(gè)三次多項(xiàng)式。圖10是說明經(jīng)配置以作為三個(gè)并行的兩階段MAC陣列而操作的細(xì)分硬件電路的 示意圖,所述三個(gè)陣列各計(jì)算一個(gè)二次多項(xiàng)式。圖11是說明根據(jù)本發(fā)明中所描述的技術(shù)來執(zhí)行細(xì)分的計(jì)算裝置的實(shí)例操作的流 程圖。
具體實(shí)施例方式本發(fā)明描述用于在圖形渲染期間細(xì)分曲線的技術(shù)。明確地說,本發(fā)明描述一種多 階段細(xì)分技術(shù),其在兩個(gè)或兩個(gè)以上細(xì)分階段期間,將曲線細(xì)分為多個(gè)線段。第一細(xì)分階段 將曲線細(xì)分為第一組線段,所述線段各表示曲線的一部分。在一些情況下,第一細(xì)分階段可 將曲線細(xì)分為足以粗略地表示曲線的形狀的線段。在一個(gè)實(shí)例中,第一細(xì)分階段可由計(jì)算 裝置的第一計(jì)算單元執(zhí)行,所述第一計(jì)算單元例如是計(jì)算裝置的中央處理單元(CPU)或圖
7形處理單元(GPU)。第二細(xì)分階段進(jìn)一步將曲線細(xì)分為若干額外線段。明確地說,第二細(xì)分階段將曲 線的由第一組的線段中的每一者表示的部分細(xì)分為若干額外線段,所述額外線段更精細(xì)地 表示曲線的形狀。換句話說,曲線的在第一細(xì)分階段后由僅一個(gè)線段表示的每一部分在第 二細(xì)分階段后由一個(gè)以上線段表示。第二細(xì)分階段可由計(jì)算裝置的第二計(jì)算單元執(zhí)行。在 一些方面中,第二計(jì)算單元可為GPU,其專用于執(zhí)行圖形操作,包括第二細(xì)分階段。在一些例 子中,GPU可具有高度并行的結(jié)構(gòu),所述結(jié)構(gòu)可用于并行地細(xì)分曲線的多個(gè)部分。在另一方 面中,第二計(jì)算單元可為執(zhí)行第二細(xì)分階段的專用細(xì)分硬件電路。如下文將描述,多階段細(xì) 分可包括兩個(gè)以上細(xì)分階段。圖1是說明根據(jù)本發(fā)明中所描述的技術(shù)來執(zhí)行多階段細(xì)分的實(shí)例計(jì)算裝置2的框 圖。計(jì)算裝置2可包含個(gè)人計(jì)算機(jī)、桌上型計(jì)算機(jī)、膝上型計(jì)算機(jī)、計(jì)算機(jī)工作站、視頻游戲 平臺(tái)或控制臺(tái)、蜂窩式或衛(wèi)星電話、陸線電話、因特網(wǎng)電話、手持式裝置(例如便攜式視頻 游戲裝置或個(gè)人數(shù)字助理(PDA))、個(gè)人音樂播放器、視頻播放器、電視機(jī)、服務(wù)器、中間網(wǎng)絡(luò) 裝置、大型計(jì)算機(jī)或另一類型的輸出圖形信息的裝置。如圖1的實(shí)例中所說明,計(jì)算裝置2包括用戶輸入接口 4、CPU 6、裝置存儲(chǔ)器8、 GPU 10、GPU存儲(chǔ)器12、顯示器接口 14和顯示器16。用戶輸入接口 4、CPU 6、裝置存儲(chǔ)器8、 GPU 10和顯示器接口 14可使用總線18進(jìn)行通信。總線18可為多種總線結(jié)構(gòu)中的任一者, 例如第三代總線(例如,超傳輸總線(HyperTransport bus)或無限頻帶總線(InfiniBand bus))、第二代總線(例如,高級(jí)圖形端口總線、外圍組件互連(PCI)快捷總線或高級(jí)可擴(kuò)展 接口(AXI)總線)或另一類型的總線或裝置互連。CPU 6可包含通用或?qū)S锰幚砥?,其控制?jì)算裝置2的操作。用戶可將輸入提供給 計(jì)算裝置2,以致使CPU 6執(zhí)行一個(gè)或一個(gè)以上軟件應(yīng)用程序。在CPU 6上執(zhí)行的軟件應(yīng) 用程序可包括文字處理應(yīng)用程序、電子表格應(yīng)用程序、媒體播放器應(yīng)用程序、視頻游戲應(yīng)用 程序、圖形用戶接口應(yīng)用程序或另一最終用戶程序。用戶可經(jīng)由一個(gè)或一個(gè)以上輸入裝置 (未圖示)將輸入提供給計(jì)算裝置2,所述輸入裝置例如是鍵盤、鼠標(biāo)、麥克風(fēng)、觸摸板或另 一經(jīng)由用戶輸入接口 4耦合到計(jì)算裝置2的輸入裝置。裝置存儲(chǔ)器8可存儲(chǔ)裝置配置信息,所述信息可在啟動(dòng)或復(fù)位時(shí)用于配置計(jì)算裝 置2。裝置存儲(chǔ)器還可存儲(chǔ)數(shù)據(jù)和/或程序模塊,所述數(shù)據(jù)和/或程序模塊可由CPU 6立即 存取和/或目前正被CPU 6操作。裝置存儲(chǔ)器8可額外存儲(chǔ)來自計(jì)算裝置2的其它組件的 信息,例如由GPU 10輸出的信息。裝置存儲(chǔ)器8可為一個(gè)或一個(gè)以上易失性或非易失性存 儲(chǔ)器或存儲(chǔ)裝置,例如隨機(jī)存取存儲(chǔ)器(RAM)、靜態(tài)RAM(SRAM)、動(dòng)態(tài)RAM(DRAM)、只讀存儲(chǔ) 器(ROM)、可擦除可編程ROM(EPROM)、電可擦除可編程ROM(EEPROM)、快閃存儲(chǔ)器、磁性數(shù)據(jù) 媒體或光學(xué)存儲(chǔ)媒體。GPU 10可專用于執(zhí)行圖形操作以在顯示器16上渲染經(jīng)計(jì)算機(jī)化的圖形。因此, 當(dāng)在CPU 6上執(zhí)行的軟件應(yīng)用程序之一需要圖形處理時(shí),CPU 6將圖形信息提供給GPU 10 以供渲染到顯示器16。在一些例子中,GPU 10可構(gòu)建有并行結(jié)構(gòu),所述并行結(jié)構(gòu)與CPTO相 比提供對(duì)復(fù)雜的圖形相關(guān)操作的更高效處理。GPU 10的并行性質(zhì)可允許GPU 10比用CPU 6將圖像直接制圖到顯示器16更快地在顯示器16上創(chuàng)建復(fù)雜的二維(2D)或三維(3D)圖 像。在一些例子中,GPU 10可集成到計(jì)算裝置2的母板中。在其它例子中,GPU 10可存在于安裝在計(jì)算裝置2的母板中的端口中的圖形卡上,或可以其它方式并入經(jīng)配置以與計(jì)算 裝置2互操作的外圍裝置內(nèi)。GPU 10可為一個(gè)或一個(gè)以上處理器(例如一個(gè)或一個(gè)以上微 處理器)、專用集成電路(ASIC)、現(xiàn)場(chǎng)可編程門陣列(FPGA)、數(shù)字信號(hào)處理器(DSP)或其它 等效的集成或離散邏輯電路。GPU 10可直接耦合到GPU存儲(chǔ)器12。因此,GPU 10無需使用總線18即可從GPU 存儲(chǔ)器12讀取數(shù)據(jù)和將數(shù)據(jù)寫入到GPU存儲(chǔ)器12。換句話說,GPU 10可使用局部存儲(chǔ)裝置 (代替芯片外存儲(chǔ)器)來在本地處理數(shù)據(jù)。這通過使GPU 10無需經(jīng)由總線18讀取和寫入 數(shù)據(jù)(經(jīng)由總線18讀取和寫入數(shù)據(jù)可能會(huì)經(jīng)歷繁重的總線業(yè)務(wù))來允許GPU 10以較高效 的方式操作。然而,在一些例子中,GPU 10可能并不包括單獨(dú)的存儲(chǔ)器,而是經(jīng)由總線18利 用裝置存儲(chǔ)器8。GPU存儲(chǔ)器12可為一個(gè)或一個(gè)以上易失性或非易失性存儲(chǔ)器或存儲(chǔ)裝置, 例如隨機(jī)存取存儲(chǔ)器(RAM)、靜態(tài)RAM(SRAM)、動(dòng)態(tài)RAM(DRAM)、可擦除可編程ROM(EPROM)、 電可擦除可編程ROM(EEPROM)、快閃存儲(chǔ)器、磁性數(shù)據(jù)媒體或光學(xué)存儲(chǔ)媒體。CPU 6和/或GPU 10可將圖像信息提供給顯示器接口 14以用于經(jīng)由顯示器16 呈現(xiàn)。在復(fù)雜的2D和3D圖形的情況下,圖像信息通常由GPU 10為顯示器16而產(chǎn)生。顯 示器16可包含監(jiān)視器、電視機(jī)、投影裝置、液晶顯示器(LCD)、等離子體顯示面板、發(fā)光二極 管(LED)陣列、陰極射線管顯示器、電子紙(electronic paper)、表面?zhèn)鲗?dǎo)電子發(fā)射顯示器 (SED)、激光電視機(jī)顯示器、納米晶體顯示器或另一類型的顯示單元。顯示器16可集成在計(jì) 算裝置2內(nèi)。舉例來說,顯示器16可為移動(dòng)電話的屏幕?;蛘撸@示器16可為經(jīng)由有線或 無線通信鏈路耦合到計(jì)算機(jī)裝置2的獨(dú)立裝置。舉例來說,顯示器16可為經(jīng)由電纜或無線 鏈路連接到個(gè)人計(jì)算機(jī)的計(jì)算機(jī)監(jiān)視器或平板顯示器。當(dāng)在CPU 6上執(zhí)行的軟件應(yīng)用程序之一想要呈現(xiàn)復(fù)雜的2D或3D圖形圖像時(shí), CPTO與GPU 10—起操作以將圖形渲染到顯示器16。舉例來說,在視頻游戲應(yīng)用程序的情 況下,軟件應(yīng)用程序可能想要依次呈現(xiàn)一系列視頻幀,以向用戶提供視頻游戲體驗(yàn)。所述軟 件應(yīng)用程序包括定義形成待顯示的圖形圖像的一個(gè)或一個(gè)以上曲線的命令。例如,在視頻 游戲應(yīng)用程序的情況下,所述視頻游戲應(yīng)用程序可包括定義視頻游戲的場(chǎng)景的圖形圖像的 曲線的命令。舉例來說,所述命令可定義若干曲線,所述曲線界定角色和對(duì)象在背景內(nèi)的邊 界。在一個(gè)實(shí)例中,所述軟件應(yīng)用程序可包括根據(jù)如在2005年7月28日的文獻(xiàn) “OpenVG規(guī)范,版本1.0”中定義的OpenVG來定義多個(gè)路徑(即曲線)的命令。OpenVG為一 組命令,其允許使用一個(gè)或一個(gè)以上分段命令來指定2D或3D形式的圖形圖像。根據(jù)OpenVG 規(guī)范,分段命令可定義直線段、貝塞爾(Bezier)曲線段或橢圓弧段。OpenVG的擴(kuò)展可指定 其它類型的片段。因此,本發(fā)明的技術(shù)不限于OpenVG規(guī)范中目前所定義的分段命令。此 外,盡管本發(fā)明的技術(shù)是在OpenVG的背景中進(jìn)行描述,但所述技術(shù)可用于其它圖形創(chuàng)作標(biāo) 準(zhǔn)的背景中,所述標(biāo)準(zhǔn)例如是OpenGL、Direct3D、圖形裝置接口(⑶I)、Quartz、QuickDraw寸。為了將曲線渲染到顯示器16,CPU 6和/或GPU 10使用本發(fā)明中所描述的多階段 細(xì)分技術(shù)將曲線細(xì)分為若干線段。在一個(gè)方面中,CPU 6可執(zhí)行第一細(xì)分階段,以將所述曲 線劃分為若干線段,且GPU 10可執(zhí)行第二細(xì)分階段,以將所述曲線進(jìn)一步劃分為若干額外 線段。在此實(shí)例中,在第一細(xì)分階段期間,CPU 6將曲線細(xì)分為第一組線段,其粗略表示曲
9線的形狀。所述曲線的線段中的每一者表示曲線的一部分。在第二細(xì)分階段期間,GPU 10 將曲線的由所述線段中的每一者表示的部分細(xì)分為若干額外線段,所述額外線段更精細(xì)地 表示曲線的形狀。換句話說,曲線的在第一細(xì)分階段后由僅一個(gè)線段表示的每一部分在第 二細(xì)分階段后由一個(gè)以上線段表示。GPU 10可利用并行結(jié)構(gòu)來并行地細(xì)分曲線的由兩個(gè)或 兩個(gè)以上線段表示的多個(gè)部分。在一些方面中,以此方式,計(jì)算裝置2可利用GPU 10的加 速能力來完全并行地同時(shí)對(duì)曲線的多個(gè)部分進(jìn)行操作,從而產(chǎn)生改進(jìn)的渲染性能。CPU 6執(zhí)行的細(xì)分的量可依據(jù)CPU 6上的處理負(fù)荷和/或GPU 10上的處理負(fù)荷 而變化。如上文所述,CPU 6可一次執(zhí)行多個(gè)軟件應(yīng)用程序,每一軟件應(yīng)用程序均使用CPTO 的處理資源來執(zhí)行計(jì)算任務(wù)。如果當(dāng)圖形相關(guān)應(yīng)用程序想要進(jìn)行圖形處理時(shí),CPU 6輕微 地負(fù)擔(dān)有其它計(jì)算任務(wù)(例如,當(dāng)CPU 6的處理負(fù)荷小于或等于閾值時(shí)),那么CPTO可將曲 線細(xì)分為較多線段。這將使得GPU 10的細(xì)分工作負(fù)荷減輕,因?yàn)镚PU將必須把曲線的若干 部分細(xì)分為較少的額外線段。如果當(dāng)圖形相關(guān)應(yīng)用程序想要進(jìn)行圖形處理時(shí),CPU 6較重地負(fù)擔(dān)有其它計(jì)算任 務(wù)(例如,當(dāng)CPU 6的處理負(fù)荷大于閾值時(shí)),那么CPU 6可將曲線細(xì)分為較小數(shù)目的線段。 舉例來說,當(dāng)要求CPU 6運(yùn)行例如使計(jì)算機(jī)與人類玩家對(duì)決的人工智能、計(jì)算游戲中的物 理效應(yīng)、提供聲效、顯示游戲圖形等任務(wù)的游戲應(yīng)用程序在CPU 6上執(zhí)行時(shí),CPU 6可能會(huì) 負(fù)擔(dān)較重。這將使得CPU 6的細(xì)分工作負(fù)荷減輕,但增加GPU 10的細(xì)分工作負(fù)荷,因?yàn)镚PU 10將必須把曲線的若干部分細(xì)分為較多的額外線段。可同樣基于GPU 10的負(fù)荷或CPU 6 與GPU 10上的負(fù)荷的組合來平衡細(xì)分處理工作負(fù)荷。以此方式,計(jì)算裝置2可依據(jù)可用處 理資源來動(dòng)態(tài)地平衡CPU 6與GPU 10之間的細(xì)分工作負(fù)荷。在另一實(shí)例中,曲線的多階段細(xì)分可在GPU 10內(nèi)發(fā)生。在此實(shí)例中,CPU 6不執(zhí) 行對(duì)曲線的任何細(xì)分。代替的是,GPU 10內(nèi)的第一計(jì)算單元執(zhí)行第一細(xì)分階段,以將曲線 劃分為若干第一線段,而GPU 10內(nèi)的第二計(jì)算單元執(zhí)行第二細(xì)分階段,以進(jìn)一步將曲線的 由第一線段表示的部分劃分為若干額外線段。在此實(shí)例中,計(jì)算裝置2可利用GPU 10的加 速能力在所述兩個(gè)細(xì)分階段期間完全并行地對(duì)曲線的多個(gè)部分同時(shí)進(jìn)行操作。在一些例子中,曲線的多階段細(xì)分可包括兩個(gè)以上細(xì)分階段。舉例來說,第一細(xì)分 階段可將曲線細(xì)分為第一組線段,所述線段各表示曲線的一部分。在第二細(xì)分階段期間,將 曲線的由第一線段中的每一者表示的部分細(xì)分為第二組線段,使得曲線的在第一細(xì)分階段 之后僅由第一組線段中的一者表示的每一部分在第二細(xì)分階段之后由一個(gè)以上線段表示。 在第三細(xì)分階段期間,將曲線的由第二線段中的每一者表示的部分細(xì)分為若干額外線段。 可執(zhí)行任何數(shù)目的細(xì)分階段。細(xì)分階段可由CPU 6、GPU 10和/或?qū)S眉?xì)分硬件(圖1中 未說明)執(zhí)行。許多其它元件也可包括在計(jì)算裝置2中,但為說明簡單和容易起見,圖1中未具體 說明。舉例來說,計(jì)算裝置2可包括專用細(xì)分硬件,例如下文在圖7中詳細(xì)說明和描述的細(xì) 分硬件72。此外,圖1中所說明的架構(gòu)只是示范性的,因?yàn)楸景l(fā)明中所描述的技術(shù)可用多種 其它架構(gòu)來實(shí)施。圖2是更詳細(xì)地說明圖1的CPU 6和GPU 10的框圖。CPU 6和GPU 10 一起操 作以使用本發(fā)明中所描述的多階段細(xì)分來細(xì)分2D或3D圖形圖像的一個(gè)或一個(gè)以上曲線。 CPU 6包括至少一個(gè)在CPU 6上執(zhí)行的軟件應(yīng)用程序20。在CPU 6上執(zhí)行的軟件應(yīng)用程序
1020可為視頻游戲應(yīng)用程序、圖形用戶接口應(yīng)用程序、便攜式繪圖應(yīng)用程序、可縮放向量圖形 (SVG)應(yīng)用程序、用于工程設(shè)計(jì)或藝術(shù)應(yīng)用的計(jì)算機(jī)輔助設(shè)計(jì)程序或另一類型的使用2D或 3D圖形的軟件應(yīng)用程序。如上文所述,軟件應(yīng)用程序20可包括定義形成待顯示的圖形圖像的一個(gè)或一個(gè) 以上曲線的命令。所述指令可符合多種圖形創(chuàng)作標(biāo)準(zhǔn)(即應(yīng)用編程接口(API))中的任一 者,例如 OpenVG、OpenGL、Direct3D、圖形裝置接口 (GDI)、Quartz、QuickDraw 等。舉例來 說,在OpenVG的情況下,曲線由序列分段命令定義。OpenVG的每一分段命令可指定移動(dòng)、直 線段、二次或三次貝塞爾曲線段或橢圓弧段。因此,每一分段命令可定義曲線的一部分。軟 件應(yīng)用程序20可包括用以產(chǎn)生任何形狀的曲線的分段命令序列。為了準(zhǔn)備用于渲染到顯示器16的曲線,CPU 6和/或GPU 10使用本發(fā)明中所描 述的多階段細(xì)分技術(shù)將曲線細(xì)分為若干線段。在一個(gè)方面中,CPU 6執(zhí)行第一細(xì)分階段,而 GPU 10執(zhí)行第二細(xì)分階段。軟件應(yīng)用程序20可調(diào)用圖形API 26,其與GPU驅(qū)動(dòng)程序21交 互以致使CPU 6執(zhí)行第一細(xì)分階段。明確地說,GPU驅(qū)動(dòng)程序21調(diào)用GPU驅(qū)動(dòng)程序21內(nèi) 的細(xì)分模塊22,以在第一細(xì)分階段期間細(xì)分曲線。細(xì)分模塊22可個(gè)別地細(xì)分曲線的每一片 段(即,命令)。換句話說,細(xì)分模塊22可一次對(duì)曲線的一個(gè)片段進(jìn)行操作,以將曲線的所 述片段劃分為若干線段。在其它例子中,細(xì)分模塊22可細(xì)分整個(gè)曲線。因此,本文中所使 用的術(shù)語“曲線”可指代對(duì)象的曲線或曲線的片段。細(xì)分模塊22將曲線細(xì)分為第一組線段。所述線段中的每一者表示曲線的一部分。 在一些例子中,第一組線段可至少近似曲線的大體形狀。然而,第一組線段無需提供對(duì)曲線 形狀的高分辨率近似。細(xì)分模塊22可(例如)將曲線細(xì)分為保存曲線的大體形狀所需的 最小數(shù)目的線段。換句話說,細(xì)分模塊22可細(xì)分所述曲線以產(chǎn)生盡可能少的線段,同時(shí)仍 保留曲線的大體形狀。在另一實(shí)例中,細(xì)分模塊22可在CPU 6負(fù)擔(dān)較重時(shí)(例如,當(dāng)CPU 6 的處理負(fù)荷超出閾值時(shí))不執(zhí)行曲線的任何細(xì)分。代替的是,CPU 6可將曲線信息提供給 GPU 10以進(jìn)行多階段細(xì)分。然而,這導(dǎo)致GPU 10上的工作負(fù)荷增加。因此,CPU 6可經(jīng)配 置以平衡CPU 6與GPU 10之間的細(xì)分負(fù)荷。為了產(chǎn)生第一組線段,細(xì)分模塊22計(jì)算落在曲線上的一個(gè)或一個(gè)以上頂點(diǎn)點(diǎn)。細(xì) 分模塊22可(例如)使用對(duì)應(yīng)于特定命令片段的數(shù)學(xué)表示來產(chǎn)生一個(gè)或一個(gè)以上頂點(diǎn)點(diǎn), 所述特定命令片段可在圖形創(chuàng)作規(guī)范(例如,OpenVG)中指定。舉例來說,在使用OpenVG定 義為橢圓弧曲線的曲線的情況下,細(xì)分模塊22可使用以下等式來計(jì)算頂點(diǎn)點(diǎn)x = -a*cos ( 0)(1)y = b*sin(0),(2)其中(X,y)為曲線上的頂點(diǎn)點(diǎn)在對(duì)象空間中的位置坐標(biāo),a為橢圓的半長軸、b為 橢圓的半短軸,且0 <2^1。第一組線段中的每一者均為直線段,其將每一頂點(diǎn)點(diǎn)連接 到其相鄰的頂點(diǎn)點(diǎn)。在一些例子中,細(xì)分模塊22或CPU 6的其它組件可如關(guān)于圖7詳細(xì)描 述的那樣計(jì)算曲線的展開多項(xiàng)式表示。細(xì)分模塊22可細(xì)分曲線,以將曲線均等劃分為第一組線段。舉例來說,細(xì)分模塊 22可將曲線均等地劃分為N個(gè)線段,其中N等于任何正整數(shù)值。舉例來說,在以上橢圓弧曲 線實(shí)例中,細(xì)分模塊22可以步長(es-ee)/N將e的值從開始角度es遞增地增加到結(jié)束 角度、,以便將橢圓弧曲線均等地劃分為N個(gè)相等的線段。舉例來說,如果橢圓弧曲線是具有開始角度0S = O和結(jié)束角度ee = 2Ji的完整橢圓,且N = 8,那么細(xì)分模塊22可產(chǎn) 生八個(gè)線段,其連接位于 9 o = 9 s = 0、0 ! = Ji /4、02 = Ji /2、e 3 = 3 Ji /4、04 = Ji、 e 5 = 5 JI /4、e 6 = 3 JI /2、e 7 = 7 JI /4、e8 = Qe = 2n 處的頂點(diǎn)點(diǎn)。在其它例子中,細(xì) 分模塊22可自適應(yīng)地細(xì)分曲線,以針對(duì)曲線的其中曲線曲率較大的部分,將曲線劃分為較 多線段,且針對(duì)曲線的其中曲線曲率較小的部分,將曲線劃分為較少線段。以此方式,步長 是非線性的,使得在曲線的曲率越大的地方,細(xì)分越密集。再次參考橢圓形曲線實(shí)例,細(xì)分 模塊22可基于比率b/a產(chǎn)生e的步長,使得在e =0和e = ji附近產(chǎn)生較多線段(即 e的步長較小),且在e = /2和e = 3 /2附近產(chǎn)生較少線段(即e的步長較大)。GPU驅(qū)動(dòng)程序21的細(xì)分負(fù)荷控制器24可基于CPU 6的負(fù)荷和/或GPU 10的負(fù)荷 來計(jì)算線段數(shù)目N。細(xì)分負(fù)荷控制器24可(例如)從監(jiān)視CPU 6的負(fù)荷的操作系統(tǒng)(未圖 示)接收關(guān)于CPU 6的負(fù)荷的數(shù)據(jù)。因此,CPU 6可監(jiān)視其自身的工作負(fù)荷。細(xì)分負(fù)荷控 制器24可另外監(jiān)視GPU 10的負(fù)荷。因?yàn)镃PU 6通過將任務(wù)發(fā)送到GPU 10且監(jiān)視GPU 10 的進(jìn)程來控制GPU 10,所以細(xì)分負(fù)荷控制器24可基于發(fā)送到GPU 10的命令數(shù)目來確定負(fù) 荷細(xì)分模塊22可使用所產(chǎn)生的線段來產(chǎn)生制圖基元列表。細(xì)分模塊22可(例如) 使用線段的頂點(diǎn)點(diǎn)作為用于基元的頂點(diǎn)點(diǎn)的至少一部分來形成制圖基元列表。細(xì)分模塊22 可產(chǎn)生許多制圖基元中的任一者,包括點(diǎn)、線條帶、線環(huán)、單獨(dú)的線、三角形條帶、三角形扇、 單獨(dú)的三角形、四邊形條帶、單獨(dú)的四邊形或其它類型的多邊形。CPU 6可調(diào)用圖形API 26,以經(jīng)由GPU驅(qū)動(dòng)程序21將所述制圖基元(例如三角形) 列表傳送給GPU 10。圖形API 26可包含一組軟件指令,所述指令提供CPU 6與GPU 10之 間的接口。明確地說,GPU驅(qū)動(dòng)程序21可制定并發(fā)布一個(gè)或一個(gè)以上命令,所述命令致使 GPU 10將制圖基元渲染成可顯示的圖形信息。所述命令可包括基元的頂點(diǎn)點(diǎn)、與基元的每 一頂點(diǎn)點(diǎn)相關(guān)聯(lián)的色彩信息、與基元的每一頂點(diǎn)點(diǎn)相關(guān)聯(lián)的紋理信息、基元的縮放信息、基 元的旋轉(zhuǎn)信息等。GPU驅(qū)動(dòng)程序21可制定指定要對(duì)基元執(zhí)行的操作的命令。舉例來說,GPU 驅(qū)動(dòng)程序21可制定指示GPU 10執(zhí)行曲線的細(xì)分和/或渲染的命令。當(dāng)GPU 10接收到來自CPU 6的命令時(shí),命令解碼器28對(duì)命令進(jìn)行解碼,且配置 GPU 10的一個(gè)或一個(gè)以上處理元件以執(zhí)行命令中指定的操作。命令解碼器28可另外存儲(chǔ) 包含于GPU存儲(chǔ)器12中的命令內(nèi)或GPU 10內(nèi)的一個(gè)或一個(gè)以上緩沖區(qū)(未圖示)內(nèi)的信 息(例如,基元或曲線信息)。命令解碼器28可將一組指令加載到GPU 10的處理元件的 每一者中,所述指令致使處理元件執(zhí)行特定的圖形處理操作。在圖2所說明的實(shí)例中,GPU 10的處理元件包括頂點(diǎn)著色器30、幾何形狀著色器32、光柵化器34和像素著色器36。在 一些例子中,GPU 10還可包括專用細(xì)分硬件38。其它處理元件也可包括于GPU 10內(nèi),但出 于說明的簡單和容易起見,未在圖2中具體說明。頂點(diǎn)著色器30、幾何形狀著色器32、光柵化器34和像素著色器36作為圖形管線 而操作。當(dāng)作為圖形管線而操作時(shí),頂點(diǎn)著色器30對(duì)從命令解碼器28或GPU存儲(chǔ)器12接 收到的第一組輸入數(shù)據(jù)執(zhí)行第一組一個(gè)或一個(gè)以上圖形操作,并將第一組中間結(jié)果輸出到 幾何形狀著色器32。幾何形狀著色器32對(duì)從頂點(diǎn)著色器30接收到的中間結(jié)果執(zhí)行第二 組一個(gè)或一個(gè)以上圖形操作,并將第二組中間結(jié)果輸出到光柵化器34。當(dāng)幾何形狀著色器 32執(zhí)行第二組圖形操作時(shí),頂點(diǎn)著色器30對(duì)從命令解碼器22接收到的第二組初始輸入數(shù)據(jù)執(zhí)行第一組圖形操作。圖形處理以類似方式繼續(xù),直到產(chǎn)生圖形圖像以供顯示為止。此外,GPU 10可具有高度并行的結(jié)構(gòu),與CPU 6相比,所述結(jié)構(gòu)提供對(duì)復(fù)雜圖形相 關(guān)操作的更高效處理。盡管圖2中僅說明一個(gè)圖形管線,但GPU 10可包括多個(gè)類似圖形管 線,其并行地對(duì)多個(gè)數(shù)據(jù)基元進(jìn)行操作。換句話說,GPU 10可包括多個(gè)頂點(diǎn)著色器、幾何形 狀著色器、光柵化器和像素著色器,其可完全并行地對(duì)若干數(shù)據(jù)基元進(jìn)行操作。因此,在一 些例子中,GPU 10的高度并行性質(zhì)允許GPU 10比用CPU 6將圖形圖像直接繪制到顯示器 16更快地在顯示器16上產(chǎn)生復(fù)雜的2D或3D圖形圖像。頂點(diǎn)著色器30 —次對(duì)單個(gè)頂點(diǎn)進(jìn)行操作。頂點(diǎn)著色器可經(jīng)配置以接收定義單個(gè) 頂點(diǎn)的一個(gè)或一個(gè)以上頂點(diǎn)屬性的序列。常規(guī)頂點(diǎn)屬性包括位置屬性、普通屬性、一個(gè)或一 個(gè)以上色彩屬性、一個(gè)或一個(gè)以上紋理屬性、一個(gè)或一個(gè)以上明暗分布屬性等。此外,頂點(diǎn) 著色器30可經(jīng)配置以依據(jù)頂點(diǎn)著色器30正被用于的圖形操作而接收一個(gè)或一個(gè)以上定制 頂點(diǎn)屬性。在一些例子中,可用于定義每一頂點(diǎn)的頂點(diǎn)屬性的數(shù)目可限于屬性的特定最大 數(shù)目。頂點(diǎn)著色器30可對(duì)頂點(diǎn)執(zhí)行許多圖形操作。舉例來說,頂點(diǎn)著色器30可經(jīng)配置 以將輸入頂點(diǎn)變換到不同坐標(biāo)系中。明確地說,頂點(diǎn)著色器30將作為輸入而被接收的頂點(diǎn) 的位置屬性從對(duì)象坐標(biāo)空間變換到裝置坐標(biāo)空間。對(duì)象坐標(biāo)空間表示圖形圖像如何由軟件 應(yīng)用程序20的指令定義。裝置坐標(biāo)空間表示圖形圖像將如何顯示在裝置(例如顯示器16) 上。頂點(diǎn)著色器30可(例如)使用仿射運(yùn)算(例如旋轉(zhuǎn)、平移、按比例縮放等)來變換頂 點(diǎn)坐標(biāo)。在一個(gè)實(shí)例中,頂點(diǎn)著色器30可使用以下等式來變換頂點(diǎn)坐標(biāo)
Scale _xRotate 一 y0
(x,,Y'’ 1) = (X,Y, 1)*Rotate 一 xScale _y0Trans一 xTrans一 y1
(3)其中(X',Y',1)是在裝置坐標(biāo)空間內(nèi)的頂點(diǎn)位置,(X,Y,l)是在對(duì)象坐標(biāo)空 間內(nèi)的頂點(diǎn)位置,Scale_X是沿x軸的比例縮放因子,SCale_y是沿y軸的比例縮放因子, Rotate_x是圍繞x軸的旋轉(zhuǎn),Rotate_y是圍繞y軸的旋轉(zhuǎn),Trans_x是沿x軸的平移,且 Trans_y是沿y軸的平移。這些變量可在軟件應(yīng)用程序20的指令中指定,經(jīng)由圖形API 26 提供給GPU 10,且在頂點(diǎn)著色器30內(nèi)由命令解碼器28配置。在一些例子中,頂點(diǎn)著色器30可對(duì)曲線計(jì)算一次轉(zhuǎn)換。換句話說,頂點(diǎn)著色器30 可計(jì)算等式的用于定義曲線的變換,而不是計(jì)算針對(duì)路徑中的每個(gè)頂點(diǎn)點(diǎn)的變換。在上述 橢圓弧曲線實(shí)例的情況下,頂點(diǎn)著色器30可變換曲線以將變換后的橢圓弧曲線的數(shù)學(xué)表 示定義為x' = xt-a*cos( 0 ) *Sf(4)y' = yt+b*sin( 0 )*Sf,(5)其中(x',y')是在裝置坐標(biāo)空間內(nèi)的位置坐標(biāo),xt是沿x軸的平移,yt是沿y 軸的平移,且Sf是變換的比例因子。等式(4)和(5)假定頂點(diǎn)著色器30僅平移和按比例 縮放所述曲線(即,曲線不旋轉(zhuǎn))。在一些例子中,代替頂點(diǎn)著色器30,CPU 6可執(zhí)行變換。頂點(diǎn)著色器30可對(duì)輸入頂點(diǎn)屬性執(zhí)行許多其它操作。頂點(diǎn)著色器30可執(zhí)行一個(gè) 或一個(gè)以上操作,以改變頂點(diǎn)的色彩屬性中的一者或一者以上、頂點(diǎn)的紋理屬性中的一者 或一者以上、頂點(diǎn)的明暗分布屬性中的一者或一者以上,等等。頂點(diǎn)著色器30可經(jīng)配置以
13便以相同方式改變每個(gè)頂點(diǎn),或僅改變具有某些特性的頂點(diǎn)。因此,頂點(diǎn)著色器30可經(jīng)配 置以對(duì)一個(gè)頂點(diǎn)執(zhí)行一組操作,且接著經(jīng)重新配置以對(duì)下一頂點(diǎn)執(zhí)行不同的一組操作。幾何形狀著色器32對(duì)基元而不是個(gè)別頂點(diǎn)點(diǎn)進(jìn)行操作。幾何形狀著色器32接收 一串頂點(diǎn)點(diǎn)(或定義頂點(diǎn)點(diǎn)的屬性)且形成基元。在三角形基元的情況下,幾何形狀著色 器32可輸入三組頂點(diǎn)屬性,其定義三角形基元的三個(gè)頂點(diǎn)點(diǎn)。在一些情況下,幾何形狀著 色器32可另外輸入鄰近基元的頂點(diǎn)點(diǎn)的頂點(diǎn)屬性。幾何形狀著色器32可丟棄基元,或使 用輸入基元的頂點(diǎn)點(diǎn)的頂點(diǎn)屬性產(chǎn)生一個(gè)或一個(gè)以上新基元。在一些情況下,GPUlO可不 包括幾何形狀著色器32。光柵化器34基于頂點(diǎn)屬性將由幾何形狀著色器32或頂點(diǎn)著色器(在無幾何形狀 著色器32的情況下)輸出的基元轉(zhuǎn)換成像素。光柵化器34可對(duì)基元執(zhí)行裁剪操作,并為 像素著色器36準(zhǔn)備基元。光柵化器34可確定屏幕內(nèi)的哪些像素在對(duì)象的幾何形狀內(nèi),且 因此需要繪制。此外,光柵化器34執(zhí)行頂點(diǎn)數(shù)據(jù)的內(nèi)插以產(chǎn)生像素?cái)?shù)據(jù)。光柵化器34的 輸出被提供給像素著色器36。像素著色器36 (有時(shí)稱為斷片著色器)對(duì)將顯示于顯示器 16上的每一像素執(zhí)行圖形操作。像素著色器36可(例如)執(zhí)行每像素紋理化、霧化和上色 操作,以產(chǎn)生要顯示于每一像素位置處的色彩值。根據(jù)本發(fā)明的技術(shù),GPU 10可經(jīng)配置以執(zhí)行至少第二細(xì)分階段,以便將曲線細(xì)分 為若干額外線段。舉例來說,著色器30、32或36可執(zhí)行第二細(xì)分階段,以便將曲線的由來 自CPU 6的線段表示的部分再分為更準(zhǔn)確地表示曲線的所述部分的若干額外線段。作為另 一實(shí)例,專用細(xì)分硬件38可執(zhí)行第二細(xì)分階段,以便將曲線的由來自CPU 6的線段表示的 部分再分為更準(zhǔn)確地表示曲線的所述部分的若干額外線段。在任一情況下,第二細(xì)分階段 均導(dǎo)致曲線的由CPU 6產(chǎn)生的線段 中的每一者所表示的部分被再分為第二組更詳細(xì)的線 段(或子片段)。著色器30、32或36或細(xì)分硬件38將原始曲線細(xì)分為若干額外線段。換 句話說,著色器30、32或36或細(xì)分硬件38并不將CPU 6所產(chǎn)生的線段劃分為若干額外線 段,而是劃分為由軟件應(yīng)用程序20定義的實(shí)際曲線。以此方式,曲線的在第一細(xì)分階段之 后僅由一個(gè)線段表示的每一部分在第二細(xì)分階段之后由一個(gè)以上線段表示。額外線段產(chǎn)生 對(duì)曲線的較佳表示,例如對(duì)曲線的較高分辨率表示。著色器30、32或36或細(xì)分硬件38可基于在變換期間執(zhí)行的按比例縮放的量而執(zhí) 行第二細(xì)分階段。明確地說,著色器30、32或36或細(xì)分硬件38將曲線的由線段中的每一 者表示的部分細(xì)分為的額外線段的數(shù)目是比例因子的函數(shù)。比例因子是在將頂點(diǎn)點(diǎn)從對(duì)象 坐標(biāo)空間變換到裝置坐標(biāo)空間期間發(fā)生的按比例縮放的量的近似值。CPU 6可計(jì)算比例因 子,并將其提供給GPU 10的一個(gè)或一個(gè)以上組件,以用于確定用于第二細(xì)分階段的額外線 段的數(shù)目。CPU 6可使用多種不同技術(shù)中的任一種來計(jì)算比例因子。所述技術(shù)可產(chǎn)生比例 因子的不同值,但所有的所得值均大體表示變換期間執(zhí)行的按比例縮放的量。CPU 6可使用 變換矩陣來計(jì)算比例因子。舉例來說,CPU 6可將比例因子計(jì)算為(即 在坐標(biāo)空間的變換期間使用的比例縮放變量)的相乘。在另一實(shí)例中,CPU 6可將比例縮 放因子計(jì)算為Scale_X和SCale_y的最大值。在3D的情況下,CPU 6可通過視口比例因子 和/或變換矩陣來計(jì)算比例因子。著色器30、32或36或細(xì)分硬件38隨比例因子的增加而將曲線的由線段表示的部 分再分為更多的額外線段。因此,可依據(jù)比例因子而計(jì)算曲線的每一部分被細(xì)分為的額外線段(或子片段)的數(shù)目M。依據(jù)比例因子來再分曲線的所述部分允許著色器30、32或36 或細(xì)分硬件38在曲線被嚴(yán)重按比例縮放時(shí)保留曲線的較多細(xì)節(jié),同時(shí)在曲線未被按比例 縮放或僅被輕微地按比例縮放時(shí)允許曲線的較少細(xì)節(jié)。以此方式,本發(fā)明中所描述的多階 段細(xì)分技術(shù)允許適應(yīng)于圖形圖像的分辨率要求的動(dòng)態(tài)細(xì)分。當(dāng)需要高分辨率(例如,較大 的按比例縮放)時(shí),著色器30、32或36或細(xì)分硬件38較多地細(xì)分曲線,而當(dāng)高分辨率不必 要(例如,較少按比例縮放或無按比例縮放)時(shí),著色器30、32或36或細(xì)分硬件38較少地 細(xì)分曲線,且節(jié)省了 GPU的處理資源。因此,本發(fā)明的技術(shù)并不是將曲線過度細(xì)分以確保質(zhì) 量,而是基于按比例縮放來按需要產(chǎn)生額外線段。因此,并不經(jīng)由圖形管線發(fā)送額外線段, 因此通過以更高效的方式利用計(jì)算資源而改進(jìn)管線性能和功率消耗。將曲線的每一部分細(xì)分為的額外線段或子片段的數(shù)目可被作為全局常數(shù)而加載 到著色器30、32或36或細(xì)分硬件38中。著色器30、32或36或細(xì)分硬件38將曲線的由 CPU 6提供的線段中的一者所表示的部分細(xì)分為M個(gè)額外線段。由著色器30、32或36或細(xì) 分硬件38產(chǎn)生的M個(gè)額外線段表示對(duì)原始曲線的進(jìn)一步細(xì)分。因此,不是用CPTO產(chǎn)生的 單個(gè)線段表示曲線的所述部分,而是由M個(gè)線段來表示曲線的所述部分。同樣,所述M個(gè)子 片段表示原始曲線的細(xì)分,而不是由CPU 6提供的線段的細(xì)分。以此方式,著色器30、32或 36或細(xì)分硬件38進(jìn)一步近似所述曲線,而不是進(jìn)一步近似由CPU 6提供的線段。關(guān)于由上述等式(1)和(2)定義的橢圓弧曲線,著色器30、32或36或細(xì)分硬件38 可將曲線的由來自CPU 6的線段中的一者表示的部分劃分為若干額外線段。舉例來說,著 色器30、32或36或細(xì)分硬件38可將曲線的與從位于θ ^ = 0處的頂點(diǎn)到位于θ i = π/4 處的頂點(diǎn)的線段對(duì)應(yīng)的部分劃分為M個(gè)額外線段。舉例來說,如果M = 4,那么著色器30、32 或36或細(xì)分硬件38將曲線的從位于θ ^ = O處的頂點(diǎn)到位于Q1 = π/4處的頂點(diǎn)的部分 進(jìn)一步細(xì)分為四個(gè)額外線段。明確地說,在此實(shí)例中,著色器30、32或36或細(xì)分硬件38可 產(chǎn)生四個(gè)額外線段,其連接位于θ QQ = θ Q = 0,θ Q1 = Ji /16,θ02 = π /8,θ Q3 = 3 π /16, θ O4= Q1= ^/4處的頂點(diǎn)點(diǎn)。可在如上述等式⑷和(5)中提供的變換之后,使用橢圓 形曲線的數(shù)學(xué)表示來計(jì)算所述四個(gè)額外線段的頂點(diǎn)點(diǎn)。GPU 10可用類似方式完全并行地細(xì)分曲線的由CPU 6產(chǎn)生的其它七個(gè)線段44所 表示的其它曲線部分。因此,GPU 10同時(shí)對(duì)曲線的多個(gè)部分執(zhí)行第二細(xì)分階段。以此方式, 計(jì)算裝置2可利用GPU 10的并行結(jié)構(gòu)來完全并行地對(duì)曲線的由CPU 6產(chǎn)生的線段中的其 它線段所表示的部分執(zhí)行第二細(xì)分階段。此做法使得GPU加速對(duì)曲線的細(xì)分,從而改進(jìn)渲 染性能。在一個(gè)例子中,幾何形狀著色器32可執(zhí)行對(duì)曲線的多個(gè)部分的第二細(xì)分階段。如 上文所述,幾何形狀著色器32 —次對(duì)多個(gè)頂點(diǎn)(例如,基元)進(jìn)行操作,而不是對(duì)個(gè)別頂點(diǎn) 進(jìn)行操作。由此,幾何形狀著色器32可輸出多個(gè)頂點(diǎn)點(diǎn),從而在單個(gè)步驟中將曲線的部分 細(xì)分為M個(gè)額外線段。在一些情況下,幾何形狀著色器32可經(jīng)配置以使得將曲線的每一不 同部分劃分為不同數(shù)目的額外線段,且因此可基于曲線的部分的形狀動(dòng)態(tài)地細(xì)分曲線的所 述部分。更詳細(xì)地參看圖3描述使用幾何形狀著色器32將曲線的所述部分細(xì)分為若干額 外線段。在另一例子中,頂點(diǎn)著色器30可執(zhí)行對(duì)曲線的若干部分的第二細(xì)分階段。舉例來 說,當(dāng)GPU 10不包括幾何形狀著色器32時(shí),可能會(huì)是這種情況。如上文所述,頂點(diǎn)著色器
1530 一次對(duì)單個(gè)頂點(diǎn)進(jìn)行操作,且因此通常無法產(chǎn)生額外頂點(diǎn)。然而,頂點(diǎn)著色器30可經(jīng)配 置以輸入一個(gè)或一個(gè)以上定制頂點(diǎn)屬性,以執(zhí)行第二細(xì)分階段。明確地說,頂點(diǎn)著色器30 可經(jīng)配置以使得經(jīng)輸入以定義頂點(diǎn)的頂點(diǎn)屬性實(shí)際上定義線段而不是線段的單個(gè)頂點(diǎn)。以 此方式,頂點(diǎn)著色器30可被視為輸入“虛擬頂點(diǎn)”,因?yàn)槠鋵?shí)際上并不表示單個(gè)頂點(diǎn)。舉例 來說,頂點(diǎn)著色器30可經(jīng)配置以輸入包括線段的開始頂點(diǎn)屬性和結(jié)束頂點(diǎn)屬性的頂點(diǎn)屬 性。開始頂點(diǎn)屬性表示線段開始于的頂點(diǎn),且結(jié)束頂點(diǎn)屬性表示線段結(jié)束于的頂點(diǎn)。頂點(diǎn) 著色器30對(duì)開始頂點(diǎn)屬性和結(jié)束頂點(diǎn)屬性進(jìn)行操作,以將曲線的所述部分細(xì)分為若干額 外線段。參看圖4更詳細(xì)描述使用頂點(diǎn)著色器30將曲線的所述部分細(xì)分為若干額外線段 的實(shí)例。在另一例子中,像素著色器36可執(zhí)行對(duì)曲線的若干部分的第二細(xì)分階段。與頂點(diǎn) 著色器30 —樣,像素著色器36 —次對(duì)單個(gè)像素進(jìn)行操作。因此,像素著色器36經(jīng)配置以 輸入一個(gè)或一個(gè)以上定制像素屬性,其定義線段而不是線段的單個(gè)像素。像素著色器36產(chǎn) 生進(jìn)一步定義額外線段的額外像素屬性。在另一例子中,細(xì)分硬件38可執(zhí)行對(duì)曲線的若干部分的第二細(xì)分階段。細(xì)分硬件 38可(例如)包括一個(gè)或一個(gè)以上乘法與累加(MAC)運(yùn)算單元以執(zhí)行第二細(xì)分階段。在 一個(gè)例子中,細(xì)分硬件38可由MAC運(yùn)算單元的管線化陣列形成,所述MAC運(yùn)算單元可配置 以如下文詳細(xì)描述那樣計(jì)算不同次數(shù)的多項(xiàng)式。在此情況下,細(xì)分硬件38輸入來自CPU 6 的多項(xiàng)式系數(shù)以及沿曲線的至少一個(gè)位置(將再所述位置處產(chǎn)生頂點(diǎn)點(diǎn))。沿曲線的將產(chǎn) 生頂點(diǎn)點(diǎn)的位置可(例如)在貝塞爾曲線的情況下為值t,或在橢圓弧曲線的情況下為值 θ。細(xì)分硬件38的MAC運(yùn)算單元對(duì)多項(xiàng)式系數(shù)進(jìn)行運(yùn)算,以在特定位置處產(chǎn)生頂點(diǎn)點(diǎn)的一 個(gè)或一個(gè)以上坐標(biāo)。細(xì)分硬件38的操作大體上類似于下文詳細(xì)描述的細(xì)分硬件電路72的 操作。盡管上文所描述的多階段細(xì)分是分布于CPU 6與GPU 10之間,但多階段細(xì)分可在 GPU 10內(nèi)執(zhí)行且/或分布于GPU 10與專用細(xì)分硬件(例如圖7中所說明的細(xì)分硬件72) 之間。因此,CPU 6不必執(zhí)行對(duì)曲線的任何細(xì)分。代替地,GPU 10內(nèi)的第一計(jì)算單元執(zhí)行第 一細(xì)分階段,以將曲線劃分為若干線段,而第二計(jì)算單元與GPU 10執(zhí)行第二細(xì)分階段,以 進(jìn)一步將曲線劃分為若干額外線段。舉例來說,細(xì)分可在頂點(diǎn)著色器30、幾何形狀著色器 32、像素著色器36和細(xì)分硬件38的任一組合之間或在那些組件與專用細(xì)分硬件(例如細(xì) 分硬件72)之間劃分。盡管上文將多階段細(xì)分技術(shù)描述為包括兩個(gè)階段,但多階段細(xì)分技術(shù)可包括兩個(gè) 以上階段。舉例來說,多階段細(xì)分可包括第一細(xì)分階段,其可將曲線細(xì)分為第一組線段; 第二細(xì)分階段,其將曲線的由第一組線段中的每一者表示的部分細(xì)分為第二組線段;以及 第三細(xì)分階段,其將曲線的由第二組線段中的每一者表示的部分細(xì)分為額外線段??蓤?zhí)行 任一數(shù)目的細(xì)分階段。細(xì)分階段可分布于CPU 6、頂點(diǎn)著色器30、幾何形狀著色器32、像素 著色器36和/或細(xì)分硬件38、72(圖7)中的任一者之間。圖2中說明的架構(gòu)僅是示范性的,因?yàn)楸景l(fā)明中所描述的技術(shù)可用多種其它架構(gòu) 來實(shí)施。舉例來說,GPU 10可利用單個(gè)著色器核心,其可執(zhí)行歸于頂點(diǎn)著色器30、幾何形狀 著色器32和像素著色器36的功能。單個(gè)著色器核心可(例如)基于圖形操作所處的管線 的級(jí)而由命令解碼器28配置以用作頂點(diǎn)著色器30、幾何形狀著色器32和像素著色器36。作為另一實(shí)例,細(xì)分硬件38可不位于GPU 10內(nèi),而是作為計(jì)算裝置2(圖1)的單獨(dú)組件, 且如圖7中所說明經(jīng)由總線18耦合到GPU 10。此外,圖1中所說明的特征可通過硬件和/ 或軟件組件的任一合適組合來實(shí)現(xiàn)。圖3A到圖3D是說明曲線40的實(shí)例兩階段細(xì)分的圖。圖3A說明如由軟件應(yīng)用程 序20 (圖2)定義的曲線40。曲線40被定義為以下四個(gè)貝塞爾曲線段的序列從點(diǎn)A到點(diǎn) B的第一貝塞爾曲線段42A、從點(diǎn)B到點(diǎn)C的第二貝塞爾曲線段42B、從點(diǎn)C到點(diǎn)D的第三貝 塞爾曲線段42C以及從點(diǎn)D返回到點(diǎn)A的第四貝塞爾曲線段42D。為了將曲線40渲染到顯 示器16,CPU 6和/或GPU 10使用本發(fā)明所描述的多階段細(xì)分技術(shù)將曲線40細(xì)分為若干 線段。如上文所述,在一些方面中,CPU 6的細(xì)分模塊22可一次細(xì)分曲線40的一部分。在 圖3B到圖3D所說明的細(xì)分的實(shí)例中,CPU 6和/或GPU 10細(xì)分貝塞爾曲線段42A。CPU 6 和/或GPU 10可用類似方式來細(xì)分貝塞爾曲線段42B到42D。圖3B說明曲線40的由點(diǎn)A與點(diǎn)B之間的貝塞爾曲線段42A定義的部分。貝塞爾 曲線段42A可由軟件應(yīng)用程序20定義為使用參數(shù)表示來定義的多項(xiàng)式曲線。明確地說,貝 塞爾曲線段42A可表示為(x(t),y(t))形式的點(diǎn)集合,其中x(t)和y(t)是t的多項(xiàng)式,且 t從0到1連續(xù)變動(dòng)。圖3中所說明的貝塞爾曲線段42A是三次貝塞爾曲線段,其可在對(duì)象 坐標(biāo)空間中由以下等式表示x(t) = xs*(l-t)3+3*(l-t)2*t*xcl+3*(l_t)*t2*xc2+t3*xe(6)y(t) = ys*(l-t)3+3*(l-t)2*t*xcl+3*(l_t)*t2*yc2+t3*ye,(7)其中(xs,ys)是貝塞爾曲線段42A的開始點(diǎn),(xe,ye)是貝塞爾曲線段42A的結(jié)束 點(diǎn),且(Xca,ycl)和(χ ,yc2)是兩個(gè)內(nèi)部控制點(diǎn)。第一計(jì)算單元將貝塞爾曲線段42A(即,曲線40的位于點(diǎn)A與點(diǎn)B之間的部分) 細(xì)分為多個(gè)線段44A到44G(統(tǒng)稱為“線段44”)。圖3C說明由第一計(jì)算單元細(xì)分之后的貝 塞爾曲線段42A。在一個(gè)例子中,執(zhí)行第一細(xì)分階段的第一計(jì)算單元可為CPU 6的細(xì)分模 塊22。在其它例子中,第一計(jì)算單元可為著色器30、32或36或細(xì)分硬件38中的一者。在 圖3C所說明的實(shí)例中,第一計(jì)算單元將貝塞爾曲線段42A細(xì)分為七個(gè)線段44。明確地說, 第一計(jì)算單元使用上述等式(6)和(7)來計(jì)算沿貝塞爾曲線段42A的頂點(diǎn)點(diǎn)。當(dāng)?shù)谝挥?jì)算單元為細(xì)分模塊22時(shí),細(xì)分負(fù)荷控制器24可配置細(xì)分模塊22以依據(jù) CPU 6的負(fù)荷、GPU 10的負(fù)荷或其組合而將曲線細(xì)分為特定數(shù)目的線段。細(xì)分負(fù)荷控制器 24可(例如)在CPU 6的負(fù)荷小于或等于閾值時(shí)增加細(xì)分模塊22所產(chǎn)生的線段的數(shù)目, 且在CPU 6的負(fù)荷超出閾值時(shí)減少線段的數(shù)目。在圖3C所說明的實(shí)例中,細(xì)分負(fù)荷控制器 24配置細(xì)分模塊22,以將貝塞爾曲線段42A細(xì)分為七個(gè)線段44。細(xì)分負(fù)荷控制器24可配 置細(xì)分模塊22,以使用上述細(xì)分負(fù)荷平衡技術(shù)將貝塞爾曲線段42A細(xì)分為更多線段或更少 線段。在圖3C的實(shí)例中,線段44粗略地表示曲線(即貝塞爾曲線段42A)的形狀。為了將貝塞爾曲線段42A細(xì)分為若干線段44,第一計(jì)算單元計(jì)算開始點(diǎn)(xs,ys) (其等于頂點(diǎn)點(diǎn)Atl)與結(jié)束點(diǎn)(^,yj (其等于頂點(diǎn)點(diǎn)A7)之間的一個(gè)或一個(gè)以上頂點(diǎn)點(diǎn)。 為了這樣做,第一計(jì)算單元可使用表示貝塞爾曲線段42A的等式(即等式(6)和(7))來計(jì) 算Atl(即A)與~(即B)之間的頂點(diǎn)點(diǎn)。在圖3C所說明的實(shí)例中,第一計(jì)算單元計(jì)算頂點(diǎn) 點(diǎn)A1到A60 A0和A7是已知的,因?yàn)槠浞謩e等于開始點(diǎn)(xs, ys)和結(jié)束點(diǎn)(xe, ye)。第一計(jì)算單元接著將貝塞爾曲線段42A表示為所產(chǎn)生的頂點(diǎn)點(diǎn)之間的多個(gè)線段
1744。明確地說,第一計(jì)算單元將貝塞爾曲線段42A表示為從頂點(diǎn)點(diǎn)Ac^其與圖3A和圖3B的 點(diǎn)A相同)到頂點(diǎn)點(diǎn)A1的線段44A、從頂點(diǎn)點(diǎn)A1到頂點(diǎn)點(diǎn)A2的線段44B、從頂點(diǎn)點(diǎn)A2到頂 點(diǎn)點(diǎn)A3的線段44C等等。在圖3C所說明的實(shí)例中,第一計(jì)算單元將貝塞爾曲線段44A均等地劃分為若干線 段44。換句話說,第一計(jì)算單元以恒定的步長遞增地增加t。然而,在一些例子中,第一計(jì)算 單元可使用自適應(yīng)細(xì)分技術(shù),基于曲線的形狀(即,針對(duì)每一線段以不同步長)來細(xì)分貝塞 爾曲線段44A。舉例來說,第一計(jì)算單元可在曲線的曲率較大(例如,在所述實(shí)例中的頂點(diǎn) 點(diǎn)八5與~之間)時(shí)以較小的步長遞增t,而在曲線的曲率較小(例如,在點(diǎn)Atl與A5之間) 時(shí)以較大的步長遞增t。不作任何進(jìn)一步細(xì)分而渲染線段44可能會(huì)對(duì)貝塞爾曲線42A的一些部分(尤其 是在頂點(diǎn)點(diǎn)之間)導(dǎo)致不良圖像質(zhì)量。這在曲線被放大到高分辨率時(shí)(例如,在由 GPU 10變換到裝置坐標(biāo)空間中期間應(yīng)用大比例因子時(shí))尤其如此。因此,第二計(jì)算單元執(zhí) 行第二細(xì)分階段,以將貝塞爾曲線段42A細(xì)分為若干額外線段。第二計(jì)算單元可(例如) 為著色器30、32或36或細(xì)分硬件38中的一者。如下文將更詳細(xì)地描述,第二細(xì)分階段細(xì) 分貝塞爾曲線段42A的由線段44表示的部分而不是實(shí)際上細(xì)分線段44。出于實(shí)例目的,將 根據(jù)細(xì)分貝塞爾曲線段42A的由線段44A表示的部分來描述將貝塞爾曲線段42A細(xì)分為若 干額外線段。然而,第二計(jì)算單元可用類似方式完全并行地細(xì)分線段44B到44G。在執(zhí)行第二細(xì)分階段之前,GPU 10的頂點(diǎn)著色器30或CPU 6將曲線從對(duì)象坐標(biāo)空 間變換到裝置坐標(biāo)空間。頂點(diǎn)著色器30或CPU 6可(例如)使用上述等式(3)來變換定 義曲線的點(diǎn),而不是轉(zhuǎn)換每一線段的每一頂點(diǎn)點(diǎn)。頂點(diǎn)著色器30或CPU 6可將開始點(diǎn)(xs, ys)、結(jié)束點(diǎn)(xe,ye)和內(nèi)部控制點(diǎn)(x&yj和(x。2,y。2)變換到裝置坐標(biāo)空間(x' s,y' s)、 (χ' e,y' e)> (χ' cl,y'。》和(χ'。2,y ‘。2)中。以此方式,貝塞爾曲線42A的所述部 分被變換到裝置坐標(biāo)空間中,且可定義為χ ‘ (t) = χ ‘ s*(l-t)3+3*(l_t)2*t*x ‘ cl+3*(l_t)*t2*x ‘ c2+t3*x ‘ e (8)y ‘ (t) = y ‘ s* (l_t) 3+3* (l_t) 2*t*x ‘ cl+3* (l_t) *t2*y ‘ c2+t3*y ‘ e, (9)在變換之后,第二計(jì)算單元執(zhí)行第二細(xì)分階段,以將貝塞爾曲線段42A的由線段 44A( S卩,貝塞爾曲線段42A的從乂到A1的部分)表示的部分細(xì)分為若干額外線段。貝塞 爾曲線段42A的由線段44A表示的部分是貝塞爾曲線段42A的在頂點(diǎn)點(diǎn)A0與A1之間的部 分。在圖3D所說明的實(shí)例中,第二計(jì)算單元將貝塞爾曲線段42A的在頂點(diǎn)點(diǎn)A0與A1之間 的部分細(xì)分為四個(gè)線段。明確地說,第二計(jì)算單元在頂點(diǎn)點(diǎn)A0與A1之間產(chǎn)生頂點(diǎn)點(diǎn)k0i、k02 和A03 0第二細(xì)分階段使得貝塞爾曲線段42A在頂點(diǎn)點(diǎn)A0與A1之間的部分由四個(gè)線段而不 是僅單個(gè)線段表示,因此相對(duì)于曲線的部分提供更多細(xì)節(jié)。如圖3D所說明,在第二細(xì)分階 段期間產(chǎn)生的額外線段提供對(duì)曲線(尤其是在頂點(diǎn)點(diǎn)A5與A7之間)的較佳表示。在一個(gè)方面中,第二計(jì)算單元將曲線的由所述線段中的每一者表示的部分細(xì)分為 的額外線段的數(shù)目可為比例因子的函數(shù)。第二計(jì)算單元隨比例因子的增加而將曲線的由線 段44表示的部分再分為更多的額外線段。依據(jù)比例因子而再分曲線的所述部分允許第二 計(jì)算單元在曲線被嚴(yán)重按比例縮放時(shí)保留曲線的較多細(xì)節(jié),同時(shí)在曲線未被按比例縮放或僅被輕微按比例縮放時(shí)允許曲線的較少細(xì)節(jié)。所述技術(shù)可以相似方式應(yīng)用于OpenVG中所定義的其它曲線,例如根據(jù)等式(1)和 ⑵定義的橢圓弧曲線,或包括(xs,ys)處的開始點(diǎn)、結(jié)束點(diǎn)(xe,ye)和控制點(diǎn)(x。,y。)且可 在對(duì)象坐標(biāo)空間中定義如下的二次貝塞爾曲線x(t) = xs*(l-t)2+2*(l_t)*t*xc+t2*xe ;(10)y(t) = ys*(l-t)2+2*(l_t)*t*yc+t2*ye。(11)此外,可配合通過任何擴(kuò)展而添加到OpenVG標(biāo)準(zhǔn)的任何曲線定義而利用所述技 術(shù)。同樣,可使用所述技術(shù)來細(xì)分使用其它圖形創(chuàng)作標(biāo)準(zhǔn)定義的曲線。圖4A到圖4D是說明曲線的多階段細(xì)分的實(shí)例的圖。圖4A說明在點(diǎn)A與點(diǎn)B之 間的貝塞爾曲線段42A。如上文參看圖3所述,可在對(duì)象坐標(biāo)空間中由上述等式(6)和(7) 表示貝塞爾曲線段42A。第一計(jì)算單元將貝塞爾曲線段42A( S卩,曲線40的位于點(diǎn)A與點(diǎn)B之間的部分) 細(xì)分為多個(gè)線段44A到44G(統(tǒng)稱為“線段44”)。在一個(gè)例子中,執(zhí)行第一細(xì)分階段的第一 計(jì)算單元可為CPU 6的細(xì)分模塊22。在其它例子中,第一計(jì)算單元可為著色器30、32或36 或細(xì)分硬件38中的一者。圖4B說明由第一計(jì)算單元細(xì)分之后的貝塞爾曲線段42A。在圖 4B所說明的實(shí)例中,第一計(jì)算單元計(jì)算頂點(diǎn)點(diǎn)A0到A7以將貝塞爾曲線段42A細(xì)分為七個(gè) 線段44A到44G,其使頂點(diǎn)點(diǎn)中的每一者與相鄰頂點(diǎn)點(diǎn)連接。如上文在圖3A到3D中所述,不作任何進(jìn)一步細(xì)分而渲染線段44可能會(huì)對(duì)貝塞爾 曲線42A的至少一些部分(尤其是在頂點(diǎn)點(diǎn)A5與A7之間)導(dǎo)致不良圖像質(zhì)量。因此,第二 計(jì)算裝置執(zhí)行第二細(xì)分階段,以將貝塞爾曲線段42A細(xì)分為若干額外線段。出于實(shí)例目的, 將參看細(xì)分貝塞爾曲線段42A的由線段44A表示的部分來描述將貝塞爾曲線段42A細(xì)分為 若干額外線段。然而,第二計(jì)算單元可用類似方式完全并行地細(xì)分貝塞爾曲線段42A的由 線段44B到44G表示的部分。在執(zhí)行第二細(xì)分階段之前,頂點(diǎn)著色器30或GPU 10或CPU 6的某一其它組件將 貝塞爾曲線段42A從對(duì)象坐標(biāo)空間變換到裝置坐標(biāo)空間,以產(chǎn)生在上文等式(10)和(11) 中定義的數(shù)學(xué)表示。在變換到裝置坐標(biāo)空間中之后,第二計(jì)算單元執(zhí)行第二細(xì)分階段,以將 貝塞爾曲線段42A的由線段44A( S卩,貝塞爾曲線段42A的從Atl到A1的部分)表示的部分 細(xì)分為若干額外線段。舉例來說,在頂點(diǎn)著色器30的情況下,頂點(diǎn)著色器30可經(jīng)配置以輸入實(shí)際上定義 線段而不是線段的單個(gè)頂點(diǎn)的頂點(diǎn)屬性。舉例來說,頂點(diǎn)著色器30可經(jīng)配置以輸入包括 分別表示線段開始的頂點(diǎn)和結(jié)束的頂點(diǎn)的線段的開始頂點(diǎn)屬性(例如Atl)和結(jié)束頂點(diǎn)屬性 (例如A1)的頂點(diǎn)屬性。頂點(diǎn)著色器30可計(jì)算位于頂點(diǎn)Atl與A1之間的至少一個(gè)額外頂點(diǎn)。 如上文所述,可用于定義每一頂點(diǎn)的頂點(diǎn)屬性的數(shù)目可限于屬性的特定最大數(shù)目。因此,頂 點(diǎn)著色器30可僅能夠在單遍中計(jì)算有限數(shù)目的額外頂點(diǎn)點(diǎn)。圖4C說明在第二細(xì)分階段之 后的貝塞爾曲線段42A。在圖4C所說明的實(shí)例中,頂點(diǎn)著色器30可僅能夠計(jì)算表示新頂點(diǎn) 點(diǎn)Atll的一個(gè)額外頂點(diǎn)屬性。因此,頂點(diǎn)著色器30可僅將貝塞爾曲線42A的部分細(xì)分為一 組額外的線段。然而,在其它例子中,頂點(diǎn)著色器30可在每遍計(jì)算一個(gè)以上額外頂點(diǎn)屬性。在一些情況下,最大數(shù)目的可用頂點(diǎn)屬性可足以完全細(xì)分貝塞爾曲線段42A的所 述部分。然而,如果最大數(shù)目的可用頂點(diǎn)屬性不夠,那么頂點(diǎn)著色器30可以遞歸方式(即,通過執(zhí)行第三細(xì)分階段)計(jì)算更多額外線段。換句話說,頂點(diǎn)著色器30可以遞歸方式(即, 第二細(xì)分階段后接第三細(xì)分階段)執(zhí)行一個(gè)以上細(xì)分階段。舉例來說,在第二細(xì)分階段之 后,頂點(diǎn)著色器30可輸入新的一組頂點(diǎn)屬性,其包括表示在第二細(xì)分階段期間產(chǎn)生的線段 的開始頂點(diǎn)屬性A0和結(jié)束頂點(diǎn)屬性Atll。頂點(diǎn)著色器30在第三細(xì)分階段期間計(jì)算頂點(diǎn)A0與 A01之間的至少一個(gè)額外頂點(diǎn)。圖4D說明在由頂點(diǎn)著色器30進(jìn)行的第三細(xì)分階段之后的 貝塞爾曲線段42A。在圖4D所說明的實(shí)例中,頂點(diǎn)著色器30現(xiàn)在已將貝塞爾曲線段42A的 在Atl與A1之間的部分細(xì)分為四個(gè)線段而不是一個(gè)線段。以此方式,頂點(diǎn)著色器30可以遞 歸方式將曲線的所述部分細(xì)分為若干額外線段,其提供對(duì)曲線42A(尤其是在頂點(diǎn)點(diǎn)A5與 A7之間)的較佳表示。盡管在上述實(shí)例中頂點(diǎn)著色器30執(zhí)行第二和第三細(xì)分階段,但GPU 10的其它計(jì)算單元也可執(zhí)行第二和第三細(xì)分階段。舉例來說,第二和第三細(xì)分階段可由頂 點(diǎn)著色器30、幾何形狀著色器32、像素著色器36和細(xì)分硬件38的任一組合執(zhí)行。圖5是說明根據(jù)本發(fā)明中所描述的多階段細(xì)分技術(shù)來細(xì)分曲線的計(jì)算裝置的實(shí) 例操作的流程圖。計(jì)算裝置2的第一計(jì)算單元將曲線細(xì)分為若干第一線段(50)。為了產(chǎn)生 第一組線段,第一計(jì)算單元計(jì)算位于曲線上的一個(gè)或一個(gè)以上頂點(diǎn)點(diǎn)。所述第一計(jì)算單元 可(例如)使用曲線的數(shù)學(xué)表示(例如,曲線的多項(xiàng)式表示)來產(chǎn)生一個(gè)或一個(gè)以上頂點(diǎn) 點(diǎn)。所述第一線段將頂點(diǎn)點(diǎn)中的每一者連接到相鄰的頂點(diǎn)點(diǎn)。線段中的每一者表示曲線的 一部分。在一個(gè)實(shí)例中,第一計(jì)算單元可為CPU 6的細(xì)分模塊22。在此情況下,細(xì)分負(fù)荷控 制器24可基于CPU 6上的處理負(fù)荷和/或GPU 10上的處理負(fù)荷而控制由細(xì)分模塊22執(zhí) 行的細(xì)分的量。在另一實(shí)例中,第一計(jì)算單元可為GPU 10的組件中的一者(例如,著色器 30,32或36或細(xì)分硬件38中的一者)。第一計(jì)算單元將線段提供給第二計(jì)算單元(52)。舉例來說,當(dāng)?shù)谝挥?jì)算單元是細(xì) 分模塊22時(shí),細(xì)分模塊22可使用線段的頂點(diǎn)點(diǎn)來產(chǎn)生制圖基元的列表,并將所述制圖基元 經(jīng)由圖形API 26和GPU驅(qū)動(dòng)程序21提供給GPU 10。細(xì)分模塊22可產(chǎn)生許多制圖基元中 的任一者,包括點(diǎn)、線條、線環(huán)、單獨(dú)的線、三角形條帶、三角形扇、單獨(dú)的三角形、四邊形條 帶、單獨(dú)的四邊形或其它類型的多邊形。第一或第二計(jì)算單元將曲線從對(duì)象坐標(biāo)空間變換到裝置坐標(biāo)空間(54)。舉例來 說,GPU 10的頂點(diǎn)著色器30可使用上文的等式(3)將曲線變換到裝置坐標(biāo)空間中。所述 變換可每曲線計(jì)算一次。換句話說,可在用于定義曲線的點(diǎn)中的每一者處計(jì)算變換,而不是 計(jì)算針對(duì)路徑中的每個(gè)頂點(diǎn)點(diǎn)的變換。第一或第二計(jì)算單元計(jì)算表示在變換中執(zhí)行的按比 例縮放的量的比例因子(56)。可基于在變換中所使用的比例縮放變量(例如,等式(3)的
SCale_y)來計(jì)算所述比例因子。第二計(jì)算單元執(zhí)行第二細(xì)分階段,以將曲線的所述部分細(xì)分為若干額外線段 (58)。第二計(jì)算單元可(例如)為GPU 10的組件中的一者。因此,GPU 10計(jì)算由第一計(jì) 算單元計(jì)算的每一線段的頂點(diǎn)點(diǎn)中的每一者之間的額外頂點(diǎn)點(diǎn)。可(例如)在變換之后使 用曲線在裝置坐標(biāo)空間內(nèi)的數(shù)學(xué)表示來計(jì)算額外的頂點(diǎn)點(diǎn)。GPU 10因此以若干線段而不是 由第一計(jì)算單元產(chǎn)生的單個(gè)線段來表示曲線的由第一計(jì)算單元產(chǎn)生的線段所表示的部分 中的每一者。以此方式,由GPU 10執(zhí)行的第二細(xì)分階段產(chǎn)生曲線的額外線段以更準(zhǔn)確地表 示所述曲線。在一些例子中,針對(duì)曲線的若干部分而產(chǎn)生的額外線段的數(shù)目可為比例因子 的函數(shù),使得隨著比例因子增加,計(jì)算更多的額外線段以保留更多細(xì)節(jié)。
20
GPU 10可使用一個(gè)或一個(gè)以上著色器(例如,頂點(diǎn)著色器30、幾何形狀著色器32 或像素著色器36)來執(zhí)行第二細(xì)分階段。GPU 10的著色器可并行地細(xì)分曲線的一個(gè)以上 部分。因此,GPU 10同時(shí)對(duì)曲線的多個(gè)部分執(zhí)行第二細(xì)分階段。這樣做使得GPU加速對(duì)曲 線的細(xì)分,從而改進(jìn)渲染性能。在其它例子中,GPU 10內(nèi)的細(xì)分硬件38可執(zhí)行第二細(xì)分階 段。在其它例子中,GPU 10外部的細(xì)分硬件可執(zhí)行第二細(xì)分階段,例如圖7的細(xì)分硬件72。 在執(zhí)行第二細(xì)分階段之后,GPU 10使用經(jīng)細(xì)分的線段來將曲線渲染到顯示器(59)。盡管將 圖5的流程圖描述為兩階段細(xì)分,但所述技術(shù)可經(jīng)擴(kuò)展而包括兩個(gè)以上細(xì)分階段。圖6是說明執(zhí)行細(xì)分的著色器(例如圖2的頂點(diǎn)著色器30)的實(shí)例操作的流程圖。 像素著色器36可使用類似技術(shù)將曲線細(xì)分為若干額外線段。頂點(diǎn)著色器30輸入定義線段 的多個(gè)頂點(diǎn)屬性(60)。舉例來說,頂點(diǎn)著色器30可輸入頂點(diǎn)屬性,其包括表示線段開始于 的頂點(diǎn)點(diǎn)的位置坐標(biāo)的開始頂點(diǎn)屬性(例如Atl)和表示線段(其表示頂點(diǎn))結(jié)束于的頂點(diǎn) 點(diǎn)的位置坐標(biāo)的結(jié)束頂點(diǎn)屬性(例如A1)。以此方式,由頂點(diǎn)著色器30輸入的頂點(diǎn)屬性表 示一線段而不是單個(gè)頂點(diǎn)點(diǎn)。頂點(diǎn)著色器30計(jì)算頂點(diǎn)A0與A1之間的額外頂點(diǎn)點(diǎn)的坐標(biāo),以將曲線細(xì)分為額外 線段(62)。頂點(diǎn)著色器30可將額外頂點(diǎn)點(diǎn)計(jì)算為另一頂點(diǎn)屬性。頂點(diǎn)著色器30可(例 如)在變換之后使用曲線在裝置坐標(biāo)空間中的數(shù)學(xué)表示來計(jì)算頂點(diǎn)點(diǎn)Atl與A1之間的額外 頂點(diǎn)點(diǎn)的坐標(biāo)。頂點(diǎn)著色器30確定頂點(diǎn)著色器30是否已將曲線的所述部分細(xì)分為所要數(shù) 目(M)的額外線段(64)。如果頂點(diǎn)著色器30在第一遍期間產(chǎn)生的所要線段數(shù)目小于M,那么頂點(diǎn)著色器30 確定是否已達(dá)到最大頂點(diǎn)屬性數(shù)目(66)。如上文所述,頂點(diǎn)屬性的數(shù)目可限于特定的最大 頂點(diǎn)屬性數(shù)目。因此,頂點(diǎn)著色器30可僅能夠在單遍中計(jì)算有限數(shù)目的額外頂點(diǎn)點(diǎn)。如果尚未達(dá)到最大頂點(diǎn)屬性數(shù)目,那么頂點(diǎn)著色器30計(jì)算額外頂點(diǎn)點(diǎn)的另一坐 標(biāo)(62)。然而,如果已達(dá)到最大頂點(diǎn)屬性數(shù)目,那么頂點(diǎn)著色器30輸出所計(jì)算的頂點(diǎn)屬性 (68)。頂點(diǎn)著色器30可輸入表示在第一遍期間產(chǎn)生的額外線段中的一者的新的一組頂點(diǎn) 屬性(60)。換句話說,最大數(shù)目的可用頂點(diǎn)屬性不足以產(chǎn)生足夠的額外頂點(diǎn)點(diǎn)來完全細(xì)分 曲線的所述部分。頂點(diǎn)著色器30可因此以遞歸方式(S卩,通過執(zhí)行一個(gè)以上細(xì)分階段)來 計(jì)算更多的額外線段。如果在第一遍期間產(chǎn)生的所要線段數(shù)目大于或等于M,那么頂點(diǎn)著色器30輸出所 計(jì)算的頂點(diǎn)屬性(68)。換句話說,最大數(shù)目的可用頂點(diǎn)屬性足以產(chǎn)生足夠的額外頂點(diǎn)點(diǎn)來 完全細(xì)分曲線的所述部分。頂點(diǎn)著色器30接著輸入表示由CPU 6產(chǎn)生的另一線段的多個(gè) 頂點(diǎn)屬性(60)。圖7是說明根據(jù)本發(fā)明中所描述的技術(shù)來執(zhí)行細(xì)分的另一實(shí)例計(jì)算裝置70的框 圖。圖7的計(jì)算裝置70大體上類似于圖1的計(jì)算裝置2,區(qū)別僅在于圖7的計(jì)算裝置70不 包括GPU 10。代替地,計(jì)算裝置70包括專用細(xì)分硬件電路72,其如下文詳細(xì)描述那樣執(zhí)行 第二細(xì)分階段。圖形渲染功能可由CPU 6而不是GPU 10執(zhí)行。如上文詳細(xì)描述,為了將曲線渲染到顯示器16,CPU 6執(zhí)行第一細(xì)分階段以將曲 線劃分為第一組線段,其各表示曲線的一部分。明確地說,CPU 6計(jì)算沿曲線的定義線段的 頂點(diǎn)點(diǎn)。CPU 6可使用與曲線類型相關(guān)聯(lián)的等式來計(jì)算頂點(diǎn)點(diǎn),例如在橢圓弧曲線的情況下 使用等式⑴和(2)、在三次貝塞爾曲線的情況下使用等式(6)和(7)或在二次貝塞爾曲線的情況下使用等式(10)和(11)來計(jì)算頂點(diǎn)點(diǎn)。CPU 6在第一細(xì)分階段期間執(zhí)行的細(xì)分的 量可依據(jù)CPU 6上的處理負(fù)荷而變動(dòng)。CPU 6可包括圖2所說明的CPU 6的所有特征。在第二細(xì)分階段期間,細(xì)分硬件電路72將曲線的由線段中的每一者表示的部分 細(xì)分為若干額外線段,所述額外線段更精細(xì)地表示曲線的形狀。細(xì)分硬件電路72可(例 如)包括一個(gè)或一個(gè)以上乘法與累加(MAC)運(yùn)算單元,以執(zhí)行第二細(xì)分階段。在一個(gè)例子 中,細(xì)分硬件電路72可由MAC運(yùn)算單元的管線化陣列形成,所述MAC運(yùn)算單元可配置以如 下文詳細(xì)描述那樣計(jì)算不同次數(shù)的多項(xiàng)式。在此情況下,細(xì)分硬件72輸入來自CPU 6的多 項(xiàng)式系數(shù)和沿曲線的至少一個(gè)位置(將在所述位置處產(chǎn)生頂點(diǎn)點(diǎn))。沿曲線的待產(chǎn)生頂點(diǎn) 點(diǎn)的位置可(例如)在貝塞爾曲線的情況下為值t,或在橢圓弧曲線的情況下為值θ。細(xì) 分硬件電路72的MAC運(yùn)算單元對(duì)多項(xiàng)式系數(shù)進(jìn)行運(yùn)算,以產(chǎn)生特定位置處的頂點(diǎn)點(diǎn)的一個(gè) 或一個(gè)以上坐標(biāo)。CPU 6可計(jì)算曲線的展開多項(xiàng)式表示,以確定待加載到細(xì)分硬件電路72內(nèi)的多項(xiàng) 式系數(shù)。換句話說,CPU 6可將曲線表示為展開的多項(xiàng)式P(X)ρ (χ) =Σ (Kjxi),(12)其中Ki是多項(xiàng)式的第i次項(xiàng)的多項(xiàng)式系數(shù),χ是變量,i = 0、1、…、n-l、n,且η 是多項(xiàng)式的次數(shù)。CPU 6可使用多項(xiàng)式展開來計(jì)算曲線的展開多項(xiàng)式表示。舉例來說,CPU 6可對(duì)等式(10)和(11)執(zhí)行多項(xiàng)式展開,以將二次貝塞爾曲線的展開多項(xiàng)式表示計(jì)算為px (t) = P2x*t2+Plx*t+P0x,(13)Py(t) = p2y*t2+piy*t+p0y,(14)其中P2x、Plx、P。x、P2y、Ply 和 P。y 是定義為 P2x = (xs-2*xc+xe)、Plx = 2*(xc-xs)、P0x =xs>P2y = (ys_2*y。+ye)、Ply = 2*(y。-ys)和 Ptly = ys 的多項(xiàng)式系數(shù)。在其它例子中,CPU 6 可使用許多多項(xiàng)式近似算法中的任一者來計(jì)算多項(xiàng)式表示。在使用等式(1)和(2)定義的 橢圓弧曲線的情況下,CPU 6可使用泰勒(Taylor)展開、最小平方近似或另一近似技術(shù)來 計(jì)算多項(xiàng)式表示。舉例來說,CPU 6可通過用多項(xiàng)式S2* θ 2+S,θ +S0近似表示sin( θ )且 用c2* θ θ +Ctl近似表示cos( θ )來計(jì)算橢圓弧曲線的展開多項(xiàng)式表示,其中SySpSp C2, C1和Ctl是使用特定近似技術(shù)計(jì)算的多項(xiàng)式系數(shù)。此外,CPU 6可根據(jù)上述等式(3)將曲線從對(duì)象坐標(biāo)空間轉(zhuǎn)換到裝置坐標(biāo)空間。 CPU 6可在計(jì)算曲線的多項(xiàng)式表示之前或在計(jì)算曲線的多項(xiàng)式表示之后,將曲線從對(duì)象坐 標(biāo)空間變換到裝置坐標(biāo)空間。如上文所述,CPU 6可每曲線計(jì)算所述變換一次。換句話說, CPU 6可計(jì)算用于定義曲線的點(diǎn)中的每一者處的變換,而不是計(jì)算針對(duì)沿曲線的每個(gè)頂點(diǎn) 點(diǎn)的變換。舉例來說,在二次貝塞爾曲線的情況下,CPU 6可計(jì)算開始點(diǎn)(xs,ys)、結(jié)束點(diǎn) (xe, ye)和控制點(diǎn)(x。,y。)的變換,而不是計(jì)算針對(duì)第一組線段的所計(jì)算的頂點(diǎn)點(diǎn)中的每一 者的變換。在其它例子中,細(xì)分硬件電路72或計(jì)算裝置70的某一其它組件可執(zhí)行所述變 換。在變換期間,CPU 6可確定比例因子,其近似在變換期間執(zhí)行的按比例縮放的量。 在一些例子中,在第二細(xì)分階段期間發(fā)生的細(xì)分的程度可為比例因子的函數(shù)。舉例來說, CPU 6可基于比例因子來計(jì)算將曲線的每一部分細(xì)分為的額外線段的數(shù)目。在CPU 6計(jì)算 出將曲線的每一部分細(xì)分為的額外線段的數(shù)目之后,CPU 6確定沿曲線的所述部分的將產(chǎn) 生新頂點(diǎn)點(diǎn)的位置。舉例來說,對(duì)于橢圓形曲線的從9(| = 0到θ1= π/4的將劃分為四
22個(gè)額外線段的部分來說,CPU 6可確定需在位置θ Μ = π /16、θ02 = Ji /8、θ 03 = 3 π /16 處計(jì)算新頂點(diǎn),以將曲線的從θ ^ = 0到θ工=π /4的部分均等地劃分為四個(gè)額外線段。CPU 6為細(xì)分硬件電路72提供用于曲線的展開多項(xiàng)式表示的多項(xiàng)式系數(shù)和曲線 上將產(chǎn)生頂點(diǎn)點(diǎn)坐標(biāo)的一個(gè)或一個(gè)以上位置。在上述橢圓弧曲線實(shí)例中,曲線上將產(chǎn)生新 頂點(diǎn)點(diǎn)的坐標(biāo)的位置是值Gc^etl2* θ Μ或?qū)λ鲋档氖M(jìn)制近似。CPU 6可將所計(jì)算的 多項(xiàng)式系數(shù)和位置直接加載到細(xì)分硬件電路72中,或?qū)⒅羔樉幊痰郊?xì)分硬件電路72中,在 此情況下,細(xì)分硬件電路72加載多項(xiàng)式系數(shù)和位置。在任一情況下,基于正被細(xì)分的曲線 的類型而將多項(xiàng)式系數(shù)和位置動(dòng)態(tài)地加載到細(xì)分硬件電路72中。如下文將詳細(xì)描述,細(xì)分硬件電路72使用CPU 6所指定的多項(xiàng)式系數(shù)和位置來計(jì) 算指定位置處的頂點(diǎn)點(diǎn)的坐標(biāo)。以此方式,計(jì)算裝置70可使用細(xì)分硬件電路72將細(xì)分工 作負(fù)荷的一部分從CPU 6卸載到細(xì)分硬件電路72。在一些例子中,細(xì)分硬件電路72可(例 如)在CPU 6正經(jīng)歷高處理負(fù)荷時(shí)執(zhí)行所有的細(xì)分。細(xì)分硬件電路72可將頂點(diǎn)點(diǎn)的坐標(biāo) 輸出到CPU 6,CPU 6可執(zhí)行額外圖形渲染操作以將曲線呈現(xiàn)在顯示器16上?;蛘撸珻PU 6 或細(xì)分硬件電路72可將新的頂點(diǎn)點(diǎn)存儲(chǔ)在裝置存儲(chǔ)器8中以供稍后處理。在細(xì)分硬件電 路72位于GPU 10內(nèi)的例子(例如圖2所說明的例子)中,細(xì)分硬件電路72可將頂點(diǎn)點(diǎn)的 坐標(biāo)輸出到GPU 10的其它組件,例如頂點(diǎn)著色器30、幾何形狀著色器32或像素著色器36。許多其它組件也可包括于計(jì)算裝置70內(nèi),但為說明簡單和容易起見,圖7中未具 體說明。舉例來說,計(jì)算裝置70可包括GPU(例如圖IWGPU 10),其經(jīng)由總線18耦合到其 它組件。此外,圖7所說明的架構(gòu)只是示范性的,因?yàn)楸景l(fā)明中所描述的技術(shù)可配合多種其 它架構(gòu)來實(shí)施。圖8是說明根據(jù)本發(fā)明中所描述的技術(shù)來執(zhí)行細(xì)分的實(shí)例細(xì)分硬件電路72的示 意圖。細(xì)分硬件電路72包括多個(gè)寄存器82(圖8中標(biāo)記為“REG”)、多個(gè)多路復(fù)用器84(圖 8中標(biāo)記為“MUX”)、多個(gè)乘法運(yùn)算單元86和多個(gè)累加運(yùn)算單元88。乘法運(yùn)算單元86后接 累加運(yùn)算單元88組成MAC運(yùn)算單元,其由虛線89說明。細(xì)分硬件電路72包含布置成管線 的可配置MAC陣列。因此,除了最后一個(gè)MAC運(yùn)算單元的輸出(其為所產(chǎn)生的頂點(diǎn)坐標(biāo)) 以外,每一 MAC運(yùn)算單元的輸出均為對(duì)后續(xù)MAC運(yùn)算單元的輸入。MUX 84為細(xì)分硬件電路72提供可配置性。明確地說,MUX 84可經(jīng)配置以輸出兩 個(gè)輸入中的一者。由實(shí)線表示的對(duì)MUX 84中的每一者的輸入對(duì)應(yīng)于所述MUX 84將傳遞通 過的輸入。換句話說,以實(shí)線展示的輸入中的每一者的值是MUX 84中的每一者將分別輸出 的值。由虛線表示的對(duì)MUX 84中的每一者的輸入對(duì)應(yīng)于MUX 84將不傳遞通過的輸入。如 參看圖9和圖10更詳細(xì)地描述,因此可通過改變將由MUX 84傳遞通過的MUX輸入來配置 細(xì)分硬件電路72。圖8中所說明的細(xì)分硬件電路72是六階段可配置MAC陣列,其可經(jīng)配置以計(jì)算至 多達(dá)六次多項(xiàng)式。細(xì)分硬件電路72可被配置成多個(gè)較短管線,其計(jì)算較小次數(shù)的多項(xiàng)式。 舉例來說,圖8所說明的六階段可配置MAC陣列可經(jīng)配置以作為各計(jì)算一個(gè)三次多項(xiàng)式的 兩個(gè)并行三階段MAC陣列(圖9)、各計(jì)算一個(gè)二次多項(xiàng)式的三個(gè)并行兩階段MAC陣列(圖 10)等而操作。以此方式,細(xì)分硬件電路72可經(jīng)配置以在細(xì)分處理期間提供硬件加速,從而 得到改進(jìn)的渲染性能。盡管被說明為六階段可配置MAC陣列,但細(xì)分硬件電路72可包括更 多或更少的可配置管線化MAC階段。
23
可基于正被細(xì)分的曲線的類型而在運(yùn)行時(shí)間動(dòng)態(tài)地重新配置細(xì)分硬件電路72。舉 例來說,當(dāng)細(xì)分二次貝塞爾曲線或橢圓弧曲線(其被表示為二次多項(xiàng)式)時(shí),CPU 6可配置 細(xì)分硬件電路72以使其作為三個(gè)并行的兩階段MAC陣列而操作。當(dāng)細(xì)分三次貝塞爾曲線 (其被表示為三次多項(xiàng)式)時(shí),CPU 6可配置細(xì)分硬件電路72以使其作為兩個(gè)并行的三階 段MAC陣列而操作。細(xì)分硬件電路72從CPU 6接收多項(xiàng)式系數(shù)PO到P6以用于計(jì)算頂點(diǎn)點(diǎn)。多項(xiàng)式 系數(shù)可為用于計(jì)算頂點(diǎn)點(diǎn)的X坐標(biāo)的多項(xiàng)式系數(shù),或用于計(jì)算頂點(diǎn)點(diǎn)的y坐標(biāo)的多項(xiàng)式系 數(shù)。在其中細(xì)分硬件電路72作為一個(gè)以上多階段MAC陣列而操作的例子中,多項(xiàng)式系數(shù)可 為用于計(jì)算頂點(diǎn)點(diǎn)的χ坐標(biāo)和y坐標(biāo)的多項(xiàng)式系數(shù)。如上文所述,CPU 6計(jì)算多項(xiàng)式系數(shù) PO到06,并將所計(jì)算的多項(xiàng)式系數(shù)PO到P6提供給細(xì)分硬件電路72。CPU 6可將所計(jì)算的 多項(xiàng)式系數(shù)PO到P6直接加載到細(xì)分硬件電路72中,或?qū)⒅羔樉幊痰郊?xì)分硬件電路72中, 在此情況下,細(xì)分硬件電路72加載多項(xiàng)式系數(shù)PO到P6。在任一情況下,均基于正被細(xì)分的 曲線的類型而動(dòng)態(tài)地加載多項(xiàng)式系數(shù)PO到P6。此外,CPU 6為細(xì)分硬件電路72提供與沿曲線的將產(chǎn)生頂點(diǎn)點(diǎn)的位置對(duì)應(yīng)的輸入 (I)。在使用OpenVG定義的橢圓弧曲線的情況下,所述輸入可為特定值θ。在使用OpenVG 定義的貝塞爾曲線的情況下,所述輸入可為特定值t。細(xì)分硬件電路72使用多項(xiàng)式系數(shù)PO 到P6對(duì)所述輸入執(zhí)行各種乘法與累加運(yùn)算,以計(jì)算輸出(0)。所述輸出表示由所述輸入識(shí) 別的沿曲線的位置處的頂點(diǎn)點(diǎn)的坐標(biāo)(例如,χ坐標(biāo)或y坐標(biāo))。細(xì)分硬件電路72輸出以 下形式的六次多項(xiàng)式0 = P6*I6+P5*I5+P4*I4+P3*I3+P2*I2+P1*I+P0。(15)細(xì)分硬件電路繼續(xù)接收沿曲線的輸入位置以及多項(xiàng)式系數(shù),直到細(xì)分硬件電路72 計(jì)算出所產(chǎn)生的所要數(shù)目的線段的頂點(diǎn)點(diǎn)為止。舉例來說,對(duì)于橢圓形曲線的從= 0 到Q1= π/4的將劃分為四個(gè)額外線段的部分來說,CPU 6可為細(xì)分硬件電路72提供輸入 θ Q1 = π /16、θ02 = π /8、θ Q3 = 3 π /16以產(chǎn)生頂點(diǎn)點(diǎn),以用于將曲線的從θ Q = 0到Q1 =η/4的部分均等地劃分為四個(gè)額外線段。圖9是說明經(jīng)配置以作為兩個(gè)并行的三階段MAC陣列而操作的細(xì)分硬件電路72 的示意圖,所述兩個(gè)陣列各計(jì)算一個(gè)三次多項(xiàng)式。明確地說,前三個(gè)MAC運(yùn)算單元作為輸出 以下形式的第一三次多項(xiàng)式的第一三階段MAC陣列而操作O0 = Ρ3*Ι03+Ρ2*Ι02+Ρ1*Ι0+ΡΟ。(16)后三個(gè)MAC運(yùn)算單元作為輸出以下形式的第二三次多項(xiàng)式的第二三階段MAC陣列 而操作O1 = ΡθΦ ^+ΡδΦ ^+Ρ^^+ΡΟ'。(17)細(xì)分硬件電路72使用輸入I。和I1以及多項(xiàng)式系數(shù)Ρ0、Ρ0'、Ρ1、Ρ2、Ρ3、Ρ4、Ρ5和 Ρ6來計(jì)算兩個(gè)坐標(biāo)。在一個(gè)例子中,細(xì)分硬件電路72可計(jì)算定義位置I處的頂點(diǎn)點(diǎn)的兩個(gè) 坐標(biāo)。換句話說,細(xì)分硬件電路72可計(jì)算定義位置I處的頂點(diǎn)點(diǎn)的χ坐標(biāo)和y坐標(biāo)(即, (X,y))。在此情況下,輸入Itl和I1相等,且多項(xiàng)式系數(shù)P0、P1、P2和P3與用于計(jì)算χ坐標(biāo) 的多項(xiàng)式的多項(xiàng)式系數(shù)對(duì)應(yīng),且多項(xiàng)式系數(shù)PO ‘、Ρ4、Ρ5和Ρ6與用于計(jì)算y坐標(biāo)的多項(xiàng)式 的多項(xiàng)式系數(shù)對(duì)應(yīng)。在其它例子中,細(xì)分硬件電路72可計(jì)算與不同頂點(diǎn)點(diǎn)對(duì)應(yīng)的兩個(gè)坐標(biāo)。舉例來
24說,細(xì)分硬件電路72可計(jì)算兩個(gè)χ坐標(biāo),其表示位于沿曲線的不同位置Itl和I1處的兩個(gè)頂 點(diǎn)點(diǎn)的χ坐標(biāo)。在此情況下,I0與I1不相等,且多項(xiàng)式系數(shù)P0、P1、P2和P3以及多項(xiàng)式系 數(shù)PO'、P4、P5和P6均與用于計(jì)算χ坐標(biāo)的多項(xiàng)式的多項(xiàng)式系數(shù)對(duì)應(yīng)。在計(jì)算頂點(diǎn)點(diǎn)的χ 坐標(biāo)之后,細(xì)分硬件72輸入與頂點(diǎn)點(diǎn)的y坐標(biāo)相關(guān)聯(lián)的系數(shù),且計(jì)算沿曲線的各種位置I 的頂點(diǎn)點(diǎn)的y坐標(biāo)。在任一情況下,細(xì)分硬件電路72均在細(xì)分過程期間通過在單遍中輸出 頂點(diǎn)點(diǎn)的兩個(gè)坐標(biāo)值而提供硬件加速。圖10是說明經(jīng)配置以作為三個(gè)并行的兩階段MAC陣列而操作的細(xì)分硬件電路72 的示意圖,所述三個(gè)陣列各計(jì)算一個(gè)二次多項(xiàng)式。明確地說,第一對(duì)MAC運(yùn)算單元作為輸出 以下形式的第一二次多項(xiàng)式的第一兩階段MAC陣列而操作O0 = P2*I02+P1*I0+POo(18)第二對(duì)MAC運(yùn)算單元作為輸出以下形式的第二二次多項(xiàng)式的第二兩階段MAC陣列 而操作O1 = Ρβ^Ι^+Ρ^Ι+ΡΟ'。(19)最后一對(duì)MAC運(yùn)算單元作為輸出以下形式的第三二次多項(xiàng)式的第二三階段MAC陣 列而操作O2 = P6*I22+P5*I2+P0〃。(20)細(xì)分硬件電路72使用輸入IciU1和I2以及多項(xiàng)式系數(shù)P0、P0'、P0"、P1、P2、P3、 P4、P5和P6來計(jì)算三個(gè)坐標(biāo)。如上文所述,細(xì)分硬件電路72可計(jì)算與不同頂點(diǎn)點(diǎn)對(duì)應(yīng)的 三個(gè)坐標(biāo)。舉例來說,細(xì)分硬件電路72可計(jì)算三個(gè)χ坐標(biāo),其表示位于沿曲線的不同位置 W1和I2的三個(gè)頂點(diǎn)點(diǎn)的χ坐標(biāo)。在此情況下,W1和I2不相等,且多項(xiàng)式系數(shù)P0、P1、 P2;多項(xiàng)式系數(shù)PO'、P3和P4以及多項(xiàng)式系數(shù)P0"、P5和P6各與用于計(jì)算χ坐標(biāo)的二次 多項(xiàng)式的多項(xiàng)式系數(shù)對(duì)應(yīng)。在計(jì)算頂點(diǎn)點(diǎn)的χ坐標(biāo)之后,細(xì)分硬件72輸入與頂點(diǎn)點(diǎn)的y坐 標(biāo)相關(guān)聯(lián)的系數(shù),且計(jì)算沿曲線在Io、I1和I2處的頂點(diǎn)點(diǎn)的y坐標(biāo)?;蛘撸?xì)分硬件電路72可計(jì)算沿曲線的頂點(diǎn)點(diǎn)的χ坐標(biāo)和y坐標(biāo)二者的組合。換 句話說,細(xì)分硬件電路72可計(jì)算在沿曲線的各個(gè)位置I處的兩個(gè)χ坐標(biāo)和一 y坐標(biāo)或兩個(gè) y坐標(biāo)和一 χ坐標(biāo)。在此情況下,輸入Itl和I1相等,且多項(xiàng)式系數(shù)P0、P1和P2與用于計(jì)算 χ坐標(biāo)的多項(xiàng)式的多項(xiàng)式系數(shù)對(duì)應(yīng),且多項(xiàng)式系數(shù)PO ‘、P3和P4與用于計(jì)算y坐標(biāo)的多項(xiàng) 式的多項(xiàng)式系數(shù)對(duì)應(yīng)。另一方面,I2不同于Itl和I1,且多項(xiàng)式系數(shù)P0"、P5和P6可為X坐 標(biāo)或1坐標(biāo)的多項(xiàng)式系數(shù)。在任一情況下,細(xì)分硬件電路72均在細(xì)分過程期間通過在單遍 中輸出頂點(diǎn)點(diǎn)的三個(gè)坐標(biāo)值而提供硬件加速。圖11是說明根據(jù)本發(fā)明所描述的技術(shù)來執(zhí)行細(xì)分的計(jì)算裝置的實(shí)例操作的流程 圖。軟件應(yīng)用程序20調(diào)用CPU 6的細(xì)分模塊22以將曲線細(xì)分為第一組線段(90)。為了 產(chǎn)生第一組線段,細(xì)分模塊22計(jì)算位于曲線上的一個(gè)或一個(gè)以上頂點(diǎn)點(diǎn)。細(xì)分模塊22可 (例如)使用曲線的數(shù)學(xué)表示來產(chǎn)生一個(gè)或一個(gè)以上頂點(diǎn)點(diǎn)。所述線段將所述頂點(diǎn)點(diǎn)中的 每一者連接到相鄰的頂點(diǎn)點(diǎn)。所述線段中的每一者表示曲線的一部分。CPU 6計(jì)算曲線的展開多項(xiàng)式表示(92)。CPU 6可(例如)通過用多項(xiàng)式 S2* θ 2+S,θ +S0近似表示sin ( θ )且用多項(xiàng)式C2* θ θ +C0近似表示cos ( θ )來計(jì)算根 據(jù)等式(1)和(2)定義的橢圓弧曲線的展開多項(xiàng)式表示。以下提供展開多項(xiàng)式表示。ρχ( θ ) = Ρ2χ* θ 2+Ρ1χ* θ +P0x,(21)
Py ( θ ) = P2y* θ 2+Ply* θ +P0y,(22)其中Ρ2χ、Ρ1χ、P0x, P2y、Ply 和 Ptly 是定義為 = _a*C2、Plx = _a*Cl、P0x = _a*C0、 P2y = b*C2、Ply = b*Cl 和 Ptly = b*C0 的多項(xiàng)式系數(shù)。此外,CPU 6可將曲線從對(duì)象坐標(biāo)空間變換到裝置坐標(biāo)空間(94)。CPU 6可在計(jì) 算曲線的多項(xiàng)式表示之前或在計(jì)算曲線的多項(xiàng)式表示之后變換到裝置坐標(biāo)空間。如上文所 述,CPU 6可每曲線計(jì)算所述變換一次。換句話說,CPU 6可計(jì)算用于定義曲線的點(diǎn)中的每 一者處的變換,而不是計(jì)算針對(duì)沿曲線的每個(gè)頂點(diǎn)點(diǎn)的變換。例如在二次貝塞爾曲線的情 況下,CPU 6可計(jì)算開始點(diǎn)(xs,ys)、結(jié)束點(diǎn)(xe,ye)和控制點(diǎn)(x。,y。)的變換,而不是計(jì)算針 對(duì)第一組線段的所計(jì)算的頂點(diǎn)點(diǎn)中的每一者的變換。在其它例子中,細(xì)分硬件電路72或計(jì) 算裝置70的某一其它組件可執(zhí)行所述變換。在變換期間,CPU 6可確定比例因子(其近似在變換期間執(zhí)行的按比例縮放的量) (96)。CPU 6基于所述比例因子而確定第二細(xì)分階段的額外線段的數(shù)目(98)。明確地說, CPU 6可確定第二細(xì)分階段隨比例因子的增加而將曲線的由線段表示的部分再分為更多的 額外線段。在CPU 6計(jì)算出將曲線的每一部分細(xì)分為的額外線段的數(shù)目之后,CPTO確定沿 曲線的所述部分的將產(chǎn)生新的頂點(diǎn)點(diǎn)的位置(100)。舉例來說,對(duì)于橢圓形曲線的從Qtl = 0到θι = π/4的將劃分為四個(gè)額外線段的部分來說,CPU 6可確定需在位置Qtll= π/16、
θ 02 = π /8、θ 03 = 3 π /16處計(jì)算新頂點(diǎn),以將曲線的從θ Q = 0到θ i = JI/4的部分均 等地劃分為四個(gè)額外線段。CPU 6配置細(xì)分硬件電路72以細(xì)分所述曲線(102)。CPU 6可(例如)為細(xì)分硬 件電路72提供曲線的展開多項(xiàng)式表示的多項(xiàng)式系數(shù)。CPU 6可將所計(jì)算的多項(xiàng)式系數(shù)直接 加載到細(xì)分硬件電路72中,或?qū)⒅羔樉幊痰郊?xì)分硬件電路72內(nèi),在此情況下,細(xì)分硬件電 路72加載多項(xiàng)式系數(shù)和位置。在任一情況下,均基于正被細(xì)分的曲線的類型(例如,橢圓 弧曲線、二次貝塞爾曲線、三次貝塞爾曲線等)將多項(xiàng)式系數(shù)動(dòng)態(tài)地加載到細(xì)分硬件電路 72中。CPU 6為細(xì)分硬件電路72提供識(shí)別沿曲線的將產(chǎn)生一個(gè)或一個(gè)以上頂點(diǎn)點(diǎn)的坐 標(biāo)的位置的一個(gè)或一個(gè)以上輸入(104)。如上文所述,細(xì)分硬件電路72可經(jīng)配置以作為各 計(jì)算頂點(diǎn)點(diǎn)的一坐標(biāo)的兩個(gè)并行三階段MAC陣列(圖9)而操作,或經(jīng)配置以作為各計(jì)算頂 點(diǎn)點(diǎn)的一坐標(biāo)的三個(gè)并行兩階段MAC陣列(圖10)而操作。細(xì)分硬件電路可經(jīng)配置以計(jì)算 一個(gè)以上頂點(diǎn)點(diǎn)的χ坐標(biāo)、一個(gè)以上頂點(diǎn)點(diǎn)的y坐標(biāo)、同一頂點(diǎn)點(diǎn)的χ坐標(biāo)和y坐標(biāo),或其 組合。CPU 6接收由細(xì)分硬件72計(jì)算的一個(gè)或一個(gè)以上坐標(biāo)(106)。CPU 6確定是否存 在要為頂點(diǎn)點(diǎn)計(jì)算的更多坐標(biāo)(108)。當(dāng)存在要為頂點(diǎn)點(diǎn)計(jì)算的更多坐標(biāo)時(shí),CPU 6繼續(xù) 配置細(xì)分硬件電路102,并提供用于計(jì)算額外坐標(biāo)的輸入。當(dāng)不存在要計(jì)算的更多坐標(biāo)時(shí), CPU 6使用經(jīng)細(xì)分的線段將曲線渲染到顯示器(110)。本文中所描述的技術(shù)可以硬件、軟件、固件或其任一組合來實(shí)施。描述為模塊或 組件的任何特征可在集成邏輯裝置內(nèi)一起實(shí)施,或作為離散但可互操作的邏輯裝置單獨(dú)實(shí) 施。在一些情況下,各種特征可實(shí)施為集成電路裝置,例如集成電路芯片或芯片組。如果 以軟件實(shí)施,那么所述技術(shù)可至少部分地由計(jì)算機(jī)可讀媒體實(shí)現(xiàn),所述計(jì)算機(jī)可讀媒體包 含在被執(zhí)行時(shí)實(shí)施上述方法中的一者或一者以上的指令。計(jì)算機(jī)可讀媒體可形成計(jì)算機(jī)
26程序產(chǎn)品(其可包括包裝材料)的一部分。計(jì)算機(jī)可讀媒體可包含隨機(jī)存取存儲(chǔ)器(RAM) (例如同步動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(SDRAM))、只讀存儲(chǔ)器(ROM)、非易失性隨機(jī)存取存儲(chǔ)器 (NVRAM)、電可擦除可編程只讀存儲(chǔ)器(EEPROM)、快閃存儲(chǔ)器、磁性或光學(xué)數(shù)據(jù)存儲(chǔ)媒體等。 所述技術(shù)另外或替代地可至少部分地由計(jì)算機(jī)可讀通信媒體實(shí)現(xiàn),所述媒體攜載或傳送呈 指令或數(shù)據(jù)結(jié)構(gòu)的形式且可被計(jì)算機(jī)存取、讀取和/或執(zhí)行的代碼。所述代碼可由一個(gè)或一個(gè)以上處理器執(zhí)行,所述處理器例如為一個(gè)或一個(gè)以上 DSP、通用微處理器、ASIC、現(xiàn)場(chǎng)可編程邏輯陣列FPGA或其它等效集成或離散邏輯電路。因 此,本文中使用的術(shù)語“處理器”可指代前述結(jié)構(gòu)中的任一者,或任何其它適合實(shí)施本文中 所描述的技術(shù)的結(jié)構(gòu)。此外,在一些方面中,本文中描述的功能性可提供于經(jīng)配置以用于細(xì) 分圖形圖像的專用軟件應(yīng)用程序或硬件模塊內(nèi)。因此,本發(fā)明還涵蓋包括用以實(shí)施本發(fā)明 所描述的技術(shù)中的一種或一種以上技術(shù)的電路的多種集成電路裝置中的任一者。此電路可 提供于單個(gè)集成電路芯片中或多個(gè)可互操作的集成電路芯片中。已描述了各種方面。這些和其它方面均在所附權(quán)利要求書的范圍內(nèi)。
權(quán)利要求
一種方法,其包含用第一計(jì)算單元細(xì)分曲線以將所述曲線劃分為若干第一線段;用第二計(jì)算單元將所述曲線的由所述第一線段中的一者表示的部分細(xì)分為若干第二線段。
2.根據(jù)權(quán)利要求1所述的方法,其進(jìn)一步包含將所述曲線從第一坐標(biāo)空間變換到第二坐標(biāo)空間,其中細(xì)分所述曲線的由所述第一線段中的一者表示的所述部分包含基于變換所述曲線時(shí) 所使用的比例因子,用所述第二計(jì)算單元將所述曲線的由所述線段中的一者表示的所述部 分細(xì)分為所述第二線段。
3.根據(jù)權(quán)利要求2所述的方法,其中基于所述比例因子將所述曲線的由所述第一線段 中的一者表示的所述部分細(xì)分為若干第二線段包含在所述比例因子增加時(shí),將所述曲線的 由所述第一線段中的一者表示的所述部分細(xì)分為較大數(shù)目的第二線段。
4.根據(jù)權(quán)利要求1所述的方法,其進(jìn)一步包含基于所述第一計(jì)算單元的至少一負(fù)荷, 動(dòng)態(tài)地平衡由所述第一計(jì)算單元執(zhí)行的對(duì)所述曲線的細(xì)分的量。
5.根據(jù)權(quán)利要求4所述的方法,其中基于所述第一計(jì)算單元的負(fù)荷而動(dòng)態(tài)地平衡由所 述第一計(jì)算單元執(zhí)行的對(duì)所述曲線的細(xì)分的所述量包含在所述第一計(jì)算單元的所述負(fù)荷 高于閾值時(shí),細(xì)分所述曲線以將所述曲線劃分為較少的第一線段。
6.根據(jù)權(quán)利要求1所述的方法,其中所述第一計(jì)算單元包含中央處理單元(CPU),且所 述第二計(jì)算單元包含圖形處理單元(GPU),其中用所述GPU來細(xì)分所述曲線的由所述第一 線段中的一者表示的所述部分包含細(xì)分所述曲線的由所述第一線段中的第一者表示的第 一部分,所述方法進(jìn)一步包含并行地細(xì)分所述曲線的由所述第一線段中的第二者表示的第 二部分。
7.根據(jù)權(quán)利要求6所述的方法,其中細(xì)分所述曲線的由所述第一線段中的所述第一者 和第二者表示的所述第一和第二部分中的每一者包含用所述GPU的著色器單元細(xì)分所述 曲線的由相應(yīng)第一線段表示的相應(yīng)部分。
8.根據(jù)權(quán)利要求7所述的方法,其中所述著色器包含頂點(diǎn)著色器,所述方法進(jìn)一步包含用所述頂點(diǎn)著色器接收多個(gè)頂點(diǎn)屬性,所述多個(gè)頂點(diǎn)屬性包括指定所述第一線段中的 一者的頂點(diǎn)點(diǎn)的至少兩個(gè)頂點(diǎn)屬性;以及產(chǎn)生表示位于所述曲線的由所述第一線段中的所述一者表示的所述部分上的額外點(diǎn) 的額外頂點(diǎn)屬性,以將所述曲線的所述部分細(xì)分為所述第二線段。
9.根據(jù)權(quán)利要求1所述的方法,其中所述第二計(jì)算單元包含專用細(xì)分硬件,且細(xì)分所 述曲線的由所述第一線段中的一者表示的所述部分包含接收至少一個(gè)輸入;以及基于所述至少一個(gè)輸入而產(chǎn)生對(duì)應(yīng)于所述第二線段中的一者的至少一頂點(diǎn)點(diǎn)的至少 一個(gè)坐標(biāo)。
10.根據(jù)權(quán)利要求9所述的方法,其中所述細(xì)分硬件包括多個(gè)乘法與累加運(yùn)算單元的 管線,且產(chǎn)生所述至少一個(gè)頂點(diǎn)點(diǎn)的至少一個(gè)坐標(biāo)包含實(shí)施所述曲線的多項(xiàng)式表示,以基 于所述至少一個(gè)輸入而產(chǎn)生對(duì)應(yīng)于所述第二線段中的所述一者的所述頂點(diǎn)點(diǎn)的至少一個(gè)
11.根據(jù)權(quán)利要求10所述的方法,其進(jìn)一步包含配置所述多個(gè)乘法與累加運(yùn)算單元的 所述管線,使得所述細(xì)分硬件作為各自產(chǎn)生頂點(diǎn)點(diǎn)的坐標(biāo)的兩個(gè)或兩個(gè)以上并行管線而操作。
12.根據(jù)權(quán)利要求1所述的方法,其中第一計(jì)算單元是圖形處理單元(GPU)的第一組 件,且所述第二計(jì)算單元是所述GPU的第二組件。
13.根據(jù)權(quán)利要求1所述的方法,其進(jìn)一步包含渲染所述第二線段以將所述曲線呈現(xiàn)給顯示器。
14.根據(jù)權(quán)利要求1所述的方法,其進(jìn)一步包含用所述第一計(jì)算單元、所述第二計(jì)算單 元和第三計(jì)算單元中的一者將所述曲線的由所述第二線段中的一者表示的部分細(xì)分為若 干第三線段。
15.一種裝置,其包含第一計(jì)算單元,其細(xì)分曲線以將所述曲線劃分為若干第一線段; 第二計(jì)算單元,其將所述曲線的由所述第一線段中的一者表示的部分細(xì)分為若干第二 線段。
16.根據(jù)權(quán)利要求15所述的裝置,其中所述第一和第二計(jì)算單元中的一者將所述曲線 從第一坐標(biāo)空間變換到第二坐標(biāo)空間,且所述第二計(jì)算單元基于變換所述曲線時(shí)所使用的 比例因子,將所述曲線的由所述第一線段中的一者表示的所述部分細(xì)分為所述第二線段。
17.根據(jù)權(quán)利要求16所述的裝置,其中所述第二計(jì)算單元在所述比例因子增加時(shí),將 所述曲線的由所述第一線段中的所述一者表示的所述部分細(xì)分為較大數(shù)目的第二線段。
18.根據(jù)權(quán)利要求15所述的裝置,其中所述第一計(jì)算單元基于所述第一計(jì)算單元的至 少一負(fù)荷,動(dòng)態(tài)地平衡由所述第一計(jì)算單元執(zhí)行的對(duì)所述曲線的細(xì)分的量。
19.根據(jù)權(quán)利要求18所述的裝置,其中所述第一計(jì)算單元在所述第一計(jì)算單元的所述 負(fù)荷高于閾值時(shí),細(xì)分所述曲線以將所述曲線劃分為較小數(shù)目的第一線段。
20.根據(jù)權(quán)利要求15所述的裝置,其中所述第一計(jì)算單元包含中央處理單元(CPU),且 所述第二計(jì)算單元包含圖形處理單元(GPU),其中所述GPU并行地細(xì)分所述曲線的由所述 第一線段中的第一者表示的第一部分,且細(xì)分所述曲線的由所述第一線段中的第二者表示 的第二部分。
21.根據(jù)權(quán)利要求20所述的裝置,其中所述GPU用所述GPU的著色器單元細(xì)分所述曲 線的所述第一和第二部分中的每一者。
22.根據(jù)權(quán)利要求21所述的裝置,其中所述著色器單元包含頂點(diǎn)著色器,所述頂點(diǎn)著 色器接收多個(gè)頂點(diǎn)屬性,所述多個(gè)頂點(diǎn)屬性包括指定所述第一線段中的所述一者的頂點(diǎn) 點(diǎn)的至少兩個(gè)頂點(diǎn)屬性;且產(chǎn)生額外頂點(diǎn)屬性,其表示位于所述曲線的由所述第一線段中 的所述一者表示的所述部分上的額外頂點(diǎn)點(diǎn)。
23.根據(jù)權(quán)利要求15所述的裝置,其中所述第二計(jì)算單元包含專用細(xì)分硬件,其接收 至少一個(gè)輸入且基于所述至少一個(gè)輸入而產(chǎn)生對(duì)應(yīng)于所述第二線段中的一者的至少一個(gè) 頂點(diǎn)點(diǎn)的至少一個(gè)坐標(biāo)。
24.根據(jù)權(quán)利要求23所述的裝置,其中所述細(xì)分硬件包含布置成管線配置的多個(gè)乘法 與累加運(yùn)算單元,其實(shí)施所述曲線的多項(xiàng)式表示,以基于所述至少一個(gè)輸入而產(chǎn)生對(duì)應(yīng)于所述第二線段中的所述一者的所述至少一個(gè)頂點(diǎn)點(diǎn)的至少一個(gè)坐標(biāo)。
25.根據(jù)權(quán)利要求24所述的裝置,其中所述多個(gè)乘法與累加運(yùn)算單元的所述管線經(jīng)配 置以使得所述細(xì)分硬件作為各自產(chǎn)生所述至少一個(gè)頂點(diǎn)點(diǎn)的坐標(biāo)的兩個(gè)或兩個(gè)以上并行 管線而操作。
26.根據(jù)權(quán)利要求15所述的裝置,其中第一計(jì)算單元是圖形處理單元(GPU)的第一組 件,且所述第二計(jì)算單元是所述GPU的第二組件。
27.根據(jù)權(quán)利要求15所述的裝置,其進(jìn)一步包含顯示器,其中所述第一和第二計(jì)算單 元中的一者渲染所述第二線段,以將所述曲線呈現(xiàn)給所述顯示器。
28.根據(jù)權(quán)利要求15所述的裝置,其中所述第一計(jì)算單元、所述第二計(jì)算單元和第三 計(jì)算單元中的一者將所述曲線的由所述第二線段中的一者表示的部分細(xì)分為若干第三線 段。
29.一種裝置,其包含用于細(xì)分曲線以將所述曲線劃分為若干第一線段的第一裝置;用于將所述曲線的由所述第一線段中的一者表示的部分細(xì)分為若干第二線段的第二直ο
30.根據(jù)權(quán)利要求29所述的裝置,其進(jìn)一步包含用于將所述曲線從第一坐標(biāo)空間變換到第二坐標(biāo)空間的裝置,其中所述第二細(xì)分裝置基于變換所述曲線時(shí)所使用的比例因子,將所述曲線的由所述第一 線段中的所述一者表示的所述部分細(xì)分為所述第二線段。
31.根據(jù)權(quán)利要求30所述的裝置,其中所述第二細(xì)分裝置在所述比例因子增加時(shí),將 所述曲線的由所述第一線段中的所述一者表示的所述部分細(xì)分為較大數(shù)目的第二線段。
32.根據(jù)權(quán)利要求29所述的裝置,其進(jìn)一步包含用于基于所述第一細(xì)分裝置的至少一 負(fù)荷而動(dòng)態(tài)地平衡由所述第一細(xì)分裝置執(zhí)行的對(duì)所述曲線的細(xì)分的量的裝置。
33.根據(jù)權(quán)利要求23所述的裝置,其中所述第一細(xì)分裝置在所述第一細(xì)分裝置的所述 負(fù)荷超出閾值時(shí),細(xì)分所述曲線以將所述曲線劃分為較小數(shù)目的第一線段。
34.根據(jù)權(quán)利要求29所述的裝置,其中所述第二細(xì)分裝置并行地細(xì)分所述曲線的由所 述第一線段中的第一者表示的第一部分和所述曲線的由所述第一線段中的第二者表示的 第二部分。
35.根據(jù)權(quán)利要求29所述的裝置,其中所述第二細(xì)分裝置接收多個(gè)頂點(diǎn)屬性,所述多 個(gè)頂點(diǎn)屬性包括指定所述第一線段中的所述一者的頂點(diǎn)點(diǎn)的至少兩個(gè)頂點(diǎn)屬性;且產(chǎn)生表 示位于所述曲線的由所述第一線段中的所述一者表示的所述部分上的額外點(diǎn)的額外頂點(diǎn) 屬性,以將所述曲線的所述部分細(xì)分為所述第二線段。
36.根據(jù)權(quán)利要求29所述的裝置,其中所述第二細(xì)分裝置包含專用細(xì)分硬件,其包括 用于基于所述至少一個(gè)輸入而產(chǎn)生對(duì)應(yīng)于所述第二線段中的一者的至少一個(gè)頂點(diǎn)點(diǎn)的至 少一個(gè)坐標(biāo)的裝置。
37.根據(jù)權(quán)利要求36所述的裝置,其中所述產(chǎn)生裝置包含多個(gè)乘法與累加運(yùn)算單元的 管線,其實(shí)施所述曲線的多項(xiàng)式表示,以基于所述至少一個(gè)輸入而產(chǎn)生對(duì)應(yīng)于所述第二線 段中的所述一者的所述至少一個(gè)頂點(diǎn)點(diǎn)的至少一個(gè)坐標(biāo)。
38.根據(jù)權(quán)利要求37所述的裝置,其進(jìn)一步包含用于配置所述多個(gè)乘法與累加運(yùn)算單元的所述管線以使得所述細(xì)分硬件作為各自產(chǎn)生頂點(diǎn)點(diǎn)的坐標(biāo)的兩個(gè)或兩個(gè)以上并行管 線而操作的裝置。
39.根據(jù)權(quán)利要求29所述的裝置,其中所述第一細(xì)分裝置是圖形處理單元(GPU)的第 一組件,且所述第二細(xì)分裝置是所述GPU的第二組件。
40.根據(jù)權(quán)利要求29所述的裝置,其進(jìn)一步包含用于渲染所述第二線段以將所述曲線 呈現(xiàn)給顯示器的裝置。
41.根據(jù)權(quán)利要求29所述的裝置,其進(jìn)一步包含用于將所述曲線的由所述第二線段中 的一者表示的部分細(xì)分為若干第三線段的第三裝置。
42.根據(jù)權(quán)利要求29所述的裝置,其中所述第一細(xì)分裝置和所述第二細(xì)分裝置中的一 者將所述曲線的由所述第二線段中的一者表示的部分細(xì)分為若干第三線段。
全文摘要
本發(fā)明描述一種用于在圖形渲染期間細(xì)分曲線的多階段細(xì)分技術(shù)。明確地說,第一細(xì)分階段將所述曲線細(xì)分為第一組線段,所述線段各表示所述曲線的一部分。第二細(xì)分階段將所述曲線的由所述第一組的所述線段中的每一者表示的所述部分進(jìn)一步細(xì)分為若干額外線段,所述額外線段更精細(xì)地表示所述曲線的形狀。以此方式,所述曲線的在所述第一細(xì)分階段后由僅一個(gè)線段表示的每一部分在所述第二細(xì)分階段后由一個(gè)以上線段表示。在一些例子中,可執(zhí)行兩個(gè)以上細(xì)分階段以細(xì)分所述曲線。
文檔編號(hào)G06T11/20GK101978393SQ200980109895
公開日2011年2月16日 申請(qǐng)日期2009年3月19日 優(yōu)先權(quán)日2008年3月20日
發(fā)明者吳車輝, 畢寧, 焦國方, 魏建 申請(qǐng)人:高通股份有限公司