麻豆精品无码国产在线播放,国产亚洲精品成人AA片新蒲金,国模无码大尺度一区二区三区,神马免费午夜福利剧场

用于SIMD處理的任務組合的制作方法

文檔序號:11251834閱讀:435來源:國知局
用于SIMD處理的任務組合的制造方法與工藝



背景技術:

圖形處理系統通常被配置成例如從在計算機系統上運行的應用接收圖形數據,并且渲染圖形數據以提供渲染輸出。例如,被提供給圖形處理系統的圖形數據可以描述要被渲染的三維(3d)場景內的幾何形狀,并且渲染輸出可以是場景的經渲染圖像。一些圖形處理系統(其可以被稱為“基于圖塊的”圖形處理系統)使用被細分為多個圖塊的渲染空間。“圖塊”是渲染空間的區域,并且可以具有任何合適的形狀,但通常是矩形(其中術語“矩形”包括正方形)。如本領域中已知的,將渲染空間細分為圖塊有很多好處。例如,將渲染空間細分為圖塊允許以逐圖塊方式來渲染圖像(即,針對每個圖塊執行渲染過程),其中針對圖塊的圖形數據可以在圖塊的渲染期間被臨時存儲在“片上”,從而減少在系統存儲器與實現圖形處理系統的圖形處理單元(gpu)的芯片之間傳送的數據量。

基于圖塊的圖形處理系統通常以兩個階段操作:幾何處理階段和光柵化階段。在幾何處理階段中,分析用于渲染的圖形數據以針對每個圖塊確定哪些圖形數據項存在于該圖塊內。然后,在光柵化階段中,可以通過處理被確定為存在于該圖塊內的這些圖形數據項來渲染圖塊(而不需要處理在幾何處理階段中被確定為不存在于該特定圖塊內的圖形數據項)。

圖1示出了基于圖塊的圖形處理系統100的示例。系統100包括存儲器102、幾何處理邏輯104和光柵化邏輯106。幾何處理邏輯104和光柵化邏輯106可以在gpu上實現,并且可以共享一些處理資源,如本領域中已知的。幾何處理邏輯104包括幾何取回單元108、幾何變換邏輯110、剔除/裁剪單元112和圖塊化(tiling)單元114。光柵化邏輯106包括參數取回單元116、隱藏表面去除(hsr)單元118和紋理化/著色單元120。存儲器102可以被實現為一個或多個物理存儲器塊,并且包括圖形存儲器122、經變換參數存儲器124、控制流存儲器126和幀緩沖器128。

幾何處理邏輯104執行幾何處理階段,在幾何處理階段中,幾何取回單元108從圖形存儲器122取回幾何數據并且將取回的數據傳遞給變換邏輯110。幾何數據包括描述要被渲染的幾何的圖形數據項。例如,圖形數據項可以表示幾何形狀,幾何形狀描述場景中的結構的表面,并且被稱為“圖元”。常見的圖元形狀是三角形,但是圖元可以是其他2d形狀并且也可以是線或點。對象可以由一個或多個這樣的圖元組成。對象可以由數千甚至數百萬個這樣的圖元組成。場景通常包含很多對象。圖形數據項中的一些可以是控制點,控制點描述要被鑲嵌(tessellate)以生成多個鑲嵌的圖元的補片(patch)。

變換邏輯110將幾何數據變換到渲染空間中,并且可以應用本領域中已知的照明/屬性處理。所得到的數據被傳遞給剔除/裁剪單元112,剔除/裁剪單元112剔除和/或裁剪落在視見平截頭體外部的任何幾何形狀。所得到的經變換幾何數據項(例如,圖元)被提供給圖塊化單元114,并且還被提供給存儲器102用于存儲在經變換參數存儲器124中。圖塊化單元114為渲染空間的每個圖塊生成控制流數據,其中針對圖塊的控制流數據包括要用于渲染圖塊的經變換圖元(即,至少部分位于圖塊內的經變換圖元)的標識符。針對圖塊的控制流數據可以被稱為針對圖塊的“顯示列表”或“對象列表”。針對圖塊的控制流數據被提供給存儲器102用于存儲在控制流存儲器126中。因此,在幾何處理階段之后,將要被渲染的經變換圖元存儲在經變換參數存儲器124中,并且將指示經變換圖元中的哪些存在于每個圖塊中的控制流數據存儲在控制流存儲器126中。

在光柵化階段中,光柵化邏輯106以逐圖塊的方式渲染圖元。參數取回單元116接收針對圖塊的控制流數據,并且從經變換參數存儲器124中取回所指示的經變換圖元,該經變換圖元如由針對圖塊的控制流數據所指示的。所取回的經變換圖元被提供給隱藏表面去除(hsr)單元118,hsr單元118去除被隱藏(例如被其他圖元片元隱藏)的圖元片元。執行隱藏表面去除的方法是本領域中已知的。術語“片元”是指在采樣點處的圖元的樣本,其將被處理以渲染圖像的像素。在一些示例中,可以存在片元到像素的一對一映射。然而,在其他示例中,可能存在比像素更多的片元,并且此過采樣可以允許像素值的較高質量的渲染,例如,通過支持可以應用于多個片元的抗鋸齒和其他濾波以渲染每個像素值。未被hsr單元118去除的圖元被提供給紋理化/著色單元120,紋理化/著色單元120對圖元片元應用紋理化和/或著色。雖然在圖1中未示出,但是紋理化/著色單元120可以從存儲器102接收紋理數據,以便將紋理化應用于圖元片元,如本領域中已知的。紋理化/著色單元120可以對圖元片元(例如,alpha混合和其他處理)應用進一步的處理,如本領域中已知的,以便確定圖像的經渲染像素值。針對每個圖塊執行光柵化階段,使得可以渲染整個圖像,其中整個圖像的像素值被確定。經渲染像素值被提供給存儲器102用于存儲在幀緩沖器128中。然后可以以任何合適的方式使用經渲染圖像,例如,顯示在顯示器上或存儲在存儲器中或傳輸到另一設備等。

隨著計算機圖形應用(例如游戲應用)的復雜性增加,用于表示場景的幾何數據的量趨于增加。這意味著在圖1的系統中,從幾何處理邏輯104提供到存儲器102并且存儲在經變換參數存儲器124中的經變換幾何數據的量增加。從幾何處理邏輯104(其通常實現在“片上”)到存儲器102(其通常實現在“片外”作為系統存儲器)的數據傳送可以是相對慢的過程(與渲染幾何數據中涉及的其他過程相比)并且可能消耗大量的存儲器102。

因此,如在英國專利號gb2458488中所描述的,一些基于圖塊的圖形處理系統可以使用“未變換顯示列表”,使得針對圖塊的控制流數據包括對輸入幾何數據的指示,即未變換幾何數據,而不是經變換幾何數據。這意味著經變換幾何數據不需要從幾何處理邏輯提供給系統存儲器,或者存儲在系統存儲器中。這些系統在光柵化邏輯中實現變換單元,因為由光柵化邏輯取回的幾何數據是未變換的,但是在一些情況下,避免將經變換圖元傳送到系統存儲器并且將它們存儲在系統存儲器中的延遲和存儲器使用的好處可以超過在光柵化階段執行變換的處理成本。

圖2示出了使用未變換顯示列表的系統200的示例,類似于gb2458488中描述的。系統200類似于圖1所示的系統100,并且包括存儲器202、幾何處理邏輯204和光柵化邏輯206。幾何處理邏輯204和光柵化邏輯206可以在gpu上實現,并且可以共享一些處理資源,如本領域中已知的。幾何處理邏輯204包括幾何數據取回單元208、幾何變換邏輯210、剔除/裁剪單元212和圖塊化單元214。光柵化邏輯206包括取回單元216、光柵化變換邏輯230、hsr單元218和紋理化/著色單元220。存儲器202可以被實現為一個或多個物理存儲器塊,并且包括圖形存儲器222、控制流存儲器226和幀緩沖器228。

幾何處理邏輯204執行幾何處理階段,在幾何處理階段中,幾何數據取回單元208從圖形存儲器222取回幾何數據并且將取回的數據傳遞給變換邏輯210。取回單元208可以僅取回用于計算圖形數據項的位置的數據(例如圖元),因為幾何處理邏輯204不需要圖形數據項的其他數據(例如,在對圖形數據項進行渲染期間應用的顏色數據或紋理數據)。這不同于系統100,其中由取回單元108取回針對圖形數據項的所有數據。變換邏輯210將圖形數據項的位置數據變換到渲染空間中,并且所得到的數據被傳遞到剔除/裁剪單元212,剔除/裁剪單元212剔除和/或裁剪落在視見平截頭體外部的任何圖形數據項。圖塊化單元214為渲染空間的每個圖塊生成控制流數據,其中針對圖塊的控制流數據包括要用于渲染圖塊的圖形數據項(例如在被變換時至少部分地位于圖塊內的圖元)的標識符??刂屏鲾祿械臉俗R符標識輸入圖形數據項,即存儲在圖形存儲器222中的圖形數據項。這不同于圖1所示的系統100,其中控制流數據中的標識符標識存儲在經變換參數存儲器124中的經變換圖元。針對圖塊的控制流數據被提供給存儲器202用于存儲在控制流存儲器226中。

在光柵化階段中,光柵化邏輯206的取回單元216從控制流存儲器226接收針對圖塊的控制流數據,并且從圖形存儲器222中取回所指示的輸入圖形數據項,該輸入圖形數據項如由針對圖塊的控制流數據所指示的。輸入圖形數據項未被變換。變換邏輯230將所取回的圖形數據項變換到渲染空間中。經變換圖形數據項被提供給hsr單元218,hsr單元218執行hsr以去除隱藏的圖元片元。紋理化和著色單元220然后對未被hsr單元218去除的圖元片元執行諸如紋理化和/或著色的處理。hsr單元218以及紋理化和著色單元220以與圖1所示并且以上針對渲染圖元描述的系統100的相應單元118和120類似的方式來操作。所得到的經渲染像素值被提供給存儲器202用于存儲在幀緩沖器228中,并且隨后可以被使用,例如,顯示在顯示器上或存儲在存儲器中或傳輸到另一設備等。

先前的專利gb2458488描述了針對光柵化階段的優化,其中照明或屬性處理被推遲直到已經執行了隱藏表面去除之后。在該優化中,在光柵化階段中實現兩個變換單元:在hsr單元之前實現的第一變換單元和在hsr單元之后實現的第二變換單元,第一變換單元僅變換圖元的“位置數據”(即,用于計算圖元的位置的數據),第二變換單元針對通過hsr單元的深度測試的圖元執行照明或屬性處理。以這種方式,僅為沒有被hsr單元剔除的圖元計算圖元的非位置屬性。

