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

# Especificação do arquivo de pacote do XBOX Texture Compressor (XBTC)

> Especificação do arquivo de pacote do XBOX Texture Compressor (XBTC)

O formato de arquivo de pacote é definido em `XBTC.h`, mas é explicado em detalhes neste tópico.

<Note>
  O formato do arquivo de pacote está sujeito a alterações e inclui um número de versão incremental. Quando invocado sem opções, o [XBTC.exe](/pt-BR/build/core-features/graphics/newfeatures/xbtc/xbtc) exibe o número da versão atual do arquivo de pacote. A tentativa de carregar um arquivo de pacote com uma versão diferente usando `XBTC.lib` falha.
</Note>

Cada arquivo de pacote começa com um cabeçalho, iniciado pelo código FOURCC "XBTC" seguido de um número de versão de 1 byte. (A versão "2" está documentada aqui.) O cabeçalho tem a seguinte aparência.

```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.
    };
```

O formato de arquivo de pacote oferece suporte a várias texturas, mas o `XBTC.exe` atualmente não oferece a capacidade de combinar arquivos de pacote nem de acrescentar texturas a um arquivo de pacote. O campo de deslocamento de dados representa o tamanho do TOC. Ele também representa a distância de busca do início do arquivo de pacote até os dados do fluxo compactado. No caso (futuro) em que o TOC for armazenado em um arquivo separado, o deslocamento de dados pode ser 0, indicando que os fluxos compactados começam no início do próprio arquivo. Quando contidos em um único arquivo, `DataOffset` + `DataSize` deve ser igual ao tamanho em bytes do arquivo de pacote.

Após o cabeçalho do arquivo de pacote, haverá uma série de descrições de textura. Esse número é igual a `TextureCount`. Após as descrições de textura, haverá o mesmo número de deslocamentos de busca de fluxo, representando onde começam os dados de cada textura.

```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` é uma representação compacta de um `D3D12_RESOURCE_DESC`, de modo que a textura possa ser descrita no momento do carregamento. Esses detalhes podem ser usados para calcular tamanhos de memória, deslocamentos e alinhamentos. O deslocamento e o índice são usados para determinar quais fluxos compactados são mapeados para uma textura e o deslocamento de busca de 40 bits até o início dos dados do fluxo. Isso permite arquivos de pacote de 1 TB e até 16M fluxos individuais. O número total de fluxos é indicado pelo `NextIndex` da última textura. Após as informações por textura, vêm as informações detalhadas por fluxo.

```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.
    };
```

Os codecs de compactação usados no fluxo podem ser inferidos a partir dos vários tamanhos contidos nas informações do fluxo. Se `CompressedSize` for menor que `InflatedSize`, `Deflate` foi usado. Se `InflatedSize` for menor que `UncompressedSize`, `BCPack` foi usado. Ambos ou nenhum podem ser usados.

Após a matriz `StreamInfo`, pode ser inserido preenchimento para alinhar os dados do fluxo compactado a 16 bytes. Os dados do fluxo compactado compõem o restante do arquivo.

## Consulte também

[Visão geral do XBOX Texture Compressor](/pt-BR/build/core-features/graphics/newfeatures/xbtc/xbox-texture-compressor)

[XBTC.exe](/pt-BR/build/core-features/graphics/newfeatures/xbtc/xbtc)

[Visões gerais dos recursos gráficos do XBOX Series X|S](/pt-BR/build/core-features/graphics/graphics-newfeatures-toc)


## Related topics

- [Referência da ferramenta XBOX Texture Compressor (XBTC)](/pt-BR/build/core-features/graphics/newfeatures/xbtc/index.md)
- [Pacotes](/pt-BR/publishing/game-publishing/concepts/game-package-management.md)
- [Diretório de tópicos NDA: links ativos do Microsoft Learn](/pt-BR/nda/nda-topic-directory.md)
- [Índice de tópicos sob NDA para desenvolvimento de console com o XBOX GDK](/pt-BR/nda/nda-overview.md)
- [Elemento do MicrosoftGame.config - Executable](/pt-BR/reference/system/microsoftgameconfig/elements/microsoftgameconfig-element-executable.md)
