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

# Formats de brassage DirectStorage

> Formats de brassage DirectStorage

À partir du GDK de mars 2024, plusieurs options supplémentaires sont offertes pour le paramètre de mode de réorganisation (swizzle) dans l'API DirectStorage XBOX.  Ces options sont conçues pour offrir des économies supplémentaires de taille compressée lorsqu'elles sont utilisées conjointement avec une compression basée sur BCPACK ou ZLib.

Chacun de ces formats de brassage (shuffle) décrit une réorganisation des données stockées sur disque qui peut améliorer la taille compressée lorsqu'elle est utilisée avec le format BCn prévu.  L'option de mode de réorganisation de DirectStorage réorganise les données au moment de leur écriture en mémoire afin de les préparer à une correction finale.  Un nuanceur de calcul (compute shader) effectue une correction finale des données pour rétablir l'ordre correct des octets.

Le code de référence fourni ci-dessous montre comment préparer le format sur disque des données.  Un exemple de nuanceur capable d'effectuer la « correction » finale des données peut être fourni sur demande. Veuillez communiquer avec votre représentant Microsoft si vous souhaitez obtenir une copie de ces nuanceurs.

<Note>
  Bien que la fonctionnalité décrite ci-dessous fonctionne avec toutes les données qui respectent les exigences d'alignement, elle est destinée à du contenu réorganisé hors ligne et s'avère plus efficace lorsqu'elle est associée à un tel contenu.
</Note>

## Contenu