先前的專利gb2458488描述了另一種優化,其中針對圖元的位置數據在幾何處理階段中被變換,并且然后被存儲在參數緩沖器中。然后可以在光柵化階段期間取回針對圖元的位置數據,并且由hsr單元和其他處理單元使用。針對圖元的非位置屬性數據從存儲器中被取回,并且被變換以供hsr單元和其他處理單元使用。這種優化避免了對于在光柵化階段中重新計算的針對圖元的經變換位置數據的需要。



技術實現要素:

提供本發明內容以便以簡化的形式介紹將在以下具體實施方式中進一步描述的一些概念。本發明內容不旨在標識所要求保護的主題的關鍵特征或必要特征,也不旨在用于限制所要求保護的主題的范圍。

提供了一種被配置成渲染圖元的圖形處理系統,圖形處理系統包括:

高速緩存系統,其被配置成:

在高速緩存中存儲圖形數據項用于在渲染圖元時使用;以及

確定與要被處理用于渲染的圖元相關的圖形數據項是否存在于高速緩存中;

任務組合單元,其被配置成:

存儲針對相應任務的多個任務條目,計算實例可以被分配給相應任務,計算實例用于生成由高速緩存系統確定為不存在于高速緩存中的圖形數據項,其中任務條目指示哪些計算實例已經被分配給相應任務,并且其中任務條目與能夠被分配給相應任務的計算實例的特性相關聯;

基于計算實例的特性來向任務分配要被執行的計算實例;以及

輸出一個或多個任務用于執行;

simd處理邏輯,其被配置成以simd方式執行從任務組合單元輸出的任務的計算實例,從而確定用于存儲在高速緩存中的圖形數據項;以及

圖元處理邏輯,其被配置成使用被存儲在高速緩存中的圖形數據項來渲染圖元。

提供了一種在圖形處理系統中處理圖元的方法,該方法包括:在圖形處理系統的高速緩存中存儲圖形數據項用于在渲染圖元時使用;確定與要被處理用于渲染的圖元相關的圖形數據項是否存在于高速緩存中;在圖形處理系統的任務組合單元中存儲針對相應任務的多個任務條目,計算實例可以被分配給相應任務,計算實例用于生成被確定為不存在于高速緩存中的圖形數據項,其中任務條目指示哪些計算實例已經被分配給相應任務,并且其中任務條目與能夠被分配給相應任務的計算實例的特性相關聯;基于計算實例的特性來向任務分配要被執行的計算實例;輸出一個或多個任務用于執行;以simd方式執行所輸出的任務的計算實例,從而確定用于存儲在高速緩存中的圖形數據項;以及使用被存儲在高速緩存中的圖形數據項來渲染圖元。

可以提供計算機可讀代碼,當代碼在計算機上運行時,計算機可讀代碼適于執行本文中所描述的任何方法的步驟。計算機可讀代碼可以被編碼在計算機可讀存儲介質上。

本文中所描述的圖形處理系統可以在集成電路上的硬件中實施。還提供了一種在集成電路制造系統處制造根據本文中所描述的任何示例的圖形處理系統的方法。還可以提供一種集成電路定義數據集,當在集成電路制造系統中被處理時,該集成電路定義數據集將系統配置成制造根據本文中所描述的任何示例的圖形處理系統。集成電路定義數據集可以存儲在計算機可讀存儲介質上。

如對于本領域技術人員顯而易見的,上述特征可以適當地組合,并且可以與本文中所描述的示例的任何方面組合。

附圖說明

現在將參考附圖詳細描述示例,在附圖中:

圖1示出了使用經變換顯示列表的第一現有技術圖形處理系統的示例;

圖2示出了使用未變換顯示列表的第二現有技術圖形處理系統的示例;

圖3示出了根據本文中所描述的實施例的圖形處理系統;

圖4是示出在圖形處理系統中處理圖元的方法的流程圖;

圖5示出了用于從輸入圖形數據項生成子圖元的處理階段的序列的示例;

圖6示出了圖3所示的圖形處理系統的一些組件的更詳細的表示;

圖7示出了由simd處理邏輯執行任務;

圖8表示示例中的任務組合單元;

圖9示出了根據替選實施例的圖形處理系統;

圖10示出了根據另外的替選實施例的圖形處理系統;

圖11示出了針對任務的計算實例的輸入和輸出引用;

圖12示出了用于存儲針對任務的計算實例的輸入和輸出引用的任務槽的表;

圖13示出了用于存儲針對任務的計算實例的輸入和輸出引用的任務表和圖元表;

圖14示出了其中實現圖形處理系統的計算機系統;以及

圖15示出了用于生成實施圖形處理系統的集成電路的集成電路制造系統。

附圖示出了各種示例。本領域技術人員將理解,附圖中示出的元件邊界(例如,框、框組或其他形狀)表示邊界的一個示例??赡艿氖?,在一些示例中,一個元件可以被設計為多個元件或者多個元件可以被設計為一個元件。在適當的情況下,在整個附圖中使用共同的附圖標記來指示相似的特征。

具體實施方式

現在將僅通過示例的方式描述實施例。

上述系統200非常適合于處理圖形數據項(諸如圖元),該圖形數據項在被渲染時不生成另外的圖元。然而,很多輸入圖形數據項的處理可能導致一個或多個子圖元的生成。術語“子圖元”在本文中用于指代通過處理輸入圖形數據項而生成的圖元。因此,子圖元沒有存儲在圖形存儲器222中,而是從存儲在圖形存儲器222中的輸入圖形數據項生成。例如,如果輸入圖形數據項是描述要被鑲嵌的補片的控制點,則控制點的鑲嵌可能產生很多子圖元(例如,可以導出兩個、幾十個、幾百個或幾千個圖元)。此外,可以對圖形數據項執行諸如頂點著色、域著色、幾何著色和裁剪的其他操作,并且其他操作還可以將圖元分割為多個子圖元。由于系統200使用包括存儲在圖形存儲器222中的輸入圖形數據項的標識符的控制流數據,所以需要在系統200中的幾何處理階段和光柵化階段二者中對于在幾何處理階段中未被剔除的輸入圖形數據項執行被實現用于從輸入圖形數據項確定子圖元(至少針對子圖元的位置數據)的處理階段。因此,與用于生成子圖元的處理階段相關地重復一些處理。

可以執行多個不同的操作以用于從輸入圖形數據項導出要被渲染的圖元??梢詧绦械牟僮鞯囊恍┦纠琼旤c著色、外殼著色、域著色和幾何著色。操作及其操作的圖形數據項的組合形成可以被執行以對圖形數據項執行操作的計算實例(例如,頂點著色器實例、外殼著色器實例、域著色器實例或幾何著色器實例)。在圖形處理系統中,類似的計算實例可能用不同的數據項來執行多次,例如,對于與那些像素重疊的圖元的相應像素,可以多次執行著色器程序。因此,這些計算實例非常適合以單指令多數據(simd)方式執行。因此,計算實例被分組成用于在simd處理器上執行的任務。每個任務包括多個計算實例,其中任務中的計算實例的數目取決于實現,例如,取決于在其上執行任務的simd處理器的寬度。例如,在本文中所描述的示例中,每個任務能夠包含多達32個計算實例,但是在其他示例中,每個任務可以能夠包含不同數目的計算實例,例如,8個、16個或64個。出于效率的原因,優選地,可以被包括在任務中的計算實例的數目可以是2的冪。

由于simd處理器并行地對多個數據項執行單個指令,因此被包括在用于simd執行的共同的任務中的計算實例應當彼此兼容,即共享用于執行的特性。例如,被包括在同一任務中的計算實例在它們具有相同的著色器類型(例如,如果它們屬于相同的著色器執行,即相同的管線階段(pipelinestage))并且共享相同的狀態或兼容狀態的情況下是兼容的。例如,如果綁定到該管線階段的著色器代碼、常數緩沖器、著色器資源、采樣器狀態和輸入緩沖器相同,則可以認為兩個狀態對于給定的管線階段是兼容的。

在一個簡單的示例中,不是一旦創建計算實例就執行它,而是將計算實例分組到任務中。當任務變得充滿計算實例時(在一些示例中,在任務中可以包括多達32個計算實例),則該任務被發送用于由simd處理器進行處理,使得被包括在該任務中的計算實例被并行執行。然后可以在新的任務中包括另外的計算實例。如果新的計算實例與當前被包括在開放任務中的計算實例不兼容(例如,如果新的計算實例涉及與先前的計算實例不同的著色器類型,或者如果針對新的計算實例的狀態不同于針對先前的計算實例的狀態),則可以將當前任務沖刷(flush)到simd處理器用于執行,即使任務未滿(例如,如果任務具有32個計算實例的容量但是包括少于32個計算實例)。這允許將新的計算實例分配給新的任務。然而,這導致由simd處理器執行未完全滿的任務。當任務在它們完全充滿計算實例之前被執行時,simd處理的效率降低。換句話說,增加被包括在由simd處理器執行的任務中的計算實例的平均數目可以提高simd處理的效率。因此,發生的(導致simd任務被沖刷)的狀態改變和/或著色器類型改變的數目的增加可能趨向于導致simd處理效率的降低。

在幾何處理階段中,處理輸入圖形數據項以生成在考慮接下來的輸入圖形數據項之前從這些被處理的輸入圖形數據項導出的所有子圖元。因此,在幾何處理階段中,通常為特定的輸入圖形數據項連續地創建很多計算實例,并且這些計算實例可能共享狀態和著色器類型。因此,在幾何處理階段中,很多計算實例通??梢栽谌蝿毡粵_刷之前被分組到任務中。然而,如從下面的描述將變得顯而易見的,在光柵化階段中,狀態和/或著色器類型更可能在連續地創建的計算實例之間改變,因此在光柵化階段中的simd處理的效率可能低于幾何處理階段。下面描述的示例提供改進的任務占用率,從而與上述簡單方法相比,提高了光柵化階段中的simd處理效率。

圖3示出根據本文中所描述的實施例的圖形處理系統300。系統300類似于圖2所示的系統200,但包括用于導出子圖元的組件。具體地,系統300包括存儲器302、幾何處理邏輯304和光柵化邏輯306。幾何處理邏輯304和光柵化邏輯306可以在gpu上實現,并且可以共享一些處理資源,如本領域中已知的。幾何處理邏輯304包括幾何數據取回單元308、變換和圖元導出邏輯310和圖塊化單元314。光柵化邏輯306包括取回單元316、渲染隊列344和圖元處理邏輯317。圖元處理邏輯317包括裁剪和變換邏輯330、hsr單元318和紋理化/著色單元320。光柵化邏輯306還包括高速緩存系統334,高速緩存系統334包括高速緩存336和高速緩存控制器338。光柵化邏輯306還包括任務組合單元340、任務依賴性單元342和simd處理邏輯346。存儲器302可以被實現為一個或多個物理存儲器塊,并且包括圖形存儲器322、控制流存儲器326和幀緩沖器328。

