專利名稱:紋理采樣的制作方法
紋理采樣
背景技術(shù):
紋理一般指包括重復(fù)圖案的圖像,該重復(fù)圖案可以用于包裝(wrap)圖形圖案???以使用基于Nyquist準則的紋理采樣技術(shù)來對紋理數(shù)據(jù)進行采樣。紋理采樣技術(shù)正變得越 來越復(fù)雜并且使用越來越廣泛。紋理采樣技術(shù)可以包括點采樣、雙線性過濾、三線性過濾、 各向異性過濾(anisotropicfiltering)、抗鋸齒(anti-aliasing)和其它類似的技術(shù)。紋 理采樣正越來越多地被例如頂點著色器、幾何著色器和像素著色器所使用。此外,這種紋理采樣技術(shù)的復(fù)雜性和使用不斷的增加,同時用于執(zhí)行紋理采樣的 硬件的復(fù)雜性也日益增加。存在至少一些應(yīng)用程序,它們可能需要使用可以不需要或不用 直接訪問硬件設(shè)備的紋理采樣技術(shù)。此外,現(xiàn)有的硬件設(shè)備可能不完全支持復(fù)雜的紋理采 樣操作,或者現(xiàn)有的硬件設(shè)備可能不能有效地執(zhí)行復(fù)雜的紋理采樣操作。
在附圖中,通過示例而非通過限制的方式來說明本文描述的發(fā)明。為了說明的簡 單和清楚,附圖中說明的部件并不必然按照比例繪出。例如,為了清楚起見,可以相對于其 它部件而放大一些部件的尺寸。此外,在適當?shù)那闆r下,在各個附圖中重復(fù)使用附圖標記以 指示對應(yīng)的或類似的部件。圖1說明了根據(jù)一個實施例的、使用紋理采樣器的圖形處理技術(shù),所述紋理采樣 器是使用著色語言(shader language)實現(xiàn)的。圖2說明了根據(jù)一個實施例的、使用紋理采樣器的圖形處理技術(shù)的三維管線級, 其中所述紋理采樣器是使用著色語言實現(xiàn)的。圖3是說明了根據(jù)一個實施例的、使用著色語言實現(xiàn)的紋理采樣器的流程圖。圖4說明了根據(jù)一個實施例的、描述了使用著色語言的紋理采樣過程的流程圖。圖5說明了根據(jù)一個實施例的、在其中可以實現(xiàn)使用著色語言的紋理采樣的計算 機系統(tǒng)500。
具體實施例方式以下說明描述了使用紋理采樣器來執(zhí)行紋理采樣的技術(shù),所述紋理采樣器是用著 色語言來實現(xiàn)的。在以下說明中,闡述了許多具體的細節(jié),例如邏輯實現(xiàn)、資源劃分、或共 享、或復(fù)制實現(xiàn)、系統(tǒng)部件的類型和相互關(guān)系、以及邏輯劃分或集成選擇,以便于更為透徹 的理解本發(fā)明。但是,本領(lǐng)域的技術(shù)人員將意識到,可以在沒有這些具體細節(jié)的情況下實現(xiàn) 本發(fā)明。在其它實例中,沒有詳細地示出控制結(jié)構(gòu)、門級電路和全部軟件指令序列,以便不 模糊本發(fā)明。本領(lǐng)域的技術(shù)人員根據(jù)所包括的說明,將能夠在無需過多的實驗的情況下實 現(xiàn)適當?shù)墓δ?。說明書中提及的“一個實施例”、“一實施例”、“一示例性實施例”指示了所描述的 實施例可以包括特定特征、結(jié)構(gòu)或特性,但每個實施例可以不必包括特定特征、結(jié)構(gòu)或特 性。此外,這種短語并非必然是指同一實施例。此外,當結(jié)合一實施例描述特定特征、結(jié)構(gòu)或特性時,應(yīng)當認為,不管是否明確地描述,本領(lǐng)域技術(shù)人員能夠懂得結(jié)合其它實施例來改 變這種特征、結(jié)構(gòu)或特性??梢杂糜布⒐碳?、軟件和它們的任意組合來實現(xiàn)本發(fā)明的實施例。本發(fā)明的實 施例還可以實現(xiàn)為在機器可讀介質(zhì)上存儲的指令,其可以由一個或多個處理器來讀取并執(zhí) 行。機器可讀存儲介質(zhì)可以包括用于存儲或發(fā)送機器(例如,計算設(shè)備)可讀形式的信息 的任意裝置。例如,機器可讀存儲介質(zhì)可以包括只讀存儲器(ROM);隨機存取存儲器(RAM);磁 盤存儲介質(zhì);光存儲介質(zhì);閃存設(shè)備;電子、光學(xué)形式的信號。此外,在本文中,可以將固件、 軟件、例程和指令描述為執(zhí)行某些動作。但是,應(yīng)當理解,這種說明僅是為了方便,并且事實 上,這些動作是由執(zhí)行固件、軟件、例程和指令的計算設(shè)備、處理器、控制器和其它設(shè)備產(chǎn)生 的。在圖1中說明了在多個著色器和紋理采樣器之間共享的多對多關(guān)系的實施例。在 一個實施例中,關(guān)系圖可以包括“M”個著色器110-A到110-M,并且“K”個紋理采樣器120-A 到120-K可以以各種采樣器狀態(tài)(例如,“ρ”采樣器狀態(tài))支持各種采樣操作(例如,“N” 采樣操作)。在一個實施例中,可以用一采樣器狀態(tài)來配置紋理采樣器120,并且紋理采樣 器120可以接收將被基于該采樣器狀態(tài)而執(zhí)行的采樣操作。在一個實施例中,著色器1IO-A 可以從紋理采樣器120-A到120-K獲得紋理采樣。在其它實施例中,著色器110-A可以從例 如紋理采樣器120-B、120-D、120-G和120-J獲得紋理采樣。在一個實施例中,著色器110-A 到110-M可以代表例如頂點、幾何圖形、外殼、域、像素或計算著色器。在一個實施例中,著 色器110-A可以包括可用于采樣的多個采樣狀態(tài)(SS),并且著色器110-A例如可以使用特 定采樣器狀態(tài)來執(zhí)行多個采樣操作。在一個實施例中,采樣器狀態(tài)可以具有用于采樣操作 的單獨的邏輯。在編譯時間,可以將采樣器狀態(tài)添加到采樣器狀態(tài)(SS)中,以得到針對特 定采樣器狀態(tài)和采樣操作的最優(yōu)的代碼。在一個實施例中,紋理采樣器120-A到120-K可 以代表紋理采樣器操作,其可以實現(xiàn)支持采樣操作和采樣器狀態(tài)的紋理采樣器的子集。在一個實施例中,每個著色器110可以獲得由一個或多個紋理采樣器120生成的 紋理采樣。在一個實施例中,可以使用著色語言(例如,匯編語言、Cg、GLSL、HLSL和其它 著色語言)離線地實現(xiàn)紋理采樣器120-A到120-K。在一個實施例中,可以在創(chuàng)建著色器 110期間、或者在創(chuàng)建正交采樣器狀態(tài)對象期間、或者根據(jù)需要在創(chuàng)建階段之后的一個時間 點處,編譯紋理采樣器120。在一個實施例中,當著色器110需要紋理采樣時,采樣器二進制 代碼(SS-BIN)可以被創(chuàng)建并且可以由著色器110使用。在一個實施例中,著色器110和紋理采樣器120可以被用在例如3D圖形可 編程管線中。在一個實施例中,3D圖形可編程管線可以包括Direct3D10(D3D10)、 Direct3Dll(D3Dll),或者其它這種可從Microsoft 公司獲得的DirectX應(yīng)用程序接口 (API)的管線級,或可從硅圖公司獲得的跨平臺API的OpenGL管線級。但是,也可以在其它 環(huán)境中由任何著色器來使用紋理采樣器120。在圖2中說明了三維(3D)圖形可編程管線的實施例,其可以使用利用高級著色語 言而實現(xiàn)的紋理著色器。在一個實施例中,3D圖形可編程管線200可以包括多個級,例如 輸入數(shù)據(jù)處理塊210、多個著色器(例如頂點著色器220、外殼著色器230、域著色器250、幾 何著色器260、像素著色器270)、曲面細分單元235、光柵化塊265、攪拌器(blender) 275、紋理采樣器280-A到280-K,以及存儲器290。在一個實施例中,可編程管線級例如可以為實時應(yīng)用(例如,游戲)生成圖形。在 一個實施例中,管線級200可以表示可從Microsoft 公司獲得的DirectX應(yīng)用程序接口 (API)的 D3D11 版本。在一個實施例中,輸入數(shù)據(jù)處理塊210可以使用分別存儲在存儲器290的緩沖區(qū) 290-A和290-B中的索引數(shù)據(jù)和頂點數(shù)據(jù)來生成數(shù)據(jù)單元。在一個實施例中,頂點數(shù)據(jù)可以 表示三角形的頂點、點、線和其它類似數(shù)據(jù)。在一個實施例中,輸入數(shù)據(jù)處理塊210可以向 頂點著色器220提供數(shù)據(jù)單元。在一個實施例中,在向頂點著色器220和幾何著色器260 提供幾何數(shù)據(jù)之前,輸入數(shù)據(jù)處理塊210可以使用緩沖區(qū)290-A和290-B中存儲的頂點和 索引數(shù)據(jù)來合成幾何數(shù)據(jù)。在一個實施例中,頂點著色器220可以使用由紋理采樣器280-A到280-K生成的 紋理采樣來處理從輸入處理塊210接收的頂點。在一個實施例中,頂點著色器220可以使 用由任意一個或一些或所有的紋理采樣器280-A到280-K生成的紋理采樣。在一個實施例 中,頂點著色器220可以生成單個輸出頂點,其可以在接收到單個輸入頂點之后使用紋理 采樣來進行處理。在一個實施例中,頂點著色器220可以執(zhí)行變換以便為輸入頂點提供特 殊效果,例如光照和貼皮(skinning)。在一個實施例中,頂點著色器220可以執(zhí)行數(shù)學(xué)運算 以改變輸入頂點的顏色、紋理或位置。在一個實施例中,可以使用著色語言來實現(xiàn)頂點著色 器220,所述著色語言例如是匯編語言、用于圖形的C(Cg)語言、OpenGL著色語言(GLSL)、 或高級著色語言(HLSL)、或任何其它的著色語言。在一個實施例中,外殼著色器230可以接收面片(patch)控制點并且可以為固定 功能曲面細分單元235準備面片控制點。在一個實施例中,外殼著色器230可以從紋理采 樣器280-A到280-K中一個或多個接收紋理采樣。在一個實施例中,外殼著色器230可以 從紋理采樣器280-A到280-B接收紋理采樣。在一個實施例中,可以使用著色語言來實現(xiàn) 外殼著色器230。在一個實施例中,曲面細分單元235可以基于來自外殼著色器230的控 制輸入來細分(sub-divide)面片,并且可以將曲面細分的結(jié)果傳遞到域著色器250。在一 個實施例中,域著色器250可以操縱生成的頂點以使頂點符合一形狀,或者使用來自曲面 細分單元235的輸入和來自紋理采樣器280-A到280-K中的一個或多個的紋理采樣來執(zhí)行 位移貼圖(displacement mapping) 0在一個實施例中,域著色器250可以使用由紋理采樣 器280-B提供的紋理采樣。在一個實施例中,域著色器250可以向幾何著色器260或光柵 化塊265提供結(jié)果。在一個實施例中,可以使用高級著色語言來實現(xiàn)域著色器250。在一個實施例中,響應(yīng)于從頂點著色器220或域著色器250接收到整個圖元 (primitive)并且接收到由紋理采樣器280-A到280-K中的一個或多個生成的紋理采樣,幾 何著色器260可以生成著色的圖元。在一個實施例中,幾何著色器260可以接收由紋理采 樣器280-A到280-K生成的紋理采樣。在一個實施例中,整個圖元可以包括多個頂點。在 一個實施例中,響應(yīng)于接收到多個頂點和紋理采樣作為輸入,幾何著色器260可以創(chuàng)建零 個或多個著色的圖元。在一個實施例中,多個頂點可以包括三角形的三個頂點、或線段的兩個頂點、或點 的單個頂點以及鄰接信息作為輸入,并且可以生成零個或多個著色的頂點作為輸出。在一 個實施例中,幾何著色器260可以執(zhí)行操作,例如點帶生成、幾何曲面細分和陰影體擠出(shadow volume extrusion),以生成著色的圖元。在一個實施例中,幾何著色器260可以編 譯一個或多個紋理采樣器280,然后調(diào)用紋理采樣器280-A到280-K以從例如緩沖區(qū)290-D 中存儲的紋理數(shù)據(jù)值得到紋理采樣。在一個實施例中,可以使用匯編語言、Cg語言、HLSL語 言和GLSL語言來對幾何著色器260進行編程。在一個實施例中,光柵化塊265可以從頂點著色器220和幾何著色器260接收頂 點(矢量圖形信息),并且生成光柵化圖像,其可以包括在顯示設(shè)備上可以顯示的像素和 點。在一個實施例中,光柵化塊265可以執(zhí)行例如變換、剪取(clipping)、掃描轉(zhuǎn)換、剔除 (culling)、紋理過濾這樣的光柵化技術(shù)和其它技術(shù)。在一個實施例中,光柵化塊265可以 向像素著色器270提供像素以便處理光柵化圖像。在一個實施例中,像素著色器270可以對光柵圖像執(zhí)行豐富的著色技術(shù),以生成 逐個像素輸出。在一個實施例中,像素著色器270可以執(zhí)行諸如逐個像素照亮以及相關(guān)效 果這樣的技術(shù),以提供銳利的和更逼真的圖像,所述相關(guān)效果例如凸凹貼圖、色彩調(diào)和、陰 影、鏡面高光(specular highlights)和半透明。在一個實施例中,可以使用匯編語言、Cg 語言、HLSL語言和GLSL語言或其它類似的語言來對像素著色器270進行編程。在一個實 施例中,像素著色器270可以在生成著色效果之前,從光柵化塊265接收像素數(shù)據(jù)并且從一 個或多個紋理采樣器280-A到280-K接收紋理采樣。在一個實施例中,像素著色器270可 以從紋理采樣器280-B和280-K接收紋理采樣。在一個實施例中,像素著色器270也可以 直接從緩沖區(qū)290-F接收紋理數(shù)據(jù)值。在一個實施例中,可以將像素著色器270的輸出提 供給攪拌器275以供進一步處理。在一個實施例中,紋理采樣器280-A到280-K可以采樣紋理緩沖區(qū)290_C、290_D 和290-F和其它緩沖區(qū)中存儲的紋理數(shù)據(jù)值。在一個實施例中,可以使用用于實現(xiàn)著色器 220、230、250、260和270的著色語言來實現(xiàn)紋理采樣器280-A到280-K。這種方法可以允 許復(fù)雜的紋理采樣功能被實現(xiàn)為一段軟件代碼,其可以與采樣器狀態(tài)相匹配。在一個實施 例中,可以使用Cg語言、或GLSL語言或HLSL語言來實現(xiàn)紋理采樣器280-A到280-K。在一 個實施例中,可以在離線階段期間使用高級著色語言來實現(xiàn)紋理采樣器280-A到280-K。在 一個實施例中,可以在準備階段期間使用著色器編譯器來編譯紋理采樣器280-A到280-K, 以生成使用著色語言實現(xiàn)的采樣器的二進制代碼。在一個實施例中,當著色器220到270 被調(diào)用時,可以由著色器220、230、250、260和270來調(diào)用一個或多個紋理采樣器二進制文 件。在一個實施例中,可以在創(chuàng)建著色器220、230、250、260和270期間、在創(chuàng)建正交采樣器 狀態(tài)對象期間、或根據(jù)需要在創(chuàng)建階段之后的稍后的時間點,對紋理采樣器280-A到280-K 中的一個或多個進行編譯。在一個實施例中,紋理采樣器280-A到280-K可以執(zhí)行例如以下操作解析細節(jié)的 層次(LOD)、確定采樣、解析紋理元素(texel)地址、提取采樣和拼接采樣。在一個實施例 中,可以使用著色語言來實現(xiàn)紋理采樣器280-A到280-K的操作。在一個實施例中,解析細 節(jié)的層次可以確定mipmap,其識別將從中選擇采樣的區(qū)域。在一個實施例中,解析紋理元素 地址可以確定將從中提取采樣的位置。在一個實施例中,紋理采樣器280-A到280-K可以 支持例如點采樣、雙線性采樣、三線性采樣和各向異性過濾這樣的采樣技術(shù)。在一個實施例 中,與使用基于普通軟件的紋理采樣技術(shù)而實現(xiàn)的紋理采樣器相比,使用著色語言實現(xiàn)以 匹配著色器220到270的采樣器狀態(tài)的紋理采樣器280-A到280-K可以提高紋理采樣的運
8算的速度。在一個實施例中,紋理采樣器280-A到280-K可以用于將紋理采樣提供給頂點著 色器220、外殼著色器230、域著色器、幾何著色器260和像素著色器270。在一個實施例中, 可以在創(chuàng)建頂點著色器220期間或在創(chuàng)建采樣器狀態(tài)對象期間,編譯使用著色語言實現(xiàn)的 紋理采樣器280-A到280-K。在一個實施例中,當調(diào)用頂點著色器220時,可以由頂點著色 器220調(diào)用紋理采樣器280-A、280-B和280-K。在一個實施例中,當調(diào)用外殼著色器230 時,可以由外殼著色器230來調(diào)用紋理采樣器280-A和280-B。在一個實施例中,當調(diào)用域 著色器250時,可以由域著色器250來調(diào)用紋理采樣器280-B。在一個實施例中,當調(diào)用幾 何著色器260時,可以由幾何著色器260來調(diào)用紋理采樣器280-B和280-K,并且當調(diào)用像 素著色器270時,可以由像素著色器270來調(diào)用紋理采樣器280-B和280-K。這種方法可以允許將復(fù)雜的紋理采樣功能實現(xiàn)為一段軟件代碼,其可以與著色器 220、230、250、270的采樣器狀態(tài)相匹配,或者可以與正交采樣器狀態(tài)相匹配。在一個實施例 中,與使用基于普通軟件的紋理采樣技術(shù)而實現(xiàn)的紋理采樣器相比,使用著色語言實現(xiàn)以 匹配著色器220、230、250、260和/或270的采樣器狀態(tài)的紋理采樣器280可以將運算的速 度提高N倍。在一個實施例中,與基于普通軟件的紋理采樣技術(shù)相比,使用著色語言實現(xiàn)的 紋理采樣器280可以將性能提高N = KX,其中,基于普通軟件的紋理采樣的性能是X,K是 正整數(shù)值。在圖3中對描述了使用高級著色語言而實現(xiàn)的紋理采樣器280的流程圖300進行 了說明。在框310,可以使用著色語言來生成紋理采樣器280-A到280-K。在一個實施例中, 可以使用例如匯編、Cg、HLSL或GLSL這樣的著色語言來開發(fā)紋理采樣器280-A到280-K。 在一個實施例中,例如當開發(fā)驅(qū)動器模塊時,可以離線地生成紋理采樣器280-A到280-K。在框320,可以在采樣器狀態(tài)對象創(chuàng)建時,編譯用于生成紋理采樣器280-A到 280-K的著色器采樣器。在其它實施例中,可以根據(jù)需要來創(chuàng)建著色器采樣器。在一個實施 例中,例如如果對于繪制命令需要采樣操作,那么可以根據(jù)需要創(chuàng)建特定的采樣操作。在框330,可以使用高級著色器編譯器將紋理采樣器280-A到280-K編譯為目標 機器代碼。在一個實施例中,可以使用目標機器編譯器將紋理采樣器280-A到280-K編譯 為目標機器代碼。在一個實施例中,可以使用高級頂點著色器編譯器將紋理采樣器280-A、 280-B和280-K編譯為目標機器代碼。類似地,可以使用著色器230到270的高級著色器編 譯器將紋理著色器280-A到280-K中的一個或多個編譯為目標機器代碼。在框340,可以調(diào)用著色器220到270。在一個實施例中,可以調(diào)用例如頂點著色 器220、外殼著色器230、域著色器250、幾何著色器260和像素著色器270這樣的著色器。在框360,可以由著色器來調(diào)用一個或多個紋理采樣器280-A到280-K。在一個實 施例中,響應(yīng)于從頂點著色器220進行的調(diào)用,紋理采樣器280-A、280-B和280-K可以執(zhí)行 采樣操作并且可以生成紋理采樣。在一個實施例中,外殼著色器230可以調(diào)用紋理采樣器 280-A和280-B,域著色器250可以調(diào)用紋理采樣器280-B,幾何著色器260可以調(diào)用紋理采 樣器280-A和280-K,并且像素著色器270可以調(diào)用紋理采樣器280-B和280-K。在框380,紋理采樣器280-A到280-K可以使用存儲器190內(nèi)的紋理緩沖區(qū)中存儲 的紋理數(shù)據(jù)來生成紋理采樣。在一個實施例中,紋理采樣器280-A可以執(zhí)行采樣操作,以使 用例如在一個或多個紋理緩沖區(qū)290-C到290-F中存儲的紋理數(shù)據(jù)來生成紋理采樣。在一個實施例中,紋理采樣器280-B可以執(zhí)行采樣操作以使用在紋理緩沖區(qū)290-D中存儲的紋 理數(shù)據(jù)來生成紋理采樣,并且可以將紋理采樣提供給像素著色器270。在框390,可以由著色器220到270使用由紋理采樣器280-A到280-K生成的紋理 采樣,以在圖形元素上創(chuàng)建著色效果。在一個實施例中,頂點著色器220可以接收單個頂點 值并且在頂點上創(chuàng)建著色效果。在一個實施例中,幾何著色器260可以接收整個圖元,并且 可以在整個圖元上創(chuàng)建陰影效果。在一個實施例中,像素著色器270可以在像素或點(或 光柵圖像)上生成陰影效果。在圖4中對描述了生成并且使用紋理采樣器的流程圖400的實施例進行說明,所 述紋理采樣器是使用高級著色語言實現(xiàn)的。在一個實施例中,流程圖400描述了三個階 段——階段401、階段411和階段481。在一個實施例中,階段401可以表示離線階段,階段 411可以表示準備階段,并且階段481可以表示渲染階段。在一個實施例中,階段401可以包括紋理采樣器生成塊410。在一個實施例中,紋 理采樣器生成塊410可以指例如紋理采樣器280-A到280-K這樣的紋理采樣器的生成,紋 理采樣器可以離線地生成并且可以使用例如Cg、HLSL或GLSL這樣的高級著色語言生成,如 在框310中所描述的。在一個實施例中,階段411可以包括采樣器狀態(tài)塊415、創(chuàng)建采樣器塊420、著色器 編譯器塊445、編譯采樣器塊450和采樣器著色器二進制代碼(SS-BIN)塊470。在一個實施 例中,采樣器狀態(tài)塊415可以表示輸入數(shù)據(jù)值。在一個實施例中,塊415的輸入數(shù)據(jù)值可以 確定由塊410的紋理采樣執(zhí)行的采樣操作。塊420描述了創(chuàng)建紋理采樣器塊,其響應(yīng)于從 塊410接收到紋理采樣器代碼和從塊415接收到輸入數(shù)據(jù)值,創(chuàng)建紋理采樣器,例如280-A 到 280-K。塊445描述了著色器編譯器塊,其可以獲取在抽象層次的紋理采樣器的著色語 言,并且將紋理采樣器代碼編譯為另一抽象層次。在一個實施例中,著色器編譯器塊445可 以從創(chuàng)建紋理采樣器塊420獲取紋理采樣器代碼,并且可以引起紋理采樣器代碼的編譯, 如在編譯采樣器著色器塊450中所描述的。在一個實施例中,在塊420,可以使用高級著色語言來創(chuàng)建紋理采樣器代碼,并且 編譯采樣器著色器塊450可以編譯紋理采樣器代碼并且生成中間代碼,例如匯編語言代 碼。在一個實施例中,編譯采樣器著色器塊450還可以包括機器專用著色器編譯器,例如圖 形著色器編譯器或中央處理單元(CPU)著色器編譯器,其可以將匯編語言的中間代碼編譯 為機器專用代碼。在一個實施例中,圖形處理單元或中央處理單元可以支持機器專用代碼 的執(zhí)行。塊470描述了采樣器著色器二進制代碼塊(SS-BIN),其可以通過由塊450執(zhí)行的 編譯而被創(chuàng)建。在一個實施例中,可以在渲染階段由著色器來使用采樣器著色器二進制代 碼(SS-BIN)。在一個實施例中,階段481可以表示渲染階段,在該階段,在著色器向圖形元素提 供著色效果之后,在顯示設(shè)備上渲染圖形元素,例如頂點或整個圖元。在一個實施例中,階 段481可以包括著色器調(diào)用塊485、執(zhí)行著色器塊490和調(diào)用SS-BIN塊495。在一個實施 例中,著色器調(diào)用塊485可以調(diào)用著色器,例如頂點著色器220、外殼著色器230、域著色器 250、幾何著色器260和像素著色器270,如在框340中所描述的。
10
在一個實施例中,執(zhí)行著色器塊490可以使得著色器220到270的二進制代碼被 執(zhí)行。在一個實施例中,圖形處理單元可以支持著色器220到270的二進制代碼的執(zhí)行。在 一個實施例中,調(diào)用SS-BIN塊495可以調(diào)用一個或多個紋理采樣器280-A到280-K的二進 制文件。在一個實施例中,如果塊490可以執(zhí)行頂點著色器220,那么塊495可以調(diào)用紋理 采樣器280-A、280-B和280-K的SS-BIN。在一個實施例中,如果塊490可以執(zhí)行外殼著色 器230,那么塊495可以調(diào)用紋理采樣器280-A和280-B的SS-BIN。在一個實施例中,如果 塊490可以執(zhí)行域著色器250,那么塊495可以調(diào)用紋理采樣器280-B的SS-BIN。在一個 實施例中,如果塊490可以執(zhí)行幾何著色器260,那么塊495可以調(diào)用紋理采樣器280-A和 280-K的SS-BIN。在一個實施例中,如果塊490執(zhí)行像素著色器150,那么塊495可以調(diào)用 紋理采樣器280-B和280-K的SS-BIN。在一個實施例中,紋理采樣器280-A到280-K響應(yīng)于從著色器220到270接收到 調(diào)用,可以執(zhí)行對紋理數(shù)據(jù)的紋理采樣操作,并且可以生成紋理采樣。在一個實施例中,紋 理采樣可以被著色器用于在圖形元素上創(chuàng)建陰影效果。參照圖5,計算機系統(tǒng)500可以包括通用處理器502和圖形處理器單元(GPU) 505, 通用處理器502包括單指令多數(shù)據(jù)(SIMD)處理器。在一個實施例中,處理器502除了執(zhí)行 各種其它任務(wù)之外還可以執(zhí)行增強操作,或者可以在機器可讀存儲介質(zhì)525中存儲指令的 序列以提供增強操作。但是,指令的序列還可以被存儲在存儲器520中或存儲在任何其它 合適的存儲介質(zhì)中。在一個實施例中,可以由處理器502或GPU 505來支持圖形應(yīng)用程序 接口 GPI 510。雖然在圖5中描述了獨立的圖形處理器單元GPU 505,但是在一些實施例中,作為 另一個示例,處理器502可以用于執(zhí)行增強操作。操作計算機系統(tǒng)500的處理器502可以 是耦合到邏輯530的一個或多個處理器核心。邏輯530可以耦合到一個或多個I/O設(shè)備 560,其可以提供計算機系統(tǒng)500的接口。在一個實施例中,邏輯530例如可以是芯片組邏 輯。邏輯530耦合到存儲器520,其可以是任何類型的存儲設(shè)備,包括光存儲、磁存儲或半導(dǎo) 體存儲。圖形處理器單元505通過幀緩沖器耦合到顯示器540。在一個實施例中,可以在處理器502內(nèi)提供圖形應(yīng)用程序接口(GPI)510。但是, 在其它實施例中,可以在GPU 505內(nèi)提供(由虛線示出)圖形應(yīng)用程序接口(GPI)510。在 一個實施例中,GPI 510可以支持3D管線并且可以使用高級著色語言來實現(xiàn)紋理采樣器。 在一個實施例中,GPI 510可以離線地并且使用高級著色語言來實現(xiàn)紋理采樣器280-A到 280-K,并且可以基于目標機器來編譯如此實現(xiàn)的紋理采樣器280-A到280-K。在一個實施 例中,可以由一個或多個著色器220到270來調(diào)用紋理采樣器280-A到280-K,以得到紋理 采樣。在一個實施例中,著色器220到270可以使用由紋理采樣器280-A到280-K生成的 紋理采樣,以在圖形元素上創(chuàng)建陰影效果??梢杂酶鞣N硬件架構(gòu)來實現(xiàn)本文描述的圖形處理技術(shù)。例如,可以在芯片組內(nèi)集 成圖形功能?;蛘撸梢允褂锚毩⒌膱D形處理器。作為另一個實施例,可以由通用處理器 (包括多核處理器)來實現(xiàn)圖形功能,或?qū)D形功能實現(xiàn)為在機器可讀介質(zhì)中存儲的一組 軟件指令。
權(quán)利要求
一種用于執(zhí)行紋理采樣的方法,包括使用著色語言來實現(xiàn)紋理采樣器,通過基于提供給所述紋理采樣器的輸入值將所述紋理采樣器編譯為目標機器,從而生成紋理采樣器二進制代碼,當調(diào)用多個著色器中的第一著色器時,至少從所述第一著色器調(diào)用所述紋理采樣器二進制代碼,以及當由所述第一著色器和第二著色器調(diào)用所述紋理采樣器時,使用由所述紋理采樣器生成的第一組采樣在圖形元素上生成著色效果,其中,所述圖形元素包括線和三角形的頂點。
2.根據(jù)權(quán)利要求1所述的方法,還包括當調(diào)用所述多個著色器中的第二著色器時,至少從所述第二著色器調(diào)用所述紋理采樣 器二進制代碼,以及當由所述第二著色器調(diào)用所述紋理采樣器時,使用由所述紋理采樣器生成的第二組采 樣在圖形元素上生成著色效果。
3.根據(jù)權(quán)利要求1所述的方法,其中,在準備階段之前的離線階段中,執(zhí)行使用著色語 言來實現(xiàn)所述紋理采樣器。
4.根據(jù)權(quán)利要求3所述的方法,還包括在準備階段,基于離線實現(xiàn)的紋理采樣器代碼 和采樣器狀態(tài)輸入值來創(chuàng)建所述紋理采樣器,其中,所述采樣器狀態(tài)輸入值確定由所述紋 理采樣器執(zhí)行的采樣操作。
5.根據(jù)權(quán)利要求4所述的方法,其中,將所述紋理采樣器編譯為目標機器包括使用著色器編譯器,從用所述著色語言實現(xiàn)的所述紋理采樣器生成中間語言代碼,以及使用機器專用著色器編譯器,從所述中間語言生成機器級代碼。
6.根據(jù)權(quán)利要求5所述的方法,其中,所述著色語言是高級語言并且所述中間語言是 匯編級語言。
7.根據(jù)權(quán)利要求7所述的方法,還包括當在渲染階段執(zhí)行所述第一著色器時,從所述 第一著色器調(diào)用所述紋理采樣器二進制代碼。
8.根據(jù)權(quán)利要求1所述的方法,還包括當在渲染階段執(zhí)行所述第二著色器時,從所述 第二著色器調(diào)用所述紋理采樣器二進制代碼。
9.根據(jù)權(quán)利要求1所述的方法,還包括將第一紋理采樣器關(guān)聯(lián)到第一著色器和所述 第二著色器,其中,所述第一紋理采樣器用于為所述第一著色器和所述第二著色器生成采 樣。
10.一種機器可讀存儲介質(zhì),其包括多條指令,響應(yīng)于執(zhí)行所述指令,導(dǎo)致處理器使用著色語言來實現(xiàn)紋理采樣器,通過基于采樣器狀態(tài)和采樣器操作將所述紋理采樣器編譯為目標機器,從而生成紋理 采樣器二進制代碼,當調(diào)用第一著色器時,從所述第一著色器調(diào)用所述紋理采樣器二進制代碼,以及當由所述第一著色器調(diào)用所述紋理采樣器時,使用由所述紋理采樣器生成的第一組采 樣在圖形元素上生成著色效果,其中,所述圖形元素包括線和三角形的頂點。
11.根據(jù)權(quán)利要求10所述的機器可讀存儲介質(zhì),還包括當調(diào)用第二著色器時,從所述第二著色器調(diào)用所述紋理采樣器二進制代碼,以及 當由所述第二著色器調(diào)用所述紋理采樣器時,使用由所述紋理采樣器生成的第二組采 樣在圖形元素上生成著色效果。
12.根據(jù)權(quán)利要求11所述的機器可讀存儲介質(zhì),其中,在準備階段之前的離線階段中, 執(zhí)行使用著色語言來實現(xiàn)所述紋理采樣器。
13.根據(jù)權(quán)利要求12所述的機器可讀存儲介質(zhì),還包括在準備階段,基于離線實現(xiàn)的 紋理采樣器代碼和采樣器狀態(tài)輸入值來創(chuàng)建所述紋理采樣器,其中,所述采樣器狀態(tài)輸入 值確定由所述紋理采樣器執(zhí)行的采樣操作。
14.根據(jù)權(quán)利要求13所述的機器可讀存儲介質(zhì),其中,將所述紋理采樣器編譯為目標 機器包括使用著色器編譯器,從用所述著色語言實現(xiàn)的所述紋理采樣器生成中間語言代碼,以及使用機器專用著色器編譯器,從所述中間語言生成機器級代碼。
15.根據(jù)權(quán)利要求14所述的機器可讀存儲介質(zhì),其中,所述著色語言是高級語言并且 所述中間語言是匯編級語言。
16.根據(jù)權(quán)利要求10所述的機器可讀存儲介質(zhì),還包括當在渲染階段執(zhí)行所述第一 著色器時,從所述第一著色器調(diào)用所述紋理采樣器二進制代碼。
17.根據(jù)權(quán)利要求10所述的機器可讀存儲介質(zhì),還包括當在渲染階段執(zhí)行所述第二 著色器時,從所述第二著色器調(diào)用所述紋理采樣器二進制代碼。
18.根據(jù)權(quán)利要求10所述的機器可讀存儲介質(zhì),還包括將第一紋理采樣器和第二紋 理采樣器關(guān)聯(lián)到第一著色器,并且將第二紋理采樣器和第三紋理采樣器關(guān)聯(lián)到所述第二著 色器。
19.一種系統(tǒng),包括處理器,其中,所述處理器用于支持多個圖形應(yīng)用以及一個或多個圖形應(yīng)用可編程接Π,圖形處理單元,以及存儲器,其耦合到所述處理器和所述圖形處理單元,其中,所述圖形應(yīng)用可編程接口包括使用著色語言實現(xiàn)的一個或多個紋理采樣器, 其中,通過基于采樣器狀態(tài)和采樣器操作將所述紋理采樣器編譯為目標機器,從而生 成紋理采樣器二進制代碼,其中,當調(diào)用第一著色器時,從所述第一著色器調(diào)用所述紋理采樣器二進制代碼,以及 其中,當由所述第一著色器調(diào)用所述紋理采樣器時,使用由所述紋理采樣器生成的第 一組采樣在圖形元素上生成著色效果,其中,所述圖形元素包括線和三角形的頂點。
20.根據(jù)權(quán)利要求19所述的系統(tǒng),其中,所述存儲器包括用于存儲紋理數(shù)據(jù)的一個或 多個緩沖區(qū),其中,所述一個或多個紋理采樣器從所述一個或多個緩沖區(qū)獲取數(shù)據(jù)值,并且 生成紋理采樣。
21.根據(jù)權(quán)利要求19所述的系統(tǒng),其中,在準備階段之前的離線階段中,執(zhí)行使用著色 語言來實現(xiàn)所述紋理采樣器。
22.根據(jù)權(quán)利要求21所述的系統(tǒng),其中,在準備階段,基于離線實現(xiàn)的紋理采樣器代碼和采樣器狀態(tài)輸入值來創(chuàng)建所述紋理采樣器,其中,所述采樣器狀態(tài)輸入值確定由所述紋 理采樣器執(zhí)行的采樣操作。
23.根據(jù)權(quán)利要求22所述的系統(tǒng),其中,將所述紋理采樣器編譯為目標機器包括使用著色器編譯器,從用所述著色語言實現(xiàn)的所述紋理采樣器生成中間語言代碼,以及使用機器專用著色器編譯器,從所述中間語言生成機器級代碼,其中,所述著色語言是高級語言并且所述中間語言是匯編級語言。
24.根據(jù)權(quán)利要求18所述的系統(tǒng),還包括當在渲染階段中執(zhí)行所述第一著色器時,從所述第一著色器調(diào)用所述紋理采樣器二進 制代碼,以及當在渲染階段中執(zhí)行所述第二著色器時,從所述第二著色器調(diào)用所述紋理采樣器二進 制代碼。
25.根據(jù)權(quán)利要求19所述的系統(tǒng),還包括將第一紋理采樣器和第二紋理采樣器關(guān)聯(lián)到所述第一著色器,以及將所述第一紋理采樣器和第三紋理采樣器關(guān)聯(lián)到所述第二著色器,其中,所述第一紋 理采樣器用于為所述第一著色器和所述第二著色器生成采樣,其中,所述第二紋理采樣器 用于為所述第一著色器生成采樣,并且所述第三紋理采樣器用于為所述第二著色器生成采 樣。
26.根據(jù)權(quán)利要求19所述的系統(tǒng),其中,所述圖形處理單元用于支持所述圖形應(yīng)用可 編程接口,其中,所述圖形應(yīng)用可編程接口包括圖形可編程管線,其中,所述圖形可編程管線還包 括多個著色器和使用著色語言實現(xiàn)的一個或多個紋理采樣器,其中,通過基于提供給所述一個或多個紋理采樣器的輸入值將所述一個或多個紋理采 樣器編譯為目標機器,從而生成所述一個或多個紋理采樣器的紋理采樣器二進制代碼,其中,當調(diào)用多個著色器中的至少一個時,從所述多個著色器中的所述至少一個調(diào)用 所述紋理采樣器二進制代碼,以及其中,當由所述多個著色器中的所述至少一個調(diào)用所述一個或多個紋理采樣器時,所 述一個或多個紋理采樣器生成紋理采樣,其中,所述多個紋理采樣器中的所述至少一個使 用所述紋理采樣以在圖形元素上生成著色效果,其中,所述圖形元素包括線和三角形的頂 點以及點。全文摘要
使用著色語言來實現(xiàn)紋理采樣器。著色器編譯器用于基于提供給紋理采樣器的采樣器狀態(tài)、采樣器操作以及其它靜態(tài)要素輸入值將紋理采樣器編譯為目標機器。當調(diào)用著色器時,諸如頂點著色器、幾何著色器、像素著色器、外殼著色器、域著色器和計算著色器這樣的著色器可以調(diào)用一個或多個紋理采樣器。作為一段軟件代碼的一個或多個紋理采樣器可以根據(jù)紋理數(shù)據(jù)生成紋理采樣,并且將這種紋理采樣提供給著色器。著色器使用紋理采樣在圖形元素上生成著色效果。然后,將圖形元素連同著色效果渲染在顯示設(shè)備上。
文檔編號G06T1/00GK101937556SQ20101022086
公開日2011年1月5日 申請日期2010年6月29日 優(yōu)先權(quán)日2009年6月29日
發(fā)明者P·羅森菲爾德, U·薩雷 申請人:英特爾公司