Compartir a través de


Método ID3D12Device1::CreatePipelineLibrary (d3d12.h)

Crea una biblioteca de canalización almacenada en caché. Para los objetos de estado de canalización (SPO) que se espera que compartan datos, agruparlos en una biblioteca antes de serializarlos significa que hay menos sobrecarga debido a los metadatos, así como la oportunidad de evitar que los datos redundantes o duplicados se escriban en el disco.

Puede consultar la compatibilidad de 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, se admite la interfaz ID3D12PipelineLibrary. Si no es así, siempre se devolverá DXGI_ERROR_NOT_SUPPORTED cuando se llame a esta función.

Sintaxis

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

Parámetros

pLibraryBlob

Tipo: [in] const void*

Si el blob de la biblioteca de entrada está vacío, el contenido inicial de la biblioteca está vacío. Si el blob de la biblioteca de entrada no está vacío, se valida para la integridad, el análisis y el puntero se almacena. El puntero proporcionado como entrada para este método debe permanecer válido durante la vigencia del objeto devuelto. Por motivos de eficacia, los datos no se copian.

BlobLength

Tipo: SIZE_T

Especifica la longitud de pLibraryBlob en bytes.

riid

Tipo: REFIID

Especifica un REFIID único para el objeto ID3D12PipelineLibrary. Normalmente, establezca este parámetro y el siguiente con la macro IID_PPV_ARGS(&Library), donde Biblioteca es el nombre del objeto .

ppPipelineLibrary

Tipo: [out] 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, incluida E_INVALIDARG si el blob está dañado o no reconocido, D3D12_ERROR_DRIVER_VERSION_MISMATCH si los datos proporcionados proceden de un controlador o tiempo de ejecución antiguos y D3D12_ERROR_ADAPTER_NOT_FOUND si los datos proceden de hardware diferente.

Si pasa nullptr para pPipelineLibrary, el tiempo de ejecución sigue realizando la validación del blob, pero evita crear la biblioteca real y devuelve S_FALSE si se hubiera creado la biblioteca.

Además, la característica requiere un controlador actualizado e intentar usarlo en controladores antiguos devolverá DXGI_ERROR_UNSUPPORTED.

Observaciones

Una biblioteca de canalización habilita las siguientes operaciones.

  • Agregar objetos de estado de canalización (SPO) a un objeto de biblioteca existente (consulte StorePipeline).
  • Serialización de una biblioteca HTTP en un bloque contiguo de memoria para el almacenamiento en disco (consulte Serializar).
  • Des serialización de una biblioteca DE ARCHIVOS desde el almacenamiento persistente (esto se controla mediante CreatePipelineLibrary).
  • Recuperar psos individuales de la biblioteca (consulte LoadComputePipeline y LoadGraphicsPipeline).

En ningún momento del ciclo de vida de una biblioteca de canalización hay duplicación entre SPO con subcomponentes idénticos.

Una solución recomendada para administrar la duración del puntero proporcionado mientras solo tiene que ref-count la interfaz devuelta es aprovechar ID3D12Object::SetPrivateDataInterfacey usar un objeto que implementa IUnknowny libera la memoria cuando el recuento de referencias alcanza 0.

Seguridad de subprocesos

La biblioteca de canalizaciones es segura para subprocesos y se sincronizará internamente según sea necesario, con una excepción: varios subprocesos que cargan el mismo FORMATO (a través de LoadComputePipeline, LoadGraphicsPipelineo LoadPipeline) deben sincronizarse, ya que este acto puede modificar el estado de esa canalización dentro de la biblioteca de forma no segura para subprocesos.

Ejemplos

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

Requisitos

Requisito Valor
de la plataforma de destino de Windows
encabezado de d3d12.h
biblioteca de D3d12.lib
DLL de D3d12.dll

Consulte también