共用方式為


默認紋理映射

使用預設紋理對應可減少在 GPU 與 CPU 之間共用影像數據時的複製和記憶體使用量。 不過,它只應用於特定情況。 標準旋轉配置可避免在多個版面配置中複製或閃爍數據。

概述

映射預設紋理不應該是開發人員的首選。 開發人員應該首先以適合離散型 GPU 的方式撰寫程式代碼(也就是說,對大部分的紋理不進行任何 CPU 存取,並使用 CopySubresourceRegion1上傳)。 但是,在某些情況下,CPU 和 GPU 可能會經常在相同的數據上互動,因此對應預設紋理有助於節省電源,或加速特定適配卡或架構上的特定設計。 應用程式應該偵測到這些案例,並將不必要的複本優化。

在 D3D11.3 中,使用 D3D11_TEXTURE_LAYOUT_UNDEFINED 建立的紋理(屬於 D3D11_TEXTURE_LAYOUT 列舉的一個成員),且不具有 CPU 存取,是對於頻繁 GPU 渲染和取樣最有效率的選擇。 在效能測試時,應該將這些紋理與具有 CPU 存取權的 D3D11_TEXTURE_LAYOUT_UNDEFINED、具有 CPU 存取權的 D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE,以及支援交叉適配器的 D3D11_TEXTURE_LAYOUT_ROW_MAJOR 進行比較。

使用D3D11_TEXTURE_LAYOUT_UNDEFINED搭配CPU存取可啟用以下方法:WriteToSubresourceReadFromSubresourceMap(排除應用程式對指標的存取),以及Unmap;但可能犧牲GPU存取效率。 使用 D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE 搭配 CPU 存取,可使 WriteToSubresourceReadFromSubresourceMap(這會返回一個應用程式的有效指標),以及 Unmap。 它在犧牲 GPU 存取效率時,甚至可能比使用 D3D11_TEXTURE_LAYOUT_UNDEFINED 和 CPU 存取時甚鉅。

一般而言,應用程式應該將大部分的紋理建立為僅供 GPU 使用,並使用 D3D11_TEXTURE_LAYOUT_UNDEFINED。

在映射預設紋理功能出現之前,多維數據僅有一種標準化布局:"linear",也稱為「行優先」或「row-major」。 當映射預設值可用時,應用程式應該避免使用USAGE_STAGING和USAGE_DYNAMIC紋理。 USAGE_STAGING 和 USAGE_DYNAMIC 紋理會使用線性版面配置。

D3D11.3 (和 D3D12) 引進標準多維度數據配置。 這樣做是為了讓多個處理單位在相同的資料上運行,而不需要複製資料或在多個格式之間轉換資料。 標準化的版面配置可透過網路效果提升效率,並允許演算法在假設特定模式時進行縮短。

請注意,此標準旋轉是硬體功能,而且可能不受所有 GPU 支援。

D3D11.3 API

不同於 D3D12,D3D11.3 預設不支援紋理對應,因此您必須查詢 D3D11_FEATURE_DATA_D3D11_OPTIONS2。 需要使用呼叫 ID3D11Device::CheckFeatureSupport 來查詢標準 swizzle,並檢查 D3D11_FEATURE_DATA_D3D11_OPTIONS2StandardSwizzle64KBSupported 欄位。

下列 API 與紋理對應相關:

列舉

結構

方法

Direct3D 11.3 功能