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

# Información general de la API de la canalización de sombreadores de malla

> Información general de la API de la canalización de sombreadores de malla

## Creación del estado de canalización

Para ver ejemplos de uso de estas API, consulte [Uso de la canalización de sombreadores de malla](/build/core-features/graphics/newfeatures/ms/ms-usage).

En el ejemplo de código siguiente se muestran las API de compatibilidad con la característica de sombreadores de malla.

```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
);
```

En el ejemplo de código siguiente se muestran las especificaciones del estado de canalización de sombreadores de malla, que usan las API de creación de secuencias de canalización.

```
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
);
```

En el ejemplo de código siguiente se muestran las API de Direct3D 12 para distribuir grupos de subprocesos de la canalización de sombreadores de malla a la 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
);
```

En el ejemplo de código siguiente se muestra la creación y distribución de una canalización de sombreadores de malla.

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

## Funciones intrínsecas del sombreador de malla

### Atributos

| Nombre             | Descripción                                                                                                                                                                                                      |
| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **OutputTopology** | Especifica el tipo de primitiva exportada por el sombreador, ya sea "line" o "triangle". Debe coincidir con el tipo de la matriz de salida compartida *indices* (*uint2* para líneas o *uint3* para triángulos). |

### Funciones

|             |                                                                                                                                                                                                                                                                                                                                                                                                                              |
| ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Nombre      | **SetMeshOutputCounts**                                                                                                                                                                                                                                                                                                                                                                                                      |
| Parámetros  | *uint numVerts* *uint numPrims*                                                                                                                                                                                                                                                                                                                                                                                              |
| Descripción | Declara el número de vértices y primitivas que exportará el grupo de subprocesos; los recuentos son cero de forma predeterminada si no se llama. Debe ser menor o igual que las longitudes de las matrices de salida compartidas, llamarse desde un contexto de ejecución no divergente y supone valores de parámetro constantes en el grupo de subprocesos. Debe preceder a todas las escrituras en las matrices de salida. |

### Parámetros

| Nombre              | Modificador | Descripción                                                                                                                                                                                                                                                                                                                                     |
| ------------------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| *payload*           | in          | Datos de carga con tipo personalizado de hasta 16 KB pasados de un sombreador de amplificación a su clúster de instancias de sombreador de malla. Estos datos se comparten entre todas las instancias del clúster. No aplicable si ninguna fase de sombreador de amplificación precede al sombreador de malla en la canalización.               |
| Matriz *vertices*   | out         | Matriz de salida compartida en la que se exportan los atributos de vértice. Define el tipo de atributo de vértice personalizado y el número máximo de vértices exportados según la longitud de la matriz.                                                                                                                                       |
| Matriz *indices*    | out         | Matriz de salida compartida en la que se exportan los índices de primitivas. Define el tipo de primitiva que se va a exportar y el número máximo de primitivas exportadas según la longitud de la matriz. Estos índices de primitivas indexan directamente en la matriz *vertices*. El tipo debe ser uint2 para líneas o uint3 para triángulos. |
| Matriz *primitives* | out         | Matriz de salida compartida en la que se exportan los atributos de primitivas. Define el tipo de atributo de primitiva definido por el usuario. Su longitud debe ser igual a la de la matriz *indices*.                                                                                                                                         |

## Funciones intrínsecas del sombreador de amplificación

### Funciones

|             |                                                                                                                                                                                                                                                                                                                                                                                  |
| ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Nombre      | **DispatchMesh**                                                                                                                                                                                                                                                                                                                                                                 |
| Parámetros  | *uint groupsX* *uint groupsY* *uint groupsZ* *groupshared payload\_t payload*                                                                                                                                                                                                                                                                                                    |
| Descripción | Distribuye un clúster de grupos de subprocesos de sombreador de malla con datos de carga opcionales. Se puede llamar como máximo una vez desde una ruta de código no divergente. Si no se llama, se distribuyen cero grupos de subprocesos. Los grupos de subprocesos de sombreador de malla posteriores tienen sus GroupID y DispatchThreadID localizados en su propio clúster. |

## Consulte también

[Información general de la canalización de sombreadores de malla](/build/core-features/graphics/newfeatures/ms/ms-overview)

[¿Por qué sombreadores de malla?](/build/core-features/graphics/newfeatures/ms/ms-why)

[Uso de la canalización de sombreadores de malla](/build/core-features/graphics/newfeatures/ms/ms-usage)


## Related topics

- [Información general de la canalización de sombreadores de malla](/es/build/core-features/graphics/newfeatures/ms/ms-overview.md)
- [¿Por qué sombreadores de malla?](/es/build/core-features/graphics/newfeatures/ms/ms-why.md)
- [Tutorial de la canalización de eventos](/es/services/playfab/sdks/c/event-pipeline/eventpipeline-tutorial.md)
- [Información general de la API C de Services - PFEventPipeline.h](/es/services/playfab/api-references/c/pfeventpipeline/pfeventpipeline_members.md)
- [Información general de la API de iluminación](/es/build/core-features/common/lighting/gc-lighting-toc.md)