在一個示例中參考圖4所示的流程圖描述系統300的操作。

在步驟s402中,幾何數據取回單元308從圖形存儲器322中取回幾何數據,并且將所取回的數據傳遞給變換和圖元導出邏輯310。所取回的數據可以是“位置數據”,“位置數據”可以包括用于在計算圖形數據項的位置時使用的數據。例如,取回單元308可以僅取回圖形數據項的位置數據,因為幾何形狀處理邏輯304不需要圖形數據項的其他數據(例如,要被應用于圖形數據項的顏色數據或紋理數據等)。如上所述,圖形數據項可以例如是圖元或描述要被鑲嵌的補片的控制點。

在步驟s404中,變換和圖元導出邏輯310將圖形數據項的位置數據變換到渲染空間中。此外,在步驟s404中,變換和圖元導出邏輯310確定從輸入圖形數據項導出的一個或多個子圖元的渲染空間內的經變換位置。步驟s404可以涉及執行多個不同的功能,因為可以以多種不同的方式從輸入圖形數據項導出子圖元。具體地,變換和圖元導出邏輯310可以包括一個或多個處理模塊,用于從輸入圖形數據項導出經變換子圖元,例如,頂點著色模塊、幾何著色模塊和/或鑲嵌模塊。變換和圖元導出邏輯310還包括類似于上面關于圖1和圖2所描述的裁剪/剔除單元的裁剪/剔除單元。由變換和圖元導出邏輯310導出的子圖元的位置、以及沒有從中導出子圖元的圖形數據項的經變換位置數據被提供給剔除/裁剪單元,用于裁剪和/或剔除不完全落在渲染空間內的圖形數據項。

圖5示出了從輸入圖形數據項導出子圖元的處理階段的序列的示例。矩形表示操作,而平行四邊形表示其輸入和輸出。操作的輸出可以通過層級的較低級別中的多個操作被讀取作為輸入。本文中所描述的示例指代作用于圖形數據項的變換和圖元導出邏輯310,而沒有明確地說,盡管應當理解為是這樣的情況:變換和圖元導出邏輯310作用于這些圖形數據項的位置數據。圖5示出了兩個補片(504a和504b),它們都包括四個輸入控制點。兩個控制點由兩個補片504共享,使得在圖5所示的示例中有六個不同的控制點。相應頂點著色器實例(5020至5025)由變換和圖元導出邏輯310使用以將六個控制點變換到渲染空間中。來自頂點著色器5020到5023的輸出描述第一補片504a,并且來自頂點著色器5022到5025的輸出描述第二補片504b。變換和圖元導出邏輯310實現外殼著色器506a和506b的兩個實例(一個外殼著色器實例用于補片504a和504b中的每個)和固定功能鑲嵌器508a和508b的兩個實例。每個外殼著色器實例(506a和506b)生成鑲嵌因子(507a和507b),其定義表示相應補片504a和504b的鑲嵌的圖元。外殼著色器實例(506a和506b)還生成包括要在域著色器中使用的輸出控制點和補片常數數據的其他補片輸出數據(505a和505b)。外殼著色器實例506準備鑲嵌因子507a和507b,并且鑲嵌器508執行鑲嵌以生成定義鑲嵌的圖元的頂點uv坐標509a和509b。在圖5所示的簡單示例中,補片a504a產生兩個鑲嵌的圖元,而補片b504b產生一個鑲嵌的圖元(由于不同的鑲嵌因子)。應當顯而易見的是,在其他示例中,可以通過鑲嵌產生不同數目的圖元,并且具體地可以產生多于兩個圖元,例如,可以通過對補片進行鑲嵌來產生幾十、幾百或甚至幾千個圖元。針對鑲嵌的圖元的頂點的頂點數據(其由來自鑲嵌器508的頂點uv坐標509以及來自外殼著色器506的輸出控制點和其他圖形補片數據項505定義)被輸入到域著色器實例510中,域著色器實例510用于操縱鑲嵌的頂點,例如以將高度圖應用于頂點等。變換和圖元導出邏輯310實現域著色器(510a0至510a3和510b0至510b2)的七個實例,其將相應變換應用于表示圖塊504a和504b的鑲嵌的圖元的頂點。由域著色器510a0、510a1和510a2提供的經變換頂點表示鑲嵌的圖元512a0。由域著色器510a1、510a2和510a3提供的經變換頂點表示鑲嵌的圖元512a1。由域著色器510b0、510b1和510b2提供的經變換頂點表示鑲嵌的圖元512b0。注意,可以共享從相同的補片產生的針對鑲嵌的圖元的頂點(例如,圖元512a0和512a1共享兩個頂點)。由鑲嵌階段生成的鑲嵌的圖元(512a0、512a1和512b0)被饋送到變換和圖元導出邏輯310的幾何著色器(gs)階段,gs階段被配置成針對每個圖元運行幾何著色器的兩個實例。由每個gs實例生成的圖元的數目從0到由應用規定的上限(例如,高達256)變化,這取決于gs實例被安排執行的操作。在圖5所示的簡單示例中,每個gs實例產生從0到2個圖元。具體地,gs實例514a00被應用于圖元512a0并且產生兩個圖元516a00和516a01;gs實例514a01被應用于圖元512a0并且產生一個圖元516a02;gs實例514a10被應用于圖元512a1并且產生零個圖元;gs實例514a11被應用于圖元512a1并且產生一個圖元516a10;gs實例514b00被應用于圖元512b0并且產生一個圖元516b00;并且gs實例514b01被應用于圖元512b0并且產生一個圖元516b01。

圖5示出了從輸入圖形數據項導出子圖元的處理階段的序列的示例。在其他示例中,可以執行不同的處理階段,并且在該序列中可以執行更少的或更多的處理階段。在本文所描述的示例中,處理階段的序列可以包括實現頂點著色器、外殼著色器、域著色器和幾何著色器中的一個或多個。例如,在一些示例中,僅執行頂點著色,并且在其他示例中,執行頂點著色和裁剪。在其他示例中可以實現處理階段的其他組合。

如上所述,如果圖元延伸到視見平截頭體外部,則變換和圖元導出邏輯310可以裁剪圖元中的一些,但是在圖5所示的示例中,gs生成的圖元中的一些沒有被裁剪。例如,當裁剪圖元時,在使用六個標準裁剪平面和八個自定義剪裁平面的情況下,可以產生多達十五個子圖元(十七個頂點)。然而,在圖5所示的簡單示例中,圖元516a01被裁剪以產生一個圖元520a010,并且圖元516b00被裁剪以產生兩個圖元520b000和520b001。圖元516a00、516a02、516a10和516b01未被裁剪。層級的葉節點(即,圖5所示示例中的圖元516a00、520a010、516a02、516a10、520b000、520b001和516b01)是要被渲染的子圖元。在一些實例中,輸入圖元可以通過變換和圖元導出邏輯310而不產生任何子圖元,使得在一些實例中可以將裁剪應用于輸入圖元。因此,一般來說,變換和圖元導出邏輯310剔除和/或裁剪位于視見平截頭體外部的圖形數據項(包括導出的子圖元)。剩余的圖元和子圖元被傳遞到圖塊化單元314。

在步驟s406中,圖塊化單元314為渲染空間的每個圖塊生成控制流數據。針對圖塊的控制流數據包括要用于渲染圖塊的輸入圖形數據項的標識符,輸入圖形數據項例如是來自圖形存儲器322的在被變換時至少部分地位于圖塊內的圖元,或來自圖形存儲器322的從其導出至少部分地位于圖塊內的子圖元的圖元。控制流數據中的標識符標識輸入圖形數據項,即存儲在圖形存儲器222中的圖形數據項。針對圖塊的控制流數據還包括圖元指示,圖元指示用以指示從輸入圖形數據項導出的圖元中的哪些(即,子圖元中的哪些)要用于渲染圖塊。如果子圖元至少部分地在圖塊內,則可以確定子圖元要用于渲染圖塊。子圖元指示可以在光柵化階段期間使用以減少被執行以導出針對圖塊的子圖元的處理量。子圖元指示可以例如指示如何從經變換輸入圖形數據項導出要用于渲染圖塊的子圖元。例如,子圖元指示可以指示對輸入圖形數據項執行以便生成要被渲染的子圖元的處理操作的序列。因此,光柵化階段可以執行所指示的操作(但是不需要執行未指示的操作),以便導出針對圖塊要被渲染的必要的子圖元。例如,與圖5所示的示例相關的控制流中的子圖元指示可以指示gs實例514a10不產生任何圖元,在這種情況下,可以不在光柵化階段中執行該gs實例。

此外,可能的情況是,作為圖5中所示的葉節點的子圖元中的一些可能沒有至少部分地位于特定圖塊內。例如,圖元516a02可能完全位于特定圖塊外部,在這種情況下,子圖元516a02的指示將不被包括在針對特定圖塊的控制流數據中。因此,在光柵化階段,光柵化邏輯將不需要實現幾何著色器514a01。

子圖元指示可以被表示為一個或多個掩碼。例如,針對子圖元的掩碼可以指示要執行一組可能的操作中的哪些以導出子圖元。掩碼還可以指示一組可能的子圖元中的哪些被剔除或裁剪。掩碼還可以指示從原始圖元導出的哪些子圖元存在于圖塊中,以及哪些子圖元不存在于圖塊中。此外,控制流數據中的輸入圖形數據項的標識符可以被實現為一個或多個掩碼,一個或多個掩碼指示來自圖形數據項塊的哪些圖形數據項要被用于渲染特定圖塊??刂屏鲾祿械妮斎雸D形數據項的標識符可以或可以不在引用不同圖塊的控制流數據的部分之間共享,假設可以重建針對每個特定圖塊的控制流數據。

可以根據任何合適的壓縮技術來壓縮控制流數據中的標識符和子圖元指示。針對圖塊的控制流數據被提供給存儲器302以用于存儲在控制流存儲器326中。在這一點上,已經為當前渲染完成了幾何處理階段,并且在隨后的時間,執行光柵化階段以使用存儲在圖形存儲器322中的輸入圖形數據和存儲在控制流存儲器326中的控制流數據來渲染渲染空間的圖塊。

