> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# XBOX Series X|S 的紋理配置與並排

> XBOX Series X|S 的紋理配置與並排

## 概觀

*紋理並排* (Texture tiling)，又稱為\_紋理混排\_ (texture swizzling)，是 GPU 定義紋理 mipmap 排列方式以及每個 mipmap 內紋素索引方式的方法。本主題說明 XBOX Series X|S GPU 與 XBOX One (X) GPU 在 mipmap 配置及紋素排序方面的差異。XBOX Series X|S GPU 的混排模式與 XBOX One 世代的 GPU 不同。mip 層級內紋素的排序 (即\_混排模式\_) 已變更，mip 層級的排序與對齊方式也已變更。

與 XBOX One 世代相同，您可以使用 XG 程式庫來計算紋理 mip 配置與紋素混排模式。XBOX Series X|S 版本的 XG 稱為 XG\_XS，可透過針對 xg\_xs.h 和 xg\_xs.lib 進行編譯與連結，在離線及執行階段使用。此 API 與 XBOX One XG 非常相似，變更之處包括與混排模式 (相對於並排模式) 相關的部分，以及輸出結構中的一些欄位已變更，以反映 XBOX Series X|S GPU 的新屬性。

## Mipmap 配置

在 XBOX Series X|S GPU 上，mip 層級在記憶體中現在是以反向順序排列，最小的 mip 層級 (mip 尾端) 位於紋理內接近位移 0 的位置，接著是逐漸增大的 mip 層級，而最大的 mip 層級 (mip 0) 位於距離紋理基底位址最遠的位移處。陣列紋理的實作方式也不同，現在是以 mip 鏈結的陣列來實作 (例如，切片 0 的 mip n-0，接著是切片 1 的 mip n-0)。在 XBOX One 世代的 GPU 中，陣列紋理是以陣列的 mip 鏈結來實作 (例如，所有 mip 0 切片，接著是所有 mip 1 切片)。

使用 XG 程式庫的離線紋理處理程式碼，以及任何對 mip 排序與對齊方式有所假設的執行階段紋理串流程式碼，都需要配合新的 XBOX Series X|S 配置進行調整。

Mip 配置是以紋理區塊大小為基礎。混排模式的選擇 (定義如下) 會指定紋理區塊大小。可能的區塊大小有五種：線性、256 位元組、4 KB、64 KB 和可變。根據紋理維度 (1D、2D 或 3D) 以及以位元組為單位的元素大小，每種區塊大小都會定義 mip 高度與寬度的填補維度。將每個 mip 層級填補至區塊大小，表示 mip 位移會對齊至區塊大小。

為避免使用較大區塊大小 (4 KB 和 64 KB) 的 mipmap 紋理耗用過多記憶體，所有小於一個區塊的 mip 層級都會封裝至一個區塊大小的 mip 尾端，該尾端位於紋理配置中的位移 0。mip 尾端中的 mip 層級會以 256 位元組對齊。

對於較小的區塊大小 (線性和 256 位元組)，mip 層級會以 256 位元組對齊，差異只在於填補維度。256 位元組區塊模式使用 2D/3D 填補維度，而線性區塊模式一律指定填補高度與深度為 1。

支援「可變」區塊大小的混排模式，但圖形驅動程式預設不會選取。VAR 混排模式的區塊大小在 Anaconda 上為 512 KB，在 Lockhart 上為 128 KB。

下列圖表顯示 48 × 24 的 2D 紋理在具有 6 個 mip 層級時，使用線性、256 位元組和 4 KB 區塊模式的配置。64 KB 的配置與 4 KB 配置類似，只是區塊大小較大 (mip 尾端也相應較大)。

<img src="https://mintcdn.com/microsoft-4404708b/6hkHc7s12mHcTMCE/images/gdk/features/graphics/miplayout-linear.png?fit=max&auto=format&n=6hkHc7s12mHcTMCE&q=85&s=afe86d21abd0b445109a1b4858b8851c" alt="使用線性區塊模式、具有 6 個 mip 層級的 48 × 24 2D 紋理圖表。" width="859" height="515" data-path="images/gdk/features/graphics/miplayout-linear.png" /> 線性配置顯示 mip 層級從最小到最大排序，每個層級都對齊至 256 位元組。

