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

Cria uma biblioteca de pipelines 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 a ID3D12PipelineLibrary com ID3D12Device::CheckFeatureSupport, com D3D12_FEATURE_SHADER_CACHE e D3D12_FEATURE_DATA_SHADER_CACHE. Se o membro Flags do 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 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 durante 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 um REFIID exclusivo para o objeto ID3D12PipelineLibrary . Normalmente, defina esse e o parâmetro a seguir 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 retornado

Tipo: HRESULT

Se a função for bem-sucedida, ela retornará S_OK. Caso contrário, ele retornará um código de erroHRESULT, 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.

Comentários

Uma biblioteca de pipelines 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).
  • Desserializar 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 subcomponentes idênticos.

Uma solução recomendada para gerenciar o tempo de vida do ponteiro fornecido, tendo apenas que contar novamente a interface retornada é aproveitar ID3D12Object::SetPrivateDataInterface e usar um objeto que implementa IUnknown e libera a memória quando a contagem de ref atinge 0.

Acesso thread-safe

A biblioteca de pipelines é 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, LoadGraphicsPipeline ou LoadPipeline) devem ser sincronizados, pois esse ato pode modificar o estado desse pipeline dentro da biblioteca de maneira não thread-safe.

Exemplos

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

Requisitos

   
Plataforma de Destino Windows
Cabeçalho d3d12.h
Biblioteca D3d12.lib
DLL D3d12.dll

Confira também