專利名稱:利用具有時間分配器的圖形渲染引擎的裝置、方法和系統的制作方法
技術領域:
本發明一般地涉及多個圖像的渲染(render)。更具體而言,本發明涉及在一個或多個顯示設備上渲染多個圖像。
背景技術:
圖像渲染是將基于對象的高級描述轉換為用于在某個顯示設備上顯示的圖形化圖像。例如,在將一個三維對象或場景的數學模型轉換為一個位像期間就會發生圖像渲染的動作。圖像渲染的另一個例子是將一個HTML文檔轉換為一個用于在計算機監視器上顯示的圖像。一般地,稱為圖形渲染引擎的硬件設備會加速這些圖形處理任務。
當在互聯網上沖浪時經常會在一個計算機監視器上看多個圖像。例如,當在互聯網上沖浪時在一個計算機監視器上可能顯示了一個網頁和疊加在網頁上的兩個廣告條。圖形渲染引擎一般渲染和例如所述網頁的第一圖像相關聯的所有指令。在處理完第一圖像的指令后,圖形渲染引擎開始處理和例如一個廣告條的第二圖像相關聯的指令。但是,一般而言,圖形渲染引擎在開始處理和第二圖像相關聯的指令之前必須完成對和第一圖像相關聯的指令的渲染。于是,如果圖形渲染引擎處理指令比圖形應用程序生成指令更快,那么圖形渲染引擎在那段時間就一直空閑。而且,如果圖像指令在執行下一指令之前要求真實世界的事件的發生,那么圖形渲染引擎在那段時間就一直空閑。一般地,圖形渲染引擎順序地服務于指令流。于是,和第一指令流相關聯的指令在圖形渲染引擎開始處理和第二指令流相關聯的指令之前被處理。
另一個例子是在三維環境中對兩個獨立圖像的渲染。單個顯示屏幕顯示第一窗口和第二窗口,第一窗口包含3D圖像,第二窗口包含控制2D圖形用戶接口的顯示圖像。注意到在現有技術中,第一窗口中圖像的指令在圖形渲染引擎開始處理第二窗口中圖像的指令之前被處理。
現有技術已經在多個設備上顯示多個圖像。一般地,有兩個或多個圖形渲染引擎來處理和多個圖像相關聯的指令。每個圖形渲染引擎服務一個顯示設備。但是,實際上,多個圖形渲染引擎比單個圖形渲染引擎占用更多的物理空間、消耗更多的能量并且制造成本更高。于是,減少圖形渲染引擎的數量是有益的。而且,試圖用兩個或多個圖形渲染引擎在同一顯示屏幕上渲染不同圖像的現有技術遇到了嚴重的仲裁沖突。
每個圖形渲染引擎經由一組渲染狀態變量來控制。這些狀態變量統一稱為渲染上下文。渲染狀態變量控制圖形渲染過程的特定方面,如對象顏色、紋理和紋理應用模式等等。
每個圖像的特定的渲染上下文當該圖像被渲染時就與該圖像一起存在了。現有技術使用一種低效率的方法來設置和圖像相關聯的渲染上下文。圖形驅動程序從應用程序接收指令并將包含指令的指令流發送到圖形渲染引擎,所述指令中包括當前和圖像相關聯的狀態變量設置。圖形渲染引擎在執行其他渲染指令之前就處理執行渲染上下文指令。當圖形渲染引擎在處理與第一圖像相關聯的指令和與第二圖像相關聯的指令之間切換時,圖形應用程序需要發送渲染上下文指令并且圖形渲染引擎需要處理那些渲染上下文指令。
以前,和圖形渲染引擎相關聯的渲染上下文僅經由軟件生成的指令流來修改,從主CPU不能直接訪問。因此從例如當前渲染上下文的第一渲染上下文變到例如新渲染上下文的第二渲染上下文,需要應用軟件生成指令來為第二渲染上下文給定狀態變量設置。假如不能讀第一渲染上下文,就需要應用軟件保留第一渲染上下文的一份影子備份以在以后某個時刻恢復該第一渲染上下文。
本發明參考附圖如下圖1圖示了圖形設備的一個實施例的方框圖,所述圖形設備使用單個圖形渲染引擎來渲染一個或多個圖像以在多個顯示設備上顯示所述一個或多個圖像。
圖2圖示了計算機系統的一個實施例的方框圖,所述計算機系統包含中央處理單元(CPU)、高速緩存、存儲器、顯示設備與圖形設備,所述圖形設備具有指令傳輸器的實施例和圖形上下文管理器的實施例。
圖3圖示了環形緩沖存儲器區域的一個實施例的方框圖。
圖4圖示了在每個正被渲染的獨立圖像之間分配圖形渲染引擎的使用的時間分配器的實施例的方框圖。
圖5和圖6圖示了使用單個圖形渲染引擎在多個顯示設備上渲染多個圖像的過程的一個實施例的流程圖。
盡管本發明可以有各種修改和替換形式,但其具體實施例已經通過附圖中的例子示出了并將在其中詳細描述。本發明應不限于所公開的具體顯示來理解,相反,本發明將覆蓋落在本發明的精神和范圍之內的所有修改、等價物和替換。
具體實施例方式
在以下說明中,給出了大量的具體細節,如具體指令、命名元件和連接等等的例子,以提供對本發明的充分理解。但是很清楚,對本領域的技術人員沒有這些具體細節也可以實施本發明。在其他例子里,用方框圖而非詳細地描述公知的元件或方法,以免不必要地使本發明難以理解。于是,所給出的具體細節就僅僅是示例性的。具體細節可能變化但仍應視為在本發明的精神和范圍之內。
一般而言,圖形渲染引擎并行渲染用來在多個顯示設備上顯示的獨立圖像。指令傳輸器將兩個或多個獨立圖像的指令轉給圖形渲染引擎。時間分配器仲裁每個被渲染的獨立圖像間對圖形渲染引擎的并行使用。圖形上下文管理器將和第一獨立圖像相關聯的渲染上下文從一個已確定存儲器位置恢復到圖形渲染引擎。
圖1圖示了圖形設備的一個實施例的方框圖,所述圖形設備使用圖形渲染引擎來渲染一個或多個圖像以在多個顯示設備上顯示所述一個或多個圖像。參考圖1,圖形設備100包含圖形渲染引擎102、一個或多個指令傳輸器104、上下文管理器106、時間分配器108和例如第一顯示設備110和第二顯示設備112的一個或多個顯示設備。在一個實施例中,圖形設備100包含單個圖形渲染引擎102。
圖形渲染引擎102生成在單個顯示設備或多個顯示設備上顯示的獨立圖像。于是,例如兩個獨立圖像可在同一顯示設備上顯示或者所述兩個獨立圖像可每個在獨自的顯示設備上顯示。每個獨立圖像的指令來自獨自的指令流114或單個指令流114,其包含來自多個圖形應用程序的指令。
通過瀏覽器應用程序來顯示帶廣告條的網頁時,與現有技術相比每個獨立圖像可并行渲染,現有技術則順序地先渲染和二維圖像相關聯的第一指令流,然后渲染和三維圖像相關聯的第二指令流。一般而言,現有技術完全渲染和第一圖像相關聯的圖像指令,例如廣告條的第一圖像包含在第一窗口中,然后再完全渲染第二圖像的指令,例如網頁的第二圖像包含在第二窗口中。一般地,在現有技術中,圖形渲染引擎不并行操作對于每個獨立圖像的指令。
時間分配器108仲裁被渲染的每個獨立圖像間對圖形渲染引擎的使用。圖形上下文管理器106存儲和每個在存儲器設備(未示出)中被渲染的獨立圖像相關聯的上下文。在處理器上運行和在處理器上運行的瀏覽器上運行的各種圖形應用程序將圖像渲染指令插入指令流114。指令傳輸器104將指令從指令流114傳到圖形渲染引擎102來處理。
圖形渲染引擎圖形渲染引擎102與上下文管理器106、時間分配器108和一個或多個指令傳輸器104一起工作來高效使用圖形渲染引擎102。每個向指令流114提供指令的圖形應用程序可以以不同的速率生成圖像和操作。例如,現場視頻流應用程序通常以比文字處理應用程序快得多的圖像生成速度來操作。圖形渲染引擎102可并行渲染和兩個或多個圖像相關聯的指令以最小化圖形渲染引擎102保持空閑的時間。而且,在現有技術中,如果第一圖像的指令在執行下一指令之前要求真實世界的事件發生,那么圖形渲染引擎102在那段時間就一直空閑。但是,圖形渲染引擎102可并行渲染來自多個圖像的指令以減少圖形渲染引擎102的空閑時間。
圖形渲染引擎102可保存和第一圖像相關聯的當前渲染上下文并從一個已確定存儲器位置(未示出)加載和第二圖像相關聯的新的渲染上下文。在一個實施例中,用來存儲渲染上下文的已確定存儲器位置可稱為邏輯上下文(未示出)。圖形渲染設備100當被要求切換渲染上下文時可(1)將來自渲染狀態變量的當前渲染上下文寫入存儲器中的第一已確定存儲器位置;(2)從存儲器中的第二已確定存儲器位置讀入新的渲染上下文;并(3)將來自新的渲染上下文的信息載入渲染狀態變量。在一個實施例中,上下文管理器106中的已確定存儲器位置和每個在生成獨立圖像的圖形應用程序相關聯。在一個實施例中,各個指令傳輸器104和每個顯示設備110、112相關聯以存儲為那個特定的顯示設備110、112處理的獨立圖像渲染指令組。
圖2圖示了計算機系統的一個實施例的方框圖,所述計算機系統包含中央處理單元(CPU)、高速緩存、存儲器、顯示設備與圖形設備,所述圖形設備具有指令傳輸器的實施例和圖形上下文管理器的實施例。圖形設備200包含多個環形緩沖區寄存器204和206、環形緩沖區直接存儲器訪問引擎(RB DMA ENG)212、圖形渲染引擎214以及上下文標識寄存器(CID)222和224。圖形設備200與以下部分相關聯多個環形緩沖存儲器區域208和210;多個已確定存儲器位置216、218和220;以及多個顯示設備228和230。在一個實施例中,指令傳輸器包括多個環形緩沖區寄存器204和206、多個環形緩沖存儲器區域208和210以及直接存儲器訪問引擎212。在一個實施例中,上下文管理器由以下部分組成上下文標識寄存器(CID)222和224;活動上下文標識寄存器(活動CID)226;以及多個已確定存儲器位置216、218和220。
圖3圖示了環形緩沖存儲器區域的一個實施例的方框圖。如上所看到的,指令傳輸器的一個實施例包含一個或多個環形緩沖區寄存器310和一個或多個環形緩沖存儲器區域300,通過這兩者軟件生成的指令能被傳送到圖形渲染引擎(未示出)。環形緩沖存儲器區域300保存來自圖形應用程序(未示出)的實際圖像渲染指令。環形緩沖區寄存器310定義環形緩沖存儲器區域300的起始和長度,并在環形緩沖存儲器區域300中包括兩個“偏移”,即頭偏移304和尾偏移302。尾偏移302通知圖形渲染引擎存在必須執行的有效指令。隨著那些指令被分析和執行,圖形渲染引擎增大頭偏移304。指令可以從環形緩沖存儲器區域300的底端繞回到環形緩沖存儲器區域300的頂端。在一個實施例中,環形緩沖存儲器區域300存儲指向批量緩沖區(未示出)的位置的指令。批量緩沖區包含獨自的圖像渲染指令列表,所述指令可存儲在不連續的存儲器區域中以提供另外的指令存儲容量。在一個實施例中,批量緩沖區存儲可從指令流調用的獨立指令序列。
回來參考圖2,每個環形緩沖區寄存器204、206可在寄存器中具有多個字段。在例如第一環形緩沖區寄存器204的環形緩沖區寄存器實施例中所包含的字段可以是環形緩沖區有效字段(V)232、起始地址字段(S)234、緩沖區長度字段(L)235、頭偏移字段(H)236、頭繞回計數字段(W)233、尾偏移字段(T)237、自動報告頭使能字段(R)238、時間片字段(TS)239和其它類似字段。
環形緩沖區有效字段232控制此特定環形緩沖區寄存器是否包括在用于共享圖形渲染引擎214的仲裁進程中。起始地址字段234指向包括環形緩沖存儲器區域208、210的相鄰存儲器區域的起始。環形緩沖存儲器區域208、210位于系統存儲器232或者專用存儲器中。緩沖區長度字段235指明所分配的環形緩沖存儲器區域208、210的字節大小。在一個實施例中,緩沖區長度字段235定義可任一次提交給環形緩沖存儲器區域208、210的最大數據量。在一個實施例中,環形緩沖存儲器區域208、210可包含圖像渲染指令和指向一個或多個批量緩沖區240的指針并由此形成可包含指令的虛擬無限的存儲器區域。
頭偏移字段236指向從圖形渲染引擎214將分析的下一指令起始地址234開始的存儲器偏移。例如頭偏移字段236可指向最后一個被分析的指令的后一個存儲器單元。圖形渲染引擎214隨著指令被分析而更新頭偏移字段236。一旦頭偏移字段236達到尾偏移字段237的值,即兩個偏移相等,那么只要維持此條件圖形渲染引擎214就認為環形緩沖存儲器區域208、210為空,并為共享圖形渲染引擎214而從仲裁進程中去掉相應的環形緩沖區寄存器204、206。于是,存在一個標志表明此特定顯示設備的指令流應從中心進程中去掉。而且,在環形緩沖區寄存器204、206中包括自動報告頭使能字段,它使頭指針值和頭繞回計數字段233寫入可高速緩存的存儲器以用于更有效的流控制算法,例如,輪詢頭偏移236以確定進度期間的流控制算法。
環形緩沖存儲器區域208、210可將指令從存儲器區域的末端環繞到存儲器區域的起始處。每次頭偏移236繞回到環形緩沖存儲器區域208、210的起始地址234圖形渲染引擎214都增大頭繞回計數字段233。在一個實施例中,頭繞回計數字段233包括在寫進“報告頭”進程的雙字(DWord)中。圖形設備200可使用頭繞回計數字段233來跟蹤指令分析進度,就象環形緩沖存儲器區域208、210具有比實際物理緩存大得多的“虛擬”長度。
尾偏移字段237指向環形緩沖存儲器區域208、210中從起始地址234偏移特定距離的位置。尾偏移字段237可指向圖形應用軟件可用來存儲以后將執行的另外的圖形渲染指令的下一指令數據存儲器單元。例如,尾偏移字段237指向提交給圖形渲染引擎214用于執行的最后指令的后一存儲器單元232。所提交的指令可從環形緩沖存儲器區域208、210的末端繞回到頂端,這種情況下所寫的尾偏移字段237將比前一個值小。環形緩沖存儲器區域208、210的“空”條件可定義為“頭偏移字段236等于尾偏移字段237”。
自動報告頭使能字段238允許圖形應用軟件或操作軟件請求將頭偏移字段236和頭繞回計數字段233的內容周期地寫到CPU監聽的特定系統存儲器位置。自動報告可編程為每次頭偏移字段236前進一個被編程的量的時候就出現。這種自動報告機制允許軟件使用頭偏移字段236和頭繞回計數字段233來確定環形緩沖區中自由空間的量。于是,頭偏移字段236可被周期性地報告到系統存儲器中以自動提供相當新的頭偏移字段236值,而不必經由一個指令來明確獲得頭指針值。
每個顯示設備228、230可具有和此個別顯示設備相關聯的獨自的指令傳輸器。如圖2所圖示的,第一環形緩沖區寄存器204和第一環形緩沖存儲器區域208與第一顯示設備228相關聯。第二環形緩沖區寄存器206和第二環形緩沖存儲器區域210與第二顯示設備230相關聯。于是,在此例子中,第一環形緩沖區寄存器204和第一環形緩沖存儲器區域208提供指令用于渲染要在第一顯示設備228上顯示的獨立圖像。在一個實施例中,第一環形緩沖區寄存器204和第一環形緩沖存儲器區域208可與第二顯示設備230相關聯。
多個指令傳輸器允許賦給每個指令傳輸器不同的優先級。例如,較低優先級的指令傳輸器可用于可中斷的后臺渲染任務。相似地,較高優先級的指令傳輸器可用來服務于例如視頻幀捕獲的異步事件。而且,通過分配第一指令傳輸器來服務于例如第一顯示器228的一個顯示設備,并分配第二指令傳輸器來服務于例如第二顯示器230的另一顯示設備,圖形設備200可支持每個顯示設備獨自的指令流。另外,圖形設備200可支持每個顯示設備分別控制的指令流。
如上所看到的,每個指令傳輸器可包括直接存儲器訪問引擎212。直接存儲器訪問引擎212從特定的指令傳輸器取得指令并將這些指令傳給圖形渲染引擎214。
圖形渲染引擎214從指令傳輸器經由直接存儲器訪問引擎212讀取圖像指令并執行這些圖像指令。圖形渲染引擎214經由環形緩沖區寄存器204、206的頭偏移字段236和尾偏移字段237間的不同來檢測環形緩沖存儲器區域208、210中指令的存在。圖形渲染引擎214解釋并解碼指令的公共“頭”字段以確定指令包含什么信息以及如何進一步執行指令。對指令的這種解釋和解碼通常稱為分析。
在一個實施例中,圖形渲染引擎214解碼來自指令流242的具體指令以找出指令包含什么信息(例如要應用的狀態變量變化246和要渲染的圖元(primitive)248)。圖形渲染引擎214隨后相應執行指令。狀態變量變化指令246的執行引起當前渲染上下文的具體變化。圖元指令248的執行引起存儲器256、258中適當的圖像信息的修改(即圖像被渲染)。圖形渲染引擎214隨后將圖像信息存儲在相應于每個顯示設備228、230的存儲器位置處,例如第一顯示圖像256和第二顯示圖像258。在一個實施例中,第一顯示圖像256的信息和第二顯示圖像258的信息存儲在專用于第一顯示設備228和第二顯示設備230的本地存儲器中。在一個實施例中,第一顯示圖像256的指令和第二顯示圖像258的指令存儲在系統存儲器232中。圖形渲染引擎214從存儲器中讀入已渲染的圖像信息并周期地將已渲染的圖像信息交給相關聯的顯示設備。例如第一顯示設備228的顯示設備隨后根據此信息將實際的圖像圖示在顯示上。
在一個實施例中,圖形應用程序將指令供應到指令流242中。如所提到的,這些指令可存儲在通常和特定的顯示設備228、230相關聯的環形緩沖存儲器區域208、210中。在一個實施例中,在指令流242中找到的一些類型的指令可以是狀態變量變化246、圖元248與設置上下文命令250和252。圖元指令248指示圖形渲染引擎214關于要畫出的形狀和要賦給這些形狀的位置和尺寸。狀態變量變化指令246指示圖形渲染引擎214在渲染圖像的時候修改存儲在硬件圖形上下文電路244中的渲染狀態變量組的當前值。在一個實施例中,設置上下文命令(設置CXT#)250、252可使圖形渲染引擎214將當前渲染上下文保存到例如第一已確定存儲器位置216的已確定存儲器位置,并從例如第二已確定存儲器位置218的新的已確定存儲器位置恢復新的渲染上下文。
例如第一已確定存儲器位置216的每個已確定存儲器位置存儲正被圖形渲染引擎214渲染的圖像的渲染上下文。相似地,每個已確定存儲器位置216、218和220可存儲當渲染修改的獨立圖像時要使用的渲染狀態變量設置。在一個實施例中,多個已確定存儲器位置216、218和220的存在允許圖形渲染引擎214跟蹤和每個正在渲染的圖像相關聯的渲染上下文。上下文管理器的一個實施例包含多個已確定存儲器位置216、218和220與上下文標識寄存器222、224和226以管理多個圖像的并行渲染。上下文管理器的一個實施例和圖形顯示控制器電路(GDC)270配合以支持在多個顯示設備228、230上顯示圖像以及在例如第一顯示設備228的同一顯示設備上顯示多個圖像。
硬件圖形上下文電路244中大量硬件狀態變量的設置控制圖形設備200中例如渲染的圖形操作。狀態變量可包括全局狀態變量和上下文狀態變量。全局狀態變量對所有上下文是公共的(例如邏輯地址映射資源等等)并由此認為在任何具體渲染上下文的范圍之外。但是,每個和具體圖形應用程序相關聯的渲染上下文確實包含獨自的上下文狀態變量組。在一個實施例中,這些和具體圖形應用程序相關聯的渲染上下文可存儲在活動片上(on-chip)存儲器上的已確定存儲器位置或者系統存儲器232中的多個已確定存儲器位置216、218和220中。
如所提到的,多個已確定存儲器位置216、218和220通過在存儲器232中存儲并從存儲器232恢復和正被圖形渲染引擎渲染的獨立圖像相關聯的渲染上下文來支持圖形渲染引擎214。在一個實施例中,例如設置上下文為A0 250的來自指令流242的第二設置上下文指令指示圖形渲染引擎214將正在渲染圖像的當前渲染上下文發送到例如第一已確定存儲器位置216的已確定存儲器位置中存儲起來。同時,和生成第二圖像的圖形應用程序相關聯的第二已確定存儲器位置218從圖形渲染引擎214接收信號來恢復和正被圖形渲染引擎214并行渲染的第二圖像相關聯的渲染上下文。在一個實施例中,增加位于設備上的上下文緩存260減小了存儲器帶寬的負荷和交換上下文所需的時間。
上下文管理器還由上下文標識寄存器(CID)222、224和活動上下文標識寄存器226組成。上下文標識寄存器222、224和特定的環形緩沖區寄存器204、206相關聯從而和特定的顯示圖像存儲器位置256、258相關聯。
在一個實施例中,活動上下文標識寄存器226跟蹤包含在當前活動的環形緩沖區寄存器204、206中的上下文標識寄存器222、224值。例如第一上下文標識寄存器222的被跟蹤的上下文標識寄存器確定特定的已確定存儲器位置216、218和220中的哪個和當前正被圖形渲染引擎渲染的圖像相關聯。
在一個實施例中,每個上下文標識寄存器222、224包含一個已確定存儲器位置地址和一組上下文限定位。上下文限定位控制部分渲染上下文在上下文切換時必須還是不必保存/恢復。在一個實施例中,每個上下文標識寄存器222、224實施例如“禁止保存紋理調色板”上下文限定位和“禁止恢復紋理調色板”上下文限定位的上下文限定位。在一個實施例中,這些上下文限定位幫助在二維和三維圖像之間交換上下文,這時三維圖像可能需要保持一個當前紋理調色板(即作為渲染上下文的一部分保存和恢復)而二維圖像可能不需要。
已確定存儲器位置216、218和220經由相應上下文標識寄存器222、224的已確定存儲器位置地址來引用。已確定存儲器位置216、218和220的實際大小是上下文切換期間存儲/恢復的數據量并取決于渲染上下文是否包括紋理調色板。在一個實施例中,上下文標識寄存器222、224可包含兩個另外的寄存器來指明存儲器232中各個已確定存儲器位置216、218和220。在一個實施例中,在對來自存儲在相應環形緩沖存儲器區域208、210中的指令流242的“設置上下文”指令250、252進行處理期間,一個特定上下文標識寄存器222、224成為活動寄存器。在一個實施例中,設置上下文指令250、252提供新的上下文標識值(局部上下文地址+禁止保存調色板位)被載入上下文標識寄存器222、224。設置上下文指令250、252還包含用來可選地禁止恢復新上下文的禁止恢復位。在一個實施例中,可在上下文初始化期間使用禁止恢復位來避免從存儲器232加載未初始化的上下文數據。
活動上下文標識寄存器226包含例如第一環形緩沖區寄存器204的活動環形緩沖區寄存器的上下文標識值。作為執行設置上下文指令250、252的一部分,比較來自活動上下文標識寄存器226和設置上下文指令的已確定存儲器位置地址字段。如果不同或者活動上下文標識寄存器226未初始化,就發生上下文交換的操作。
在一個實施例中,在上下文交換操作期間,如果沒有設置禁止恢復指令字段,可運行上下文恢復操作。這里,例如第一已確定存儲器位置216的已確定存儲器位置的地址值用來加載活動上下文標識寄存器226。注意,指令的上下文限定字段還可制約恢復部分渲染上下文。例如,紋理調色板可或者不可恢復。
HW GFX CXT 244導致從合適的已確定存儲器位置加載新上下文,以及用來自設定上下文指令250、252的值來加載活動上下文標識寄存器。在此處,相應的環形緩沖區寄存器204、206和環形緩沖存儲器區域208、210已經將活動上下文交換到新的已確定存儲器位置216、218和220中。
如前所見,每個圖形應用程序可以不同的速率生成圖像指令。同樣地,每個顯示設備228、230可以不同的速率刷新顯示和其相關聯的圖像。在一個實施例中,上下文管理器和指令傳輸器支持不同指令流之間、不同顯示設備228、230之間和同一指令流242中與不同圖形應用程序相關聯的渲染上下文之間的無縫交換。
圖4圖示了在每個正被渲染的獨立圖像之間分配圖形渲染引擎的使用的時間分配器的實施例的方框圖。在一個實施例中,時間分配器400包含仲裁和切換模塊410、定時器寄存器412、單位寄存器414、單位時間計數器416和時間片計數器418。在一個實施例中,時間分配器400提供了對單個圖形渲染引擎411使用的分配的逝去時間標準和公平使用標準。在一個實施例中,時間分配器400可在多個顯示設備(未示出)、多個各自具有自己的指令流413的圖形應用程序和在單個指令流413中的多個圖形應用程序之間分配圖形渲染引擎411的使用來渲染獨立圖像。
每個環形緩沖區寄存器,例如第一環形緩沖區寄存器402和第二環形緩沖區寄存器404,可以是時間分片的或者環形緩沖區寄存器可以是非時間分片的,例如第三環形緩沖區寄存器406。如下所述,每個非時間分片的寄存器可用于例如現場視頻的高優先級圖形圖像來暫時獨占圖形渲染引擎411的使用。
每個環形緩沖區寄存器402、404都有和其相關聯的TIME_SLICE寄存器420、422,所述寄存器420、422指明在表示應該檢查交換到另一個時間分片環形緩沖區之前要運行的指令執行的所需持續時間。在一個實施例中,環形緩沖區寄存器402、404中存在時間片字段420、422以指明應符合此特定環形緩沖區寄存器402、404的使用圖形渲染引擎411的百分比。時間片字段420、422還可指明應符合此特定環形緩沖區寄存器402、404的使用圖形渲染引擎411的最少絕對時間。在一個實施例中,指令執行的所需持續時間可以以時間單元來編程。在一個實施例中,驅動軟件424將這些時間單元值寫入每個時間片字段420、422。從而,驅動軟件424能夠控制給每個時間分片環形緩沖區寄存器402、404的絕對和相對時間。CPU 440從例如存儲器442的存儲器來訪問驅動軟件424。
單位寄存器414提供將由驅動軟件424使用的向前兼容的單位時間的時間量。設備的實際時間參照可隨配置和/或實施而不同的情況下確定單位時間量是重要的。在一個實施例中,單位寄存器414使用圖形設備的400個核心時鐘周期作為實際的時間參照。單位寄存器414可經由圖形設備的BIOS固件426來編程。其它時間片參數可相對于由單位寄存器414確定的此單位時間量來定義。由單位寄存器414定義的每個單位時間量可以是例如一個單位時間等于五十微秒或一個單位時間等于四十時鐘周期。
單位寄存器414還包含一個將環形緩沖區時間分片打開或關閉的時間分片使能位(T)428。在一個實施例中,當清除了單位寄存器414的時間分片使能位428時,固定環形緩沖區有效。在一個實施例中,當設置了單位寄存器414的時間分片使能位428時,時間分片環形緩沖區寄存器402、404之間的仲裁就經由時間片字段420、422來控制。
定時器寄存器412實施時間分片定時控制。當設置了時間分片使能位428時,定時器寄存器412按單位讀取寫入每個環形緩沖區寄存器402、404的時間片字段420、422部分的值。在此模式下,激活或恢復指令流413導致用例如第一環形緩沖區寄存器402的該特定環形緩沖區寄存器的時間片字段420、422部分中的內容值來初始化定時器倒計數字段(TC)434,指令流413將指令供應給例如第一環形緩沖存儲器區域430的特定環形緩沖存儲器區域。當持續執行來自環形緩沖存儲器區域的指令時,定時器倒計數字段434按每個時間單元來減少。
時間片計數器418按每個時間單元來減少定時器倒計數字段434。單位時間計數器416監視并對每個核心時鐘周期計數。單位時間計數器416向時間片計數器418發送信號來基于由單位寄存器414定義的已定單位時間量來減少定時器倒計數字段434。
在一個實施例中,如果以下兩個條件存在則圖形渲染引擎411從仲裁和切換模塊410接收指令以停止渲染來自一個環形緩沖存儲器區域的指令并開始渲染來自另一個環形緩沖存儲器區域的指令。這兩個條件是如果定時器倒計數字段434變成零,以及在另一個環形緩沖存儲器區域中存在掛起的指令。圖形渲染引擎411隨后切換為執行例如第二環形緩沖存儲器區域432的另一個環形緩沖存儲器區域,這導致用第二環形緩沖區寄存器404中的時間片字段422中的內容來再初始化定時器倒計數字段434。這種切換在下一個指令仲裁點出現。
但是,如果當定時器倒計數字段434變成零時在例如第一環形緩沖存儲器區域430的另一個環形緩沖存儲器區域中沒有掛起指令,那么繼續執行當前環形緩沖存儲器區域中的指令。在一個實施例中,無期限地繼續執行當前環形緩沖存儲器區域中的指令直到當另一個環形緩沖存儲器區域通知存在指令為止。在一個實施例中,如果頭偏移字段415中的值不同于尾偏移字段417中的值,例如第一環形緩沖區寄存器402的環形緩沖區寄存器表明有指令要執行。在一個實施例中,新指令的存在被通知到仲裁和切換模塊410。仲裁和切換模塊按時間片字段420、422中指定值繼續執行當前環形緩沖存儲器區域中的指令并隨后執行新指令。
活動上下文標識寄存器經由仲裁和切換模塊410將活動上下文標識寄存器(未示出)的上下文標識寄存器值通知給圖形渲染引擎411。
幾種機制可中斷對兩個環形緩沖區寄存器之間使用圖形渲染引擎411的仲裁進程,在兩個環形緩沖區寄存器各自的環形緩沖存儲器區域中存儲有掛起指令。如上所看到的,例如第三環形緩沖區寄存器406的非時間分片高優先級環形緩沖區可通知仲裁和切換模塊410暫停定時器倒計數434和當前活動的時間分片環形緩沖區寄存器的渲染指令。這種暫停僅是暫時的,直到圖形渲染引擎411完成渲染和非時間分片環形緩沖區相關聯的當前指令。
來自圖形應用軟件的指令流413可包含指令來暫時中斷圖形渲染引擎411的仲裁使用。例如,“加載寄存器”指令423可中斷兩個時間分片環形緩沖區寄存器402、404間的仲裁使用,在環形緩沖區寄存器402、404各自的環形緩沖存儲器區域430、432中存儲有掛起指令。如果在另一個環形緩沖存儲器區域中存在掛起指令,軟件可以使用“加載寄存器”指令423來清除定時器倒計數字段434并由此有效地使活動環形緩沖區寄存器放棄其時間分片時段的剩余部分。例如,當預計到被執行指令的時間不會超過根據環形緩沖區寄存器402、404的指明使用百分比或絕對最少時間時可以使用“加載寄存器”指令423。在一個實施例中,如果和第一流相關聯的指令不占用整個時間分片時段,那么仲裁和切換模塊410自動切換到另一個包含掛起指令的環形緩沖存儲器區域。而且例如,可在一個極耗時間的指令或不可中斷的指令序列之前使用“加載寄存器”指令423,以允許在圖形渲染引擎411按此特定指令序列操作之前來處理第二應用程序的掛起指令。
如所看到的,如果沒有其他環形緩沖存儲器區域430、432有準備好執行的指令,則越過“加載寄存器”指令423繼續執行指令。如果在執行另一個環形緩沖區的指令之后,又一個環形緩沖存儲器區域430、432確實有要執行的指令,那么圖形渲染引擎411立即切換回原來的環形緩沖區的指令而不必等待完定時器倒計數434。
指令流413還可包含“等待事件”指令425。“等待事件”指令425可用來暫停執行來自此具體指令流413的指令直到特定的條件存在或事件發生。如果執行“等待事件”指令425導致暫停,則允許其他時間分片環形緩沖區寄存器402、404來使圖形渲染引擎處理它們的相關聯指令,即使在暫停環形緩沖區的時間分片時段的剩余部分期滿之前。例如,“等待事件”指令425可用來等待視頻捕獲事件。當從顯示屏上的垂直頂端位置到顯示屏上的垂直底端位置時,顯示設備必須使用這些指令來顯示圖像。“等待事件”指令425。于是,圖形渲染引擎411已經渲染了顯示屏上的完整圖像的所有指令并且不能再渲染此顯示設備的指令,直到從垂直頂端位置到垂直底端位置的轉變時間段期滿為止。在圖形設備在等待這樣一個事件發生的期間,“等待事件”指令425允許圖形渲染引擎411在等待當前顯示設備發生此異步事件的時候重使能對和不同顯示設備相關聯的另一個時間分片環形緩沖存儲器區域的處理。異步事件是不在規則間隔發生或時間上不協調的事件,例如視頻捕獲事件。在一個實施例中,異步事件或者隨機發生或者在和指令流執行無關的間隔發生。例如,顯示設備的垂直空白事件作為一個異步事件在真實世界的時間中實際上在規則間隔(即60Hz)發生,但與和指令流413的執行相關聯的不規則服務時間是異步的。
圖5和圖6圖示了使用單個圖形渲染引擎在多個顯示設備上渲染多個圖像的過程的一個實施例的流程圖。當指令流將指令從一個或多個圖形應用程序傳送到指令傳輸器時指令流啟動所述過程。
在方框505中,由環形緩沖區寄存器定義的第一環形緩沖存儲器區域從多個圖形應用程序或經由單個圖形應用程序接收指令。第一環形緩沖存儲器區域的位置和大小可由包含在第一環形緩沖區中的可編程內容定義。指令傳輸器可包含一個或多個環形緩沖存儲器區域或相似的存儲器區域。指令傳輸器可包含一個或多個環形緩沖區寄存器或相似的設備。
在方框510中,驅動器將代表圖像的指令存儲在第一環形緩沖存儲器區域中。在一個實施例中,驅動器改變相應環形緩沖區寄存器中的尾偏移字段以表示存在包含在第一環形緩沖存儲器區域中的這些掛起指令。第一環形緩沖區寄存器將存在要執行的指令通知到圖形渲染引擎與仲裁和切換模塊。
在方框515中,指令傳輸器使用DMA引擎為圖形渲染引擎從第一環形緩沖區存儲器中取得指令。仲裁和切換模塊將第一環形緩沖區存儲器設為其中的指令正被圖形渲染引擎處理的存儲器。
在方框520中,圖形上下文管理器設置和第一環形緩沖區寄存器相關聯的當前渲染上下文。
在方框525中,在一個實施例中,如果正被圖形渲染引擎處理的第一(當前)圖像具有不同于下面將要處理的第二(下一個)圖像的渲染上下文,則發生以下過程。圖形上下文管理器存儲和第一圖像相關聯的渲染上下文并將和第二圖像相關聯的渲染上下文恢復到圖形渲染引擎中。圖形上下文管理器在例如已確定存儲器位置的第二存儲器區域中存儲并恢復狀態變量值,所述狀態變量值代表和來自具體圖形應用程序的圖像相關聯的渲染上下文。第二存儲器區域可由包含在第二寄存器中的例如上下文標識寄存器的可編程內容來定義。
在方框530中,圖形渲染引擎執行來自例如第一環形緩沖存儲器區域的環形緩沖存儲器區域的指令,并對第一圖像顯示存儲器區域進行合適的修改,所述環形緩沖存儲器區域和第一顯示設備相關聯。基于時間分配器,圖形渲染引擎可隨后開始執行來自和第二顯示設備相關聯的第二環形緩沖存儲器區域的指令。在一個實施例中,圖形渲染引擎可開始執行來自第二圖形應用程序的指令,所述指令包含在供應第一環形緩沖存儲器區域的同一指令流中。于是,圖形渲染引擎可通過切換來輪換處理和第一獨立圖像相關聯的指令與和第二獨立圖像相關聯的指令。圖形渲染引擎可在處理來自不同環形緩沖存儲器區域的指令之間切換或者通過處理同一指令流中來自兩個不同圖形應用程序的指令來切換。注意,圖形渲染引擎在開始處理和第二獨立圖像相關聯的指令之前不需要等待處理完所有和第一獨立圖像相關聯的指令。
在方框535中,時間分配器可加載與第一獨立圖像和第二獨立圖像相關聯的指令之間對圖形渲染引擎的平衡使用。在一個實施例中,時間分配器可加載與兩個或更多獨立圖像相關聯的指令之間對圖形渲染引擎的平衡使用。在一個實施例中,時間分配器可根據為每個圖像確定的百分比和為每個圖像確定的對圖形渲染引擎使用的絕對最少時間來平衡對圖形渲染引擎的使用。時間分配器還可平衡要求立刻使用圖形渲染引擎的高優先級圖像與共享對圖形渲染引擎使用的百分比和絕對最少時間的圖像之間對圖形渲染引擎的使用。
在方框540中,時間分配器可在定時電路中確定一個兼容于在不同核心頻率操作的設備的單位時間量。注意,這些方框并不表示任何固定的串行運行順序。例如,方框540可在方框505之前發生。
在方框545中,時間分配器可經由來自圖形設備驅動器的軟件指令來將指定給和第一圖像相關聯的指令使用圖形渲染引擎的時間讓給和第二圖像相關聯的指令。
在方框550中,時間分配器經由來自圖形應用程序的軟件指令允許圖形渲染引擎在等待第一圖像的圖像渲染事件發生時處理和第二圖像相關的指令。
在方框555中,圖形設備在一個或多個顯示設備上并行顯示圖像。
在方框570中,圖形設備繼續在方框505中開始的此過程。
權利要求
1.一種裝置,包括圖形渲染引擎,用來并行渲染兩個或多個獨立圖像以在多個顯示設備上顯示;和時間分配器,用來仲裁所述兩個或多個獨立圖像之間對所述圖形渲染引擎的使用。
2.如權利要求1所述的裝置,其中所述時間分配器包括多個寄存器,包括第一寄存器,所述第一寄存器具有多個字段,所述多個字段包括第一字段和第二字段,所述第一字段確定所述第一寄存器是否參與使用所述圖形渲染引擎的仲裁過程,所述第二字段指向包含來自第一指令流的指令的存儲器位置。
3.如權利要求2所述的裝置,其中所述時間分配器還包括第一模塊,用來確定使用所述圖形渲染引擎的可編程的逝去時間段。
4.如權利要求3所述的裝置,其中所述時間分配器還包括第一電路,用來生成信號以檢查在所述第一寄存器使用了所述圖形渲染引擎所述可編程的逝去時間段之后是否應允許第二寄存器使用所述圖形渲染引擎。
5.如權利要求2所述的裝置,其中所述時間分配器還包括第一模塊,用來指示所述圖形渲染引擎處理和第一獨立圖像相關聯的指令,所述指令存儲在第一存儲器區域中,所述第一存儲器區域具有由包含在所述多個字段中的信息所定義的地址。
6.如權利要求5所述的裝置,其中所述第一存儲器區域有起始處和末端,所述第一存儲器區域可將指令從所述第一存儲器區域的所述末端繞回到所述第一存儲器區域的所述起始處。
7.如權利要求5所述的裝置,其中所述第一模塊包括第二電路,用來跟蹤所述圖形渲染引擎當前正在服務于所述多個寄存器中的哪個寄存器;和第三電路,用來管理不參與所述仲裁過程的第二寄存器、參與所述仲裁過程的第一寄存器和第三寄存器之間對所述圖形渲染引擎的使用。
8.如權利要求3所述的裝置,其中所述第一模塊包括第一電路,用來跟蹤一個特定寄存器使用所述圖形渲染引擎的逝去時間段;和第二電路,用來將所述可編程的逝去時間段轉換為等價的時鐘周期數。
9.如權利要求1所述的裝置,其中所述時間分配器包括第一電路,允許來自圖形應用程序的圖形設備指令指示所述圖形渲染引擎在等待第一獨立圖像的異步事件發生時處理和第二獨立圖像相關聯的指令。
10.如權利要求1所述的裝置,其中所述時間分配器包括第一電路,用來實施來自圖形應用程序的軟件指令,所述軟件指令將分配給和第一獨立圖像相關聯的指令使用所述圖形渲染引擎的時間讓給和第二獨立圖像相關聯的指令。
11.如權利要求1所述的裝置,還包括第一顯示設備和第二顯示設備。
12.如權利要求1所述的裝置,還包括圖形上下文管理器,用來將信息從存儲器恢復到所述圖形渲染引擎,所述信息描述和將由所述圖形渲染引擎渲染的第一獨立圖像相關聯的渲染上下文,所述第一獨立圖像包括在所述兩個或多個獨立圖像中。
13.如權利要求1所述的裝置,還包括第一存儲器區域,用來接收用于包括在所述兩個或多個獨立圖像中的一個或多個獨立圖像的指令,和第二存儲器區域,用來接收用于包括在所述兩個或多個獨立圖像中的一個或多個獨立圖像的指令。
14.如權利要求1所述的裝置,還包括一個或多個指令傳輸器,用來將用于所述兩個或多個獨立圖像的指令傳送到所述圖形渲染引擎,所述一個或多個指令傳輸器包括第一指令傳輸器。
15.如權利要求14所述的裝置,其中每個指令傳輸器和一個特定顯示設備相關聯。
16.如權利要求14所述的裝置,其中所述第一指令傳輸器包括指令存儲器區域;第一寄存器,用來定義所述指令存儲器區域的起始處和末端;和存儲器訪問引擎,用來從所述指令存儲器區域取得所述指令并將所述指令傳送到所述圖形渲染引擎。
17.如權利要求14所述的裝置,其中所述指令傳輸器還包括第三存儲器區域,用來存儲可從指令流調用的獨立指令序列。
18.如權利要求16所述的裝置,其中所述第一寄存器包含第一字段,所述第一字段指示所述圖形設備將包含在第二字段中的內容周期性地寫到被監視的存儲器位置以自動報告所述指令存儲器區域中可用的自由空間量。
19.一種方法,包括使用單個圖形渲染引擎來執行和第一指令流相關聯的指令;通過使用所述單個圖形渲染引擎并行地經由和所述第一指令流相關聯的指令渲染第一獨立圖像并經由和第二指令流相關聯的指令渲染第二獨立圖像;以及仲裁和所述第一指令流相關聯的所述指令與和所述第二指令流相關聯的所述指令之間對所述單個圖形渲染引擎的使用。
20.如權利要求19所述的方法,還包括通過使用定時機制分配和所述第一指令流相關聯的所述指令與和所述第二指令流相關聯的所述指令之間對所述單個圖形渲染引擎的并行使用。
21.如權利要求19所述的方法,還包括將信息從第一存儲器地址恢復到所述圖形渲染引擎,所述信息描述和將由所述單個圖形渲染引擎渲染的所述第一獨立圖像相關聯的第一渲染上下文,并將描述和所述第二獨立圖像相關聯的第二渲染上下文的信息存儲到第二存儲器地址,所述第二個獨立圖像被所述單個圖形渲染引擎渲染。
22.如權利要求19所述的方法,還包括在所述多個顯示設備上顯示一個或多個圖像。
23.一種方法,包括用圖形渲染引擎并行渲染獨立圖像以顯示在多個顯示設備上;在每個被渲染的獨立圖像之間分配對所述圖形渲染引擎的使用時間;以及在存儲器區域中存儲并從所述存儲器區域恢復和第一獨立圖像相關聯的第一渲染上下文。
24.如權利要求23所述的方法,還包括確定和第一獨立圖像相關聯的第一寄存器是否參與使用所述圖形渲染引擎的仲裁過程。
25.如權利要求24所述的方法,還包括經由來自圖形應用程序的軟件指令,允許所述圖形渲染引擎在等待第一圖像的異步事件發生時處理和第二圖像相關聯的指令。
26.如權利要求24所述的方法,還包括經由來自圖形應用程序的軟件指令將分配給和所述第一獨立圖像相關聯的指令使用所述圖形渲染引擎的時間讓給和第二獨立圖像相關聯的指令。
27.如權利要求23所述的方法,還包括通過包含在第一寄存器中的可編程內容定義所述存儲器區域,所述存儲器區域專用于存儲和第一指令流相關聯的所述指令。
28.如權利要求23所述的方法,還包括在所述定時電路中確定時間單位量,其兼容于在第一核心頻率操作的第一設備并兼容于在第二核心頻率操作的第二設備,所述第一核心頻率不同于所述第二核心頻率。
29.如權利要求23所述的方法,還包括在所述定時電路中確定時間單位量,所述時間單位量兼容于在第一頻率操作的第一設備并兼容于在第二頻率操作的所述第一設備。
30.一種系統,包括中央處理單元;圖形設備,所述中央處理單元耦合到所述圖形設備,所述圖形設備包含圖形渲染引擎來并行渲染兩個或多個獨立圖像以顯示在多個顯示設備上;和時間分配器,用來仲裁在所述兩個或多個獨立圖像之間對所述圖形渲染引擎的使用。
31.如權利要求30所述的系統,其中所述時間分配器包括多個寄存器,包括第一寄存器,所述第一寄存器具有多個字段,所述多個字段包括第一字段和第二字段,所述第一字段確定所述第一寄存器是否參與使用所述圖形渲染引擎的仲裁過程,所述第二字段指向包含來自第一指令流的指令的存儲器位置。
32.如權利要求31所述的系統,其中所述時間分配器還包括第一模塊,用來確定使用所述圖形渲染引擎的可編程的逝去時間段。
全文摘要
并行渲染要顯示在一個或多個顯示設備上的獨立圖像的方法、裝置和系統。在一個實施例中,圖形渲染引擎并行渲染要顯示在一個或多個顯示設備上的獨立圖像。時間分配器仲裁每個被渲染的獨立圖像之間對圖形渲染引擎的并行使用。
文檔編號G06T15/00GK1520579SQ02812635
公開日2004年8月11日 申請日期2002年6月28日 優先權日2001年6月29日
發明者彼得·多伊爾, 阿迪蒂亞·斯里尼瓦斯, 亞 斯里尼瓦斯, 彼得 多伊爾 申請人:英特爾公司