<img src="https://mintcdn.com/microsoft-4404708b/6hkHc7s12mHcTMCE/images/gdk/features/graphics/miplayout-256b.png?fit=max&auto=format&n=6hkHc7s12mHcTMCE&q=85&s=f0c7e030cd6895bca60b7279906f01bb" alt="使用 256 位元組區塊模式、具有 6 個 mip 層級的 48 × 24 2D 紋理圖表。" width="609" height="691" data-path="images/gdk/features/graphics/miplayout-256b.png" /> 256 位元組配置顯示 mip 層級從最小到最大排序，每個層級都對齊至由紋素構成的矩形 256 位元組區塊。

<img src="https://mintcdn.com/microsoft-4404708b/6hkHc7s12mHcTMCE/images/gdk/features/graphics/miplayout-4kb.png?fit=max&auto=format&n=6hkHc7s12mHcTMCE&q=85&s=5e3ce91321fe9983df07d1515e7a1ff7" alt="使用 4 KB 區塊模式、具有 6 個 mip 層級的 48 × 24 2D 紋理圖表。" width="760" height="892" data-path="images/gdk/features/graphics/miplayout-4kb.png" /> 4 KB 配置顯示 mip 層級從最小到最大排序，每個層級都對齊至由紋素構成的矩形 4 KB 區塊。最小的 mip 層級會封裝至 mip 尾端，而 mip 尾端可完全容納於一個 4 KB 區塊內。64 KB 配置的運作方式與 4 KB 配置相同，只是區塊大小為 64 KB。

陣列紋理是以 mip 鏈結的陣列來實作。對於具有 2 個以上切片的陣列紋理，可以想像成 2 個以上的 mip 鏈結在記憶體中首尾相接。下圖顯示同樣具有 6 個 mip 層級的 48 × 24 2D 紋理，但這次具有 2 個陣列切片。

<img src="https://mintcdn.com/microsoft-4404708b/6hkHc7s12mHcTMCE/images/gdk/features/graphics/miplayout-4kb-array.png?fit=max&auto=format&n=6hkHc7s12mHcTMCE&q=85&s=0159006000fb2ff46891c1e6f7e53dad" alt="使用 4 KB 區塊模式、具有 6 個 mip 層級及 2 個陣列切片的 48 × 24 2D 紋理圖表。" width="461" height="928" data-path="images/gdk/features/graphics/miplayout-4kb-array.png" />

立方體貼圖與立方體貼圖陣列是陣列紋理的特殊情況，其切片數目必須是 6 的倍數。在紋理定址方面，請將立方體貼圖視為與標準 2D 陣列紋理相同。

3D (體積) 紋理的實作方式與 2D 紋理類似，差別在於每個區塊代表的是由紋素元素構成的 3D 區域，而非 2D 矩形。體積的切片實作方式與陣列紋理的切片類似，差別在於由於區塊對齊，體積的每個切片具有大於 1 的切片深度。因此，mipmap 體積紋理的個別 mip 層級在記憶體中可能不連續，因為它們分散在多個切片中。體積紋理無法建立為陣列。

## XG 配置結構

XGTextureAddressComputer 物件是 XG 內的主要介面。它提供配置計算與紋素定址方法。輸出配置結構 XG\_RESOURCE\_LAYOUT 包含一到四個平面 (XG\_PLANE\_LAYOUT)，而每個平面包含一或多個 mip 層級 (XG\_MIPLEVEL\_LAYOUT)。

計算 XBOX Series X|S 紋理配置時，這三個配置結構的下列成員值得注意。

### XG\_RESOURCE\_LAYOUT

* SizeBytes 是影像的總大小，包括所有平面。
* BaseAlignmentBytes 是影像的基底對齊。每個平面可能有自己的對齊值，但 XG\_RESOURCE\_LAYOUT::BaseAlignmentBytes 是所有平面中的最大對齊值。
* MipLevels 是影像中存在的 mip 層級數目。在大多數情況下，如果是 mipmap 紋理，只有其中一個平面可以包含多個 mip 層級。

