> ## 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) qui sont 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, en plus d'offrir la possibilité d'éviter d'écrire sur le disque des données redondantes ou dupliquées.

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

## 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 demeurer valide pendant toute la durée de vie de l'objet retourné. 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-CA/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 \*\*

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

### Valeur de retour

Type : HRESULT

Si la fonction réussit, elle retourne **S\_OK**. Sinon, elle retourne 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 d'un ancien 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 elle-même et retourne S\_FALSE si la bibliothèque aurait été créée.

De plus, la fonctionnalité nécessite un pilote à jour, et toute tentative de l'utiliser avec d'anciens pilotes retournera DXGI\_ERROR\_UNSUPPORTED.

## Remarques

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

* Ajouter des objets d'état de pipeline (PSO) à un objet de bibliothèque existant (consultez [StorePipeline](/fr-CA/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_storepipeline_public)).
* Sérialiser une bibliothèque de PSO dans un bloc de mémoire contigu pour le stockage sur disque (consultez [Serialize](/fr-CA/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_serialize_public)).
* Désérialiser une bibliothèque de PSO à partir d'un stockage persistant (cette opération est gérée par **CreatePipelineLibrary**).
* Récupérer des PSO individuels de la bibliothèque (consultez [LoadComputePipeline](/fr-CA/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadcomputepipeline_public) et [LoadGraphicsPipeline](/fr-CA/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 à compter les références que de l'interface retournée consiste à tirer parti de [ID3D12Object::SetPrivateDataInterface](/fr-CA/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 au besoin, à une exception près : plusieurs threads qui chargent le même PSO (au moyen de [**LoadComputePipeline**](/fr-CA/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadcomputepipeline_public), [**LoadGraphicsPipeline**](/fr-CA/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadgraphicspipeline_public) ou [**LoadPipeline**](/fr-CA/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary1/methods/id3d12pipelinelibrary1_loadpipeline_public)) doivent se synchroniser eux-mêmes, car cette action peut modifier l'état de ce pipeline au sein de 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-CA/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-CA/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/id3d12pipelinelibrary_public.md)
- [StorePipeline](/fr-CA/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_storepipeline_public.md)
- [LoadComputePipeline](/fr-CA/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadcomputepipeline_public.md)
- [LoadGraphicsPipeline](/fr-CA/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadgraphicspipeline_public.md)
- [GetSerializedSize](/fr-CA/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_getserializedsize_public.md)
