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

> 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**](/pt-BR/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_checkfeaturesupport_public), com [**D3D12\_FEATURE\_SHADER\_CACHE**](/pt-BR/reference/graphics/d3d12/enums/d3d12_feature_public) e [**D3D12\_FEATURE\_DATA\_SHADER\_CACHE**](/pt-BR/reference/graphics/d3d12/structs/d3d12_feature_data_shader_cache_public). Se o membro *Flags* de [**D3D12\_FEATURE\_DATA\_SHADER\_CACHE**](/pt-BR/reference/graphics/d3d12/structs/d3d12_feature_data_shader_cache_public) contiver o sinalizador [**D3D12\_SHADER\_CACHE\_SUPPORT\_LIBRARY**](/pt-BR/reference/graphics/d3d12/enums/d3d12_shader_cache_support_flags_public), 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*<br />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*<br />Tipo: SIZE\_T

Especifica o comprimento de *pLibraryBlob* em bytes.

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

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

*ppPipelineLibrary*<br />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](/pt-BR/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_storepipeline_public)).
* Serializar uma biblioteca de PSOs em um bloco contíguo de memória para armazenamento em disco (consulte [Serialize](/pt-BR/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_serialize_public)).
* Desserializar uma biblioteca de PSOs a partir de armazenamento persistente (isso é feito por **CreatePipelineLibrary**).
* Recuperar PSOs individuais da biblioteca (consulte [LoadComputePipeline](/pt-BR/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadcomputepipeline_public) e [LoadGraphicsPipeline](/pt-BR/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadgraphicspipeline_public)).

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](/pt-BR/reference/graphics/d3d12/interfaces/id3d12object/methods/id3d12object_setprivatedatainterface_public) 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**](/pt-BR/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadcomputepipeline_public), [**LoadGraphicsPipeline**](/pt-BR/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadgraphicspipeline_public) ou [**LoadPipeline**](/pt-BR/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary1/methods/id3d12pipelinelibrary1_loadpipeline_public)) 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<br />**Biblioteca:** d3d12\_xs.lib ou d3d12\_x.lib<br />**Plataformas com suporte**: consoles XBOX Series e família XBOX One

## Confira também

* [ID3D12Device1](/pt-BR/reference/graphics/d3d12/interfaces/id3d12device1/id3d12device1_public)
* [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](/pt-BR/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/id3d12pipelinelibrary_public.md)
- [StorePipeline](/pt-BR/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_storepipeline_public.md)
- [LoadComputePipeline](/pt-BR/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadcomputepipeline_public.md)
- [LoadGraphicsPipeline](/pt-BR/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_loadgraphicspipeline_public.md)
- [GetSerializedSize](/pt-BR/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary/methods/id3d12pipelinelibrary_getserializedsize_public.md)