* [DSTORAGE\_SWIZZLE\_MODE\_4K\_4K\_8K](#DSTORAGE_SWIZZLE_MODE_4K_4K_8K)
* [DSTORAGE\_SWIZZLE\_MODE\_4K\_12K\_4K\_4K\_8K](#DSTORAGE_SWIZZLE_MODE_4K_12K_4K_4K_8K)
* [DSTORAGE\_SWIZZLE\_MODE\_4K\_4K\_24K](#DSTORAGE_SWIZZLE_MODE_4K_4K_24K)
* [DSTORAGE\_SWIZZLE\_MODE\_4K\_12K\_4K\_12K](#DSTORAGE_SWIZZLE_MODE_4K_12K_4K_12K)

<a id="DSTORAGE_SWIZZLE_MODE_4K_4K_8K" />

## DSTORAGE\_SWIZZLE\_MODE\_4K\_4K\_8K

Ce mode est destiné à être utilisé avec du contenu encodé en BC1.  La taille du contenu non compressé doit être un multiple de 16KB.  Ce mode suppose que les données sources sont regroupées par flux (c.-à-d. extrémités et index), ce qui améliore la compressibilité.  Les données sources doivent également être compressées au moyen de Zlib ou de BCPack.  Lorsque DSTORAGE\_SWIZZLE\_MODE\_4K\_4K\_8K est fourni pour l'option DSTORAGE\_REQUEST\_OPTIONS::SwizzleMode, DirectStorage réorganise le contenu non compressé en mémoire en groupes entrelacés d'une taille de 16KB, à partir des données correspondantes du contenu regroupé.  Chaque groupe de 16KB contient toutes les données du contenu BC1 d'origine, bien qu'elles soient toujours regroupées.  Le contenu d'origine peut être entièrement reconstruit sur place à partir du groupe de 16KB au moyen d'un nuanceur de calcul (compute shader).

<img src="https://mintcdn.com/microsoft-4404708b/CwRBzaXvHw9zaPoe/images/gdk/features/console/DSTORAGE_SWIZZLE_MODE_4K_4K_8K.png?fit=max&auto=format&n=CwRBzaXvHw9zaPoe&q=85&s=4606a1ab5e5e6125e4b694f615c808fb" alt="Diagramme des transformations DSTORAGE_SWIZZLE_MODE_4K_4K_8K" width="1069" height="340" data-path="images/gdk/features/console/DSTORAGE_SWIZZLE_MODE_4K_4K_8K.png" />

```C++ theme={null}
// This algorithm will rearrange a source buffer into the disk layout that works 
// with the DSTORAGE_SWIZZLE_MODE_4K_4K_8K swizzle mode.  The comments refer
// to an assumption that the source buffer is BC1 formatted data.
auto shuffle_224 = [](uint8_t* dest, const uint8_t* src, size_t size) {
    uint8_t* d1 = dest;            // e0
    uint8_t* d2 = dest + size / 4; // e1
    uint8_t* d3 = dest + size / 2; // indexes

    do {
        *d1++ = *src++; *d1++ = *src++; // e0 (2B)
        *d2++ = *src++; *d2++ = *src++; // e1 (2B)
        *d3++ = *src++; *d3++ = *src++; // ind (4B)
        *d3++ = *src++; *d3++ = *src++;
    } while (size -= 8);
};
```

<a id="DSTORAGE_SWIZZLE_MODE_4K_12K_4K_4K_8K" />

## DSTORAGE\_SWIZZLE\_MODE\_4K\_12K\_4K\_4K\_8K

Ce mode est destiné à être utilisé avec du contenu encodé en BC3.  La taille du contenu non compressé doit être un multiple de 32KB.  Ce mode suppose que les données sources sont regroupées par flux (c.-à-d. extrémités et index), ce qui améliore la compressibilité.  Les données sources doivent également être compressées au moyen de Zlib ou de BCPack.  Lorsque DSTORAGE\_SWIZZLE\_MODE\_4K\_12K\_4K\_4K\_8K est fourni pour l'option DSTORAGE\_REQUEST\_OPTIONS::SwizzleMode, DirectStorage réorganise le contenu non compressé en mémoire en groupes entrelacés d'une taille de 32KB, à partir des données correspondantes du contenu regroupé.  Chaque groupe de 32KB contient toutes les données du contenu BC3 d'origine, bien qu'elles soient toujours regroupées.  Le contenu d'origine peut être entièrement reconstruit sur place à partir du groupe de 32KB au moyen d'un nuanceur de calcul (compute shader).

<img src="https://mintcdn.com/microsoft-4404708b/CwRBzaXvHw9zaPoe/images/gdk/features/console/DSTORAGE_SWIZZLE_MODE_4K_12K_4K_4K_8K.png?fit=max&auto=format&n=CwRBzaXvHw9zaPoe&q=85&s=efdec5bc6b9b346b4d3827fa2bab6243" alt="Diagramme des transformations DSTORAGE_SWIZZLE_MODE_4K_12K_4K_4K_8K" width="1079" height="384" data-path="images/gdk/features/console/DSTORAGE_SWIZZLE_MODE_4K_12K_4K_4K_8K.png" />

```C++ theme={null}
// This algorithm will rearrange a source buffer into the disk layout that works 
// with the DSTORAGE_SWIZZLE_MODE_4K_12K_4K_4K_8K swizzle mode.  The comments refer
// to an assumption that the source buffer is BC3 formatted data.
//
// NOTE: A0/A1 are interleaved 2K/2K in each 4KB range of that stream
auto shuffle_26_224 = [](uint8_t* dest, const uint8_t* src, size_t size) {
    uint8_t* d1 = dest, *d2 = dest + 2048;      // a0, a1 interleaved 2k/2k
    uint8_t* d3 = dest + size / 8;              // aind
    uint8_t* d4 = dest + size / 2;              // e0
    uint8_t *d5 = dest + size / 2 + size / 8;   // e1
    uint8_t* d6 = dest + size / 2 + size / 4;   // eind

    do {
        *d1++ = *src++;                                 // a0 (1B)
        *d2++ = *src++;                                 // a1 (1B)
        *d3++ = *src++; *d3++ = *src++; *d3++ = *src++; // aind (6B)
        *d3++ = *src++; *d3++ = *src++; *d3++ = *src++;
        *d4++ = *src++; *d4++ = *src++;                 // e0 (2B)
        *d5++ = *src++; *d5++ = *src++;                 // e1 (2B)
        *d6++ = *src++; *d6++ = *src++;                 // eind (4B)
        *d6++ = *src++; *d6++ = *src++;

        // every 2K tiles, we need to advance the interleave
        if ((size-16) % (2048*16) == 0)
        {
            d1 += 2048;
            d2 += 2048;
        }
    } while (size -= 16);
};
```

<a id="DSTORAGE_SWIZZLE_MODE_4K_4K_24K" />

## DSTORAGE\_SWIZZLE\_MODE\_4K\_4K\_24K

Ce mode est destiné à être utilisé avec du contenu encodé en BC4.  La taille du contenu non compressé doit être un multiple de 32KB.  Ce mode suppose que les données sources sont regroupées par flux (c.-à-d. extrémités et index), ce qui améliore la compressibilité.  Les données sources doivent également être compressées au moyen de Zlib ou de BCPack.  Lorsque DSTORAGE\_SWIZZLE\_MODE\_4K\_4K\_24K est fourni pour l'option DSTORAGE\_REQUEST\_OPTIONS::SwizzleMode, DirectStorage réorganise le contenu non compressé en mémoire en groupes entrelacés d'une taille de 32KB, à partir des données correspondantes du contenu regroupé.  Chaque groupe de 32KB contient toutes les données du contenu BC4 d'origine, bien qu'elles soient toujours regroupées.  Le contenu d'origine peut être entièrement reconstruit sur place à partir du groupe de 32KB au moyen d'un nuanceur de calcul (compute shader).

<img src="https://mintcdn.com/microsoft-4404708b/CwRBzaXvHw9zaPoe/images/gdk/features/console/DSTORAGE_SWIZZLE_MODE_4K_4K_24K.png?fit=max&auto=format&n=CwRBzaXvHw9zaPoe&q=85&s=8239b0cdffc7aeb42e213cd3fb74b96f" alt="Diagramme des transformations DSTORAGE_SWIZZLE_MODE_4K_4K_24K" width="1065" height="351" data-path="images/gdk/features/console/DSTORAGE_SWIZZLE_MODE_4K_4K_24K.png" />

```C++ theme={null}
// This algorithm will rearrange a source buffer into the disk layout that works 
// with the DSTORAGE_SWIZZLE_MODE_4K_4K_24K swizzle mode.  The comments refer
// to an assumption that the source buffer is BC4 formatted data.
auto shuffle_116 = [](uint8_t* dest, const uint8_t* src, size_t size) {
    uint8_t* d1 = dest, *d2 = dest + size / 8;          // r0, r1
    uint8_t* d3 = dest + size / 4;                      // ind

    do {
        *d1++ = *src++;                                 // r0 (1B)
        *d2++ = *src++;                                 // r1 (1B)
        *d3++ = *src++; *d3++ = *src++; *d3++ = *src++; // ind (6B)
        *d3++ = *src++; *d3++ = *src++; *d3++ = *src++;
    } while (size -= 8);
};
```

<a id="DSTORAGE_SWIZZLE_MODE_4K_12K_4K_12K" />

## DSTORAGE\_SWIZZLE\_MODE\_4K\_12K\_4K\_12K

Ce mode est destiné à être utilisé avec du contenu encodé en BC5.  La taille du contenu non compressé doit être un multiple de 32KB.  Ce mode suppose que les données sources sont regroupées par flux (c.-à-d. extrémités et index), ce qui améliore la compressibilité.  Les données sources doivent également être compressées au moyen de Zlib ou de BCPack.  Lorsque DSTORAGE\_SWIZZLE\_MODE\_4K\_12K\_4K\_12K est fourni pour l'option DSTORAGE\_REQUEST\_OPTIONS::SwizzleMode, DirectStorage réorganise le contenu non compressé en mémoire en groupes entrelacés d'une taille de 32KB, à partir des données correspondantes du contenu regroupé.  Chaque groupe de 32KB contient toutes les données du contenu BC5 d'origine, bien qu'elles soient toujours regroupées.  Le contenu d'origine peut être entièrement reconstruit sur place à partir du groupe de 32KB au moyen d'un nuanceur de calcul (compute shader).

<img src="https://mintcdn.com/microsoft-4404708b/CwRBzaXvHw9zaPoe/images/gdk/features/console/DSTORAGE_SWIZZLE_MODE_4K_12K_4K_12K.png?fit=max&auto=format&n=CwRBzaXvHw9zaPoe&q=85&s=9e172d069d0ef63e8924b71e5a26d975" alt="Diagramme des transformations DSTORAGE_SWIZZLE_MODE_4K_12K_4K_12K" width="1111" height="421" data-path="images/gdk/features/console/DSTORAGE_SWIZZLE_MODE_4K_12K_4K_12K.png" />

```C++ theme={null}
// This algorithm will rearrange a source buffer into the disk layout that works 
// with the DSTORAGE_SWIZZLE_MODE_4K_12K_4K_12K swizzle mode.  The comments refer
// to an assumption that the source buffer is BC5 formatted data.
//
// NOTE: R0/R1 and G0/G1 are interleaved 2K/2K in each 4KB range of those streams
auto shuffle_26_26 = [](uint8_t* dest, const uint8_t* src, size_t size) {
    uint8_t* d1 = dest, *d2 = dest + 2048;                       // r0, r1 interleaved 2K/2K
    uint8_t* d3 = dest + size / 8;                               // rind
    uint8_t* d4 = dest + size / 2, *d5 = dest + size / 2 + 2048; // g0, g1 interleaved 2K/2K
    uint8_t* d6 = dest + size / 2 + size / 8;                    // gind

    do {
        *d1++ = *src++;                                 // r0 (1B)
        *d2++ = *src++;                                 // r1 (1B)
        *d3++ = *src++; *d3++ = *src++; *d3++ = *src++; // rind (6B)
        *d3++ = *src++; *d3++ = *src++; *d3++ = *src++;
        *d4++ = *src++;                                 // g0 (1B)
        *d5++ = *src++;                                 // g1 (1B)
        *d6++ = *src++; *d6++ = *src++; *d6++ = *src++; // gind (6B)
        *d6++ = *src++; *d6++ = *src++; *d6++ = *src++;

        // every 2K tiles, we need to advance the interleave
        if ((size - 16) % (2048 * 16) == 0)
        {
            d1 += 2048;
            d2 += 2048;
            d4 += 2048;
            d5 += 2048;
        }
    } while (size -= 16);
};
```

## Voir aussi

[DirectStorage](/fr-CA/build/console-features/storage/directstorage-toc)

[Utilisation et détails internes de DirectStorage](/fr-CA/build/console-features/storage/directstorage/directstorage-white-paper)

[Analyser les performances de DirectStorage](/fr-CA/tools/tools-console/pix/pix-directstorage)

[Liste des exemples du GDK](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/development-downloads/gdk-samples-list)


## Related topics

- [Información general de DirectStorage](/es/build/console-features/storage/directstorage/directstorage-overview.md)
- [DirectStorage](/build/console-features/storage/directstorage-toc.md)
- [DirectStorage Overview](/build/console-features/storage/directstorage/directstorage-overview.md)
- [DStorage](/es/reference/system/dstorage/dstorage_members.md)
- [DirectStorage 개요](/ko/build/console-features/storage/directstorage/directstorage-overview.md)
