共用方式為


對應會對應至並排集區

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

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

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

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

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

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

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

針對單一表面所叫用的最差大小頁面數據表大小,假設串流資源是以每元素 128 位格式建立的,因此 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 可避免在轉譯期間發生特定危險情況,不過,由於危險追蹤可能會位於串流資源的並排層級,在串流資源轉譯期間追蹤危險情況,可能需要付出相當昂貴的代價。

 

建立串流資源