> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# CreatePipelineLibrary

> Cria uma biblioteca de pipelines em cache.

Cria uma biblioteca de pipelines em cache. Para objetos de estado de pipeline (PSOs) que devem compartilhar dados entre si, agrupá-los em uma biblioteca antes de serializá-los significa menos sobrecarga devido a metadados, além da oportunidade de evitar que dados redundantes ou duplicados sejam gravados em disco.

Você pode consultar o suporte a **ID3D12PipelineLibrary** com [**ID3D12Device::CheckFeatureSupport**](https://docs.xbox.com/pt-BR/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_checkfeaturesupport_public.md), com [**D3D12\_FEATURE\_SHADER\_CACHE**](https://docs.xbox.com/pt-BR/reference/graphics/d3d12/enums/d3d12_feature_public.md) e [**D3D12\_FEATURE\_DATA\_SHADER\_CACHE**](https://docs.xbox.com/pt-BR/reference/graphics/d3d12/structs/d3d12_feature_data_shader_cache_public.md). Se o membro *Flags* de [**D3D12\_FEATURE\_DATA\_SHADER\_CACHE**](https://docs.xbox.com/pt-BR/reference/graphics/d3d12/structs/d3d12_feature_data_shader_cache_public.md) contiver o sinalizador [**D3D12\_SHADER\_CACHE\_SUPPORT\_LIBRARY**](https://docs.xbox.com/pt-BR/reference/graphics/d3d12/enums/d3d12_shader_cache_support_flags_public.md), a interface **ID3D12PipelineLibrary** terá suporte. Caso contrário, **DXGI\_ERROR\_NOT\_SUPPORTED** sempre será retornado quando esta função for chamada.

## Sintaxe

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

### Parâmetros

*pLibraryBlob*\
Tipo: const void \*

Se o blob da biblioteca de entrada estiver vazio, o conteúdo inicial da biblioteca será vazio. Se o blob da biblioteca de entrada não estiver vazio, ele será validado quanto à integridade, analisado e o ponteiro será armazenado. O ponteiro fornecido como entrada para este método deve permanecer válido durante todo o tempo de vida do objeto retornado. Por motivos de eficiência, os dados não são copiados.

*BlobLength*\
Tipo: SIZE\_T

Especifica o comprimento de *pLibraryBlob* em bytes.

*riid*\
Tipo: const IID &

Especifica um REFIID exclusivo para o objeto [ID3D12PipelineLibrary](https://docs.xbox.com/pt-BR/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/id3d12pipelinelibrary_public.md). Normalmente, defina este parâmetro e o seguinte com a macro `IID_PPV_ARGS(&Library)`, em que **Library** é o nome do objeto.

*ppPipelineLibrary*\
Tipo: void \*\*

Retorna um ponteiro para a biblioteca criada.

### Valor retornado

Tipo: HRESULT

Se a função for bem-sucedida, ela retornará **S\_OK**. Caso contrário, retornará um [código de erro](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), incluindo **E\_INVALIDARG** se o blob estiver corrompido ou não for reconhecido, **D3D12\_ERROR\_DRIVER\_VERSION\_MISMATCH** se os dados fornecidos vierem de um driver ou runtime antigo e **D3D12\_ERROR\_ADAPTER\_NOT\_FOUND** se os dados vierem de um hardware diferente.

Se você passar `nullptr` para *pPipelineLibrary*, o runtime ainda executará a validação do blob, mas evitará criar a biblioteca real e retornará S\_FALSE se a biblioteca tivesse sido criada.

Além disso, o recurso requer um driver atualizado, e tentar usá-lo em drivers antigos retornará DXGI\_ERROR\_UNSUPPORTED.

## Comentários

Uma biblioteca de pipelines permite as seguintes operações.

* Adicionar objetos de estado de pipeline (PSOs) a um objeto de biblioteca existente (consulte [StorePipeline](https://docs.xbox.com/pt-BR/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_storepipeline_public.md)).
* Serializar uma biblioteca de PSOs em um bloco contíguo de memória para armazenamento em disco (consulte [Serialize](https://docs.xbox.com/pt-BR/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_serialize_public.md)).
* Desserializar uma biblioteca de PSOs a partir de armazenamento persistente (isso é feito por **CreatePipelineLibrary**).
* Recuperar PSOs individuais da biblioteca (consulte [LoadComputePipeline](https://docs.xbox.com/pt-BR/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadcomputepipeline_public.md) e [LoadGraphicsPipeline](https://docs.xbox.com/pt-BR/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadgraphicspipeline_public.md)).

Em nenhum momento do ciclo de vida de uma biblioteca de pipelines há duplicação entre PSOs com subcomponentes idênticos.

Uma solução recomendada para gerenciar o tempo de vida do ponteiro fornecido, tendo que fazer a contagem de referências apenas da interface retornada, é aproveitar [ID3D12Object::SetPrivateDataInterface](https://docs.xbox.com/pt-BR/reference/graphics/d3d12/interfaces/id3d12object/methods/id3d12object_setprivatedatainterface_public.md) e usar um objeto que implemente **IUnknown** e libere a memória quando a contagem de referências chegar a 0.

### Acesso thread-safe

A biblioteca de pipelines é thread-safe e fará a sincronização interna conforme necessário, com uma exceção: vários threads carregando o mesmo PSO (por meio de [**LoadComputePipeline**](https://docs.xbox.com/pt-BR/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadcomputepipeline_public.md), [**LoadGraphicsPipeline**](https://docs.xbox.com/pt-BR/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadgraphicspipeline_public.md) ou [**LoadPipeline**](https://docs.xbox.com/pt-BR/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary1/methods/id3d12pipelinelibrary1_loadpipeline_public.md)) devem se sincronizar por conta própria, pois esse ato pode modificar o estado desse pipeline na biblioteca de uma maneira que não é thread-safe.

## Exemplos

Confira o [exemplo de cache de estado de pipeline do Direct3D 12](https://github.com/microsoft/DirectX-Graphics-Samples/tree/master/Samples/Desktop/D3D12PipelineStateCache).

## Requisitos

**Cabeçalho:** d3d12\_xs.h ou d3d12\_x.h\
**Biblioteca:** d3d12\_xs.lib ou d3d12\_x.lib\
**Plataformas com suporte**: consoles XBOX Series e família XBOX One

## Confira também

* [ID3D12Device1](https://docs.xbox.com/pt-BR/reference/graphics/d3d12/interfaces/id3d12device1/id3d12device1_public.md)
* [Exemplo de cache de estado de pipeline do Direct3D 12](https://github.com/microsoft/DirectX-Graphics-Samples/tree/master/Samples/Desktop/D3D12PipelineStateCache)


## Related topics

- [ID3D12PipelineLibrary](https://docs.xbox.com/pt-BR/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/id3d12pipelinelibrary_public.md)
- [StorePipeline](https://docs.xbox.com/pt-BR/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_storepipeline_public.md)
- [LoadComputePipeline](https://docs.xbox.com/pt-BR/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadcomputepipeline_public.md)
- [LoadGraphicsPipeline](https://docs.xbox.com/pt-BR/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadgraphicspipeline_public.md)
- [Serialize](https://docs.xbox.com/pt-BR/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_serialize_public.md)