現在描述光柵化階段中的特定圖塊的渲染。在步驟s408中,光柵化邏輯306的取回單元316從控制流存儲器326接收針對圖塊的控制流數據,并且將控制流數據傳遞到高速緩存系統334和渲染隊列344。渲染隊列344(其也可以被稱為“光柵化隊列”)存儲要被處理以用于渲染的圖元的指示(例如,圖元標識符)。如圖6所示,渲染隊列344還存儲頂點索引以指示哪些頂點構成要被渲染的圖元。在圖6所示的示例中,當前在渲染隊列344中有四個圖元:由頂點v0、v1和v2形成的圖元0;由頂點v2、v1和v3形成的圖元1;由頂點v2、v3和v4形成的圖元2;和由頂點v5、v2和v4形成的圖元3。在一些示例中,可以由光柵化邏輯306使用相應圖塊處理管線(其中每個可以由唯一的圖塊管線id來標識)來并行地處理多個圖塊,并且在這些示例中,對于當前正在由光柵化邏輯306處理每個圖塊,可以存在相應渲染隊列。如果圖元覆蓋多于一個圖塊,則其圖元id可以相應地被包括在多于一個渲染隊列中。

在步驟s410中,高速緩存控制器338確定高速緩存336中是否存在要被處理以用于渲染的圖形數據項(例如,圖元),該圖形數據項如由針對圖塊的控制流數據中的標識符所指示的。高速緩存控制器338可以包括指示高速緩存336的當前內容的一個或多個查找表,使得高速緩存控制器338可以使用一個或多個查找表來確定高速緩存336中是否存在與要被處理以用于渲染的圖元相關的圖形數據項。當將生成該圖形數據項的計算實例被調度時,而不是當結果變得可用時,可以分配高速緩存中的空間。在高速緩存中分配每個圖形數據項的情況下,高速緩存控制器還存儲狀態位,狀態位指示圖形數據項是否仍然被調度用于執行或者是否已經發生執行并且所得到的圖形數據項在高速緩存中可用。如果圖形數據項被調度用于執行,則高速緩存控制器還存儲將計算圖形數據項的值的simd任務的標識符。圖形數據項可以被分配和鎖定在高速緩存336中,但是如果相應狀態位指示圖形數據項“被調度”,則掛起(pending)任務仍然必須產生其值。一旦執行了所標識的simd任務,則所計算的圖形數據項的狀態位將被改變以指示它們現在可用。圖6示出了高速緩存系統334的更加詳細的視圖,其在這個示例中示出,高速緩存控制器338包括頂點著色器查找表602、外殼著色器查找表604、域著色器查找表606和幾何著色器查找表608。查找表包含關于圖形管線的不同階段的信息,并且可以或可以不在彼此相同的硬件結構中實現。高速緩存控制器338可以通過查詢一個或多個查找表來確定高速緩存336中是否存在圖形數據項(例如,圖元或控制點)。例如,可以針對處理序列的每個階段使用查找表來實現高速緩存控制器338。在圖6所示的示例中,頂點著色器查找表602指示相應頂點著色器調用的結果是否被存儲在高速緩存336中(如果是,則在何處);外殼著色器查找表604指示相應外殼著色器調用的結果是否存儲在高速緩存336中(如果是這樣,則在何處);域著色器查找表606指示相應域著色器調用的結果是否存儲在高速緩存336中(如果是,則在何處);并且幾何著色器查詢表608指示相應幾何著色器調用的結果是否被存儲在高速緩存336中(如果是,則在何處)。查找表允許搜索單義地標識的執行的結果。例如,給定繪制調用數、實例標識符和頂點的索引,單義地標識頂點著色器調用。類似的概念應用于其他著色器階段,其中來自不同著色器的高速緩存336中的條目由不同組的值來標識,不同組的值通??梢员环Q為“標簽”。當查找表由多個著色器階段共享時,標簽包括選擇器位(例如,兩個選擇器位)以確定數據項所屬的著色器階段。取決于著色器階段,標簽的剩余位可以被不同地構造。每個著色器階段產生的輸出的量可以變化,并且高速緩存336可以向來自不同的階段的輸出分配不同的最大大小。查找表可以實現為完全關聯或組關聯。

高速緩存336可以被稱為緩沖器。高速緩存336可以包括用于存儲來自層級的所有級別的數據的單個存儲器池,例如,圖5所示的不同類型的圖形數據項(504、509、512、516和520)可以全部存儲在高速緩存336中的相同存儲器池中。這可以允許在高速緩存336中可以存儲什么數據時的靈活性。在其他示例中,高速緩存336可以包括多個存儲器池,其中不同的存儲器池被配置成存儲來自層級的不同級別的數據。例如,高速緩存336的第一存儲器池可以被配置成存儲從圖形存儲器322取回的輸入圖形數據項,高速緩存336的第二存儲器池可以被配置成存儲補片輸入控制點(例如504),高速緩存336的第三存儲器池可以被配置成結合頂點uv坐標(例如509)存儲補片輸出數據(例如505),高速緩存336的第四存儲器池可以被配置成存儲域著色器的輸出(例如512),高速緩存336的第五存儲器池可以被配置成存儲幾何著色器的輸出(例如516),并且高速緩存336的第六存儲器池可以被配置成存儲裁剪器的輸出(例如520),盡管在本文中所描述的示例中,裁剪器的輸出沒有被存儲在高速緩存336中。因此,在一些示例中,層級包括輸入圖形數據項中的一個或多個以及表示處理階段的序列的處理階段的結果的一個或多個圖形數據項。在一些其他示例中,層級可以不包括輸入圖形數據項,例如,如果輸入圖形數據項可以由某種其他機制推斷。例如,頂點著色器實例的輸入可以不被存儲在高速緩存336中,而是可以代替地被存儲在另一模塊中,諸如在系統級高速緩存中。對于不同類型的數據使用不同的存儲器池允許根據數據的類型獨立地從高速緩存336沖刷或逐出數據,并且其還停止高速緩存336變為由一種類型的數據主導,例如,其停止頻繁地執行的著色器階段(諸如域著色器)從高速緩存336逐出針對較不頻繁地執行但潛在計算上昂貴的階段(例如,外殼著色器)的數據。

高速緩存336具有有限的大小,其通常沒有大到足以同時存儲在渲染圖像期間使用的所有圖形數據項。因此,在某些點,可能需要從高速緩存中逐出數據項,以允許其他數據項存儲在高速緩存中。

在步驟s410中,對高速緩存控制器的查詢確定生成圖元所需要的圖形數據項是否存在于高速緩存336中。這可以包括來自不同著色器階段的圖形數據項(例如,生成圖元的gs圖形數據項以及向gs提供輸入的vs圖形數據項)。從最后的著色器階段到第一著色器階段(例如,首先是gs,然后是vs)自底向上執行查詢。如果發現用于生成針對給定著色器階段的圖元的所有圖形數據項存在于高速緩存中并且可用,則查詢停止。如果所需要的圖形數據項在高速緩存336中可用,則在高速緩存336中的圖形數據項上放置鎖定,使得該圖形數據項在其已被使用之前不會從高速緩存336被逐出。如果所需要的數據項不可用,則為其分配高速緩存的一部分和查找表條目,可能逐出其他圖形數據項(步驟s412)。如果由于鎖定阻止其他圖形數據項的逐出而導致任何分配失敗,則查詢失敗,并且將在稍后在一個或多個渲染管線被沖刷,從而釋放鎖定之后嘗試查詢。換句話說,當分配失敗時,一個或多個渲染隊列被沖刷。在沖刷渲染隊列之前,執行該渲染隊列所需要的所有任務。在沖刷渲染隊列之后,釋放適當的鎖定。如果分配成功,則在步驟s414中,基于計算實例的特性將用于生成所需要的圖形數據項的計算實例分配給任務,如下面更詳細描述的。以這種方式,生成所需要的數據項的計算實例被調度以在simd任務內執行。simd任務一旦被執行將把圖形數據項的值寫入高速緩存的分配部分。計算實例可以是例如生成頂點的頂點著色器或生成補片常數數據并輸出控制點的外殼著色器實例。當查詢完成時,針對當前圖塊處理管線鎖定所需要的數據項。這保證了在渲染隊列344的沖刷期間在對圖元進行光柵化之前不將圖形數據項逐出。此外,如果所需要的數據項存在于高速緩存中但不可用(被調度),則針對當前圖塊處理管線將生成所需要的數據項的數據的任務鎖定。這保證了在渲染隊列344的沖刷期間在對圖元進行光柵化之前將執行所需要的任務。在查詢完成之后,將圖元添加到渲染隊列。如下面更詳細描述的,當光柵化隊列被沖刷時,從高速緩存336讀取數據。這允許建立simd任務,直到光柵化隊列被沖刷的時間。

任務組合單元340(其也可以被稱為“任務收集器”)被配置成存儲針對可以向其分配計算實例的相應任務的多個任務條目。圖6示出了任務組合單元340包括針對任務條目的數據的表610。在圖6所示的示例中,在表610中示出了五個任務條目,其中每個條目包括條目id、任務類型、狀態id、針對多個計算實例的槽以及一組鎖定掩碼位。條目id是表610中的任務條目的標識符。條目的任務類型字段指示被包括在任務中的計算實例的著色器類型。例如,條目id為0、1和4的任務條目用于包括頂點著色實例的任務;條目id為2的任務條目用于包括域著色實例的任務;條目id為3的任務條目用于包括外殼著色實例的任務。針對任務條目的狀態id字段指示要用于執行任務中的計算實例的狀態。如上所述,狀態可以規定執行條件,諸如綁定到用于執行計算實例的管線階段的著色器代碼、常數緩沖器、著色器資源、采樣器狀態和輸入緩沖器。著色器類型和狀態id定義計算實例的特性,使得表610中的任務條目包括可以被分配給相應任務的計算實例的相關聯的特性的指示。

針對存儲在表610中的任務條目的任務是可以向其分配計算實例的“開放”任務,即,它們不是不能向其分配更多計算實例的滿的任務。任務組合單元340可以將所分配的計算實例存儲在針對相應任務的任務條目中,從而指示哪些計算實例已經被分配給相應任務。在圖6所示的示例中,每個任務可以包括多達八個計算實例,但是在其他示例中,每個任務可以被分配多于或少于八個計算實例(例如,在具體示例中可以將多達32個計算實例分配給任務)。在一些示例中,可以被分配給任務的計算實例的數目對于不同的著色器類型可以是不同的,但是在圖6所示的示例中,所有任務可以具有被分配給它的相同數目的計算實例。每個任務條目指示哪些計算實例已經被分配給相應任務(在圖6中用陰影表示)。作為示例,任務條目0被存儲在表610中的任務當前具有被分配給它的三個計算實例,并且具有用于多達五個更多的計算實例的空間要被分配給它(在圖6中用無陰影框表示)。

