> ## 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 Mesh Shader

> Vue d'ensemble de l'API du pipeline Mesh Shader

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

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

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

```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 de pipeline Mesh Shader, 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 distribuer des groupes de threads du pipeline Mesh Shader au 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 illustre la création et la distribution d'un pipeline Mesh Shader.

```
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 Mesh Shaders

### 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 à exporter par le groupe de threads ; les nombres sont nuls par défaut si la fonction n'est pas appelée. Doit être inférieur ou égal à la longueur des tableaux de sortie partagés, doit être appelée depuis 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 Amplification Shader à son cluster d'instances de Mesh Shader. Ces données sont partagées entre toutes les instances du cluster. Non applicable si aucune étape Amplification Shader ne précède le Mesh Shader dans le pipeline. |
| Tableau *vertices* | out | Tableau de sortie partagé dans lequel exporter les attributs de 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 | Tableau de sortie partagé dans lequel exporter les indices des primitives. Définit le type de primitive à exporter et, par la longueur du tableau, le nombre maximal de primitives exportées. Ces indices de primitives indexent directement le tableau *vertices*. Le type doit être uint2 pour les lignes ou uint3 pour les triangles. |
| Tableau *primitives* | out | 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 Amplification Shaders

### Fonctions

| | |
| - | - |
| Nom | **DispatchMesh** |
| Paramètres | *uint groupsX* *uint groupsY* *uint groupsZ* *groupshared payload\_t payload* |
| Description | Distribue un cluster de groupes de threads de Mesh Shader avec des données de charge utile facultatives. Peut être appelée au plus une fois depuis un chemin de code non divergent. Aucun groupe de threads n'est distribué si la fonction n'est pas appelée. Les groupes de threads de Mesh Shader suivants ont leurs GroupID et DispatchThreadID localisés à leur propre cluster. |

## Voir aussi

[Vue d'ensemble du pipeline Mesh Shader](/fr/build/core-features/graphics/newfeatures/ms/ms-overview)

[Pourquoi les Mesh Shaders ?](/fr/build/core-features/graphics/newfeatures/ms/ms-why)

[Utilisation du pipeline Mesh Shader](/fr/build/core-features/graphics/newfeatures/ms/ms-usage)


## Related topics

- [Vue d'ensemble du pipeline Mesh Shader](/fr/build/core-features/graphics/newfeatures/ms/ms-overview.md)
- [Vue d'ensemble de l'API C Services - PFEventPipeline.h](/fr/services/playfab/api-references/c/pfeventpipeline/pfeventpipeline_members.md)
- [Vue d'ensemble de l'API XGameSave](/fr/build/core-features/common/game-save/xgamesave.md)
- [Vue d'ensemble de l'API Multiplayer Manager](/fr/services/xbox-services/multiplayer/mpm/concepts/live-multiplayer-manager-api-overview.md)
- [Vue d'ensemble de l'API XBOX Achievements Manager](/fr/services/xbox-services/player-data/achievements/achievements-manager/live-achievements-manager-overview.md)