### XG\_PLANE\_LAYOUT

* Usage 是平面的用途：主要表面 (樣本或紋素) 為 "DEFAULT"、"DEPTH" 或 "STENCIL"；壓縮中繼資料為 "HTILE"、"FMASK"、"CMASK" 或 "DELTA\_COLOR\_COMPRESSION"；雙平面多媒體格式影像則為 "LUMA" 或 "CHROMA"。
* SizeBytes 是平面的總大小，包括所有陣列切片。
* SliceSizeBytes 是單一 mip 鏈結的總大小，構成一個陣列切片。
* StandardMipCount 是不屬於 mip 尾端的 mip 層級數目。
* MipTailMipCount 是屬於 mip 尾端的 mip 層級數目。

### XG\_MIPLEVEL\_LAYOUT

* SizeBytes 是此 mip 層級的大小。
* OffsetBytes 是此 mip 層級相對於 mip 鏈結基底的位移。
* 對於 2D (陣列) 紋理，Slice2DSizeBytes 等同於 SizeBytes；對於 3D 紋理，則為一個深度切片的大小。
* PaddedWidthElements、PaddedHeightElements 和 PaddedDepthOrArraySize 是 mip 層級的維度 (以紋素元素為單位)，已填補至所選混排模式對應的區塊大小。請記住，BC 壓縮區塊是一個紋素元素，大小為 4 × 4 紋素。
* 如果此 mip 層級屬於 mip 尾端，IsMipTail 為 1；如果不屬於 mip 尾端，則為 0。

#### XG\_MIPLEVEL\_LAYOUT 的 XBOX Series X|S 硬體注意事項

* 在具有多個切片的陣列紋理中，SizeBytes 只會反映一個切片的大小。對於體積紋理，SizeBytes 會反映所有「深度切片」的大小，但這些切片在記憶體中可能不連續。
* OffsetBytes 會反映此 mip 層級在第一個陣列切片中的位移。若要計算此 mip 層級在切片 1-n 中的位移，請將 OffsetBytes 加上平面配置的 SliceSizeBytes 乘以切片索引。
* 請注意，對於體積紋理，每個 mip 層級在記憶體中可能不連續。若要判斷體積 mip 層級所佔用的記憶體範圍，請使用 PlaneLayout.SliceSizeBytes \* DepthSliceIndex + MipLayout.OffsetBytes 作為每個範圍的起始位移，並使用 StartOffset + MipLayout.SliceSizeBytes \* MipLayout.SliceDepthElements 作為每個範圍的結束位移。mip 層級的深度切片數目為 mip 深度除以 MipLayout.SliceDepthElements。

## 混排模式

與 XBOX One 類似，每個影像描述元、轉譯目標和深度/樣板目標都可以從 32 種不同的紋理並排模式中選取一種，在 XBOX Series X|S 上稱為\_混排模式\_，在 XBOX One 上則稱為\_並排模式\_。不過，相似之處僅止於此，因為在 XBOX Series X|S 上建構每種模式的方式與 XBOX One 相當不同。除了線性配置之外，XBOX Series X|S 與 XBOX One 之間沒有共通的紋理並排模式。

XBOX Series X|S GPU 上的每種混排模式都有數個屬性，這些屬性會在混排模式的名稱中標示。

1. **區塊大小：** 並排模式的基本單位大小，以位元組數目指定。區塊大小可以是 256 位元組、4 KB、64 KB、「可變」(512 KB 或 128 KB) 或線性。
2. **微並排模式：** 區塊內紋素元素的配置。微並排模式包括 "S"、"D"、"R" 和 "Z"。對於某些元素大小，S 與 D 模式是相同的。線性混排模式沒有微並排。
3. **管線 XOR 模式：** 紋素定址是否在 XOR 混排作業中使用管線位元。XOR 設定包括 "X"、"T" 以及無管線 XOR。所有具有管線 XOR ("X" 或 "T") 的混排模式，其混排模式都特定於硬體組態 (Anaconda 與 Lockhart)，因此離線進行混排時必須特別小心。"X" 管線混排會跨越多個區塊，而 "T" 管線混排則限制在每個區塊內。

