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

# CreatePipelineLibrary

> Crée une bibliothèque de pipelines mise en cache.

Crée une bibliothèque de pipelines mise en cache. Pour les objets d'état de pipeline (PSO) censés partager des données, les regrouper dans une bibliothèque avant de les sérialiser réduit la surcharge liée aux métadonnées et permet d'éviter l'écriture de données redondantes ou dupliquées sur le disque.

Vous pouvez vérifier la prise en charge de **ID3D12PipelineLibrary** avec [**ID3D12Device::CheckFeatureSupport**](/fr/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_checkfeaturesupport_public), avec [**D3D12\_FEATURE\_SHADER\_CACHE**](/fr/reference/graphics/d3d12/enums/d3d12_feature_public) et [**D3D12\_FEATURE\_DATA\_SHADER\_CACHE**](/fr/reference/graphics/d3d12/structs/d3d12_feature_data_shader_cache_public). Si le membre *Flags* de [**D3D12\_FEATURE\_DATA\_SHADER\_CACHE**](/fr/reference/graphics/d3d12/structs/d3d12_feature_data_shader_cache_public) contient l'indicateur [**D3D12\_SHADER\_CACHE\_SUPPORT\_LIBRARY**](/fr/reference/graphics/d3d12/enums/d3d12_shader_cache_support_flags_public), l'interface **ID3D12PipelineLibrary** est prise en charge. Sinon, **DXGI\_ERROR\_NOT\_SUPPORTED** sera toujours renvoyé lors de l'appel de cette fonction.

## Syntaxe

```cpp theme={null}
HRESULT CreatePipelineLibrary(
    const void  pLibraryBlob,
    SIZE_T BlobLength,
    const IID & riid,
    void  ppPipelineLibrary
)
```

### Paramètres

*pLibraryBlob*<br />Type : const void \*

Si le blob de bibliothèque d'entrée est vide, le contenu initial de la bibliothèque est vide. Si le blob de bibliothèque d'entrée n'est pas vide, son intégrité est validée, il est analysé et le pointeur est stocké. Le pointeur fourni en entrée à cette méthode doit rester valide pendant toute la durée de vie de l'objet renvoyé. Pour des raisons d'efficacité, les données ne sont pas copiées.

*BlobLength*<br />Type : SIZE\_T

Spécifie la longueur de *pLibraryBlob* en octets.

*riid*<br />Type : const IID &

Spécifie un REFIID unique pour l'objet [ID3D12PipelineLibrary](/fr/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/id3d12pipelinelibrary_public). En général, définissez ce paramètre et le suivant avec la macro `IID_PPV_ARGS(&Library)`, où **Library** est le nom de l'objet.

*ppPipelineLibrary*<br />Type : void \*\*

Renvoie un pointeur vers la bibliothèque créée.

### Valeur renvoyée

Type : HRESULT

Si la fonction réussit, elle renvoie **S\_OK**. Sinon, elle renvoie un [code d'erreur](https://learn.microsoft.com/en-us/windows/win32/com/com-error-codes-10) [**HRESULT**](https://learn.microsoft.com/en-us/windows/win32/com/structure-of-com-error-codes), notamment **E\_INVALIDARG** si le blob est endommagé ou non reconnu, **D3D12\_ERROR\_DRIVER\_VERSION\_MISMATCH** si les données fournies proviennent d'un ancien pilote ou runtime, et **D3D12\_ERROR\_ADAPTER\_NOT\_FOUND** si les données proviennent d'un matériel différent.

Si vous passez `nullptr` pour *pPipelineLibrary*, le runtime effectue tout de même la validation du blob, mais évite de créer la bibliothèque proprement dite et renvoie S\_FALSE si la bibliothèque aurait été créée.

En outre, la fonctionnalité nécessite un pilote mis à jour, et toute tentative de l'utiliser avec d'anciens pilotes renverra DXGI\_ERROR\_UNSUPPORTED.

## Remarques

Une bibliothèque de pipelines permet les opérations suivantes.

* Ajout d'objets d'état de pipeline (PSO) à un objet bibliothèque existant (consultez [StorePipeline](/fr/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_storepipeline_public)).
* Sérialisation d'une bibliothèque de PSO dans un bloc de mémoire contigu pour le stockage sur disque (consultez [Serialize](/fr/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_serialize_public)).
* Désérialisation d'une bibliothèque de PSO à partir d'un stockage persistant (gérée par **CreatePipelineLibrary**).
* Récupération de PSO individuels à partir de la bibliothèque (consultez [LoadComputePipeline](/fr/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadcomputepipeline_public) et [LoadGraphicsPipeline](/fr/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadgraphicspipeline_public)).

À aucun moment du cycle de vie d'une bibliothèque de pipelines, il n'y a de duplication entre des PSO ayant des sous-composants identiques.

Une solution recommandée pour gérer la durée de vie du pointeur fourni tout en n'ayant à gérer que le décompte de références de l'interface renvoyée consiste à tirer parti de [ID3D12Object::SetPrivateDataInterface](/fr/reference/graphics/d3d12/interfaces/id3d12object/methods/id3d12object_setprivatedatainterface_public) et à utiliser un objet qui implémente **IUnknown** et libère la mémoire lorsque le décompte de références atteint 0.

### Sécurité des threads

La bibliothèque de pipelines peut être utilisée de manière thread-safe et se synchronise en interne selon les besoins, à une exception près : plusieurs threads chargeant le même PSO (via [**LoadComputePipeline**](/fr/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadcomputepipeline_public), [**LoadGraphicsPipeline**](/fr/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadgraphicspipeline_public) ou [**LoadPipeline**](/fr/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary1/methods/id3d12pipelinelibrary1_loadpipeline_public)) doivent se synchroniser eux-mêmes, car cette opération peut modifier l'état de ce pipeline dans la bibliothèque d'une manière non thread-safe.

## Exemples

Consultez l'[exemple de cache d'état de pipeline Direct3D 12](https://github.com/microsoft/DirectX-Graphics-Samples/tree/master/Samples/Desktop/D3D12PipelineStateCache).

## Configuration requise

**En-tête :** d3d12\_xs.h ou d3d12\_x.h<br />**Bibliothèque :** d3d12\_xs.lib ou d3d12\_x.lib<br />**Plateformes prises en charge** : consoles XBOX Series et famille XBOX One

## Voir aussi

* [ID3D12Device1](/fr/reference/graphics/d3d12/interfaces/id3d12device1/id3d12device1_public)
* [Exemple de cache d'état de pipeline Direct3D 12](https://github.com/microsoft/DirectX-Graphics-Samples/tree/master/Samples/Desktop/D3D12PipelineStateCache)


## Related topics

- [ID3D12PipelineLibrary](/fr/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/id3d12pipelinelibrary_public.md)
- [StorePipeline](/fr/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_storepipeline_public.md)
- [LoadGraphicsPipeline](/fr/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadgraphicspipeline_public.md)
- [LoadComputePipeline](/fr/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadcomputepipeline_public.md)
- [Serialize](/fr/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_serialize_public.md)
