Partager via


ID3D12Device1 ::CreatePipelineLibrary, méthode (d3d12.h)

Crée une bibliothèque de pipelines mise en cache. Pour les objets d’état de pipeline (PSO) qui sont censés partager des données ensemble, les regrouper dans une bibliothèque avant de les sérialiser signifie qu’il y a moins de surcharge en raison des métadonnées, ainsi que l’opportunité d’éviter l’écriture de données redondantes ou dupliquées sur disque.

Vous pouvez rechercher prise en charge des ID3D12PipelineLibrary avec ID3D12Device ::CheckFeatureSupport, avec D3D12_FEATURE_SHADER_CACHE et D3D12_FEATURE_DATA_SHADER_CACHE. Si l'Flags membre de D3D12_FEATURE_DATA_SHADER_CACHE contient l’indicateur D3D12_SHADER_CACHE_SUPPORT_LIBRARY, l’interface ID3D12PipelineLibrary est prise en charge. Si ce n’est pas le cas, DXGI_ERROR_NOT_SUPPORTED sera toujours retourné lorsque cette fonction est appelée.

Syntaxe

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

Paramètres

pLibraryBlob

Type : [in] const void*

Si l’objet blob de la bibliothèque d’entrée est vide, le contenu initial de la bibliothèque est vide. Si l’objet blob de la bibliothèque d’entrée n’est pas vide, il est validé pour l’intégrité, analysé et le pointeur est stocké. Le pointeur fourni comme entrée de cette méthode doit rester valide pendant la durée de vie de l’objet retourné. Pour des raisons d’efficacité, les données ne sont pas copiées.

BlobLength

Type : SIZE_T

Spécifie la longueur de pLibraryBlob en octets.

riid

Type : REFIID

Spécifie un REFIID unique pour l’objet ID3D12PipelineLibrary. Définissez généralement ce paramètre et le paramètre suivant avec la macro IID_PPV_ARGS(&Library), où Bibliothèque est le nom de l’objet.

ppPipelineLibrary

Type : [out] void**

Retourne un pointeur vers la bibliothèque créée.

Valeur de retour

Type : HRESULT

Si la fonction réussit, elle retourne S_OK. Sinon, il retourne un HRESULTcode d’erreur, y compris E_INVALIDARG si l’objet blob est endommagé ou non reconnu, D3D12_ERROR_DRIVER_VERSION_MISMATCH si les données fournies proviennent d’un ancien pilote ou d’un runtime, et D3D12_ERROR_ADAPTER_NOT_FOUND si les données proviennent d’un autre matériel.

Si vous passez nullptr pour pPipelineLibrary, le runtime effectue toujours la validation de l’objet blob, mais évitez de créer la bibliothèque réelle et retourne S_FALSE si la bibliothèque aurait été créée.

En outre, la fonctionnalité nécessite un pilote mis à jour et la tentative de l’utiliser sur les anciens pilotes retourne DXGI_ERROR_UNSUPPORTED.

Remarques

Une bibliothèque de pipelines active les opérations suivantes.

  • Ajout d’objets d’état de pipeline (PSO) à un objet de bibliothèque existant (reportez-vous à StorePipeline).
  • Sérialisation d’une bibliothèque d’authentification unique dans un bloc de mémoire contigu pour le stockage sur disque (reportez-vous à Sérialiser).
  • Désérialisation d’une bibliothèque d’authentification unique à partir d’un stockage persistant (gérée par CreatePipelineLibrary).
  • Récupération d’objets de service individuels à partir de la bibliothèque (reportez-vous à loadComputePipeline et LoadGraphicsPipeline).

À aucun moment dans le cycle de vie d’une bibliothèque de pipelines, il existe une duplication entre les psO avec des sous-composants identiques.

Une solution recommandée pour la gestion de la durée de vie du pointeur fourni, tout en n’ayant qu’à réf-compter l’interface retournée consiste à tirer parti de ID3D12Object ::SetPrivateDataInterface, et d’utiliser un objet qui implémente IUnknown, et libère la mémoire lorsque le nombre de références atteint 0.

Sécurité des threads

La bibliothèque de pipelines est thread-safe à utiliser et se synchronise en interne si nécessaire, à une exception près : plusieurs threads chargent le même psO (via LoadComputePipeline, LoadGraphicsPipeline, ou LoadPipeline) doivent se synchroniser, car cet acte peut modifier l’état de ce pipeline dans la bibliothèque de manière non thread-safe.

Exemples

Consultez l’exemple de cache d’état de pipeline Direct3D 12.

Exigences

Exigence Valeur
plateforme cible Windows
d’en-tête d3d12.h
bibliothèque D3d12.lib
DLL D3d12.dll

Voir aussi