Metodo ID3D12Device1::CreatePipelineLibrary (d3d12.h)

Crea una libreria di pipeline memorizzata nella cache. Per gli oggetti di stato della pipeline (PSO) che devono condividere i dati insieme, raggrupparli in una libreria prima di serializzarli significa che si verifica un sovraccarico inferiore a causa dei metadati, nonché l'opportunità di evitare la scrittura di dati ridondanti o duplicati su disco.

È possibile eseguire una query per il supporto ID3D12PipelineLibrary con ID3D12Device::CheckFeatureSupport, con D3D12_FEATURE_SHADER_CACHE e D3D12_FEATURE_DATA_SHADER_CACHE. Se il membro Flags di D3D12_FEATURE_DATA_SHADER_CACHE contiene il flag D3D12_SHADER_CACHE_SUPPORT_LIBRARY, è supportata l'interfaccia ID3D12PipelineLibrary . In caso contrario , DXGI_ERROR_NOT_SUPPORTED verrà sempre restituito quando viene chiamata questa funzione.

Sintassi

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

Parametri

pLibraryBlob

Tipo: [in] const void*

Se il BLOB della libreria di input è vuoto, il contenuto iniziale della libreria è vuoto. Se il BLOB della libreria di input non è vuoto, viene convalidato per l'integrità, l'analisi e il puntatore viene archiviato. Il puntatore fornito come input per questo metodo deve rimanere valido per la durata dell'oggetto restituito. Per motivi di efficienza, i dati non vengono copiati.

BlobLength

Tipo: SIZE_T

Specifica la lunghezza di pLibraryBlob in byte.

riid

Tipo: REFIID

Specifica un REFIID univoco per l'oggetto ID3D12PipelineLibrary . Impostare in genere questo parametro e il parametro seguente con la macro IID_PPV_ARGS(&Library), dove Library è il nome dell'oggetto .

ppPipelineLibrary

Tipo: [out] void**

Restituisce un puntatore alla libreria creata.

Valore restituito

Tipo: HRESULT

Se la funzione ha esito positivo, restituisce S_OK. In caso contrario, restituisce un codice di erroreHRESULT, incluso E_INVALIDARG se il BLOB è danneggiato o non riconosciuto, D3D12_ERROR_DRIVER_VERSION_MISMATCH se i dati forniti provengono da un driver o un runtime precedente e D3D12_ERROR_ADAPTER_NOT_FOUND se i dati provengono da hardware diverso.

Se si passa nullptr per pPipelineLibrary , il runtime esegue comunque la convalida del BLOB, ma evita di creare la libreria effettiva e restituisce S_FALSE se la libreria fosse stata creata.

Inoltre, la funzionalità richiede un driver aggiornato e il tentativo di usarlo sui driver precedenti restituirà DXGI_ERROR_UNSUPPORTED.

Commenti

Una libreria di pipeline abilita le operazioni seguenti.

  • Aggiunta di oggetti dello stato della pipeline (PSO) a un oggetto libreria esistente (fare riferimento a StorePipeline).
  • Serializzazione di una libreria PSO in un blocco contiguo di memoria per l'archiviazione su disco (vedere Serialize).
  • De-serializzazione di una libreria PSO dall'archiviazione permanente (gestita da CreatePipelineLibrary).
  • Recupero di singoli oggetti PSO dalla libreria (fare riferimento a LoadComputePipeline e LoadGraphicsPipeline).

A nessun punto del ciclo di vita di una libreria di pipeline è presente la duplicazione tra gli oggetti PSO con componenti secondari identici.

Una soluzione consigliata per gestire la durata del puntatore fornito, pur avendo solo il conteggio dei riferimenti, l'interfaccia restituita consiste nell'usare ID3D12Object::SetPrivateDataInterface e usare un oggetto che implementa IUnknown e libera la memoria quando il conteggio dei riferimenti raggiunge 0.

Thread safety

La libreria della pipeline è thread-safe da usare e verrà sincronizzata internamente in base alle esigenze, con un'eccezione: più thread che caricano lo stesso PSO (tramite LoadComputePipeline, LoadGraphicsPipeline o LoadPipeline) devono essere sincronizzati, in quanto questa operazione può modificare lo stato della pipeline all'interno della libreria in modo non thread-safe.

Esempio

Vedere l'esempio di cache di stato della pipeline Direct3D 12.

Requisiti

   
Piattaforma di destinazione Windows
Intestazione d3d12.h
Libreria D3d12.lib
DLL D3d12.dll

Vedi anche