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

# API Direct3D 12 d'ombrage à taux variable

> API Direct3D 12 d'ombrage à taux variable

Cette rubrique a été créée à partir de la [spécification Variable Rate Shading](https://github.com/microsoft/DirectX-Specs/blob/master/d3d/VariableRateShading.md) et mise à jour pour le matériel XBOX Series X|S.

## API

La section suivante décrit la façon dont l'ombrage à taux variable (VRS) est accessible aux applications au moyen de Direct3D 12.

### Interrogation des capacités

```text theme={null}
enum D3D12_SHADING_RATE_TIER
{
    D3D12_SHADING_RATE_TIER_NOT_SUPPORTED,
    D3D12_SHADING_RATE_TIER_1,
    D3D12_SHADING_RATE_TIER_2,
};

struct D3D12_FEATURE_DATA_D3D12_OPTIONS6
{
    BOOL AdditionalShadingRatesSupported; 
    BOOL PerPrimitiveShadingRateIndependentOfViewportUse;
    D3D12_SHADING_RATE_TIER ShadingRateTier;
    UINT ShadingRateImageTileSize;
};

enum D3D12_FEATURE
{
    // ...
    D3D12_FEATURE_D3D12_OPTIONS6
};
```

Pour vérifier la prise en charge du niveau 1, une application peut, par exemple :

```text theme={null}
// Check that Tier 1 is supported.
D3D12_FEATURE_DATA_D3D12_OPTIONS6 options;
return 
    SUCCEEDED(m_device->CheckFeatureSupport(
        D3D12_FEATURE_D3D12_OPTIONS6, 
        &options, 
        sizeof(options))) && 
    options.ShadingRateTier == D3D12_SHADING_RATE_TIER_1;
```

### Taux d'ombrage

```text theme={null}
enum D3D12_SHADING_RATE
{
    D3D12_SHADING_RATE_1X1 = 0x0, // No change to shading rate.
    D3D12_SHADING_RATE_1X2 = 0x1, // Reduces vertical resolution 2x.
    D3D12_SHADING_RATE_2X1 = 0x4, // Reduces horizontal resolution 2x.
    D3D12_SHADING_RATE_2X2 = 0x5, // Reduces both axes by 2x.
    D3D12_SHADING_RATE_2X4 = 0x6, // Reduce horizontal resolution 2x, vertical by 4x.
    D3D12_SHADING_RATE_4X2 = 0x9, // Reduce horizontal resolution 4x, vertical by 2x.
    D3D12_SHADING_RATE_4X4 = 0xA, // Reduces both axes by 4x.
};
```

Les valeurs sont organisées de façon à ce que les taux d'ombrage soient facilement décomposables selon deux axes, les valeurs de chaque axe étant représentées de façon compacte dans un espace logarithmique.

```text theme={null}
enum D3D12_AXIS_SHADING_RATE
{
    D3D12_AXIS_SHADING_RATE_1X = 0x0,
    D3D12_AXIS_SHADING_RATE_2X = 0x1, 
    D3D12_AXIS_SHADING_RATE_4X = 0x2
};
```

Ce qui permet, par exemple :

```text theme={null}
#define D3D12_MAKE_COARSE_SHADING_RATE(x,y) ((x) << 2 | (y))
D3D12_MAKE_COARSE_SHADING_RATE(
    D3D12_AXIS_SHADING_RATE_2X, 
    D3D12_AXIS_SHADING_RATE_1X)
```

Par commodité, ceci peut être utilisé pour décomposer et comprendre SV\_ShadingRate :

```text theme={null}
#define D3D12_GET_COARSE_SHADING_RATE_X_AXIS(x) ((x) >> 2 )
#define D3D12_GET_COARSE_SHADING_RATE_Y_AXIS(y) ((y) & 3 )
```

#### Remarques

Cette interprétation des données vise à décrire le masque d'espace écran, qui peut être manipulé par les nuanceurs. Cependant, rien n'empêche d'avoir une définition cohérente des tailles de pixels grossiers à utiliser partout, y compris lors de la définition du taux d'ombrage au niveau de la commande.

### Définition du taux d'ombrage et des combinateurs au niveau de la commande

Le taux d'ombrage et, facultativement, les combinateurs sont spécifiés au moyen d'une méthode de liste de commandes.

```text theme={null}
enum D3D12_SHADING_RATE_COMBINER
{
    D3D12_SHADING_RATE_COMBINER_PASSTHROUGH,
    D3D12_SHADING_RATE_COMBINER_OVERRIDE,
    D3D12_SHADING_RATE_COMBINER_MIN,
    D3D12_SHADING_RATE_COMBINER_MAX,
    D3D12_SHADING_RATE_COMBINER_SUM,
};

class ID3D12GraphicsCommandList5: public ID3D12GraphicsCommandList4
{
public:
    // ...
    virtual void RSSetShadingRate(
        D3D12_SHADING_RATE baseShadingRate, 
        _In_reads_opt_(2) D3D12_SHADING_RATE_COMBINER* combiners) = 0;
};
```

### Préparation de l'image d'espace écran

L'état de ressource en lecture seule désignant une image de taux d'ombrage utilisable est défini comme suit.

```text theme={null}
enum D3D12_RESOURCE_STATES
{
    // ...
    D3D12_RESOURCE_STATE_SHADING_RATE_SOURCE
};
```

### Définition de l'image d'espace écran

L'image d'espace écran est spécifiée au moyen d'une méthode de liste de commandes.

```text theme={null}
class ID3D12GraphicsCommandList3: public ID3D12GraphicsCommandList2
{
public:
    // ...
    virtual void RSSetShadingRateImage(ID3D12Resource* image) = 0;
};
```

Par exemple :

```text theme={null}
m_commandList->RSSetShadingRateImage(screenSpaceImage);
```

<Info>
  Sur la XBOX Series X|S, vous devez faire passer l'image de taux d'ombrage à un état lisible avant de la définir (dans la chronologie du GPU).
</Info>

### Interrogation de la taille des tuiles

La taille des tuiles est obtenue au moyen d'une capacité.

```text theme={null}
D3D12_FEATURE_DATA_D3D12_OPTIONS6 options;
return 
    SUCCEEDED(m_device->CheckFeatureSupport(
        D3D12_FEATURE_D3D12_OPTIONS6, 
        &options, 
        sizeof(options))) && 
    UINT tileSize = options.ShadingRateImageTileSize;
```

Une seule dimension est récupérée, car les dimensions horizontale et verticale sont toujours identiques. Si la capacité du système est D3D12\_SHADING\_RATE\_TIER\_NOT\_SUPPORTED, la taille de tuile retournée est 0.

## Voir aussi

[Vue d'ensemble de l'ombrage à taux variable](/fr-CA/build/core-features/graphics/newfeatures/vrs/vrs-overview)

[Conception de la fonctionnalité d'ombrage à taux variable](/fr-CA/build/core-features/graphics/newfeatures/vrs/vrs-feature)

[Pourquoi l'ombrage à taux variable?](/fr-CA/build/core-features/graphics/newfeatures/vrs/why-vrs)


## Related topics

- [Répertoire des rubriques NDA : liens actifs vers Microsoft Learn](/fr-CA/nda/nda-topic-directory.md)
- [Variable Rate Shading (VRS) on XBOX Series X|S](/build/core-features/graphics/newfeatures/vrs/index.md)
- [Direct3D 12 programming guide](/build/gdk-and-engines/guides/directx-12-programming-guide.md)
- [Guide de programmation Direct3D 12](/fr/build/gdk-and-engines/guides/directx-12-programming-guide.md)
- [Direct3D 12 编程指南](/zh-CN/build/gdk-and-engines/guides/directx-12-programming-guide.md)