任務條目的鎖定掩碼位標識圖塊處理管線中的哪些將使用屬于相應任務的計算實例的結果。例如,圖6示出了可以并行處理多達四個圖塊管線(例如圖塊0至3)。在圖6所示的示例中,任務條目0被存儲的任務包括將用于處理圖塊0和2但不用于圖塊1和3的計算實例;而任務條目1、2、3和4被存儲的任務包括將用于處理圖塊2但不用于圖塊0、1或3的計算實例。當計算實例被分配給相應任務時,可以更新任務條目的鎖定掩碼位。當沖刷渲染隊列時,任務的鎖定位用于確定哪些任務需要被沖刷以初始化所需要的圖形數據項。

如上所述,在步驟s414中,對于被確定為不存在于高速緩存336中的每個圖形數據項,任務組合單元基于計算實例的特性向任務分配計算實例。例如,如果頂點著色實例要在狀態a的情況下被執行,則頂點著色實例可以被分配給任務條目0。作為另一示例,如果頂點著色實例要在狀態b的情況下被執行,則頂點著色實例可以被分配給任務條目1。以這種方式,被分配給任務的計算實例可以由simd處理器并行執行,因為它們具有兼容的特性(例如,共同的著色器類型和兼容狀態)。由于任務組合單元340可以存儲可以用于存儲具有不同特性的計算實例的多個開放任務,所以當計算實例的狀態或著色器類型改變時,并不總是需要沖刷任務用于執行。如果計算實例的特性(例如著色器類型和狀態)與當前存儲在任務組合單元340中的任何任務條目的特性都不匹配,則針對新的任務的新的任務條目可以被添加到表612,其中特性匹配計算實例的特性,使得計算實例可以被添加到新的任務。如果在任務組合單元340中沒有用于存儲新的任務條目的空間,則可能需要在新的任務條目被存儲在其中之前從任務組合單元340輸出當前存儲的任務之一。

一些計算實例取決于其他計算實例的結果。例如,層級的較低處理階段取決于層級的較高處理階段。例如,域著色實例(例如ds0(圖5中表示為510a0))取決于外殼著色實例506a(其包括鑲嵌508a)的結果,其又取決于頂點著色實例5020至5023的結果。因此,如果要渲染圖元512a0(即,針對圖元512a0的圖元id在渲染隊列544中),則在高速緩存336中搜索域著色器510a0、510a1和510a2的結果。作為示例,以下情況可能正是如此:域著色器510a1和510a2的結果已經存儲在高速緩存336中,因此為這些頂點返回高速緩存命中,但是在該示例中,域著色器510a0的結果當前沒有存儲在高速緩存336中,因此為510a0生成域著色實例。該計算實例可以具有狀態c,并且被存儲在任務條目2中,如圖6所示。為了執行域著色器510a0,需要外殼著色器實例506a(包括鑲嵌508a)的結果,并且如果這些結果當前沒有存儲在高速緩存336中,則為506a(包括鑲嵌508a)生成外殼著色實例。該計算實例也具有狀態c,但是因為著色器類型不是域著色器,所以計算實例存儲在任務條目3中,如圖6所示。為了執行外殼著色器506a,需要頂點著色器實例5020到5023的結果。作為示例,頂點著色器實例5022和5023的結果已經存儲在高速緩存336中(例如,由于控制點504b可能已經被計算)。然而,頂點著色器實例5020和5021的結果尚未存儲在高速緩存336中,因此為5020和5021生成兩個頂點著色實例。這些計算實例也具有狀態c,但是因為著色器類型不是域著色器或外殼著色器,所以計算實例被存儲在任務條目4中,如圖6所示。

在該示例中,渲染隊列344包含針對裁剪器輸入圖元(即,尚未向其應用裁剪的圖元)的描述符,并且由simd處理邏輯346執行的處理不包括裁剪操作。因此,被包括在用于由simd處理邏輯346執行的任務中的計算實例都不用于執行裁剪操作。每個裁剪器輸入圖元描述符包括對高速緩存336內的頂點的引用以及對該圖元進行裁剪、光柵化或著色所需要的一些額外信息。緩沖器中的引用被保證在沖刷隊列時是有效的,這是由于在圖形數據項上的鎖定,并且在步驟s412和s414之后獲取必要的simd任務。未變換幾何取回單元316可以轉發存儲在描述符內的標志,該標志指示隊列中的圖元是否需要被剪裁(該信息從幾何處理階段已知),并且如果是,則哪個裁剪器生成的圖元必須在當前圖塊中被光柵化。圖元的頂點可以存儲在一個或多個圖形數據項中。例如,gs生成的三角形可以由對單個gs圖形數據項的引用以及由標識圖形數據項內的頂點的位置的三個偏移來表示。鑲嵌器生成的線可以由對不同ds圖形數據項的兩個引用來表示(不需要偏移,因為ds圖形數據項僅包含一個頂點)。在其他示例中,渲染隊列344可以包含用于裁剪器輸出圖元的描述符,即已經應用了裁剪的圖元,并且在這些其他示例中,由simd處理邏輯執行的處理可以包括裁剪操作,使得被包括在用于由simd處理邏輯執行的任務中的計算實例中的一些可以用于執行裁剪操作。

任務依賴性單元342維持對任務條目被存儲在任務組合單元340中的不同任務之間的依賴性的指示。在圖6所示的示例中,任務依賴性單元342包括矩陣612,矩陣612指示每個要被執行的任務條目取決于的任務(如果存在)。在圖6中,“x”指示針對任務條目2的任務取決于針對任務條目3的任務,另一“x”指示針對任務條目3的任務取決于針對任務條目4的任務。圖6中不存在“x”指示任務不取決于特定的其他任務。

如上所述,在步驟s412中,高速緩存控制器338為要由被分配給任務組合單元340中的任務的相應計算實例確定的每個圖形數據項分配高速緩存336的一部分(以及相應lut條目)。以這種方式,確保高速緩存336具有針對每個計算實例的結果的存儲器的分配部分。因此,當執行計算實例時,執行的結果可以存儲在高速緩存336中(在相應分配部分中),而不從高速緩存336逐出仍然要使用的數據。高速緩存控制器338可以鎖定被分配給涉及要被處理以用于渲染的圖元的計算實例的高速緩存336的部分,直到這些圖元已經被渲染,或直到渲染圖元中涉及的處理中的至少一些(例如hsr和/或紋理化和著色)已經被執行,此時高速緩存336的部分可以被解鎖。

計算實例繼續被分配給任務組合單元340中的任務,直到在步驟s416中,任務組合單元340確定任務要被輸出用于執行。在步驟s418中,一個或多個任務被選擇并且從任務組合單元340被輸出用于由simd處理邏輯346執行。

任務組合單元340有很多原因來確定任務要被輸出用于執行。例如,可以響應于特定任務是滿的(即,其不具有用于另外的計算實例的分配的更多可用的槽),而輸出特定任務用于執行。在圖6所示的示例中,如果已經將八個計算實例分配給特定任務,則認為它是滿的。

作為另一示例,當任務組合單元340不具有針對新的任務條目的可用空間時,可以響應于針對新的任務的新的任務條目準備好被寫入任務組合單元340,而輸出特定任務用于執行。在這種情況下,輸出特定任務,使得新的任務條目可以被寫入任務組合單元340。

作為另一示例,響應于對特定任務具有一個或多個依賴性的另一任務,由于應要被執行(例如,因為其是滿的或一些其他原因),可以輸出特定任務用于執行。在這種情況下,特定任務被輸出用于執行,因為其結果是執行一個或多個其他任務所需要的。如上所述,依賴性可以由任務依賴性單元342指示。

作為另一示例,響應于包括與特定任務相關的圖元的渲染隊列的沖刷,可以輸出特定任務用于執行。當沖刷渲染隊列344時,可以向高速緩存系統334發送用于從高速緩存336獲取與要被處理以用于渲染的圖元相關的圖形數據項的請求。也就是說,當渲染隊列344被沖刷時,則在渲染隊列344中指示的所有圖元將由圖元處理邏輯317處理,并且因此為相應圖元處理管線鎖定的所有任務都需要被沖刷。這保證了與要被處理的圖元相關的所有圖形數據項的數據在高速緩存中可用(而不是“被調度”狀態)。

在任務組合單元340中的任務中的一些但不是全部要被輸出到simd處理邏輯346的情況下,則可以使用選擇方案來選擇要被輸出的任務。例如,任務組合單元340可以選擇任務條目被存儲在任務組合單元340中的最滿的任務要被輸出用于執行。這意味著由simd處理邏輯346執行的任務平均來說比在其他任務被選擇要被輸出的情況下包含更多的計算實例。另一種可能的方案是選擇最老的任務。選擇方案還可能傾向于沒有輸入依賴性的任務,以避免過早地沖刷幾個任務。通常,增加由simd處理邏輯346執行的任務中的計算實例的平均數目將增加simd處理的效率(在執行計算實例的速率方面)。

當從任務組合單元340輸出任務時,任務組合單元340使得相應任務條目可用于另一任務。

在步驟s420中,simd處理邏輯346以simd方式執行一個或多個被輸出的任務中的每個的計算實例。圖7示出了如何由simd處理邏輯346執行任務的計算實例。任務702能夠包括八個計算實例,但在圖7所示的示例中,任務702包括六個計算實例(在圖7中用陰影示出)。任務702被提供給simd處理邏輯346以用于執行。simd處理邏輯346包括多個執行單元706,其可以被稱為算術邏輯單元(alu),每個執行單元706被配置成并行地對針對任務的相應計算實例的數據執行指令。在圖7中,有八個執行單元,其中為了清楚起見,在圖7中僅有兩個執行單元具有附圖標記:7060和7067。在不同的示例中,simd處理邏輯346中的執行單元706的數目可以不同。例如,simd處理邏輯346中的執行單元706的數目可以等于可以被包括在單個任務中的計算實例的最大數目。來自相應執行單元(7060至7067)的結果(7040至7047)是被提供給高速緩存系統334用于存儲在高速緩存336的相應分配部分中的圖形數據項(例如圖元的頂點)。注意,針對每個圖形數據項的高速緩存336中的空間在步驟s412中在查詢期間被分配,并且針對一個或多個圖形處理管線被鎖定。

在步驟s422中,將執行結果存儲在高速緩存336中。以這種方式,針對要被處理以用于渲染的圖元的圖形數據項可以被生成并且被存儲在高速緩存336中。