下表說明 32 種不同的混排模式、它們目前的用途，以及是否允許轉譯目標檢視、深度樣板檢視和體積紋理。

| 名稱 | 附註 | 允許 RTV | 允許 DSV | 允許 3D |
| - | - | - | - | - |
| LINEAR | 線性配置，用於所有 1D 紋理 | 非 MSAA | 否 | 是 |
| 256B\_S | | 非 MSAA | 否 | 否 |
| 256B\_D | | 非 MSAA | 否 | 否 |
| 256B\_R | | 否 | 否 | 否 |
| 4KB\_Z | | 否 | 否 | 否 |
| 4KB\_S | 一般紋理的預設混排模式 | 非 MSAA | 否 | 是 |
| 4KB\_D | | 非 MSAA | 否 | 否 |
| 4KB\_R | | 否 | 否 | 否 |
| 64KB\_Z | | 否 | 否 | 否 |
| 64KB\_S | | 非 MSAA | 否 | 是 |
| 64KB\_D | 並排資源的預設混排模式 | 非 MSAA | 否 | 否 |
| 64KB\_R | | 否 | 否 | 否 |
| VAR\_Z | | 否 | 否 | 否 |
| VAR\_S | | 否 | 否 | 否 |
| VAR\_D | | 否 | 否 | 否 |
| VAR\_R | | 否 | 否 | 否 |
| 64KB\_Z\_T | | 否 | 否 | 否 |
| 64KB\_S\_T | | 非 MSAA | 否 | 是 |
| 64KB\_D\_T | | 非 MSAA | 否 | 否 |
| 64KB\_R\_T | | 否 | 否 | 否 |
| 4KB\_Z\_X | | 否 | 否 | 否 |
| 4KB\_S\_X | | 否 | 否 | 是 |
| 4KB\_D\_X | | 否 | 否 | 否 |
| 4KB\_R\_X | | 否 | 否 | 否 |
| 64KB\_Z\_X | 深度樣板目標與 FMASK 壓縮中繼資料表面的必要混排模式 | 非 MSAA | 是 | 是 |
| 64KB\_S\_X | | 非 MSAA | 否 | 是 |
| 64KB\_D\_X | | 非 MSAA | 否 | 是 |
| 64KB\_R\_X | 轉譯目標與 UAV 的預設混排模式；MSAA 轉譯目標的必要模式 | 是 | 否 | 是 |
| VAR\_Z\_X | | 否 | 否 | 否 |
| VAR\_S\_X | | 否 | 否 | 否 |
| VAR\_D\_X | | 否 | 否 | 否 |
| VAR\_R\_X | | 是 | 否 | 否 |

## 其他混排模式注意事項

XBOX Series X|S GPU 以位元組為單位定義區塊大小，而非以紋素元素為單位。這表示當紋素元素的位元組大小增加時，每個區塊中的紋素就會減少。這與 XBOX One GPU 不同，後者將主要區塊大小定為 8 × 8 個紋素元素，與元素大小無關。

由於區塊大小以位元組為單位保持固定，因此混排模式 "S"、"D"、"R" 和 "Z" 對於不同的元素大小會有不同的解讀方式。此外，2D 紋理與 3D 紋理的混排模式完全不同。

## 另請參閱

[圖形](/zh-TW/build/core-features/graphics/gc-graphics-toc)


## Related topics

- [NDA 主題目錄 - Microsoft Learn 線上連結](/zh-TW/nda/nda-topic-directory.md)
- [XBOX Texture Compressor (XBTC) 工具参考](/zh-CN/build/core-features/graphics/newfeatures/xbtc/index.md)
- [XBOX Series X|S 總覽](/zh-TW/paths/series-xs/overview.md)
- [Windows PC 上的 Fiddler](/zh-CN/build/console-features/networking/tools/fiddler-pc.md)
- [XBOX 遊戲開發文件](/zh-TW/index.md)
