> ## 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.

# Spécification du fichier d'archive XBOX Texture Compressor (XBTC)

> Spécification du fichier d'archive XBOX Texture Compressor (XBTC)

Le format de fichier d'archive est défini dans `XBTC.h`, mais il est expliqué en détail dans cette rubrique.

<Note>
  Le format d'archive est susceptible de changer et comprend un numéro de version évolutif. Lorsqu'il est appelé sans options, [XBTC.exe](/fr-CA/build/core-features/graphics/newfeatures/xbtc/xbtc) affiche le numéro de version actuel de son format d'archive. Toute tentative de chargement d'une archive d'une version différente à l'aide de `XBTC.lib` échoue.
</Note>

Chaque archive commence par un en-tête, débutant par le code FOURCC « XBTC » suivi d'un numéro de version de 1 octet. (La version « 2 » est documentée ici.) L'en-tête se présente comme suit.

```c++ theme={null}
    struct XBTC_ARCHIVE_HEADER
    {
        uint32_t    Identifier;             // File identifier; "XBTC" as char[].
        uint32_t    Version         : 8;    // Archive format version.
        uint32_t    TextureCount    : 24;   // Number of individual textures in archive.
        uint64_t    DataOffset      : 24;   // Header + Index size in bytes.
        uint64_t    DataSize        : 40;   // Size of all data streams in bytes.
    };
```

Le format d'archive prend en charge plusieurs textures, mais `XBTC.exe` ne permet pas actuellement de combiner des archives ni d'ajouter des textures à une archive. Le champ de décalage des données représente la taille de la TOC. Il représente également la distance de recherche entre le début de l'archive et les données des flux compressés. Dans le cas (futur) où la TOC serait stockée dans un fichier distinct, le décalage des données peut être 0, ce qui indique que les flux compressés commencent au début de leur propre fichier. Lorsque tout est contenu dans un seul fichier, `DataOffset` + `DataSize` doit être égal à la taille en octets de l'archive.

Après l'en-tête de l'archive se trouvent un certain nombre de descriptions de textures. Ce nombre est égal à `TextureCount`. Les descriptions de textures sont suivies du même nombre de décalages de recherche de flux, qui indiquent où commencent les données de chaque texture.

```c++ theme={null}
    enum XBTC_TEX_DIMENSION
    {
        XBTC_TEX_DIMENSION_1D,              // 1D Texture or Buffer.
        XBTC_TEX_DIMENSION_2D,              // 2D Texture or Texture Array.
        XBTC_TEX_DIMENSION_3D,              // 3D (Volume) Texture.
        XBTC_TEX_DIMENSION_CUBE             // Cubemap or Cubemap Array.
    };

    enum XBTC_TILING_MODE
    {
        XBTC_TILING_SCARLETT_LINEAR,        // Texel elements are arranged in row major order, mips are 256-byte-aligned.
        XBTC_TILING_SCARLETT_256B,          // Tiles are 256 bytes (NO mip tail).
        XBTC_TILING_SCARLETT_4KB,           // Tiles are 4 KB (4 KB mip tail).
        XBTC_TILING_SCARLETT_64KB,          // Tiles are 64 KB (64 KB mip tail).
        XBTC_TILING_SCARLETT_64KB_PRT,      // Tiles are 64 KB, compressed individually for partial residency.
        XBTC_TILING_STANDARD_SWIZZLE        // D3D Standard Swizzle (64 KB tiles).
    };

    struct XBTC_TEXTURE_INFO
    {
        uint64_t    Format          : 8;    // DXGI_FORMAT
        uint64_t    Dimension       : 2;    // XBTC_TEX_DIMENSION
        uint64_t    Width           : 14;   // Width in pixels of mip 0 (minus 1).
        uint64_t    Height          : 14;   // Height in pixels of mip 0 (minus 1).
        uint64_t    Depth           : 11;   // Depth or array count (minus 1).
        uint64_t    TileMode        : 3;    // XBTC_TILING_MODE
        uint64_t    MipCount        : 4;    // Total number of LODs.
        uint64_t    MipStreams      : 4;    // Number of streamable LODs (excluding base).
        uint64_t    Reserved        : 4;
    };

    struct XBTC_OFFSET_AND_INDEX
    {
        uint64_t    BaseOffset      : 40;   // Base offset into data chunk.
        uint64_t    NextIndex       : 24;   // Base stream index of *next* resource.
    };
```

`XBTC_TEXTURE_INFO` est une représentation compacte d'un `D3D12_RESOURCE_DESC` qui permet de décrire la texture au moment du chargement. Ces détails peuvent servir à calculer les tailles, les décalages et les alignements en mémoire. Le décalage et l'index servent à déterminer quels flux compressés correspondent à une texture ainsi que le décalage de recherche de 40 bits jusqu'au début des données du flux. Cela permet des archives de 1 To et jusqu'à 16 millions de flux individuels. Le nombre total de flux est indiqué par le `NextIndex` de la dernière texture. Les informations par texture sont suivies d'informations détaillées par flux.

```c++ theme={null}
    struct XBTC_STREAM_INFO
    {
        uint32_t RelativeOffset             // Stream start offset (relative to base).
        uint32_t CompressedSize;            // Length of compressed stream.
        uint32_t InflatedSize;              // Size of stream before Deflate.
        uint32_t UncompressedSize;          // Uncompressed stream size.
    };
```

Les codecs de compression utilisés sur le flux peuvent être déduits des différentes tailles contenues dans les informations du flux. Si `CompressedSize` est inférieur à `InflatedSize`, `Deflate` a été utilisé. Si `InflatedSize` est inférieur à `UncompressedSize`, `BCPack` a été utilisé. Les deux peuvent être utilisés, ou aucun.

Après le tableau `StreamInfo`, du remplissage peut être inséré pour aligner les données des flux compressés sur 16 octets. Les données des flux compressés constituent le reste du fichier.

## Voir aussi

[Vue d'ensemble de XBOX Texture Compressor](/fr-CA/build/core-features/graphics/newfeatures/xbtc/xbox-texture-compressor)

[XBTC.exe](/fr-CA/build/core-features/graphics/newfeatures/xbtc/xbtc)

[Vues d'ensemble des fonctionnalités graphiques de la XBOX Series X|S](/fr-CA/build/core-features/graphics/graphics-newfeatures-toc)


## Related topics

- [Répertoire des rubriques NDA : liens actifs vers Microsoft Learn](/fr/nda/nda-topic-directory.md)
- [XBOX Texture Compressor (XBTC) tool reference](/build/core-features/graphics/newfeatures/xbtc/index.md)
- [XBOX Texture Compressor (XBTC) 도구 참고서](/ko/build/core-features/graphics/newfeatures/xbtc/index.md)
- [XBOX Texture Compressor (XBTC) 工具参考](/zh-CN/build/core-features/graphics/newfeatures/xbtc/index.md)
- [Referencia de la herramienta XBOX Texture Compressor (XBTC)](/es/build/core-features/graphics/newfeatures/xbtc/index.md)
