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