技術(shù)領(lǐng)域
本發(fā)明總體涉及計算機處理器領(lǐng)域。更具體地,本發(fā)明涉及用于基于當前狀態(tài)來更新著色器程序的裝置和方法。
相關(guān)技術(shù)描述
在圖形應用編程接口(API)(諸如,OpenGL或DirectX)中,可能存在與固定功能單元和著色程序(稱為“著色器”)相關(guān)聯(lián)的顯著的狀態(tài)。具體而言,在由此狀態(tài)定義的環(huán)境中的圖形處理單元(GPU)上執(zhí)行著色器。由于圖形API描述抽象的機器模型,因此,總是存在將此模型狀態(tài)轉(zhuǎn)換至當前硬件架構(gòu)的某種形式的轉(zhuǎn)換。由此,狀態(tài)可描述固定功能單元的功能,所述固定功能單元典型地通過執(zhí)行著色器程序在現(xiàn)有硬件中進行仿真。例如,在一些實現(xiàn)方式中,多個執(zhí)行單元(EU)可執(zhí)行處于特定狀態(tài)的著色器程序來仿真固定功能單元的圖形功能。
在大多數(shù)情況下,由于硬件設計,此類仿真是必需的,并且通過在由應用提供的著色器程序中添加或修改的指令來完成此類仿真。此類設計導致以下情形:著色器程序可能依賴于當前狀態(tài),并且此類狀態(tài)的改變要求重新編譯著色器代碼。此類狀態(tài)可稱為“非正交狀態(tài)”(“NOS”)。
由于著色器程序依賴于NOS,因此在一些實現(xiàn)方式中,在圖像幀渲染期間可重新編譯著色器以反映當前的NOS。當編譯過程是復雜且耗時的時候,這可能導致渲染過程停止以及動畫的參差不齊(jagging)。為了防止此類情形,對于大多數(shù)流行的NOS設置,可將著色器編譯為不同的版本,隨后進行高速緩存。這減少了著色器重新編譯的量,但是未完全消除著色器重新編譯,因為存在過多的NOS排列。它也引入了與以下各項相關(guān)聯(lián)的成本:存儲所編譯的著色器的附加副本所需的附加存儲器;以及編譯這些副本所需的附加功耗。
附圖說明
結(jié)合以下附圖,從以下具體實施方式中可獲得對本發(fā)明更好的理解,其中:
圖1是具有處理器的計算機系統(tǒng)的實施例的框圖,所述處理器具有一個或多個處理器核以及圖形處理器;
圖2是處理器的一個實施例的框圖,所述處理器具有一個或多個處理器核、集成存儲器控制器以及集成圖形處理器;
圖3是圖形處理器的一個實施例的框圖,所述圖形處理器可以是分立的圖形處理單元,或可以是與多個處理核集成的圖形處理器;
圖4是用于圖形處理器的圖形處理引擎的實施例的框圖;
圖5是圖形處理器的另一實施例的框圖;
圖6是包括處理元件的陣列的線程執(zhí)行邏輯的框圖;
圖7示出根據(jù)實施例的圖形處理器執(zhí)行單元指令格式;
圖8是圖形處理器的另一實施例的框圖,所述圖形處理器包括圖形流水線、媒體流水線、顯示引擎、線程執(zhí)行邏輯以及渲染輸出流水線。
圖9A是示出根據(jù)實施例的圖形處理器命令格式的框圖;
圖9B是示出根據(jù)實施例的圖形處理器命令序列的框圖;
圖10示出根據(jù)實施例的用于數(shù)據(jù)處理系統(tǒng)的示例性圖形軟件架構(gòu);
圖11示出用于基于當前狀態(tài)來更新著色器程序的架構(gòu)的一個實施例;
圖12示出用于基于當前狀態(tài)來更新著色器程序的架構(gòu)的附加細節(jié);以及
圖13示出用于基于當前狀態(tài)來更新著色器程序的方法的一個實施例。
具體實施方式
在下面的描述中,為了進行解釋,闡述了眾多具體細節(jié)以便提供對以下描述的本發(fā)明的多個實施例的透徹理解。然而,對本領(lǐng)域技術(shù)人員顯而易見的是,可以在沒有這些具體細節(jié)中的一些細節(jié)的情況下實施本發(fā)明的各實施例。在其他實例中,公知的結(jié)構(gòu)和設備以框圖形式示出,以避免使本發(fā)明的多個實施例的基本原理模糊。
示例性圖形處理器架構(gòu)和數(shù)據(jù)類型
概述——圖1-3
圖1是根據(jù)實施例的數(shù)據(jù)處理系統(tǒng)100的框圖。數(shù)據(jù)處理系統(tǒng)100包括一個或多個處理器102以及一個或多個圖形處理器108,并且可以是單處理器臺式系統(tǒng)、多核工作站系統(tǒng)或具有大量處理器102或處理器核107的服務器系統(tǒng)。在一個實施例中,數(shù)據(jù)處理系統(tǒng)100是在移動設備、手持式設備或嵌入式設備中使用的片上系統(tǒng)集成電路(SOC)。
數(shù)據(jù)處理系統(tǒng)100的實施例可包括或可并入以下各項內(nèi):基于服務器的游戲平臺、游戲控制臺(包括游戲和媒體控制臺、移動游戲控制臺、手持式游戲控制臺或在線游戲控制臺)。在一個實施例中,數(shù)據(jù)處理系統(tǒng)100是移動電話、智能電話、平板計算設備或移動互聯(lián)網(wǎng)設備。數(shù)據(jù)處理系統(tǒng)100也可包括可穿戴設備,可與可穿戴設備耦合或可集成在可穿戴設備內(nèi),所述可穿戴設備諸如,智能手表可穿戴設備、智能眼鏡設備、增強現(xiàn)實設備或虛擬現(xiàn)實設備。在一個實施例中,數(shù)據(jù)處理系統(tǒng)100是電視機或機頂盒設備,所述電視機或機頂盒設備具有一個或多個處理器102以及由一個或多個圖形處理器108生成的圖形界面。
一個或多個處理器102各自都包括一個或多個處理器核107,所述一個或多個處理器核107用于處理指令,所述指令當被執(zhí)行時,執(zhí)行用于系統(tǒng)和用戶軟件的操作。在一個實施例中,一個或多個處理器核107中的每一個都配置成處理特定的指令集109。指令集109可促進復雜指令集計算(CISC)、精簡指令集計算(RISC)或經(jīng)由超長指令字(VLIW)的計算。多個處理器核107各自都可處理不同的指令集109,不同的指令集109可包括用于促進對其他指令集的仿真的指令。處理器核107也可包括其他處理設備,諸如,數(shù)字信號處理器(DSP)。
在一個實施例中,處理器102包括高速緩存存儲器104。取決于架構(gòu),處理器102可具有單個內(nèi)部高速緩存或多級內(nèi)部高速緩存。在一個實施例中,高速緩存存儲器在處理器102的各種組件之間共享。在一個實施例中,處理器102也使用利用高速緩存一致性技術(shù)而可在處理器核107之間共享的外部高速緩存(例如,第3級(L3)高速緩存或末級高速緩存(LLC))(未示出)。寄存器組106附加地包括在處理器102中,處理器102可包括用于存儲不同類型數(shù)據(jù)的不同類型的寄存器(例如,整數(shù)寄存器、浮點寄存器、狀態(tài)寄存器以及指令指針寄存器)。一些寄存器可以是通用寄存器,而其他寄存器可專用于處理器102的設計。
處理器102耦合至處理器總線110以在處理器102與系統(tǒng)100中的其他組件之間傳輸數(shù)據(jù)信號。系統(tǒng)100使用示例性“中樞”系統(tǒng)架構(gòu),所述示例性“中樞”系統(tǒng)架構(gòu)包括存儲器控制器中樞116和輸入輸出(I/O)控制器中樞130。存儲器控制器中樞116促進存儲器設備與系統(tǒng)100的其他組件之間的通信,而I/O控制器中樞(ICH)130提供經(jīng)由本地I/O總線至I/O設備的連接。
存儲器設備120可以是動態(tài)隨機存取存儲器(DRAM)設備、靜態(tài)隨機存取存儲器(SRAM)設備、閃存設備或具有適當?shù)男阅芤猿洚斶M程存儲器的某個其他存儲器設備。存儲器120可存儲用于在處理器102執(zhí)行進程時使用的數(shù)據(jù)122和指令121。存儲器控制器中樞116也與任選的外部圖形處理器112耦合,所述任選的外部圖形處理器112可與處理器120中的一個或多個圖形處理器108通信以執(zhí)行圖形和媒體操作。
ICH 130使外圍設備能夠經(jīng)由高速I/O總線而連接至存儲器120和處理器102。IO外圍設備包括音頻控制器146、固件接口128、無線收發(fā)機126(例如,Wi-Fi、藍牙)、數(shù)據(jù)存儲設備124(例如,硬盤驅(qū)動器、閃存等)以及用于將舊式(legacy)(例如,個人系統(tǒng)2(PS/2))設備耦合至系統(tǒng)的舊式I/O控制器。一個或多個通用串行總線(USB)控制器142連接輸入設備(諸如,鍵盤和鼠標144的組合)。網(wǎng)絡控制器134也可耦合至ICH 130。在一個實施例中,高性能網(wǎng)絡控制器(未示出)耦合至處理器總線110。
圖2是處理器200的實施例的框圖,所述處理器具有一個或多個處理器核202A-N,集成存儲器控制器214以及集成圖形處理器208。處理器200可包括附加的核,所述附加的核多至由虛線框標識的附加核202N并包括由虛線框標識的附加核202N。核202A-N中的每一個都包括一個或多個內(nèi)部高速緩存單元204A-N。在一個實施例中,每一個核都具有對一個或多個共享高速緩存單元206的訪問權(quán)。
內(nèi)部高速緩存單元204A-N和共享高速緩存單元206表示處理器200內(nèi)的高速緩存存儲器層次結(jié)構(gòu)。高速緩存存儲器層次結(jié)構(gòu)可包括每一個核內(nèi)的至少一個層級的指令和數(shù)據(jù)高速緩存以及一個或多個層級的共享的中間級高速緩存(諸如,第2級(L2)、第3級(L3)、第4級(L4)或其他層級高速緩存),其中,在外部存儲器之前的最高層級的高速緩存被分類為末級高速緩存(LLC)。在一個實施例中,高速緩存一致性邏輯維持各種高速緩存單元206與204A-N之間的一致性。
處理器200也可包括一組一個或多個總線控制器單元126和系統(tǒng)代理210。一個或多個總線控制器單元管理一組外圍總線(諸如,一個或多個外圍組件互連總線(例如,PCI、PCI Express))。系統(tǒng)代理210提供用于各種處理器組件的管理功能。在一個實施例中,系統(tǒng)代理210包括用于管理對各種外部存儲器設備(未示出)的訪問的一個或多個集成存儲器控制器214。
在一些實施例中,核202A-N中的一個或多個包括對同時的多線程操作的支持。在此類實施例中,系統(tǒng)代理210包括用于在多線程處理期間協(xié)調(diào)并操作核202A-N的組件。系統(tǒng)代理210可附加地包括功率控制單元(PCU),所述PCU包括用于調(diào)節(jié)核202A-N和圖形核208的功率狀態(tài)的邏輯和組件。
處理器200附加地包括用于執(zhí)行圖形處理操作的圖形處理器208。在一個實施例中,圖形處理器208與一組共享高速緩存單元206以及系統(tǒng)代理單元210耦合,系統(tǒng)代理單元210包括一個或多個集成存儲器控制器214。在一個實施例中,顯示控制器211與圖形處理器208耦合,以將圖形處理器輸出驅(qū)動至一個或多個所耦合的設備。顯示控制器211可以是經(jīng)由至少一個互連而與圖形處理器耦合的分開的模塊,或者可以集成在圖形處理器208或系統(tǒng)代理210內(nèi)。
在一個實施例中,使用基于環(huán)的互連單元212來耦合處理器200的多個內(nèi)部組件,然而可使用替代的互連單元,諸如,點對點互連、交換互連或其他技術(shù)(包括本領(lǐng)域中公知的技術(shù))。在一個實施例中,圖形處理器208經(jīng)由I/O鏈路213來與環(huán)形互連212耦合。
示例性I/O鏈路213表示各種各樣的I/O互連中的至少一者,所述I/O互連包括促進各種處理器組件與高性能嵌入式存儲器模塊218(諸如,eDRAM)模塊之間的通信的封裝上I/O互連。在一個實施例中,核202-N和圖形處理器208中的每一者都將嵌入式存儲器模塊218用作共享的末級高速緩存。
在一個實施例中,核202A-N是執(zhí)行相同的指令集架構(gòu)的同構(gòu)核。在另一實施例中,核202A-N就指令集架構(gòu)(ISA)方面而言是異構(gòu)的,其中,核202A-N中的一個或多個執(zhí)行第一指令集,而其他核中的至少一個執(zhí)行第一指令集的子集或不同的指令集。
處理器200可以是一個或多個基板的部分,或可使用各種工藝技術(shù)中的任一技術(shù)而實現(xiàn)在一個或多個基板上,所述工藝技術(shù)例如,互補式金屬-氧化物半導體(CMOS)、雙極結(jié)型/互補式金屬-氧化物半導體(CMOS)(BiCMOS)或N型金屬-氧化物-半導體邏輯(NMOS)。附加地,處理器200可實現(xiàn)在一個或多個芯片上,或可實現(xiàn)為片上系統(tǒng)(SOC)集成電路,所述SOC集成電路除其他組件之外還具有所示組件。
圖3是圖形處理器300的一個實施例的框圖,所述圖形處理器300可以是分立的圖形處理單元,或可以是與多個處理核集成的圖形處理器。在一個實施例中,經(jīng)由至圖形處理器上的寄存器的存儲器映射的I/O接口,并且經(jīng)由置入處理器存儲器中的命令來與圖形處理器通信。圖形處理器300包括用于訪問存儲器的存儲器接口314。存儲器接口314可以是至以下各項的接口:本地存儲器、一個或多個內(nèi)部高速緩存、一個或多個共享外部高速緩存和/或系統(tǒng)存儲器。
圖形處理器300也包括用于將顯示輸出數(shù)據(jù)驅(qū)動到顯示設備320的顯示控制器302。顯示控制器302包括用于顯示的一個或多個上層(overlay)平面以及視頻或用戶接口元件的多個層的綜合的硬件。在一個實施例中,圖形處理器300包括用于將媒體編碼至一個或多個媒體編碼格式、從一個或多個媒體編碼格式解碼或在一個或多個媒體編碼格式之間轉(zhuǎn)碼的視頻編解碼引擎306,所述媒體編碼格式包括但不限于:移動圖片專家組(MPEG)格式(諸如,MPEG-2)、高級視頻譯碼(AVC)格式(諸如,H.264/MPEG-4AVC)以及電影電視工程師協(xié)會(SMPTE)421M/VC-1,以及聯(lián)合圖像專家組(JPEG)格式(諸如,JPEG和運動JPEG(MJPEG)格式)。
在一個實施例中,圖形處理器300包括用于執(zhí)行二維(2D)光柵化(rasterizer)操作(包括例如位邊界塊轉(zhuǎn)移)的塊圖像轉(zhuǎn)移(BLIT)引擎304。然而,在一個實施例中,使用圖形處理引擎(GPE)310的一個或多個組件來執(zhí)行2D圖形操作。圖形處理引擎310是用于執(zhí)行圖形操作(包括三維(3D)圖形操作和媒體操作)的計算引擎。
GPE 310包括用于執(zhí)行3D操作的3D流水線312,所述3D操作諸如,使用作用于3D基元形狀(例如,矩形、三角形等)的處理函數(shù)來渲染三維圖像和場景。3D流水線312包括可編程和固定功能元件,所述可編程和固定功能元件執(zhí)行元件內(nèi)的各種任務和/或繁衍(spawn)執(zhí)行線程至3D/媒體子系統(tǒng)315。當3D流水線312可用于執(zhí)行媒體操作時,GPE 310的實施例也包括專門用于執(zhí)行媒體操作(諸如,視頻后處理和圖像增強)的媒體流水線316。
在一個實施例中,媒體流水線316包括用于執(zhí)行一個或多個專業(yè)媒體操作的固定功能或可編程邏輯單元,所述專業(yè)媒體操作諸如,取代或代表視頻編解碼引擎306的視頻解碼加速、視頻去隔行(de-interlacing)以及視頻編碼加速。在一個實施例中,媒體流水線316附加地包括用于繁衍供在3D/媒體子系統(tǒng)315上執(zhí)行的線程的線程繁衍單元。所繁衍的線程在3D/媒體子系統(tǒng)中所包括的一個或多個圖形執(zhí)行單元上執(zhí)行用于媒體操作的計算。
3D/媒體子系統(tǒng)315包括用于執(zhí)行由3D流水線312和媒體流水線316繁衍的線程的邏輯。在一個實施例中,流水線將線程執(zhí)行請求發(fā)送至3D媒體子系統(tǒng)315,所述3D媒體子系統(tǒng)315包括用于仲裁各種請求并將各種請求分派至可用的線程執(zhí)行資源的線程分派邏輯。執(zhí)行資源包括用于處理3D和媒體線程的圖形執(zhí)行單元的陣列。在一個實施例中,3D/媒體子系統(tǒng)315包括用于線程指令和數(shù)據(jù)的一個或多個內(nèi)部高速緩存。在一個實施例中,子系統(tǒng)也包括用于在多個線程之間共享數(shù)據(jù)并用于存儲輸出數(shù)據(jù)的共享存儲器,所述共享存儲器包括寄存器和可尋址存儲器。
3D/媒體處理——圖4
圖4是用于圖形處理器的圖形處理引擎410的實施例的框圖。在一個實施例中,圖形處理引擎(GPE)410是圖3中示出的GPE 310的某個版本。GPE 410包括3D流水線412和媒體流水線416,其中的每一者可以與圖3的3D流水線312和媒體流水線316的實現(xiàn)方式不同或類似。
在一個實施例中,GPE 410與命令流送器403耦合,所述命令流送器403將命令流提供至GPE 3D和媒體流水線412、416。命令流送器403耦合至存儲器,所述存儲器可以是系統(tǒng)存儲器、或者內(nèi)部高速緩存存儲器和共享高速緩存存儲器中的一個或多個。命令流送器403從存儲器接收命令,并且將這些命令發(fā)送至3D流水線412和/或媒體流水線416。3D和媒體流水線通過以下方式來處理命令:通過經(jīng)由相應流水線內(nèi)的邏輯來執(zhí)行操作;或通過將一個或多個執(zhí)行線程分派至執(zhí)行單元陣列414。在一個實施例中,執(zhí)行單元陣列414是可縮放的,使得此陣列包括基于GPE 410的目標功率和性能等級的可變數(shù)量的執(zhí)行單元。
采樣引擎430與存儲器(例如,高速緩存存儲器或系統(tǒng)存儲器)和執(zhí)行單元陣列414耦合。在一個實施例中,采樣引擎430提供用于可縮放執(zhí)行單元陣列414的存儲器訪問機制,所述存儲器訪問機制允許執(zhí)行陣列414從存儲器讀取圖形和媒體數(shù)據(jù)。在一個實施例中,采樣引擎430包括用于為媒體執(zhí)行專業(yè)圖像采樣操作的邏輯。
采樣引擎430中的專業(yè)媒體采樣邏輯包括去噪/去隔行模塊432、運動估計模塊432以及圖像縮放和過濾模塊436。去噪/去隔行模塊432包括用于對經(jīng)解碼的視頻數(shù)據(jù)執(zhí)行去噪或去隔行中的一者或多者的邏輯。去隔行邏輯將隔行的(interlaced)視頻內(nèi)容的交替場組合為單個視頻幀。去噪邏輯降低或去除來自視頻和圖像數(shù)據(jù)的數(shù)據(jù)噪聲。在一個實施例中,去噪邏輯和去隔行邏輯是運動自適應的,并且基于在視頻數(shù)據(jù)中檢測到的運動量來使用空間或時間上的過濾。在一個實施例中,去噪/去隔行模塊432包括專用運動檢測邏輯(例如,在運動估計引擎434內(nèi))。
運動估計引擎434通過對視頻數(shù)據(jù)執(zhí)行視頻加速功能(諸如,運動向量估計和預測)來提供對視頻操作的硬件加速。運動估計引擎確定運動向量,所述運動向量描述圖像數(shù)據(jù)在相繼的視頻幀之間的變換。在一個實施例中,圖形處理器媒體編解碼器使用視頻運動估計引擎以在宏塊層級上執(zhí)行對視頻的操作,所述在宏塊層級上對視頻的操作原本可能是計算密集型的以使用通用處理器來執(zhí)行。在一個實施例中,運動估計引擎434一般可用于圖形處理器組件以輔助視頻解碼和處理功能,所述視頻解碼和處理功能對視頻數(shù)據(jù)內(nèi)的運動的方向和幅度是敏感的或自適應于視頻數(shù)據(jù)內(nèi)的運動的方向或幅度。
圖像縮放和過濾模塊436執(zhí)行圖像處理操作以增強所生成的圖像和視頻的視覺質(zhì)量。在一個實施例中,縮放和過濾模塊436在將數(shù)據(jù)提供至執(zhí)行單元陣列414之前的采樣操作期間處理圖像和視頻數(shù)據(jù)。
在一個實施例中,圖形處理引擎410包括數(shù)據(jù)端口444,所述數(shù)據(jù)端口444為圖形子系統(tǒng)提供訪問存儲器的附加機制。數(shù)據(jù)端口444促進用于操作的存儲器訪問,所述操作包括渲染目標寫入、恒定緩沖器讀取、抓取存儲器空間讀取/寫入以及媒體表面訪問。在一個實施例中,數(shù)據(jù)端口444包括用于對存儲器的訪問進行高速緩存的高速緩存存儲器空間。高速緩存存儲器可以是單個數(shù)據(jù)高速緩存,或者可分離為用于經(jīng)由數(shù)據(jù)端口來訪問存儲器的多個子系統(tǒng)的多個高速緩存(例如,渲染緩沖器高速緩存、恒定緩沖器高速緩存,等等)。在一個實施例中,在執(zhí)行單元陣列414中的執(zhí)行單元上執(zhí)行的線程通過經(jīng)由數(shù)據(jù)分配互連交換消息來與數(shù)據(jù)端口通信,所述數(shù)據(jù)分配互連耦合圖形處理引擎410的子系統(tǒng)中的每一個。
執(zhí)行單元——圖5-7
圖5是圖形處理器的另一實施例的框圖。在一個實施例中,圖形處理器包括環(huán)形互連502、流水線前端504、媒體引擎537和圖形核580A-N。環(huán)形互連502將圖形處理器耦合至其他處理單元(包括其他圖形處理器或一個或多個通用處理器核)。在一個實施例中,圖形處理器是集成在多核處理系統(tǒng)內(nèi)的許多處理器中的一個。
圖形處理器經(jīng)由環(huán)形互連502接收批量命令。傳入的命令由流水線前端504中的命令流送器503解釋。圖形處理器包括用于經(jīng)由(多個)圖形核580A-N來執(zhí)行3D幾何處理和媒體處理的可縮放執(zhí)行邏輯。對于3D幾何處理命令,命令流送器503將命令供應至幾何流水線536。對于至少一些媒體處理命令,命令流送器503將命令供應至視頻前端534,所述視頻前端534與媒體引擎537耦合。媒體引擎537包括用于視頻和圖像后處理的視頻質(zhì)量引擎(VQE)530以及用于提供硬件加速的媒體數(shù)據(jù)編碼和解碼的多格式編碼/解碼(MFX)533引擎。幾何流水線536和媒體引擎537各自都生成用于由至少一個圖形核580A提供的線程執(zhí)行資源的執(zhí)行線程。
圖形處理器包括可縮放線程執(zhí)行資源,所述可縮放線程執(zhí)行單元特征為模塊化核580A-N(有時稱為核片(core slice)),每一個模塊化核都具有多個子核550A-N、560A-N(有時稱為核子片(core sub-slice))。圖形處理器可具有任何數(shù)量的圖形核580A至580N。在一個實施例中,圖形處理器包括圖形核580A,所述圖形核580A至少具有第一子核550A和第二核子核560A。在另一實施例中,圖形處理器是具有單個子核(例如,550A)的低功率處理器。在一個實施例中,圖形處理器包括多個圖形核580A-N,每一個圖形核都包括第一子核的集合550A-N以及第二子核的集合560A-N。第一子核的集合550A-N中的每一個子核都至少包括執(zhí)行單元552A-N和媒體/紋理采樣器554A-N的第一集合。第二子核的集合560A-N中的每一個子核都至少包括執(zhí)行單元562A-N和采樣器564A-N的第二集合。在一個實施例中,每一個子核550A-N、560A-N都共享一組共享資源570A-N。在一個實施例中,共享資源包括共享高速緩存存儲器和像素操作邏輯。其他共享資源也可包括在圖形處理器的各種實施例中。
圖6示出線程執(zhí)行邏輯600,所述線程執(zhí)行邏輯600包括在圖形處理引擎的一個實施例中采用的處理元件的陣列。在一個實施例中,線程執(zhí)行邏輯600包括像素著色器602、線程分派器604、指令高速緩存606、包括多個執(zhí)行單元608A-N的可縮放執(zhí)行單元陣列、采樣器610、數(shù)據(jù)高速緩存612和數(shù)據(jù)端口614。在一個實施例中,所包括的組件經(jīng)由互連結(jié)構(gòu)被互連,所述互連結(jié)構(gòu)鏈接至組件中的每一個組件。線程執(zhí)行邏輯600包括通過指令高速緩存606、數(shù)據(jù)端口614、采樣器610和執(zhí)行單元陣列608A-N中的一者或多者而至存儲器(諸如,系統(tǒng)存儲器或高速緩存存儲器)的一個或多個連接。在一個實施例中,每一個執(zhí)行單元(例如,608A)是能夠為每一個線程并行地執(zhí)行多個同時的線程并處理多個數(shù)據(jù)元素的單獨的向量處理器。執(zhí)行單元陣列608A-N包括任何數(shù)量的單獨執(zhí)行單元。
在一個實施例中,執(zhí)行單元陣列608A-N主要用于執(zhí)行“著色器”程序。在一個實施例中,陣列608A-N中的執(zhí)行單元執(zhí)行包括對許多標準的3D圖形著色器指令的原生支持的指令集,使得以最少的轉(zhuǎn)換來執(zhí)行來自圖形庫(例如,Direct 3D和OpenGL)的著色器程序。執(zhí)行單元支持頂點和幾何處理(例如,頂點程序、幾何程序、頂點著色器)、像素處理(例如,像素著色器、碎片著色器)和通用處理(例如,計算和媒體著色器)。
執(zhí)行單元陣列608A-N中的每一個執(zhí)行單元對數(shù)據(jù)元素的數(shù)組操作。數(shù)據(jù)元素的數(shù)量是“執(zhí)行尺寸”或用于指令的通道數(shù)量。執(zhí)行通道是用于數(shù)據(jù)元素訪問、掩碼和指令內(nèi)的流控制的執(zhí)行的邏輯單元。通道的數(shù)量可獨立于用于特定的圖形處理器的物理ALU或FPU的數(shù)量。執(zhí)行單元608A-N支持整數(shù)和浮點數(shù)據(jù)類型。
執(zhí)行單元指令集包括單指令多數(shù)據(jù)(SIMD)指令。各種數(shù)據(jù)元素可作為緊縮數(shù)據(jù)類型被存儲在寄存器中,并且執(zhí)行單元將基于元素的數(shù)據(jù)尺寸來處理各種元素。例如,當對256位寬的向量操作時,向量的256個位被存儲在寄存器中,并且執(zhí)行單元將此向量操作為四個單獨的64位緊縮數(shù)據(jù)元素(四字(QW)尺寸的數(shù)據(jù)元素)、八個單獨的32位緊縮數(shù)據(jù)元素(雙字(DW)尺寸的數(shù)據(jù)元素)、十六個單獨的16位緊縮數(shù)據(jù)元素(字(W)尺寸的數(shù)據(jù)元素)、或三十二個單獨的8位數(shù)據(jù)元素(字節(jié)(B)尺寸的數(shù)據(jù)元素)。然而,不同的向量寬度和寄存器尺寸是可能的。
一個或多個內(nèi)部指令高速緩存(例如,606)被包括在線程執(zhí)行邏輯600中以對用于執(zhí)行單元的線程指令進行高速緩存。在一個實施例中,一個或多個數(shù)據(jù)高速緩存(例如,612)被包括以對線程執(zhí)行期間的線程數(shù)據(jù)進行高速緩存。采樣器610被包括,以便為3D操作提供紋理采樣,并為媒體操作提供媒體采樣。在一個實施例中,采樣器610包括專用紋理或媒體采樣功能,用于在將所采樣的數(shù)據(jù)提供至執(zhí)行單元之前的采樣過程期間處理紋理或媒體數(shù)據(jù)。
在執(zhí)行期間,圖形和媒體流水線經(jīng)由線程繁衍和分派邏輯而將線程發(fā)起請求發(fā)送至線程執(zhí)行邏輯600。線程執(zhí)行邏輯600包括本地線程分派器604,所述本地線程分派器604仲裁來自圖形和媒體流水線的線程發(fā)起請求,并且在一個或多個執(zhí)行單元608A-N上實例化所請求的線程。例如,幾何流水線(例如,圖5的536)將頂點處理、曲面細分(tessellation)或集合處理線程分派至線程執(zhí)行邏輯600。線程分派器604也可處理來自執(zhí)行著色器程序的運行時線程繁衍請求。
一旦一組幾何對象已被處理并光柵化為像素數(shù)據(jù),就調(diào)用像素著色器602,以便進一步計算輸出信息并使結(jié)果被寫入輸出表面(例如,顏色緩沖器、深度緩沖器、模板緩沖器等)。在一個實施例中,像素著色器602計算將跨光柵化的對象而被插值的各種頂點屬性的值。隨后,像素著色器602執(zhí)行API供應的像素著色器程序。為了執(zhí)行像素著色器程序,像素著色器602經(jīng)由線程分派器604而將線程分派至執(zhí)行單元(例如,608)。像素著色器602使用采樣器610中的紋理采樣邏輯來訪問存儲在存儲器中的紋理映射中的紋理數(shù)據(jù)。對紋理數(shù)據(jù)和輸入幾何數(shù)據(jù)的算術(shù)操作計算用于每一個幾何碎片的像素顏色數(shù)據(jù),或丟棄一個或多個像素而不進行進一步處理。
在一個實施例中,數(shù)據(jù)端口614提供存儲器訪問機制,以供線程執(zhí)行邏輯600將經(jīng)處理的數(shù)據(jù)輸出到存儲器,從而在圖形處理器輸出流水線上進行處理。在一個實施例中,數(shù)據(jù)端口614包括或耦合至一個或多個高速緩存存儲器(例如,數(shù)據(jù)高速緩存612),所述高速緩存存儲器用于對用于經(jīng)由數(shù)據(jù)端口進行的存儲器訪問的數(shù)據(jù)進行高速緩存。
圖7是示出根據(jù)實施例的圖形處理器執(zhí)行單元指令格式的框圖。在一個實施例中,圖形處理器執(zhí)行單元支持具有按照多種格式的指令的指令集。實線框示出一般被包括在執(zhí)行單元指令中的組件,而虛線框包括任選的且僅被包括在指令的子集中的組件。所述和所示的指令是宏指令,體現(xiàn)在它們是供應至執(zhí)行單元的指令,這與源自一旦指令經(jīng)處理就進行的指令解碼的微操作相對照。
在一個實施例中,圖形處理器執(zhí)行單元原生地支持按照128位格式710的指令?;谒x擇的指令、指令選項或操作數(shù)的數(shù)量,64位壓縮的指令格式730可用于一些指令。原生的128位格式710提供對所有指令選項的訪問,而在64位格式730中,一些選項和操作是受限的。在64位格式730中可用的原生指令隨實施例不同而變化。在一個實施例中,使用索引字段713中的索引集合來部分地壓縮指令。執(zhí)行單元硬件基于索引值來引用壓縮表的集合,并且使用壓縮表輸出來重構(gòu)按照128位格式710的原生指令。
對于每一種格式,指令操作碼712定義執(zhí)行單元將執(zhí)行的操作。執(zhí)行單元跨每一個操作數(shù)的多個數(shù)據(jù)元素并行地執(zhí)行每一個指令。例如,響應于加法指令,執(zhí)行單元跨表示紋理元素或圖片元素的每一個顏色通道執(zhí)行同時的加法操作。默認地,執(zhí)行單元跨操作數(shù)的所有數(shù)據(jù)通道執(zhí)行每一條指令。指令控制字段712允許對某些執(zhí)行選項(諸如,通道選擇(例如,預測)和數(shù)據(jù)通道順序(例如,拌和(swizzle)))的控制。對于128位指令710,執(zhí)行尺寸字段716限制將被并行地執(zhí)行的數(shù)據(jù)通道的數(shù)量。執(zhí)行尺寸字段716不可用于64位緊湊的指令格式730。
一些執(zhí)行單元指令具有多達三個操作數(shù),這三個操作數(shù)包括兩個源操作數(shù)scr0 722、scr1 722以及一個目的地718。在一個實施例中,執(zhí)行單元支持雙目的地指令,其中目的地中的一個是隱含的。數(shù)據(jù)操縱指令可具有第三源操作數(shù)(例如,SRC2 724),其中,指令操作碼JJ12確定源操作數(shù)的數(shù)量。指令的最后一個源操作數(shù)可以是利用指令傳遞的立即數(shù)(例如,硬編碼的)值。
在一個實施例中,基于操作碼位字段對指令分組以簡化操作碼解碼740。對于8位操作碼,位4、5和6允許執(zhí)行單元確定操作碼的類型。示出的精確的操作碼分組是示例性的。在一個實施例中,移動和邏輯操作碼組742包括數(shù)據(jù)移動和邏輯指令(例如,mov,cmp)。移動和邏輯組742共享五個最高有效位(MSB),其中,移動指令是0000xxxxb(例如,0x0x)形式的,并且邏輯指令是0001xxxxb(例如,0x01)形式的。流控制指令組744(例如,call,jmp)包括0010xxxxb(例如,0x20)形式的指令?;祀s的指令組746包括指令的拌和,包括0011xxxxb(e.g.,0x30)形式的同步指令(例如,wait,send)。并行的數(shù)學指令組748包括0100xxxxb(e.g.,0x40)形式的逐成分的算術(shù)指令(例如,add,mul)。并行的數(shù)學組748跨數(shù)據(jù)通道并行地執(zhí)行算術(shù)操作。向量數(shù)學組750包括0101xxxxb(e.g.,0x50)形式的算術(shù)指令(例如,dp4)。向量數(shù)學組對向量操作數(shù)執(zhí)行算術(shù)(諸如,點積計算)。
圖形流水線——圖8
圖8是圖形處理器的另一實施例的框圖,所述圖形處理器包括圖形流水線820、媒體流水線830、顯示引擎840、線程執(zhí)行單元850以及渲染輸出流水線870。在一個實施例中,圖形處理器是包括一個或多個通用處理核的多核處理系統(tǒng)內(nèi)的圖形處理器。圖形處理器通過對一個或多個控制寄存器(未示出)的寄存器寫入或經(jīng)由通過環(huán)形互連802而發(fā)布至圖形處理器的命令而受控。環(huán)形互連820將圖形處理器耦合至其他處理組件(諸如,其他圖形處理器或通用處理器)。由命令流送器803解釋來自環(huán)形互連的命令,所述命令流送器803將指令供應至圖形流水線820或媒體流水線830的各個組件。
命令流送器803指導頂點取出器805組件的操作,所述頂點取出器805從存儲器讀取頂點數(shù)據(jù),并且執(zhí)行由命令流送器803提供的頂點處理命令。頂點取出器805將頂點數(shù)據(jù)提供給頂點著色器807,所述頂點著色器807對每一個頂點執(zhí)行坐標空間變換和照明操作。頂點取出器805和頂點著色器通過經(jīng)由線程分派器831將執(zhí)行線程分派至執(zhí)行單元852A、852B來執(zhí)行頂點處理指令。
在一個實施例中,執(zhí)行單元852A、852B是具有用于執(zhí)行圖形和媒體操作的指令集的向量處理器的陣列。執(zhí)行單元852A、852B具有附連的L1高速緩存851,所述附連的L1高速緩存專用于每一個陣列或在多個陣列之間被共享。高速緩存可配置為數(shù)據(jù)高速緩存、指令高速緩存、或經(jīng)分區(qū)以在不同的分區(qū)中包含數(shù)據(jù)和指令的單個高速緩存。
在一個實施例中,圖形流水線820包括用于執(zhí)行硬件加速的對3D對象的曲面細分的曲面細分組件??删幊虤んw(hull)著色器811配置曲面細分操作。可編程域著色器817提供對曲面細分輸出的后端評估。曲面細分器813在殼體著色器811的指示下操作,并且包含專用邏輯,所述專用邏輯用于基于作為輸入而被提供至圖形流水線820的粗糙的幾何模型來生成精細的幾何對象的集合。如果不使用曲面細分,則可繞過曲面細分組件811、813、817。
可由幾何著色器819經(jīng)由分派至執(zhí)行單元852A、852B的一個或多個線程來處理完整的幾何對象,或完整的幾何對象可直接繼續(xù)到裁剪器829。幾何著色器對整個幾何對象操作,而不是像在圖形流水線的先前的級中那樣對頂點或頂點微片處理。如果禁用曲面細分,則幾何著色器819從頂點著色器807接收輸入。幾何著色器819是可由幾何著色器程序編程的,以便在禁用曲面細分單元時執(zhí)行幾何曲面細分。
在光柵化之前,由裁剪器829處理頂點數(shù)據(jù),所述裁剪器829是固定功能裁剪器或具有裁剪和幾何著色器功能的可編程裁剪器。在一個實施例中,渲染輸出流水線870中的光柵化器873分派像素著色器以將幾何對象轉(zhuǎn)換為它們各自的像素表示。在一個實施例中,像素著色器邏輯被包括在線程執(zhí)行邏輯850中。
圖形引擎具有允許數(shù)據(jù)和消息在圖形引擎的主要組件之間傳送的互連總線、互連結(jié)構(gòu)或某個其他互連機制。在一個實施例中,執(zhí)行單元852A、852B和相關(guān)聯(lián)的(多個)高速緩存851、紋理和媒體采樣器854、以及紋理/采樣器858高速緩存858經(jīng)由數(shù)據(jù)端口856互連,以執(zhí)行與圖形引擎的渲染輸出流水線組件的存儲器訪問和通信。在一個實施例中,采樣器854、高速緩存851、858和執(zhí)行單元852A、852B各自都具有分開的存儲器訪問路徑。
在一個實施例中,渲染輸出流水線870包含將基于頂點的對象轉(zhuǎn)換為它們相關(guān)聯(lián)的基于像素的表示的光柵化器和深度測試組件873。在一個實施例中,光柵化邏輯包括用于執(zhí)行固定功能三角和直線光柵化的窗口器/掩碼器單元。在一個實施例中,相關(guān)聯(lián)的渲染和深度緩沖器高速緩存878、879也是可用的。像素操作組件877對數(shù)據(jù)執(zhí)行基于像素的操作,但是在一些實例中,與2D操作相關(guān)聯(lián)的像素操作(例如,利用混合(blend)進行的位塊圖像轉(zhuǎn)移)由2D引擎841執(zhí)行,或在顯示時由顯示控制器843使用上層的顯示平面來替代。在一個實施例中,共享的L3高速緩存875可用于所有的圖形組件,從而允許在不使用主系統(tǒng)存儲器的情況下共享數(shù)據(jù)。
圖形處理器媒體流水線830包括媒體引擎337和視頻前端834。在一個實施例中,視頻前端834從命令流送器803接收流水線命令。然而,在一個實施例中,媒體流水線830包括分開的命令流送器。視頻前端834在將命令發(fā)送至媒體引擎837之前處理媒體命令。在一個實施例中,媒體引擎包括線程繁衍功能,以便繁衍用于經(jīng)由線程分派器831而分派至線程執(zhí)行邏輯850的線程。
在一個實施例中,圖形引擎包括顯示引擎840。在一個實施例中,顯示引擎840在圖形處理器外部,并且經(jīng)由環(huán)形互連802或某個其他互連總線或結(jié)構(gòu)而與圖形處理器耦合。顯示引擎840包括2D引擎841和顯示控制器843。顯示引擎840包含能夠獨立地操作3D流水線的專用邏輯。顯示控制器843與顯示設備(未示出)耦合,所述顯示設備可以是如在膝上型計算機中的系統(tǒng)集成的顯示設備或經(jīng)由顯示設備連接器而附連的外部顯示設備。
圖形流水線820和媒體流水線830可配置以基于多個圖形和媒體編程接口來執(zhí)行操作,并且不專用于任何一個應用編程接口(API)。在一個實施例中,用于圖形處理器的驅(qū)動器軟件將專用于特定圖形或媒體庫的API調(diào)用轉(zhuǎn)化為可由圖形處理器處理的命令。在各種實施例中,為Khronos Group所支持的開放圖形庫(OpenGL)和開放計算語言(OpenCL)、來自微軟公司的Direct3D庫提供支持,或者在一個實施例中,為OpenGL和D3D兩者提供支持。也可為開放源計算機視覺庫(OpenCV)提供支持。如果可完成從未來API的流水線至圖形處理器的流水線的映射,則也將支持兼容3D流水線的未來API。
圖形流水線編程——圖9A-9B
圖9A是示出根據(jù)實施例的圖形處理器命令格式的框圖,圖9B是示出根據(jù)實施例的圖形處理器命令序列的框圖。圖9A中的實線框示出一般被包括在圖形命令中的組件,而虛線包括任選的且僅被包括在圖形命令的子集中的組件。圖9A的示例性圖形處理器命令格式900包括用于標識該命令的目標客戶機的數(shù)據(jù)字段902、命令操作碼(操作碼)904以及用于命令的相關(guān)數(shù)據(jù)906。子操作碼905和命令尺寸908也包括在一些命令中。
客戶機902指定圖形設備中處理命令數(shù)據(jù)的客戶機單元。在一個實施例中,圖形處理器命令解析器檢查每一個命令的客戶機字段以調(diào)整對命令的未來處理,并且將命令數(shù)據(jù)路由至適當?shù)目蛻魴C單元。在一個實施例中,圖形處理器客戶機單元包括存儲器接口單元、渲染單元、2D單元、3D單元和媒體單元。每一個客戶機單元都具有處理命令的對應的處理流水線。一旦由客戶機單元接收到命令,此客戶機單元就讀取操作碼904以及子操作碼905(如果存在),以便確定將執(zhí)行的操作。客戶機單元使用命令的數(shù)據(jù)906字段中的信息來執(zhí)行命令。對于一些命令,預期顯式的命令尺寸908來指定命令的尺寸。在一個實施例中,命令解析器基于命令操作碼自動地確定命令中的至少一些命令的尺寸。在一個實施例中,命令經(jīng)由雙字的倍數(shù)而對準。
圖9B中的流程圖示出采樣命令序列910。在一個實施例中,以圖形處理器的實施例為特征的數(shù)據(jù)處理系統(tǒng)的軟件或固件使用所示的命令序列的某個版本來建立、執(zhí)行并終止圖形操作的集合。出于示例性目的示出并描述采樣命令序列,然而,實施例不限于這些命令,也不限于此命令序列。此外,命令能以命令序列中的批量命令被發(fā)布,使得圖形處理器將以至少部分地并發(fā)的方式來處理命令序列。
取樣命令序列910能以流水線轉(zhuǎn)儲清除(flush)命令912開始,以使任何活動的流水線完成用于流水線的當前待定的命令。在一個實施例中,3D流水線922和媒體流水線924不并發(fā)地操作。執(zhí)行流水線轉(zhuǎn)儲清除以使活動的圖形流水線完成任何待定的命令。響應于流水線轉(zhuǎn)儲清除,用于圖形處理器的命令解析器將暫停命令處理,直到活動的繪制引擎完成待定的操作且相關(guān)讀取高速緩存被無效為止。任選地,渲染高速緩存中被標記為“臟(dirty)”的任何數(shù)據(jù)可轉(zhuǎn)儲清除至存儲器。流水線轉(zhuǎn)儲清除命令912可用于流水線同步,或可在將圖形處理器置于低功率狀態(tài)之前使用。
當命令序列要求圖形處理器在多個流水線之間顯式地切換時,使用流水線選擇命令913。除非上下文將為兩個流水線發(fā)布命令,否則在發(fā)布流水線命令之前,在執(zhí)行上下文內(nèi),流水線選擇命令913僅需要一次。在一個實施例中,緊接著經(jīng)由流水線選擇命令913進行的流水線切換之前,需要流水線轉(zhuǎn)儲清除命令912。
流水線控制命令914配置用于操作的圖形流水線,并且用于對3D流水線922和媒體流水線924編程。流水線控制命令914為活動的流水線配置流水線狀態(tài)。在一個實施例中,流水線控制命令914用于流水線同步,并且用于在處理批量命令之前,清除來自活動的流水線內(nèi)的一個或多個高速緩存存儲器的數(shù)據(jù)。
返回緩沖器狀態(tài)命令916用于配置供相應的流水線用于寫入數(shù)據(jù)的返回緩沖器的集合。一些流水線操作需要對一個或多個返回緩沖器的分配、選擇或配置,在處理期間,操作將中間數(shù)據(jù)寫入到所述一個或多個返回緩沖器中。圖形處理器也使用一個或多個返回緩沖器以存儲輸出數(shù)據(jù)并執(zhí)行跨線程通信。返回緩沖器狀態(tài)916包括選擇用于流水線操作集合的返回緩沖器的尺寸和數(shù)量。
命令序列中的其余命令基于用于操作的活動的流水線而有所不同。基于流水線確定920,命令序列被定制至以3D流水線狀態(tài)930開始的3D流水線922或以媒體流水線狀態(tài)940開始的媒體流水線924。
用于3D流水線狀態(tài)930的命令包括用于以下狀態(tài)的3D狀態(tài)設置命令:頂點緩沖器狀態(tài)、頂點元素狀態(tài)、恒定顏色狀態(tài)、深度緩沖器狀態(tài)以及在處理3D基元命令之前將配置的其他狀態(tài)變量。至少部分地基于使用中的特定的3D API來確定這些命令的值。3D流水線狀態(tài)930命令也能夠在如果不使用某些流水線元件時選擇性地禁用或繞過那些元件。
3D基元932命令用于提交將由3D流水線處理的3D基元。經(jīng)由3D基元932命令而被傳遞至圖形處理器的命令和相關(guān)聯(lián)的參數(shù)被轉(zhuǎn)發(fā)至圖形流水線中的頂點取出函數(shù)。頂點取出函數(shù)使用3D基元932命令數(shù)據(jù)來生成頂點數(shù)據(jù)結(jié)構(gòu)。頂點數(shù)據(jù)結(jié)構(gòu)被存儲在一個或多個返回緩沖器中。3D基元932命令用于經(jīng)由頂點著色器對3D基元執(zhí)行頂點操作。為了處理頂點著色器,3D流水線922將著色器執(zhí)行線程分派至圖形處理器執(zhí)行單元。
3D流水線922經(jīng)由執(zhí)行934命令或事件來觸發(fā)。在一個實施例中,寄存器寫入觸發(fā)命令執(zhí)行。在一個實施例中,經(jīng)由命令序列中的“go”(“走”)或“kick”(“踢除”)命令來觸發(fā)執(zhí)行。在一個實施例中,使用流水線同步命令以通過圖形流水線來轉(zhuǎn)儲清除命令序列來觸發(fā)命令執(zhí)行。3D流水線將為3D基元執(zhí)行幾何處理。一旦操作完成,得到的幾何對象被光柵化,并且像素引擎對得到的像素上色。用于控制像素著色和像素后端操作的附加命令也可被包括以用于那些操作。
當執(zhí)行媒體操作時,采樣命令序列910跟隨媒體流水線924路徑。一般而言,用于媒體流水線924的編程的特定使用和方式取決于將執(zhí)行的媒體或計算操作。在媒體解碼期間,特定的媒體解碼操作可卸載至媒體流水線。也可繞過媒體流水線,并且可使用由一個或多個通用處理核提供的資源完全地或部分地執(zhí)行媒體解碼。在一個實施例中,媒體流水線也包括用于通用圖形處理器單元(GPGPU)操作的元件,其中,圖形處理器用于使用與圖形基元的渲染不是顯式相關(guān)的計算著色器程序來執(zhí)行SIMD向量操作。
以與3D流水線922類似的方式來配置媒體流水線924。媒體流水線狀態(tài)命令940的集合被分派或置入到命令序列中并在媒體對象命令942之前。媒體流水線狀態(tài)命令940包括用于配置將用于處理媒體對象的媒體流水線元件的數(shù)據(jù)。這包括用于配置媒體流水線內(nèi)的視頻解碼和視頻編碼邏輯的數(shù)據(jù),諸如,編碼或解碼格式。媒體流水線狀態(tài)命令940也支持使用指向包含批量狀態(tài)設置的“間接”狀態(tài)元素的一個或多個指針。
媒體對象命令942提供指向用于由媒體流水線處理的媒體對象的指針。媒體對象包括包含待處理的視頻數(shù)據(jù)的存儲器緩沖器。在一個實施例中,在發(fā)布媒體對象命令942之前,所有媒體流水線狀態(tài)都必須是有效的。一旦流水線狀態(tài)經(jīng)配置,并且媒體對象命令942經(jīng)排隊列,媒體流水線924就經(jīng)由執(zhí)行934命令或等效的執(zhí)行事件(例如,寄存器寫入)來觸發(fā)。隨后,可通過由3D流水線922或媒體流水線924提供的操作對來自媒體流水線924的輸出進行后處理。在一個實施例中,以與媒體操作類似的方式來配置和執(zhí)行GPGPU操作。
圖形軟件架構(gòu)——圖10
圖10示出根據(jù)實施例的用于數(shù)據(jù)處理系統(tǒng)的示例性圖形軟件架構(gòu)。軟件架構(gòu)包括3D圖形應用1010、操作系統(tǒng)1020以及至少一個處理器1030。處理器1030包括圖形處理器1032以及一個或多個通用處理器核1034。圖形應用1010和操作系統(tǒng)1020各自都在數(shù)據(jù)處理系統(tǒng)的系統(tǒng)存儲器1050中執(zhí)行。
在一個實施例中,3D圖形應用1010包含一個或多個著色器程序,所述著色器程序包括著色器指令1012。著色器語言指令可以是高級著色器語言(諸如,高級著色器語言(HLSL)或OpenGL著色器語言(GLSL))中的。應用也包括適用于由通用處理器核1034執(zhí)行的機器語言中的可執(zhí)行指令1014。應用也包括由頂點數(shù)據(jù)定義的圖形對象1016。
操作系統(tǒng)1020可以是來自微軟公司的操作系統(tǒng)、專屬的類UNIX操作系統(tǒng)、或使用Linux內(nèi)核的變體的開放源類UNIX操作系統(tǒng)。當Direct3D API在使用中時,操作系統(tǒng)1020使用前端著色器編譯器1024以將HLSL中的任何著色器指令1012編譯為低級著色器語言。編譯可以是即時(just-in-time)編譯,或應用可執(zhí)行共享預編譯。在一個實施例中,在3D圖形應用1010的編譯期間,高級著色器被編譯為低級著色器。
用戶模式圖形驅(qū)動器1026可包含后端著色器編譯器1027以將著色器指令1012編譯為硬件專用表示。當OpenGL API在使用中時,GLSL高級語言中的著色器指令1012被傳遞至用于模式圖形驅(qū)動器1026以進行編譯。用戶模式圖形驅(qū)動器使用操作系統(tǒng)內(nèi)核模式函數(shù)1028來與內(nèi)核模式圖形驅(qū)動器1029通信。內(nèi)核模式圖形驅(qū)動器1029與圖形處理器1032通信以分派命令和指令。
就本文中所描述的各種操作和功能的程度而言,它們可被描述或定義為硬件電路、軟件代碼、指令、配置和/或數(shù)據(jù)。內(nèi)容可具體化在硬件邏輯中,或可具體化為直接可執(zhí)行的軟件(“目標”或“可執(zhí)行”形式)、源代碼、設計成用于在圖形引擎上執(zhí)行的高級著色器代碼或用于特定處理器或圖形核的指令集中的低級匯編語言代碼。本文中所述的實施例的軟件內(nèi)容可經(jīng)由具有存儲于其上的內(nèi)容的制品來提供,或者可經(jīng)由操作通信接口以便經(jīng)由此通信接口來發(fā)送數(shù)據(jù)的方法來提供。
非暫態(tài)機器可讀存儲介質(zhì)可使機器執(zhí)行所描述的功能或操作,并且包括以可由機器(例如,計算設備、電子系統(tǒng)等)訪問形式存儲信息的任何機制,諸如,可記錄/非可記錄介質(zhì)(例如,只讀存儲器(ROM)、隨機存取存儲器(RAM)、磁盤存儲介質(zhì)、光存儲介質(zhì)、閃存設備等)。通信接口包括對接至硬連線的、無線的、光學介質(zhì)等中的任一者以向另一設備通信的任何機制,諸如,存儲器總線接口、處理器總線接口、網(wǎng)際連接、盤控制器等。通信接口通過以下方式來配置,提供配置參數(shù)或發(fā)送信號以使通信接口準備好提供描述軟件內(nèi)容的數(shù)據(jù)信號。可經(jīng)由發(fā)送至該通信接口的一個或多個命令或信號來訪問此通信接口。
所描述的各種組件可以是用于執(zhí)行所描述的操作或功能的裝置。本文所述的每個組件包括軟件、硬件,或者軟件和硬件的組合。組件可實現(xiàn)為軟件模塊、硬件模塊、專用硬件(例如,專用硬件、專用集成電路(ASIC)、數(shù)字信號處理器(DSP)等)、嵌入式控制器、硬連線電路等。除了本文中所述的內(nèi)容之外,還可對本發(fā)明的所公開的實施例和實現(xiàn)方式進行各種修改而不背離它們的范圍。因此,本文中的示例和范例應當被解釋成解說性的,而非限制性的。本發(fā)明的范圍應當僅通過參照所附權(quán)利要求書來界定。
用于基于當前狀態(tài)來更新著色器程序的裝置和方法
編譯過程是復雜的,并且需要若干中介語言表示以在編譯的不同步驟處描述著色器代碼。在生成最終的著色器程序內(nèi)核之前,在被稱為低級中介表示(LLIR)的程序指令的抽象表示上執(zhí)行最耗時的操作。
為了減小運行時期間這些耗時的重新編譯操作的負面影響,本發(fā)明的一個實施例一直到結(jié)束階段才編譯著色器程序,并且如果最終指令與任何非正交狀態(tài)(NOS)交互,則標記最終指令。隨后,經(jīng)編譯的著色器程序被保存為可修補(patchable)著色器內(nèi)核。在執(zhí)行期間,隨后可針對當前的NOS動態(tài)地修補經(jīng)標記的指令以生成在GPU硬件上執(zhí)行的經(jīng)修補的著色器內(nèi)核。
如圖11中一般地所示,在本發(fā)明的一個實施例中,由具有指令標記邏輯的編譯器1123編譯著色器源代碼1124,以便為依賴于不同的NOS的指令生成經(jīng)標記的著色器指令1104,并且為不依賴于NOS的指令生成未經(jīng)標記的著色器指令1125。在一個實施例中,使用原本將不用于給定的指令集架構(gòu)的位的序列來標記指令。此序列中的每一個位可指示指令是否依賴于特定的NOS。例如,位0可指示指令是否依賴于NOS#0(例如,1=依賴于NOS,0=不依賴于NOS);位1可指示指令是否依賴于NOS#1;位2可指示指令是否依賴于NOS#2,等等。然而,應當注意,本發(fā)明的基本原理不限于用于標識對NOS的依賴性的任何特定編碼。
在執(zhí)行時,根據(jù)當前的NOS來修補經(jīng)標記的著色器指令1104。例如,在圖11中,指令修補邏輯1103根據(jù)當前的NOS 1101動態(tài)地修補經(jīng)標記的著色器指令1104以生成經(jīng)修補的著色器指令1105。經(jīng)修補的著色器指令1105和未經(jīng)標記的著色器指令1125可一起被保存在經(jīng)修補的著色器內(nèi)核(由于經(jīng)修補的著色器指令,所述經(jīng)修補的著色器內(nèi)核專門適用于當前的NOS)中。
如圖11中所示,隨后,調(diào)度器/分派單元1110可分派經(jīng)修補的著色器指令1105和未經(jīng)標記的著色器指令1125,用于在一個或多個執(zhí)行單元1111-1118上執(zhí)行以實現(xiàn)著色器??蔀槿魏晤愋偷闹?包括上文討論的那些著色器)實現(xiàn)本發(fā)明的基本原理。這可包括例如圖6中的像素著色器602、圖8中的頂點著色器807、幾何著色器819、殼體著色器811和域著色器817(僅舉數(shù)例)。此外,在一個實施例中,圖10中示出的后端著色器編譯器1027(實現(xiàn)在用戶模式圖形驅(qū)動器1026內(nèi))可用于生成如本文中所述的經(jīng)標記的著色器指令和經(jīng)修補的著色器指令。
在圖12中示出本發(fā)明的一個實施例的附加細節(jié),圖12包括:應用組件1120,所述應用組件1120使用圖形API(例如,Direct3D、OpenGL等);驅(qū)動器組件1130,用于如本文中所述根據(jù)NOS來標記指令并修補指令;以及硬件組件1140,用于執(zhí)行經(jīng)修補的指令。由應用1220調(diào)用的API編譯函數(shù)1201將著色語言代碼(諸如,高級著色器語言(HLSL)代碼或OpenGL著色語言(GLSL)代碼)編譯為低級著色器語言。具體而言,響應于編譯函數(shù)1201,HLSL或GLSL代碼被輸入到驅(qū)動器組件1230內(nèi)的編譯器塊1203,所述編譯器塊1203執(zhí)行包括以下各項的各種編譯操作:將代碼轉(zhuǎn)換為低級中介表示(LLIR);執(zhí)行LLIR優(yōu)化;以及生成寄存器分配信息。此外,編譯器塊1203評估指令以標識依賴于NOS的指令,且隨后標記依賴于NOS的指令(在圖12中標識為“X_NOS”指令)。隨后,經(jīng)標記的指令和未經(jīng)標記的指令被組合到可修補著色器內(nèi)核1204中,以便在執(zhí)行時使用。
在執(zhí)行時,響應于由應用1220調(diào)用的設置狀態(tài)函數(shù)1205和設置著色器函數(shù)1209,驅(qū)動器1130的進程狀態(tài)模塊1206確定實現(xiàn)著色器1204的可修補內(nèi)核將在其中執(zhí)行的當前NOS 1207。具體而言,著色器函數(shù)1209指向?qū)⒈皇褂玫目尚扪a著色器內(nèi)核1204,并且如圖12中的虛線箭頭所指示,進程狀態(tài)1206可依賴于著色器內(nèi)核1204。
驅(qū)動器的指令修補模塊1208標識可修補著色器內(nèi)核1204內(nèi)依賴于當前NOS 1207的那些經(jīng)標記的指令。隨后,指令修補模塊1208根據(jù)當前的NOS1207(例如,響應于執(zhí)行函數(shù)1211,其指示內(nèi)核將被執(zhí)行)來修補用于執(zhí)行的指令。經(jīng)修補的指令(以及未經(jīng)修補的指令)用于生成在硬件組件1240的執(zhí)行資源1214(如先前所描述,它們可實現(xiàn)為多個執(zhí)行單元)上執(zhí)行的經(jīng)修補的著色器內(nèi)核1213。硬件單元狀態(tài)1212也被更新以反映當前的進程狀態(tài)1206(例如,已針對其修補了經(jīng)修補的內(nèi)核1213的指令的當前的NOS)。
在圖13中示出根據(jù)本發(fā)明的一個實施例的方法。方法可實現(xiàn)在上文所述的(例如,如圖11-12中所示的)系統(tǒng)架構(gòu)的上下文內(nèi),但是方法不限于任何特定的系統(tǒng)架構(gòu)。
在1301處,標識依賴于NOS的指令,并且在1302處,將傳入的著色器編譯至可修補二進制內(nèi)核,在所述可修補二進制內(nèi)核中,依賴于NOS的指令經(jīng)標記以指示與不同的NOS的依賴關(guān)系。例如,如上文所述,每一條指令的位字段可用于指示該指令依賴于的那些NOS(例如,位字段的每一個位的位置指示不同的NOS)。在1303處,保存包括依賴于NOS的指令的經(jīng)優(yōu)化的可修補內(nèi)核。
在1304處,在著色器執(zhí)行期間(例如,響應于執(zhí)行著色器),確定當前的NOS。在1305處,修改每一條專門標記(在操作1302中標記)的指令以實現(xiàn)當前的NOS規(guī)范(即,基于檢測到的當前NOS)。所得到的經(jīng)標記的指令被包括在經(jīng)修補的著色器內(nèi)核中。在1306處,根據(jù)當前的NOS執(zhí)行經(jīng)修補的著色器內(nèi)核。
在一個實施例中,可僅部分地使用上述技術(shù)。例如,在一個實施例中,可直接編譯在大多數(shù)情況下以相同方式配置的NOS(而不是使用本文中所述的修補技術(shù))。
使用本文中所述的技術(shù)消除了以指令的多個實例(對于每一個NOS為一個)來對著色器內(nèi)核進行高速緩存的需求,因為可動態(tài)地修補內(nèi)核。此類方法減少了編譯時間、性能和功率使用,由此改善了最終用戶體驗。
本發(fā)明的多個實施例可包括上述各個步驟??稍诳捎糜谑雇ㄓ没?qū)S锰幚砥鲌?zhí)行這些步驟的機器可執(zhí)行指令中具體化這些步驟?;蛘?,可由包含用于執(zhí)行這些步驟的硬連線邏輯的專用硬件組件,或可由被編程的計算機組件和自定義硬件組件的任何組合來執(zhí)行這些步驟。
如本文中所述,指令可以指硬件的具體配置,例如,配置成用于執(zhí)行某些操作或具有預定功能的專用集成電路(ASIC),或者被存儲在被具體化在非暫態(tài)計算機可讀介質(zhì)中的存儲器中的軟件指令。因此,可使用存儲在一個或多個電子設備(例如,終端站、網(wǎng)絡元件等)上并在其上被執(zhí)行的代碼和數(shù)據(jù)來執(zhí)行附圖中所示的技術(shù)。此類電子設備使用諸如非暫態(tài)計算機機器可讀存儲介質(zhì)(例如,磁盤;光盤;隨機存取存儲器;只讀存儲器;閃存設備;相變存儲器)之類的計算機機器可讀介質(zhì)和暫態(tài)計算機機器可讀通信介質(zhì)(例如,電、光、聲或其他形式的傳播信號——諸如載波、紅外信號、數(shù)字信號等)來(內(nèi)部地和/或在網(wǎng)絡上與其他電子設備之間進行)存儲和傳遞代碼和數(shù)據(jù)。另外,此類電子設備一般包括耦合至一個或多個其他組件的一個或多個處理器的集合,所述一個或多個其他組件例如是一個或多個存儲設備(非暫態(tài)機器可讀存儲介質(zhì))、用戶輸入/輸出設備(例如,鍵盤、觸摸屏和/或顯示器)以及網(wǎng)絡連接。該組處理器和其他組件的耦合一般是通過一個或多個總線和橋(也稱為總線控制器)實現(xiàn)的。存儲設備和攜帶網(wǎng)絡話務的信號分別表示一個或多個機器可讀存儲介質(zhì)和機器可讀通信介質(zhì)。因此,給定電子設備的存儲設備通常存儲用于在該電子設備的一個或多個處理器的集合上執(zhí)行的代碼和/或數(shù)據(jù)。當然,本發(fā)明的實施例的一個或多個部分可使用軟件、固件和/或硬件的不同組合來實現(xiàn)。貫穿此具體實施方式,為了進行解釋,陳述了眾多具體細節(jié)以提供對本發(fā)明的透徹理解。然而,對本領(lǐng)域技術(shù)人員顯而易見的是,沒有這些具體細節(jié)中的一些細節(jié)也可實施本發(fā)明。在某些實例中,并不詳細描述公知的結(jié)構(gòu)和功能,以免使本發(fā)明的主題模糊。因此,本發(fā)明的范圍和精神應根據(jù)所附權(quán)利要求書來確定。