基于每倉可見性信息以及添加的線內(nèi)操作的渲染命令的條件性執(zhí)行的制作方法
【專利說明】基于每倉可見性信息以及添加的線內(nèi)操作的渲染命令的條 件性執(zhí)行
[0001] 本申請案主張2013年5月31日申請的第61/829, 564號美國臨時申請案的權(quán)益, 所述臨時申請案的全部內(nèi)容以引用的方式并入本文中。
技術(shù)領(lǐng)域
[0002] 本發(fā)明涉及用于圖形處理的技術(shù),且更明確地說涉及用于渲染圖形處理中的基元 的技術(shù)。
【背景技術(shù)】
[0003] 用于顯示的視覺內(nèi)容(例如用于圖形用戶接口和視頻游戲的內(nèi)容)可由圖形處理 單元(GPU)產(chǎn)生。GPU可將二維(2D)或三維(3D)圖形對象轉(zhuǎn)換為可在顯示裝置上顯示的 2D像素表示。將關(guān)于3D對象的信息轉(zhuǎn)換為可顯示的2D像素表示被稱為像素渲染,且可需 要相當(dāng)大的存儲器和處理功率。
【發(fā)明內(nèi)容】
[0004] 大體來說,本發(fā)明描述用于基于每倉可見性信息的針對基于倉的渲染的渲染指令 的條件性執(zhí)行的技術(shù)。通過在倉中的基元是可見的情況下且在一些實(shí)例中僅在該情況下執(zhí) 行倉的渲染指令,圖形處理單元(GPU)可改進(jìn)其渲染包括基元的圖形對象和場景的性能。 GPU可基于指示倉中是否有任何基元是可見的倉的可見性流而確定所述倉中的基元是否在 經(jīng)渲染圖形對象或場景中可見。
[0005] 在一個方面中,本發(fā)明針對一種用于渲染場景的方法。所述方法包含基于可見性 流確定是否執(zhí)行存儲在間接緩沖器中的指令,其中存儲在間接緩沖器中的所述指令包含用 于渲染與多個倉中的倉相關(guān)聯(lián)的基元的指令,且進(jìn)一步包含一或多個次級操作,且其中所 述可見性流指示所述倉是否與將在最后渲染的場景中可見的至少一個基元相關(guān)聯(lián)。所述方 法進(jìn)一步包含響應(yīng)于基于可見性流確定不執(zhí)行存儲在間接緩沖器中的指令而執(zhí)行存儲在 陰影間接緩沖器中的一或多個操作,其中存儲在陰影間接緩沖器中的所述一或多個操作包 含所述一或多個次級操作。所述方法進(jìn)一步包含響應(yīng)于基于可見性流確定要執(zhí)行存儲在間 接緩沖器中的指令而執(zhí)行存儲在間接緩沖器中的所述指令,用于渲染與所述多個倉中的所 述倉相關(guān)聯(lián)的基元,以及執(zhí)行存儲在間接緩沖器中的所述一或多個次級操作。
[0006] 在另一方面中,本發(fā)明針對一種經(jīng)配置用于圖形處理的裝置。所述裝置包含圖形 處理單元(GPU),其經(jīng)配置以:基于可見性流確定是否執(zhí)行存儲在間接緩沖器中的指令,其 中存儲在間接緩沖器中的所述指令包含用于渲染與多個倉中的倉相關(guān)聯(lián)的基元的指令且 進(jìn)一步包含一或多個次級操作,且其中所述可見性流指示所述倉是否與將在最后渲染的場 景中可見的至少一個基元相關(guān)聯(lián);響應(yīng)于基于可見性流確定不執(zhí)行存儲在間接緩沖器中的 指令而執(zhí)行存儲在陰影間接緩沖器中的一或多個操作,其中存儲在陰影間接緩沖器中的所 述一或多個操作包含所述一或多個次級操作;以及響應(yīng)于基于可見性流確定要執(zhí)行存儲在 間接緩沖器中的指令而執(zhí)行存儲在所述間接緩沖器中的指令,用于渲染與所述多個倉中的 所述倉相關(guān)聯(lián)的基元,以及執(zhí)行存儲在所述間接緩沖器中的所述一或多個次級操作。
[0007] 在另一方面中,本發(fā)明針對一種計(jì)算機(jī)可讀存儲媒體,其上存儲有指令,所述指令 在執(zhí)行時致使一或多個處理器執(zhí)行操作。所述操作包含基于可見性流確定是否執(zhí)行存儲在 間接緩沖器中的指令,其中存儲在間接緩沖器中的所述指令包含用于渲染與多個倉中的倉 相關(guān)聯(lián)的基元的指令,且進(jìn)一步包含一或多個次級操作,且其中所述可見性流指示所述倉 是否與將在最后渲染的場景中可見的至少一個基元相關(guān)聯(lián)。所述操作進(jìn)一步包含響應(yīng)于基 于可見性流確定不執(zhí)行存儲在間接緩沖器中的指令而執(zhí)行存儲在陰影間接緩沖器中的一 或多個操作,其中存儲在陰影間接緩沖器中的所述一或多個操作包含所述一或多個次級操 作。所述操作進(jìn)一步包含響應(yīng)于基于可見性流確定要執(zhí)行存儲在間接緩沖器中的指令而執(zhí) 行存儲在間接緩沖器中的所述指令,用于渲染與所述多個倉中的所述倉相關(guān)聯(lián)的基元,以 及執(zhí)行存儲在間接緩沖器中的所述一或多個次級操作。
[0008] 在另一方面中,本發(fā)明針對一種裝置。所述裝置包含用于基于可見性流確定是否 執(zhí)行存儲在間接緩沖器中的指令的裝置,其中存儲在間接緩沖器中的所述指令包含用于渲 染與多個倉中的倉相關(guān)聯(lián)的基元的指令且進(jìn)一步包含一或多個次級操作,且其中所述可見 性流指示所述倉是否與將在最后渲染的場景中可見的至少一個基元相關(guān)聯(lián)。所述裝置進(jìn)一 步包含響應(yīng)于基于可見性流確定不執(zhí)行存儲在間接緩沖器中的指令,用于執(zhí)行存儲在陰影 間接緩沖器中的一或多個操作的裝置,其中存儲在陰影間接緩沖器中的所述一或多個操作 包含所述一或多個次級操作。所述裝置進(jìn)一步包含響應(yīng)于基于可見性流確定要執(zhí)行存儲在 間接緩沖器中的指令,用于執(zhí)行存儲在間接緩沖器中的所述指令用于渲染與所述多個倉中 的所述倉相關(guān)聯(lián)的基元以及執(zhí)行存儲在間接緩沖器中的所述一或多個次級操作的裝置。
【附圖說明】
[0009] 圖1為說明根據(jù)本發(fā)明的一些方面用于渲染三維場景的處理器、圖形處理單元和 系統(tǒng)存儲器的框圖。
[0010] 圖2是說明根據(jù)本發(fā)明的一些方面基于瓦片的渲染架構(gòu)中的場景的瓦片的概念 圖。
[0011] 圖3為展示根據(jù)本發(fā)明的方面的在倉之間劃分的基元的概念圖。
[0012] 圖4為說明根據(jù)本發(fā)明的一些方面用于使用基于瓦片的GPU渲染圖形場景的過程 的流程圖。
[0013] 圖5為說明根據(jù)本發(fā)明的一些方面用于裝倉和渲染的命令緩沖器的概念圖。
[0014] 圖6為說明可經(jīng)配置以實(shí)施本發(fā)明的一或多個方面的裝置的實(shí)例的框圖。
【具體實(shí)施方式】
[0015] 圖形處理單元(GPU)常常用于渲染三維場景。因?yàn)槿S(3D)場景的此渲染可極 其存儲器帶寬集中,所以專門的圖形存儲器(GMEM)位于GPU的圖形處理核心附近使得其具 有極其高的存儲器帶寬。場景可由GPU的圖形處理核心渲染到GMEM,且所述場景可從GMEM 拆分到存儲器(例如,幀緩沖器)使得所述場景可隨后在顯示裝置處顯示。然而,因?yàn)镚MEM 的大小可歸因于物理區(qū)域約束而為有限的,所以GMEM可不具有足夠的存儲器容量來含有 整個三維場景。實(shí)際上,三維場景可需要拆分成瓦片,使得構(gòu)成所述場景的每一瓦片可配合 到GMEM中。舉例來說,如果GMEM能夠存儲512kB的數(shù)據(jù),那么場景可劃分成瓦片使得每一 瓦片中包含的像素?cái)?shù)據(jù)小于或等于512kB。以此方式,可通過將場景劃分為可渲染到GMEM 中的瓦片且將場景的每一瓦片個別地渲染到GMEM中,將來自GMEM的經(jīng)渲染瓦片存儲到幀 緩沖器,以及針對場景的每一瓦片重復(fù)所述渲染和存儲,來渲染所述場景。因此,所述場景 可使用多個渲染遍次逐瓦片渲染以渲染場景的每一瓦片。
[0016] 場景可由基元(例如三角形)組成,且構(gòu)成所述場景的瓦片中的每一者可包含基 元中的一或多者。構(gòu)成場景的瓦片可各自與存儲每一相應(yīng)瓦片中包含的基元的存儲器中 的倉相關(guān)聯(lián)。將場景的瓦片渲染到GMEM中可包含執(zhí)行命令以將相關(guān)聯(lián)倉中的基元渲染到 GMEM中。GPU的裝倉遍次可將構(gòu)成場景的基元分類到適當(dāng)倉中。GPU的裝倉遍次還可針對 每一倉創(chuàng)建可見性流,其指示所述倉中是否有任何基元將在最終渲染的場景中可見。
[0017] 用以渲染倉中的基元的命令加載在間接緩沖器中,且GPU執(zhí)行存儲在間接緩沖器 中的命令以渲染所述倉中包含的基元。如果倉的可見性流指示所述倉不含任何可見基元 (即,倉中的所有基元將在最終渲染的場景中不可見),那么在GPU通過跳過執(zhí)行與倉相關(guān) 聯(lián)的間接緩沖器中的指令而不渲染所述倉中的基元的情況下可改進(jìn)性能。
[0018] 然而,除存儲命令流以渲染特定倉中的基元之外,許多現(xiàn)代圖形應(yīng)用或合成系統(tǒng) 還使用間接緩沖器來存儲次級命令。這些次級命令可為與渲染特定倉的基元不相關(guān)的命 令。舉例來說,次級命令可包含線內(nèi)操作(例如,清除多個區(qū)域的快速清除、將圖像塊從場 景的一個部分傳遞到另一部分的線內(nèi)/可形成瓦片的位塊傳輸,和其它位塊傳遞)和其它 狀態(tài)更新。雖然線內(nèi)操作和其它狀態(tài)更新可依據(jù)設(shè)計(jì)不貢獻(xiàn)于可見性流,但其可貢獻(xiàn)于場 景的所產(chǎn)生的渲染。因此,如果因?yàn)閭}的可見性流指示不存在與所述倉相關(guān)聯(lián)的可見基元 因此GPU并不執(zhí)行間接緩沖器中的與倉相關(guān)聯(lián)的那些指令,那么也不執(zhí)行間接緩沖器中的 次級命令,借此導(dǎo)致最終場景的訛誤。
[0019] 為確保即使GPU基于倉的可見性流確定所述倉并不包含將在最終渲染的場景中 可見的任何基元所述GPU也執(zhí)行間接緩沖器中包含的次級命令,GPU(和/或圖形驅(qū)動器) 可分配存儲器(例如,系統(tǒng)存儲器)中的陰影間接緩沖器,將來自倉的間接緩沖器的次級命 令存儲到所述陰影間接緩沖器,且GPU可執(zhí)行存儲在陰影間接緩沖器中的次級命令。當(dāng)針 對給定倉無基元可見時,GPU可條件性地不執(zhí)行存儲在原始渲染間接緩沖器中的用以渲染 基元的命令(例如,繪制命令),且可改為執(zhí)行陰影間接緩沖器中的次級命令(例如,線內(nèi)操 作和狀態(tài)更新)。以此方式,GPU可仍執(zhí)行一起存儲在與特定倉的命令流相同的間接緩沖器 中的次級命令,即使所述倉中無基元將在最終渲染的場景中可見。
[0020] 陰影間接緩沖器為倉的對應(yīng)間接緩沖器的子集,因?yàn)槠湓谝恍?shí)例中可僅包含對 應(yīng)間接緩沖器的次級命令。在一些實(shí)例中,GPU可分配存儲器中的陰影間接緩沖器,且包含 一或多個次級命令(用于渲染基元的指令除外)的每一倉可將所述一或多個次級命令存儲 在陰影間接緩沖器中。陰影間接緩沖器可由GPU在與用用于渲染倉的基元的指令填充間接 緩沖器相同的時間用所述倉的次級命令填充。在其它實(shí)例中,如果GPU基于可見性流確定 對應(yīng)倉并不包含將在最后渲染的場景中可見的任何基元,那么陰影間接緩沖器可存儲倉的 次級命令。
[0021] 存儲線內(nèi)操作和用于渲染相同倉中的基元的命令兩者的GPU的任何基于瓦片的 渲染可基于與對應(yīng)倉相關(guān)聯(lián)的可見性流條件性地執(zhí)行陰影間接緩沖器中的指令而非對應(yīng) 間接緩沖器中的指令。通過跳過并不包含用于渲染任何可見基元的命令的間接緩沖器的解 析和執(zhí)行同時仍執(zhí)行陰影間接緩沖器中的線內(nèi)操作,GPU的渲