Passer au contenu principal
Crée une bibliothèque de pipelines mise en cache. Pour les objets d’état de pipeline (PSO) censés partager des données, les regrouper dans une bibliothèque avant de les sérialiser réduit la surcharge liée aux métadonnées et permet d’éviter l’écriture de données redondantes ou dupliquées sur le disque. Vous pouvez vérifier la prise en charge de 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. Sinon, DXGI_ERROR_NOT_SUPPORTED sera toujours renvoyé lors de l’appel de cette fonction.

Syntaxe

Paramètres

pLibraryBlob
Type : const void *
Si le blob de bibliothèque d’entrée est vide, le contenu initial de la bibliothèque est vide. Si le blob de bibliothèque d’entrée n’est pas vide, son intégrité est validée, il est analysé et le pointeur est stocké. Le pointeur fourni en entrée à cette méthode doit rester valide pendant toute la durée de vie de l’objet renvoyé. 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 : const IID &
Spécifie un REFIID unique pour l’objet ID3D12PipelineLibrary. En général, définissez ce paramètre et le suivant avec la macro IID_PPV_ARGS(&Library), où Library est le nom de l’objet. ppPipelineLibrary
Type : void **
Renvoie un pointeur vers la bibliothèque créée.

Valeur renvoyée

Type : HRESULT Si la fonction réussit, elle renvoie S_OK. Sinon, elle renvoie un code d’erreur HRESULT, notamment E_INVALIDARG si le blob est endommagé ou non reconnu, D3D12_ERROR_DRIVER_VERSION_MISMATCH si les données fournies proviennent d’un ancien pilote ou runtime, et D3D12_ERROR_ADAPTER_NOT_FOUND si les données proviennent d’un matériel différent. Si vous passez nullptr pour pPipelineLibrary, le runtime effectue tout de même la validation du blob, mais évite de créer la bibliothèque proprement dite et renvoie S_FALSE si la bibliothèque aurait été créée. En outre, la fonctionnalité nécessite un pilote mis à jour, et toute tentative de l’utiliser avec d’anciens pilotes renverra DXGI_ERROR_UNSUPPORTED.

Remarques

Une bibliothèque de pipelines permet les opérations suivantes.
  • Ajout d’objets d’état de pipeline (PSO) à un objet bibliothèque existant (consultez StorePipeline).
  • Sérialisation d’une bibliothèque de PSO dans un bloc de mémoire contigu pour le stockage sur disque (consultez Serialize).
  • Désérialisation d’une bibliothèque de PSO à partir d’un stockage persistant (gérée par CreatePipelineLibrary).
  • Récupération de PSO individuels à partir de la bibliothèque (consultez LoadComputePipeline et LoadGraphicsPipeline).
À aucun moment du cycle de vie d’une bibliothèque de pipelines, il n’y a de duplication entre des PSO ayant des sous-composants identiques. Une solution recommandée pour gérer la durée de vie du pointeur fourni tout en n’ayant à gérer que le décompte de références de l’interface renvoyée consiste à tirer parti de ID3D12Object::SetPrivateDataInterface et à utiliser un objet qui implémente IUnknown et libère la mémoire lorsque le décompte de références atteint 0.

Sécurité des threads

La bibliothèque de pipelines peut être utilisée de manière thread-safe et se synchronise en interne selon les besoins, à une exception près : plusieurs threads chargeant le même PSO (via LoadComputePipeline, LoadGraphicsPipeline ou LoadPipeline) doivent se synchroniser eux-mêmes, car cette opération peut modifier l’état de ce pipeline dans la bibliothèque d’une manière non thread-safe.

Exemples

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

Configuration requise

En-tête : d3d12_xs.h ou d3d12_x.h
Bibliothèque : d3d12_xs.lib ou d3d12_x.lib
Plateformes prises en charge : consoles XBOX Series et famille XBOX One

Voir aussi

Dernière modification le 6 octobre 2026