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

# Vue d'ensemble de l'API du pipeline de nuanceurs de maillage

> Vue d'ensemble de l'API du pipeline de nuanceurs de maillage

## Création de l'état de pipeline

Pour des exemples d'utilisation de ces API, consultez [Utilisation du pipeline de nuanceurs de maillage](/fr-CA/build/core-features/graphics/newfeatures/ms/ms-usage).

L'exemple de code suivant présente les API de prise en charge de la fonctionnalité de nuanceurs de maillage.

```c theme={null}
typedef  enum D3D12_FEATURE {
    ...
    D3D12_FEATURE_D3D12_OPTIONS7,
} D3D12_FEATURE;

typedef enum D3D12_MESH_SHADER_TIER
{
    D3D12_MESH_SHADER_TIER_NOT_SUPPORTED,
    D3D12_MESH_SHADER_TIER_1
} D3D12_MESH_SHADER_TIER;

typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS7 
{
    _Out_  D3D12_MESH_SHADER_TIER       MeshShaderTier;
    _Out_  D3D12_SAMPLER_FEEDBACK_TIER  SamplerFeedbackTier;
} D3D12_FEATURE_DATA_D3D12_OPTIONS7;

HRESULT ID3D12Device::CheckFeatureSupport(
  D3D12_FEATURE Feature,
  void*         pFeatureSupportData,
  UINT          FeatureSupportDataSize
);
```

L'exemple de code suivant présente les spécifications de l'état du pipeline de nuanceurs de maillage, qui utilisent les API de création de flux de pipeline.

```
typedef struct D3D12_PIPELINE_STATE_STREAM_DESC {
    _In_  SIZE_T SizeInBytes;
    _In_  void*  pPipelineStateSubobjectStream;
} D3D12_PIPELINE_STATE_STREAM_DESC;

HRESULT ID3D12Device2::CreatePipelineState(
    const D3D12_PIPELINE_STATE_STREAM_DESC* pDesc,
    REFIID                                  riid,
    void**                                  ppPipelineState
);
```

L'exemple de code suivant présente les API Direct3D 12 permettant de répartir les groupes de threads du pipeline de nuanceurs de maillage vers le GPU.

```c theme={null}
void ID3D12GraphicsCommandList::DispatchMesh(uint groupCountX, uint groupCountY, uint groupCountZ);

typedef enum D3D12_INDIRECT_ARGUMENT_TYPE {
    ...
    D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_MESH
} D3D12_INDIRECT_ARGUMENT_TYPE;

typedef struct D3D12_INDIRECT_ARGUMENT_DESC
{
    D3D12_INDIRECT_ARGUMENT_TYPE Type; // = D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_MESH
    union 
    {
        ...
        struct 
        {
            UINT ThreadGroupCountX;
            UINT ThreadGroupCountY;
            UINT ThreadGroupCountZ;
        } D3D12_DISPATCH_MESH_ARGUMENTS;
    }
} D3D12_INDIRECT_ARGUMENT_DESC;

void ID3D12GraphicsCommandList::ExecuteIndirect(
    ID3D12CommandSignature* pCommandSignature,
    UINT                    MaxCommandCount,
    ID3D12Resource*         pArgumentBuffer,
    UINT64                  ArgumentBufferOffset,
    ID3D12Resource*         pCountBuffer,
    UINT64                  CountBufferOffset
);
```

L'exemple de code suivant présente la création et la répartition d'un pipeline de nuanceurs de maillage.

```
struct MyPsoStreamDesc
{
    CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE        pRootSignature;
    CD3DX12_PIPELINE_STATE_STREAM_AS                    AS;
    CD3DX12_PIPELINE_STATE_STREAM_MS                    MS;
    CD3DX12_PIPELINE_STATE_STREAM_PS                    PS;
    CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC            BlendState;
    CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1        DepthStencilState;
    CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER            RasterizerState;
    CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTFormats;
    CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT  DepthFormat;
    CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC           SampleDesc;
    CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK           SampleMask;
}

void CreatePipelineState(ID3D12Device* d3dDevice)
{
    // Check Mesh Shader pipeline feature support.
    D3D12_FEATURE_DATA_D3D12_OPTIONS7 options;
    device->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS7, &options, sizeof(options));

    if (options.MeshShaderTier == D3D12_MESH_SHADER_TIER_NOT_SUPPORTED)
        throw std::exception("Mesh Shaders not supported!"); 

    // Set up PSO Stream Desc.
    MyPsoStreamDesc psoDesc;
    psoDesc.AS = D3D12_SHADER_BYTECODE{ ... };
    psoDesc.MS = D3D12_SHADER_BYTECODE{ ... };
    ...

    // Create Pipeline State Object with stream desc.
    D3D12_PIPELINE_STATE_STREAM_DESC desc = { sizeof(psoDesc), &psoDesc };
    device->CreatePipelineState(&desc, IID_PPV_ARGS(&msPso));
}

void Draw(ID3D12GraphicsCommandList* commandList)
{
    // Set up pipeline and root signature parameters.
    commandList->SetPipelineState(&msPso);
    commandList->SetGraphicsRootSignature(&msRootSig);
    ...

    // Dispatch threadgroups.
    commandList->DispatchMesh(someGroupCount, 1, 1);
}
```

