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

> Crea una biblioteca de canalizaciones almacenada en caché.

Crea una biblioteca de canalizaciones almacenada en caché. Para los objetos de estado de canalización (PSO) que se espera que compartan datos entre sí, agruparlos en una biblioteca antes de serializarlos significa que hay menos sobrecarga debido a los metadatos, así como la oportunidad de evitar que se escriban en disco datos redundantes o duplicados.

Puede consultar la compatibilidad con **ID3D12PipelineLibrary** con [**ID3D12Device::CheckFeatureSupport**](/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_checkfeaturesupport_public), con [**D3D12\_FEATURE\_SHADER\_CACHE**](/reference/graphics/d3d12/enums/d3d12_feature_public) y [**D3D12\_FEATURE\_DATA\_SHADER\_CACHE**](/reference/graphics/d3d12/structs/d3d12_feature_data_shader_cache_public). Si el miembro *Flags* de [**D3D12\_FEATURE\_DATA\_SHADER\_CACHE**](/reference/graphics/d3d12/structs/d3d12_feature_data_shader_cache_public) contiene la marca [**D3D12\_SHADER\_CACHE\_SUPPORT\_LIBRARY**](/reference/graphics/d3d12/enums/d3d12_shader_cache_support_flags_public), la interfaz **ID3D12PipelineLibrary** es compatible. De lo contrario, siempre se devolverá **DXGI\_ERROR\_NOT\_SUPPORTED** cuando se llame a esta función.

## Sintaxis

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

### Parámetros

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

Si el blob de biblioteca de entrada está vacío, el contenido inicial de la biblioteca está vacío. Si el blob de biblioteca de entrada no está vacío, se valida su integridad, se analiza y se almacena el puntero. El puntero proporcionado como entrada a este método debe permanecer válido durante la vigencia del objeto devuelto. Por motivos de eficiencia, los datos no se copian.

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

Especifica la longitud de *pLibraryBlob* en bytes.

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

Especifica un REFIID único para el objeto [ID3D12PipelineLibrary](/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/id3d12pipelinelibrary_public). Normalmente, establezca este parámetro y el siguiente con la macro `IID_PPV_ARGS(&Library)`, donde **Library** es el nombre del objeto.

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

Devuelve un puntero a la biblioteca creada.

### Valor devuelto

Tipo: HRESULT

Si la función se ejecuta correctamente, devuelve **S\_OK**. De lo contrario, devuelve un [código de error](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), incluido **E\_INVALIDARG** si el blob está dañado o no se reconoce, **D3D12\_ERROR\_DRIVER\_VERSION\_MISMATCH** si los datos proporcionados proceden de un controlador o entorno de ejecución antiguo, y **D3D12\_ERROR\_ADAPTER\_NOT\_FOUND** si los datos proceden de hardware diferente.

Si pasa `nullptr` para *pPipelineLibrary*, el entorno de ejecución sigue realizando la validación del blob, pero evita crear la biblioteca real y devuelve S\_FALSE si la biblioteca se habría creado.

Además, la característica requiere un controlador actualizado e intentar usarla en controladores antiguos devolverá DXGI\_ERROR\_UNSUPPORTED.

## Comentarios

Una biblioteca de canalizaciones permite las siguientes operaciones.

* Agregar objetos de estado de canalización (PSO) a un objeto de biblioteca existente (consulte [StorePipeline](/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_storepipeline_public)).
* Serializar una biblioteca de PSO en un bloque de memoria contiguo para su almacenamiento en disco (consulte [Serialize](/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_serialize_public)).
* Deserializar una biblioteca de PSO desde el almacenamiento persistente (esto lo controla **CreatePipelineLibrary**).
* Recuperar PSO individuales de la biblioteca (consulte [LoadComputePipeline](/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadcomputepipeline_public) y [LoadGraphicsPipeline](/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadgraphicspipeline_public)).

En ningún momento del ciclo de vida de una biblioteca de canalizaciones hay duplicación entre PSO con subcomponentes idénticos.

Una solución recomendada para administrar la duración del puntero proporcionado, teniendo que contar referencias solamente de la interfaz devuelta, es aprovechar [ID3D12Object::SetPrivateDataInterface](/reference/graphics/d3d12/interfaces/id3d12object/methods/id3d12object_setprivatedatainterface_public) y usar un objeto que implemente **IUnknown** y libere la memoria cuando el recuento de referencias llegue a 0.

### Seguridad para subprocesos

La biblioteca de canalizaciones es segura para subprocesos y se sincronizará internamente según sea necesario, con una excepción: varios subprocesos que carguen el mismo PSO (mediante [**LoadComputePipeline**](/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadcomputepipeline_public), [**LoadGraphicsPipeline**](/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadgraphicspipeline_public) o [**LoadPipeline**](/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary1/methods/id3d12pipelinelibrary1_loadpipeline_public)) deben sincronizarse entre sí, ya que esta acción puede modificar el estado de esa canalización dentro de la biblioteca de una manera que no es segura para subprocesos.

## Ejemplos

Consulte el [ejemplo de caché de estado de canalización de Direct3D 12](https://github.com/microsoft/DirectX-Graphics-Samples/tree/master/Samples/Desktop/D3D12PipelineStateCache).

## Requisitos

**Encabezado:** d3d12\_xs.h o d3d12\_x.h<br />**Biblioteca:** d3d12\_xs.lib o d3d12\_x.lib<br />**Plataformas compatibles**: consolas XBOX Series y familia XBOX One

## Consulte también

* [ID3D12Device1](/reference/graphics/d3d12/interfaces/id3d12device1/id3d12device1_public)
* [Ejemplo de caché de estado de canalización de Direct3D 12](https://github.com/microsoft/DirectX-Graphics-Samples/tree/master/Samples/Desktop/D3D12PipelineStateCache)


## Related topics

- [ID3D12PipelineLibrary](/es/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/id3d12pipelinelibrary_public.md)
- [StorePipeline](/es/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_storepipeline_public.md)
- [LoadComputePipeline](/es/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadcomputepipeline_public.md)
- [LoadGraphicsPipeline](/es/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadgraphicspipeline_public.md)
- [GetSerializedSize](/es/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_getserializedsize_public.md)
