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
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de