專(zhuān)利名稱(chēng):使用可編程硬件進(jìn)行的實(shí)時(shí)顯示后處理的制作方法
技術(shù)領(lǐng)域:
本發(fā)明大體而言涉及圖形處理器,且具體而言,涉及使用可編程硬件進(jìn)行的實(shí)時(shí)顯示后處理。
背景技術(shù):
基于計(jì)算機(jī)的圖像渲染通常首先對(duì)景物進(jìn)行幾何表示。將各種物體描述為可置于景物中的“圖元”(通常是例如三角形等簡(jiǎn)單的多邊形,以及點(diǎn)及線(xiàn))的集合。選擇一取景座標(biāo)系,并將這些圖元變換至該座標(biāo)系中。然后,將圖元轉(zhuǎn)換成二維(2-D)“片段”陣列表示形式,其中每一片段均具有顏色并可具有其他屬性,例如深度座標(biāo)或曲面法線(xiàn)??稍趫D元及/或片段級(jí)上引入照明、紋理、灰霧及各種其他會(huì)增強(qiáng)視覺(jué)真實(shí)性的效果。在渲染過(guò)程結(jié)束時(shí),將每一片段的數(shù)據(jù)(一般至少是顏色值)存儲(chǔ)于圖像緩沖器中。所述圖像緩沖器是通過(guò)一“掃描輸出”過(guò)程讀出,所述“掃描輸出”過(guò)程等時(shí)地運(yùn)行,以便以規(guī)定的屏幕刷新速率將像素遞送至顯示裝置。實(shí)時(shí)動(dòng)畫(huà)要求渲染過(guò)程以約30Hz的速率遞送新圖像。典型的顯示裝置以約60-80Hz的屏幕刷新速率運(yùn)行。
為滿(mǎn)足這些處理速率要求,許多計(jì)算機(jī)系統(tǒng)包括專(zhuān)用圖形協(xié)處理器,其對(duì)由中央處理器(CPU)提供的數(shù)據(jù)實(shí)施渲染操作且還執(zhí)行同步掃描輸出操作來(lái)驅(qū)動(dòng)顯示裝置。典型的圖形處理器包括彼此不同步運(yùn)行的渲染目標(biāo)與掃描輸出引擎。渲染目標(biāo)程序?yàn)椤昂竺妗眻D像緩沖器中的新圖像產(chǎn)生片段數(shù)據(jù),而掃描輸出引擎則使用“前面”圖像緩沖器中先前經(jīng)過(guò)渲染的圖像來(lái)驅(qū)動(dòng)顯示器。當(dāng)完成對(duì)新圖像的渲染時(shí),切換“后面”與“前面”緩沖器,以便掃描輸出引擎開(kāi)始顯示新渲染的圖像,而渲染目標(biāo)程序則向前移至下一圖像。一般而言,在對(duì)下一圖像的渲染完成之前,掃描輸出引擎可對(duì)同一圖像讀取兩次或三次。
渲染目標(biāo)程序與掃描輸出引擎在實(shí)施方案方面通常差別很大。渲染目標(biāo)程序一般是靈活性的及可編程的。典型的渲染目標(biāo)程序包括具有功能單元的執(zhí)行核心(或若干個(gè)并行的執(zhí)行核心),可指令所述功能單元執(zhí)行任意的操作序列。通過(guò)適當(dāng)編程,可使執(zhí)行核心執(zhí)行各種渲染算法的任意組合來(lái)產(chǎn)生特定圖像,并可根據(jù)需要改變這些算法。
相比之下,掃描輸出引擎通常具有有限的處理能力且不可編程。而是,掃描輸出引擎具有一序列管線(xiàn)式專(zhuān)用處理電路,片段數(shù)據(jù)即流經(jīng)這些管線(xiàn)式專(zhuān)用處理電路,其中這些處理電路實(shí)施各種操作來(lái)將片段數(shù)據(jù)變換成像素值。舉例來(lái)說(shuō),某些掃描輸出引擎支持加法覆蓋(例如光標(biāo)或視頻覆蓋),其可以高于所渲染圖像的速率進(jìn)行更新;顏色修正(例如γ修正,以慮及顯示響應(yīng)中的非線(xiàn)性);或者對(duì)片段數(shù)據(jù)的過(guò)濾,以與屏幕上的像素?cái)?shù)量相匹配(例如以實(shí)現(xiàn)圖形保真)。所述專(zhuān)用電路一般設(shè)計(jì)成以固定延遲工作,以確保等時(shí)地將像素?cái)?shù)據(jù)遞送至顯示裝置。
在某些處理器中,可啟用或禁用各種掃描輸出—時(shí)間操作(例如可將覆蓋接通或斷開(kāi))或改變操作的參數(shù)(例如γ修正的參數(shù)或覆蓋的位置)。但是,由于每一操作均是在不同的專(zhuān)用電路中實(shí)施,因而一般不可能在不建構(gòu)不同掃描輸出引擎的情況下在管線(xiàn)中添加新的操作、改變操作順序、或改變用于實(shí)施特定操作的算法。因此,掃描輸出引擎的重新配置能力非常有限。添加新的特征一般需要對(duì)電路進(jìn)行改動(dòng),而此可能會(huì)影響芯片面積及排程、最大成本及延遲。
隨著實(shí)時(shí)渲染技術(shù)的持續(xù)進(jìn)步,越來(lái)越需要一種可在顯示速率下添加各種效果的、功能更強(qiáng)大且更靈活的掃描輸出引擎。此外,圖形處理器可驅(qū)動(dòng)的顯示裝置的范圍也已最大;除傳統(tǒng)的CRT監(jiān)視器之外,圖形處理裝置還可用于驅(qū)動(dòng)LCD監(jiān)視器、數(shù)字微鏡投影儀、等離子體監(jiān)視器、等等。每一類(lèi)型的顯示裝置均對(duì)其像素的驅(qū)動(dòng)具有不同的要求,且很難在單個(gè)硬件管線(xiàn)中適應(yīng)所有這些要求。因此,非常希望在片段-像素轉(zhuǎn)換過(guò)程中具有更大的靈活性。
因此,希望使圖形處理器具有以顯示步調(diào)來(lái)執(zhí)行任意操作序列的能力。
發(fā)明內(nèi)容
本發(fā)明的實(shí)施例提供圖形處理器,在所述圖形處理器中,渲染目標(biāo)程序與后處理目標(biāo)程序通過(guò)可編程的執(zhí)行核心來(lái)共享對(duì)主機(jī)處理器的存取。所述渲染目標(biāo)程序運(yùn)行以根據(jù)幾何數(shù)據(jù)來(lái)產(chǎn)生圖像的片段數(shù)據(jù)并將所述片段數(shù)據(jù)寫(xiě)入至圖像緩沖器。所述后處理目標(biāo)程序運(yùn)行以根據(jù)一個(gè)或多個(gè)填滿(mǎn)的圖像緩沖器中的所述片段數(shù)據(jù)來(lái)產(chǎn)生像素?cái)?shù)據(jù)幀,并將所述像素?cái)?shù)據(jù)寫(xiě)入至幀緩沖器中。與主機(jī)處理器的操作并行地,掃描輸出引擎從幀緩沖器中讀取先前所產(chǎn)生幀的像素?cái)?shù)據(jù),并將所述像素?cái)?shù)據(jù)提供至顯示裝置。所述掃描輸出引擎周期性地觸發(fā)所述主機(jī)處理器來(lái)操作所述后處理目標(biāo)程序產(chǎn)生下一個(gè)幀。較佳對(duì)所述掃描輸出引擎與所述后處理目標(biāo)程序之間的定時(shí)進(jìn)行控制,以在所述掃描輸出引擎結(jié)束對(duì)當(dāng)前幀的讀取時(shí),要顯示的下一個(gè)幀已在幀緩沖器中準(zhǔn)備就緒。
根據(jù)本發(fā)明的一個(gè)方面,一種圖形處理器包括可編程執(zhí)行核心、仲裁單元、及掃描輸出引擎。所述可編程執(zhí)行核心配置成可在若干上下文之間進(jìn)行切換,并進(jìn)一步經(jīng)配置以執(zhí)行與被切換到的上下文相關(guān)聯(lián)的執(zhí)行程序指令。所述仲裁單元耦接至所述執(zhí)行核心,且經(jīng)配置以控制所述執(zhí)行核心在不同上下文之間的切換。所述掃描輸出引擎經(jīng)配置以將所產(chǎn)生的像素?cái)?shù)據(jù)幀等時(shí)地傳輸至顯示端口,并經(jīng)耦接以周期性地將觸發(fā)信號(hào)傳輸至所述仲裁單元。所述上下文包括渲染上下文,其具有用于產(chǎn)生圖像數(shù)據(jù)的第一程序指令序列與其相關(guān)聯(lián);及后處理上下文,其具有用于根據(jù)所述圖像數(shù)據(jù)來(lái)產(chǎn)生像素?cái)?shù)據(jù)幀的程序指令與其相關(guān)聯(lián)。所述仲裁單元進(jìn)一步經(jīng)配置以響應(yīng)于所述觸發(fā)信號(hào)而將所述執(zhí)行核心切換至所述后處理上下文。在某些實(shí)施例中,所述掃描輸出引擎進(jìn)一步配置成使所述觸發(fā)信號(hào)相對(duì)于幀事件的結(jié)束具有實(shí)質(zhì)固定的時(shí)間關(guān)系。
在某些實(shí)施例中,所述仲裁單元進(jìn)一步經(jīng)配置以使所述執(zhí)行核心保持于所述后處理上下文中,直至在所述第二程序指令流中檢測(cè)到幀終止事件為止,并在此后將所述執(zhí)行核心切換至所述渲染上下文。所述幀結(jié)束事件可例如對(duì)應(yīng)于在所述第二程序指令流中出現(xiàn)一指向所述第二程序指令流的起點(diǎn)的無(wú)條件跳轉(zhuǎn)指令。
根據(jù)本發(fā)明的另一方面,提供一種用于產(chǎn)生圖像的方法。在處理器的共享執(zhí)行核心中,操作渲染目標(biāo)程序;所述渲染目標(biāo)程序響應(yīng)于第一程序指令序列而產(chǎn)生圖像的片段數(shù)據(jù)。與操作所述渲染目標(biāo)程序并行地,操作掃描輸出引擎以將像素?cái)?shù)據(jù)幀等時(shí)地遞送至顯示裝置;所述掃描輸出引擎周期性地產(chǎn)生觸發(fā)信號(hào)。響應(yīng)于所述觸發(fā)信號(hào),在所述處理器的共享執(zhí)行核心中操作后處理目標(biāo)程序;所述后處理目標(biāo)程序響應(yīng)于第二程序指令序列而根據(jù)一個(gè)或多個(gè)圖像的片段數(shù)據(jù)來(lái)產(chǎn)生新的像素?cái)?shù)據(jù)幀,且可將所述新的像素?cái)?shù)據(jù)幀提供至所述掃描輸出引擎。在某些實(shí)施例中,所述第二程序指令序列可例如包括用于對(duì)圖像的所述片段數(shù)據(jù)進(jìn)行下降過(guò)濾的指令;用于對(duì)圖像的所述片段數(shù)據(jù)進(jìn)行升高過(guò)濾的指令;用于為所述幀中每一像素計(jì)算一LCD過(guò)激勵(lì)值的指令;及/或用于使用兩個(gè)或更多個(gè)不同圖像的片段數(shù)據(jù)來(lái)形成合成圖像的指令。
根據(jù)本發(fā)明的再一方面,一種圖形處理系統(tǒng)包括圖像緩沖器、幀緩沖器及多處理器。每一圖像緩沖器經(jīng)配置以存儲(chǔ)圖像的片段數(shù)據(jù),且每一幀緩沖器經(jīng)配置以存儲(chǔ)幀的像素?cái)?shù)據(jù)。所述多處理器包括可編程執(zhí)行核心、仲裁單元、及掃描輸出引擎。所述可編程執(zhí)行核心配置成可在若干上下文之間進(jìn)行切換,以便所述執(zhí)行核心執(zhí)行與被切換到的上下文相關(guān)聯(lián)的程序指令。所述仲裁單元耦接至所述執(zhí)行核心,且經(jīng)配置以控制所述執(zhí)行核心在不同上下文之間的切換。所述掃描輸出引擎經(jīng)配置以將像素?cái)?shù)據(jù)幀等時(shí)地從所述幀緩沖器傳輸至顯示端口,并經(jīng)耦接以周期性地將觸發(fā)信號(hào)傳輸至所述多處理器的仲裁單元。所述上下文包括渲染上下文,其具有用于產(chǎn)生圖像的片段數(shù)據(jù)及將每一圖像的所述片段數(shù)據(jù)寫(xiě)入至所述圖像緩沖器之一的第一程序指令序列與其相關(guān)聯(lián);及后處理上下文,其具有用于根據(jù)所述圖像緩沖器中的幀數(shù)據(jù)來(lái)產(chǎn)生像素?cái)?shù)據(jù)幀并將所述幀的像素?cái)?shù)據(jù)寫(xiě)入至所述幀緩沖器之一的第二程序指令序列與其相關(guān)聯(lián)。所述仲裁單元進(jìn)一步經(jīng)配置以響應(yīng)于所述觸發(fā)信號(hào)而將所述執(zhí)行核心切換至所述后處理上下文。
下文
具體實(shí)施例方式
部分與附圖一起將使人們能夠更好地了解本發(fā)明的性質(zhì)及優(yōu)點(diǎn)。
圖1是根據(jù)本發(fā)明一實(shí)施例的計(jì)算機(jī)系統(tǒng)的高階方塊圖;
圖2是根據(jù)本發(fā)明一實(shí)施例的圖形處理子系統(tǒng)的數(shù)據(jù)流圖;圖3A圖解說(shuō)明根據(jù)本發(fā)明一實(shí)施例的渲染命令流;圖3B圖解說(shuō)明根據(jù)本發(fā)明一實(shí)施例的后處理程序;圖4是一方塊圖,其顯示根據(jù)本發(fā)明一實(shí)施例的多處理器的各組件;圖5是根據(jù)本發(fā)明一實(shí)施例的仲裁邏輯過(guò)程的流程圖;圖6是一方塊圖,其顯示根據(jù)本發(fā)明另一實(shí)施例的多處理器的各組件;圖7圖解說(shuō)明根據(jù)本發(fā)明一實(shí)施例的渲染命令流,其具有用于寫(xiě)入后處理程序的命令;圖8是根據(jù)本發(fā)明一實(shí)施例的支持兩個(gè)掃描輸出引擎的多處理器的方塊圖;圖9圖解說(shuō)明一合成圖像;圖10是根據(jù)本發(fā)明一實(shí)施例的支持合成圖像的多處理器的方塊圖;圖11圖解說(shuō)明根據(jù)本發(fā)明一實(shí)施例用于形成合成圖像的后處理程序;圖12是根據(jù)本發(fā)明一實(shí)施例用于產(chǎn)生LCD過(guò)激勵(lì)值的過(guò)程的流程圖;及圖13是根據(jù)本發(fā)明一實(shí)施例的用于旋轉(zhuǎn)圖像的過(guò)程的流程圖。
具體實(shí)施方式
概述及術(shù)語(yǔ)本發(fā)明的實(shí)施例提供圖形處理器,在所述圖形處理器中,渲染目標(biāo)程序與后處理目標(biāo)程序通過(guò)可編程的執(zhí)行核心來(lái)共享對(duì)主機(jī)處理器的存取。以渲染步調(diào)運(yùn)行的所述渲染目標(biāo)程序根據(jù)幾何數(shù)據(jù)來(lái)產(chǎn)生圖像的片段數(shù)據(jù),并將所述片段數(shù)據(jù)寫(xiě)入至圖像緩沖器。以?huà)呙栎敵?顯示)步調(diào)運(yùn)行的后處理目標(biāo)程序根據(jù)在一個(gè)或多個(gè)填滿(mǎn)的圖像緩沖器中的片段數(shù)據(jù)來(lái)產(chǎn)生像素?cái)?shù)據(jù),并將所述像素?cái)?shù)據(jù)寫(xiě)入至幀緩沖器中。并行地,掃描輸出引擎從不同的幀緩沖器中讀取先前所產(chǎn)生的幀的像素?cái)?shù)據(jù),并將所述像素提供至顯示裝置。與所述掃描輸出作業(yè)同步地,所述掃描輸出引擎觸發(fā)所述主機(jī)處理器以?huà)呙栎敵霾秸{(diào)執(zhí)行所述后處理目標(biāo)程序,以便當(dāng)所述掃描輸出引擎結(jié)束對(duì)當(dāng)前幀的讀取時(shí),下一個(gè)幀將準(zhǔn)備就緒。
在本文中使用以下術(shù)語(yǔ)術(shù)語(yǔ)“圖像”是指構(gòu)成某個(gè)圖片的表示形式的“片段”陣列,其中每一片段均具有顏色并可具有其他屬性,例如深度、透明度等等。片段顏色可表示為任意方便的格式,包括紅色/綠色/藍(lán)色(RGB)、亮度-色度(YCrCb)、色調(diào)/光亮度/飽和(HLS)、單色強(qiáng)度值、或其他格式,并具有任何所需程度的分辨率。所述片段并不需要在數(shù)量或布置上相對(duì)于顯示裝置具有任何特定關(guān)系,且所述片段陣列在各片段之間既可具有也可不具有均勻的間距。
“渲染”大體是指根據(jù)景物數(shù)據(jù)(其通常包括圖元及相關(guān)幾何數(shù)據(jù))產(chǎn)生圖像或片段數(shù)據(jù)的過(guò)程。渲染過(guò)程可包括許多級(jí),例如頂點(diǎn)處理(變換至屏幕空間)、設(shè)置(在屏幕空間中選擇所關(guān)心的圖元及屬性)、光柵化(對(duì)片段位置陣列進(jìn)行取樣,以確定哪一(哪些)圖元覆蓋每一片段)、著色(根據(jù)哪一(哪些)圖元覆蓋一片段而產(chǎn)生該片段的屬性)、及著色后光柵操作(例如通過(guò)降低過(guò)濾來(lái)變換片段陣列)。一般以平均速度(“渲染步調(diào)”)對(duì)圖像進(jìn)行渲染,在某些實(shí)施例中,所述平均速度是適用于動(dòng)畫(huà)的速度,例如每秒約30個(gè)圖像。渲染過(guò)程的細(xì)節(jié)對(duì)于本發(fā)明而言并不重要,且渲染速度可在圖像之間出現(xiàn)波動(dòng)。
經(jīng)渲染的圖像顯示于一使用“像素”陣列或光柵的顯示裝置上,其中響應(yīng)于作為像素值的函數(shù)的驅(qū)動(dòng)信號(hào),每一像素均顯示一顏色。如上文所述,顯示裝置的像素既可對(duì)應(yīng)于也可不對(duì)應(yīng)于經(jīng)渲染圖像的單個(gè)片段。本文中所述的“幀”大體是指像素光柵的完整的一組像素值。新的幀是以規(guī)定的屏幕刷新速率或“顯示步調(diào)”(例如80Hz)進(jìn)行顯示,所述規(guī)定的屏幕刷新速率或“顯示步調(diào)”可以是用戶(hù)可選的參數(shù)。各連續(xù)的幀可顯示同一圖像或不同圖像。
“后處理”大體是指處理一個(gè)或多個(gè)圖像的片段數(shù)據(jù),以產(chǎn)生像素?cái)?shù)據(jù)幀。后處理較佳以顯示步調(diào)(屏幕刷新速率)進(jìn)行,顯示步調(diào)一般高于動(dòng)畫(huà)速度。根據(jù)本發(fā)明可實(shí)施許多后處理操作。下文是許多實(shí)例;應(yīng)了解,本發(fā)明并非僅限于后處理操作的任何特定組合或序列。
一個(gè)后處理操作是過(guò)濾,其涉及到對(duì)來(lái)自一個(gè)圖像的不同片段的值進(jìn)行混合,以獲得單個(gè)像素值。過(guò)濾可使像素?cái)?shù)量不同于片段數(shù)量。在一個(gè)實(shí)施例中,可對(duì)片段進(jìn)行下降過(guò)濾,以產(chǎn)生少于片段數(shù)量的像素?cái)?shù)量。舉例而言,每一像素值可為鄰近片段值的加權(quán)平均值。下降過(guò)濾可用于減小圖像大小、構(gòu)建圖形保真作為過(guò)取樣(例如多重取樣)操作的最后一級(jí)等等。另一選擇為,可對(duì)各片段進(jìn)行上升過(guò)濾,以產(chǎn)生大于片段數(shù)量的像素?cái)?shù)量。例如,可使用內(nèi)插在輸入片段值之間添加額外像素值或者添加額外像素值來(lái)取代輸入片段值??墒褂蒙仙^(guò)濾例如來(lái)放大要顯示的圖像。
另一后處理操作是合成,其大體是指將來(lái)自?xún)蓚€(gè)或更多個(gè)圖像的片段組合成最終圖像。例如,可將光標(biāo)圖像覆蓋于屏幕圖像的一部分上,或者可將視頻圖像(例如電影)覆蓋于桌面上的窗口中。在某些實(shí)施例中,所組合的圖像可按不同的速率進(jìn)行更新,從而使得除以顯示步調(diào)外,難以正確地組合這些圖像。在某些實(shí)施例中,合成也可包括對(duì)圖像進(jìn)行混合以產(chǎn)生例如淡入、淡出或漸隱等效果。為得到這些效果,可使用隨時(shí)間變化的相應(yīng)權(quán)重來(lái)混合舊的與新的圖像。
再一后處理操作是表面映射,其大體是指將圖像的片段數(shù)據(jù)映射至2-D或3-D表面上并將該表面投影至像素陣列上。在一個(gè)實(shí)施例中,可將片段數(shù)據(jù)映射至梯形表面上,以為作為投影儀的顯示裝置提供“梯形失真”校正;所述梯形表面的形狀及尺寸可由用戶(hù)進(jìn)行調(diào)整,以補(bǔ)償當(dāng)來(lái)自投影儀的光束軸線(xiàn)不垂直于屏幕或其他顯示表面時(shí)所出現(xiàn)的眾所周知的失真。在其他實(shí)施例中,也可將片段數(shù)據(jù)映射至任意形狀的表面上,可對(duì)所述任意形狀的表面進(jìn)行界定以便產(chǎn)生所需的視覺(jué)效果或者以便支持以減小的失真投影至非平整表面(例如圓柱體或穹頂)上。
另一后處理操作是表面旋轉(zhuǎn),其是指將圖像的片段數(shù)據(jù)映射至已圍繞垂直于圖像的軸線(xiàn)旋轉(zhuǎn)過(guò)某一角度(例如90°的倍數(shù))的2-D表面上。例如,順時(shí)針旋轉(zhuǎn)90°將使圖像的左上角中的片段出現(xiàn)于像素陣列的右上角處,使圖像中的水平線(xiàn)變成像素陣列中的垂直線(xiàn),等等。可將表面旋轉(zhuǎn)視為上文所述表面映射操作的一特例。在一個(gè)實(shí)施例中,對(duì)以可旋轉(zhuǎn)方式安裝的顯示裝置使用表面旋轉(zhuǎn),對(duì)于圖形輸入板PC顯示器及某些平板監(jiān)視器即為如此。
再一后處理操作是發(fā)光度補(bǔ)償。例如,當(dāng)將圖像投影至屏幕上時(shí),距投影儀較遠(yuǎn)的像素往往比較近的像素更暗?;蛘?,如果屏幕周?chē)沫h(huán)境光不均勻,則屏幕的一部分可能看起來(lái)比其余部分更亮。發(fā)光度補(bǔ)償可通過(guò)隨屏幕位置補(bǔ)償像素亮度來(lái)修正這些效應(yīng),且用戶(hù)能夠根據(jù)需要調(diào)整各種發(fā)光度補(bǔ)償參數(shù)。
其他后處理操作對(duì)特定顯示裝置的性質(zhì)進(jìn)行補(bǔ)償。例如,常常使用γ修正使像素值以指數(shù)方式按比例換算,以便補(bǔ)償由模擬信號(hào)所驅(qū)動(dòng)的顯示裝置中的非線(xiàn)性電壓響應(yīng)。作為另一實(shí)例,在LCD監(jiān)視器中,可通過(guò)為每一像素提供一驅(qū)動(dòng)值來(lái)改善響應(yīng)時(shí)間,所述驅(qū)動(dòng)值部分地取決于所需亮度及部分地取決于所述亮度相對(duì)于前一幀的改變量。在后處理中也可實(shí)施專(zhuān)用于其他類(lèi)型顯示裝置的其他補(bǔ)償操作。
在某些實(shí)施例中,后處理操作是為得到正確結(jié)果而應(yīng)以顯示步調(diào)進(jìn)行的操作,例如LCD過(guò)激勵(lì)或合成。當(dāng)渲染與掃描輸出不同步時(shí),常常很難或不可能在渲染時(shí)確定渲染步調(diào)將如何與顯示步調(diào)相配合,且因此如果要在渲染過(guò)程中進(jìn)行所述操作,也將很難或不可能確保結(jié)果正確。
“掃描輸出”大體是指將幀(在后處理之后)的像素?cái)?shù)據(jù)傳送至一連接至顯示裝置的輸出路徑。像后處理一樣,掃描輸出是以顯示步調(diào)進(jìn)行。在某些實(shí)施例中,通過(guò)后處理所產(chǎn)生的像素?cái)?shù)據(jù)早已呈適用于驅(qū)動(dòng)顯示裝置的格式。在其他實(shí)施例中,掃描輸出可包括將像素?cái)?shù)據(jù)變換成適當(dāng)格式,并可包括重新按比例縮放、數(shù)字—模擬轉(zhuǎn)換及其他信號(hào)處理技術(shù)。
系統(tǒng)概述圖1是根據(jù)本發(fā)明一實(shí)施例的計(jì)算機(jī)系統(tǒng)100的方塊圖。計(jì)算機(jī)系統(tǒng)100包括通過(guò)總線(xiàn)106進(jìn)行通信的中央處理器(CPU)102及系統(tǒng)存儲(chǔ)器104。從耦接至總線(xiàn)106的一個(gè)或多個(gè)用戶(hù)輸入裝置108(例如鍵盤(pán)、鼠標(biāo))接收用戶(hù)輸入。在基于像素的顯示裝置110(例如傳統(tǒng)的基于CRT或LCD的監(jiān)視器)上提供視覺(jué)輸出,所述顯示裝置110在耦接至系統(tǒng)總線(xiàn)106的圖形處理子系統(tǒng)112的控制下運(yùn)行。系統(tǒng)盤(pán)107及其他組件—例如一個(gè)或多個(gè)可拆卸存儲(chǔ)裝置129(例如軟盤(pán)驅(qū)動(dòng)器、光盤(pán)(CD)驅(qū)動(dòng)器、及/或DVD驅(qū)動(dòng)器)—也可耦接至系統(tǒng)總線(xiàn)106。系統(tǒng)總線(xiàn)106可使用各種總線(xiàn)協(xié)議中的一種或多種來(lái)構(gòu)建,這些總線(xiàn)協(xié)議包括PCI(外圍組件互連)、AGP(高級(jí)圖形處理)及/或PCI-Express(PCI-E);可提供例如北橋及南橋(未顯示)等恰當(dāng)?shù)摹皹蚴健毙酒瑏?lái)互連各種組件及/或總線(xiàn)。
圖形處理子系統(tǒng)112包括圖形處理單元(GPU)114及圖形存儲(chǔ)器116-其可例如使用一個(gè)或多個(gè)集成電路裝置(例如可編程處理器、應(yīng)用專(zhuān)用集成電路(ASIC)及存儲(chǔ)裝置)來(lái)構(gòu)建。GPU 114包括多處理器120、存儲(chǔ)器接口模塊122、及掃描輸出模塊124。
多處理器120可經(jīng)配置以為圖形處理子系統(tǒng)120實(shí)施渲染及后處理任務(wù)。多處理器120包括可編程執(zhí)行核心(在圖1中未明確顯示),并能夠同時(shí)執(zhí)行兩個(gè)或更多個(gè)過(guò)程。一個(gè)過(guò)程是“渲染目標(biāo)程序”132,其較佳經(jīng)配置以根據(jù)由在CPU 102上執(zhí)行的各種程序所提供的2-D或3-D景物數(shù)據(jù)來(lái)產(chǎn)生圖像(片段)數(shù)據(jù)。另一過(guò)程是“后處理目標(biāo)程序”134,其經(jīng)配置以將片段數(shù)據(jù)變換成準(zhǔn)備在顯示裝置110上顯示的像素?cái)?shù)據(jù)。在一個(gè)實(shí)施例中,在任一既定時(shí)刻,在多處理器120的這些過(guò)程中只有一個(gè)過(guò)程現(xiàn)用;可切換入及切換出不同的過(guò)程,以提供同時(shí)處理的效果。在某些實(shí)施例中,渲染目標(biāo)程序132與后處理目標(biāo)程序134可構(gòu)建于同一實(shí)體處理引擎中,所述實(shí)體處理引擎較佳能夠進(jìn)行上下文切換以同時(shí)支持這兩個(gè)目標(biāo)程序;在其他實(shí)施例中,則將渲染目標(biāo)程序132與后處理目標(biāo)程序134分別構(gòu)建于單獨(dú)的處理引擎中,且不需要在其間進(jìn)行上下文切換。在下文中將進(jìn)一步說(shuō)明多處理器120的特定實(shí)施例。
與多處理器120及掃描輸出引擎124進(jìn)行通信的存儲(chǔ)器接口模塊122管理與圖形存儲(chǔ)器116進(jìn)行的所有交互作用。存儲(chǔ)器接口模塊122還可包括用于將從系統(tǒng)總線(xiàn)106接收的片段或像素?cái)?shù)據(jù)寫(xiě)入至圖形存儲(chǔ)器116中的恰當(dāng)位置而不由多處理器120處理的路徑。可根據(jù)需要改變存儲(chǔ)器接口模塊122的特定配置,且由于其對(duì)于理解本發(fā)明而言無(wú)關(guān)緊要,因而不再對(duì)其加以贅述。
圖形處理器116可使用一個(gè)或多個(gè)一般傳統(tǒng)設(shè)計(jì)的集成電路存儲(chǔ)裝置來(lái)構(gòu)建,其可包含各種物理或邏輯分區(qū),例如渲染緩沖器126、顯示緩沖器127、渲染命令緩沖器128及后處理(PP)命令緩沖器129。渲染緩沖器126存儲(chǔ)由渲染目標(biāo)程序132或由在CPU 102上執(zhí)行的各種過(guò)程所產(chǎn)生的一個(gè)或多個(gè)圖像的片段數(shù)據(jù)。渲染緩沖器126較佳緩沖多個(gè)不同的圖像,包括由同一過(guò)程所產(chǎn)生的圖像序列,以便當(dāng)正對(duì)第一圖像的片段數(shù)據(jù)進(jìn)行后處理時(shí),可將后一圖像的片段數(shù)據(jù)寫(xiě)入至渲染緩沖器126中的不同區(qū)域。
顯示緩沖器127存儲(chǔ)由后處理目標(biāo)程序134根據(jù)渲染緩沖器126中的片段數(shù)據(jù)所產(chǎn)生的像素?cái)?shù)據(jù)。顯示緩沖器127較佳存儲(chǔ)至少兩個(gè)完整的像素?cái)?shù)據(jù)幀,以便在正將下一個(gè)幀寫(xiě)入至“后面”緩沖器時(shí),可從“前面”緩沖器中掃描輸出一個(gè)幀的像素?cái)?shù)據(jù)。
渲染命令緩沖器128及PP命令緩沖器129用于對(duì)經(jīng)由系統(tǒng)總線(xiàn)106接收到的命令進(jìn)行排隊(duì),以供由多處理器120執(zhí)行。渲染命令緩沖器128中的命令將由渲染目標(biāo)程序132執(zhí)行,而PP命令緩沖器129中的命令將由后處理目標(biāo)程序134執(zhí)行,如在下文中所述。
圖形存儲(chǔ)器116的其他部分可用于存儲(chǔ)GPU 114所需的數(shù)據(jù)(例如紋理數(shù)據(jù)、顏色查找表等等)、GPU 114的可執(zhí)行程序碼等等。
可與多處理器120集成于單個(gè)芯片上或構(gòu)建于單獨(dú)芯片上的掃描輸出引擎124從像素緩沖器127中讀取像素?cái)?shù)據(jù)并將所述數(shù)據(jù)傳送至顯示裝置110進(jìn)行顯示。在一個(gè)實(shí)施例中,掃描輸出引擎124等時(shí)地運(yùn)行,無(wú)論在GPU 114中或系統(tǒng)100中的其他位置中可進(jìn)行的任何其他活動(dòng)如何,均以規(guī)定的刷新速率(例如80Hz)來(lái)掃描輸出像素?cái)?shù)據(jù)幀。在某些實(shí)施例中,所述規(guī)定的刷新速率可以是用戶(hù)可選擇的參數(shù),且可根據(jù)顯示格式來(lái)改變掃描輸出次序(例如交錯(cuò)掃描或漸進(jìn)掃描)。掃描輸出引擎124可包括用于數(shù)據(jù)格式化、數(shù)字—模擬轉(zhuǎn)換的電路、及用于將像素?cái)?shù)據(jù)轉(zhuǎn)換成適用于顯示裝置的格式的其他信號(hào)處理電路。可根據(jù)需要改變掃描輸出引擎124的特定配置。
在系統(tǒng)100的工作過(guò)程中,CPU 102執(zhí)行各種程序,例如操作系統(tǒng)程序、應(yīng)用程序、及圖形處理子系統(tǒng)112的一個(gè)或多個(gè)驅(qū)動(dòng)程序。所述驅(qū)動(dòng)程序可構(gòu)建傳統(tǒng)的應(yīng)用程序界面(API),例如OpenGL、Microsoft DirectX或D3D,所述應(yīng)用程序界面(API)使應(yīng)用程序及操作系統(tǒng)程序能夠調(diào)用圖形處理子系統(tǒng)112的各種功能,此在所屬領(lǐng)域中眾所周知。
圖形處理子系統(tǒng)112的操作較佳與系統(tǒng)100的其他操作不同步。例如,在某些實(shí)施例中,渲染命令緩沖器128與PP命令緩沖器129對(duì)經(jīng)由系統(tǒng)總線(xiàn)106所接收的命令進(jìn)行排隊(duì),以供由GPU 114執(zhí)行。更具體而言,在CPU 102上執(zhí)行的圖形驅(qū)動(dòng)器可將渲染命令流或程序?qū)懭胫龄秩久罹彌_器128并將后處理命令流或程序?qū)懭胫罰P命令緩沖器129。所述命令流保持于其各自的命令緩沖器128、129中,直至GPU 114準(zhǔn)備對(duì)其進(jìn)行處理為止。
渲染命令緩沖器128較佳構(gòu)建為先進(jìn)先出緩沖器(FIFO),其由GPU(更具體而言,由在GPU上執(zhí)行的圖形驅(qū)動(dòng)器)寫(xiě)入并由GPU 114(更具體而言,由多處理器120上的渲染目標(biāo)程序132)讀取。讀取與寫(xiě)入可不同步地進(jìn)行。在一個(gè)實(shí)施例中,圖形驅(qū)動(dòng)器周期性地將新命令及數(shù)據(jù)寫(xiě)入至渲染命令緩沖器128中由“放置”指針?biāo)_定的位置上,在每一次寫(xiě)入之后,圖形驅(qū)動(dòng)器均遞增所述“放置”指針。不同步地,渲染目標(biāo)程序132可依序讀取及處理先前存儲(chǔ)于渲染命令緩沖器128中的所述命令以及數(shù)據(jù)。渲染目標(biāo)程序132保持一“得到”指針,以識(shí)別命令緩沖器128中的當(dāng)前讀取位置,且該得到指針在每一次讀取之后遞增。在圖形驅(qū)動(dòng)器保持充分超前于渲染目標(biāo)程序132的條件下,GPU 114能夠在不引起等待CPU 102的空閑時(shí)間的情況下渲染圖像。在某些實(shí)施例中,視渲染命令緩沖器128及景物的復(fù)雜度而定,圖形驅(qū)動(dòng)器可正在為超前于渲染目標(biāo)程序132當(dāng)前所正渲染的圖像的幾個(gè)圖像寫(xiě)入命令及數(shù)據(jù)。渲染命令緩沖器128可為固定尺寸(例如5兆字節(jié)),并可以環(huán)繞方式進(jìn)行寫(xiě)入及讀取(例如在寫(xiě)入至最末位置之后,圖形驅(qū)動(dòng)器可將“放置”指針復(fù)位至第一位置;類(lèi)似地,在從最末位置讀取之后,渲染目標(biāo)程序132可將“得到”指針復(fù)位至第一位置)。
PP命令緩沖器129較佳構(gòu)建為圓形隊(duì)列。圖形驅(qū)動(dòng)程序并非為每一個(gè)幀均寫(xiě)入新的后處理命令流,而是可向PP命令緩沖器129寫(xiě)入一次后處理流或程序并僅當(dāng)要改變后處理時(shí)寫(xiě)入新的流或程序。多處理器120的后處理目標(biāo)程序如下文所述對(duì)每一個(gè)幀執(zhí)行該流,且所執(zhí)行的命令可保留于PP命令緩沖器129中以供此后再執(zhí)行。PP命令緩沖器129可為固定尺寸(例如1兆字節(jié)),且可通過(guò)一無(wú)條件“跳轉(zhuǎn)”命令來(lái)結(jié)束所述命令流,所述無(wú)條件“跳轉(zhuǎn)”命令將控制轉(zhuǎn)交回至所述命令流的開(kāi)頭以便處理下一個(gè)幀。
在某些實(shí)施例中,多處理器120進(jìn)行的渲染目標(biāo)程序132的操作與任何其他操作均不同步,而后處理目標(biāo)程序134的操作則與掃描輸出引擎124的操作同步,以便以顯示步調(diào)進(jìn)行后處理。例如,多處理器120可周期性地(例如每一個(gè)掃描輸出幀一次)暫停渲染目標(biāo)程序132并將后處理目標(biāo)程序134操作一足夠長(zhǎng)的時(shí)間,以使后處理目標(biāo)程序134能夠產(chǎn)生屏幕像素?cái)?shù)據(jù)幀并將該數(shù)據(jù)寫(xiě)入至顯示緩沖器127。下文將說(shuō)明能提供適當(dāng)操作的控制機(jī)制的實(shí)例。
應(yīng)了解,本文所述的系統(tǒng)只是例示性的,且也可具有各種變化形式及修改形式。GPU可使用任何適當(dāng)?shù)募夹g(shù)來(lái)構(gòu)建,例如構(gòu)建為一個(gè)或多個(gè)集成電路裝置。GPU可安裝于可包含一個(gè)或多個(gè)這種處理器的擴(kuò)展卡上、直接安裝于系統(tǒng)母板上、或集成至系統(tǒng)芯片組組件中(例如集成至一個(gè)常用PC系統(tǒng)架構(gòu)的北橋芯片中)。所述圖形處理子系統(tǒng)可包括任意量的專(zhuān)用圖形存儲(chǔ)器(某些實(shí)施方案可不具有專(zhuān)用圖形存儲(chǔ)器),并可使用系統(tǒng)存儲(chǔ)器與專(zhuān)用圖形存儲(chǔ)器的任意組合形式。掃描輸出電路可與GPU相集成或者提供于單獨(dú)的芯片上,并可例如使用一個(gè)或多個(gè)ASIC、可編程處理器元件、其他集成電路技術(shù)、或其任一組合來(lái)構(gòu)建。此外,可將實(shí)施本發(fā)明的GPU并入各種裝置中,包括通用計(jì)算機(jī)系統(tǒng)、視頻游戲控制臺(tái)及其他專(zhuān)用計(jì)算機(jī)系統(tǒng)、DVD播放器、例如移動(dòng)電話(huà)或個(gè)人數(shù)字助理等手持式裝置、等等。
數(shù)據(jù)流綜覽圖2是圖形處理子系統(tǒng)112的數(shù)據(jù)流圖,其進(jìn)一步圖解說(shuō)明多處理器120、渲染目標(biāo)程序132、后處理目標(biāo)程序134及掃描輸出引擎124之間的關(guān)系。數(shù)據(jù)傳播是由實(shí)線(xiàn)箭頭表示,命令傳播是由空心箭頭表示,且控制信號(hào)傳播是由虛線(xiàn)箭頭表示。
在圖2中,將渲染緩沖器126顯示為包括三個(gè)圖像緩沖器226(在本文中分別稱(chēng)作A、B及C)及一旗語(yǔ)存儲(chǔ)區(qū)域206。圖像緩沖器226分別大至足以存儲(chǔ)一個(gè)圖像的所有片段數(shù)據(jù),且較佳操作渲染目標(biāo)程序132來(lái)將一個(gè)圖像的所有片段數(shù)據(jù)寫(xiě)入至緩沖器A、將下一圖像的所有片段數(shù)據(jù)寫(xiě)入至緩沖器B,依此類(lèi)推。應(yīng)了解,可提供任意數(shù)量的圖像緩沖器226。旗語(yǔ)區(qū)域206用于如下文所述控制對(duì)圖像緩沖器226的存取。
圖中顯示顯示緩沖器127包括兩個(gè)幀緩沖器227(在本文中分別稱(chēng)作X及Y)以及一緩沖器選擇(BSEL)存儲(chǔ)區(qū)域208。幀緩沖器227分別大至足以存儲(chǔ)一完整幀的所有像素?cái)?shù)據(jù),且可操作后處理目標(biāo)程序134以將一個(gè)幀寫(xiě)入至緩沖器X、將下一個(gè)幀寫(xiě)入至緩沖器Y、依此類(lèi)推。BSEL存儲(chǔ)區(qū)域208大至足以存儲(chǔ)一唯一地標(biāo)識(shí)掃描輸出引擎124將讀取哪一幀緩沖器227的值。在一個(gè)實(shí)施例中,BSEL存儲(chǔ)區(qū)域208存儲(chǔ)用于標(biāo)識(shí)幀緩沖器X(如果該位為0)或幀緩沖器Y(如果該位為1)的單個(gè)位。在另一實(shí)施例中,BSEL存儲(chǔ)區(qū)域208存儲(chǔ)圖形存儲(chǔ)器116中幀緩沖器X或幀緩沖器Y中一者的起始地址的標(biāo)識(shí)符(例如偏移量值)。也可使用其他標(biāo)識(shí)符。
在該實(shí)施例中,渲染目標(biāo)程序132例如經(jīng)由系統(tǒng)總線(xiàn)106接收幾何數(shù)據(jù)。可將所接收的幾何數(shù)據(jù)存儲(chǔ)于圖形存儲(chǔ)器116中、多處理器120的單芯片數(shù)據(jù)高速緩沖存儲(chǔ)器(未顯示)中、或其他地方。渲染目標(biāo)程序132根據(jù)由渲染命令緩沖器128所提供的命令來(lái)處理幾何數(shù)據(jù),以產(chǎn)生圖像的片段數(shù)據(jù)。所述片段數(shù)據(jù)寫(xiě)入至其中一個(gè)幀緩沖器226中,例如寫(xiě)入至緩沖器A。
后處理目標(biāo)程序134根據(jù)從PP命令緩沖器129所接收的命令來(lái)處理圖像緩沖器226中的片段數(shù)據(jù),以產(chǎn)生幀的像素?cái)?shù)據(jù)。所述像素?cái)?shù)據(jù)寫(xiě)入至其中一個(gè)幀緩沖器227,例如寫(xiě)入至緩沖器X。在該實(shí)施例中,后處理目標(biāo)程序134可從除渲染目標(biāo)程序132當(dāng)前所正寫(xiě)入的一個(gè)圖像緩沖器226以外的任何圖像緩沖器226獲得片段數(shù)據(jù),例如如果渲染目標(biāo)程序132正向緩沖器A進(jìn)行寫(xiě)入,則從緩沖器B及/或C獲得片段數(shù)據(jù)。
掃描輸出引擎124從其中一個(gè)幀緩沖器227讀取像素?cái)?shù)據(jù),并將其提供至顯示裝置。在該實(shí)施例中,掃描輸出引擎124從在BSEL存儲(chǔ)區(qū)域208中所標(biāo)識(shí)的幀緩沖器227中進(jìn)行讀取,所述幀緩沖器227較佳不與后處理目標(biāo)程序134所正寫(xiě)入的幀緩沖器相同;例如,如果后處理目標(biāo)程序134正向幀緩沖器X進(jìn)行寫(xiě)入,則掃描輸出引擎124將從緩沖器Y進(jìn)行讀取。掃描輸出引擎124可使像素?cái)?shù)據(jù)不加修改地通過(guò),或者其可應(yīng)用數(shù)字—模擬轉(zhuǎn)換及/或其他信號(hào)處理算法將所述數(shù)據(jù)正確地格式化,以供遞送至顯示裝置。在某些實(shí)施例中,在將像素?cái)?shù)據(jù)寫(xiě)入至幀緩沖器227之前,由后處理目標(biāo)程序134實(shí)施除數(shù)字—模擬轉(zhuǎn)換以外的所有逐幀處理;在其他實(shí)施例中,掃描輸出引擎124可實(shí)施某種處理。
掃描輸出引擎124較佳根據(jù)顯示裝置的要求將每一個(gè)幀的像素的遞送同步化,并能夠檢測(cè)某些事件,例如一行屏幕像素的結(jié)尾(在所屬領(lǐng)域中稱(chēng)作水平回掃)及屏幕的結(jié)尾(在所屬領(lǐng)域中稱(chēng)作垂直回掃)??墒褂脗鹘y(tǒng)技術(shù)來(lái)構(gòu)建掃描輸出引擎124。
在一替代實(shí)施例中,掃描輸出引擎124在交替的幀上讀取緩沖器X及Y,且后處理目標(biāo)程序134在交替的幀上對(duì)緩沖器Y及X進(jìn)行寫(xiě)入。在該實(shí)施例中,可使用BSEL存儲(chǔ)區(qū)域208來(lái)存儲(chǔ)一旗語(yǔ),所述旗語(yǔ)僅在初始化時(shí)用于使掃描輸出引擎124與后處理目標(biāo)程序134的操作同步。例如,可將要被掃描輸出的第一緩沖器(例如緩沖器X)的旗語(yǔ)存儲(chǔ)于BSEL存儲(chǔ)區(qū)域208中。在系統(tǒng)設(shè)置時(shí),將該旗語(yǔ)(其可例如為單個(gè)位)設(shè)定為鎖定(或被獲取)狀態(tài),以阻止掃描輸出引擎124讀取緩沖器X。在后處理目標(biāo)程序134將第一個(gè)幀寫(xiě)入至緩沖器X之后,其便釋放所述旗語(yǔ),從而啟用由掃描輸出引擎124從緩沖器X中進(jìn)行讀取操作。此后,所述旗語(yǔ)可保持于其釋放狀態(tài),并將保持正確的同步。
同步技術(shù)較佳逐個(gè)幀地對(duì)掃描輸出引擎124及后處理目標(biāo)程序134的操作進(jìn)行同步,此意味著對(duì)于掃描輸出引擎124從顯示緩沖器127中讀取的每一個(gè)幀,后處理目標(biāo)程序134均將一個(gè)新的幀寫(xiě)入至顯示緩沖器127。例如,較佳在掃描輸出引擎124從幀緩沖器Y中讀取一個(gè)幀的同時(shí),后處理目標(biāo)程序134將一個(gè)幀寫(xiě)入至幀緩沖器X。當(dāng)掃描輸出引擎124達(dá)到幀緩沖器Y的末尾時(shí),其便切換至讀取幀緩沖器X,同時(shí)后處理目標(biāo)程序134將一個(gè)幀寫(xiě)入至幀緩沖器Y。
在一個(gè)實(shí)施例中,使用一觸發(fā)器信號(hào)來(lái)處理該同步,所述觸發(fā)器信號(hào)由掃描輸出引擎124在“觸發(fā)器”路徑246上確定。所述觸發(fā)器信號(hào)對(duì)于每一個(gè)幀產(chǎn)生一次,較佳與幀結(jié)尾事件呈固定的時(shí)間關(guān)系。所述幀結(jié)尾事件可為任何會(huì)表明掃描輸出引擎124處于或接近幀結(jié)尾處的事件,例如垂直回掃(或vsync)事件,從當(dāng)前幀緩沖器中讀取最末(或距最末像素還有N個(gè))像素,或類(lèi)似事件。響應(yīng)于觸發(fā)器信號(hào)被確定,多處理器120激活后處理目標(biāo)程序134來(lái)產(chǎn)生一個(gè)新的像素?cái)?shù)據(jù)幀。在產(chǎn)生新的幀之后,多處理器120便停用后處理目標(biāo)程序134,直至觸發(fā)器信號(hào)下一次被確定為止。
較佳提供緩沖器同步來(lái)防止在正對(duì)緩沖器進(jìn)行掃描輸出的同時(shí),后處理目標(biāo)程序134寫(xiě)入至幀緩沖器227。在一個(gè)實(shí)施例中,每當(dāng)后處理目標(biāo)程序134結(jié)束一新的幀的產(chǎn)生時(shí),其便將所述新的幀的幀緩沖器227的標(biāo)識(shí)符(例如X或Y)寫(xiě)入至BSEL存儲(chǔ)區(qū)域208內(nèi),如由“BSEL_寫(xiě)入”路徑242所指示。在每一個(gè)幀開(kāi)始時(shí),掃描輸出引擎124均通過(guò)存取BSEL存儲(chǔ)區(qū)域208來(lái)確定要讀取哪一幀緩沖器227,如由“BSEL讀取”路徑244所指示。只要每一個(gè)幀對(duì)BSEL存儲(chǔ)區(qū)域208僅讀取一次并每一個(gè)幀對(duì)BSEL存儲(chǔ)區(qū)域208僅寫(xiě)入一次,便可對(duì)這些操作的定時(shí)進(jìn)行協(xié)調(diào)以避免出現(xiàn)競(jìng)爭(zhēng)狀態(tài)。例如,掃描輸出引擎124可恰好在產(chǎn)生觸發(fā)器信號(hào)之前、在后處理目標(biāo)程序134已結(jié)束產(chǎn)生新的幀并更新BSEL值之后,存取BSEL存儲(chǔ)區(qū)域208。
渲染目標(biāo)程序132與后處理目標(biāo)程序134的操作較佳不相互同步,這是因?yàn)楹筇幚砟繕?biāo)程序134以顯示步調(diào)(即屏幕刷新速率)產(chǎn)生幀,渲染目標(biāo)程序132則以渲染步調(diào)產(chǎn)生圖像,而渲染步調(diào)可不同于(例如慢于)顯示步調(diào)。在某些實(shí)施例中,使用緩沖器同步技術(shù)來(lái)避免出現(xiàn)其中后處理目標(biāo)程序134使用一個(gè)圖像(或圖像群組)來(lái)產(chǎn)生一幀的一部分、并使用一不同的圖像(或圖像群組)來(lái)產(chǎn)生同一幀的另一部分的情形,以及防止出現(xiàn)其中在后處理引擎132正從圖像緩沖器226進(jìn)行讀取的同時(shí)渲染目標(biāo)程序132向該緩沖器226進(jìn)行寫(xiě)入的情形。具體而言,可控制對(duì)圖像緩沖器226的存取,以使后處理目標(biāo)程序134不從渲染目標(biāo)程序132當(dāng)前正在寫(xiě)入的圖像緩沖器226進(jìn)行讀取,并使渲染目標(biāo)程序132不會(huì)覆寫(xiě)仍由后處理目標(biāo)程序134所需要的圖像緩沖器226。緩沖器同步機(jī)制可進(jìn)一步使得在各后處理幀之間出現(xiàn)對(duì)后處理目標(biāo)程序134所要讀取的圖像緩沖器的選擇的任何改動(dòng);此有助于避免在所顯示幀的不同部分中出現(xiàn)撕裂或其他視覺(jué)不一致現(xiàn)象。
圖2通過(guò)控制信號(hào)路徑232、234、236圖解說(shuō)明一種基于不對(duì)稱(chēng)旗語(yǔ)及緩沖器索引的用于圖像緩沖器226的緩沖器同步技術(shù)。渲染緩沖器126的旗語(yǔ)區(qū)域206存儲(chǔ)旗語(yǔ)207(SA,SB,SC),以用于控制由渲染目標(biāo)程序132對(duì)每一圖像緩沖器226的存取,以便不將新的片段數(shù)據(jù)寫(xiě)入至圖像緩沖器226,直至后處理目標(biāo)程序134已結(jié)束對(duì)于可存在于該緩沖器226中的任何舊片段數(shù)據(jù)的處理為止。每一旗語(yǔ)207較佳均具有“被獲取”及“釋放”狀態(tài),這些狀態(tài)用于如下文所述進(jìn)行存取控制。一般而言,傳統(tǒng)的旗語(yǔ)數(shù)據(jù)結(jié)構(gòu)及格式可適于構(gòu)建旗語(yǔ)207。
在渲染目標(biāo)程序132開(kāi)始寫(xiě)入新圖像的片段數(shù)據(jù)之前,其力圖獲取對(duì)應(yīng)于該片段數(shù)據(jù)所要寫(xiě)入的圖像緩沖器226的旗語(yǔ)207,如由“獲取”路徑232所指示。只有在后處理目標(biāo)程序134已將一圖像緩沖器的旗語(yǔ)釋放之后,渲染目標(biāo)程序132才可獲取該圖像緩沖器的旗語(yǔ);如下文所進(jìn)一步說(shuō)明,旗語(yǔ)釋放是在后處理目標(biāo)程序134不再需要相關(guān)聯(lián)的圖像緩沖器之后進(jìn)行。如果不能立即獲取旗語(yǔ)207,則渲染目標(biāo)程序132暫停其命令處理,并等待至例如可獲得旗語(yǔ)等時(shí)間為止,然后繼續(xù)進(jìn)行渲染。當(dāng)后處理目標(biāo)程序134以顯示步調(diào)(例如每一掃描輸出幀一次)釋放緩沖器時(shí),渲染目標(biāo)程序132一般將不需要等待。在其他實(shí)施例中,只要不需要以快于顯示步調(diào)的速率渲染新的圖像,渲染目標(biāo)程序132的執(zhí)行中的任何延遲均是可接受的。
當(dāng)渲染目標(biāo)程序132結(jié)束將一圖像的片段數(shù)據(jù)寫(xiě)入至其中一個(gè)圖像緩沖器226時(shí),其便釋放該緩沖器的旗語(yǔ)207,如由“釋放”路徑234所指示。釋放旗語(yǔ)207(例如旗語(yǔ)SA)會(huì)防止渲染目標(biāo)程序132存取相關(guān)聯(lián)的緩沖器226(例如緩沖器A),直至例如后處理目標(biāo)程序134釋放旗語(yǔ)207為止,如下文所述。在釋放旗語(yǔ)207之后(或與其同時(shí)),渲染目標(biāo)程序132將新的索引值寫(xiě)入PP命令緩沖器129內(nèi),如由“索引寫(xiě)入”路徑236所指示。所述索引值表示剛剛完成的圖像緩沖器226,并向后處理目標(biāo)程序134發(fā)出信號(hào)來(lái)指示該圖像緩沖器226現(xiàn)在可供用于處理。
在每一個(gè)幀開(kāi)始時(shí),后處理目標(biāo)程序134均從PP命令緩沖器129讀取索引值,如由“索引讀取”路徑238所指示。在一個(gè)實(shí)施例中,將索引作為PP命令緩沖器129中其中一個(gè)命令的自變數(shù)進(jìn)行讀取。根據(jù)該索引值,后處理目標(biāo)程序134確定其進(jìn)行后處理需要哪一圖像緩沖器226,并釋放所不需要的任何圖像緩沖器226的旗語(yǔ)207,如由“釋放”路徑240所指示。其旗語(yǔ)207被后處理目標(biāo)程序134釋放的圖像緩沖器226變得可供渲染目標(biāo)程序132使用。
應(yīng)注意,如果索引值上一個(gè)幀以來(lái)尚未出現(xiàn)變化,后處理目標(biāo)程序134較佳不進(jìn)行等待或拖延。在某些實(shí)施例中,無(wú)論索引值是否已出現(xiàn)變化,后處理目標(biāo)程序134均實(shí)施相同的后處理;如果索引值尚未出現(xiàn)變化,則后處理目標(biāo)程序134所產(chǎn)生的新的幀可與前一幀完全相同。在其他實(shí)施例中,可使后處理目標(biāo)程序134的某些或所有活動(dòng)以索引值是否已出現(xiàn)變化為條件。在此等實(shí)施例中,后處理目標(biāo)程序134較佳存儲(chǔ)前一幀所用的值,并將其與PP命令緩沖器129中的索引值進(jìn)行比較,以判定索引是否已出現(xiàn)變化。如果索引尚未出現(xiàn)變化,則后處理目標(biāo)程序134可只是不進(jìn)行任何操作,或者其可執(zhí)行不同的一組指令。
就以下意義而言,本文中的同步機(jī)制是“不對(duì)稱(chēng)的”旗語(yǔ)207可拖延渲染目標(biāo)程序132的操作,但不拖延后處理目標(biāo)程序134的操作。此種方案使得無(wú)論渲染目標(biāo)程序132產(chǎn)生新圖像的速率如何,均能夠以顯示步調(diào)產(chǎn)生新的幀。為避免出現(xiàn)死鎖,較佳將圖像緩沖器226的數(shù)量選擇得足夠大,以便始終存在至少一個(gè)未被后處理目標(biāo)程序134使用的圖像緩沖器226。例如,如果后處理目標(biāo)程序134需要使用M個(gè)最近的圖像來(lái)進(jìn)行其所要實(shí)施的某一(某些)特定操作,則將提供至少M(fèi)+1個(gè)圖像緩沖器226。如果需要,可提供更大數(shù)量的圖像緩沖器226。提供額外的圖像緩沖器使得渲染引擎的操作能夠遠(yuǎn)遠(yuǎn)超前于掃描輸出引擎。如果需要,也可使用額外的圖像緩沖器在渲染目標(biāo)程序132中執(zhí)行經(jīng)三重緩沖的渲染。
應(yīng)了解,本文所述的特定同步技術(shù)只是例示性的,且也可使用其他技術(shù)。某些實(shí)施例可完全省卻緩沖器同步,從而允許在所顯示的幀中出現(xiàn)撕裂。
命令流在某些實(shí)施例中,以不同的方式管理渲染命令流與后處理命令流。更具體而言,如上文所述,渲染命令緩沖器128較佳構(gòu)建成使渲染目標(biāo)程序132將本文所述的渲染命令執(zhí)行一次;針對(duì)所要渲染的每一圖像,均將一組新的命令寫(xiě)入至渲染命令緩沖器128中。相比之下,所需的一組后處理操作通常在各幀之間保持一致,且針對(duì)每一個(gè)幀來(lái)寫(xiě)入相同的一組后處理命令將比較低效。當(dāng)PP命令緩沖器129以無(wú)限循環(huán)形式操作時(shí),向PP命令緩沖器129中寫(xiě)入新的后處理命令會(huì)更為復(fù)雜。后處理目標(biāo)程序134的執(zhí)行與圖形驅(qū)動(dòng)器不同步,且所述驅(qū)動(dòng)器一般并不知曉后處理目標(biāo)程序134在任一既定時(shí)刻是否正在執(zhí)行或者正在執(zhí)行所述循環(huán)中的哪一命令。
相應(yīng)地,PP命令緩沖器129較佳構(gòu)建成使圖形驅(qū)動(dòng)器可將整個(gè)后處理命令程序作為一命令流寫(xiě)入至PP命令緩沖器129。在執(zhí)行之后,將該程序保留于PP命令緩沖器129中,以便可針對(duì)每一個(gè)幀來(lái)重新執(zhí)行同一程序。因此,僅當(dāng)要改變后處理時(shí),才需要將新的后處理命令寫(xiě)入至PP命令緩沖器129中。
現(xiàn)在將對(duì)用于渲染命令緩沖器128及PP命令緩沖器129的實(shí)例性命令流結(jié)構(gòu)進(jìn)行說(shuō)明。
圖3A示意性地圖解說(shuō)明根據(jù)本發(fā)明一實(shí)施例的一渲染命令流300的一部分,所述渲染命令流300可在渲染命令緩沖器128中進(jìn)行緩沖。對(duì)于每一新的圖像,所述命令序列均以“ACQ”命令306、308開(kāi)始,所述“ACQ”命令306、308指令渲染目標(biāo)程序132在繼續(xù)進(jìn)行之前獲取所要寫(xiě)入的下一圖像緩沖器226的旗語(yǔ)207(例如在為ACQ命令306的情況下是緩沖器A的旗語(yǔ)SA,在為ACQ命令308的情況下是緩沖器B的旗語(yǔ)SB)。如上文所述,如果無(wú)法獲得旗語(yǔ)207,則渲染目標(biāo)程序132將等待至例如可獲得旗語(yǔ)207等時(shí)刻。
“RCMD”命令310、312分別代表完整的一組命令及用于渲染圖像的數(shù)據(jù)。在實(shí)際中,可針對(duì)每一圖像包含任意數(shù)量的渲染命令。例如,RCMD命令310、312可包含頂點(diǎn)(或幾何形狀)處理命令、光柵化命令、片段著色命令等等的任一組合。RCMD命令310、312也可包含可與各種渲染命令相關(guān)聯(lián)的適當(dāng)數(shù)據(jù)(例如變換矩陣,將頂點(diǎn)分組成圖元等等)。在某些實(shí)施例中,可將渲染命令作為適于由多處理器120執(zhí)行的微指令來(lái)遞送;在其他實(shí)施例中,可能要求在執(zhí)行所述命令之前由主機(jī)120對(duì)所述命令進(jìn)行解碼。在某些實(shí)施例中,渲染命令序列也可包含例如循環(huán)、如果-則語(yǔ)句等流程控制命令。一般而言,RCMD命令310、312可為傳統(tǒng)性質(zhì),且由于對(duì)于理解本發(fā)明而言并不重要,因而不再對(duì)其進(jìn)行詳細(xì)說(shuō)明。
在每一圖像的結(jié)尾處是一“翻轉(zhuǎn)(FLIP)”命令314,316,其指示對(duì)當(dāng)前圖像的渲染完成。響應(yīng)于所述FLIP命令,渲染目標(biāo)132較佳將其渲染目標(biāo)從當(dāng)前渲染緩沖器切換至下一渲染緩沖器(例如在為翻轉(zhuǎn)命令314的情況下從緩沖器A切換至緩沖器B),并還釋放剛剛完成的渲染緩沖器的旗語(yǔ)(例如在為翻轉(zhuǎn)命令314的情況下為旗語(yǔ)SA)。在釋放旗語(yǔ)207之后,渲染目標(biāo)程序132以新的值來(lái)更新PP命令緩沖器129中的索引值,所述新的值標(biāo)識(shí)剛剛完成的渲染緩沖器(例如在為翻轉(zhuǎn)命令314的情況下為緩沖器A)。此外,對(duì)翻轉(zhuǎn)命令的處理也可包括復(fù)位計(jì)數(shù)器或可由渲染目標(biāo)程序132維護(hù)的其他變量。也可響應(yīng)于翻轉(zhuǎn)命令而執(zhí)行其他傳統(tǒng)的圖像結(jié)束處理。
圖3B示意性地圖解說(shuō)明根據(jù)本發(fā)明一實(shí)施例可存儲(chǔ)于PP命令緩沖器129中的后處理程序(或流)320。在該實(shí)施例中,程序320執(zhí)行一無(wú)限循環(huán),其包括索引命令322,其自變數(shù)是如上文所述由渲染目標(biāo)程序132寫(xiě)入及覆寫(xiě)的索引;一個(gè)或多個(gè)后處理(“PCMD”)命令326、328;一個(gè)或多個(gè)位置(“LOC”)命令330、332;一BSEL更新(“BUPD”)命令334;以及一最終無(wú)條件跳轉(zhuǎn)(“JMPB”)命令336,其用于返回至該循環(huán)的開(kāi)頭。
索引命令322可首先執(zhí)行,其將當(dāng)前索引值提供至后處理目標(biāo)程序134。在某些實(shí)施例中,后處理目標(biāo)程序134將當(dāng)前索引值與最近使用的索引值相比較,并可根據(jù)比較結(jié)果來(lái)控制進(jìn)一步的處理,所述最近使用的索引值可存儲(chǔ)于可由后處理目標(biāo)程序134進(jìn)行存取的狀態(tài)寄存器(在圖2或圖3B中未顯示)中。例如,在某些其中索引值尚未出現(xiàn)變化的情形中,下一顯示幀將與當(dāng)前顯示幀完全相同。在此種情形中,后處理目標(biāo)程序134可不產(chǎn)生新的幀,且其可在位置208(圖2)上不加修改地留下BSEL值,從而使掃描輸出引擎124只是將同一幀緩沖器227接連地讀取多次,直至例如索引值確實(shí)出現(xiàn)變化等時(shí)刻為止。在其他情形中,即使索引值尚未出現(xiàn)變化,也可能希望使后處理目標(biāo)程序134采取某種措施,例如調(diào)節(jié)LCD過(guò)激勵(lì)值或者前進(jìn)經(jīng)過(guò)例如淡入、淡出或者漸隱等過(guò)渡效果。在其他實(shí)施例中,無(wú)論索引值是否發(fā)生變化,后處理目標(biāo)程序134均執(zhí)行相同的命令。在初始化時(shí),可將索引值設(shè)定為零值,此指示尚未將任何圖像提供至圖像緩沖器226;后處理目標(biāo)程序134較佳檢測(cè)所述零值并采取適當(dāng)措施(例如將空白屏幕值寫(xiě)入至幀緩沖器227中的每一像素)。
PCMD命令326、328代表用于所要執(zhí)行的各種后處理操作的指令。在實(shí)際中,可在內(nèi)容320中包含任意數(shù)量的PCMD命令。如同上文所述的RCMD(渲染)命令一樣,可將PCMD命令以適于由多處理器120直接執(zhí)行的指令形式遞送;在其他實(shí)施例中,可能要求在執(zhí)行所述命令之前由主機(jī)對(duì)所述命令進(jìn)行解碼。同樣,如同RCMD命令一樣,PCMD命令可根據(jù)需要包含流程控制命令(例如,某些命令可以索引條碼324中的索引值是否出現(xiàn)變化為條件)。
如下文所進(jìn)一步說(shuō)明,在某些實(shí)施例中,使用與渲染目標(biāo)程序132相同的處理引擎來(lái)執(zhí)行后處理目標(biāo)程序134;相應(yīng)地,作為RCMD命令310、312(圖3A)給出的任何命令序列也可作為PCMD命令326、328給出。此外,也可定義后處理操作所特有的特殊PCMD命令。原則上,可通過(guò)PCMD命令326、328的適當(dāng)序列來(lái)構(gòu)建后處理操作的任意組合(包括上文所述實(shí)例中的任何一者或多者)。在某些實(shí)施例中,PCMD命令326、328僅用于應(yīng)逐幀地進(jìn)行的處理,例如LCD過(guò)激勵(lì)或光標(biāo)覆蓋。然而,應(yīng)了解,可通過(guò)PCMD命令326、328對(duì)各種各樣的后處理操作進(jìn)行編程。
LOC命令330、332與索引條目324相結(jié)合地將一個(gè)(或多個(gè))圖像緩沖器226標(biāo)識(shí)為特定的PCMD命令或特定的PCMD命令群組的數(shù)據(jù)源。索引條目324是由渲染目標(biāo)程序132響應(yīng)于上文所述的翻轉(zhuǎn)命令而寫(xiě)入,其標(biāo)識(shí)最近填滿(mǎn)的圖像緩沖器226。LOC命令330、332可根據(jù)需要指代最近填滿(mǎn)的圖像緩沖器226或者先前填滿(mǎn)的各圖像緩沖器226。在一個(gè)實(shí)施例中,LOC命令330、332相對(duì)于最近填滿(mǎn)的圖像緩沖器來(lái)標(biāo)識(shí)圖像緩沖器226。例如,假定存在N個(gè)分配有索引值0,1,…,N-1的N個(gè)圖像緩沖器226,且索引條目324中的值由R標(biāo)記。LOC命令可為L(zhǎng)OC=R的形式,以標(biāo)識(shí)最近填滿(mǎn)的圖像緩沖器,或者LOC=(R-1),以標(biāo)識(shí)次最近填滿(mǎn)的緩沖器,依此類(lèi)推。當(dāng)使用相對(duì)引用方式時(shí),在索引條目324更新時(shí)不需要修改LOC命令330、332。在某些實(shí)施例中,可存在可適用于所有PCMD命令的一個(gè)LOC命令或一組LOC命令。
BUPD命令334及JMPB命令336使后處理循環(huán)結(jié)束。BUPD命令334指令后處理目標(biāo)程序134將新近寫(xiě)入的幀緩沖器227的標(biāo)識(shí)符寫(xiě)入至BSEL存儲(chǔ)位置208,以便使掃描輸出引擎124將讀取其作為下一個(gè)幀。JMPB命令336將控制返回至程序320的開(kāi)頭,如由虛線(xiàn)箭頭338所示。如下文所述,JMPB命令336也可用作后處理程序的完成信號(hào)(在本文中也稱(chēng)作“幀完成事件”);換句話(huà)說(shuō),一旦后處理目標(biāo)程序134遇到JMPB命令334,其便進(jìn)入空閑狀態(tài)以等待下一觸發(fā)器事件。例如,如下文所述,在到達(dá)JMPB命令336時(shí),后處理目標(biāo)程序134可被上下文切換出。
在某些實(shí)施例中,某些PCMD命令326、328可具有相關(guān)聯(lián)的狀態(tài)參數(shù)。例如,可使放大參數(shù)與執(zhí)行擴(kuò)大或縮小的PCMD命令相關(guān)聯(lián),或者可使覆蓋尺寸或位置參數(shù)與執(zhí)行合成的PCMD命令相關(guān)聯(lián)。這些參數(shù)可包含于后處理命令流中,或者其可寫(xiě)入至可由后處理目標(biāo)程序134存取的不同位置(例如PP命令緩沖器內(nèi)的參數(shù)段,單獨(dú)的緩沖器,或者執(zhí)行核心中的參數(shù)寄存器)??赏ㄟ^(guò)覆寫(xiě)后處理命令流、選擇性地修改后處理命令流、或者修改緩沖器或寄存器的內(nèi)容來(lái)處理參數(shù)更新。下文將進(jìn)一步說(shuō)明對(duì)命令及參數(shù)的修改。
應(yīng)了解,本文所述的程序流只是例示性的,且也可存在變化及修改形式??墒褂萌我膺m當(dāng)?shù)拿罴蟻?lái)構(gòu)建RCMD及PCMD命令。可使用其他條件作為幀完成事件取代JMPB來(lái)指示后處理程序的結(jié)束。例如,如果使用“放置”指針及“得到”指針(類(lèi)似于尚未參照?qǐng)D1中的渲染命令緩沖器128所述的指針)來(lái)構(gòu)建PP命令緩沖器,則“放置”指針將引用所述程序中最末命令的位置。當(dāng)“得到”指針與“放置”指針引用相同的位置時(shí),便已到達(dá)最末命令。也可使用出現(xiàn)該事件作為幀完成事件來(lái)指示后處理目標(biāo)程序已結(jié)束一幀。在其他實(shí)施例中,可使用任何唯一地與完成對(duì)幀的后處理相關(guān)聯(lián)的事件或狀態(tài)來(lái)作為幀完成事件。
多處理器圖4是根據(jù)本發(fā)明一實(shí)施例的多處理器120的簡(jiǎn)化方塊圖。多處理器120包括仲裁單元402、及包含上下文管理器406的執(zhí)行核心404。
執(zhí)行核心404可為一般的傳統(tǒng)設(shè)計(jì),并可構(gòu)建任何所需的微架構(gòu)及/或指令集合。在某些實(shí)施例中,執(zhí)行核心404包括若干個(gè)用于實(shí)施各種操作(加法、乘法、向量算術(shù)、數(shù)學(xué)函數(shù)、過(guò)濾算法、存儲(chǔ)器存取等等)的功能單元405、以及相關(guān)聯(lián)的控制邏輯407,所述相關(guān)聯(lián)的控制邏輯407用于將輸入命令解碼為所述功能單元的可執(zhí)行的指令、識(shí)別及收集每一指令所需的操作數(shù)、向所述功能單元發(fā)出指令、以及將結(jié)果轉(zhuǎn)接至其他功能單元或寄存器文件(未明確顯示)。執(zhí)行核心404也可包括用于維護(hù)硬件狀態(tài)的各個(gè)方面的各種其他寄存器。執(zhí)行核心404還經(jīng)配置以存取渲染緩沖器126及顯示緩沖器127(其可如同1所示處于圖像緩沖器116中)。在某些實(shí)施例中,可提供多個(gè)平行的執(zhí)行核心404,其中每一核心404對(duì)一景物、圖像或幀的一不同部分進(jìn)行處理。執(zhí)行核心404的具體架構(gòu)對(duì)于本發(fā)明并不重要,且特定元件在一個(gè)實(shí)施例中,執(zhí)行核心404支持兩個(gè)獨(dú)立的處理信道構(gòu)建后處理目標(biāo)程序134(圖1)的高優(yōu)先權(quán)信道(HPC),及構(gòu)建渲染目標(biāo)程序132的正常優(yōu)先權(quán)信道(NPC)。上下文管理器406為每一信道維持單獨(dú)的架構(gòu)狀態(tài)(上下文)。更具體而言,NPC上下文塊408包含為NPC所存儲(chǔ)的架構(gòu)狀態(tài),且HPC上下文塊410包含為HPC所存儲(chǔ)的架構(gòu)狀態(tài)。可將架構(gòu)狀態(tài)存儲(chǔ)于寄存器中或其他適合的硬體中。
上下文管理器406使功能單元405及控制邏輯407能夠存取適用于當(dāng)前現(xiàn)用信道的架構(gòu)狀態(tài),從而使一在其處理期間在某一點(diǎn)處被切換出的信道可在被重新切入時(shí)在同一點(diǎn)處重新開(kāi)始。在某些實(shí)施例中,執(zhí)行核心404具有一現(xiàn)用寄存器集合(在圖4中未顯示),且上下文管理器406通過(guò)如下方式執(zhí)行信道切換(例如從HPC至NPC)首先將“舊”信道(例如HPC)的架構(gòu)狀態(tài)從現(xiàn)用寄存器集合復(fù)制至適當(dāng)?shù)纳舷挛膲K(例如HPC上下文塊410),隨后將“新”信道(例如NPC)的架構(gòu)狀態(tài)從適當(dāng)?shù)纳舷挛膲K(例如NPC上下文塊408)復(fù)制至現(xiàn)用寄存器集合。在其他實(shí)施例中,執(zhí)行核心404可有選擇地存取NPC上下文塊408或HPc上下文塊410中的對(duì)應(yīng)寄存器,且上下文管理器406以與上下文相關(guān)的方式將執(zhí)行核心404指引至適當(dāng)?shù)募拇嫫?。上下文切換的具體實(shí)施方案對(duì)于本發(fā)明而言并不重要;在某些實(shí)施例中,可使用任何能提供足夠快(例如300微秒或更快)的上下文切換的實(shí)施方案。
仲裁單元402確定在任一既定時(shí)刻哪一信道將現(xiàn)用。在一實(shí)施例中,仲裁單元402具有用于從渲染命令緩沖器128接收備選命令的NPC輸入端412及用于從后處理命令緩沖器129接收備選命令的HPC輸入端414。仲裁單元402還具有用于從掃描輸出引擎124接收觸發(fā)器信號(hào)(上文中參照?qǐng)D2所述)的觸發(fā)器輸入端416、及用于從執(zhí)行核心404接收事件信號(hào)的事件輸入端418。根據(jù)這些輸入,在每一循環(huán)中,仲裁單元402均選擇HPC或NPC作為現(xiàn)用信道,向執(zhí)行核心404發(fā)送一標(biāo)識(shí)所選信道的上下文信號(hào)(在路徑420上)及用于所選信道的備選命令(在路徑422上)。未被選定的備選命令在下一循環(huán)中重新提供于輸入端上,此時(shí),其既可能被選定也可能不被選定??墒褂眠m當(dāng)?shù)亩〞r(shí)及控制電路(在圖4中未顯示)來(lái)確保在執(zhí)行核心404具有所選命令的正確上下文時(shí)執(zhí)行所選命令;該電路可為一般的傳統(tǒng)設(shè)計(jì)。
圖5是可在仲裁單元402中執(zhí)行的選擇邏輯過(guò)程500的流程圖。在該實(shí)施例中,掃描輸出引擎124在路徑424上與每一垂直回掃(或其他幀結(jié)尾)事件大致重合地產(chǎn)生觸發(fā)器信號(hào)。后處理命令緩沖器129包含用于具有無(wú)條件JMPB命令的無(wú)限循環(huán)的命令,如在圖3B中所示。
在初始化(步驟501)之后,仲裁單元402切換入NPC(步驟502)。在每一循環(huán)中,仲裁單元402均檢查觸發(fā)器信號(hào)是否被確定(步驟504)。只要觸發(fā)器信號(hào)未被確定,便繼續(xù)選擇來(lái)自渲染命令緩沖器128的命令(步驟506)。根據(jù)渲染命令緩沖器128中的命令,渲染圖像并將片段數(shù)據(jù)寫(xiě)入至渲染緩沖器126;換句話(huà)說(shuō),渲染目標(biāo)程序132運(yùn)行。HPC在該時(shí)間期間不現(xiàn)用。
當(dāng)在步驟504中檢測(cè)到觸發(fā)器信號(hào)時(shí),仲裁單元402將上下文切換至HPC(步驟508)并開(kāi)始從PP命令緩沖器129(步驟510)中選擇命令。仲裁單元402繼續(xù)從PP命令緩沖器129中選擇命令,直至在步驟512中檢測(cè)到無(wú)條件JMPB命令為止。根據(jù)PP命令緩沖器129中的命令,對(duì)渲染緩沖器126中的片段數(shù)據(jù)實(shí)施后處理,將所得到的屏幕像素?cái)?shù)據(jù)寫(xiě)入至顯示緩沖器127中;換句話(huà)說(shuō),后處理目標(biāo)程序134運(yùn)行。幀的后處理的完成是由JMPB命令來(lái)指示,如上文所述。一旦檢測(cè)到該命令(步驟512),并將其轉(zhuǎn)接至核心404(步驟514),此后仲裁單元402將切換入NPC上下文,從而返回至步驟502。在某些實(shí)施例中,JMPB命令僅影響仲裁單元402,且不轉(zhuǎn)接至核心404。此時(shí),渲染目標(biāo)程序132重新開(kāi)始。
過(guò)程500以對(duì)應(yīng)于顯示幀速率(例如80Hz)的間隔中止渲染,從而可以顯示步調(diào)進(jìn)行后處理。一般而言,如此周期性地中止渲染而進(jìn)行后處理不會(huì)不利地影響圖形子系統(tǒng)的總體性能,除非后處理所耗用(且因此不能用于渲染)的時(shí)間長(zhǎng)到足以使得無(wú)法以所需速度(例如30Hz)渲染新圖像為止。在現(xiàn)代執(zhí)行核心中可具有的處理能力及典型的后處理操作序列情況下,可保持可接受的性能。
應(yīng)了解,本文所述的多處理器及仲裁邏輯只是例示性的,且也可存在變化及修改形式。在本文中,“上下文切換”作為一般性術(shù)語(yǔ)用于描述可在第一指令流中的任意一點(diǎn)從所述第一指令流切換至另一指令流、然后在實(shí)質(zhì)上同一點(diǎn)處返回第一指令流的處理器的操作;該術(shù)語(yǔ)限定于任意特定處理器架構(gòu)??刹捎萌魏味嗳蝿?wù)架構(gòu),包括傳統(tǒng)的多線(xiàn)程架構(gòu),且可使用任何機(jī)制來(lái)保持一臨時(shí)空閑的過(guò)程或上下文的狀態(tài)。此外,不需要賦予HPC優(yōu)先于NPC的絕對(duì)優(yōu)先權(quán),只要HPC可在由顯示步調(diào)所確定的時(shí)間表內(nèi)可靠地結(jié)束新幀的產(chǎn)生既可。應(yīng)注意,本文所述的實(shí)例性仲裁邏輯并不利用事件輸入418;不同的仲裁邏輯可使用該輸入。例如,后處理目標(biāo)程序134可在輸入路徑418上產(chǎn)生事件信號(hào)來(lái)通知仲裁單元402其已結(jié)束一幀。
在另一實(shí)施例中,可對(duì)各單獨(dú)的緩沖器讀取路徑使用獨(dú)立的處理引擎來(lái)構(gòu)建渲染目標(biāo)程序及后處理目標(biāo)程序。在該實(shí)施例中,渲染目標(biāo)程序及后處理目標(biāo)程序可并行地執(zhí)行,且不要求在這些目標(biāo)程序之間進(jìn)行上下文切換。
修改后處理程序在上文所述的實(shí)施例中,PP命令緩沖器129一般并不逐幀地更新??稍诤筇幚砟繕?biāo)程序134空閑時(shí)的任意時(shí)刻,例如通過(guò)在圖1中的CPU 102上運(yùn)行的圖形驅(qū)動(dòng)器來(lái)更新PP命令緩沖器128,但這些更新并不與任何特定圖像的顯示同步。相反,對(duì)PP命令緩沖器129的更新通常會(huì)在更新之后對(duì)下一個(gè)幀生效。如果進(jìn)行多次更新,則不保證所有更新均將對(duì)同一幀生效。
在其他實(shí)施例中,可使后處理操作的改變與特定圖像同步化。該可選特征還使所要控制的多次更新能夠?qū)ν粋€(gè)幀生效??衫缤ㄟ^(guò)構(gòu)建多個(gè)PP命令緩沖器129來(lái)提供此種同步,其中渲染目標(biāo)程序132控制PP命令緩沖器129的內(nèi)容以及對(duì)于在任一既定時(shí)刻應(yīng)讀取哪一PP命令緩沖器129的選擇。
圖6是根據(jù)本發(fā)明一實(shí)施例的多處理器600的簡(jiǎn)化方塊圖,多處理器600構(gòu)建多個(gè)PP命令緩沖器602(1)-602(3)。多處理器600包括仲裁單元604及具有上下文管理器608的執(zhí)行核心606。這些組件可大體上類(lèi)似于上文所述的仲裁單元402、執(zhí)行核心404、及上下文管理器406;因此,主機(jī)600提供一執(zhí)行后處理目標(biāo)程序134的HPC及一執(zhí)行渲染目標(biāo)程序132的NPC。多處理器600還包括用于控制在各PPC命令緩沖器602(1)-602(3)之間進(jìn)行選擇的附加邏輯。
更具體而言,每一PP命令緩沖器602(1)-602(3)均向選擇電路(例如多路復(fù)用器)610提供備選后處理命令。選擇電路610響應(yīng)于存儲(chǔ)于主機(jī)600的PP索引寄存器612中的“PP索引”值而選擇其中一個(gè)備選項(xiàng)。所選備選項(xiàng)作為HPC備選指令提供至仲裁單元604。仲裁單元604可如上文所述選擇HPC與NPC備選指令。
NPC是響應(yīng)于特殊命令而寫(xiě)入PP索引寄存器612,所述特殊命令可包含于通過(guò)渲染命令緩沖器614遞送至主機(jī)600的渲染命令流中。圖7圖解說(shuō)明包含適當(dāng)命令的渲染命令流700的一部分。在流700中,ACQ命令702、RCMD命令704及翻轉(zhuǎn)命令710大體類(lèi)似于上文參照?qǐng)D3A所述的命令。PP命令緩沖器選擇(“SELPP”)命令706及PP命令緩沖器寫(xiě)入(“WRPP”)命令708執(zhí)行與特定圖像同步的后處理操作中的變化。
更具體而言,SELPP命令706指令渲染目標(biāo)程序132(構(gòu)建于NPC中)選擇所要寫(xiě)入的PP命令緩沖器602(1)-602(3)中可用的一個(gè)??墒褂妙?lèi)似于上文所述旗語(yǔ)207(圖2)的旗語(yǔ)機(jī)制或其他控制機(jī)制來(lái)防止渲染目標(biāo)選擇仍由后處理目標(biāo)程序134使用的PP命令緩沖器602。
WRPP命令708較佳伴隨有數(shù)據(jù)(在圖7中未明確顯示),所述數(shù)據(jù)呈要寫(xiě)入所選PP命令緩沖器602的后處理程序(或其一部分)的形式。所述程序可根據(jù)需要具有圖3B中所示的形式或者不同的形式。渲染目標(biāo)程序132通過(guò)經(jīng)由圖6中所示的“PPC寫(xiě)入”路徑616將相關(guān)聯(lián)的程序?qū)懭胫了xPP命令緩沖器602中而執(zhí)行WRPP命令708。路徑616可包含適用于有選擇地將程序信息指引至僅其中一個(gè)PP命令緩沖器602(1)-603(3)的電路(未顯示);該電路可為傳統(tǒng)設(shè)計(jì)。在某些實(shí)施例中,在執(zhí)行WRPP命令708期間,還將一標(biāo)識(shí)渲染目標(biāo)程序132剛剛完成的圖像緩沖器的索引條目寫(xiě)入至所選PP命令緩沖器602中。
此后,渲染目標(biāo)程序132執(zhí)行翻轉(zhuǎn)命令710并經(jīng)由“PPI-寫(xiě)入”路徑618將所選PP命令緩沖器602的標(biāo)識(shí)符寫(xiě)入至PP索引寄存器612中。可沿路徑618提供適當(dāng)?shù)乃梨i(例如由仲裁單元604控制的鎖存器或傳輸門(mén)),以便在HPC現(xiàn)用時(shí),對(duì)PP索引寄存器612進(jìn)行的更新不會(huì)生效。舉例而言,在PP索引寄存器612正由后處理目標(biāo)程序134使用(鎖定)時(shí),可停止渲染目標(biāo)程序132執(zhí)行PP索引寫(xiě)入操作。應(yīng)注意,在該實(shí)施例中,WRPP命令可包括將適當(dāng)?shù)乃饕祵?xiě)入至所選PP命令緩沖器602;并不要求進(jìn)行單獨(dú)的索引更新操作。
后處理目標(biāo)程序134(構(gòu)建于HPC中)跟蹤在其最后一次迭代中是讀取了哪一PP命令緩沖器602,且還能經(jīng)由“PPI-讀取”路徑620對(duì)PP索引寄存器612進(jìn)行讀取存取。相應(yīng)地,后處理目標(biāo)程序134可判定當(dāng)前PP命令緩沖器602(由PP索引寄存器612規(guī)定)與最后所讀取的PP命令緩沖器602是否相同;如果不相同,則后處理目標(biāo)程序134將最后所讀取的PP命令緩沖器602的旗語(yǔ)解鎖或者以其他方式釋放最后所讀取的PP命令緩沖器602以便進(jìn)行覆寫(xiě)。
在某些實(shí)施例中,SELPP命令706及WRPP命令708包含于僅用于其中要改變后處理程序的圖像的渲染命令流700中。對(duì)于其他幀,可省略這些命令,在此種情形中,翻轉(zhuǎn)命令710較佳不改變存儲(chǔ)于PP索引寄存器612中的值。相反,可執(zhí)行對(duì)當(dāng)前PP命令緩沖器602的索引更新。因此,可對(duì)任意數(shù)量的連續(xù)幀使用同一PP命令緩沖器602,其中僅在實(shí)際改變后處理程序時(shí)使用新的PP命令緩沖器602。
在另一實(shí)施例中,由WRPP命令遞增地更新而非完全覆寫(xiě)PP命令緩沖器602中的后處理程序。舉例而言,在初始化時(shí),可對(duì)每一PP命令緩沖器602加載以相同的“缺省”后處理程序。渲染目標(biāo)程序132根據(jù)需要修改所述程序的某些部分(例如各種操作的參數(shù)),并更新索引值。上文所述的SELPP及WRPP命令也可適用于該實(shí)施例,例如使WRPP命令規(guī)定所要覆寫(xiě)的PP命令緩沖器602中的條目以及新的命令(或僅參數(shù)值)。
所屬領(lǐng)域的一般技術(shù)人員將知,也可具有其他同步方案。例如,可根據(jù)需要將關(guān)于接下來(lái)應(yīng)讀取哪一PP命令緩沖器的信息存儲(chǔ)于仲裁單元中、HPC上下文中的存儲(chǔ)器中、或其他位置處。
多個(gè)顯示頭如在所屬領(lǐng)域中所知,某些GPU設(shè)計(jì)有多個(gè)顯示頭以用于驅(qū)動(dòng)多個(gè)顯示裝置。通常為每一顯示頭分別提供單獨(dú)的掃描輸出引擎,這是因?yàn)椴煌娘@示裝置可能以不同的像素或幀率運(yùn)行,或者可能具有不同的像素格式要求。
圖8是一簡(jiǎn)化方塊圖,其圖解說(shuō)明根據(jù)本發(fā)明一實(shí)施例的多處理器804,多處理器804支持一用于驅(qū)動(dòng)顯示裝置“0”(未明確顯示)的第一掃描輸出引擎802(1)及一用于驅(qū)動(dòng)顯示裝置“1”(也未明確顯示)的第二掃描輸出引擎802(2)。多處理器804包括仲裁單元806及包含上下文管理器810的執(zhí)行核心。這些組件可大體上類(lèi)似于圖4中的對(duì)應(yīng)組件,只是多處理器804支持兩個(gè)HPC(在本文中標(biāo)記為HPC0及HPC1)及一個(gè)NPC。每一HPC均執(zhí)行不同的后處理目標(biāo)程序;對(duì)于顯示裝置“0”為HPC0,而對(duì)于顯示裝置“1”為HPC1;所述NPC包含用于提供由這兩個(gè)后處理目標(biāo)程序所耗用的圖像的實(shí)例化渲染目標(biāo)程序。在某些實(shí)施例中,可存在多個(gè)渲染目標(biāo),其中這些渲染目標(biāo)程序所產(chǎn)生的圖像由一個(gè)或多個(gè)后處理目標(biāo)程序以任意所需方式耗用。相應(yīng)地,執(zhí)行核心808支持至少三個(gè)上下文,且仲裁單元806如下文所述實(shí)施三路(或更多路)仲裁。
每一掃描輸出引擎802(1)、802(2)均以適用于其各自顯示裝置的參數(shù)(例如像素率、幀率)來(lái)運(yùn)行。由于不同顯示裝置的后處理操作可有所不同,因而構(gòu)建于HPC0中的后處理目標(biāo)程序較佳將幀寫(xiě)入至顯示緩沖器820(1)中,而構(gòu)建于HPC1中的后處理目標(biāo)程序?qū)瑢?xiě)入至在物理或邏輯上分離的顯示緩沖器820(2)中。顯示緩沖器820(1)由掃描輸出引擎802(1)讀取,而顯示緩沖器820(2)由掃描輸出引擎802(2)讀取。HPC0及HPC1二者均可從同一渲染緩沖器822讀取,并可讀取存儲(chǔ)于其中的同一圖像或不同圖像,或者其可從不同的渲染緩沖器822讀取。
仲裁單元806經(jīng)由渲染命令緩沖器812接收NPC的備選命令流,經(jīng)由PP命令緩沖器814(1)接收HPC0的備選命令流,且經(jīng)由PP命令緩沖器814(2)接收HPC1的備選命令流。一般而言,由于不同顯示裝置所需的后處理操作可能不同,因而PP命令緩沖器814(1)、814(2)可提供不同的后處理程序。
仲裁單元806分別從每一掃描輸出引擎802接收觸發(fā)器信號(hào)“觸發(fā)器-0”路徑824(1)從掃描輸出引擎802(1)提供觸發(fā)器信號(hào),而“觸發(fā)器-1”路徑824(2)從掃描輸出引擎802(2)提供觸發(fā)器信號(hào)。響應(yīng)于觸發(fā)器-0信號(hào),仲裁單元806切換入HPC0-其運(yùn)行至幀完成(如在上文所述的其他實(shí)施例中一樣),且響應(yīng)于觸發(fā)器-1信號(hào),仲裁單元806切換入HPC1-其也運(yùn)行至幀完成。
在某些情形中,可存在交疊的觸發(fā)器事件。例如,仲裁單元806可響應(yīng)于觸發(fā)器-0信號(hào)而切換入HPC0,然后在HPC0已結(jié)束其幀之前接收觸發(fā)器-1信號(hào)。在一個(gè)實(shí)施例中,仲裁單元806允許HPC0結(jié)束其幀,然后立即切換入HPC1中。也可使用類(lèi)似邏輯來(lái)處理其中觸發(fā)器-1信號(hào)首先到達(dá)的另一交疊情景。只要為使HPC0與HPC1分別產(chǎn)生幀所需的總時(shí)間明顯小于幀時(shí)間(如果這兩個(gè)顯示裝置具有不同的幀率,則以更快的幀率),且只要為NPC留下足夠的處理時(shí)間來(lái)以可接受的速率渲染新圖像,該算法便有效。
在其他實(shí)施例中,可將各種目標(biāo)程序中的某些或全部構(gòu)建于單獨(dú)的處理引擎中,從而提高并行處理容量。例如,對(duì)于三個(gè)引擎,可將NPC及兩個(gè)HPC分別構(gòu)建于單獨(dú)的引擎中。
在另一實(shí)施例中,可通過(guò)提供兩個(gè)掃描輸出引擎及單個(gè)HPC來(lái)支持多個(gè)顯示頭,所述掃描輸出引擎中的一者獨(dú)自使用HPC。另一顯示頭的掃描輸出引擎可在需要時(shí)使用傳統(tǒng)的專(zhuān)用電路來(lái)構(gòu)建有限的后處理能力。在再一實(shí)施例中,可由來(lái)自?xún)蓚€(gè)(或更多個(gè))掃描輸出引擎之一的觸發(fā)器信號(hào)來(lái)觸發(fā)單個(gè)HPC。
后處理的實(shí)例如上文所述,后處理可包括各種各樣的操作?,F(xiàn)在將說(shuō)明后處理操作的某些實(shí)例,此并不限制本發(fā)明的范疇。
一個(gè)后處理操作是合成,其中可將來(lái)自不同緩沖器的圖像相互疊加而產(chǎn)生幀。例如,圖9圖解說(shuō)明自三個(gè)不同圖像緩沖器產(chǎn)生的合成幀900。背景圖像緩沖器902提供用于在背景區(qū)域904中產(chǎn)生像素的片段數(shù)據(jù),電影圖像緩沖器906提供用于在電影區(qū)域908中產(chǎn)生像素的片段數(shù)據(jù),且光標(biāo)圖像緩沖器910提供用于在光標(biāo)區(qū)域912中產(chǎn)生像素的片段數(shù)據(jù)。
在該實(shí)例中,任何圖像的內(nèi)容及/或位置均可分別因幀而異,且不同圖像的更新率可有所不同。例如,區(qū)域904中的背景圖像可為很少發(fā)生變化的桌面壁紙。區(qū)域908中的電影圖像可以30Hz或更高的速率變化,且光標(biāo)圖像緩沖器910的內(nèi)容也可實(shí)質(zhì)上實(shí)時(shí)地變化,例如以指示當(dāng)前的系統(tǒng)活動(dòng)。光標(biāo)區(qū)域912的位置也可實(shí)質(zhì)上實(shí)時(shí)地變化,以反映用戶(hù)所操作的指點(diǎn)裝置的運(yùn)動(dòng)。
根據(jù)本發(fā)明的一實(shí)施例,可通過(guò)提供多個(gè)獨(dú)立的圖像緩沖器(或圖像緩沖器群組)作為后處理目標(biāo)程序的片段數(shù)據(jù)源來(lái)產(chǎn)生合成圖像。圖10是一方塊圖,其顯示經(jīng)配置以分別產(chǎn)生多個(gè)圖像的多處理器1000。在該實(shí)施例中,多處理器1000支持一個(gè)構(gòu)建后處理目標(biāo)程序的HPC及兩個(gè)NPCNPCF構(gòu)建用于全屏圖像的渲染目標(biāo)程序,而NPCC構(gòu)建用于光標(biāo)圖像的渲染目標(biāo)程序。應(yīng)了解,盡管在圖10中圖解說(shuō)明兩個(gè)NPC,然而可提供任意數(shù)量的NPC來(lái)產(chǎn)生可能需要組合的任意數(shù)量的圖像源。此外,可使用任意數(shù)量的不同處理引擎來(lái)構(gòu)建目標(biāo)程序;例如,一個(gè)引擎可構(gòu)建所有三個(gè)目標(biāo)程序,可為每一目標(biāo)程序提供單獨(dú)的引擎,或者可每一目標(biāo)程序提供多個(gè)引擎。
圖形存儲(chǔ)器1002可大體上類(lèi)似于上文所述的圖形存儲(chǔ)器116,其包括兩個(gè)渲染緩沖器1004、1006,其中渲染緩沖器1004、1006中的每一者均如上文所述存儲(chǔ)多個(gè)圖像。渲染緩沖器1004存儲(chǔ)由NPCF所渲染的全屏圖像的片段數(shù)據(jù),而渲染緩沖器1006存儲(chǔ)由NPCC渲染的光標(biāo)圖像的片段數(shù)據(jù)。應(yīng)注意,光標(biāo)圖像可包含比全屏圖像少得多的片段;相應(yīng)地,渲染緩沖器1006可明顯小于渲染緩沖器1004。圖形存儲(chǔ)器1002還包括顯示緩沖器1008,用于存儲(chǔ)由HPC所產(chǎn)生的幀的像素?cái)?shù)據(jù)。
主機(jī)1000包括仲裁單元1010及具有上下文管理器1014的執(zhí)行核心1012,上下文管理器1014可大體上類(lèi)似于上文所述的對(duì)應(yīng)組件。在此種情形中,上下文管理器1014存儲(chǔ)三個(gè)不同的上下文(NPCC上下文1011,NPCF上下文1013及HPC上下文1015),且仲裁單元1010在三個(gè)不同上下文之間進(jìn)行選擇。用于全屏圖像及光標(biāo)圖像的單獨(dú)的渲染命令流經(jīng)由各自的渲染命令緩沖器1016(用于全屏圖像)及1018(用于光標(biāo)圖像)提供。這些渲染流可大體上類(lèi)似于圖3A所示的渲染流300。
仲裁單元1010響應(yīng)于來(lái)自?huà)呙栎敵鲆?030(如上文所述)的觸發(fā)器信號(hào)而選擇HPC,并在HPC空閑時(shí)在NPCC與NPCF之間進(jìn)行選擇??墒褂醚h(huán)選擇、事件驅(qū)動(dòng)的選擇(例如根據(jù)經(jīng)由“evt”路徑1017從執(zhí)行核心1012接收的事件信號(hào))、或其他選擇算法。
PP命令緩沖器1020提供后處理程序,其一實(shí)例圖解說(shuō)明于圖11中。后處理程序1100大體上類(lèi)似于圖3B所示的后處理程序320,只是提供多個(gè)索引項(xiàng)1104、1106。索引項(xiàng)1104在新的光標(biāo)圖像完成之后存儲(chǔ)由NPCC所更新的光標(biāo)索引值(INDC),而索引項(xiàng)1106則在新的全屏圖像完成之后存儲(chǔ)由NPCF更新的全屏索引值(ENDF)。應(yīng)注意,可相互獨(dú)立地并以不同的速率來(lái)更新INDC與INDF值。
在該實(shí)施例中,后處理目標(biāo)程序較佳每當(dāng)?shù)玫接|發(fā)時(shí)便產(chǎn)生新的幀,而無(wú)論兩個(gè)索引項(xiàng)中的一個(gè)是否已發(fā)生變化。此會(huì)確保如常常所需要的那樣以顯示步調(diào)更新屏幕上的光標(biāo)位置。
在一個(gè)實(shí)施例中,PCMD命令1110、1112包括用于如下的命令從適當(dāng)?shù)募拇嫫?其可為傳統(tǒng)設(shè)計(jì))或自存儲(chǔ)器位置讀取當(dāng)前光標(biāo)位置;確定當(dāng)前光標(biāo)大小(其可例如通過(guò)PP命令緩沖器1020中的命令進(jìn)行設(shè)定);確定哪些像素處于光標(biāo)區(qū)域內(nèi);及根據(jù)哪些像素處于光標(biāo)區(qū)域內(nèi)而選擇來(lái)自當(dāng)前光標(biāo)圖像(由索引值INDC標(biāo)識(shí))或當(dāng)前全屏圖像(由索引值INDF標(biāo)識(shí))的每一像素的一個(gè)或多個(gè)片段。所述合成算法自身可類(lèi)似于現(xiàn)用的基于硬件的算法,但其較佳構(gòu)建于可在執(zhí)行核心912中執(zhí)行的程序名中,而非構(gòu)建于專(zhuān)用硬件中。例如透明度或光標(biāo)與下面全屏圖像部分之間的邊緣混合等特征也可經(jīng)由適當(dāng)?shù)某绦虼a來(lái)構(gòu)建。
重新參見(jiàn)圖10,掃描輸出引擎1030可與上文所述的各種掃描輸出引擎相同。在該實(shí)施例中,所有合成均由HPC中的后處理目標(biāo)程序在主機(jī)1000中進(jìn)行,且掃描輸出引擎1030的操作與如何產(chǎn)生顯示緩沖器1008中的像素?zé)o關(guān)。
另一后處理操作是LCD過(guò)激勵(lì)(在所屬領(lǐng)域中也稱(chēng)作“LCD前饋”或“響應(yīng)時(shí)間補(bǔ)償”(RTC))。如在所屬領(lǐng)域中所知,如果部分地根據(jù)所需的新強(qiáng)度且部分地根據(jù)所需新強(qiáng)度與前一強(qiáng)度之間的差別在各個(gè)幀之間調(diào)整用于驅(qū)動(dòng)像素的信號(hào),則可使LCD屏幕更快地作出響應(yīng)。根據(jù)本發(fā)明的一實(shí)施例,可將LCD過(guò)激勵(lì)構(gòu)建于后處理目標(biāo)程序中,所述后處理目標(biāo)程序執(zhí)行一包含適當(dāng)命令的后處理程序。
例如,考慮圖像的每一片段均對(duì)應(yīng)于幀中的一個(gè)像素的情形。(本發(fā)明并不僅限于此種情形;其在此處用于圖解說(shuō)明目的。)圖12圖解說(shuō)明用于產(chǎn)生幀的過(guò)程1200,其可通過(guò)適當(dāng)?shù)暮筇幚沓绦?例如如在圖3B中所示)構(gòu)建于后處理目標(biāo)程序134中(例如參見(jiàn)圖2)。過(guò)程1200較佳地構(gòu)建于一如下實(shí)施例中其中將最新完成的圖像存儲(chǔ)于具有索引值R的圖像緩沖器226(圖2)中,并將緊接的前一圖像存儲(chǔ)于索引值為(R-1)模N的不同圖像緩沖器226中;這兩個(gè)圖像緩沖器226均由后處理目標(biāo)程序134保持鎖定。
在步驟1202中,后處理目標(biāo)程序134檢查PP命令緩沖器129中的索引條目。在步驟1204中,判定索引值是否已發(fā)生變化。如果未發(fā)生變化,則在步驟1206中,將幀中所有像素的增量值設(shè)定為0,從而反映所需像素值無(wú)一發(fā)生變化。如果像素值已發(fā)生變化,則在步驟1208中,根據(jù)緩沖器R中的片段值及緩沖器(R-1)模N中的片段值來(lái)計(jì)算每一像素的增量值。在一個(gè)實(shí)施例中,所述增量值簡(jiǎn)單地為這兩個(gè)緩沖器中對(duì)應(yīng)片段的值之差。
在步驟1210中,根據(jù)緩沖器R中的片段值來(lái)確定所需的像素強(qiáng)度。在一個(gè)實(shí)施例中,所述片段值是所需的像素強(qiáng)度;在其他實(shí)施例中,所需像素強(qiáng)度是所述片段值的函數(shù)(例如包含γ修正)。
在步驟1212中,根據(jù)所需強(qiáng)度及增量值來(lái)確定像素的過(guò)激勵(lì)值。在一個(gè)實(shí)施例中,可規(guī)定一用于計(jì)算過(guò)激勵(lì)信號(hào)的函數(shù)。在另一實(shí)施例中,可根據(jù)一使用所需強(qiáng)度及增量值(或新的及舊的強(qiáng)度值)來(lái)加索引的查找表來(lái)確定過(guò)激勵(lì)信號(hào);執(zhí)行核心404可包括經(jīng)配置以實(shí)施表查找的功能單元。
應(yīng)了解,過(guò)程1200只是例示性的,且也可具有各種變化形式及修改形式。各步驟可對(duì)每一片段依序執(zhí)行或者對(duì)片段群組(或?qū)λ衅?并行執(zhí)行,可改變步驟次序,并可修改或組合各步驟??商鎿Q對(duì)增量值的不同定義,并還可引入對(duì)片段值的其他修改。此外,可將過(guò)程1200與用于從片段數(shù)據(jù)產(chǎn)生像素?cái)?shù)據(jù)的其他步驟(例如下降過(guò)濾、上升過(guò)濾、合成等等)相組合。
應(yīng)了解,過(guò)程1200為像素產(chǎn)生的過(guò)激勵(lì)信號(hào)并非一定是將存儲(chǔ)于幀緩沖器227中的最終像素值??墒褂妙~外的后處理命令來(lái)執(zhí)行隨后的操縱。
后處理操作的第三實(shí)例是表面旋轉(zhuǎn),在表面旋轉(zhuǎn)中,將圖像的片段數(shù)據(jù)映射至已圍繞垂直于圖像的軸線(xiàn)旋轉(zhuǎn)過(guò)某一角度(例如90°的倍數(shù))的2-D表面上。所述軸線(xiàn)與圖像平面的交點(diǎn)及/或所述旋轉(zhuǎn)角度可以是可配置的參數(shù)。在一個(gè)實(shí)施例中,所述交點(diǎn)固定于圖像中心處(或附近),且所述角度是可配置的90°的倍數(shù)(例如0°、90°、180°、270°)。根據(jù)所述角度及旋轉(zhuǎn)角度,可將圖像緩沖器中的每一片段位置映射至幀緩沖器中的對(duì)應(yīng)像素位置。相應(yīng)地,可通過(guò)如下方式在后處理目標(biāo)程序中執(zhí)行表面旋轉(zhuǎn)在片段位置與像素位置之間定義一映射,并使用該映射根據(jù)從中讀取片段的地址來(lái)確定每一像素的寫(xiě)入地址。所述映射可例如作為可按圖像緩沖器的位置偏移量來(lái)存取的查找表的形式或者作為用于根據(jù)圖像緩沖器的位置偏移量來(lái)計(jì)算像素緩沖器的位置偏移量的公式形式提供。在一個(gè)實(shí)施例中,可使用可按圖像緩沖器位置偏移量存取的查找表及當(dāng)前旋轉(zhuǎn)角度來(lái)為若干個(gè)所允許的旋轉(zhuǎn)角度提供映射。
圖13是一用于產(chǎn)生旋轉(zhuǎn)幀的過(guò)程1300的流程圖,其可通過(guò)適當(dāng)?shù)暮筇幚沓绦?例如,如在圖3B中所示)而構(gòu)建于后處理目標(biāo)程序134(例如參見(jiàn)圖2)中。在步驟1302中,根據(jù)所需的旋轉(zhuǎn),在圖像緩沖器中的每一片段位置與像素緩沖器中的對(duì)應(yīng)像素位置之間定義一映射。所述映射可例如在渲染目標(biāo)程序的初始化期間定義一次,且僅當(dāng)旋轉(zhuǎn)參數(shù)發(fā)生變化時(shí)才進(jìn)行更新。在一個(gè)實(shí)施例中,使用后處理命令來(lái)提供映射;在另一實(shí)施例中,后處理命令提供可由后處理目標(biāo)程序用以計(jì)算或選擇適當(dāng)映射的參數(shù)。
在步驟1304中,從圖像緩沖器位置(在本文中稱(chēng)為源位置)讀取片段數(shù)據(jù),并在步驟1306中處理片段數(shù)據(jù)以產(chǎn)生像素值。可在步驟1306中包含任意類(lèi)型的后處理操作,包括例如合成及/或LCD過(guò)激勵(lì)操作。一旦完成處理,便在步驟1308中使用源位置及在步驟1302中所定義的映射為像素值確定幀緩沖器中的目的地位置。在步驟1310中,將像素值寫(xiě)入至目的地位置。在步驟1312中,判定是否還有更多片段要處理。如果有,則過(guò)程1300返回至步驟1304來(lái)處理下一片段;當(dāng)當(dāng)前圖像的所有片段均已得到處理時(shí),過(guò)程1300結(jié)束(步驟1314)。
應(yīng)了解,過(guò)程1300只是例示性的,且也可具有變化形式及修改形式。被描述為按順序的各步驟也可并行執(zhí)行,可改變步驟次序,并可修改或組合各步驟。舉例而言,可并行處理多個(gè)片段。在某些實(shí)施例中,源位置與目的地位置之間的映射可并非一對(duì)一映射;例如,也可減小或增大旋轉(zhuǎn)圖像來(lái)適合于像素陣列的尺寸。減小或增大可涉及到混合數(shù)個(gè)片段值以產(chǎn)生一個(gè)像素值。過(guò)程1300可適用于該實(shí)例,只要可使用一個(gè)片段的位置作為源位置來(lái)用于定義向像素的映射即可。在其他實(shí)施例中,可將所述映射定義成對(duì)要用于每一像素位置的一個(gè)或多個(gè)源位置進(jìn)行標(biāo)識(shí)。
在本文中使用合成操作及LCD過(guò)激勵(lì)操作作為可在后處理目標(biāo)程序中執(zhí)行的操作的實(shí)例。也可除這些實(shí)例之外或者取代這些實(shí)例而執(zhí)行其他操作;上文在“概述及術(shù)語(yǔ)”一節(jié)中闡述了某些實(shí)例,但本發(fā)明并不僅限于特定的后處理操作。所屬領(lǐng)域的一般技術(shù)人員將知,后處理目標(biāo)程序可有利地用于執(zhí)行任何為獲得正確行為而希望或需要以顯示步調(diào)執(zhí)行的操作??筛淖儼诤筇幚砟繕?biāo)程序中的操作的數(shù)量及復(fù)雜度,只要可以顯示步調(diào)產(chǎn)生新的幀即可。
用于后處理程序的源如上文所述,通過(guò)圖形驅(qū)動(dòng)器程序?qū)⒑筇幚沓绦驅(qū)懭胫罰P命令緩沖器。所述驅(qū)動(dòng)器可直接(例如,通過(guò)將命令經(jīng)由系統(tǒng)總線(xiàn)106傳送至圖1所示實(shí)施例中PP命令緩沖器129的存儲(chǔ)器位置內(nèi))或者間接地(例如,通過(guò)如上文參照?qǐng)D7所述將WRPP命令寫(xiě)入至渲染命令緩沖器128中)寫(xiě)入命令。
現(xiàn)在將對(duì)用于后處理程序的源進(jìn)行說(shuō)明。在某些實(shí)施例中,圖形驅(qū)動(dòng)器對(duì)來(lái)自由執(zhí)行各種后處理操作的預(yù)定程序段形成的庫(kù)的后處理程序進(jìn)行組合。圖形驅(qū)動(dòng)器可提供適當(dāng)?shù)膽?yīng)用程序界面(API),從而允許應(yīng)用程序開(kāi)發(fā)者規(guī)定其希望使用的后處理操作及任何相關(guān)參數(shù)。API自身可大體上類(lèi)似于用于控制掃描輸出時(shí)間處理的傳統(tǒng)API,但在圖形驅(qū)動(dòng)器內(nèi)的實(shí)施方案是不同的。具體而言,響應(yīng)于A(yíng)PI指令,圖形驅(qū)動(dòng)器從所述庫(kù)中選擇適當(dāng)?shù)某绦蚨?,將所述段組合成完整的程序(例如,增加例如上文所述的索引檢查命令及跳轉(zhuǎn)命令等控制命令),并將所述程序?qū)懭胫罰P命令緩沖器中或?qū)⑦m當(dāng)?shù)腤RPP命令插入渲染命令流內(nèi)。
在其他實(shí)施例中,應(yīng)用程序開(kāi)發(fā)者可定義“定制”后處理程序。例如,圖形驅(qū)動(dòng)器可提供一從應(yīng)用程序或操作系統(tǒng)程序接受任意后處理程序或程序段的API。也可提供具有用于寫(xiě)入定制后處理程序的指令及/或建議的開(kāi)發(fā)者套件。在再一些實(shí)施例中,可支持庫(kù)程序段及定制程序段的組合。
在上文所述的實(shí)施例中,將圖形驅(qū)動(dòng)器標(biāo)識(shí)為向PP命令緩沖器中寫(xiě)入后處理程序。在某些實(shí)施例中,在抽象層上構(gòu)建圖形驅(qū)動(dòng)器程序,所述抽象層次隱藏了在上面執(zhí)行驅(qū)動(dòng)器程序的硬件及/或操作系統(tǒng)的細(xì)節(jié)。例如,可提供資源管理器程序來(lái)支持圖形驅(qū)動(dòng)器程序與系統(tǒng)硬件組件的交互作用。所述資源管理器構(gòu)建低層硬件及針對(duì)具體操作的功能度,這些低層硬件及針對(duì)具體操作的功能度由圖形驅(qū)動(dòng)器程序響應(yīng)于來(lái)自操作系統(tǒng)程序及/或應(yīng)用程序的處理請(qǐng)求而被調(diào)用。該額外的抽象層通過(guò)提供資源管理器的不同實(shí)施方案而使同一驅(qū)動(dòng)器代碼能夠適用于不同的硬件配置。當(dāng)構(gòu)建資源管理器時(shí),可由所述資源管理器來(lái)處理后處理程序向PP命令緩沖器的實(shí)際寫(xiě)入,從而使其對(duì)驅(qū)動(dòng)器透明。
在又一實(shí)施例中,可由驅(qū)動(dòng)器發(fā)出傳統(tǒng)的掃描輸出控制命令。這些命令由GPU內(nèi)的適當(dāng)命令接口組件接收并轉(zhuǎn)換成用于后處理目標(biāo)程序的控制結(jié)構(gòu)。例如,在接收到掃描輸出命令之后,所述命令接口組件可在PP命令緩沖器中寫(xiě)入或覆寫(xiě)命令或參數(shù),或者,其可將適當(dāng)?shù)腟ELPP及/或WRPP命令插入渲染命令流內(nèi)。因此,可使PP命令緩沖器及后處理目標(biāo)程序?qū)D形驅(qū)動(dòng)器(包括資源管理器)透明,且本發(fā)明可與未經(jīng)修改的傳統(tǒng)圖形驅(qū)動(dòng)器一起使用。應(yīng)了解,可使用由GPU中的適當(dāng)命令接口組件操作的除PP命令緩沖器以外的其他控制結(jié)構(gòu)來(lái)控制后處理目標(biāo)程序的行為。
其他實(shí)施例如上文所述,本發(fā)明的實(shí)施例使GPU的執(zhí)行核心中可用的大量處理能力能夠用于以顯示步調(diào)進(jìn)行像素處理。此外,本文中所述的后處理目標(biāo)程序的可編程性在可實(shí)施的顯示后處理的量及類(lèi)型方面提供比傳統(tǒng)專(zhuān)用電路明顯更大的靈活性。此外,本發(fā)明的某些實(shí)施例能夠明顯減少或消除傳統(tǒng)GPU中專(zhuān)用后處理電路的量,從而在芯片面積及功耗方面具有優(yōu)點(diǎn)。
盡管上文參照具體實(shí)施例來(lái)說(shuō)明本發(fā)明,然而所屬領(lǐng)域中的技術(shù)人員將知,也可存在諸多修改形式。例如,本發(fā)明并不僅限于任何特定執(zhí)行核心或上下文管理架構(gòu)。此外,盡管上文是說(shuō)明后處理操作的具體實(shí)例,然而應(yīng)了解,可在本發(fā)明的范疇內(nèi)構(gòu)建任何操作或操作組合,包括在本文中未明確提及的操作。
本文的說(shuō)明提及了處理目標(biāo)程序,例如渲染目標(biāo)程序及后處理目標(biāo)程序。在該上下文中,“目標(biāo)程序”應(yīng)理解為是指具有狀態(tài)及行為方面的實(shí)體。所屬領(lǐng)域的一般技術(shù)人員將知,可通過(guò)各種方式在多處理器中構(gòu)建多個(gè)目標(biāo)程序。例如,可構(gòu)建具有上下文切換特征的單個(gè)處理引擎,以便能夠根據(jù)需要切入及切出不同的目標(biāo)程序。另一選擇為,本文所述的任何或所有目標(biāo)程序均可使用能夠?qū)崿F(xiàn)該目標(biāo)程序的狀態(tài)及行為方面的單獨(dú)的處理引擎來(lái)構(gòu)建。
此外,盡管上文參照具體硬件及軟件組件來(lái)說(shuō)明本發(fā)明,然而所屬領(lǐng)域的技術(shù)人員將知,也可使用硬件及/或軟件組件的不同組合,且被描述為在硬件中執(zhí)行的特定操作也可在軟件中執(zhí)行,反之亦然。
可將包含本發(fā)明各種特征的計(jì)算機(jī)程序編碼于各種計(jì)算機(jī)可讀媒體上進(jìn)行存儲(chǔ)及/或傳輸;適合的媒體包括磁盤(pán)或磁帶、例如CD(光盤(pán))或DVD(數(shù)字通用光盤(pán))等光學(xué)存儲(chǔ)媒體、快閃存儲(chǔ)器、以及適于通過(guò)符合各種協(xié)議的有線(xiàn)網(wǎng)絡(luò)、光學(xué)網(wǎng)絡(luò)及/或無(wú)線(xiàn)網(wǎng)絡(luò)(包括因特網(wǎng))進(jìn)行傳輸?shù)妮d波信號(hào)。以程序碼進(jìn)行編碼的計(jì)算機(jī)可讀媒體可使用兼容的裝置一起進(jìn)行包裝或與其他裝置分開(kāi)提供(例如通過(guò)因特網(wǎng)下載)。
因此,盡管上文參照具體實(shí)施例來(lái)說(shuō)明本發(fā)明,然而應(yīng)了解,本發(fā)明旨在涵蓋歸屬于上文權(quán)利要求書(shū)范圍內(nèi)的所有修改及等價(jià)形式。
權(quán)利要求
1.一種圖形處理器,其包括多處理器,其經(jīng)配置以執(zhí)行多個(gè)目標(biāo)程序,包括渲染目標(biāo)程序,其經(jīng)配置以執(zhí)行第一程序指令序列以用于產(chǎn)生圖像數(shù)據(jù);及后處理目標(biāo)程序,其經(jīng)配置以執(zhí)行第二程序指令序列以用于從所述圖像數(shù)據(jù)中產(chǎn)生像素?cái)?shù)據(jù)幀;其中所述多處理器包括仲裁單元,所述仲裁單元經(jīng)配置以控制所述多個(gè)目標(biāo)程序的執(zhí)行,及掃描輸出引擎,其經(jīng)配置以將所產(chǎn)生像素?cái)?shù)據(jù)幀等時(shí)地傳輸至顯示端口,并經(jīng)耦接以周期性地將觸發(fā)器信號(hào)傳輸至所述仲裁單元,其中所述仲裁單元進(jìn)一步經(jīng)配置以操作所述后處理目標(biāo)程序,以響應(yīng)于所述觸發(fā)器信號(hào)而產(chǎn)生新的像素?cái)?shù)據(jù)幀。
2.如權(quán)利要求1所述的圖形處理器,其中所述多處理器包括第一可編程處理引擎,其經(jīng)配置以執(zhí)行所述渲染目標(biāo)程序;及第二可編程處理引擎,其經(jīng)配置以執(zhí)行所述后處理目標(biāo)程序。
3.如權(quán)利要求1所述的圖形處理器,其中所述多處理器包括可切換上下文的處理核心;及上下文管理器,其經(jīng)配置以保持對(duì)應(yīng)于所述多個(gè)處理目標(biāo)程序中每一者的相應(yīng)上下文,其中所述仲裁單元經(jīng)進(jìn)一步配置以控制從由所述上下文管理器保持的所述上下文中選擇當(dāng)前上下文,以便響應(yīng)于所述觸發(fā)器信號(hào)而激活對(duì)應(yīng)于所述后處理目標(biāo)程序的上下文。
4.一種圖形處理器,其包括可編程執(zhí)行核心,其經(jīng)配置以可在多個(gè)上下文之間進(jìn)行切換,且進(jìn)一步經(jīng)配置以執(zhí)行與所述多個(gè)上下文中被切換到的一者相關(guān)聯(lián)的程序指令,仲裁單元,其耦接至所述執(zhí)行核心并經(jīng)配置以控制所述執(zhí)行核心在所述多個(gè)上下文中不同上下文之間的切換,及掃描輸出引擎,其經(jīng)配置以將所產(chǎn)生像素?cái)?shù)據(jù)幀等時(shí)地傳輸至顯示端口,并經(jīng)耦接以將觸發(fā)器信號(hào)傳輸至所述仲裁單元,其中所述多個(gè)上下文包括渲染上下文,其具有與其相關(guān)聯(lián)的第一程序指令序列以用于產(chǎn)生圖像數(shù)據(jù);及后處理上下文,其具有與其相關(guān)聯(lián)的第二程序指令序列以用于從所述圖像數(shù)據(jù)中產(chǎn)生像素?cái)?shù)據(jù)幀;及其中所述仲裁單元進(jìn)一步經(jīng)配置以響應(yīng)于所述觸發(fā)器信號(hào)而將所述執(zhí)行核心切換至所述后處理上下文。
5.如權(quán)利要求4所述的圖形處理器,其中所述掃描輸出引擎進(jìn)一步經(jīng)配置以每一幀傳輸所述觸發(fā)器信號(hào)一次。
6.如權(quán)利要求5所述的圖形處理器,其中所述掃描輸出引擎進(jìn)一步經(jīng)配置以使所述觸發(fā)器信號(hào)具有與幀結(jié)尾事件實(shí)質(zhì)上固定的時(shí)間關(guān)系。
7.如權(quán)利要求4所述的圖形處理器,其中所述仲裁單元進(jìn)一步經(jīng)配置以將所述執(zhí)行核心維持在所述后處理上下文中,直至在第二程序指令流中檢測(cè)到幀完成事件為止,且此后將所述執(zhí)行核心切換至所述渲染上下文。
8.如權(quán)利要求7所述的圖形處理器,其中所述幀完成事件對(duì)應(yīng)于在所述第二程序指令流中出現(xiàn)瞄準(zhǔn)所述第二程序指令流的起始點(diǎn)的無(wú)條件跳轉(zhuǎn)指令。
9.如權(quán)利要求4所述的圖形處理器,其中所述第一程序指令序列進(jìn)一步包括用于選擇多個(gè)圖像緩沖器中的一者并將所述圖像數(shù)據(jù)寫(xiě)入至所述所選圖像緩沖器的指令。
10.如權(quán)利要求9所述的圖形處理器,其中所述第二程序指令序列進(jìn)一步包括用于從所述多個(gè)圖像緩沖器中的一者或一者以上讀取所述圖像數(shù)據(jù)的指令。
11.如權(quán)利要求10所述的圖形處理器,其中所述第一程序指令序列進(jìn)一步包括用于將所述所選圖像緩沖器的索引值寫(xiě)入至索引位置內(nèi)的指令,其中用于寫(xiě)入所述索引值的所述指令是在執(zhí)行用于將所述圖像數(shù)據(jù)寫(xiě)入至所述所選圖像緩沖器的所述指令之后執(zhí)行;及所述第二程序指令序列進(jìn)一步包括用于從所述索引位置讀取所述索引值的指令。
12.如權(quán)利要求11所述的圖形處理器,其中所述第二程序指令序列進(jìn)一步包括以從所述索引位置讀取的所述索引值是否不同于先前從所述索引位置讀取的舊索引值為條件的至少一個(gè)指令。
13.如權(quán)利要求12所述的圖形處理器,其中所述至少一個(gè)條件指令包括用于釋放所述多個(gè)圖像緩沖器中的一者以供所述渲染上下文隨后使用的指令。
14.如權(quán)利要求4所述的圖形處理器,其中所述第二程序指令序列包括用于選擇多個(gè)幀緩沖器中的一者并將幀的像素?cái)?shù)據(jù)寫(xiě)入至所述所選幀緩沖器的指令。
15.如權(quán)利要求14所述的圖形處理器,其中所述掃描輸出引擎進(jìn)一步經(jīng)配置以從第一位置讀取顯示索引值,所述顯示索引值標(biāo)識(shí)所述多個(gè)幀緩沖器中的一者,并從所述所標(biāo)識(shí)的幀緩沖器讀取幀的像素?cái)?shù)據(jù);及所述第二程序指令序列進(jìn)一步包括用于在完成將所述幀的像素?cái)?shù)據(jù)寫(xiě)入至所述所選幀緩沖器之后將對(duì)應(yīng)于所述所選幀緩沖器的所述顯示索引值寫(xiě)入至所述第一位置的指令。
16.一種圖形處理系統(tǒng),其包括多個(gè)圖像緩沖器,其每一者經(jīng)配置以存儲(chǔ)圖像的片段數(shù)據(jù);多個(gè)幀緩沖器,其每一者經(jīng)配置以存儲(chǔ)幀的像素?cái)?shù)據(jù);多處理器,其包括可編程執(zhí)行核心,其經(jīng)配置以可在多個(gè)上下文之間進(jìn)行切換,以使所述執(zhí)行核心執(zhí)行與所述多個(gè)上下文中被切換到的一者相關(guān)聯(lián)的程序指令;及仲裁單元,其耦接至所述執(zhí)行核心,并經(jīng)配置以控制所述執(zhí)行核心在所述多個(gè)上下文中的不同上下文之間的切換,及掃描輸出引擎,其經(jīng)配置以將像素?cái)?shù)據(jù)幀從所述幀緩沖器等時(shí)地傳輸至顯示端口,并經(jīng)耦接以將觸發(fā)器信號(hào)周期性地傳輸至所述多處理器的所述仲裁單元,其中所述多個(gè)上下文包括渲染上下文,其具有與其相關(guān)聯(lián)的第一程序指令序列,以用于產(chǎn)生多個(gè)圖像的片段數(shù)據(jù)并將每一圖像的所述片段數(shù)據(jù)寫(xiě)入至所述圖像緩沖器中的一者;及后處理上下文,其具有與其相關(guān)聯(lián)的第二程序指令序列,以用于從所述圖像緩沖器中的所述片段數(shù)據(jù)中產(chǎn)生像素?cái)?shù)據(jù)幀并將所述幀的所述像素?cái)?shù)據(jù)寫(xiě)入至所述幀緩沖器中的一者;及其中所述仲裁單元進(jìn)一步經(jīng)配置以響應(yīng)于所述觸發(fā)器信號(hào)而將所述執(zhí)行核心切換至所述后處理上下文。
17.一種用于產(chǎn)生圖像的方法,所述方法包括在處理器的共享執(zhí)行核心中操作渲染目標(biāo)程序,所述渲染目標(biāo)程序響應(yīng)于第一程序指令序列而產(chǎn)生圖像的片段數(shù)據(jù);與操作所述渲染目標(biāo)程序并行地操作掃描輸出引擎,以將像素?cái)?shù)據(jù)幀等時(shí)地遞送至顯示裝置,其中所述掃描輸出引擎周期性地產(chǎn)生觸發(fā)器信號(hào);及響應(yīng)于所述觸發(fā)器信號(hào),在所述處理器的共享執(zhí)行核心中操作后處理目標(biāo)程序,所述后處理目標(biāo)程序響應(yīng)于第二程序指令序列而從一個(gè)或一個(gè)以上圖像的所述片段數(shù)據(jù)中產(chǎn)生新的像素?cái)?shù)據(jù)幀,所述新的像素?cái)?shù)據(jù)幀可供所述掃描輸出引擎使用。
18.如權(quán)利要求17所述的方法,其中所述觸發(fā)器信號(hào)具有與幀結(jié)尾事件實(shí)質(zhì)上固定的時(shí)間關(guān)系。
19.如權(quán)利要求17所述的方法,其中在所述后處理目標(biāo)程序的操作期間中止所述渲染目標(biāo)程序的操作,并在所述后處理目標(biāo)程序已完成所述新的像素?cái)?shù)據(jù)幀的產(chǎn)生之后重新開(kāi)始所述渲染目標(biāo)程序的操作。
20.如權(quán)利要求17所述的方法,其中所述第二程序指令序列包括用于對(duì)圖像的所述片段數(shù)據(jù)進(jìn)行下降過(guò)濾的指令。
21.如權(quán)利要求17所述的方法,其中所述第二程序指令序列包括用于對(duì)圖像的所述片段數(shù)據(jù)進(jìn)行上升過(guò)濾的指令。
22.如權(quán)利要求17所述的方法,其中所述第二程序指令序列包括用于為所述幀的每一像素計(jì)算LCD過(guò)激勵(lì)值的指令。
23.如權(quán)利要求17所述的方法,其中所述第二程序指令序列包括用于使用兩個(gè)或兩個(gè)以上不同圖像的片段數(shù)據(jù)來(lái)形成合成圖像的指令。
24.如權(quán)利要求17所述的方法,其中所述第二程序指令序列包括用于將所述圖像映射至表面上的指令。
全文摘要
在圖形處理器中,渲染目標(biāo)程序與后處理目標(biāo)程序共享對(duì)具有可編程執(zhí)行核心的主機(jī)處理器的存取。所述渲染目標(biāo)程序根據(jù)幾何數(shù)據(jù)產(chǎn)生圖像的片段數(shù)據(jù)。所述后處理目標(biāo)程序運(yùn)行以根據(jù)所述片段數(shù)據(jù)產(chǎn)生像素?cái)?shù)據(jù)幀并將所述像素?cái)?shù)據(jù)存儲(chǔ)于幀緩沖器中。與所述主機(jī)處理器的操作并行地,掃描輸出引擎讀取先前所產(chǎn)生的幀的像素?cái)?shù)據(jù)并將所述像素?cái)?shù)據(jù)提供至顯示裝置。所述掃描輸出引擎周期性地觸發(fā)所述主機(jī)處理器,以操作所述后處理目標(biāo)程序來(lái)產(chǎn)生下一個(gè)幀??蓪?duì)所述掃描輸出引擎與所述后處理目標(biāo)程序之間的定時(shí)進(jìn)行控制,以便當(dāng)所述掃描輸出引擎結(jié)束對(duì)當(dāng)前幀的讀取時(shí),所要顯示的下一個(gè)幀在幀緩沖器中準(zhǔn)備就緒。
文檔編號(hào)G06T15/00GK101080698SQ200580043375
公開(kāi)日2007年11月28日 申請(qǐng)日期2005年12月14日 優(yōu)先權(quán)日2004年12月20日
發(fā)明者鄧肯·A·里亞赫, 約翰·M·丹斯金, 喬納·M·阿爾本, 邁克爾·A·奧格林茨, 安東尼·邁克爾·塔馬西 申請(qǐng)人:輝達(dá)公司