## Intrinsèques des nuanceurs de maillage

### Attributs

| Nom | Description |
| - | - |
| **OutputTopology** | Spécifie le type de primitive exporté par le nuanceur, soit « line », soit « triangle ». Doit correspondre au type du tableau de sortie partagé *indices* (*uint2* pour les lignes ou *uint3* pour les triangles). |

### Fonctions

| | |
| - | - |
| Nom | **SetMeshOutputCounts** |
| Paramètres | *uint numVerts* *uint numPrims* |
| Description | Déclare le nombre de sommets et de primitives que le groupe de threads doit exporter; les nombres sont nuls par défaut si la fonction n'est pas appelée. Ils doivent être inférieurs ou égaux aux longueurs des tableaux de sortie partagés; la fonction doit être appelée à partir d'un contexte d'exécution non divergent et suppose des valeurs de paramètres constantes pour le groupe de threads. Doit précéder toutes les écritures dans les tableaux de sortie. |

### Paramètres

| Nom | Modificateur | Description |
| - | - | - |
| *payload* | in | Données de charge utile de type personnalisé, jusqu'à 16 Ko, transmises par un nuanceur d'amplification à son groupe d'instances de nuanceurs de maillage. Ces données sont partagées entre toutes les instances du groupe. Non applicable si aucune étape de nuanceur d'amplification ne précède le nuanceur de maillage dans le pipeline. |
| Tableau *vertices* | out | Le tableau de sortie partagé dans lequel exporter les attributs des sommets. Définit le type d'attribut de sommet personnalisé et, par la longueur du tableau, le nombre maximal de sommets exportés. |
| Tableau *indices* | out | Le tableau de sortie partagé dans lequel exporter les index des primitives. Définit le type de primitive à exporter et, par la longueur du tableau, le nombre maximal de primitives exportées. Ces index de primitives indexent directement le tableau *vertices*. Le type doit être uint2 pour les lignes ou uint3 pour les triangles. |
| Tableau *primitives* | out | Le tableau de sortie partagé dans lequel exporter les attributs des primitives. Définit le type d'attribut de primitive défini par l'utilisateur. Sa longueur doit être égale à celle du tableau *indices*. |

## Intrinsèques des nuanceurs d'amplification

### Fonctions

| | |
| - | - |
| Nom | **DispatchMesh** |
| Paramètres | *uint groupsX* *uint groupsY* *uint groupsZ* *groupshared payload\_t payload* |
| Description | Répartit un groupe de groupes de threads de nuanceurs de maillage avec des données de charge utile facultatives. Peut être appelée au plus une fois à partir d'un chemin de code non divergent. Aucun groupe de threads n'est réparti si la fonction n'est pas appelée. Les groupes de threads de nuanceurs de maillage subséquents ont leurs GroupID et DispatchThreadID localisés à leur propre groupe. |

## Voir aussi

[Vue d'ensemble du pipeline de nuanceurs de maillage](/fr-CA/build/core-features/graphics/newfeatures/ms/ms-overview)

[Pourquoi les nuanceurs de maillage?](/fr-CA/build/core-features/graphics/newfeatures/ms/ms-why)

[Utilisation du pipeline de nuanceurs de maillage](/fr-CA/build/core-features/graphics/newfeatures/ms/ms-usage)


## Related topics

- [Vue d'ensemble du pipeline de nuanceurs de maillage](/fr-CA/build/core-features/graphics/newfeatures/ms/ms-overview.md)
- [Vue d'ensemble de l'API C Services - PFEventPipeline.h](/fr-CA/services/playfab/api-references/c/pfeventpipeline/pfeventpipeline_members.md)
- [Vue d'ensemble de l'API XGameSave](/fr-CA/build/core-features/common/game-save/xgamesave.md)
- [Vue d'ensemble des systèmes de commerce du GDK](/fr-CA/publishing/xstore-commerce/xstore-overview.md)
- [Vue d'ensemble du guide de portage Steam](/fr-CA/build/steam-porting-guide/overview.md)