在其中圖元經過頂點著色器階段但不經過鑲嵌和幾何著色器階段的簡單示例中,在vslut602中搜索圖元的頂點。對于每個高速緩存未命中,在任務組合單元340中對頂點著色器實例排隊。對于當前圖塊處理管線鎖定vslut602中的條目,而不管是否發生高速緩存命中或高速緩存未命中。此外,在命中時,如果vslut中的條目被標記為被調度用于執行,則其被調度的任務也對于當前圖塊處理管線被鎖定。這將保證在沖刷渲染隊列之前任務被發送用于執行。

在圖元經過頂點著色器階段和鑲嵌階段但不經過幾何著色器階段的另一示例中,在dslut606中搜索頂點。如果發生至少一個高速緩存未命中,則在hslut604中搜索補片數據。如果發生至少一個ds未命中并且hs輸出不可用,則在vslut602中搜索輸入控制點。為了處理在vs階段處的未命中,在任務組合單元304中對相應vs實例排隊。類似地,為了處理在hs階段處的未命中,將相關hs實例添加到任務組合單元340,其中將對執行提供hs輸入的vs實例的任務的依賴性的指示添加到任務依賴性單元342。此外,為了處理在ds階段處的未命中,將ds實例添加到任務組合單元340,其中將對執行提供ds輸入的hs實例的任務的依賴性的指示添加到任務依賴性單元342。此外,在每個著色器階段處,如果發生命中,但是相關lut中的條目被標記為被調度用于執行,則其被調度的任務針對當前圖塊處理管線被鎖定。這將保證在沖刷渲染隊列之前任務被發送用于執行。

不同的條件可以對于正在被處理的圖塊之一觸發渲染隊列344的沖刷:(1)隊列是滿的,(2)高速緩存中的鎖定需要被釋放,或者(3)未變換幾何取回單元316已經完成取回針對圖塊的幾何形狀。注意,在這一點上,針對渲染隊列中的圖元的所有圖形數據項將仍然存儲在高速緩存336中,因為它們在步驟s412之后已經被鎖定。在繼續對隊列中的圖元的光柵化和hsr之前,系統必須輸出在步驟s414期間鎖定的simd任務用于執行。任務可以按狀態排序,使得simd處理邏輯340不需要在執行任務之間頻繁地改變其執行狀態。這可以提高simd處理的效率。

在沖刷所需要的simd任務之后,針對渲染隊列中的圖元的圖形數據項變為可用。對于隊列中的每個圖元,在步驟s424中,向高速緩存系統334發送從所引用的圖形數據項獲取頂點的請求。注意,頂點可以是圖形數據項的一部分(例如,幾何著色器數據項可以包含很多頂點)。然后將該圖元發送到圖元處理邏輯317。在處理隊列中的所有圖元之后,釋放對該圖塊所需要的圖形數據項的鎖定。但是,注意,相同的圖形數據項可能仍被其他圖塊鎖定。

然后,圖元處理邏輯317使用存儲在高速緩存336中的圖形數據項來渲染已經從渲染隊列344中沖刷的圖元。具體地,在步驟s426中,裁剪和變換邏輯330對從高速緩存336獲取的圖形數據項執行裁剪和變換操作。如上所述,在該示例中,圖元描述符被存儲在渲染隊列344中的圖元是裁剪器輸入圖元,即,尚未應用裁剪的圖元,這是為什么裁剪由圖元處理邏輯317來執行。在其他示例中,如果圖元在到達圖元處理邏輯317之前已經對其應用了裁剪,則圖元處理邏輯317可能不包括裁剪功能。變換操作是用于將圖元變換到2d渲染空間中的視口變換。裁剪和經變換圖元被提供給hsr單元318。

在步驟s428中,由hsr單元318和紋理化/著色單元320渲染圖元,從而生成用于特定圖塊的渲染輸出。hsr單元318去除隱藏的圖元片元,并且紋理化/著色單元320對圖元片元應用紋理化和著色中的一個或兩者。然而,在其他示例中,可以執行不同的處理以渲染從裁剪和變換邏輯330輸出的圖元。此外,圖3所示的示例系統300在以下意義上是延遲渲染系統:在圖元片元的紋理化和/或著色之前對圖元片元執行隱藏表面去除。在其他示例中,系統可以不是延遲渲染系統,使得在圖元片元的紋理化和/或著色之后對圖元片元執行隱藏表面去除。

在步驟s430中,所得到的經渲染像素值被提供給存儲器302以用于存儲在幀緩沖器328中,并且隨后可以被使用,例如,被顯示在顯示器上或被存儲在存儲器中或被傳輸到另一設備等。

在上述示例中,輸入圖形數據項(其可以例如是圖元或描述補片的控制點)描述要被渲染的3d場景內的幾何形狀,其中經渲染圖元用于形成場景的經渲染圖像。在其他示例中,經渲染圖元可以用于除了形成場景的經渲染圖像之外的其他用途。例如,輸入圖形數據項可以描述紋理,并且經渲染圖元可以用于形成經渲染圖像,并且隨后在其他渲染中用作紋理。

在上述示例中,任務依賴性單元342包括矩陣612。圖8示出了另一示例,其中任務依賴性單元342包括表802,表802針對不同的狀態(a、b、c等)指示針對不同的著色器類型(vs、hs、ds、gs等)哪些任務條目被存儲在任務組合單元340中。例如,圖8示出了任務條目0用于具有狀態a的頂點著色器實例,任務條目1用于具有狀態b的頂點著色器實例,任務條目2用于具有狀態c的域著色器實例,任務條目3用于具有狀態c的外殼著色器實例,并且任務條目4用于具有狀態c的頂點著色器實例。由于跨不同繪制調用沒有任務依賴性,并且由于狀態只能在繪制調用之間改變,因此跨表802的不同行沒有依賴性。依賴性隱含在表802的行內。例如,表802暗示任務條目2依賴于任務條目3,任務條目3本身依賴于任務條目4,因為著色器階段的順序被單義地定義。在其他示例中,表802可以包括用于特定著色器類型的多于一列,例如,可能有多于一個域著色器列,因為很多ds實例可以從單個hs實例生成。由于ds任務將比它們所依賴的hs任務快得多地被填充,因此允許多個開放ds任務防止hs任務以及間接地vs任務的過早沖刷。例如,考慮其中每個simd進程是32寬的系統。如果遇到一個hs實例生成32個ds實例,并且每個狀態只允許一個未完成的ds任務,則將不得不在ds任務填充后立即沖刷它。為了提供ds任務的輸入,還必須沖刷hs任務。由于未變換圖元取回單元可能尚未發現其他兼容的hs實例,這可能導致僅以1/32的效率執行hs實例。另一方面,如果允許多個未完成的ds任務,則將有更高的機會從同一圖塊或其他同時被處理的圖塊發現更多兼容的hs實例。注意,該問題不在vs和hs階段之間發生,因為vs總是比hs更快地被填充。如果系統允許針對同一著色器階段的多個ds任務,則每個任務的額外位可以指示任務對在前一階段處的當前未完成的hs任務的依賴性。

綜合上述示例,與不實現任務組合單元的系統相比,用于生成圖形數據項的計算實例的simd處理的效率被提高。任務組合單元340的使用在光柵化階段中尤其有用,因為要以自底向上方式從高速緩存336獲取要在光柵化階段中被處理的圖元,并且因為(在基于圖塊的渲染系統中)渲染空間的圖塊在光柵化階段中被處理,而不是一次處理整個渲染空間。換句話說,幾何階段中的圖元的連續流被去除被剔除的圖元并且被分解成每個圖塊的圖元流,然后在光柵化階段中以定時相關的順序被處理(即,按順序處理圖塊中的圖元,但是可以按任何順序處理圖塊),其中在它們之間存在共享(例如,圖元可以在同一圖塊內并跨圖塊共享頂點數據)。高速緩存336中的每個未命中導致計算實例的執行。為了利用gpu的simd性質,多個計算實例被聚集在一起以在單個simd任務中執行。由于任務可以高達n個計算實例寬,其中n取決于微架構,因此期望在執行任務之前收集n個兼容的計算實例用于執行。如果著色器實例屬于相同的管線階段(例如vs、hs、ds或gs)并且共享相同的狀態或兼容狀態,則可以認為它們是兼容的。另一考慮是,屬于不同管線階段的計算實例可能彼此具有依賴性。例如,消耗三角形的幾何著色器實例取決于三個頂點或域著色器實例,而域著色器實例可以取決于單個外殼著色器實例。任務依賴性單元342的使用有助于確保任務的依賴性在其執行之前被滿足。在本文所描述的示例中,任務組合單元340允許針對不同著色器階段并且需要不同圖形狀態的任務被同時組合到不同任務中。此外,可以用多個圖塊處理管線請求的計算實例來填充任務。也就是說,任務組合單元340可以將與不同圖塊相關的計算實例分配給共同的任務。

因為在任務組合單元340中將計算實例組合成開放任務,為每個計算實例存儲數據以標識該計算實例的輸入和輸出。每個計算實例由對任務中的每個計算實例共同的著色器類型和狀態(例如特定著色器程序)以及輸入和輸出來定義,輸入和輸出對于每個計算實例可以是唯一的,并且定義操作的圖形數據項。每個輸入或輸出通過對高速緩存控制器338的一個或多個查找表(lut)的引用而被標識,以便標識高速緩存中可以找到輸入數據的位置以及應當寫入輸出數據的位置。例如,在具有8192個lut條目的系統中,可以使用13位數目來標識每個輸入或輸出,因為log2(8192)=13。一個任務中的計算實例的輸出可以對應于另一任務中的計算實例的輸入。以這種方式,計算實例之間的互連形成諸如圖5所示的處理階段的層級。

在任務組合單元340中為開放任務存儲的數據量可能變得顯著,使得用于減少為開放任務存儲的數據量的方案可能是有益的。例如,任務組合單元340可以能夠存儲多達128個任務,并且每個任務可以具有多達32個計算實例。每個計算實例可以具有多達33個輸入(例如,對于ds計算實例的32個vs輸入和一個hs輸入)。在樸素的解決方案中,在存在8192(即213)個lut條目的情況下,則在最差情況下在該示例中存儲引用所需要的數據量是221kb(即128個任務×32個實例×(1個輸出+33個輸入)×log2(8192)=1810432位=226304字節=221kb)。這是要存儲在圖塊組合單元340中用于由開放任務中的計算實例使用的引用的大量數據。

