專利名稱:圖形流水線狀態(tài)的快速重新配置的制作方法
圖形流水線狀態(tài)的快速重新配置
祖旦 冃豕
在屏幕上渲染并顯示三維(3-D)圖形通常涉及許多運算和計算。在簡單 的圖形系統(tǒng)中,這一計算根據(jù)中央處理單元(CPU)和圖形處理單元(GPU) 的某一等級的協(xié)作或共享處理來發(fā)生。在一個示例性場景中,在處理了指令并 且在CPU中發(fā)生了某些初始計算之后,將定義要渲染的對象的一組坐標點或 頂點存儲在視頻存儲器中以供圖形流水線中的GPU進一步處理。當圖形程序 員經(jīng)由一組可用的圖形API來開發(fā)圖形應(yīng)用程序時,該程序員一般指示要由一 組算法元素來處理的一組頂點。該數(shù)據(jù)被發(fā)送到圖形流水線,且每一頂點通過 圖形流水線中一組固定的GPU子單元來流傳送。稱為鑲嵌器(tesselator)的這 些子單元之一根據(jù)被設(shè)計成有效地覆蓋所表示的對象的表面的預(yù)定算法將圖 形數(shù)據(jù)分成簡單的多邊形。之后,有時稱為著色器或"著色器程序"的一個或 多個可編程著色器單元可以處理該數(shù)據(jù)并對圖形數(shù)據(jù)執(zhí)行專門的操作。著色器 可包括例如,頂點著色器、幾何著色器和像素著色器。
單個著色器可以接收著色器常量的不同組合,并且取決于所提供的特定著 色器常量的組合,由著色器生成的輸出將變化。這些著色器常量可以指定,例 如如何組合像素、如何讀入和讀出數(shù)據(jù)、以及在紋理的情況下如何從該紋理中 提取值。著色的過程是計算密集型的,并且是復雜的過程。當這些特定著色器 在圖形流水線中操作時,由于發(fā)生在每一階段的操作,存在有規(guī)律的瓶頸。
"狀態(tài)"指的是由著色器程序解釋的資源。在任何給定實例下,圖形流水 線包含大量的動態(tài)狀態(tài)(渲染狀態(tài)、著色器、著色器常量變量、資源/存儲器綁 定等)。狀態(tài)的不同組合允許各種模擬材料和視覺效果。
該狀態(tài)的一個分量是在執(zhí)行著色器程序之前需要被綁定到GPU的一組著 色器常量。由于用于實現(xiàn)圖形流水線的硬件在任何給定實例下可以僅處于一種 配置,因此期望的是減少設(shè)置狀態(tài)(例如,著色器常量)和向GPU發(fā)出命令 所花費的時間。某些著色器利用了保存著色器常量的組或聚集的常量緩沖區(qū)(而非常量寄 存器)。常量緩沖區(qū)可以允許更迅速地將著色器常量設(shè)置到GPU,因為著色器
常量的聚集被分組在一起。
盡管有這些進步,但是仍期望高效地管理狀態(tài)以避免冗余的求值和設(shè)備狀 態(tài)修改。例如,期望提供用于高效地安排在不同著色器處使用的常量緩沖區(qū)(或 其它資源)以便更高效地將狀態(tài)設(shè)置到GPU的技術(shù)。
概述
提供了用于重新配置包括多個資源的依賴性樹的技術(shù)。該依賴性樹跟蹤不 同著色器資源之間的關(guān)系或依賴性。每一特定資源被綁定到該依賴性樹中的父 對象的槽。根據(jù)這些技術(shù),掃描該依賴性樹中的每一依賴性,并且計算與該依 賴性樹的每一不同重新配置(著色器的重新映射或重新構(gòu)建)相關(guān)聯(lián)的成本。
依賴性樹的每一重新配置改變特定資源(CB)所綁定到的具體槽。然后可以
選擇減少或最小化用于在更高級狀態(tài)之間轉(zhuǎn)換的設(shè)備重新配置的數(shù)量的該依 賴性樹的特定重新配置。換言之,可以選擇最小化需要重新綁定以在當前加載 的著色器之間轉(zhuǎn)換/切換的槽的數(shù)量的依賴性樹的特定重新配置。在一個實現(xiàn) 中,這些技術(shù)可以對于離線內(nèi)容生成和存儲來執(zhí)行(例如,如果著色器設(shè)置是 事先已知的,則分析著色器,重新映射依賴性,然后將著色器保存回盤)。在 一個替換實現(xiàn)中,在應(yīng)用程序運行時/加載時動態(tài)地執(zhí)行該方法(例如,如果著 色器設(shè)置事先未知)。
提供本概述以便以簡化的形式介紹將在以下詳細描述中進一步描述的一 些概念。本概述并不旨在標識出所要求保護的主題的關(guān)鍵特征或必要特征,也 不旨在用于限制所要求保護的主題的范圍。
附圖簡述
用于優(yōu)化圖形流水線的性能的系統(tǒng)和方法參考附圖來進一步描述,附圖
中
圖1是表示具有其中可實現(xiàn)本發(fā)明的各種計算設(shè)備的示例性網(wǎng)絡(luò)環(huán)境的
框圖;圖2是表示其中可實現(xiàn)本發(fā)明的示例性非限制計算環(huán)境的框圖; 圖3示出了包括圖形子單元的示例性圖形系統(tǒng),該圖形子單元包括圖形處 理單元(GPU)和用于相關(guān)聯(lián)的圖形流水線的示例性硬件配置。
圖4是表示公共著色器核的硬件和軟件組件的示例性、非限制性實施例的
框圖5A示出了依賴性樹的示例性、非限制性框圖5B是示出一個示例性、非限制性圖形流水線中多個常量緩沖區(qū)對多個 不同著色器程序的分配的示例性、非限制性框圖6示出了圖形流水線中用于最優(yōu)地將資源綁定到與著色器相關(guān)聯(lián)的特 定槽的示例性、非限制性流程圖7示出了用于計算公共資源/槽關(guān)聯(lián)的示例性、非限制性流程圖8示出了用于確定資源/槽綁定的示例性、非限制性流程圖;以及
圖9示出了用于計算關(guān)于將每一資源綁定到第一個槽的成本的示例性、非
限制性流程圖。 詳細描述
以下詳細描述本質(zhì)上僅是示例性的,而非旨在限制本發(fā)明或本申請以及本 發(fā)明的用途。在此使用的詞語"示例性"意味著"用作示例、實例或說明"。 在此被描述為"示例性"的任何實現(xiàn)并不一定要被解釋為相比其它實現(xiàn)更優(yōu)選 或有利。以下所描述的所有實現(xiàn)都是被提供來使本領(lǐng)域的技術(shù)人員能夠做出或 使用本發(fā)明的示例性實現(xiàn),而非旨在限制由所附權(quán)利要求書所定義的本發(fā)明的 范圍。此外,沒有任何意圖受到以上背景、簡要概述或以下詳細描述中所提出 的任何所表達的或蘊含的理論的綁定。
術(shù)語
如此處所使用的,術(shù)語"著色器"可用于一般指GPU中執(zhí)行著色的硬件 子單元,或指被下載到GPU的、隨后被加載到例如寄存器存儲等存儲器的、 由著色器(硬件)用來執(zhí)行著色的指令或令牌集。術(shù)語"著色器"也可以指一 起工作的兩者。在結(jié)合術(shù)語"著色器"還使用了術(shù)語"子單元"的情況下,術(shù)
7的是GPU中執(zhí)行與著色相關(guān)聯(lián)的處理的子單元。 術(shù)語"著色器程序" 一般可以指駐留并運行在圖形流水線中、可用于在3D屏 幕上環(huán)境中幫助確定/定義圖像或?qū)ο蟮淖罱K的屏幕上表面特性的計算機程序 或進程。"著色器"可以每秒執(zhí)行十億次計算,以執(zhí)行其特定任務(wù)。
如此處所使用的,術(shù)語"資源"可以指著色器程序使用的輸入,并且可包 括例如紋理、采樣器、常量緩沖區(qū)、或著色器程序所使用的任何其它資源。
如此處所使用的,術(shù)語"著色器常量"可以指被饋送到著色器程序的不同 參數(shù)或變量,其允許著色器程序基于所使用的特定著色器常量來產(chǎn)生不同結(jié) 果。著色器程序可以接收關(guān)于每一著色器常量的一定范圍的不同值。著色器常 量變量在該著色器的調(diào)用期間不改變值。
概覽
提供了用于跟蹤著色器常量的運行時使用模式,然后生成關(guān)于著色器常量 的使用模式的使用模式數(shù)據(jù)的技術(shù)。該使用模式數(shù)據(jù)然后可以被饋送到優(yōu)化算 法以有效地布置數(shù)據(jù)以獲得給定特定試探下的最大性能。所考慮的因素包括, 例如值的客戶機更新的頻率、特定著色器的使用、以及所得緩沖區(qū)的大小和數(shù)
示例性聯(lián)網(wǎng)和分布式環(huán)境
本領(lǐng)域的普通技術(shù)人員可以理解,本發(fā)明可以結(jié)合任何計算機或可作為計 算機網(wǎng)絡(luò)的一部分來部署的其它客戶機或服務(wù)器設(shè)備來實現(xiàn),或可在分布式計 算環(huán)境中實現(xiàn)。在這一點上,本發(fā)明涉及任何計算機系統(tǒng)或環(huán)境,其具有任意 數(shù)目的存儲器或存儲單元,以及發(fā)生在任意數(shù)目的存儲單元或巻上的任意數(shù)目 的應(yīng)用程序和進程,它們可結(jié)合根據(jù)本發(fā)明的用于圖形流水線的非限制性實現(xiàn) 的過程來使用。本發(fā)明可應(yīng)用于具有部署在具有遠程或本地存儲的網(wǎng)絡(luò)環(huán)境或 分布式計算環(huán)境中的服務(wù)器計算機和客戶計算機的環(huán)境。本發(fā)明也可應(yīng)用于具
有編程語言功能、用于生成、接收和發(fā)送關(guān)于遠程或本地服務(wù)的信息的解釋和 執(zhí)行能力的獨立計算設(shè)備。在游戲環(huán)境中,圖形流水線尤其與在網(wǎng)絡(luò)或分布式 計算環(huán)境中操作的那些計算設(shè)備相關(guān),且因此根據(jù)本發(fā)明的圖形流水線技術(shù)在這些環(huán)境中可以用最大的功效來應(yīng)用。
分布式計算通過計算設(shè)備和系統(tǒng)之間的交換提供了計算機資源和服務(wù)的
共享。這些資源和服務(wù)包括信息的交換、文件的高速緩存存儲和磁盤存儲。分布式計算利用網(wǎng)絡(luò)連接,允許客戶機利用它們的集體力量來使整個企業(yè)受益。就此,各種設(shè)備可以含有其中蘊含本發(fā)明的圖形流水線過程的應(yīng)用程序、對象或資源。
圖1提供了示例性的網(wǎng)絡(luò)化或分布式計算環(huán)境的示意圖。分布式計算環(huán)境
包括計算對象10a、 10b等,以及計算對象或設(shè)備110a、 110b、 110c等。這些
對象可包括程序、方法、數(shù)據(jù)存儲、可編程邏輯等等。對象可包括諸如PDA、音頻/視頻設(shè)備、MP3播放器、個人計算機等的相同或不同設(shè)備的各部分。每一對象可通過通信網(wǎng)絡(luò)14與另一對象通信。該網(wǎng)絡(luò)可以包括向圖2A的系統(tǒng)提供服務(wù)的其它計算對象和計算設(shè)備,且可以表示多個互連的網(wǎng)絡(luò)。根據(jù)本發(fā)明的一方面,每一對象10a、 10b等,或110a、 110b、 110c等,可包含可利用請求使用根據(jù)本發(fā)明的圖形流水線過程的API、或其它對象、軟件、固件和/或硬件的應(yīng)用程序。
還可以理解,諸如110c等對象可以主存在另一計算設(shè)備10a、 10b等或110a、 110b等上。因此,盡管所示的物理環(huán)境可以將所連接的設(shè)備示為計算機,但是這樣的圖示僅是示例性的,并且該物理環(huán)境可以被替換地描述或描繪成含有諸如PDA、電視機、MP3播放器等的各種數(shù)字設(shè)備,以及諸如接口、 COM對象等軟件對象。
存在支持分布式計算環(huán)境的各種系統(tǒng)、組件和網(wǎng)絡(luò)配置。例如,計算系統(tǒng)可以由有線或無線系統(tǒng)、本地網(wǎng)絡(luò)或廣泛分布的網(wǎng)絡(luò)連接在一起。當前,許多網(wǎng)絡(luò)耦合至因特網(wǎng),后者為廣泛分布的計算提供了基礎(chǔ)結(jié)構(gòu)并包含許多不同的網(wǎng)絡(luò)。任何基礎(chǔ)結(jié)構(gòu)都可用于根據(jù)本發(fā)明的圖形流水線附帶地進行的示例性通信。
在家庭網(wǎng)絡(luò)環(huán)境中,有至少四個全異的網(wǎng)絡(luò)傳輸媒體,其每一個可支持一種唯一的協(xié)議,這些媒體如電力線、數(shù)據(jù)(無線和有線)、語音(如,電話)和娛樂媒體。諸如電燈開關(guān)和電器設(shè)備等大多數(shù)家庭控制設(shè)備可使用電力線來連接。數(shù)據(jù)服務(wù)可通過寬帶(如,DSL或電纜調(diào)制解調(diào)器)進入家庭,并可在家庭內(nèi)使用無線(如,HomeRF或802.1 IB)或有線(如,家庭PNA、 Cat 5、
以太網(wǎng)、甚至是電力線)連接來訪問。語音話務(wù)可通過有線(如,Cat3)或無線(如,蜂窩電話)進入家庭,并可在家庭中使用Cat3連線來分布。娛樂媒體或其它圖形數(shù)據(jù)可通過衛(wèi)星或電纜進入家庭,并通常在家庭中使用同軸電纜來分布。IEEE 1394和DVI也是用于媒體設(shè)備群集的數(shù)字互聯(lián)??勺鳛閰f(xié)議標準浮現(xiàn)的所有這些網(wǎng)絡(luò)環(huán)境和其它環(huán)境可被互聯(lián)來形成諸如內(nèi)聯(lián)網(wǎng)等可通過因特網(wǎng)連接到外部世界的網(wǎng)絡(luò)。簡言之,存在用于存儲和傳輸數(shù)據(jù)的各種不同的源,且因此,進一步而言,計算設(shè)備需要共享諸如關(guān)于利用根據(jù)本發(fā)明的圖形流水線的程序?qū)ο笏L問或利用的數(shù)據(jù)等數(shù)據(jù)的方式。
因特網(wǎng)通常指使用TCP/IP協(xié)議套件的網(wǎng)絡(luò)和網(wǎng)關(guān)的集合,該協(xié)議在計算機聯(lián)網(wǎng)領(lǐng)域中是公知的。TCP/IP是"傳輸控制協(xié)議/網(wǎng)際協(xié)議"的縮寫。因特網(wǎng)可被描述為由執(zhí)行允許用戶通過網(wǎng)絡(luò)交互和共享信息的聯(lián)網(wǎng)協(xié)議的計算機互連的地理上分布的遠程計算機網(wǎng)絡(luò)的系統(tǒng)。由于這類廣泛分布的信息共享,諸如因特網(wǎng)等遠程網(wǎng)絡(luò)至今一般發(fā)展成一種開放式系統(tǒng),開發(fā)者可對該開放式系統(tǒng)設(shè)計用于執(zhí)行專用操作或服務(wù)的軟件應(yīng)用程序,在本質(zhì)上沒有限制。
由此,網(wǎng)絡(luò)基礎(chǔ)結(jié)構(gòu)啟用了諸如客戶機/服務(wù)器、對等或混合體系結(jié)構(gòu)等大量網(wǎng)絡(luò)拓樸結(jié)構(gòu)。"客戶機"是使用與它無關(guān)的另一類或組的服務(wù)的一個類或組中的成員。由此,在計算時,客戶機是進程,即,粗略地而言是一組請求由另一程序提供的服務(wù)的指令或任務(wù)??蛻魴C進程利用所請求的服務(wù),而不必"知道"有關(guān)其它程序或服務(wù)本身的任何工作細節(jié)。在客戶機/服務(wù)器體系結(jié)構(gòu)中,尤其在網(wǎng)絡(luò)化系統(tǒng)中,客戶機通常是訪問由例如服務(wù)器等另一計算機提供的共享的網(wǎng)絡(luò)資源的計算機。在圖1的示例中,計算機110a、 110b等可以被認為是客戶機,而計算機10a、 10b等可以被認為是服務(wù)器,其中服務(wù)器10a、10b等維護隨后被復制到客戶計算機110a、 110b等的數(shù)據(jù),然而任何計算機都可被認為是客戶機、服務(wù)器或兩者,取決于環(huán)境。這些計算設(shè)備中的任一個可以處理數(shù)據(jù)或請求可蘊含對本發(fā)明中的圖形流水線的實現(xiàn)專用的圖形編程技術(shù)的服務(wù)或任務(wù)。
服務(wù)器通常是可通過諸如因特網(wǎng)等遠程網(wǎng)絡(luò)或本地網(wǎng)絡(luò)訪問的遠程計算機系統(tǒng)??蛻魴C進程可以在第一計算機系統(tǒng)中活動,而服務(wù)器進程可以在第二
10計算機系統(tǒng)中活動,它們通過通信介質(zhì)彼此通信,從而提供分布式功能并允許多個客戶機利用服務(wù)器的信息收集能力。根據(jù)圖形流水線的圖形編程技術(shù)所利用的任何軟件對象可以分布在多個計算設(shè)備或?qū)ο笊稀?br>
客戶機和服務(wù)器利用由協(xié)議層提供的功能來彼此通信。例如,超文本傳輸
協(xié)議(HTTP)是結(jié)合萬維網(wǎng)(WWW),即"Web"使用的常見協(xié)議。"通常,諸如網(wǎng)際協(xié)議(IP)地址或諸如統(tǒng)一資源定位器(URL)等其它引用的計算機網(wǎng)絡(luò)地址可以用于彼此標識服務(wù)器或客戶計算機。網(wǎng)絡(luò)地址可以被稱為URL地址??梢酝ㄟ^通信介質(zhì)來提供通信,例如客戶機和服務(wù)器可以通過TCP/IP連接來彼此耦合以進行大容量通信。
由此,圖1示出了其中可采用本發(fā)明的具有通過網(wǎng)絡(luò)/總線與客戶機計算機通信的服務(wù)器的示例性網(wǎng)絡(luò)化或分布式環(huán)境。更詳細而言,根據(jù)本發(fā)明,多個服務(wù)器10a、 10b等經(jīng)由通信網(wǎng)絡(luò)/總線14互連,通信網(wǎng)絡(luò)/總線14可以是LAN、 WAN、內(nèi)聯(lián)網(wǎng)、因特網(wǎng)等,它具有多個客戶機或遠程計算設(shè)備110a、110b、 110c、 110d、 110e等,如便攜式計算機、手持式計算機、瘦客戶機、聯(lián)網(wǎng)設(shè)備或其它設(shè)備,如VCR、 TV、烤箱、燈、加熱器等等。由此,構(gòu)想本發(fā)明可應(yīng)用于對于其期望實現(xiàn)采用本發(fā)明的圖形流水線的圖形接口的任何計算設(shè)備。
例如,在其中通信網(wǎng)絡(luò)/總線14是因特網(wǎng)的網(wǎng)絡(luò)環(huán)境中,服務(wù)器10a、 10b等可以是客戶機110a、 110b、 110c、 110d、 110e等通過諸如HTTP等多種已知協(xié)議中的任一種與其通信的web服務(wù)器。服務(wù)器10a、 10b等也可擔當客戶機110a、 110b、 110c、 110d、 110e等,這是分布式計算環(huán)境的特性。通信可以在適當時是有線或無線的??蛻魴C設(shè)備110a、 110b、 UOc、 110d、 110e等可以通過或不通過通信網(wǎng)絡(luò)/總線14通信,并可具有與其相關(guān)聯(lián)的獨立通信。例如,在TV或VCR的情況下,可以有或沒有其控制的網(wǎng)絡(luò)化方面。每一客戶計算機110a、 110b、 110c、 110d、 110e等以及服務(wù)器計算機10a、 10b等可以具備各種應(yīng)用程序模塊或?qū)ο?35,并具有對各種類型的存儲元件或?qū)ο蟮倪B接或訪問,在這些存儲元件或?qū)ο笊峡蓛Υ嫖募驍?shù)據(jù)流,或者可向其下載、發(fā)送或遷移文件或數(shù)據(jù)流的各部分。計算機10a、 10b、 110a、 110b等中的任何一個或多個可負責維護并更新數(shù)據(jù)庫20或其它存儲元件,諸如用于儲存根據(jù)本發(fā)明處理的數(shù)據(jù)的數(shù)據(jù)庫或存儲器20。由此,本發(fā)明可以用于具有可訪問
計算機網(wǎng)絡(luò)/總線14并與其交互的客戶計算機110a、 110b等,以及可與客戶機 計算機110a、 110b等交互的服務(wù)器計算機10a、 10b等,以及其它類似的設(shè)備 111和數(shù)據(jù)庫20的計算機網(wǎng)絡(luò)環(huán)境中。
示例性計算設(shè)備
圖2及以下討論旨在提供可結(jié)合其來實現(xiàn)本發(fā)明的合適的計算環(huán)境的簡 要概括描述。然而,應(yīng)當理解,構(gòu)想了所有種類的手持式、便攜式和其它計算 設(shè)備和計算對象來用于本發(fā)明,即,在計算環(huán)境中存在GPU的任何地方。盡 管以下描述了通用計算機,但是這僅是一個示例,并且本發(fā)明可以用具有網(wǎng)絡(luò) /總線互操作性和交互的痩客戶機來實現(xiàn)。由此,本發(fā)明可在其中蘊含了極少或 最小客戶機資源的聯(lián)網(wǎng)的主存服務(wù)的環(huán)境,例如其中客戶機設(shè)備僅用作到網(wǎng)絡(luò) /總線的接口,如置于電器中的對象的聯(lián)網(wǎng)環(huán)境中實現(xiàn)。本質(zhì)上,在可存儲數(shù)據(jù) 或可從中檢索數(shù)據(jù)或?qū)?shù)據(jù)發(fā)送到另一計算機的任何地方都是用于根據(jù)本發(fā) 明的圖形優(yōu)化技術(shù)的操作的合乎需要的或合適的環(huán)境。
盡管并非所需,但本發(fā)明可以經(jīng)由操作系統(tǒng)來實現(xiàn),以供設(shè)備或?qū)ο蟮姆?務(wù)開發(fā)者使用,和/或被包括在結(jié)合用于本發(fā)明的圖形流水線的圖形編程技術(shù)操 作的應(yīng)用軟件中。軟件可以在諸如程序模塊等由諸如客戶機工作站、服務(wù)器或 其它設(shè)備等一個或多個計算機執(zhí)行的計算機可執(zhí)行指令的通用上下文中描述。 一般而言,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、 對象、組件、數(shù)據(jù)結(jié)構(gòu)等。通常,程序模塊的功能可以在各個實施例中按需進 行組合或分布。此外,本領(lǐng)域的技術(shù)人員可以理解,本發(fā)明可以用其它計算機 系統(tǒng)配置和協(xié)議來實施。適用于本發(fā)明的其它眾所周知的計算系統(tǒng)、環(huán)境和/ 或配置包括但不限于,個人計算機(PC)、自動提款機、服務(wù)器計算機、手持 式或膝上型設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、可編程消費者電子設(shè) 備、網(wǎng)絡(luò)PC、電器、燈、環(huán)境控制元件、小型機、大型計算機等等。本發(fā)明 也可以在其中任務(wù)由通過通信網(wǎng)絡(luò)/總線或其它數(shù)據(jù)傳輸機制鏈接的遠程處理
設(shè)備來執(zhí)行的分布式計算環(huán)境中實踐。在分布式計算環(huán)境中,程序模塊可以位 于包括存儲器存儲設(shè)備的本地和遠程計算機存儲介質(zhì)中,并且客戶機節(jié)點可以進而用作服務(wù)器節(jié)點。
因此,圖2示出了其中可實現(xiàn)本發(fā)明的合適的計算系統(tǒng)環(huán)境100的一個示 例,盡管如上所述,計算系統(tǒng)環(huán)境100僅為合適的計算環(huán)境的一個示例,并非 對本發(fā)明的使用范圍或功能提出任何局限。也不應(yīng)該把計算環(huán)境IOO解釋為對 示例性操作環(huán)境100中示出的任一組件或其組合有任何依賴性或要求。
參考圖2,用于實現(xiàn)本發(fā)明的示例性系統(tǒng)包括計算機110形式的通用計算 設(shè)備。計算機110的組件可以包括,但不限于,處理單元120、系統(tǒng)存儲器130 和將包括系統(tǒng)存儲器在內(nèi)的各種系統(tǒng)組件耦合至處理單元120的系統(tǒng)總線 121。系統(tǒng)總線121可以是幾種類型的總線結(jié)構(gòu)中的任何一種,包括存儲器總 線或存儲控制器、外圍總線、以及使用各種總線體系結(jié)構(gòu)中的任一種的局部總 線。作為示例,而非限制,這樣的體系結(jié)構(gòu)包括工業(yè)標準體系結(jié)構(gòu)(ISA)總 線、微通道體系結(jié)構(gòu)(MCA)總線、增強型ISA (EISA)總線、視頻電子技 術(shù)標準協(xié)會(VESA)局部總線和外圍部件互連(PCI)總線(也稱為Mezzanine 總線)。
計算機110通常包括各種計算機可讀介質(zhì)。計算機可讀介質(zhì)可以是能由計 算機110訪問的任何可用介質(zhì),而且包含易失性、非易失性介質(zhì)以及可移動和 不可移動介質(zhì)。作為示例,而非限制,計算機可讀介質(zhì)可以包括計算機存儲介 質(zhì)和通信介質(zhì)。計算機存儲介質(zhì)包括以用于存儲諸如計算機可讀指令、數(shù)據(jù)結(jié) 構(gòu)、程序模塊或其它數(shù)據(jù)等信息的任何方法或技術(shù)實現(xiàn)的易失性和非易失性、 可移動和不可移動介質(zhì)。計算機存儲介質(zhì)包括但不限于,RAM、 ROM、 EEPROM、閃存或其它存儲器技術(shù)、CDROM、數(shù)字多功能盤(DVD)或其它 光盤存儲、磁盒、磁帶、磁盤存儲或其它磁存儲設(shè)備、或可以用來儲存所期望 的信息并可由計算機110訪問的任一其它介質(zhì)。通信介質(zhì)通常以諸如載波或其 它傳輸機制等已調(diào)制數(shù)據(jù)信號來體現(xiàn)計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或 其它數(shù)據(jù),并包括任意信息傳送介質(zhì)。術(shù)語"己調(diào)制數(shù)據(jù)信號"指的是其一個 或多個特征以在信號中編碼信息的方式被設(shè)定或更改的信號。作為示例而非限 制,通信介質(zhì)包括有線介質(zhì),諸系統(tǒng)存儲器130包括易失性和/或非易失性存儲器形式的計算機存儲介質(zhì),
如只讀存儲器(ROM) 131和隨機存取存儲器(RAM) 132?;据斎?輸出系 統(tǒng)133 (BIOS)包括如在啟動時幫助在計算機110內(nèi)的元件之間傳輸信息的基 本例程,它通常儲存在ROM131中。RAM132通常包含處理單元120可以立 即訪問和/或目前正在其上操作的數(shù)據(jù)和/或程序模塊。作為示例而非局限,圖 2示出了操作系統(tǒng)134、應(yīng)用程序135、其它程序模塊136和程序數(shù)據(jù)137。
計算機110還可以包括其它可移動/不可移動、易失性/非易失性計算機存 儲介質(zhì)。僅作為示例,圖2示出了從不可移動、非易失性磁介質(zhì)中讀取或向其 寫入的硬盤驅(qū)動器141,從可移動、非易失性磁盤152中讀取或向其寫入的磁 盤驅(qū)動器151,以及從諸如CD-ROM或其它光學介質(zhì)等可移動、非易失性光盤 156中讀取或向其寫入的光盤驅(qū)動器155??梢栽谑纠圆僮鳝h(huán)境中使用的其 它可移動/不可移動、易失性/非易失性計算機存儲介質(zhì)包括但不限于,磁帶盒、 閃存卡、數(shù)字多功能盤、數(shù)字錄像帶、固態(tài)RAM、固態(tài)ROM等等。硬盤驅(qū) 動器141通常由不可移動存儲器接口,諸如接口 140連接至系統(tǒng)總線121,磁 盤驅(qū)動器151和光盤驅(qū)動器155通常由可移動存儲器接口,諸如接口 150連接 至系統(tǒng)總線121。
上文討論并在圖2中示出的驅(qū)動器及其關(guān)聯(lián)的計算機存儲介質(zhì)為計算機 110提供了計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其它數(shù)據(jù)的存儲。例如在 圖2中,硬盤驅(qū)動器141被示為存儲操作系統(tǒng)144、應(yīng)用程序145、其它程序 模塊146和程序數(shù)據(jù)147。注意,這些組件可以與操作系統(tǒng)134、應(yīng)用程序135、 其它程序模塊136和程序數(shù)據(jù)137相同,也可以與它們不同。操作系統(tǒng)144、 應(yīng)用程序145、其它程序模塊146和程序數(shù)據(jù)147在這里被標注了不同的標號 是為了說明至少它們是不同的副本。用戶可以通過輸入設(shè)備,如鍵盤162和定 點設(shè)備161 (通常指鼠標、跟蹤球或觸摸板)向計算機110輸入命令和信息。 其它輸入設(shè)備(未示出)可以包括話筒、操縱桿、游戲手柄、圓盤式衛(wèi)星天線、 掃描儀等。這些和其它輸入設(shè)備通常由耦合至系統(tǒng)總線121的用戶輸入接口 160連接到處理單元120,但是也可由諸如并行端口、游戲端口或通用串行總 線(USB)之類的其它接口和總線結(jié)構(gòu)連接。諸如北橋(Northbridge)等圖形 接口 182也可連接到系統(tǒng)總線121。北橋是與CPU或主機處理單元120通信的芯片組,并承擔了加速圖形端口 (AGP)通信的責任。 一個或多個圖形處理單
元(GPU) 184可以與圖形接口 182通信。在這一點上,GPU184—般包括諸 如寄存器存儲等片上存儲器存儲,并且GPU 184與視頻存儲器186通信,其中 本發(fā)明的應(yīng)用程序變量可對其發(fā)生影響。然而,GPU184僅是協(xié)處理器的一個 示例,并且因此在計算機110中可以包括各種協(xié)處理設(shè)備,并且可以包括諸如 像素和頂點著色器等各種過程著色器。監(jiān)視器191或其它類型的顯示設(shè)備也通 過接口,如視頻接口 190連接至系統(tǒng)總線121,而視頻接口 190又與視頻存儲 器186通信。除監(jiān)視器191之外,計算機也可包括其它外圍輸出設(shè)備,如揚聲 器197和打印機196,它們通過輸出外圍接口 195連接。
計算機110可使用到一個或多個諸如遠程計算機180這樣的遠程計算機的 邏輯連接在網(wǎng)絡(luò)化或分布式環(huán)境中操作。遠程計算機180可以是個人計算機、 服務(wù)器、路由器、網(wǎng)絡(luò)PC、對等設(shè)備或其它常見的網(wǎng)絡(luò)節(jié)點,并且通常包括 許多或所有以上相對于計算機110所描述的元件,盡管在圖2中僅示出了存儲 器存儲設(shè)備181。圖2中所示的邏輯連接包括局域網(wǎng)(LAN) 171和廣域網(wǎng) (WAN) 173,但也可以包括其它網(wǎng)絡(luò)/總線。這樣的聯(lián)網(wǎng)環(huán)境在家庭、辦公室、 企業(yè)范圍計算機網(wǎng)絡(luò)、內(nèi)聯(lián)網(wǎng)和因特網(wǎng)中是常見的。
當在LAN聯(lián)網(wǎng)環(huán)境中使用時,計算機110通過網(wǎng)絡(luò)接口或適配器170連 接至LAN171。當在WAN聯(lián)網(wǎng)環(huán)境中使用時,計算機110通常包括調(diào)制解調(diào) 器172或用于通過諸如因特網(wǎng)等WAN 173建立通信的其它裝置。調(diào)制解調(diào)器 172可以是內(nèi)置或外置的,它可以通過用戶輸入接口 160或其它合適的機制連 接至系統(tǒng)總線121。在網(wǎng)絡(luò)化環(huán)境中,相對于計算機110所描述的程序模塊或 其部分可被儲存在遠程存儲器存儲設(shè)備中。作為示例而非局限,圖2示出遠程 應(yīng)用程序185駐留在存儲器設(shè)備181上。應(yīng)該理解,所示網(wǎng)絡(luò)連接是示例性的, 并且可以使用在計算機之間建立通信鏈路的其它手段。
示例性分布式計算框架或體系結(jié)構(gòu)
鑒于個人計算和因特網(wǎng)的交匯,已經(jīng)開發(fā)且正在開發(fā)各種分布式計算框 架。個人和商業(yè)用戶同樣地擁有用于應(yīng)用程序和計算設(shè)備的無縫的互操作和啟 用web的接口,使得計算活動越來越面向web瀏覽器和網(wǎng)絡(luò)。
15例如,MICROSOFT⑧的托管代碼平臺,即.NET包括服務(wù)器、諸如基于 web的數(shù)據(jù)存儲等構(gòu)件塊服務(wù)、以及可下載設(shè)備軟件。 一般而言,.NET平臺 提供(1)令整個范圍的計算設(shè)備共同工作并在所有設(shè)備上自動更新并同步用 戶信息的能力,(2)提高的網(wǎng)頁交互能力,通過大量使用XML而不是HTML 來實現(xiàn),(3)從用于各種應(yīng)用,如電子郵件,或軟件,如Office.NET的管理 的中央起點到用戶的具有產(chǎn)品和服務(wù)的定制訪問和傳送的特點的在線服務(wù), (4)中央化數(shù)據(jù)存儲,將增加對信息訪問以及用戶和設(shè)備間的信息同步的效 率和簡易性,(5)集成各種通信介質(zhì),如電子郵件、傳真和電話的能力,(6) 對開發(fā)員來說,創(chuàng)建可重復使用模塊的能力,借此提高生產(chǎn)力并降低編程錯誤 數(shù),以及(7)還有許多其它跨平臺和語言綜合特性。
盡管此處的某些示例性實施例是結(jié)合駐留在計算設(shè)備上的軟件來描述的, 但本發(fā)明的一個或多個部分也可以通過操作系統(tǒng)、應(yīng)用程序編程接口 (API) 或"中間人"對象、控制對象、硬件、固件、中間語言指令或?qū)ο蟮葋韺崿F(xiàn), 使得方法可以被包括在由諸如.NET代碼等托管代碼啟用的所有語言和服務(wù) 中,以及在其它分布式計算框架中,在其中得到支持或經(jīng)由它們來訪問。
示例性3D圖形系統(tǒng)的組件
圖3示出了包括諸如視頻卡等圖形子單元的示例性圖形系統(tǒng),該圖形子單 元包括圖形處理單元(GPU) 384'和用于相關(guān)聯(lián)的圖形流水線384'-1的示例性 硬件配置。特別地,示例性3D圖形系統(tǒng)300可包括中央處理單元(CPU) 320 和圖形卡,該圖形卡包括圖形處理器單元(GPU) 384'(有時稱為視覺處理單 元(VPU)),而GPU 384'包括圖形流水線384'-1 (有時稱為"渲染流水線")。 GPU 384'可以例如通過AGP或PCI Express總線耦合到CPU 320和主RAM。
CPU320—般可以是任何處理器,諸如單個芯片、運行多個核(例如,處 理器)的多核處理器,諸如可以同時處理或執(zhí)行若干(例如, 一個或多個)線 程的同時多線程化(SMT)處理器。如此處所使用的,術(shù)語"線程"指的是單 獨的指令序列。由此,同時多線程化指的是單個處理器同時處理若干線程的能 力。CPU 320中的每個核可具有單指令多數(shù)據(jù)(SIMD)單元,作為對處理器 指令集的擴展。該擴展可以包含當被特別地編碼來利用指令集時幫助加速整型和浮點密集應(yīng)用程序的特殊指令。渲染3D圖形時所涉及的計算可以在CPU320 上是數(shù)學上密集且相當繁重的。為了減輕CPU 320上的負擔,提供了 GPU 384' 來幫助計算機更高效地運行。
在圖形被輸出到光柵顯示設(shè)備(例如,計算機監(jiān)視器191)之前,用于生 成這些圖形的信息通過GPU 384'及其圖形流水線384'-1 。 GPU 384'在硬件中實 現(xiàn)圖形流水線384'-l以每秒執(zhí)行數(shù)百萬的幾何計算。
GPU384'在操縱和顯示圖形方面是非常高效的,且其高度并行的結(jié)構(gòu)使其 對于各種復雜算法比典型的CPU更有效。GPU 384'以使得圖元操作比用主機 CPU 320直接繪制到屏幕運行快得多的方式來實現(xiàn)多個圖元操作。將該負擔從 CPU 320中解除意味著計算機的CPU 320不必如此努力地工作來處理圖形數(shù)據(jù) (例如,釋放了可用于其它作業(yè)的周期)。通過將大部分圖形功能卸載到GPU 384', CPU能夠執(zhí)行甚至更多的計算以實現(xiàn)專用的、實時的圖形環(huán)境。GPU384' 負責在光柵顯示設(shè)備(例如,計算機監(jiān)視器)上加速圖形元件的顯示(例如, 應(yīng)用了紋理和著色的多邊形)。GPU 384'處理原始幾何數(shù)據(jù)以最終在監(jiān)視器191 上將該信息表示為像素。圖形流水線384'-l接收3D場景的表示,通過使該表 示經(jīng)過多個處理階段來高效地處理該表示,并在監(jiān)視器191處將3D場景渲染 為2D光柵圖像。
GPU 384'可以被實現(xiàn)為被配置成處理實時2D和3D圖形的一個或多個獨 立的微處理器。GPU 384'可以位于單獨的圖形卡(來自主板)上,以處理2D 和/或3D計算機圖形然后渲染2D或3D圖像。GPU 384'可以直接訪問圖形卡 上的高性能VRAM?;蛘撸珿PU 384'可以通過將其集成到PC主板上的芯片之 一中,以使得GPU 384'可使用主存儲器作為幀緩沖區(qū)并使用CPU來幫助幀渲 染來實現(xiàn)。GPU 384'可以例如用作用于個人計算機或游戲控制臺的專用圖形/ 視頻渲染設(shè)備。
在3D圖形渲染中,圖形流水線384'-1指的是GPU 384'實現(xiàn)來將三維圖像 數(shù)據(jù)(例如,頂點、紋理和其它數(shù)據(jù))從應(yīng)用程序轉(zhuǎn)換成顯示在二維屏幕上的 實際圖像的各個處理階段(例如,步驟序列)。每一頂點提供的特性可包括, 例如x-y-z坐標、RGB值、半透明度、紋理、反射率和其它特性。
圖形流水線384'-l中的不同階段負責處理最初作為端點(頂點)或圖元的控制點處的特性提供的信息,以生成最終渲染的圖像。如此處所使用的,術(shù)語 "圖元"可以指形成單個3D實體的頂點的集合。最簡單的圖元是3D坐標系
統(tǒng)中的點的集合,被稱為點列表。3D圖形中的典型圖元是線和三角形。其它 類型的圖元可包括,例如線、線列表、線帶(line strip)、三角形、三角列表、 三角帶(triangle strip)以及三角扇(triangle fan)。通常,3D圖元是多邊形。 多邊形是由至少三個頂點描繪的閉合3D圖。最簡單的多邊形是三角形。三角 形可用于組成大多數(shù)多邊形,因為三角形中的所有三個頂點都保證是共面的。 三角形可用于形成大的、復雜的多邊形和網(wǎng)格。
在圖形流水線384'-l內(nèi),所有階段都是并行工作的。通過重新配置圖形流 水線384'-l,可以實現(xiàn)不同的視覺效果。例如,圖形流水線可接收要顯示的幾 何結(jié)構(gòu)(例如,三角列表),然后對其執(zhí)行必要的幾何變換(例如,旋轉(zhuǎn)、平 移等),為要顯示的幾何結(jié)構(gòu)計算色彩,然后渲染要顯示的幾何結(jié)構(gòu)。
流水線階段
一般而言,圖形流水線384'-1可以包括以下邏輯階段輸入組裝器(IA)、 頂點著色器384'-lai和384'-la2、具有相關(guān)聯(lián)的流輸出384'-2的幾何著色器 384'-la3、光柵化器384'-lc、像素著色器384'-1&4和輸出合并器(OM)。圖形 流水線384'-1可以被配置成優(yōu)化對資源的使用、平衡圖形流水線384'-1中的工 作負載、允許訪問具有遵守IEEE的整型或浮點值的計算的信息、以及提供附 加可編程性。
圖形流水線384'-1的示例性、非限制性實施例采用了動態(tài)可配置公共著色 器核,其包括可用各種配置來配置的多個單元或處理核384'-la。公共著色器核 通過在不需要作為流水線的一部分的著色器時重新配置或禁用該著色器來允 許簡化的優(yōu)化為相同的硬件單元(對不同著色器)提供負載平衡,由此為保持 活動的階段釋放了資源。
這些處理核384'-la可以取決于所執(zhí)行的特定應(yīng)用程序以各種模式被讀入 存儲器中并從存儲器中寫出。取決于其配置,單元384'-la的每一個可用于執(zhí) 行頂點著色器階段、幾何著色器階段和/或像素著色器階段。這允許公共著色器 核按需被調(diào)度到圖形流水線348'-l的不同階段(或功能塊)以按照最適合流水
18線384'-1所請求的任務(wù)的方式來分配像素著色器、幾何著色器和頂點著色器。 任何階段都可被動態(tài)地啟用或禁用,以及配置或重新配置,由此為活動的階段 釋放并重新專門化了資源。由此,可對于圖形芯片所要求的任務(wù)來優(yōu)化圖形芯 片的底層資源。
圖3所示的圖形流水線384'-l的特定配置包括多個共享的可編程核或公共 核元件384'-la,諸如頂點著色器384'-lai和384'-la2、具有相關(guān)聯(lián)的流輸出384'-2 的幾何著色器384'-la3、以及像素著色器384'-la4。這些不同的功能階段并行地 操作,從而擔當單獨的專用處理器。取決于該特定實現(xiàn),可以有圖3所示的更 多或更少的流水線階段。此外,在特定頂點和圖元數(shù)據(jù)的處理期間,在計算機 監(jiān)視器上顯示輸出之前,僅所示的某些流水線階段實際處理該數(shù)據(jù)。
輸入組裝器(IA)
圖形流水線384'-1從應(yīng)用程序接收傳入的圖元數(shù)據(jù)和頂點數(shù)據(jù),并在計 算機監(jiān)視器或屏幕上顯示輸出之前使其通過各個流水線階段。輸入組裝器(IA) 通過從頂點存儲器緩沖區(qū)和索引存儲器緩沖區(qū)中拉出源幾何結(jié)構(gòu)數(shù)據(jù)來將諸 如三角形、線或點等頂點數(shù)據(jù)引入到圖形流水線384'-l中。
可使用"未索引"或"已索引"渲染來產(chǎn)生從中取出存儲器中的頂點數(shù)據(jù) 的地址,隨后將結(jié)果組裝成頂點和圖元。
"未索引"渲染指的是從每一緩沖區(qū)綁定的起始偏移量開始的、對包含頂 點數(shù)據(jù)的頂點緩沖區(qū)的順序遍歷。頂點存儲器緩沖區(qū)(圖3中未示出)可從應(yīng) 用程序接收未變換的模型頂點,并將其存儲為頂點數(shù)據(jù)。緩沖區(qū)各自綁定到單 獨的輸入槽??缢芯彌_區(qū)的數(shù)據(jù)布局由輸入聲明來指定,其中每一條目定義 了具有輸入槽、結(jié)構(gòu)偏移量、數(shù)據(jù)類型以及目標寄存器(對于流水線中的第一
個活動著色器)的"元素"。頂點存儲器緩沖區(qū)可以包含任何頂點類型。頂點 數(shù)據(jù)可以來自多個緩沖區(qū),以"結(jié)構(gòu)陣列"的方式從每一緩沖區(qū)訪問。從取自 緩沖區(qū)的數(shù)據(jù)中構(gòu)造出給定的頂點序列。有各種圖元拓撲結(jié)構(gòu)可用于形成表示 圖元序列的頂點數(shù)據(jù)序列。示例拓撲結(jié)構(gòu)有,例如點列表、線列表、三角列表、 三角帶。
"已索引"渲染指的是從對緩沖區(qū)的起始偏移量開始的、對包含標量整數(shù)索引的單個緩沖區(qū)的順序遍歷。要由圖形流水線384'-1處理的數(shù)據(jù)也可被分配
一索引。索引存儲器緩沖區(qū)(圖3中未示出)從應(yīng)用程序接收原始的、已索引
的幾何圖元數(shù)據(jù),包括點、線、三角形和多邊形。這些幾何圖元可以在頂點數(shù)據(jù)中用索引存儲器緩沖區(qū)來引用。每一索引指示從包含頂點數(shù)據(jù)的緩沖區(qū)中的何處取出數(shù)據(jù)。索引存儲器緩沖區(qū)包含索引數(shù)據(jù),或稱索引,其是對頂點存儲器緩沖區(qū)的整數(shù)偏移量,并且用于使用從一組當前的數(shù)據(jù)輸入流中繪制已索引圖元的技術(shù)來渲染圖元。由于索引緩沖區(qū)包含索引,因此索引緩沖區(qū)不能在沒有對應(yīng)的頂點緩沖區(qū)的情況下使用。索引在多種情形中都可以是有用的。例如,索引值可在處理數(shù)據(jù)時例如用作視頻存儲器尋址方案的一部分(例如,索引可表示何處及何時檢索(和/或?qū)懭?視頻存儲器的各部分以進行處理)。下載到著色器的程序因此可以在檢索或?qū)懭胍曨l存儲器時以及在處理圖形數(shù)據(jù)時編程性地使用與圖形數(shù)據(jù)相關(guān)聯(lián)的索引值。
頂點著色器階段
輸入組裝器(IA)將數(shù)據(jù)發(fā)送到第一公共核384'-l&。在該實施例中,第一公共核384'-l&被配置為頂點著色器階段。頂點著色器階段經(jīng)由來自主機的程序?qū)樗惴ㄗ儞Q指定的頂點流(來自圖形流水線的視頻存儲器)進行操作或處理。特別地,頂點著色器可以檢索諸如統(tǒng)一變量和頂點屬性等各種輸入。統(tǒng)一變量是對每一著色器調(diào)用的常數(shù)值。相反,頂點屬性是諸如頂點位置等每一頂點的數(shù)據(jù)(變化變量的特殊情況)。
頂點著色器一般對單個輸入頂點操作,并產(chǎn)生單個輸出頂點,其中"頂點"指的是3D空間中通常使用x-、 y-和z-坐標由其位置來定義的交點。頂點著色器階段可允許每一幾何頂點在其被投影到屏幕上之前由短程序來處理。例如,頂點著色器階段可以通過定義計算向量空間變換和其它可線性化計算的技術(shù)來操縱3-D空間中的對象位置。例如,頂點著色器階段可以向各個頂點應(yīng)用位置、色彩和紋理化坐標的計算,并執(zhí)行諸如變換、蒙皮(ski皿ing)和照明等操作。頂點著色器的功能的某些示例包括一般的任意網(wǎng)格變形和頂點位移、為諸如紋理坐標變換等稍后的像素著色器計算可線性化屬性。
20鑲嵌器階段
數(shù)據(jù)然后可被發(fā)送到對該數(shù)據(jù)執(zhí)行鑲嵌的鑲嵌器384'-lb。本領(lǐng)域的技術(shù)人員可以理解,鑲嵌步驟是可任選的(如由虛線矩形所指示的),并且在某些實際實現(xiàn)中完全不出現(xiàn)。鑲嵌一般指的是涉及用一種或幾種類型的合適的平面
圖來覆蓋沒有間隙或重疊的有界限的幾何區(qū)域的過程。在鑲嵌器384'-lb之后,
在流水線中有另一公共核,該核可用于對數(shù)據(jù)執(zhí)行后鑲嵌頂點著色。在該實施例中,鑲嵌步驟是可任選的。
幾何著色器階段
第二個公共核之后是被配置為幾何著色器384'-la3的第三個公共核。幾何著色器384'-la3允許對圖元編程以及生成新的幾何結(jié)構(gòu)。幾何著色器384'-la3可以對不同類型的"圖元"輸入操作,包括頂點/點、線(兩個頂點的集合)、以及三角形(三條線的集合),并基于輸入的圖元在流水線內(nèi)生成新的幾何結(jié)構(gòu)。幾何著色器的輸入是對于全圖元的頂點(對于線是兩個頂點,對于三角形是三個頂點,對于點是單個頂點)加上對于邊相鄰圖元的頂點數(shù)據(jù)(對于線有另外兩個頂點,對于三角形有另外三個頂點)。例如,幾何著色器384'-1*可以接收一個圖元,并輸出零個、 一個或多個圖元。幾何著色器384'-la3可以輸出形成單個所選拓撲結(jié)構(gòu)的多個頂點。輸出的某些示例包括如三角帶、線帶或點列表的拓撲結(jié)構(gòu)。所發(fā)射的圖元的數(shù)量可以在幾何著色器384'-la3的任何調(diào)用中變化。
幾何著色器384'-la3可以取一個圖元,并輸出多個圖元,并可任選地處理諸如相鄰頂點等相鄰圖元。換言之,幾何著色器384'-la3允許不僅其自身對整個圖元操作,而且還在某些附加的附近頂點的上下文中允許該操作。例如,可以處理折線中的一個線段,同時能夠讀取該線段之前和之后的頂點。該能力(例如,處理圖元的相鄰頂點)的一種應(yīng)用是幾何著色器384'-133能夠在當前計算中考慮關(guān)于3-D幾何空間中的相鄰點的信息。
可在幾何著色器384'-la3中實現(xiàn)的算法可以包括點精靈(point sprite)或?qū)捑€鑲嵌、皮毛生成(fur/fin generation)、陰影體積(shadow volume)生成、對多個紋理立方體面的單遍渲染、以及將質(zhì)心坐標設(shè)置為圖元數(shù)據(jù)(使得像素著色器能夠執(zhí)行自定義屬性內(nèi)插)。
為執(zhí)行點精靈鑲嵌,著色器取單個頂點并生成四個頂點,或者代表四邊形的四個角的兩個輸出三角形,在執(zhí)行寬線鑲嵌的同時,著色器接收兩個線頂點,并為表示加寬的線的四邊形生成四個頂點。另外,幾何著色器可利用相鄰的線頂點來對線端點執(zhí)行斜接。
幾何著色器還可用于生成皮毛,這不限于皮毛生成,而是涵蓋了在單個拓撲結(jié)構(gòu)的第三方向上添加的任何附加頂點。示例包括頭發(fā)、標尺、草等,其中描述幾何結(jié)構(gòu)的圖元被饋送到幾何著色器中,并且?guī)缀沃魅我獾卦鲩L幾何結(jié)構(gòu)來補充該形狀。由此,例如,對于頭發(fā),基于輸入到幾何著色器的三角形,幾何著色器可以添加表示每一頂點處的頭發(fā)的幾個頂點。有利的是,由于對幾何著色器的三角形流包括關(guān)于頂點的鄰居的信息,因此頂點的鄰居的幾何結(jié)構(gòu)的鄰近性和特性(色彩、深度等)可在處理期間考慮在內(nèi)。對幾何著色器的另一示例性、非限制性使用包括其中使用鄰接信息來決定是否要擠出的陰影體積生成。此外,應(yīng)用程序可能想要生成某一幾何結(jié)構(gòu),如皮毛,并從該幾何結(jié)構(gòu)擠出陰影體積。在這些情況下,可使用輸出數(shù)據(jù)流并通過使用該流輸出來將其循環(huán)回去的能力來采用幾何著色器的多遍功能。
在該示例性、非限制性實施例中,來自幾何著色器384'-la3的輸出進入光柵化器384'-lc以便渲染,和/或經(jīng)由流輸出(SO) 384'-2進入緩沖區(qū)。"打開"流輸出(SO) 384'-2并不停止圖形流水線384'-1的光柵化功能;它僅僅是通過向開發(fā)者提供更具編程性的能力來增強圖形流水線384'-1的能力。
流輸出
流輸出(SO) 384'-2用作圖形流水線384'-1中的"分接頭",其可甚至在數(shù)據(jù)繼續(xù)向下流至光柵化器384'-lc時被打開和關(guān)閉。流輸出(SO) 384'-2可在數(shù)據(jù)到達幀緩沖區(qū)以便光柵化之前被分接到圖形流水線384'-1內(nèi)的任何地方。
當流輸出(SO) 384'-2被關(guān)閉時,流輸出(SO) 384'-2對流水線沒有任何影響。換言之,流輸出(SO)是可任選的;應(yīng)用程序可以僅僅允許流水線將數(shù)據(jù)通過其發(fā)送而不將數(shù)據(jù)讀入流輸出緩沖區(qū)中。此外,流輸出緩沖區(qū)是可用于存儲流數(shù)據(jù)的類型的存儲器的一個示例。可能會有可對這一功能使用不同類型的存儲器的時候,如在微處理器中的高速緩沖存儲器。
當被打開時,流輸出(SO)384'-2允許程序員在數(shù)據(jù)在流水線內(nèi)的同時"分
接"到流水線中,并將該數(shù)據(jù)提供給另一位置。
例如,流輸出(SO) 384'-2可以將圖元流傳送到一個或多個輸出緩沖區(qū)以便在流水線中的其它地方重復使用,從而允許在流水線內(nèi)應(yīng)用遞歸編程算法。經(jīng)由流輸出(SO) 384'-2發(fā)送的數(shù)據(jù)可被串接到緩沖區(qū)。緩沖區(qū)中的數(shù)據(jù)然后可在后續(xù)的各遍上被重新循環(huán)到圖形流水線384'-1的輸入。例如,在流輸出(SO) 384'-2處接收的數(shù)據(jù)可被寫入緩沖區(qū)或存儲器以供主機或其它操作檢索。
或者,在流輸出(SO) 384'-2處接收的數(shù)據(jù)可被重新循環(huán)(例如,反饋或前饋)到流水線內(nèi)的另一實體,諸如輸入組裝器(IA)、頂點著色器384'-la,和384'-1&2、幾何著色器384'-la3、或像素著色器384'-la4以執(zhí)行遞歸或循環(huán)功能。流輸出(SO) 384'-2可允許數(shù)據(jù)被編程性地重新循環(huán)到圖形流水線384'-1的其它部分(例如,程序員可以將對數(shù)據(jù)執(zhí)行遞歸操作(將數(shù)據(jù)遞歸地重新循環(huán)通過同一算法)或以其它方式將數(shù)據(jù)循環(huán)預(yù)先固定的次數(shù)的程序下載到GPU)。例如,流輸出(SO) 384'-2可用于將數(shù)據(jù)重新循環(huán)到著色器本身,由此允許對給定數(shù)據(jù)執(zhí)行多遍操作。這可允許對圖形數(shù)據(jù)的編程性遞歸和循環(huán)算法。重新循環(huán)數(shù)據(jù)的另一種方式是將其再次通過流水線發(fā)送,由此再次將數(shù)據(jù)輸入到輸入組裝器(IA)。
此外,如有必要,信息可在同一數(shù)據(jù)去往光柵化器的同時被流輸出,由此不會減緩數(shù)據(jù)的渲染,或允許在圖像經(jīng)歷基于對數(shù)據(jù)的遞歸算法元素操作的變換時顯示該圖像。
光柵化器
圖形流水線384'-l的下一組件是光柵化器384'-lc。光柵化器384'-lc不是圖形流水線384'-l中的必需階段,而是各流水線384'-l階段之間的接口。光柵化器384'-lc假定輸入位置在剪輯空間中提供,并且執(zhí)行一組重要的固定功能操作,這些操作可包括剪輯、透視劃分、視口或裁剪選擇、圖元設(shè)置以及確定
23如何調(diào)用像素著色器384'-la4。這些功能中的大部分可由軟件開發(fā)員來調(diào)整。
像素著色器階段
在光柵化器之后的是第四個公共核384'-la4,它用作像素著色器,它取一個像素,并在一位置處輸出該像素。像素著色器可允許每一像素由一個短程序來處理,該短程序可包括例如圖像紋理(或紋理數(shù)據(jù))作為輸入。像素著色器可允許開發(fā)者通過在像素級更改照明、色彩和表面來操縱色彩、紋理、或甚至形狀。像素著色器可用于更改每一像素的照明、色彩和表面。這進而影響從這些像素構(gòu)建的3-D對象的總體色彩、紋理和形狀。
對像素著色器384'-la4可用的輸入數(shù)據(jù)包括頂點屬性,頂點屬性可在每一像素的基礎(chǔ)上選擇來在帶有或沒有透視糾正的情況下內(nèi)插,或?qū)γ恳粓D元作為常量來對待。由像素著色器384'-la4生成的輸出可以是當前像素位置的輸出數(shù)據(jù)的一個或多個4向量,或者沒有色彩(如果像素被丟棄)。像素著色器可能具有的效果的部分列表包括每一像素的反射、使用Phong樣式著色或DOT3效果的每一像素的照明、以及過程性紋理。
輸出合并器
在輸出合并器(OM),即邏輯圖形流水線384'-l中的最后一步處,可執(zhí)行其它像素處理功能來渲染最終像素。這些功能可包括,例如,綁定輸出資源(渲染目標)、用裁剪測試來修改像素色彩值、通過深度偏移和/或型板緩沖技術(shù)的可見性確定、或應(yīng)用諸如阿爾法混合或霧化、加陰影、凸起映射、環(huán)境映射、抗混疊、輸出到渲染目標(可以是許多資源類型之一)的寫入或混合、以及多元素紋理等功能。在對數(shù)據(jù)執(zhí)行了這些功能之后,該數(shù)據(jù)最終被進一步處理且最后被顯示在監(jiān)視器191上。
用于流水線中的著色器的公共著色器核
圖4是表示公共著色器核384'-la的硬件和軟件組件的示例性、非限制性實施例的框圖。公共著色器核384'-la可用于例如實現(xiàn)以上圖3所示的頂點著色器384'-la!和384'-la2、幾何著色器384'-la3或像素著色器384'-1&4中的任一個。
公共著色器核384'-la或者從輸入組裝器(IA)單元(其是可以來自圖形 流水線384'-l中的任何地方的先前階段),或者在某些情況下從專門的輸入源 接收輸入數(shù)據(jù)。
輸入數(shù)據(jù)然后可被臨時存儲在輸入寄存器409中。輸入寄存器409可以是, 例如動態(tài)可索引陣列。在幾何著色器的情況下,輸入寄存器可以是將輸入排列 為例如[頂點][元素]對的二維(2D)陣列。
輸入數(shù)據(jù)然后被發(fā)送到著色器代碼410。著色器代碼410提供流控制機制、 處理向量浮點和整型算術(shù)、存儲器取數(shù)或采樣操作的算術(shù)邏輯單元(ALU)、 以及指定要對輸入數(shù)據(jù)執(zhí)行的特定變換的著色器函數(shù)或程序。著色器代碼410 還可接收多個其它輸入或資源,諸如來自采樣器413、紋理414和常量緩沖區(qū) 415的信息。著色器代碼410還具有與臨時寄存器411和子例程返回地址棧412 的雙向通信。
著色器代碼410從采樣器413接收定義如何對紋理采樣的樣本。然而,也 可以在不過濾的情況下讀取存儲器,并且采樣器并不是在每一實施例中都是必 需的。由于采樣器對象是靜態(tài)地創(chuàng)建的,因此其允許硬件在流水線的進行中維 護對多個采樣器的引用,而不必跟蹤改變或轉(zhuǎn)儲清除流水線(因為采樣器對象 維護其定義并且不被修改)。
著色器代碼410從紋理414接收紋理信息。紋理414與著色器代碼一起工 作以提供紋理釆樣。
CPU生成可用于重新配置特定著色器程序的著色器常量。著色器代碼410 從常量緩沖區(qū)415接收著色器常量。提供常量緩沖區(qū)415以對GPU上的存儲 器中的某些變量(或"著色器常量")進行聚集或分組。換言之,代替使用常 量寄存器的陣列(cO...cN)來存儲常量輸入值,常量緩沖區(qū)415可用于將數(shù)值 著色器常量值分組在一起。常量緩沖區(qū)被優(yōu)化以進行比紋理414更低等待時間 的訪問以及更高頻率的更新。常量緩沖區(qū)415可允許開發(fā)者同時設(shè)置所有特定 的一組常量。常量可以按開發(fā)者期望的任何特定次序來排列。將常量緩沖區(qū)中 的著色器常量分組在一起可得到某些性能好處。例如,如果兩個著色器常量通 常是在同時一起修改和使用的(例如,在每一場景中都有相同的狀態(tài)),則這些著色器常量可被置于特定常量緩沖區(qū)中。
特定著色器程序可能需要被綁定到特定槽的特定數(shù)量的常量緩沖區(qū)。在一 個實現(xiàn)中,對圖形流水線中的每一階段,對于可能活動的常量緩沖區(qū)有15個 槽。在著色器代碼中,(^#寄存器是用于"槽"#處的常量緩沖區(qū)的占位符。常 量緩沖區(qū)使用以下在著色器中訪問d^[索引]作為著色器指令的操作數(shù),其中
"索引"可以是不可索引(r#)或可靜態(tài)索引(x#)的,其包含32位無符號 整數(shù)、直接的32位無符號整數(shù)常量、或兩者加在一起的組合(例如,"movr0, cb3[x3
.x+6]"表示將元素7從分配給槽3的常量緩沖區(qū)移至r0,假定x3
.x 包含l)。應(yīng)用程序能夠?qū)懭胍匀魏嗡枘J胶唾|(zhì)量讀取常量的著色器代碼, 同時仍允許不同硬件容易地盡可能達到最佳性能。
臨時寄存器411用作臨時存儲。在一個示例性、非限制性實施例中,臨時 寄存器411可以保持所需的任何大小和質(zhì)量的任何不可索引或可索引陣列,直 到臨時存儲的限制。
在該特定的、非限制性、示例性實施例中,子例程返回地址棧412是固定 高度。此外,棧被隱藏以便不能進行直接著色器訪問,并且僅透明地存儲返回 地址。它還準許定義遞歸算法。
在使代碼通過著色器代碼410之后,該數(shù)據(jù)去往輸出寄存器520。在該示 例性、非限制性實施例中,輸出寄存器520是由四個向量輸出的動態(tài)可索引陣 列組成的。此外,某些階段可以具有附加的專門輸出。
取決于公共著色器核384'-la正在圖形流水線384'-l中的哪一階段上實現(xiàn), 輸出數(shù)據(jù)然后可被輸出到下一著色器階段(如果存在);作為流輸出(SO) 到存儲器或其它位置;或到輸出合并器(OM)或渲染階段。
所列出的數(shù)據(jù)結(jié)構(gòu)可以從1D陣列改為2D陣列或列表。所有數(shù)據(jù)結(jié)構(gòu)都 可取決于GPU的大小和存儲能力來改變。在GPU內(nèi),對存儲限制和固定高度 的改變可以因動態(tài)分配、以及向信息應(yīng)用壓縮算法來節(jié)省空間而發(fā)生。采樣器 和常量緩沖區(qū)可以如紋理一樣運作,然而,當資源改變時,這些組件的定義可 被修改。如果重新定義了紋理,則采樣器和常量緩沖區(qū)兩者都可改變,并且不 限于僅僅紋理功能。此外,所有數(shù)據(jù)結(jié)構(gòu)都可為速度和效用目的實現(xiàn)新的優(yōu)化 算法。此處所描述的各實施例僅是使用公共核的圖形流水線的示例,其中該公
26共核可被動態(tài)地配置以提供頂點著色器、像素著色器和幾何著色器的功能。
如上所述,狀態(tài)的不同組合可以啟用各種視覺效果。流水線中的狀態(tài)管理 系統(tǒng)跟蹤設(shè)備狀態(tài),并且將設(shè)備狀態(tài)抽象成由具有復雜的相互依賴性的多個元 素組成的高級"效果"。效果被定義為一系列"技術(shù)",技術(shù)依賴于"遍"、 遍依賴于狀態(tài)對象和著色器,而狀態(tài)對象和著色器依賴于常量緩沖區(qū)和紋理。 效果要求某些著色器程序在具有特定紋理作為輸入、在流水線中的特定輸入槽
(也稱為綁定點)處綁定的特定常量集上執(zhí)行。狀態(tài)管理系統(tǒng)可以利用"依賴 性樹"來跟蹤各種類型的不同著色器資源之間的關(guān)系或依賴性。每一特定資源
(例如,常量緩沖區(qū)、紋理、采樣器)被綁定到依賴性樹中的父對象的槽。在 該上下文中,"槽"指的是依賴性樹中對應(yīng)于特定著色器的槽。每一著色器將 具有不同的依賴性,且因此用獨立的槽來分隔樹。
圖5A示出了對應(yīng)于一個效果文件530的依賴性樹的示例性、非限制性框
圖。圖5A示出效果530以及效果530對遍520、狀態(tài)對象506、著色器510、 紋理514和常量緩沖區(qū)515的依賴性的概念。常量緩沖區(qū)515接收多個著色器 常量502、 504。世界視圖投影矩陣502是定義用于從世界空間變換到屏幕空間 的矩陣中的四個常量的著色器常量。這對每一對象完成一次。由此,如果在屏 幕中有50個對象,則該矩陣將對每一場景設(shè)置50次。V光504是指定光來自 哪一方向的光向量。例如,V光504可用于指定太陽的方向,并且可以對整個 幀是恒定的。著色器510具有與其相關(guān)聯(lián)的多個資源。在該特定示例中,資源 可包括常量緩沖區(qū)515和紋理0 514。這些資源由著色器510"消費"。盡管未 在圖5A中示出,但除了著色器A510之外,還可以有并行運行的多個其它著 色器程序(例如,著色器B、著色器C、著色器D等)。這些著色器程序中的 每一個都具有一組相似的依賴性。遍520包括這些不同著色器和狀態(tài)A 506的 輸出。效果文件530包括遍520。
再次參考圖4,公共著色器核384'-la還具有多個輸入槽(未示出)。由 著色器384'-la使用的資源(各個常量、常量緩沖區(qū)、紋理和采樣器等)可被 綁定到著色器384'-la的特定輸入槽。在一個特定實現(xiàn)中,著色器可具有例如 與其相關(guān)聯(lián)的128個輸入資源槽、與其相關(guān)聯(lián)的16個不同的常量緩沖區(qū)槽、 以及與其相關(guān)聯(lián)的16個采樣器槽。例如,特定著色器可用16個不同的常量緩沖區(qū)、16個不同的紋理和16個不同的采樣器來填充這些槽。將特定資源分配 或綁定到每一著色器的特定槽的次序并不需要遵循特定模式,并且可以由編譯 器來確定。著色器程序?qū)@些特定資源的每一個做不同的事情。例如,著色器
程序可以接受輸入常量緩沖區(qū)2、另一輸入采樣器0以及另一輸入紋理5等,
然后取決于這些輸入來生成特定輸出。
圖5B是示出一個示例性、非限制性圖形流水線中多個常量緩沖區(qū) 515A-515E對多個不同著色器程序584'-la A-N的分配的示例性、非限制性框 圖。著色器程序584'-la A-N中的每一個都將多個常量緩沖區(qū)(CB1 515A...CB5 515E)以不同次序分配在不同輸入槽處。例如,著色器584'-laA可將CBl置 于槽l,將CB2置于槽2,將CB3置于槽3,將CB4置于槽4,并將CB5置 于槽5;著色器584'-laB可將CB2置于槽l,將CB1置于槽2,將CB4置于 槽3,將CB5置于槽4,并將CB3置于槽5;著色器584'-la C可將CB5置于 槽l,將CB2置于槽2,將CB1置于槽3,將CB3置于槽4,并將CB4置于 槽5;而著色器584'-laN可將CB3置于槽l,將CB2置于槽2,將CB5置于 槽3,將CB4置于槽4,并將CB1置于槽5。
為簡化圖示,圖5B中所提供的示例示出了四(4)個著色器程序584'-la A-N 和與特定著色器584'-laA-N中的每一個相關(guān)聯(lián)的五(5)個可能的常量緩沖區(qū) (CB1515A...CB5 515E)。然而,可以理解,在流水線的最實用實現(xiàn)中,在流 水線中可以有多得多的著色器,并且特定著色器584'-la A-N的每一個通常具 有比圖5所示的更大量(例如,十六或更多)的常量緩沖區(qū)。例如,取決于特 定應(yīng)用程序的復雜度,可以有幾百個不同的著色器,并且應(yīng)用程序開發(fā)員可以 指定實質(zhì)上無限數(shù)量的常量緩沖區(qū)。在一個實用實現(xiàn)中,可以在任何給定時刻 將這些常量緩沖區(qū)中的多達16個綁定在不同的槽處。重要的是,將特定常量 緩沖區(qū)分配或綁定到每一著色器584'-la處的特定槽的次序并不需要遵循特定 模式,并且可以由編譯器來確定。
當兩個著色器程序彼此獨立地編譯時,將資源綁定到特定槽的次序可以不 同。例如,當執(zhí)行著色器584'-la A時,常量緩沖區(qū)CBl-CB5被設(shè)置到槽l-5 以渲染著色器584'-la A。然而,當是執(zhí)行著色器584'-laB的時刻時,相同的 常量緩沖區(qū)CB1-CB5可被綁定或重新分配到不同的槽以執(zhí)行著色器584'-laB。例如,當著色器584'-laA執(zhí)行時,CB1被綁定到槽1, CB2被綁定到槽2, CB3 被綁定到槽3, CB4被綁定到槽4,而CB5被綁定到槽5,但是當下一著色器 584'-laB執(zhí)行時,相同的五個常量緩沖區(qū)也可被再次使用,但是這次在不同的 槽處使用(例如,CB2在槽1處,CB1在槽2處,CB4在槽3處,CB5在槽4 處,而CB3在槽5處)。在這些情況下,常量緩沖區(qū)當在執(zhí)行著色器584'-laA 和著色器584'-laB之間轉(zhuǎn)換期間必須從一個槽解除綁定并重新綁定到一個新 的槽。由此,相同的五個常量緩沖區(qū)需要以不同的次序來重新綁定。每次當需 要重新調(diào)整綁定時存在性能成本,因為必須對驅(qū)動程序做出調(diào)用來設(shè)置視頻卡 等。沒有自動化機制來緩解著色器之間的這一"不合",由此導致當在著色器 之間發(fā)生轉(zhuǎn)換時流水線的不必要的重新配置,并且浪費了綁定周期。
期望減少和/或最小化當在著色器之間切換時在圖形卡中所需的重新配置 的量(例如,減少和/或最小化通常在重新綁定槽時發(fā)生的狀態(tài)改變)。例如, 期望提供一種避免或減少將特定資源重新分配給不同槽的需求的方式。通過將 資源一致地放置在相同的槽中,浪費了較少的綁定周期和/或節(jié)省了綁定周期。
優(yōu)化的槽/資源綁定技術(shù)
提供了由于最優(yōu)地將資源(例如,常量緩沖區(qū)、紋理和采樣器)綁定到特 定槽來減少/最小化當在著色器之間切換時在圖形卡中所需的綁定重新配置的 量(例如,減少和/或最小化通常在重新綁定槽時發(fā)生的狀態(tài)改變)的技術(shù)。根 據(jù)這些技術(shù),可以確定每一著色器程序之間的公共依賴性,并且特定資源可基 于該確定被綁定到特定槽。 一依賴性樹跟蹤不同著色器資源之間的關(guān)系或依賴 性。每一特定資源被綁定到該依賴性樹中的父對象的槽。這些所公開的技術(shù)涉 及掃描依賴性并重新配置該依賴性樹,使得著色器可以改變其對于何處綁定資 源的預(yù)期。結(jié)果,需要被重新綁定以便在當前加載的著色器之間轉(zhuǎn)換的槽的數(shù) 量可被減少和/或最小化。
根據(jù)這些技術(shù)的一個實施例,掃描該依賴性樹中的每一依賴性,并且可為 該依賴性樹的每一不同重新配置(著色器的重新映射或重新構(gòu)建)計算相關(guān)聯(lián) 的成本。依賴性樹的每一重新配置改變特定資源所綁定到的具體槽。使用這些 成本,然后可以選擇減少或最小化用于在更高級狀態(tài)之間轉(zhuǎn)換的設(shè)備重新配置
29的數(shù)量的該依賴性樹的特定重新配置。換言之,然后可以選擇最小化需要重新 綁定以在當前加載的著色器之間轉(zhuǎn)換/切換的槽的數(shù)量的依賴性樹的特定重新 配置。在一個實現(xiàn)中,這些技術(shù)可以對于離線內(nèi)容生成和存儲來執(zhí)行(例如, 如果著色器設(shè)置是事先已知的,則分析著色器,重新映射依賴性,然后將著色 器保存回盤)。在一個替換實現(xiàn)中,在應(yīng)用程序運行時/加載時動態(tài)地執(zhí)行該方 法(例如,如果著色器設(shè)置事先未知)。
因此,特定著色器程序被修改成以相同的次序預(yù)期特定資源。這可允許, 例如,優(yōu)化將常量緩沖區(qū)與特定槽相關(guān)聯(lián)的方式。這通過減少當在不同著色器 之間切換時發(fā)生的重新組織的量減少了需要完成的工作的量。
圖6示出了圖形流水線中用于最優(yōu)地將資源綁定到與著色器相關(guān)聯(lián)的特 定槽的示例性、非限制性流程圖600。在特定應(yīng)用程序的執(zhí)行期間,著色器可 能要求將特定數(shù)量的資源(例如,常量緩沖區(qū)、紋理和釆樣器等)綁定到著色 器的特定槽。
在步驟610處,可確定由每一著色器使用的資源之間的資源依賴性。在一 個實施例中,步驟610可以涉及兩個子步驟615、 620。在子步驟615處,可確
定用于每一著色器的特定資源/槽排列。用于每一著色器的特定資源/槽排列指 定了在每一著色器的特定槽的每一個中使用哪些資源。在子步驟620處,基于
特定資源/槽排列,可確定由每一著色器使用的資源之間的資源依賴性(例如, 不同/公共)。
在步驟630處,基于資源依賴性,可計算公共資源/槽關(guān)聯(lián)。每一公共資 源/槽關(guān)聯(lián)標識了要與特定的一個槽相關(guān)聯(lián)的特定的一個資源,使得當在著色器 之間切換時減少/最小化了轉(zhuǎn)換/狀態(tài)改變的數(shù)量/資源重新配置的量。在步驟 640處,在每一著色器處,然后可以根據(jù)公共資源/槽關(guān)聯(lián)來重新組織綁定到每 一槽的資源。此時,每一著色器具有相同的公共資源/槽關(guān)聯(lián),使得在每一著色 器處,相同的特定資源與相同的特定一個槽相關(guān)聯(lián)。在步驟650處,每一特定 資源可如公共資源/槽關(guān)聯(lián)所指定地綁定到特定槽。
圖7示出了用于計算公共資源/槽關(guān)聯(lián)的示例性、非限制性流程圖630。在 步驟710處,可確定要綁定到第一個槽的特定的一個資源。在確定了要綁定到 第一個槽的資源之后,在步驟720處,可從可用資源池或列表中移除要綁定到第一個槽的該資源。在步驟730處,該過程可以確定對每一著色器要綁定的槽 是否已填滿。如果還剩下要綁定的槽(例如,尚無資源綁定到其上的槽),則
在步驟740處,可確定剩余資源之一要綁定到第二個槽的資源。重復步驟 720-740,直到要綁定的預(yù)定數(shù)量的槽、大多數(shù)槽或所有槽都有與其相關(guān)聯(lián)的 特定資源。在一個實施例中,可應(yīng)用該算法,直到滿足特定成本度量。例如, 該成本度量可以是該算法將在當著色器之間存在少于例如60%的資源改變或 差異時停止。 一旦要綁定的所有槽都有了資源/槽綁定,則該過程在圖6的步驟 640處繼續(xù)。
圖8示出了用于確定特定資源/槽綁定的示例性、非限制性流程圖710/740。 為確定要綁定到第一個槽的第一個資源,在步驟810處,可基于由每一著色器 利用的資源之間的資源依賴性來計算將依賴性樹中的每一資源綁定到第一個 槽的成本。在步驟820處,可選擇具有最低成本的特定的一個資源來綁定到第 一個槽,并且在步驟830處,可將該資源(被選為具有最低成本)指定為第一 個資源。由于步驟810到830被嵌入在圖7的步驟740中,因此可以理解,步 驟810-830將被重復,直到要綁定的每一個槽都有特定的資源/槽綁定。
圖9示出了用于計算關(guān)于將每一資源綁定到第一個槽的成本的示例性、非 限制性流程圖810。在步驟910處,可確定在如果特定的一個資源被綁定到第 一個槽的情況下渲染每一著色器所需的狀態(tài)改變的數(shù)量。該確定可以通過使用 由每一著色器程序利用的資源之間的資源依賴性來做出。在步驟920處,可確 定在如果特定的一個資源被綁定到第一個槽的情況下渲染每一著色器所需的 浪費的槽的數(shù)量。如上一樣,該確定可以通過使用由每一著色器程序利用的資 源之間的資源依賴性來做出。使用狀態(tài)改變的數(shù)量和浪費的槽的數(shù)量,在步驟 930處,可以計算第一個成本。該第一個成本是與將該特定的一個資源綁定到 第一個槽相關(guān)聯(lián)的成本。
該計算可以對每一資源重復(例如,與將每一資源綁定到第一個槽相關(guān)聯(lián) 的成本)。在步驟940處,可以確定是否計算了將每一資源綁定到第一個槽的 成本。如果否,則該過程前進到步驟950,其中選擇資源列表或依賴性樹中下 一個特定的資源。然后可以對下一資源重復步驟910-930 (例如,與將下一資 源綁定到第一個槽相關(guān)聯(lián)的成本)。過程810重復,直到在步驟940處確定己經(jīng)計算了將每一資源綁定到第一個槽的成本。在該點處,該過程結(jié)束或返回至
步驟820。由于步驟910到950被嵌入在圖8的步驟810中,因此可以理解, 步驟910-950將被重復,直到確定了將每一資源綁定到要綁定的每一個槽的成 本。
由此,在圖5B所示的示例中,上述技術(shù)可用于重新映射在著色器584'-laB 中使用的常量緩沖區(qū)的布局。例如,可掃描所有依賴性,并且如果確定最優(yōu)常 量緩沖區(qū)布局是著色器584'-la A中所示的布局,則在著色器584'-laB處,CB2 和3將被重新映射以綁定到槽2和3,而CB1將被重新映射到槽1, CB4和5 將被分別重新映射到槽4和5。以此方式,著色器584'-la A和584'-laB之間 的切換不需要著色器584'-laA中所示的所有CB到槽的初始綁定之外的附加工 作。類似的重新映射也可在著色器584'-laC和著色器584'-laN處發(fā)生。由此, 需要被重新綁定以便在當前加載的著色器之間轉(zhuǎn)換的槽的數(shù)量可被最小化。
有多種實現(xiàn)本發(fā)明的方法,例如適當?shù)腁PI、工具箱、驅(qū)動程序代碼、操 作系統(tǒng)、控件、獨立或可下載軟件對象等,它們使得應(yīng)用程序和服務(wù)能夠使用 本發(fā)明的增強的圖形流水線的系統(tǒng)和方法。本發(fā)明構(gòu)想了從API (或其它軟件 對象)的觀點,以及從接收上述技術(shù)的任一種,包括根據(jù)本發(fā)明的公共核、幾 何著色器或流輸出的技術(shù)的軟件或硬件對象來看的對本發(fā)明的使用。由此,此 處描述的本發(fā)明的各種實現(xiàn)都可以具有完全采用硬件、部分采用硬件且部分采 用軟件、以及采用軟件的方面。
如上所述,盡管結(jié)合各種計算設(shè)備和網(wǎng)絡(luò)體系結(jié)構(gòu)描述了本發(fā)明的示例性 實施例,但基本概念可被應(yīng)用于其中期望采用具有增強的圖形流水線的GPU 的任何計算設(shè)備或系統(tǒng)。例如,本發(fā)明的算法和硬件實現(xiàn)可被應(yīng)用于計算設(shè)備 的操作系統(tǒng),可作為設(shè)備上的獨立對象、作為另一對象的一部分、作為可重復 使用的控件、作為可從服務(wù)器下載的對象、作為設(shè)備或?qū)ο蠛途W(wǎng)絡(luò)之間的"中 間人"、作為分布式對象、作為硬件、以存儲器、以上任何的組合等來提供。 盡管此處選擇了示例性編程語言、名稱和示例來表示各種選擇,但這些語言、 名稱和示例不旨在為限制性的。本領(lǐng)域的普通技術(shù)人員將認識到,有多種方法 來提供實現(xiàn)本發(fā)明的各實施例所實現(xiàn)的相同、相似或等效的功能的目標代碼和 命名法。如上所述,此處所述的各種技術(shù)可結(jié)合硬件或軟件,或在適當時以兩者的 組合來實現(xiàn)。由此,本發(fā)明的方法和裝置或其特定方面或部分可采取包含在諸 如軟盤、CD-ROM、硬盤驅(qū)動器或任何其它機器可讀存儲介質(zhì)等有形介質(zhì)中的 程序代碼(即,指令)的形式,其中當程序代碼被加載到諸如計算機等機器內(nèi) 并由其執(zhí)行時,該機器成為用于實現(xiàn)本發(fā)明的裝置。在程序代碼在可編程計算 機上執(zhí)行的情況下,計算設(shè)備通常包括處理器、該處理器可讀的存儲介質(zhì)(包 括易失性和非易失性的存儲器和/或存儲元件)、至少一個輸入設(shè)備、以及至少
一個輸出設(shè)備。可例如通過使用數(shù)據(jù)處理API、可重復使用控件等來實現(xiàn)或利
用本發(fā)明的增強的圖形流水線技術(shù)的一個或多個程序較佳地用高級過程語言 或面向?qū)ο蟮木幊陶Z言來實現(xiàn)以與計算機系統(tǒng)通信。然而,如果需要,程序可 以用匯編語言或機器語言來實現(xiàn)。在任何情形中,語言可以是編譯的或解釋的 語言,且與硬件實現(xiàn)相結(jié)合。
本發(fā)明的方法和裝置也可以經(jīng)由以通過某種傳輸介質(zhì)傳輸?shù)某绦虼a的 形式體現(xiàn)的通信來實現(xiàn),比如通過電線或電纜、通過光纖或經(jīng)由任何其它傳輸
形式,其中,當程序代碼由諸如EPROM、門陣列、可編程邏輯器件(PLD)、 客戶計算機等機器接收、加載并執(zhí)行時,該機器成為用于實現(xiàn)本發(fā)明的裝置。 當在通用處理器上實現(xiàn)時,程序代碼與處理器相結(jié)合來提供一種用于調(diào)用本發(fā) 明的功能的獨特裝置。另外,結(jié)合本發(fā)明使用的任何存儲技術(shù)總是可以是硬件 和軟件的組合。
盡管結(jié)合各附圖的優(yōu)選實施例描述了本發(fā)明,但是可以理解,可以使用其 它類似的實施例,或可以對所述實施例進行修改或添加來執(zhí)行本發(fā)明的相同功 能而不背離本發(fā)明。例如,在諸如對等聯(lián)網(wǎng)環(huán)境等聯(lián)網(wǎng)環(huán)境的上下文中描述了 本發(fā)明的示例性網(wǎng)絡(luò)環(huán)境,但是本領(lǐng)域的技術(shù)人員將認識到,本發(fā)明不限于此, 并且本申請中所描述的方法可應(yīng)用于任何計算設(shè)備或環(huán)境,諸如游戲控制臺、 手持式計算機、便攜式計算機等等,不論其是有線還是無線的,并且該方法可 應(yīng)用于經(jīng)由通信網(wǎng)絡(luò)連接并通過網(wǎng)絡(luò)交互的任意數(shù)量的此類計算設(shè)備。此外, 應(yīng)當強調(diào),構(gòu)想了包括手持式設(shè)備操作系統(tǒng)和其它應(yīng)用專用操作系統(tǒng)的各種計 算機平臺,尤其是在無線聯(lián)網(wǎng)設(shè)備的數(shù)量持續(xù)增長時。
盡管示例性實施例涉及在圖形流水線的上下文中利用本發(fā)明,但是本發(fā)明不限于此,而是可以被實現(xiàn)來提供第二個處理單元。例如,如果程序員想要將 顯示畫面渲染到屏幕并且處理計算數(shù)學,同時使用CPU執(zhí)行另一功能,則處 理單元可能需要最充分地使用,而不論圖形顯示是否被包括在最終輸出中。而 且,本發(fā)明可以在多個處理芯片或設(shè)備中實現(xiàn)或跨多個處理芯片或設(shè)備實現(xiàn), 且存儲可以類似地跨多個設(shè)備來實現(xiàn)。因此,本發(fā)明不應(yīng)限于任何單個實施例, 而是應(yīng)該根據(jù)所附權(quán)利要求書的廣度和范圍來解釋。
3權(quán)利要求
1. 一種用于將資源綁定到與圖形流水線(384′-1)中的著色器(584′-1)相關(guān)聯(lián)的特定槽的方法(600),包括確定由每一著色器利用的資源之間的資源(413-415)依賴性(620);以及基于所述資源(413-415)依賴性,計算公共資源/槽關(guān)聯(lián)(630),其中每一公共資源/槽關(guān)聯(lián)標識了所述資源(413-415)中要與所述槽中的特定一個槽相關(guān)聯(lián)的特定一個資源。
2. 如權(quán)利要求l所述的方法,其特征在于,確定由每一著色器利用的資 源之間的資源依賴性包括在每一著色器處,確定用于每一著色器的特定資源/槽排列,其中所述用 于每一著色器的特定資源/槽排列指定了在每一資源的每一所述特定槽中使用 哪些資源;以及基于所述特定資源/槽排列,確定每一著色器利用的資源之間的資源依賴性。
3. 如權(quán)利要求2所述的方法,其特征在于,計算公共資源/槽關(guān)聯(lián)包括 基于所述資源依賴性計算公共資源/槽關(guān)聯(lián),其中每一公共資源/槽關(guān)聯(lián)標識了所述資源中要與所述槽中的特定一個槽相關(guān)聯(lián)的特定一個資源,使得當在 著色器之間切換時減少了資源重新配置的成本。
4. 如權(quán)利要求3所述的方法,其特征在于,還包括 在每一所述著色器處,根據(jù)所述公共資源/槽關(guān)聯(lián)來重新組織綁定到每一槽的資源。
5. 如權(quán)利要求3所述的方法,其特征在于,計算公共資源/槽關(guān)聯(lián)包括(a) 確定所述資源中要綁定到第一個槽的特定一個資源;以及(b) 確定剩余資源中要綁定到第二個槽的特定一個資源;以及 對每一剩余槽重復步驟(b),直到預(yù)定數(shù)量的槽具有與其相關(guān)聯(lián)的所述資源之一。
6. 如權(quán)利要求5所述的方法,其特征在于,確定要綁定到第一個槽的第一個資源包括基于每一著色器利用的資源之間的所述資源依賴性,計算將每一資源綁定 到所述第一個槽的成本;選擇所述資源中具有最低成本的特定一個資源;以及 將所選具有最低成本的資源指定為所述第一個資源。
7. 如權(quán)利要求6所述的方法,其特征在于,確定要綁定到第二個槽的第二個資源包括計算將剩余資源中的每一個綁定到所述第二個槽的成本;選擇具有最低成本的剩余資源;以及將所選具有最低成本的剩余資源指定為所述第二個資源。
8. 如權(quán)利要求6所述的方法,其特征在于,計算將每一資源綁定到所述 第一個槽的成本包括(a) 基于每一著色器程序利用的資源之間的所述資源依賴性,確定在將所 述資源中的特定一個資源綁定到所述第一個槽的情況下渲染每一著色器所需 的狀態(tài)改變的數(shù)量;以及(b) 基于每一著色器程序利用的資源之間的所述資源依賴性,確定在將所 述資源中的特定一個資源綁定到所述第一個槽的情況下所需的浪費的槽的數(shù)(c) 基于所述狀態(tài)改變的數(shù)量和所述浪費的槽的數(shù)量,計算與將所述資源 中的該特定一個資源綁定到所述第一個槽相關(guān)聯(lián)的第一成本;以及重復步驟(a)到(c),直到計算了將每一所述資源綁定到所述第一個槽的成本。
9. 如權(quán)利要求1所述的方法,其特征在于,還包括 將所述特定資源中的每一個綁定到由所述公共資源/槽關(guān)聯(lián)指定的所述特定槽。
10. 如權(quán)利要求l所述的方法,其特征在于,每一著色器具有相同的公共 資源/槽關(guān)聯(lián),使得在每一著色器處,相同的特定資源與所述槽中相同的特定一 個槽相關(guān)聯(lián)。
11. 如權(quán)利要求l所述的方法,其特征在于,所述資源包括常量緩沖區(qū)。
12. 如權(quán)利要求l所述的方法,其特征在于,所述資源包括常量緩沖區(qū), 以及紋理和采樣器中的至少一個。
13. —種包括用于執(zhí)行如權(quán)利要求1所述的方法的計算機可執(zhí)行指令的計 算機可讀介質(zhì)。
14. 一種包括用于執(zhí)行如權(quán)利要求1所述的步驟的計算機可執(zhí)行模塊的圖 形應(yīng)用程序編程接口。
15. —種用于指示圖形處理單元執(zhí)行如權(quán)利要求1所述的方法的應(yīng)用程序編程接口。
16. —種重新配置包括多個資源的依賴性樹的方法,其中每一特定資源被綁定到所述依賴性樹中的父對象的槽,所述方法包括掃描所述依賴性樹中的資源依賴性的每一個;計算與所述依賴性樹的多個不同資源配置的每一個相關(guān)聯(lián)的成本;以及 選擇最小化當在不同著色器之間切換時的設(shè)備重新配置的量的所述依賴 性樹的特定資源重新配置。
17. 如權(quán)利要求16所述的方法,其特征在于,所述依賴性樹的每一資源 重新配置改變特定資源所綁定到的特定槽。
18. 如權(quán)利要求16所述的方法,其特征在于,選擇包括選擇最小化需 要被重新綁定以便在不同著色器之間切換的槽的數(shù)量的所述依賴性樹的特定 資源重新配置。
19. 如權(quán)利要求16所述的方法,其特征在于,所述方法是對離線內(nèi)容生 成執(zhí)行的,并且所述方法還包括存儲所述依賴性樹的特定資源重新配置。
20. 如權(quán)利要求16所述的方法,其特征在于,所述方法是在應(yīng)用程序運 行時/加載時動態(tài)地執(zhí)行的。
全文摘要
提供了用于將資源綁定到與圖形流水線中的著色器相關(guān)聯(lián)的特定槽的技術(shù)和方法。可確定由每一著色器利用的資源之間的資源依賴性,并且基于這些資源依賴性,可計算公共資源/槽關(guān)聯(lián)。每一公共資源/槽關(guān)聯(lián)標識了要與特定的一個槽相關(guān)聯(lián)的特定的一個資源。
文檔編號G06F9/38GK101479701SQ200780024522
公開日2009年7月8日 申請日期2007年6月7日 優(yōu)先權(quán)日2006年6月28日
發(fā)明者R·斯里尼瓦桑, R·馬爾科維奇, S·格拉森伯格 申請人:微軟公司