為何需要並排顯示資源?
需要並排顯示資源,因此在 GPU) 記憶體 (圖形處理單位較少,會浪費儲存應用程式知道不會存取的介面區域,而硬體可以瞭解如何跨連續的磚進行篩選。
在圖形系統 (,也就是作業系統、顯示驅動程式和圖形硬體) ,而不支援並排資源,圖形系統會以子資源細微性管理所有 Direct3D 記憶體配置。 針對 Buffer,整個 Buffer 是子資源。 例如 ,針對 Texture (Texture2D) ,每個 mip 層級都是子資源;紋理陣列 (例如 Texture2DArray) ,指定陣列配量的每個 mip 層級都是子資源。 圖形系統只會公開在此子資源資料粒度上管理配置之對應的功能。 在磚資源的內容中,「對應」是指讓 GPU 能夠看見資料。
假設應用程式了解特定轉譯作業只需要存取圖片 Mipmap 鏈的一小部分 (甚至可能不到特定 Mipmap 的完整區域)。 理想上來說,該應用程式可能會向圖形系統通知這項需求。 則圖形系統之後便只會確保所需的記憶體在 GPU 上對應,而不會為太多記憶體進行分頁。 事實上,如果沒有並排資源支援,圖形系統就只能通知需要以子資源細微性在 GPU 上對應的記憶體,例如, (可以存取的各種完整 mipmap 層級) 。 圖形系統中不會發生隨選失敗,所以可能導致必須使用許多額外的 GPU 記憶體,讓完整子資源對應搶先在參照記憶體中任何部分的轉譯命令執行之前完成。 這只是在 Direct3D 中使用大型記憶體配置的一個問題,而不需要磚資源支援。
Direct3D 11 支援在指定端最多 16384 圖元的 Texture2D 表面。 長寬為 16384 x 16384 且每像素 4 個位元組的影像會消耗 1 GB 的視訊記憶體 (新增 Mipmap 則會消耗加倍的量)。 在實際應用上,幾乎不需要在單一轉譯作業中參照完整 1GB 的大小。
有些遊戲開發人員會用最大至 128k x 128K 的大小塑造地型表面。 讓這種作法能在現有 GPU 上運作的方式,是將表面分解為硬體能夠處理的小型磚。 應用程式必須了解需要將哪個磚載入 GPU 上紋理的快取內,這也就是軟體分頁系統的作用。 此方法的一個重要缺點是硬體不知道所發生的分頁:當影像的一部分需要顯示在分層磚的畫面上時,硬體不知道如何執行固定函式 (也就是說,有效率地跨磚篩選) 篩選。 這表示必須在著色器程式碼中使用手動紋理篩選,以管理應用程式本身的軟體並排 (如果想要使用高品質非等向性篩選,成本將會變得很高),以及 (或) 必須浪費記憶體在磚上製作包含鄰近磚資料的裝訂邊,以便固定功能硬體篩選得以繼續提供協助。
如果平面配置的並排表示可能是圖形系統中的第一級功能,應用程式可能會告訴硬體哪些磚可供使用。 如此一來,就能浪費較少 GPU 記憶體在儲存應用程式未存取的表面區域上,且硬體會了解如何進行跨相鄰磚篩選,減輕開發人員在執行軟體並排時所遇到的一些麻煩。
但若要提供完整的解決方案,有些項目必須先處理完成,像是不論是否支援表面上的並排,目前最大的表面維度是 16384,這和應用程式想要的 128K+ 差距很大。 僅讓硬體支援較大的紋理大小是一種方法,但採取此方法需要花費大量費用和 (或) 其他方面的取捨。 Direct3D 11 的紋理篩選路徑和轉譯路徑在支援具有其他需求的 16K 紋理方面已經飽和,例如支援檢視區範圍在轉譯期間落在表面,或支援在篩選期間從表面邊緣換行的紋理。 可能需要進行取捨,像是紋理大小增加超過 16K 時,功能或精確度會在某方面失效。 即使在功能上做出這項讓步,還是可能需要額外的硬體效能,才能提升整體硬體系統的處理性能,以轉換至更大的紋理大小。
當紋理變得非常大時會浮現一個問題,那就是單精確度浮點數紋理座標 (以及已與座標建立關聯的內插運算,用以支援點陣化) 將用完精確度,因此無法準確指定表面上的位置。 在這之後會發生抖動紋理篩選。 這時其中一個較為昂貴的選項是需要雙精確度內插運算支援,但在有其他選擇時,此選項可能會有點大材小用。
磚資源的替代名稱是「疏鬆紋理」。「疏鬆」會同時傳達資源的並排本質,以及可能用來並排顯示它們的主要原因-並非所有資源都預期一次對應。 事實上,應用程式可以輕易地撰寫磚資源,其中不會刻意為資源的所有區域+mips 撰寫任何資料。 因此,內容本身可能是疏鬆的,而 GPU 記憶體中內容在指定時間的對應會是 (更疏鬆) 的子集。
磚資源可能提供的另一個案例是讓不同維度/格式的多個資源分享相同的記憶體。 有時候應用程式有無法同時使用的專屬資源集,或建立來僅供短暫期間使用並在使用後就刪除的資源,而在資源刪除後接著再建立其他資源。 一種可能落在「並排資源」的一般性形式,就是允許使用者將多個不同的資源指向相同 (重迭) 記憶體。 意即,可以從應用程式觀點將「資源」的建立和刪除 (定義維度或格式等項目) 和具備基礎資源之記憶體的管理分離。
相關主題