用于減少計算實例的引用所需要的存儲量的第一選項是允許跨同一任務中的實例共享輸入并且使用映射表對共享進行編碼。這利用了大多數輸入在同一任務的實例之間被共享的這一事實。例如,32個計算實例的任務可以包括32個實例輸出(每個計算實例1個輸出)和多達64個不同的輸入,其可以由任務中的任何計算實例引用。對于這些輸入/輸出中的每個,存儲13位標識符以標識lut條目。如上所述,每個計算實例可以具有多達33個輸入,并且對于這些輸入中的每個,使用6位索引來標識任務的64個輸入中的一個。圖11示出了可以為任務存儲的引用數據:對于任務中的32個計算實例中的每個,存在32個實例輸出(o0到o31),多達64個任務輸入(i0到i63)和多達33個實例輸入索引。每個輸入索引是標識任務輸入之一的6位索引。如上所述,在示例中,在任務組合單元340中可以有128個開放任務,因此在最壞情況下在該示例中存儲引用所需要的數據量是118.5kb(即128個任務×[(32個輸出+64個輸入)×log2(8192)+(32×33×6位)]=970752位=121344字節=118.5kb)。盡管與上述樸素的方法相比,這是存儲的數據量的減少,但是可以在下面描述的選項中保存更多的數據。此外,在該選項中,任務組合單元340可能需要在將計算實例添加到任務之前搜索開放任務的輸入,以查看計算實例的輸入是否已經存在于開放任務中。

在第二選項中,代替每個任務采用一個任務槽,取決于針對任務中的計算實例的輸入的數目,任務采用不同數目的槽。例如,如上所述,vs輸入可以不被存儲在高速緩存336中,而是可以代替地被讀取作為正常存儲器讀取,例如,從系統級高速緩存,并且因此vs任務可以具有32個輸出和32×0個輸入,因此使用1個任務槽;gs任務具有32個輸出和32×3個輸入,因此使用4個任務槽;hs任務具有32個輸出和32×32個輸入,因此使用33個任務槽;并且ds任務具有32個輸出以及32×1個hs輸入和32×4個vs輸入,因此使用6個任務槽。所需要的存儲量的減少來自于對最壞情況存儲要求來自hs任務(其每個需要33個任務槽)的理解,但是在實踐中,僅需要為更現實的工作負載提供存儲,其中任務被分布在不同的著色器類型之間。如果相反,提供足夠的任務槽來處理多達128個ds任務,每個ds任務占用6個任務槽,則存儲768個任務槽的表。圖12示出了可以存儲的示例表1200。表1200的每一行表示任務槽。最多可以有768個任務槽,并且每個任務槽包括32個輸入或輸出引用,每個引用為13位,因此表中存儲的引用位的總數可以高達768×32×13=319488位=39kb。因此,該選項提供了在沒有添加復雜數據結構的情況下引用所需要的存儲的顯著減少,但是它可能使任務表的管理復雜化,并且存在任務碎片化的可能性。

在第三選項中,可以存儲將每個輸入圖元(或補片)映射到產生其頂點(或控制點)的vs實例的圖元表。除了任務表之外,還存儲圖元表。圖元表中的每個條目針對每個圖元最多存儲32個頂點,這是針對補片的控制點的最大數目。在任務表中,對于hs/ds/gs任務中的每個實例,只需要存儲輸入圖元索引,而不是對輸入頂點或控制點的多達32個引用。這些引用可以通過使用圖元索引在圖元表中執行查找來獲得。當添加hs、ds或gs實例時,任務組合單元340搜索圖元表以獲得其輸入圖元。如果在圖元表中沒有找到圖元,則將圖元添加到圖元表。當具有引用圖元的實例的所有任務已經被沖刷時,將該圖元從圖元表逐出。為了實現這一點,引用計數可以被存儲在圖元表的每一行中,并且當創建(增加引用計數)或沖刷(減少引用計數)讀取該圖元的頂點的任務時被更新。作為示例,在給定時間可能有多達256個具有正在進行(inflight)的任務的圖元。圖13示出了任務表1302的示例,其存儲對存儲在圖元表1304中的針對hs、ds和gs任務內的計算實例的輸入和輸出的圖元的引用。表1304的標簽是對處理圖元的gs或hs實例的輸出的lut引用。該表可以實現為組關聯或完全關聯。每行存儲對圖元的頂點的多達32個lut引用,這些頂點由vs實例生成并且向由標簽標識的hs或gs實例提供輸入。例如,hs任務0的實例0處理lut條目6991中的圖元,并且圖元表1304指示針對該圖元的頂點的lut引用。在運行hs任務之前,需要標識產生這些頂點的vs實例(通過圖元表),并且從高速緩存中讀取它們的數據。任務表1302不存儲針對vs、hs或gs任務的輸入引用。也就是說,任務表1302僅存儲針對vs任務的輸出引用(因為它們是第一著色器階段,使得它們的輸入不需要被存儲)和針對hs/gs任務的輸出引用(因為它們的輸入可以通過在圖元表中的查找而被確定)。但是,對于ds任務,還需要對hs輸出的引用。當ds讀取由vs生成的輸入控制點時,通過在圖元表中執行hs引用的查找來獲得引用。在128個開放任務和具有開放任務的256個圖元的限制下,任務表1302需要13kb(即128個任務×(32個輸出+32個hs引用)×13位=106496位=13kb),并且圖元表1304需要~14kb(即256個圖元×(1個hs/gs引用×13位+32個vs引用×13位+針對引用計數的log2128位)=256×436位=13.625kb)。對于具有最多256個圖元的表,這相當于~14kb的存儲。因此,此選項顯著減少了引用所需要的存儲,但是它需要維護和更新另一表(圖元表)。

在第四選項中,將輸入引用存儲在高速緩存336中,而不是在任務表中。在此示例中,輸出引用仍存儲在任務表中。如上所述,每個任務的每個計算實例存在一個輸出引用。針對著色器實例的輸出引用標識高速緩存336的一部分:對于被調度的實例,高速緩存的該部分包含參考被調度的實例的輸入的輸入描述符;以及對于準備好的(或“可用的”)實例,高速緩存的該部分包含由實例產生的輸出數據。通常,輸出數據替換輸入描述符,但有時輸出數據和輸入描述符在著色器執行之后被保留,并且與輸出數據一起被存儲。在設置任務用于執行時,讀取任務中的每個實例的輸入描述符。使用存儲在輸入描述符中的輸入引用,從高速緩存中讀取實例的輸入(例如,針對hs實例的vs輸出)。一旦任務中的所有實例的所有輸入都已被讀取,則可以執行該任務。如果可以在任務被輸出用于執行之后丟棄輸入描述符,則針對著色器實例的存儲大小是輸入描述符大小和輸出大小的最大值。如果不能在任務被輸出用于執行之后丟棄輸入描述符,則針對著色器實例的存儲大小是輸入描述符大小加上輸出大小。輸入描述符不被丟棄的唯一情況是當ds直接讀取vs輸入時,因為hs不修改控制點:在這種情況下,ds輸入描述符指向hs輸入描述符,該hs輸入描述符繼而指向vs輸出。因此,即使在hs運行之后,也必須存儲hs輸入描述符。作為在任務組合單元340中存儲有128個開放任務的示例,任務組合單元340中存儲引用所需要的數據量在該示例中是6.5kb(即128個任務×32個輸出×13位=53248位=6.5kb)。因此,在任務組合單元340中需要非常少的存儲,但是在該選項中可能需要更多的時間來設置任務,并且可能存在指針追蹤的問題,并且可能需要更多的讀取吞吐量用于著色器數據存儲。替選地,為了減少針對ds的指針追蹤量,對于ds任務中的每個ds實例,任務表可以包含對hs的引用。因此,可以在訪問ds輸入描述符之前讀取hs輸入描述符。在這種情況下,任務表將采用如第三選項中的13kb(即128個任務×(32個輸出+32個hs引用)×13位=106496位=13kb)。

因此,存在多個選項用于減少用于存儲由開放任務中的計算實例使用的引用的圖塊組合單元340的數據量。

在上述示例中,高速緩存系統334在處理管線中的hsr單元318和紋理化/著色單元320之前在光柵化邏輯306中被實現。在一些其他示例中,例如在如圖9所示的系統900中,高速緩存系統可以在兩個高速緩存子系統9341和9342中連同相應處理子系統一起被實現,其中第一子系統包括任務組合單元9401、任務依賴性單元9421和simd處理邏輯9461,并且第二子系統包括任務組合單元9402、任務依賴性單元9422和simd處理邏輯9462。第一子系統(9341、9401、9421和9461)在裁剪和變換邏輯330以及hsr單元318之前被實現;第二子系統(9342、9402、9422和9462)在處理管線中的裁剪和變換邏輯330以及hsr單元318之后(但在紋理化/著色單元320之前)被實現。圖9中所示的具有與圖3中相同的附圖標記的組件以相同的方式操作。第一高速緩存子系統9341包括第一高速緩存9361和第一高速緩存控制器9381;并且第二高速緩存子系統9342包括第二高速緩存9362和第二高速緩存控制器9382。在這些示例中,第一子系統(9341、9401、9421和9461)可以被配置成僅對圖形數據項的位置數據進行操作,并且如上所述在第一子系統的分層高速緩存9361中存儲子圖元的位置。任務組合單元9401、任務依賴性單元9421和simd處理邏輯9461根據上述示例操作以確定針對子圖元的位置數據。hsr單元318僅對位置數據進行操作,因此在hsr單元318的操作之前不需要變換非位置屬性。對于從hsr單元318輸出的圖形數據項(即,未被hsr單元318去除),第二子系統(9342、9402、9422和9462)對非位置屬性(并且可選地對位置屬性)進行操作,其中子圖元推導的結果可以存儲在第二子系統的分層高速緩存9362中,如上所述。任務組合單元9402、任務依賴性單元9422和simd處理邏輯9462根據上述示例操作以確定子圖元的非位置屬性。以這種方式,由simd處理邏輯9462僅為沒有被hsr剔除的圖元計算非位置屬性。在第二子系統(9342、9402、9422和9462)中,可以再次計算圖元的位置,或者從第一子系統的高速緩存9361中讀取圖元的位置。變換單元918用于將圖元的非位置屬性(并且也可能是位置屬性)變換到渲染空間中。然后,將圖元提供給紋理化/著色單元320用于處理,如上所述。

