共用方式為


對應會對應至並排集區

當資源建立為串流資源時,組成資源的並排會透過指向並排集區中的位置產生。 並排集區為記憶體集區 (受到背景中的一個或多個配置支援,而應用程式無法加以檢視)。 作業系統和顯示器驅動程式會管理這個記憶體集區,而應用程式可輕鬆掌握記憶體使用量。 串流資源會透過指向並排中的位置來對應 64KB 區域。 這個設定的其中一個缺點,在於可允許多個資源共用和重複使用相同的並排,同時讓相同的並排重複使用在資源中的不同位置 (如有需要)。

若要享有為並排集區外的資源填入並排的彈性,就需付出相應的代價:資源需要定義和維護對應,以指出並排集區中的哪個並排代表資源所需的並排。 並排對應可進行變更。 此外,並非資源中的所有並排,都需完成一次對應;資源也可以具有 NULL 對應。 NULL 對應會將並排定義為無法從資源的觀點來存取。

您可以建立多個並排集區,而任意數量的串流資源都能同時對應至任何指定並排集區。 並排集區也能進行擴增或縮減。 如需詳細資訊,請參閱調整並排集區大小。 在簡化顯示器驅動程式和執行階段實作方面的其中一項限制,就是指定的串流資源每次最多只能對應至一個並排集區 (而非同時對應至多個並排集區)。

與串流資源本身相關的儲存體量 (也就是獨立於並排集區記憶體之外),大約會與在任何指定時間實際對應至集區的並排數量呈正比。 對硬體而言,這項事實意味著分頁表儲存體的記憶體使用量,約略等同已對應並排的數量 (例如,視情況使用多層級分頁表機制)。

並排集區可視為完整的軟體抽象化,可讓 Direct3D 應用程式對圖形處理單元 (GPU) 上的分頁表進行有效的程式設計,而無須掌握低階的實作詳細資訊 (或直接處理指標位址)。 並排集區不會在硬體中套用任何額外的間接層級。 使用分頁目錄等結構的單一層級分頁表最佳化,與並排集區概念毫無相關。

現在,讓我們來探索在最糟的情況下,分頁表本身可能需要哪些儲存體 (雖然在實務上,實作僅需具備與所對應儲存體約略呈正比的量)。

假設每個分頁表項目都是 64 位元。

在單一表面遇到的分頁表最糟情況下,由於 Direct3D 11 中具有資源限制,假設串流資源是使用每一項目 128 位元的格式所建立而成 (例如 RGBA 浮點),則 64KB 的並排僅包含 4096 像素。 所支援的 Texture2DArray 大小上限為 16384*16384*2048 (但只有單一 Mipmap),這表示,如果使用 64 位元資料表項目來完整填入,分頁表中需要有近 1GB 的儲存體。 新增 Mipmap 會讓完整對應 (最糟情況) 的分頁表儲存體增加三分之一左右,也就是近 1.3GB。

這個案例可存取約 10.6 TB 的可定址記憶體。 不過,可存取記憶體的數量可能設有限制,這將造成此一數量隨之降低,並下滑至 1TB 左右的範圍。

另一個需要考量的案例,就是使用單一 Texture2D 串流資源 16384*16384 搭配每一項目 32 位元格式,且包括 Mipmap 的情況。 使用 64 位元資料表項目完整填入分頁表的所需空間,約為 170KB。

最後,則要考量使用 BC 格式的範例,例如使用 128 位元且每一並排為 4x4 像素的 BC7。 這等同每一像素一個位元組。 包括 Mipmap 且 16384*16384*2048 的 Texture2DArray 需要約 85MB 的空間,才能在分頁表中完整填入這個記憶體。 鑑於這可讓單一串流資源擴充至 550 G 像素 (在此案例中為 512 GB 的記憶體),看起來還不錯。

但在實務上,定義這些完整對應根本是不可能的任務,原因在於,可用的實體記憶體數量不會允許一次對應和參考如此大量的內容。 不過,只要使用並排集區,應用程式就能選擇重複使用並排 (簡單的範例包括,在影像中的大型黑色區域中重複使用「黑」色並排),以透過有效的方式將並排集區 (也就是分頁表對應) 做為記憶體壓縮工具。

在分頁表的初始內容中,所有項目都是 NULL。 此外,應用程式也無法傳遞表面記憶體內容的初始資料,因為一開始並沒有任何記憶體支援。

本節內容

主題 說明

建立並排集區

應用程式可為每個 Direct3D 裝置建立一個或多個並排集區。 每個並排集區的整體大小會受限於 Direct3D 11 的資源大小上限,也就是大約 1/4 的 GPU RAM。

調整並排集區大小

如果應用程式需要更多工作集,以串流對應至當中的資源,可重新調整並排集區大小,以擴充並排集區,如果需要需要較少的空間,也可縮減並排集區。

危險追蹤和並排集區資源

針對非串流資源,Direct3D 可避免在轉譯期間發生特定危險情況,不過,由於危險追蹤可能會位於串流資源的並排層級,在串流資源轉譯期間追蹤危險情況,可能需要付出相當昂貴的代價。

 

建立串流資源