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