Compartilhar via


Método ID3D12Device1::CreatePipelineLibrary (d3d12.h)

Cria uma biblioteca de pipeline em cache. Para PSOs (objetos de estado de pipeline) que devem compartilhar dados juntos, agrupá-los em uma biblioteca antes de serializá-los significa que há menos sobrecarga devido a metadados, bem como a oportunidade de evitar que dados redundantes ou duplicados sejam gravados em disco.

Você pode consultar o suporte ID3D12PipelineLibrary com ID3D12Device::CheckFeatureSupport, com D3D12_FEATURE_SHADER_CACHE e D3D12_FEATURE_DATA_SHADER_CACHE. Se o Flags membro do D3D12_FEATURE_DATA_SHADER_CACHE contiver o sinalizador D3D12_SHADER_CACHE_SUPPORT_LIBRARY, a interface de ID3D12PipelineLibrary do terá suporte. Caso contrário, DXGI_ERROR_NOT_SUPPORTED sempre será retornado quando essa função for chamada.

Sintaxe

HRESULT CreatePipelineLibrary(
  const void *pLibraryBlob,
  SIZE_T     BlobLength,
  REFIID     riid,
  void       **ppPipelineLibrary
);

Parâmetros

pLibraryBlob

Tipo: [in] const void*

Se o blob da biblioteca de entrada estiver vazio, o conteúdo inicial da biblioteca estará vazio. Se o blob da biblioteca de entrada não estiver vazio, ele será validado para integridade, analisado e o ponteiro será armazenado. O ponteiro fornecido como entrada para esse método deve permanecer válido para 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: REFIID

Especifica uma REFIID exclusiva para o objeto ID3D12PipelineLibrary . Normalmente, defina esse e o seguinte parâmetro com a macro IID_PPV_ARGS(&Library), em que Library é o nome do objeto.

ppPipelineLibrary

Tipo: [out] void**

Retorna um ponteiro para a biblioteca criada.

Valor de retorno

Tipo: HRESULT

Se a função for bem-sucedida, ela retornará S_OK. Caso contrário, ele retornará umde código de erro HRESULT, incluindo E_INVALIDARG se o blob estiver corrompido ou não reconhecido, D3D12_ERROR_DRIVER_VERSION_MISMATCH se os dados fornecidos vieram de um driver ou runtime antigo e D3D12_ERROR_ADAPTER_NOT_FOUND se os dados vieram de 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 tiver sido criada.

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

Observações

Uma biblioteca de pipeline habilita as operações a seguir.

  • Adicionando PSOs (objetos de estado de pipeline) a um objeto de biblioteca existente (consulte StorePipeline).
  • Serializando uma biblioteca PSO em um bloco contíguo de memória para armazenamento em disco (consulte Serializar).
  • Des serializando uma biblioteca PSO do armazenamento persistente (isso é tratado por CreatePipelineLibrary).
  • Recuperando PSOs individuais da biblioteca (consulte LoadComputePipeline e LoadGraphicsPipeline).

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

Uma solução recomendada para gerenciar o tempo de vida do ponteiro fornecido, ao mesmo tempo em que precisa reenquadrar a interface retornada, é aproveitar ID3D12Object::SetPrivateDataInterfacee usar um objeto que implementa IUnknown e libera a memória quando a contagem de refing atinge 0.

Segurança de thread

A biblioteca de pipeline é thread-safe a ser usada e será sincronizada internamente conforme necessário, com uma exceção: vários threads carregando o mesmo PSO (via LoadComputePipeline, LoadGraphicsPipelineou LoadPipeline) devem se sincronizar, pois esse ato pode modificar o estado desse pipeline dentro da biblioteca de maneira não thread-safe.

Exemplos

Consulte ode exemplo de cache de estado do pipeline do Direct3D 12.

Requisitos

Requisito Valor
da Plataforma de Destino Windows
cabeçalho d3d12.h
biblioteca D3d12.lib
de DLL D3d12.dll

Consulte também

  • ID3D12Device1
  • de exemplo de cache de estado do pipeline do Direct3D 12