對應在磚集區中

使用 D3D11_RESOURCE_MISC_TILED 旗標建立資源時,構成資源的圖格會從指向磚集區中的位置。 磚集區是記憶體的集區 (由一或多個配置於幕後備份 - 應用程式中看不見)。 作業系統和顯示器驅動程式管理這個記憶體集區,讓應用程式容易了解磁碟使用量。 磚資源會指向磚集區中的位置,以對應 64KB 區域。 這項設定的一個附帶結果是,它可以讓多資源共用及重複使用相同的動態磚,如有需要,也讓相同的動態磚在資源內的不同位置重複使用。

從磚集區彈性填入磚的成本是,該資源必須定義和維護磚集區中的磚對應代表資源所需的動態磚。 您可以變更磚對應。 並非所有資源中的磚每次都需要對應一次。資源可以有 NULL 對應。 NULL 對應定義為從存取之資源的觀點無法使用磚。

您可以建立多個磚集區,而且任意數目的磚資源可以同時對應到任何指定的磚集區。 磚集區也可以變大或縮小。 如需詳細資訊,請參閱調整磚集區大小。 有一個可用來簡化顯示驅動程式和執行時間實作的條件約束是,指定的磚資源一次只能對應到最多一個磚集區 (,而不是同時對應至多個磚集區) 。

與磚資源本身相關聯的儲存體數量 (也就是獨立磚集區記憶體) 大致與任何指定時間實際對應至集區的磚數目成正比。 因此,對於硬體便需使用對應的磚數量大約調整分頁表儲存空間的磁碟使用量 (例如,視情況使用多層次頁面表格配置)。

磚集區可以視為完全軟體抽象,能使 Direct3D 應用程式有效地能有效地規劃圖形處理器 (GPU) 的網頁表格,而不需要知道低層實作細節 (或直接處理指標地址)。 在硬體中,磚集區不套用任何其他間接取值層級。 使用像是與磚集區概念無關的頁面目錄的建構的單層分頁表最佳化。

讓我們瀏覽分頁表本身在最糟情況可能要求的儲存體 (雖然實際上實作只需要和所對應者大約一致的儲存體)。

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

針對單一表面的最差案例頁面資料表大小點擊,假設 Direct3D 11 中的資源限制,假設以每一元素 128 位 (格式建立磚資源,例如 RGBA float) ,因此 64KB 磚只包含 4096 圖元。 支援的 Texture2DArray 大小上限為 16384*16384*2048 (但只有單一 mipmap) 在頁面資料表中填入 (不包含 mipmap) 使用 64 位資料表專案時,需要大約 1 GB 的儲存空間。 新增 Mipmap 會增加完全對應 (最糟情況) 分頁表儲存空間約 1.3GB 的三分之一。

這種情形存取約 10.6 TB 可定址記憶體。 但可能會限制可定址記憶體數量,這會使數量減少至約 TB 範圍。

另一個考慮案例是單一 Texture2D 並排資源 16384*16384,每個元素格式有 32 位,包括 mipmap。 完整填入分頁表所需的空間約 170 KB,具有 64 位元資料表項目。

最後,請考慮使用 BC 格式的範例,例如 BC7 含每個磚 128 位元 4x4 像素。 這是每個像素一個位元組。 Texture2DArray為 16384*16384*2048,包括 mipmap 需要大約 85 MB 才能在分頁表中完整填入此記憶體。 這在考慮不正常的情況下,可讓一個磚資源跨越 550 gigapixels (512 GB 的記憶體,在此案例中為) 。

實際上,如果實體可用記憶體數量不允許每次都對應和參考,便不定義這些完整對應。 但若有磚集區,應用程式便可以選擇重複使用動態磚 (例如,重複使用「黑」色磚針對影像中大型塊黑色區域) - 有效使用磚集區 (也就是分頁表對應) 當做記憶體壓縮工具。

分頁表所有項目的初始內容為 NULL。 應用程式也無法傳遞表面的記憶體內容的初始資料,因為它一開始便沒有輔助記憶體。

本節內容

主題 描述
建立磚集區
磚集區是透過ID3D11Device::CreateBuffer API 建立,方法是傳遞pDesc參數指向之D3D11_BUFFER_DESC結構之MiscFlags成員中的D3D11_RESOURCE_MISC_TILE_POOL旗標。
調整磚集區大小
如果使用 ID3D11DeviceCoNtext2::ResizeTilePool API,如果應用程式需要更多工作集區來對應磚資源,或視需要較少的空間縮小,請使用 ID3D11DeviceCoNtext2::ResizeTilePool API 來成長磚集區。
危險追蹤與磚集區資源
對於非磚化資源,Direct3D 可能會在轉譯期間防止某些危險狀況,但因為危險追蹤會位於磚層級的磚資源,因此在轉譯磚資源期間追蹤危險狀況可能太昂貴。

建立磚資源