Pular para o conteúdo principal
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, com D3D12_FEATURE_SHADER_CACHE e D3D12_FEATURE_DATA_SHADER_CACHE. Se o membro Flags de D3D12_FEATURE_DATA_SHADER_CACHE contiver o sinalizador D3D12_SHADER_CACHE_SUPPORT_LIBRARY, a interface ID3D12PipelineLibrary terá suporte. Caso contrário, DXGI_ERROR_NOT_SUPPORTED sempre será retornado quando esta função for chamada.

Sintaxe

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. 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 HRESULT, 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).
  • Serializar uma biblioteca de PSOs em um bloco contíguo de memória para armazenamento em disco (consulte Serialize).
  • Desserializar uma biblioteca de PSOs a partir de armazenamento persistente (isso é feito por CreatePipelineLibrary).
  • Recuperar PSOs individuais da biblioteca (consulte LoadComputePipeline e LoadGraphicsPipeline).
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 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, LoadGraphicsPipeline ou LoadPipeline) 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.

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

Última modificação em 6 de outubro de 2026