语法
参数
pLibraryBlob类型:const void * 如果输入的库 blob 为空,则库的初始内容为空。如果输入的库 blob 不为空,则会验证其完整性、进行解析,并存储该指针。作为此方法输入的指针必须在返回对象的整个生命周期内保持有效。出于效率考虑,不会复制数据。 BlobLength
类型:SIZE_T 指定 pLibraryBlob 的长度(以字节为单位)。 riid
类型:const IID & 为 ID3D12PipelineLibrary 对象指定唯一的 REFIID。通常使用宏
IID_PPV_ARGS(&Library) 同时设置此参数和下一个参数,其中 Library 是对象的名称。
ppPipelineLibrary类型:void ** 返回指向所创建库的指针。
返回值
类型:HRESULT 如果函数成功,则返回 S_OK。否则,返回 HRESULT 错误代码,包括:如果 blob 已损坏或无法识别,则返回 E_INVALIDARG;如果提供的数据来自旧驱动程序或运行时,则返回 D3D12_ERROR_DRIVER_VERSION_MISMATCH;如果数据来自不同的硬件,则返回 D3D12_ERROR_ADAPTER_NOT_FOUND。 如果为 pPipelineLibrary 传入nullptr,则运行时仍会执行对 blob 的验证,但不会实际创建库;如果本可以创建库,则返回 S_FALSE。
此外,该功能需要更新驱动程序,在旧驱动程序上尝试使用时将返回 DXGI_ERROR_UNSUPPORTED。
备注
管线库支持以下操作。- 向现有库对象添加管线状态对象 (PSO)(请参阅 StorePipeline)。
- 将 PSO 库序列化为连续的内存块以进行磁盘存储(请参阅 Serialize)。
- 从持久性存储反序列化 PSO 库(这由 CreatePipelineLibrary 处理)。
- 从库中检索单个 PSO(请参阅 LoadComputePipeline 和 LoadGraphicsPipeline)。
线程安全
管线库的使用是线程安全的,会根据需要在内部进行同步,但有一个例外:多个线程加载同一 PSO(通过 LoadComputePipeline、LoadGraphicsPipeline 或 LoadPipeline)时应自行同步,因为该操作可能以非线程安全的方式修改该管线在库中的状态。示例
请参阅 Direct3D 12 管线状态缓存示例。要求
头文件: d3d12_xs.h 或 d3d12_x.h库: d3d12_xs.lib 或 d3d12_x.lib
支持的平台:XBOX Series 主机和 XBOX One 系列
