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

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

Vous pouvez interroger la prise en charge d’ID3D12PipelineLibrary avec ID3D12Device::CheckFeatureSupport, avec D3D12_FEATURE_SHADER_CACHE et D3D12_FEATURE_DATA_SHADER_CACHE. Si le membre Flags 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ù Library est le nom de l’objet.

ppPipelineLibrary

Type : [out] void**

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

Valeur retournée

Type : HRESULT

Si la fonction réussit, elle retourne S_OK. Sinon, il retourne un code d’erreurHRESULT, 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 ancien 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.

Notes

Une bibliothèque de pipeline permet 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érialisation).
  • Désérialisation d’une bibliothèque d’authentification unique à partir d’un stockage persistant (cette opération est gérée par CreatePipelineLibrary).
  • Récupération d’osS individuels à partir de la bibliothèque ( reportez-vous à LoadComputePipeline et LoadGraphicsPipeline).

À aucun moment du cycle de vie d’une bibliothèque de pipelines, il n’y a duplication entre les OSP avec des sous-composants identiques.

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

Cohérence de thread

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

Exemples

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

Spécifications

   
Plateforme cible Windows
En-tête d3d12.h
Bibliothèque D3d12.lib
DLL D3d12.dll

Voir aussi