Skip to main content
Crea una biblioteca de canalizaciones almacenada en caché. Para los objetos de estado de canalización (PSO) que se espera que compartan datos entre sí, agruparlos en una biblioteca antes de serializarlos significa que hay menos sobrecarga debido a los metadatos, así como la oportunidad de evitar que se escriban en disco datos redundantes o duplicados. Puede consultar la compatibilidad con ID3D12PipelineLibrary con ID3D12Device::CheckFeatureSupport, con D3D12_FEATURE_SHADER_CACHE y D3D12_FEATURE_DATA_SHADER_CACHE. Si el miembro Flags de D3D12_FEATURE_DATA_SHADER_CACHE contiene la marca D3D12_SHADER_CACHE_SUPPORT_LIBRARY, la interfaz ID3D12PipelineLibrary es compatible. De lo contrario, siempre se devolverá DXGI_ERROR_NOT_SUPPORTED cuando se llame a esta función.

Sintaxis

Parámetros

pLibraryBlob
Tipo: const void *
Si el blob de biblioteca de entrada está vacío, el contenido inicial de la biblioteca está vacío. Si el blob de biblioteca de entrada no está vacío, se valida su integridad, se analiza y se almacena el puntero. El puntero proporcionado como entrada a este método debe permanecer válido durante la vigencia del objeto devuelto. Por motivos de eficiencia, los datos no se copian. BlobLength
Tipo: SIZE_T
Especifica la longitud de pLibraryBlob en bytes. riid
Tipo: const IID &
Especifica un REFIID único para el objeto ID3D12PipelineLibrary. Normalmente, establezca este parámetro y el siguiente con la macro IID_PPV_ARGS(&Library), donde Library es el nombre del objeto. ppPipelineLibrary
Tipo: void **
Devuelve un puntero a la biblioteca creada.

Valor devuelto

Tipo: HRESULT Si la función se ejecuta correctamente, devuelve S_OK. De lo contrario, devuelve un código de error HRESULT, incluido E_INVALIDARG si el blob está dañado o no se reconoce, D3D12_ERROR_DRIVER_VERSION_MISMATCH si los datos proporcionados proceden de un controlador o entorno de ejecución antiguo, y D3D12_ERROR_ADAPTER_NOT_FOUND si los datos proceden de hardware diferente. Si pasa nullptr para pPipelineLibrary, el entorno de ejecución sigue realizando la validación del blob, pero evita crear la biblioteca real y devuelve S_FALSE si la biblioteca se habría creado. Además, la característica requiere un controlador actualizado e intentar usarla en controladores antiguos devolverá DXGI_ERROR_UNSUPPORTED.

Comentarios

Una biblioteca de canalizaciones permite las siguientes operaciones.
  • Agregar objetos de estado de canalización (PSO) a un objeto de biblioteca existente (consulte StorePipeline).
  • Serializar una biblioteca de PSO en un bloque de memoria contiguo para su almacenamiento en disco (consulte Serialize).
  • Deserializar una biblioteca de PSO desde el almacenamiento persistente (esto lo controla CreatePipelineLibrary).
  • Recuperar PSO individuales de la biblioteca (consulte LoadComputePipeline y LoadGraphicsPipeline).
En ningún momento del ciclo de vida de una biblioteca de canalizaciones hay duplicación entre PSO con subcomponentes idénticos. Una solución recomendada para administrar la duración del puntero proporcionado, teniendo que contar referencias solamente de la interfaz devuelta, es aprovechar ID3D12Object::SetPrivateDataInterface y usar un objeto que implemente IUnknown y libere la memoria cuando el recuento de referencias llegue a 0.

Seguridad para subprocesos

La biblioteca de canalizaciones es segura para subprocesos y se sincronizará internamente según sea necesario, con una excepción: varios subprocesos que carguen el mismo PSO (mediante LoadComputePipeline, LoadGraphicsPipeline o LoadPipeline) deben sincronizarse entre sí, ya que esta acción puede modificar el estado de esa canalización dentro de la biblioteca de una manera que no es segura para subprocesos.

Ejemplos

Consulte el ejemplo de caché de estado de canalización de Direct3D 12.

Requisitos

Encabezado: d3d12_xs.h o d3d12_x.h
Biblioteca: d3d12_xs.lib o d3d12_x.lib
Plataformas compatibles: consolas XBOX Series y familia XBOX One

Consulte también

Última modificación el 28 de agosto de 2026