共用方式為


並排顯示的資源 API

本節所述的 API 會使用並排顯示的資源和磚集區。

將磚從磚集區指派給資源

ID3D11DeviceCoNtext2::UpdateTileMappingsID3D11DeviceCoNtext2::CopyTileMappings API 操作和查詢磚對應。 更新呼叫只會影響呼叫中所識別的磚,而其他呼叫則會保留為先前定義的磚。

來自磚集區的任何指定磚都可以對應至資源中的多個位置,甚至是多個資源。 此對應包含資源中的磚,該資源具有實作選擇的版面配置 (Mipmap 封裝) 其中多個 Mipmap 會一起封裝成單一磚。 catch 是,如果資料是透過一個對應寫入磚,但透過不同設定的對應讀取,則結果為未定義。 不過,謹慎使用此彈性仍對應用程式很有用,例如在不會同時使用的資源之間共用磚,其中磚的內容一律會透過相同的資源對應初始化,以便後續讀取它們。 同樣地,對應以保存多個具有相同表面維度之已封裝資源 Mipmap 的磚將會正常運作 - 資料會顯示在這兩個對應中相同。

資源磚指派的變更可以隨時在即時或延後的內容中進行。

查詢資源磚和支援

若要查詢資源圖格,請使用 ID3D11Device2::GetResourceTiling

如需其他資源磚支援,請使用 ID3D11Device2::CheckMultisampleQualityLevels1

複製並排顯示的資料

Direct3D 中用於移動資料的任何方法,都如同未並排顯示資源一樣,不同之處在于卸載對未對應的區域寫入,並從未對應的區域讀取會產生 0。 如果複製作業牽涉到多次寫入相同的記憶體位置,因為目的地資源中的多個位置會對應至相同的磚記憶體,則對多對應磚產生的寫入是不具決定性且不可重複的。 也就是說,存取會依硬體執行複本的順序發生。

Direct3D 11.2 引進了這些額外複製方式的方法:

這些方法會視需要 swizzle/deswizzle,並在呼叫者承諾目的地記憶體未由正式發行前小眾測試版的 GPU 工作參考時,允許D3D11_TILE_COPY_NO_OVERWRITE旗標。

複製中涉及的磚不能包含包含已封裝 Mipmap 或具有未定義結果的磚。 若要將資料傳送至硬體套件到某個磚或從 Mipmap 傳送至某個磚,您必須針對整個 mip 鏈結使用標準 (非磚特定的) 複製/更新 API 或 ID3D11DeviceCoNtext::GenerateMips

GenerateMips上的附注:在具有部分對應磚的資源上使用ID3D11DeviceCoNtext::GenerateMips會產生結果,只要遵循規則來讀取和寫入用至硬體和顯示驅動程式用於GenerateMips的任何演算法即可。 因此,除非在產生階段 (具有 Null 對應的區域,以及其在產生階段對其他 mip 的影響) ,否則應用程式不會對應用程式所關心的部分造成任何影響,否則應用程式不會特別有用。

例如,從暫存介面或應用程式記憶體複製磚資料,就是上傳可能已從磁片串流處理磚的方式。 從磁片串流將某種壓縮資料上傳至 GPU 記憶體,然後在 GPU 上解碼時的變化。 解碼目標可能是 GPU 記憶體中的緩衝區資源, CopyTiles 接著會從中複製到實際的並排資源。 此複製步驟可讓 GPU 在不知道 Swizzle 模式時進行撥動。 例如,如果並排資源本身是緩衝區資源 (,而不是紋理) ,則不需要撥動。

複製之非並排緩衝區資源端磚的記憶體配置只是在 64KB 磚的記憶體中線性,硬體和顯示驅動程式會在傳輸至並排顯示資源時適當地對每個磚進行wizzle/deswizzle。 對於多重取樣反鋸齒 (MSAA) 表面,每個圖元的樣本都會以取樣索引順序周遊,然後再移至下一個圖元。 對於在右側部分填滿的磚 (,其寬度不是圖元的多個磚寬度) ,則向下移動列的間距/步距是圖格已滿時,會以圖元數圖元為位元組的完整大小。如果磚已滿,該圖格會容納在磚上。 因此,記憶體中每個圖元資料列之間可能會有一個間距。 為了簡化規格,小於磚的 mipmap 不會線上性配置中封裝在一起。 這似乎浪費了記憶體空間,但如先前所述,透過 CopyTilesUpdateTiles不允許將硬體套件一起複製至 Mips。 應用程式只能使用一般 UpdateSubresource* () 或 CopySubresource* () API 個別複製小型 Mips,但在 CopySubresource* () 的情況下,這表示線性記憶體必須與並排資源相同 - CopySubresource* () 無法從緩衝區資源複製到 Texture2D。

如果已定義硬體標準wizzle,可以新增旗標來表示緩衝區中的資料會以該格式解譯, (傳輸) 不需要任何雜亂,不過上傳資料的替代方法在該案例中也可能有意義,例如允許應用程式直接存取磚集區記憶體。

複製作業可以在立即或延後的內容上完成。

調整磚集區的大小

若要調整磚集區的大小,請使用 ID3D11DeviceCoNtext2::ResizeTilePool

並排顯示的資源屏障

若要指定多個磚資源之間的資料存取順序條件約束,請使用 ID3D11DeviceCoNtext2::TiledResourceBarrier

並排顯示的資源