在另外的示例中,例如,在如圖10所示的系統1000中,高速緩存系統1034和任務組合單元1040、任務依賴性單元1042和simd處理邏輯1046在處理管線中可以在hsr單元318之后但在紋理化/著色單元320之前被實現。在這些示例中,幾何處理邏輯1004類似于幾何處理邏輯304,但是可以發送針對圖元和子圖元的經變換位置數據連同控制流一起用于存儲在存儲器1002中(例如,在經變換位置緩沖器1024中)。取回單元1016類似于取回單元316,但是可以取回由針對特定圖塊的控制流數據指示為在特定圖塊中的圖元的經變換位置數據。hsr單元318可以對位置數據進行操作以用于執行隱藏表面去除。從hsr單元318輸出的圖元(即,沒有被hsr剔除的圖元)被傳遞到高速緩存系統1034,高速緩存系統1034包括高速緩存1036和高速緩存控制器1038并且被配置成存儲圖元的非位置屬性。高速緩存系統1034以與上述分層高速緩存系統334類似的方式操作,并且可以存儲從hsr單元318輸出的圖元的非位置屬性。任務組合單元1040、任務依賴性單元1042和simd處理邏輯1046根據上述示例操作以確定子圖元的非位置屬性。針對圖元的數據(位置和非位置屬性)可以被提供給變換單元1018,變換單元1018將圖元的非位置屬性(并且也可能是位置屬性)變換到渲染空間中。然后,將圖元提供給紋理化/著色單元320用于處理,如上所述。分層高速緩存系統1034可以根據上文關于高速緩存系統334所描述的原理來操作。

在另一替選方案中,經變換位置數據可以在幾何處理階段之后(例如在經變換位置緩沖器1024中)被存儲用于一些圖元,而對于其他圖元,存儲未變換位置數據。例如,對于簡單圖元,可以將經變換位置數據存儲在存儲器中,但是可以通過以未變換狀態存儲針對可以通過鑲嵌被生成的大量(例如數百萬)圖元的位置數據,來避免存儲這些圖元的主存儲器中的存儲器消耗。

圖14示出了可以實現圖形處理系統300的計算機系統。計算機系統包括cpu1402、gpu1404、存儲器302和其他設備1406,諸如顯示器1408、揚聲器1410和相機1412。幾何處理邏輯304和光柵化邏輯306在gpu1404上被實現。在其他示例中,幾何處理邏輯304和光柵化邏輯306可以在cpu1402上被實現。計算機系統的組件可以經由通信總線1414彼此通信。

在上述示例中,使用光柵化過程來渲染圖元。在其他示例中,可以使用諸如光線跟蹤的其他技術來渲染圖元。在這些其他示例中,高速緩存系統334、任務組合單元340、任務依賴性單元342和simd處理邏輯346可以基于與上述示例中描述的相同的原理來操作,使得計算實例被聚集到要被輸出到simd處理邏輯346的任務中。

通常,可以使用軟件、固件、硬件(例如,固定邏輯電路)、或這些實現的任意組合在模塊中實現上述任何功能、方法、技術或組件(例如幾何處理邏輯304和光柵化邏輯306的組件)。本文中使用的術語“模塊”、“功能”、“組件”、“塊”、“單元”和“邏輯”通常表示軟件、固件、硬件或其任意組合。

在幾何處理邏輯304和光柵化邏輯306的組件中的一些的軟件實現的情況下,這些組件表示當在處理器上執行時執行指定任務的程序代碼。在一個示例中,幾何處理邏輯304和光柵化邏輯306的單元和邏輯可以由被配置有以機器可讀的形式存儲在計算機可讀介質上的軟件的計算機來執行。計算機可讀介質的一種這樣的配置是信號承載介質,并且因此被配置成諸如經由網絡將指令(例如,作為載波)傳輸到計算設備。計算機可讀介質還可以被配置為非暫態計算機可讀存儲介質,并且因此不是信號承載介質。計算機可讀存儲介質的示例包括隨機存取存儲器(ram)、只讀存儲器(rom)、光盤、閃存、硬盤存儲器、以及可以使用磁、光和其他技術存儲指令或其他數據并且可以由機器訪問的其他存儲器設備。

軟件可以是包括用于配置計算機以執行所描述的方法的組成部分的計算機程序代碼的計算機程序的形式,或者是包括當程序在計算機上運行時并且在計算機程序可以在計算機可讀介質上實現的情況下適于執行本文中所描述的方法中的任何方法的所有步驟的計算機程序代碼裝置的計算機程序的形式。程序代碼可以存儲在一個或多個計算機可讀介質中。本文中所描述的技術的特征是平臺無關的,這意味著該技術可以在具有各種處理器的各種計算平臺上被實現。

本領域技術人員還將認識到,本文中所描述的功能、技術或方法的全部或一部分可以由專用電路、專用集成電路、可編程邏輯陣列、現場可編程門陣列等來執行。例如,模塊、功能、組件、單元或邏輯(例如,幾何處理邏輯304和光柵化邏輯306的組件)可以包括以電路形式的硬件。這樣的電路可以包括晶體管和/或在制造過程中可用的其他硬件元件。這樣的晶體管和/或其他元件可以用于形成實現和/或包含存儲器(諸如寄存器、觸發器或鎖存器)、邏輯運算器(諸如布爾運算)、數學運算器(諸如加法器、乘法器、或移位器)和互連的電路或結構。這樣的元件可以作為定制電路或標準單元庫、宏或其他級別的抽象來提供。這樣的元件可以以特定的布置互連。模塊、功能、組件、單元或邏輯(例如,幾何處理邏輯304和光柵化邏輯306的組件)可以包括固定功能電路和可以被編程以執行一個或多個功能的電路;這樣的編程可以從固件或軟件更新或控制機制來提供。在示例中,硬件邏輯具有實現固定功能操作、狀態機或過程的電路。

還旨在包括“描述”或定義實現上述的模塊、功能、組件、單元或邏輯的硬件(例如,幾何處理邏輯304和光柵化邏輯306的組件)的配置的軟件,諸如用于設計集成電路或用于配置可編程芯片以執行所需功能的hdl(硬件描述語言)軟件。也就是說,可以提供其上編碼有以集成電路定義數據集形式的計算機可讀程序代碼的計算機可讀存儲介質,當在集成電路制造系統中被處理時,計算機可讀程序代碼配置該系統以制造圖形處理系統,該圖形處理系統被配置成執行本文中所描述的任何方法或者制造包括本文中所描述的任何裝置的圖形處理系統。ic定義數據集可以是例如以合適的hdl編寫的計算機代碼的形式,諸如寄存器傳送級(rtl)代碼?,F在將參照圖15描述在集成電路制造系統處處理集成電路定義數據集以便配置系統以制造圖形處理系統的示例。

圖15示出了包括布局處理系統1504和集成電路生成系統1506的集成電路(ic)制造系統1502的示例。ic制造系統1502被配置成接收ic定義數據集(例如,定義如本文中的任何示例中所述的圖形處理系統),處理ic定義數據集,并且根據ic定義數據集來生成ic(例如,其實施如本文中的任何示例中所描述的圖形處理系統)。ic定義數據集的處理配置ic制造系統1502以制造實施如本文中的任何示例中所描述的圖形處理系統的集成電路。更具體地,布局處理系統1504被配置成接收和處理ic定義數據集以確定電路布局。從ic定義數據集確定電路布局的方法在本領域中是已知的,并且例如可以涉及合成rtl代碼以確定要被生成的電路的門級表示,例如,在邏輯組件(例如,nand、nor、and、or、mux和觸發器組件)方面??梢酝ㄟ^確定針對邏輯組件的位置信息來從電路的門級表示確定電路布局。這可以自動地或者在用戶參與的情況下完成,以便優化電路布局。當布局處理系統1504已經確定了電路布局時,其可以向ic生成系統1506輸出電路布局定義。如本領域中已知的,ic生成系統1506根據電路布局定義來生成ic。例如,ic生成系統1506可以實現半導體器件制造工藝以生成ic,其可以涉及光刻和化學處理步驟的多步驟序列,在該步驟期間,在由半導體材料制成的晶片上逐漸形成電子電路。電路布局定義可以是可以在蝕刻工藝中使用用于根據電路定義生成ic的掩碼的形式。替選地,提供給ic生成系統1506的電路布局定義可以是計算機可讀代碼的形式,ic生成系統1506可以使用該代碼來形成合適的掩碼用于在生成ic時使用。由ic制造系統1502執行的不同過程可以全部在一個位置中被實現,例如,由一方。替選地,ic制造系統1502可以是分布式系統,使得過程中的一些可以在不同位置處被執行,并且可以由不同方執行。例如,以下階段中的一些階段:(i)合成表示ic定義數據集的rtl代碼以形成要被生成的電路的門級表示,(ii)基于門級表示生成電路布局,(iii)根據電路布局形成掩碼,以及(iv)使用掩碼制造集成電路,可以在不同位置中和/或由不同方執行。

在其他示例中,在集成電路制造系統處的集成電路定義數據集的處理可以配置系統以制造圖形處理系統,而不對ic定義數據集進行處理,以便確定電路布局。例如,集成電路定義數據集可以定義可重構處理器(諸如fpga)的配置,并且該數據集的處理可以配置ic制造系統以生成具有所定義的配置的可重構處理器(例如,通過將配置數據加載到fpga)。

在一些示例中,集成電路定義數據集可以包括在由數據集定義的硬件上運行的軟件或者與由數據集定義的硬件組合的軟件。在圖15所示的示例中,ic生成系統還可以由集成電路定義數據集配置,以在制造集成電路時,根據在集成電路定義數據集處定義的程序代碼將固件加載到該集成電路上,或者以其他方式向集成電路提供程序代碼用于與集成電路一起使用。

術語“處理器”和“計算機”在本文中用于指代具有處理能力使得其可以執行指令的任何設備或其部分、或者能夠執行全部或部分功能或方法的專用電路、或其任意組合。

雖然已經以特定于結構特征和/或方法動作的語言描述了主題,但是應當理解,所附權利要求中限定的主題不一定限于上述具體特征或動作。相反,上面描述的具體特征和動作被公開作為實現權利要求的示例形式。應當理解,上述的益處和優點可以涉及一個示例或者可以涉及若干示例。

如對本領域技術人員顯而易見的,本文中給出的任何范圍或值可以被擴展或改變而不失去所尋求的效果。本文中所描述方法的步驟可以以任何合適的順序進行,或在適當的情況下同時進行。上述任何示例的方面可以與所描述的任何其他示例的方面組合以形成另外的示例而不失去所尋求的效果。

當前第1頁1 2 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
主站蜘蛛池模板: 松滋市| 盖州市| 新宁县| 周口市| 台南市| 深州市| 五寨县| 泊头市| 雅江县| 马山县| 衢州市| 阿巴嘎旗| 乌兰县| 潍坊市| 阿坝| 阿鲁科尔沁旗| 新源县| 蓬溪县| 郸城县| 太保市| 邵东县| 洛川县| 封丘县| 布拖县| 怀柔区| 临海市| 涡阳县| 保靖县| 秦安县| 禄劝| 蚌埠市| 烟台市| 剑阁县| 江门市| 武鸣县| 元谋县| 灵武市| 盐亭县| 合水县| 杂多县| 沧源|