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
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
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 |