技術領域
本發明一般涉及計算機處理器領域。更具體地,本發明涉及用于濾波的粗略像素遮蔽的裝置和方法。
背景技術:
粗略像素遮蔽(CPS)是標準光柵化流水線的擴展,其實現解偶合的遮蔽的有限子集。簡單但有效地,它能夠被視為一般化的多樣本抗混疊(MSAA),其中,每像素的多個渲染目標樣本由同一遮蔽器評價來著色。通過增加顯示分辨率、功率效率和感知考慮激勵,CPS跨多個像素重復使用相同的遮蔽器評價,同時保持過采樣的可見性。
通過構造,CPS繼承MSAA的一個質量問題,其在實時渲染中通常被忽視。現在從可見性采樣解耦合的遮蔽器評價,可能不再發生在由光柵化的圖元所覆蓋的屏幕空間位置。由于遮蔽通常是在像素中心處評價,部分覆蓋的像素推斷頂點屬性。這可導致各種偽像,特別是在紋理采樣期間。盡管形心插值解決了這個問題,它可能導致其它偽像,該偽像造成瞬時閃爍和顯露的內三角形邊緣。
在所渲染的圖元覆蓋屏幕上的若干粗遮蔽像素時,遮蔽器評價中的減小起作用。類似于標準光柵化流水線,不跨三角形邊界重復使用遮蔽樣本。對于在現代工作量中獲得更多的權重的更小的三角形,遮蔽不會下降到低于每圖元2×2粗略像素,因為遮蔽的最小單位是四邊形。
進一步減少遮蔽率的需要使得遮蔽像素更粗略,要求比最近鄰居采樣更好的可見性樣本的顏色重建。對CPS使用濾波需要評價三角形的邊界周圍的更多的遮蔽四邊形,其放大了現有限制:將插值更多的冗余像素,且屬性外推成為更大的問題。具有CPS的雙線性濾波的初步評價證實了偽像的存在。
附圖說明
能夠從結合以下附圖的以下的具體描述獲得本發明的更好的理解,附圖中:
圖1是具有處理器的計算機系統的實施例的框圖,該處理器具有一個或多個處理器核和圖形處理器;
圖2是處理器的一個實施例的框圖,該處理器具有一個或多個處理器核、集成存儲控制器、以及集成圖形處理器;
圖3是圖形處理器的一個實施例的框圖,該圖形處理器可以是離散的圖形處理單元,或者可以是,與多個處理核集成的圖形處理器;
圖4是用于圖形處理器的圖形處理引擎的實施例的框圖;
圖5是圖形處理器的另一實施例的框圖;
圖6是包括處理元件陣列的線程執行邏輯的框圖;
圖7示出根據實施例的圖形處理器執行單元指令格式;
圖8是圖形處理器的另一實施例的框圖,該圖形處理器包括圖形流水線、媒體流水線、顯示引擎、線程執行邏輯、以及渲染輸出流水線;
圖9A是示出根據實施例的圖形處理器命令格式的框圖;
圖9B是示出根據實施例的圖形處理器命令序列的框圖;
圖10示出根據實施例的用于數據處理系統的示例性圖形軟件架構;
圖11示出架構,在該架構上可以實現本發明的實施例;
圖12A-C示出由本發明實施例使用的不同的遮蔽技術;
圖13示出在本發明的一個實施例中使用的垂直縮放和水平剪切操作;
圖14示出紋理空間和屏幕空間之間的映射的一個實施例;
圖15示出可以如何使用三角形在頂點處計算紋理導數,該三角形位于給定頂點的切面;
圖16示出根據本發明的一個實施例的方法。
具體實施方式
在以下的描述中,出于解釋的目的,闡述了許多具體細節以便提供對下面描述的本發明的實施例的徹底理解。然而,對本領域技術人員來說將明顯的是,可以實施本發明的實施例而不具有這些具體細節中的一些。在其它實例中,公知的結構和設備以框圖的形式示出以避免混淆本發明的實施例的底層原理。
示例性圖形處理器架構和數據類型
概述-圖1-3
圖1是根據實施例的數據處理系統100的框圖。數據處理系統100包括一個或多個處理器102和一個或多個圖形處理器108,并且可以是單處理器臺式機系統、多處理器工作站系統、或具有大量處理器102或處理器核107的服務器系統。在一個實施例中,數據處理系統100是用于移動式、手持式或嵌入式設備中的系統級核片集成電路(SOC)。
數據處理系統100的實施例可以包括或者被包含在基于服務器的游戲平臺、游戲控制臺,包括游戲和媒體控制臺、移動游戲控制臺、手持式游戲控制臺或在線游戲控制臺。在一個實施例中,數據處理系統100是移動電話、智能電話、平板計算設備或移動因特網設備。數據處理系統100還可包括、耦合到或集成在可穿戴設備,例如智能手表可穿戴設備、智能眼鏡設備、增強現實設備或虛擬現實設備。在一個實施例中,數據處理系統100是電視或機頂盒設備,其具有一個或多個處理器102和由一個或多個圖形處理器108生成的圖形界面。
一個或多個處理器102各包括一個或多個處理器核107來處理指令,當指令被執行時,執行用于系統和用戶軟件的操作。在一個實施例中,一個或多個處理器核107中的每一個被配置成處理特定指令集109。指令集109可以便于復雜指令集計算(CISC)、精簡指令集計算(RISC)或通過超長指令字的計算(VLIW)。多個處理器核107均可以處理不同的指令集109,其可以包括指令,以便于其它指令集的仿真。處理器核107還可以包括其它處理設備,例如數字信號處理器(DSP)。
在一個實施例中,處理器102包括高速緩存存儲器104。取決于架構,處理器102能夠具有單個內部高速緩存或多級內部高速緩存。在一個實施例中,高速緩存存儲器在處理器102的各個部件之間共享。在一個實施例中,處理器102還使用外部高速緩存(例如,3級(L3)高速緩存或最后一級高速緩存(LLC))(未示出),其可以使用已知的高速緩存一致性技術在處理器核107之間共享。寄存器文件106還包括在處理器102中,其可以包括不同類型的寄存器,用于存儲不同類型的數據(例如,整數寄存器、浮點寄存器、狀態寄存器和指令指針寄存器)。一些寄存器可以是通用寄存器,而其它寄存器可以專用于處理器102的設計。
處理器102耦合到處理器總線110來在處理器102和系統100中的其它部件之間傳輸數據信號。系統100使用示例性“集線器(hub)”系統架構,包括存儲器控制器集線器116和輸入輸出(I/O)控制器集線器130。存儲器控制器集線器116便于存儲器裝置和系統100的其它部件之間的通信,而I/O控制器集線器(ICH)130經由本地I/O總線提供對I/O設備的連接。
存儲器設備120可以是動態隨機存取存儲器(DRAM)設備、靜態隨機存取存儲器(SRAM)設備、閃速存儲器設備或具有合適的性能以用作處理存儲器的某種其它存儲器設備。存儲器120能夠存儲數據122和指令121,以便在處理器102執行處理時使用。存儲器控制器集線器116還與可選的外部圖形處理器112耦合,外部圖形處理器112可與處理器102中的一個或多個圖形處理器108通信以執行圖形和媒體操作。
ICH 130使得外圍設備能夠經由高速I/O總線連接至存儲器120和處理器102。I/O外圍設備包括音頻控制器146、固件接口128、無線收發器126(例如,Wi-Fi、藍牙)、數據存儲設備124(例如,硬盤驅動器、閃速存儲器等)和用于將遺留的(例如,個人系統2(PS2))設備耦合到系統的遺留I/O控制器。一個或多個通用串行總線(USB)控制器142將輸入設備如鍵盤和鼠標144結合。網絡控制器134也可以耦合到ICH 130。在一個實施例中,高性能網絡控制器(未示出)耦合到處理器總線110。
圖2是處理器200的實施例的框圖,處理器200具有一個或多個處理器核202A-N、集成存儲器控制器214、以及集成圖形處理器208。處理器200可以包括附加的核,其多達并包括由虛線框表示的附加的核202N。核202A-N中的每個包括一個或更多個內部高速緩存單元204A-N。在一個實施例中,每個核還有權訪問一個或多個共享的高速緩存單元206。
內部高速緩存單元204A-N和共享的高速緩存單元206表示處理器200內的高速緩存存儲器一致性。高速緩存存儲器一致性可以包括每個核內的至少一級指令和數據高速緩沖以及一個或更多級共享的中間級高速緩存(例如2級(L2)、3級(L3)、4級(L4))或其它級的高速緩存,其中外部存儲器之前的最高級別的高速緩存被分類為最后一級高速緩存(LLC)。在一個實施例中,高速緩存一致性邏輯保持各個高速緩存單元206和204A-N之間的一致性。
處理器200還可以包括一組一個或多個總線控制器單元216和系統代理210。一個或多個總線控制器單元管理一組外圍總線,例如一個或多個外圍組件互連總線(例如,PCI、PCI Express)。系統代理210提供對于各種處理器組件的管理功能性。在一個實施例中,系統代理210包括一個或更多集成的存儲器控制器214來管理對各種外部存儲器設備(未示出)的訪問。
在一個實施例中,一個或多個核202A-N包括對同時多線程的支持。在這樣的實施例中,系統代理210包括用于在多線程處理期間協調和操作核202A-N的組件。系統代理210可以另外包括功率控制單元(PCU),其包括邏輯和部件以調節核202A-N和圖形處理器208的功率狀態。
處理器200另外包括圖形處理器208來執行圖形處理操作。在一個實施例中,圖形處理器208耦合至該組共享的高速緩存單元206以及系統代理單元210,包括一個或多個集成的存儲器控制器214。在一個實施例中,顯示控制器211與圖形處理器208耦合以驅動對到一個或多個耦合的顯示器的圖形處理器輸出。顯示控制器211可以是單獨的模塊,其經由至少一個互連耦合到圖形處理器,或者可以集成在圖形處理器208或系統代理210內。
在一個實施例中,基于環的互連單元212用來耦合處理器200的內部元件,然而可以使用備選互連單元,諸如點對點互連、開關互連或其它技術,包括本領域公知的技術。在一個實施例中,圖形處理器208經由I/O鏈路213耦合到環互連212。
示例性I/O鏈路213表示多個種類的I/O互連中的至少一個,包括封裝I/O互連,其便于各種處理器組件和高性能嵌入式存儲器模塊218(如eDRAM模塊)之間的通信。在一個實施例中,每個核202-N和圖形處理器208使用嵌入式存儲器模塊218作為共享的末級高速緩存。
在一個實施例中,核202A-N是執行相同的指令集架構的同質核。在另一個實施例中,核202A-N在指令集架構(ISA)方面是異質的,其中,核202A-N中的一個或多個執行第一指令集,而至少一個其它核執行第一指令集的子集或不同的指令集。
處理器200可以是一個或多個襯底的部分或者在一個或多個襯底上實現,該襯底使用任何數量的工藝技術,例如互補金屬氧化物半導體(CMOS)、雙極結型/互補金屬氧化物半導體(BiCMOS)或N型金屬氧化物半導體(NMOS)邏輯。另外,處理器200可以實現在一個或多個芯片上或實現為片上系統(SOC)集成電路,具有所示部件以及其它部件。
圖3是可以是離散的圖形處理單元,或可以是與多個處理核集成的圖形處理器的圖形處理器300的一個實施例的框圖。在一個實施例中,圖形處理器經由到圖形處理器上的寄存器的存儲器映射I/O接口,并經由放置到處理器存儲器的命令而通信。圖形處理器300包括存儲器接口314,用于訪問存儲器。存儲器接口314可以是到本地存儲器、一個或多個內部高速緩存、一個或多個共享的外部高速緩存和/或系統存儲器的接口。
圖形處理器300還包括顯示控制器302來驅動顯示輸出數據到顯示設備320。顯示控制器302包括硬件,用于一個或多個重疊平面,用于顯示和多層視頻組合物或用戶接口元件。在一個實施例中,圖形處理器300包括視頻編解碼器引擎306來將媒體到、從、或在一個或多個媒體編碼格式之間編碼、解碼或轉碼;媒體編碼格式包括但不限于運動圖像專家組(MPEG)格式(例如MPEG-2)、高級視頻編碼(AVC)格式(例如H.264/MPEG-4AVC)、以及,運動圖像和電視工程師協會(SMPTE)421M/VC-1、和聯合圖像專家組(JPEG)格式(例如JPEG和運動JPEG(MJPEG)格式)。
在一個實施例中,圖形處理器300包括塊圖像傳輸(BLIT)引擎304,用于執行二維(2D)光柵化器操作,包括例如位邊界塊傳輸。然而,在一個實施例中,使用圖形處理引擎(GPE)310的一個或所述多個部件執行2D圖形操作。圖形處理引擎310是用于執行圖形操作的計算引擎,包括三維(3D)圖形操作和媒體操作。
GPE 310包括3D流水線312,用于執行3D操作,如使用作用在3D圖元形狀(例如,矩形,三角形等)的處理功能來渲染三維圖像和場景。3D流水線312包括可編程和固定功能的元件,在該元件內執行各種任務和/或產生執行線程到3D/媒體子系統315。盡管3D流水線312可用于執行媒體操作,但GPE 310的實施例還包括媒體流水線316,其專用于執行媒體操作,諸如視頻后處理和圖像增強。
在一個實施例中,媒體流水線316包括固定功能或可編程邏輯單元,以代替或代表視頻編解碼引擎306來執行一個或多個專用媒體操作,如視頻解碼加速、視頻去交織、視頻編碼加速。在一個實施例中,媒體流水線316還包括線程產生單元,產生用于在3D/媒體子系統315執行的線程。所產生的線程執行計算,用于包括在3D/媒體子系統的一個或多個圖形執行單元的媒體操作。
3D/媒體子系統315包括用于執行3D流水線312和媒體流水線316產生的線程的邏輯。在一個實施例中,流水線發送線程執行請求至3D/媒體子系統315,其包括線程分派邏輯來仲裁和分派各種請求至可用的線程執行資源。執行資源包括圖形執行單元的陣列來處理3D和媒體線程。在一個實施例中,3D/媒體子系統315包括一個或多個內部高速緩存,用于線程指令和數據。在一個實施例中,子系統還包括共享存儲器,包括寄存器和可尋址存儲器,以在線程之間共享數據并存儲輸出數據。
3D/媒體處理-圖4
圖4是用于圖形處理器的圖形處理引擎410的實施例的框圖。在一個實施例中,圖形處理引擎(GPE)410是示于圖3的GPE 310的形式。GPE 410包括3D流水線412和媒體流水線416,每個可以不同于或者類似于3D流水線312的實現和圖3的媒體流水線316。
在一個實施例中,GPE 410與命令流傳輸器403耦合,其提供命令流到GPE 3D和媒體流水線412、416。命令流傳輸器403耦合到存儲器,其可以是系統存儲器或者一個或多個內部高速緩存存儲器和共享高速緩存存儲器。命令流傳輸器403從存儲器接收命令,并將命令發送到3D流水線412和/或媒體流水線416。3D和媒體流水線通過經由各自的流水線中的邏輯執行操作或通過將一個或多個執行線程分派到執行單元陣列414來處理命令。在一個實施例中,執行單元陣列414是可縮放的,使得陣列基于GPE 410的目標功率和性能水平而包括可變數量的執行單元。
采樣引擎430耦合到存儲器(例如,高速緩存存儲器或系統存儲器)和執行單元陣列414。在一個實施例中,采樣引擎430提供用于可縮放執行單元陣列414的存儲器存取機制,其允許執行陣列414來從存儲器讀取圖形和媒體數據。在一個實施例中,采樣引擎430包括邏輯以執行媒體的專用圖像采樣操作。
采樣引擎430中的專用媒體采樣邏輯包括去噪/解交織模塊432、運動估計模塊434、以及圖像縮放和濾波模塊436。去噪/解交織模塊432包括邏輯以對已解碼視頻數據執行一個或多個去噪聲或解交織算法。解交織邏輯將交織視頻內容的交替字段合并為單個視頻幀。去噪邏輯從視頻和圖像數據減小或移除數據噪聲。在一個實施例中,去噪邏輯和解交織邏輯是運動自適應的,且使用基于視頻數據中檢測到的運動量的空間或時間濾波。在一個實施例中,去噪/解交織模塊432包括專用移動檢測邏輯(例如,運動估計引擎434內的)。
運動估計引擎434通過對視頻數據執行視頻加速功能(例如運動矢量估計和預測)而對視頻操作提供硬件加速。運動估計引擎確定運動矢量,其描述連續視頻幀之間的圖像數據的變換。在一個實施例中,圖形處理器媒體編解碼器使用視頻運動估計引擎434,以對視頻在宏塊級執行操作,否則使用通用處理器執行可能是計算密集型的。在一個實施例中,運動估計引擎434通常可用于圖形處理器部件以輔助視頻解碼和處理功能,其對于視頻數據內的運動的方向或幅度是敏感的或自適應的。
圖像縮放和濾波模塊436執行圖像處理操作以增強所產生的圖像和視頻的視覺質量。在一個實施例中,縮放和濾波模塊436在提供數據給執行單元陣列414之前在采樣操作期間處理圖像和視頻數據。
在一個實施例中,圖形處理引擎410包括數據端口444,其為圖形子系統提供了附加的機制來訪問存儲器。數據端口444有助于存儲器訪問操作,包括渲染目標寫入、常數緩沖器讀取、臨時存儲空間讀取/寫入、以及媒體表面訪問。在一個實施例中,數據端口444包括高速緩存存儲空間,以將對存儲器的訪問高速緩存。高速緩存存儲器可以是單個數據高速緩存,或者分成多個高速緩存(例如,渲染緩沖器高速緩存、常量緩沖器高速緩存等),用于通過數據端口的存取存儲器的多個子系統。在一個實施例中,在執行單元陣列414中的執行單元上執行的線程與數據端口通過經由數據分布互連而交換消息來通信,該數據分布互連耦合圖形處理引擎410的每個子系統。
執行單元-圖5-7
圖5是圖形處理器的另一實施例的框圖。在一個實施例中,圖形處理器包括環形互連502、流水線前端504、媒體引擎537和圖形核580A-N。環形互連502將圖形處理器耦合到其它處理單元,包括其它圖形處理器或者一個或多個通用處理器核。在一個實施例中,圖形處理器是集成在多核處理系統中的許多處理器之一。
圖形處理器通過環形互連502接收批命令。輸入命令由在流水線前端504中的命令流傳輸器503解釋。圖形處理器包括可縮放執行邏輯,用于經由圖形核580A-N執行3D幾何處理和媒體處理。對于3D幾何處理命令,命令流傳輸器503提供命令至幾何流水線536。對于至少一些媒體處理命令,命令流傳輸器503提供命令給耦合到媒體引擎537的視頻前端534。媒體引擎537包括視頻質量引擎(VQE)530,用于視頻和圖像后處理以及多格式編碼/解碼(MFX)533引擎,以提供硬件加速媒體數據編碼和解碼。幾何流水線536和媒體引擎537每個生成執行線程,用于由至少一個圖形核580A提供的線程執行資源。
圖形處理器包括可縮放的線程執行資源,其特征在于模塊化核580A-N(有時被稱為核片),每個具有多個子核550A-N、560A-N(有時被稱為核子片)。圖形處理器可具有任何數量的圖形核580A至580N。在一個實施例中,圖形處理器包括圖形核580A,其具有至少第一子核550A和第二核子核560A。在另一實施例中,圖形處理器是具有單個子核(例如,550A)的低功率處理器。在一個實施例中,圖形處理器包括多個圖形核580A-N,每個包括一組第一子核550A-N和一組第二子核560A-N。該組第一子核550A-N中的每個子核包括至少第一組執行單元552A-N和媒體/紋理采樣器554A-N。該組第二子核560A-N中的每個子核包括至少第二組執行單元562A-N和采樣器564A-N。在一個實施例中,每個子核550A-N、560A-N共享一組共享資源570A-N。在一個實施例中,共享資源包括共享高速緩存存儲器和像素操作邏輯。其它共享資源也可包括在圖形處理器的各種實施例中。
圖6示出線程執行邏輯600,包括在圖形處理引擎的一個實施例中使用的處理元件的陣列。在一個實施例中,線程執行邏輯600包括像素遮蔽器602、線程分派器604、指令高速緩存606、包括多個執行單元608A-N的可縮放執行單元陣列、采樣器610、數據高速緩存612、以及數據端口614。在一個實施例中,所包括的組件經由鏈接到每個部件的互連結構而互連。線程執行邏輯600包括一個或多個連接,其通過一個或多個指令高速緩存606、數據端口614、采樣器610、以及執行單元陣列608A-N到存儲器,例如系統存儲器或高速緩存存儲器。在一個實施例中,每個執行單元(例如,608A)是單獨的向量處理器,其能夠執行多個同時線程以及并行地處理每個線程的多個數據元素。執行單元陣列608A-N包括任何數量的個別執行單元。
在一個實施例中,執行單元陣列608A-N主要用于執行“遮蔽器”程序。在一個實施例中,陣列608A-N中的執行單元執行指令集,該指令集包括對許多標準3D圖形遮蔽器指令的本地支持,使得遮蔽器程序從圖形庫(例如,Direct 3D和OpenGL)用最小的轉換被執行。執行單元支持頂點和幾何處理(例如,頂點程序、幾何形狀程序、頂點遮蔽器)、像素處理(例如,像素遮蔽器、片段遮蔽器)和通用處理(例如,計算和媒體遮蔽器)。
執行單元陣列608A-N中的每個執行單元在數據元素的陣列上操作。數據元素的數量是“執行大小”,或者對于指令的通道數量。執行通道是執行邏輯單元,用于數據元素訪問、掩蔽和指令內的流控制。通道的數量可獨立于特定圖形處理器的物理ALU和SUP的數量。執行單元608A-N支持整數和浮點數據類型。
執行單元指令集包括單指令多數據(SIMD)指令。各種數據元素可以作為壓縮數據類型而存儲在寄存器中,并且執行單元將基于元素的數據大小而處理各種數據。例如,當工作在256位寬的矢量時,256位向量存儲在寄存器中,且執行單元操作在向量上作為四個獨立的64位壓縮數據元素(四字(QW)大小的數據元素)、八個單獨的32位壓縮數據元素(雙字)大小的數據元素),16個單獨的16位壓縮數據元素(字(W)大小的數據元素),或32個單獨的8位數據元素(字節(B)大小的數據元素)。然而,不同的向量寬度和寄存器大小也是可能的。
一個或多個內部指令高速緩存(例如,606)被包括在線程執行邏輯600中來高速緩存用于執行單元的線程指令。在一個實施例中,包括一個或多個數據高速緩存(例如,612)以在線程執行期間高速緩存線程數據。包括采樣器610以提供用于3D操作的紋理采樣和用于媒體操作的媒體采樣。在一個實施例中,采樣器610包括專用紋理或媒體采樣功能,以在采樣過程中處理紋理或媒體數據,然后將所采樣的數據提供給執行單元。
在執行期間,圖形和媒體流水線發送線程經由線程產生和分派邏輯發起請求到線程執行邏輯600。線程執行邏輯600包括本地線程分派器604,仲裁來自圖形和媒體流水線的線程發起請求,且在一個或多個執行單元608A-N實例化所請求的線程。例如,幾何流水線(例如,圖5的536)分派頂點處理、細分或幾何處理線程到線程執行邏輯600。線程分派器604還可以處理來自執行遮蔽器程序的運行時線程產生請求。
一旦一組幾何對象已被處理,且光柵化成像素數據,像素遮蔽器602被調用以進一步計算輸出信息并使結果寫入到輸出表面(例如,色彩緩沖器、深度緩沖器、模板緩沖器等)。在一個實施例中,像素遮蔽器602計算要被遍及光柵化的對象插值的各種頂點屬性的值。像素遮蔽器602然后執行提供API的像素遮蔽器程序。為執行像素遮蔽器程序,像素遮蔽器602通過線程分派器604分派線程到執行單元(例如,608A)。像素遮蔽器602使用在采樣器610中的紋理采樣邏輯,以訪問存儲在存儲器中的紋理圖的紋理數據。對紋理數據和輸入幾何數據的算術運算計算用于每個幾何片段的色彩數據,或從進一步處理丟棄一個或多個像素。
在一個實施例中,數據端口614提供用于輸出經處理的數據的線程執行邏輯600的存儲器訪問機制到存儲器,用來在圖形處理器輸出流水線上處理。在一個實施例中,數據端口614包括或耦合到一個或多個高速緩存存儲器(例如,數據高速緩存612)用于高速緩存數據,以便經由數據端口的存儲器訪問。
圖7是示出根據實施例的圖形處理器執行單元指令格式的框圖。在一個實施例中,圖形處理器執行單元支持具有多種格式的指令的指令集。實線框圖示通常包括在執行單元指令的各部件,而虛線包括可選的、或者僅包括在指令的子集中的部件。所描述的指令格式圖示了宏指令,因為它們是被提供到執行單元的指令,而不是在對指令執行處理時從指令解碼所導致的微操作。
在一個實施例中,圖形處理器執行單元固有地支持采用128位格式710的指令。64位壓縮指令格式730可用于基于所選擇的指令的一些指令、指令選項、以及操作數的數量。固有128位格式710提供訪問到所有指令選項,而一些選項和操作被限制在64位格式730。可在64位格式730中可用的固有指令隨著實施例變化。在一個實施例中,使用索引字段713的索引值的集合來部分壓縮該指令。執行單元硬件基于索引值參考壓縮表集合,并使用壓縮表輸出以重建采用128位格式710的固有指令。
對每種格式,指令操作數712定義執行單元要執行的操作。執行單元跨每個操作數的多個數據元素并行執行每一個指令。例如,響應于加法指令,執行單元跨表示紋理元素或圖片元素的每個顏色通道執行同時的加法運算。默認地,執行單元跨操作數的所有數據通道執行每一個指令。指令控制字段712允許某些執行選項的控制,例如信道選擇(例如,預測)和數據信道順序(例如,混合)。對于128位指令710,exec(執行)尺寸字段716限制將被并行地執行的數據通道的數量。exec(執行)尺寸字段716不可用于64位壓縮指令格式730。
一些執行單元指令具有多達三個操作數,包括兩個源操作數src0 722、srd1 722,以及一個目的地718。在一個實施例中,執行單元支持雙目標地指令,其中,目的地之一是隱含的。數據操作指令可以具有第三源操作數(例如,SRC2 724),其中指令操作數JJ12確定源操作數的數量。指令的最后的源操作數可以是用該指令傳送的立即的(例如,硬編碼的)值。
在一個實施例中,基于操作數位字段將指令分組為簡化操作數解碼740。對于8位操作數,位4、5和6允許執行單元確定操作數的類型。所示出的精確的操作數分組是示例性的。在一個實施例中,移動和邏輯操作數組742包括數據移動和邏輯指令(例如,mov,cmp)。移動和邏輯組742共享五個最高有效位(MSB),其中移動指令采用形式0000xxxxb(例如,0x0x)且邏輯指令采用形式為0001xxxxb(例如,0x01)。流程控制指令組744(例如,call(調用),jmp)包括采用0010xxxxb形式的指令(例如,0x20)。各種指令組746包括指令的混合,包括同步指令(例如,wait(等待),send(發送)),采用0011xxxxb形式(例如,0x30)。并行數學指令組748包括逐分量算術指令(例如,add,mul),采用0100xxxxb的形式(如0x40)。并行數學組748跨數據通道并行執行算術運算。向量數學組750包括算術指令(例如,dp4),采用0101xxxxb形式(例如,0x50)。向量數學組執行算術運算,例如對向量操作數的點積計算。
圖形流水線-圖8
圖8是圖形處理器的另一實施例的框圖,其包括圖形流水線820、媒體流水線830、顯示引擎840、線程執行邏輯850、以及渲染輸出流水線870。在一個實施例中,圖形處理器是多核處理系統中的圖形處理器,該多核處理系統包括一個或多個通用處理核。圖形處理器被到一個或多個控制寄存器(未示出)的寄存器寫入控制或通過經由環形互連802發出到圖形處理器的命令被控制。環形互連802將圖形處理器耦合到其它處理組件,如其它圖形處理器或通用處理器。來自環形互連的命令被命令流傳輸器803解釋,該命令流傳輸器803將指令提供給圖形流水線820或媒體流水線830的各個部件。
命令流傳輸器803針對頂點提取器805部件的操作,它從存儲器中讀取頂點數據并執行命令流傳輸器803所提供的頂點處理命令。頂點提取器805提供頂點數據給頂點遮蔽器807,其對每個頂點執行坐標空間變換和照亮操作。頂點提取器805和頂點遮蔽器807通過經由線程分派器831將執行線程分派到執行單元852A、852B而執行頂點處理指令。
在一個實施例中,執行單元852A、852B是矢量處理器陣列,其具有指令集來執行圖形和媒體操作。執行單元852A、852B具有附著的L1高速緩存851,其專用于每一陣列或在陣列之間共享。高速緩存可以被配置為數據高速緩存、指令高速緩存或單個高速緩存,其被劃分為在不同的分區包含數據和指令。
在一個實施例中,圖形流水線820包括細分部件以執行3D對象的硬件加速細分。可編程外殼遮蔽器811配置細分操作。可編程域遮蔽器817提供細分輸出的后端評價。細分器813在外殼遮蔽器811的指引下操作并包含專用邏輯來基于粗略幾何模型而生成具體的幾何對象的集合,粗略幾何模型作為輸入提供給圖形流水線820。如果不使用細分,細分組件811、813、817可以被旁路。
完整的幾何對象可由幾何遮蔽器819經由分派給執行單元852A、852B的一個或多個線程處理,或可直接前進到剪切器829。幾何遮蔽器操作在整個幾何對象上,而不是如在圖形流水線的前一級中的頂點或頂點的片。如果細化被禁用,則幾何遮蔽器819接收來自頂點遮蔽器807的輸入。如果細分單元被禁用,則幾何遮蔽器819可由幾何遮蔽器程序編程以執行幾何細分。
在光柵化之前,頂點數據被剪切器829處理,其是固定功能剪切器或具有剪切和幾何遮蔽功能的可編程的剪切器。在一個實施例中,渲染輸出流水線870中的光柵化器873分派像素遮蔽器以將幾何對象轉換為其每個的像素表示。在一個實施例中,像素遮蔽器邏輯被包括在線程執行邏輯850中。
所述圖形引擎具有互連總線、互連結構、或一些其它互連機構,其允許數據和消息在圖形引擎的主要部件之間傳遞。在一個實施例中,執行單元852A、852B以及相關聯的高速緩存851、紋理和媒體采樣器854、以及紋理/采樣器高速緩存858經由數據端口856互連,來執行存儲器訪問并與圖形引擎的渲染輸出流水線組件通信。在一個實施例中,采樣器854、高速緩存851、858和執行單元852A、852B各具有單獨的存儲器訪問路徑。
在一個實施例中,渲染輸出流水線870包含光柵化器和深度測試部件873,其將基于頂點的對象轉換為它們的相關聯的基于像素的表示。在一個實施例中,光柵化器邏輯包括窗口器/掩碼單元,以執行固定功能的三角形和線光柵化。在一個實施例中,相關的渲染和深度緩沖器高速緩存878、879也是可用的。像素操作組件877對數據執行基于像素的操作,盡管在某些情況下,與2D操作相關的像素操作(例如,具有混合的位塊圖像傳輸)由2D引擎841執行,或者在顯示時被顯示控制器843使用覆蓋顯示平面取代。在一個實施例中,共享的L3高速緩存875可用于所有圖形組件,允許共享數據而不使用主系統存儲器。
圖形處理器媒體流水線830包括媒體引擎337和視頻前端834。在一個實施例中,視頻前端834接收來自命令流傳輸器803的流水線命令。然而,在一個實施例中,媒體流水線830包括單獨的命令流傳輸器。視頻前端834處理媒體命令,然后發送命令到媒體引擎837。在一個實施例中,媒體引擎包括線程產生功能以產生線程,以便經由線程分派器831分派給線程執行邏輯850。
在一個實施例中,圖形引擎包括顯示引擎840。在一個實施例中,顯示引擎840在圖形處理器外部且與圖形處理器經由環形互連802或一些其它互連總線或結構而耦合。顯示引擎840包括二維引擎841和顯示控制器843。顯示引擎840包含專用邏輯,能夠獨立于3D流水線而操作。顯示控制器843耦合到顯示設備(未示出),其可以是系統集成顯示設備(如在膝上型計算機中),或通過顯示裝置連接器而附接的外部顯示裝置。
圖形流水線820和媒體流水線830可配置成執行操作,該操作基于多個圖形和媒體編程接口且不針對任何一個應用程序編程接口(API)。在一個實施例中,用于圖形處理器的驅動器軟件將專用于特定圖形或媒體庫的API調用轉換為可由圖形處理器處理的命令。在各個實施例中,提供對以下這些的支持:Khronos組支持的開放圖形庫(OpenGL)和開放計算語言(OpenCL),來自微軟公司的Direct3D庫,或者,在一個實施例中,支持OpenGL和D3D兩者。還可以對開源計算機視覺庫(OpenCV)提供支持。將來的API與兼容3D流水線也會是被支持,如果映射可進行從將來的API的流水線到圖形處理器的流水線。
圖形流水線編程-圖9A-9B
圖9A是示出根據實施例的圖形處理器命令格式的框圖,并且圖9B是示出根據實施例的圖形處理器命令序列的框圖。圖9A中的實線框示出通常包括在圖形命令中的部件,而虛線包括可選的部件,或者僅包括在圖形命令的子集中的部件。圖9A的示例性圖形處理器命令格式900包括數據字段,以識別命令的目標客戶端902、命令操作碼(操作數)904、以及用于該命令的相關數據906。在一些命令中也包括子操作數905和命令大小908。
客戶端902指定圖形設備的客戶端單元,其處理命令數據。在一個實施例中,圖形處理器命令解析器檢查每個命令的客戶端字段,以調節該命令的進一步處理,并將命令數據發送給合適的客戶端單元。在一個實施例中,圖形處理器客戶端單元包括存儲器接口單元、渲染器單元、2D單元、3D單元以及媒體單元。每個客戶端單元具有相應的處理流水線,其處理命令。一旦由客戶端單元接收到命令,客戶端單元讀取操作數904和子操作數905(如果存在的話)來確定要執行的操作。客戶端單元使用命令的數據906字段中的信息來執行命令。對于一些命令,預期明確命令大小908來指定命令的大小。在一個實施例中,命令解析器基于命令操作數自動地確定至少一些命令的大小。在一個實施例中,通過多個雙字來對準命令。
圖9B中的流程圖示出了采樣命令序列910。在一個實施例中,圖形處理器的特征在于數據處理系統的軟件或固件的實施例,使用示出的命令序列的版本來建立、執行并終止一組圖形操作。為了示例性目的示出和描述采樣命令序列,然而實施例并不局限于這些命令或這個命令序列。此外,命令可以被發布為命令序列中的批命令,使得圖形處理器將至少部分地并發的方式處理命令序列。
樣本命令序列910可以開始于流水線沖洗命令912,以使任何活動圖形流水線完成流水線的當前未決命令。在一個實施例中,3D流水線922和媒體流水線924不同時操作。執行流水線沖洗以使活動圖形流水線完成任何未決命令。響應于流水線沖洗,圖形處理器的命令解析器將暫停命令的處理,直到活動繪圖引擎完成未決的操作并且相關的讀取高速緩存無效。可選地,標記為“臟”的渲染器高速緩存中的任何數據可以被沖洗到存儲器。流水線刷新命令912可用于流水線同步或在使圖形處理器處于低功率狀態之前使用。
當命令序列需要圖形處理器在流水線之間明確地切換時,使用流水線選擇命令913。流水線選擇命令913在發出流水線命令之前在執行上下文內僅僅需要一次,除非該上下文要對兩個流水線發出命令。在一個實施例中,在流水線切換之前,立即需要通過流水線選擇開關913的流水線沖洗命令912。
流水線控制命令914配置用于操作的圖形流水線,并且用于編程3D流水線922和媒體流水線924。流水線控制命令914配置用于活動流水線的流水線狀態。在一個實施例中,流水線控制命令914用于流水線同步,并在處理批命令之前從活動流水線內的一個或多個高速緩存存儲器清理數據。
返回緩沖器狀態命令916用于配置相應流水線的一組返回緩沖器,以寫入數據。某些流水線操作需要一個或多個返回緩沖器的分配、選擇、或配置,在處理期間操作將中間數據寫入該一個或多個返回緩沖器。圖形處理器還使用一個或多個返回緩沖器來存儲輸出數據,并執行交叉線程通信。返回緩沖器狀態916包括選擇返回緩沖器的大小和數量以用于一組流水線操作。
命令序列中的其余命令基于用于操作的活動流水線而不同。基于流水線確定920,命令序列被適應于從3D流水線狀態930開始的3D流水線922,或從媒體流水線狀態940開始的媒體流水線924。
用于3D流水線狀態930的命令包括3D狀態設置命令,用于頂點緩沖器狀態、頂點元素狀態、常數色彩狀態、深度緩沖器狀態、和其它狀態變量,其在處理3D圖元命令之前配置。至少部分地基于使用的特定3D API而確定這些命令的值。3D流水線狀態930命令也能夠選擇性地禁止或跳過特定的流水線元件,如果這些元件將不會被使用。
3D圖元932命令用來提交要由3D流水線處理的3D圖元。經由3D圖元932命令傳遞到圖形處理器的命令和相關聯的參數,被轉發到圖形流水線中的頂點取得功能。頂點取得功能使用3D圖元932命令數據,以生成頂點數據結構。頂點數據結構存儲在一個或多個返回緩沖器中。使用3D圖元932命令來通過頂點遮蔽器對3D圖元執行頂點操作。為了處理頂點遮蔽器,3D流水線922將遮蔽器執行線程分派到圖形處理器執行單元。
3D流水線922經由執行934命令或事件而觸發。在一個實施例中,寄存器寫入觸發命令執行。在一個實施例中,通過命令序列中的“go”或“kick”命令而觸發執行。在一個實施例中,使用流水線同步命令觸發命令執行,以通過圖形流水線沖洗命令序列。3D流水線將執行3D圖元的幾何處理。一旦操作完成,所得到的幾何對象被光柵化且像素引擎對所產生的像素著色。還可以對那些操作包括附加命令,以控制像素遮蔽和像素后端操作。
當執行媒體操作時,樣本命令序列910遵循媒體流水線924路徑。通常,對媒體流水線924編程的特定用途和方式取決于媒體或將要執行的計算操作。在媒體解碼期間,特定的媒體解碼操作可以卸載到媒體流水線。媒體流水線也可以被旁路,且媒體解碼可全部或部分地使用由一個或多個通用處理核提供的資源。在一個實施例中,媒體流水線還包括用于通用圖形處理器單元(GPGPU)操作的元件,其中圖形處理器用于使用計算遮蔽器程序執行SIMD向量操作,該計算遮蔽器程序沒有明確地與圖形圖元的渲染相關。
媒體流水線924以與3D流水線922類似的方式配置。在媒體對象命令942之前,一組媒體流水線狀態命令940被分派或放置于命令隊列中。媒體流水線狀態命令940包括數據來配置將用來處理媒體對象的媒體流水線元件。這包括數據來配置媒體流水線內的視頻解碼和視頻編碼邏輯,諸如編碼或解碼格式。媒體流水線狀態命令940還支持對包含一批狀態設置的“間接”狀態元素使用一個或更多個指針。
媒體對象命令942提供指針給媒體對象,用于由媒體流水線處理。媒體對象包括存儲緩沖器,該存儲緩沖器包含要處理的視頻數據。在一個實施例中,所有的媒體流水線狀態必須在發出媒體對象命令942之前有效。一旦流水線狀態被配置且媒體對象命令942被排隊,媒體流水線924經由執行934命令或者等同的執行事件(例如,寄存器寫入)觸發。從媒體流水線924的輸出然后可通過由3D流水線922或媒體流水線924提供的操作而后處理。在一個實施例中,以與媒體操作類似的方式配置和執行GPGPU操作。
圖形軟件架構-圖10
圖10示出根據實施例的數據處理系統的示例性圖形軟件架構。軟件架構包括3D圖形應用程序1010、操作系統1020、以及至少一個處理器1030。處理器1030包括圖形處理器1032和一個或多個通用處理器核1034。圖形應用程序1010和操作系統1020每個在數據處理系統的系統存儲器1050中執行。
在一個實施例中,3D圖形應用程序1010包含一個或多個遮蔽器程序,其包括遮蔽器指令1012。遮蔽器語言指令可以是高級遮蔽器語言,如高級遮蔽器語言(HLSL)或OpenGL遮蔽器語言(GLSL)。應用程序還包括可執行指令1014,其采用適合于由通用處理器核1034執行的機器語言。應用程序還包括由頂點數據定義的圖形對象1016。
操作系統1020可以是從微軟公司的操作系統、專有的類UNIX操作系統、或使用的Linux內核的變體的開源類UNIX操作系統。當使用Direct3D API時,操作系統1020使用前端遮蔽器編譯器1024來將采用HLSL的任何遮蔽器指令1012編譯成低級遮蔽器語言。編譯可以是即時編譯或應用程序可執行共享預編譯。在一個實施例中,在3D圖形應用程序1010的編譯期間,高級遮蔽器被編譯成低級遮蔽器。
用戶模式圖形驅動器1026可包含后端遮蔽器編譯器1027,以將遮蔽器指令1012轉換到硬件特定表示。當使用OpenGL API時,將采用GLSL高級語言的遮蔽器指令1012傳遞到用戶模式圖形驅動器1026,以便編譯。用戶模式圖形驅動器使用操作系統內核模式功能1028來與內核模式圖形驅動器通信。內核模式圖形驅動器1029與圖形處理器1032通信以分派命令和指令。
就本文描述的各種操作或功能的程度,它們可描述或定義為硬件電路、軟件代碼、指令、配置和/或數據。該內容可以實現為硬件邏輯、或者作為直接可執行軟件(“對象”或“可執行”形式)、源代碼、高級遮蔽器代碼,其設計為在圖形引擎上執行,或采用用于特定處理器或圖形核的指令集的低級匯編語言代碼。本文描述的實施例的軟件內容可以通過具有在其上存儲的內容的制品來提供,或經由操作通信接口的方法來提供,其中經由該通信接口發送數據。
非臨時性的機器可讀存儲介質可以使機器執行所描述的功能或操作,并包括以可以由機器訪問的形式(例如,計算設備、電子系統等)存儲信息的任何機制,例如可記錄/不可記錄介質(例如,只讀存儲器(ROM)、隨機存取存儲器(RAM)、磁盤存儲介質、光存儲介質、閃速存儲器設備等)。通信接口包括任何機制,其對接任何硬連線介質、無線介質、光學介質等等,以與另一裝置(例如存儲器總線接口、處理器總線接口、互聯網連接、磁盤控制器等)通信。通過提供配置參數或發送信號以準備通信接口,用以提供描述軟件內容的數據信號,從而配置該通信接口。通信接口可通過發送到該通信接口的一個或多個命令或信號來訪問。
所描述的各種組件可為用于執行所描述的操作或功能的部件。這里描述的每個組件包括軟件、硬件、或它們的組合。所述組件可以實現為軟件模塊、硬件模塊、專用硬件(例如應用專用硬件、專用集成電路(ASIC)、數字信號處理器(DSP)等)、嵌入式控制器、硬連接電路等等。除了這里描述的,可以對本發明的所公開的實施例和實現執行各種修改而不偏離其范圍。因此,本文的說明和示例應以示意性的、而不是限制性的意義來理解。本發明的范圍應當僅參照以下的權利要求來量度。
用于濾波的粗略像素遮蔽的方法和裝置
1.概述
下面描述的本發明的實施例解決了與基于光柵化的圖形流水線中的粗略像素遮蔽(CPS)相關的問題。例如,紋理導數的不匹配可導致細節紋理等級的突然變化。已經確定,該偽像固有地存在于基于光柵化的流水線,但是還沒有顯著地影響圖像質量,該流水線使用每三角形遮蔽器屬性導數。然而,利用粗略的遮蔽率,該影響會產生重大的偽像。
為了解決這個問題,本發明的一個實施例在光柵化之前預先處理網格,對于每個頂點產生所需平滑頂點屬性的唯一的切平面參數化。這些實施例代替了基于切平面參數化的分析遮蔽器導數,其確保所有共享相同網格的相同頂點的三角形將使用相同的導數。
當與確保相鄰圖元評價遮蔽的技術在同一位置(并避免外推)組合使用時,本發明的實施例確保出現完全連續的紋理表面,即使在非常粗略的遮蔽率(例如,4×4或8×8像素塊)時。當以有限數量的多邊形近似光滑表面時,這是有用的。
簡言之,本發明的實施例包括下列技術,其改進了粗略像素遮蔽(CPS)的的質量和/或效率:
(a)實現遮蔽空間的可選的采樣圖案,避免匹配位置處的外推偽像和插值共享三角形邊緣。
(b)高階濾波邏輯實現粗略遮蔽樣本的線性(或更高階)濾波。
(c)由圖像處理中的連續的六邊形柵格激發,下面描述的六邊形實現支持對正交網格的類似的剪切和濾波方案。如下面所討論的,對于粗略遮蔽率,六邊形實現在大多數情況下產生更尖銳外觀的圖像。
(d)遮蔽跨多個圖元重新使用,這可導致具有小的三角形大小的顯著的性能增益。在光柵化之前,可以建立圖元群集以進行高效的片上覆蓋測試和多個圖元的遮蔽屬性插值。
圖11提供圖形流水線的概述,其中可以使用本發明的實施例。在該實施例中,處理器核1100中的執行邏輯發送圖形命令和幾何數據到圖形流水線,在所示的示例中,該圖形流水線包括預處理級1101、頂點遮蔽器級1102、幾何遮蔽器級1103和像素遮蔽器級1105。
如在下面具體討論的那樣,預處理級1101可執行操作,諸如收集每個頂點的鄰接三角形、在三角形上迭代、以及執行每個頂點的線性屬性等式。
簡單地說,頂點遮蔽器1102可以對每個頂點執行坐標空間變換和照亮操作。例如,頂點遮蔽器1102可以將虛擬空間中的每個頂點的3-D位置變換到它出現在屏幕上的2D坐標。頂點遮蔽器可以操作屬性,例如位置、顏色和紋理坐標。在一個實施例中,頂點遮蔽器1102還包括邏輯1105a來執行與本發明的實施例有關的操作,諸如建立每個頂點的切平面等式(參見,例如以下的平滑紋理導數部分)。
幾何遮蔽器1103接收頂點遮蔽器1102的結果(例如,圖元,可能具有鄰接信息),并生成新圖形圖元,例如點、線和三角形。例如,當操作在三角形上時,幾何遮蔽器接收三個頂點作為輸入。幾何遮蔽器然后可產生并隨后發出零個或更多圖元(例如,三角形),其被傳遞給光柵化器/像素遮蔽器級1104。幾何遮蔽器的常見用途包括點的子圖形生成、幾何細分遮蔽、以及遮蔽容積排除。幾何遮蔽器1103還包括邏輯1105b來執行與本發明的實施例有關的操作,例如提供每個頂點的切平面等式像素遮蔽器而沒有插值。
像素遮蔽器級1104分解三角形(或幾何遮蔽器提供的其它)成片段,包括像素塊。例如,取決于實現,片段可以包括2×2像素塊、4×4像素塊、8×8像素塊等等。像素遮蔽器級1104還可以執行深度測試。通過深度測試的片段被寫入到屏幕上,或者可以與現有的像素(例如,在幀緩沖器中)混合。此外,像素遮蔽器1104包括邏輯1105c,用于執行下面所討論的各種操作,包括根據頂點切平面生成結果,并且使用重心坐標來對結果插值,以及其它操作。
也可以使用各種另外的/其它圖形流水線級,并且在這里未示出,以避免模糊本發明的基本原理。
簡要地回到圖11,頂點遮蔽器1102、幾何遮蔽器1103和像素遮蔽器1104(以及流水線的任何其它組件)可利用多個執行單元1111-1118,以執行它們各自的功能。具體地,來自這些組件中的每個的線程可以被調度和分派,以便由調度器/分派單元1106執行。圖形指令可以通過一個或多個執行端口被分派到執行單元1111-1118,如圖所示。一旦執行完成,退出單元119退出指令,在某些情況下將結果經由寫回總線提供回調度/分派單元。
一個或多個后像素遮蔽器級1120也可用實現為進一步處理像素,然后渲染在顯示裝置上。以示例而非限制的方式,這可以包括最終顏色選擇和不由光柵化器/像素遮蔽器執行的其它像素處理操作。
下面的部分提供根據本發明的實施例所執行的操作的附加細節,以便改善粗略像素遮蔽(CPS)。然而,應該注意的是,對于遵守本發明的基本原理,一些在下面所提供的具體細節不是必要的。
2.粗略遮蔽而沒有外推
在一個實施例中,在該部分中描述的操作由像素遮蔽器級1104內的邏輯1105c實現。本發明的一個實施例使用每三角形平面等式來插值用于遮蔽的三角形屬性。隨著多采樣抗混疊(MSAA)的出現,遮蔽位置有可能實際上并沒有被三角形覆蓋,這意味著它被外推。如果實際上覆蓋相同的遮蔽位置的鄰近三角形具有相似的平面等式,則該外推是可以接受的。然而,如果不是這種情況,外推會產生表面上的不連續性。遮蔽器還可以讀取未由三角形覆蓋的紋理坐標,這將造成紋理對輪廓的泄漏問題。雖然這些偽像對MSAA通常是可接受的,但它們對于粗略遮蔽的像素變得更顯著。
對于該討論的第一部分,將假定遮蔽重復使用限制在單個三角形內,如根據當前的CPS定義。如果三角形的邊緣在遮蔽空間采樣,則對粗略遮蔽樣本的線性(或更高階)濾波可以在邊緣工作而不中斷,并且鄰接三角形在公共邊緣的位置使用相同的遮蔽。進行該假設,選擇具有這種性質的遮蔽參數化。已經考慮了以下選項:
(a)對三角形邊緣抓常規網格樣本
(b)剪切常規柵格單元以匹配三角形邊
(c)使用重心參數化。
如圖12a所示,原始的CPS在常規柵格上采樣屏幕空間。每個單元中心從它的重心坐標被插值(并且有時外推)。然后,以遮蔽像素的四邊形評價遮蔽。最后,每個可見性樣本發現4個最近的遮蔽像素,并且使用雙線性插值來對其顏色插值。如圖12a中所示,雙線性插值需要遮蔽沒有被三角形直接覆蓋的粗略像素,放大了外推問題(白色像素中的紅色遮蔽樣本)。
如圖12b中所示,避免屏幕空間遮擋網格的外推偽像的一種方式是將外部遮蔽樣本抓到三角形邊界。該方法可通過將遮蔽樣本的重心坐標夾持到非負域來實現。然而,這樣的方法遇到多個質量問題。首先,鄰近三角形不在同一位置采樣其共享的邊,這導致不連續。其次,由于遮蔽樣本的位置可以改變,可見性樣本中的遮蔽顏色濾波的變得非平凡。
重心參數不在這里具體討論。其主要思想是定義三角形域的遮蔽網格,這保證在三角形各邊上的樣本放置。樣本可被均勻放置投影后的屏幕空間,或者放置在對象空間。一個動機是無建立網格變形方法,例如網格顏色(Mesh Colors)。該概念的一個主要問題是,它不容易控制在三角形域中的實際遮蔽密度,特別是在“瘦的”三角形的情況下。
參照圖12c,在本發明的一個實施例中,遮蔽樣本被移到遮蔽柵格的頂點。這使得樣本數量不變,并且產生的遮蔽相當于完全覆蓋遮蔽像素處的CPS。然而,在一個實施例中,代替直接從三角形頂點的屬性插值,對三角形的每個遮蔽像素執行快速的、小的2D裁剪。該結果部分地覆蓋遮蔽像素,其中覆蓋(有效)的遮蔽范圍為凸多邊形。這個多邊形的頂點是在遮蔽單元的側邊,或在三角形頂點處(其增加了邊緣附近的遮蔽密度)。然而,重要的是要注意,除非在之前使用點采樣,標準CPS還使用三角形邊界之外的附加遮蔽樣本。因此,遮蔽樣本的總數甚至可能小于外推的情況。
評價遮蔽樣本之后,對于每個經裁剪單元它們形成凸多邊形(0或3-7個頂點)。每個可見性樣本的最終顏色然后被計算為遮蔽多邊形的頂點的加權和。在一個實施例中,這些權重使用一般化的重心坐標來確定,其可以很容易地定義在任何凸多邊形上(參見,例如,描述在[Meyer等人2002]中的Wachspress坐標)。這些坐標是表現良好:如果遮蔽像素被完全覆蓋,則其相當于雙線性權重,并且如果遮蔽多邊形是三角形,則結果為正常的重心坐標。
2.1更高階濾波
在一個實施例中,在該部分中描述的操作被像素遮蔽器級1104中的邏輯1105c執行。粗略像素遮蔽(CPS)可以看作是放大問題。三角形的表面遮蔽是幾乎在任何地方都連續的信號(除了能見度產生突然不連續的情況,如輪廓和硬陰影)。當采用粗略遮蔽柵格采樣該信號時,合適的預濾波器可以被應用以避免紋理混疊。在最后的步驟中,將可見性樣本位置處的粗略遮蔽柵格上采樣,這類似于圖像的放大。
因此,當放大級別明顯時,不能期望從簡單的重建濾波器的質量結果,例如最接近或雙線性濾波。作為比較,實現較高階的重建濾波器,其使用圍繞當前遮蔽四邊形的遮蔽樣本的一個附加環,并使用雙立方樣條插值評價每個像素處的經濾波的顏色。
2.2六邊形柵格上的遮蔽
在本部分中描述的操作可以由像素遮蔽器級1104中的邏輯1105c執行。在一個實施例中,粗略遮蔽空間在六邊形上采樣,代替了常規的正交網格。雖然正交網格最適合于表示幀緩沖器,假定當前顯示在這個圖案中安排其像素,其以低的效率采樣2D平面。由于CPS基本上從可見性對遮蔽解耦合,可以使用不同的遮蔽表示柵格,潛在地使先前引入的流水線的所有其它方面不變。
在一個實施例中,粗略遮蔽流水線被修改以遮蔽在六方晶格上。通過在正三角形上的頂點上放置遮蔽頂點,可以構建六方晶格。如圖13中所示,在一個實施例中,這是通過施加垂直縮放和水平剪切操作到利用合適的三角剖分而三角化的正交網格1301以到達六邊形柵格1302來實現。所得到的柵格的Voronoi單元將是六邊形而不是正方形。注意,這種轉化需要采用無理數的縮放,這在實踐中只可以被近似。也可以使用在數值上更加穩定的其它的近似,例如秩-1晶格[Dammertz等人2009]。
在一個實施例中,在粗略遮蔽期間,通過施加該變換的逆變換到可見性樣本,定位最接近的三個遮蔽頂點,如之前實現中那樣定位正交粗略像素。這種粗略像素的圖像在剪切的柵格中為平行四邊形。相對該平行四邊形的較短的對角線測試可見性樣本限定了六邊形柵格中最接近的三角形。
本發明的一個實施例實現六邊形遮蔽的無外推變體。為此,相當于包含當前可見性樣本的最接近的遮蔽三角形而剪切光柵化的三角形。所得到的凸多邊形可以與正交粗略柵格相同地對待,使用廣義重心插值。
2.3在六邊形柵格濾波
在本部分中描述的操作可以由像素遮蔽器級1104內的邏輯1105c執行。在最接近濾波期間,顯現實現在本發明的一個實施例中的網格的六邊形性質。這減少了總體混疊(作為特殊情況,接近垂直的線可以更好地通過常規柵格重建)并提供2D平面的更好的采樣。線性濾波也可以定義在六邊形柵格上:雙線性插值被用于正交的粗略像素內;現在可以跨三角形頂點使用重心插值。不幸的是,線性濾波顯現晶格的三角形邊緣。其不能再生直線常常使最終結果差于正交網格的情況,盡管更密集的采樣。更高階的重建濾波器可以在一個實施例中使用。
以上討論的雙立方重建濾波器將不適合于直接在這種情況下使用,因為它的張量積(分離)表示不能夠利用各向同性和六邊形柵格的十二折疊對稱性。另一方面,還存在其它概括一維B樣條,其過去已設計出并成功應用于重建六邊形采樣數據。通過六邊形Voronoi單元的指示函數的多重卷積,得到六角樣條,并提供任意度的高質量濾波器[Van De Ville等,2004]。三方向盒樣條是盒樣條的特殊類,其特別地適用于六邊形采樣[Condat和Van De Ville,2006]。六邊形樣條和盒樣條兩者保存了六邊形采樣的各向同性和對稱性質。在本發明的一個實施例中,使用了諸如描述于[Condat和Van De Ville[2006]]的第二階盒樣條的有效實現。
利用雙立方濾波的正交采樣與利用第二階盒樣條的六邊形采樣的質量比較相比于線性情況提供了改進的結果。六邊形采樣獲取的圖像總體上更尖銳。其部分地因為第二階盒樣條導致4度多項式,而雙立方濾波導致6度。跟雙立方的情況為16個相比,參與重構濾波的著色點的數量為14個。
3.用于粗略遮蔽的紋理濾波
實際遮蔽器幾乎始終依賴于紋理信息。紋理數據通常假設為連續信號(其可以采樣的離散形式存儲),當在規則柵格遮蔽時其需要被預濾波以避免混疊。預濾波應當從信號中移除在采樣處理后無法被重構的頻率。在規則遮蔽期間,每個采樣位置表示像素(或具有超采樣反混疊的更精細的子樣本)。當利用CPS時,粗略遮蔽柵格可在每像素頻率上被重采樣,其表示附加的信號處理步驟。實現表明,紋理濾波在利用粗略遮蔽分辨率時需要特定考慮。有趣的是,標準光柵化流水線的紋理濾波實現存在可接受的多個缺點,并且總體上在規則光柵化期間不被注意。然而,這些缺點中的一些利用粗略遮蔽容易變得明顯。
3.1紋理濾波寬度
紋理濾波器的維度基于紋理空間中遮蔽像素的估計的足跡來選擇,其可近似于橢圓[Heckbert,1989]。該橢圓的維度和方向取決于u,v紋理坐標相對于x,y屏幕空間位置的偏導數。高質量紋理濾波器,諸如Heckbert提出的橢圓加權平均(EWA)算法,利用對齊于其橢圓的平滑各向異性重構濾波計算紋理信號的卷積。實時應用通過預先計算紋理的多個LoD等級而降低濾波區域中紋理像素的數量將其存儲在MIP金字塔[Williams,1983]。
在一個實施例中,紋理濾波的硬件實現選擇對應于紋理空間中遮蔽像素的直徑的濾波寬度。其為出現于當前OpenGL和Direct3D規范的設計決定,其導致更尖銳紋理外觀,但實際上遭受了混疊偽像。為理解其原因,考慮渲染具有棋盤紋理的屏幕對齊的四邊形,其中黑色或白色方形的大小精確匹配像素大小。當其四邊形的紋理像素剛好對齊于遮蔽像素時,采樣圖像精確匹配紋理。然而,當被轉換為沿屏幕的半個遮蔽像素時,像素足跡中的濾波導致均勻的灰色。
從信號處理的角度,標準光柵化流水線選擇違反奈奎斯特頻率限制的紋理濾波寬度。理想情況下,像素應當整合其半徑1的至少兩倍(以利用至少兩倍的頻率采樣信號)。我們認為其為用于紋理銳化的設計決定,因為實際紋理不會呈現我們先前的棋盤示例的極限頻率。然而,在粗略遮蔽的實驗中,嚴重的紋理混疊可產生于利用各向異性濾波的Direct3D定義時。為減輕該情況,本發明的一個實施例利用因子2執行紋理梯度偏置,其消除多數混疊但導致更模糊的紋理外觀。
3.2濾波重疊
即使所有遮蔽樣本置于三角形內,紋理濾波器仍將覆蓋三角形外的紋理空間的部分。其為內部邊所期望的行為,因為其可幫助保存在表面上的遮蔽的平滑性。另一方面,可導致在紋理空間的輪廓邊緣上的紋理泄漏問題。降低CPS的遮蔽率需要更大的紋理濾波器(因此更高的MIP級別),其表示所有紋理泄漏偽影變得更加顯著。
紋理圖集特別受這些缺陷的影響,其難以避免跨紋理縫隙的顏色泄漏。其建議依賴粗略遮蔽的未來流水線在可能時應當避免利用紋理圖集。免設置紋理格式的最新研究,諸如Ptex[Burley和Lacewell,2008],以及無綁定紋理的引入提供了更好的選項。此時,對紋理圖集的準備應當謹慎,以使泄漏不會利用實際遮蔽率導致可見問題。
3.3紋理導數的問題
避免本文描述的外推的工作之后的一個動機在于保存在圖元中遮蔽的連續性。在規則光柵化中,渲染流水線使用外推屬性僅用于完成遮蔽四邊形。外推“助手像素”從不獲得實際寫入的幀緩沖器,并且其最初目的在于計算紋理采樣的有限差(唯一的例外是具有樣本級遮蔽器執行的MSAA)。然而,CPS主動使用該像素以重構可見性樣本的顏色。如果鄰接的三角形不共享相同的平面等式,其導致跨邊的遮蔽的不連續性。應用于一個實施例的剪切保證遮蔽在邊的相同的位置被估計。由于遮蔽屬性僅依賴于邊的兩個頂點,其將匹配兩個圖元。
當估計相對于具有外推的CPS的該解決方案時,遮蔽可仍表現不連續,顯現三角形邊界。問題在于存在不僅依賴于插值頂點屬性而且依賴于其屏幕空間導數的遮蔽組件。紋理采樣是最佳示例,并且呈現于幾乎所有實際遮蔽情形,問題更接近地被調查。
沒有進行先前措施來匹配跨鄰接的三角形中的紋理差;每個三角形被獨立設置。結果,跨三角形的紋理導數中存在較小差,導致出現失配紋理。盡管在多數情況下在每像素遮蔽中不被注意,減少遮蔽分辨率使其成為顯著問題。原因在于,紋理LoD選擇需要補償:例如通過以因數2降低遮蔽柵格的分辨率,因此紋理導數需要被增加。紋理導數之間的先前失配以相同的因子倍增。實際上,得到的缺陷可能較為嚴重以使無外推CPS的優點更不被注意。
在如下分析中,目標在于標識保證不僅頂點屬性,而且匹配于粗略遮蔽位置的其第一導數的技術。該分析限于紋理導數,并且假設這些導數可被解析地估計。更一般的解決方案將以有限差值匹配的方式來插值紋理屬性,然而,其更加困難并且還將改變表面的外觀(紋理坐標將會移動)。首先,紋理導數問題的正式定義被提供。然后,引入了利用平滑表面工作的解決方案的一個實施例。
考慮說明于圖14的兩個鄰接的三角形,A和B。紋理坐標的一個分量u為標量屬性,定義在四個不同的頂點,u0、u1、u2和u3。在光柵化期間,頂點被投影至屏幕空間,而u在屏幕中被感知正確地插值:值l/w和u/w被線性插值,其中w為同質坐標。對于兩種三角形,該插值可通過求解二維平面等式來執行:
然后u可通過求解有理表達式被感知正確地插值:
兩個平面等式對在共享邊上彼此“相交”,得到沿該邊的同一頂點屬性。然而,屬性導數還取決于另兩個頂點。例如,偏導數可寫成:
解析導數的詳細求導可出現于[Munkberg和Clarberg,2010]。顯然,兩個三角形的導數估計在一般情況下不匹配:
3.4平滑紋理導數
用于求解平滑表面問題的本發明的一個實施例從這些三角形僅為渲染表面的粗略的分段線性逼近中得到激勵。因此,可利用平滑表面導數替換“平面”紋理導數。該導數在頂點或邊上沒有突然的不連續性。遮蔽典型地利用每頂點遮蔽法線替換三角形法線,其然后跨三角形中插值,得到細分表面的平滑照明。利用紋理導數可進行相似處理。
重新參照上述等式,對每個頂點,可建立平面等式,用于包含該頂點的每個三角形,并且對給定屏幕空間位置求解。然后頂點的紋理導數可為解的均值,并且在三角形中,每頂點導數可使用重心坐標插值。該技術保證三角形上的連續遮蔽。另一方面,平面等式的數量將隨頂點的價而線性地增長,并且該解決方案在光柵化流水線中絕對地不切實際(重要的是記住平面等式無法被求平均,因為其表示求有理多項式的分子和分母的均值)。相反,基于每頂點切平面的不同的方法應用于本發明的一個實施例。
第一,假設單個三角形表示平滑表面。該三角形的每個頂點定義自身的切平面,不一定與三角形共面。在該三角形光柵化期間,紋理導數可被替換以更好地逼近平滑表面。在頂點vi附近,導數被計算,如同三角形位于跨距為的切平面(見圖15左側)。特別地,在圖15左側部分,紋理導數在頂點1500利用位于給定頂點的切平面的三角形1501計算。該切平面的每個點可利用兩個標量ti,bi參數化:
三角形的另兩個頂點可投影至相同的切平面,并且利用其t-b參數,可對每個頂點屬性建立線性等式:
該想法在屏幕空間中具有l/w、t/w和b/w的線性平面等式,類似于重心坐標的插值。例如,如下可對每個頂點的切平面求解:
由此,頂點切平面中的修改的紋理導數可確定為:
其中
在三角形內的任意點,紋理導數可利用三個頂點的平面等式獨立確定。然后利用重心坐標對其插值。該技術需要用于切平面(t/w,b/w,l/w)的每頂點的另外三個平面等式,并且一個平面等式用于每個屬性。
注意,在該實施例中,已引入對可由包含相同頂點的所有三角形共享的每個頂點的唯一參數化。該技術可利用簡單預處理步驟而擴展至三角形網絡中的平滑導數。在光柵化之前,迭代可在所有頂點執行,并且每個鄰接三角形投影至其切向基。對于每個頂點屬性,其導致每三角形的線性平面等式。在圖15的右側部分,例如,“平均”頂點屬性等式可通過投影所有鄰接三角形至相同的切平面,并利用切線和副法線作為新的基而導出。由于這些等式是線性的,可確定均值平面等式,其逼近頂點vi的附近的屬性的行為:
圖16說明根據本發明一個實施例的方法。盡管方法可根據以上提出的特定細節和架構實現,但其不限于某些所述特定細節。
如所說明的,方法包括一組預處理操作1601-1603和一組光柵化操作1604-1606。首先轉到預處理操作,在1601,對每個頂點,收集鄰接三角形。在1602,方法在鄰居的三角形中迭代并將其投影至切平面(例如,以上討論的實施例的)。在1603,建立線性屬性等式并對上述示例的每個頂點(例如,ui(bi,ti))求平均。在一個實施例,預處理操作在說明于圖11的圖形流水線的預處理級1101執行。
參見方法的光柵化部分,在1604,頂點遮蔽器1102中的邏輯1105a建立平面等式(例如,計劃等式用于ti/w,bi/w,l/w)。在1605,幾何遮蔽器1103中的邏輯1105b使每頂點平面等式對像素遮蔽器可見1104,而不需要插值。在1606,像素遮蔽器1104中的邏輯1105c基于三個頂點切平面確定修改的紋理導數,并且利用重心坐標對結果插值。例如,在一個實施例,像素遮蔽器求解:
其中
3.4.1輪廓
上述逼近在每頂點切平面變成背向的情況下可能不工作,該情況發生在輪廓邊緣附近。預處理步驟可被修改以消除該切平面,可使用原始的每三角形導數計算。
實現了預處理步驟的取決于查看的變體。該方法的一個缺點在于預處理需要在渲染每幀之前完成。想法為基于其方向對鄰接三角形的影響進行加權:隨著三角形更接近輪廓(例如通過相對于每頂點觀察方向測試其法線),其應當以更小的因數影響切平面和線性屬性等式的計算。該方法保證切平面不會變成背向。
如果上述預處理的代價過高,可將相似的每頂點混合用于平滑紋理導數和原始三角形的導數之間。由于切平面接近輪廓,導數重新變成原始值。其表示,在輪廓紋理中平滑性不能得以保證。
3.4.2混疊
上述技術保證連續紋理導數,但還可針對混疊進行改進。可修改技術以保證導數從不會小于原始不連續版本。
4.聚類CPS
當渲染復雜場景時,光柵化流水線通常停止執行比幀緩沖器分辨率顯著更多的像素遮蔽器。理想地,計算資源應當僅花費在可見片段上;考慮為冗余的以上任何像素遮蔽器。遮蔽冗余的主要原因是:
-深度復雜度;
-部分覆蓋像素,其由多個圖元遮蔽;以及
-基于四邊形的遮蔽調度。
盡管CPS的某些實施例目標在于顯著降低遮蔽成本,上述因素利用緊密細分的復雜幾何形狀限制其效率。硬件調度遮蔽器執行的方式特別重要。為計算紋理LoD選擇的有限差值,像素遮蔽器可執行為2×2四邊形。因此,其通常發生在實際未由當前圖元覆蓋的像素也需要被遮蔽的情況下。該冗余的開銷隨光柵化圖元的大小的減少而增長。Fatahalian等提出了關于微多邊形渲染器的效果的全面研究[Fatahalian等,2009][Fatahalian等,2010]。CPS的問題在于,通過增加遮蔽像素的大小,某些細分工作生成與微多邊形遮蔽相似的開銷。部分覆蓋和未覆蓋的遮蔽四邊形的數量在使用濾波時進一步增加。該問題已在一個實施例中利用聚類圖元遮蔽得以解決。
在渲染期間跨多個圖元重新使用遮蔽為關鍵動機。光柵化使用的屏幕空間坐標已提供了共享參數;只有屬于連續表面的圖元需要被標識。聚類操作在光柵化級之前執行,其在圖元中重新使用相同的CPS柵格,這些圖元:(1)與相同頂點屬性共享邊;以及(2)具有相同的朝向。基本原理非常類似于四邊形片段合并,如Fatahalian等描述的那樣[2010]。盡管其流水線特別設計用于微多邊形柵格,其中劃片級可隱含地通過頂點索引提供鄰接信息,但聚類可從任意工作中推測性地建立。為此,定義小圖元緩沖器,其可保存N個最近收集的圖元并查找共享的邊。如果兩個圖元的邊從像素遮蔽器的視點無法區分(例如,呈現于像素遮蔽器輸入聲明的頂點屬性是相同的),則其屬于相同的聚類。遮蔽架構被假設估計小片(至少2×2粗略像素)的CPS四邊形。作為下一步驟,修改層次光柵化算法,以使其在遮蔽之前對每個CPS四邊形處理相同的聚類中的所有三角形。CPS四邊形中所有三角形的覆蓋的方式被完全估計,并且其遮蔽屬性可在任何位置被插值。這給我們帶來了新的屬性插值方法,其設法擴展四邊形片段合并至CPS的概念,同時降低彈出偽像。對于每個覆蓋樣本,片段合并方法的微小擴展將查找覆蓋粗略像素中心的聚類中的三角形。如果粗略像素中心未由任何三角形覆蓋(其可能容易發生在部分覆蓋的四邊形),規范方法可從其它粗略像素中選擇代表性三角形([Fatahalian等,2010])。其可導致值得注意的彈出偽像:如果不同的三角形在下一幀覆蓋粗略樣本位置,粗略像素中的所有樣本將突然外推不同的三角形。
本發明的一個實施例考慮群集中的所有三角形,該群集具有粗略像素中的覆蓋,而不僅是實際覆蓋CPS樣本的三角形的那些。在不聚類時,每個三角形將在相同的遮蔽位置得以外推,然后在覆蓋的可見性樣本分布其遮蔽顏色。現在,遮蔽在每個粗略像素被精確計算一次,因此代替利用單個三角形來遮蔽所有可見性樣本,可計算在CPS位置外推的頂點屬性的加權平均。權重與粗略像素中的給定三角形覆蓋的可見性樣本成比例。只要群集保持相同的三角形,并且其覆蓋連續地變化,該插值方法就會產生連續變化的頂點屬性。
由于粗略像素中的頂點屬性的“MSAA解析”被執行,可考慮該方法。注意,如果遮蔽器近似為遮蔽器屬性的線性函數,則這些技術近似匹配遮蔽器輸出的均值(遮蔽后對粗略像素的MSAA解析)。
聚類CPS已實現在Rasty功能流水線仿真器中。該實現僅聚焦于聚類的基本思想并且不解決該方法引入的時間偽像。
本發明的實施例可包括多個步驟,其已在上文描述。這些步驟可實施于機器可執行指令,其可用于使通用或專用處理器執行這些步驟。可選地,這些步驟可由包含用于執行步驟的硬連線邏輯的特定硬件組件,或通過編程計算機組件和定制硬件組件的任何組合執行。
如本文所描述的,指令可指代硬件的特定配置,諸如配置為執行特定操作或具有預定功能性的專用集成電路(ASIC),或存儲于實施于非暫時性計算機可讀介質的存儲器的軟件指令。因此,示出于附圖的技術可利用存儲并執行于一個或多個電子設備(例如,終端站、網絡元件等)的代碼和數據實現。這樣的電子設備利用計算機機器可讀媒體存儲和傳輸(在內部和/或與網絡中的其它電子設備)代碼和數據,諸如非暫時性計算機機器可讀存儲媒體(例如,磁盤;光盤;隨機存取存儲器;只讀存儲器;閃速存儲設備;相變存儲器)和暫時性計算機機器可讀通信媒體(例如,電、光、聲音或其它形式的傳播信號-諸如載波、紅外信號、數字信號等)。此外,這樣的電子設備典型地包括一個或多個處理器的集合,其耦合于一個或多個其它組件,諸如一個或多個存儲設備(非暫時性機器可讀存儲媒體)、用戶輸入/輸出設備(例如,鍵盤、觸摸屏和/或顯示器)以及網絡連接。處理器集合與其它組件的耦合典型地通過一個或多個總線和橋(也稱為總線控制器)。承載網絡業務的存儲設備和信號分別表示一個或多個機器可讀存儲媒體和機器可讀通信媒體。因此,給定電子設備的存儲設備典型地存儲代碼和/或數據,用于執行于該電子設備的一個或多個處理器的集合。當然,本發明的實施例的一個或多個部分可利用軟件、固件和/或硬件的不同組合實現。在該詳細描述中,為說明的目的,多個特定細節被提出以提供本發明的全面理解。然而,對本領域技術人員顯而易見的是,本發明可在沒有這些特定細節中的一些的情況下實現。在特定實例中,公知結構和功能未詳細描述,以避免混淆本發明的主題。因此,本發明的范圍和精神應當根據隨后的權利要求來判斷。