Метод ID3D12Device1::CreatePipelineLibrary (d3d12.h)
Создает кэшированную библиотеку конвейера. Для объектов состояния конвейера (PSOS), которые, как ожидается, совместно используются для совместного использования данных, группирование их в библиотеку перед сериализированием означает, что из-за метаданных меньше накладных расходов, а также возможность избежать избыточной или повторяющейся записи данных на диск.
Вы можете запросить поддержку ID3D12PipelineLibrary с ID3D12Device::CheckFeatureSupportс D3D12_FEATURE_SHADER_CACHE и D3D12_FEATURE_DATA_SHADER_CACHE. Если элемент
Синтаксис
HRESULT CreatePipelineLibrary(
const void *pLibraryBlob,
SIZE_T BlobLength,
REFIID riid,
void **ppPipelineLibrary
);
Параметры
pLibraryBlob
Тип: [in] const void*
Если большой двоичный объект входной библиотеки пуст, начальное содержимое библиотеки пусто. Если большой двоичный объект входной библиотеки не пуст, он проверяется для целостности, синтаксического анализа и хранения указателя. Указатель, предоставленный в качестве входных данных для этого метода, должен оставаться допустимым в течение времени существования возвращаемого объекта. По соображениям эффективности данные не копируются.
BlobLength
Тип: SIZE_T
Указывает длину pLibraryBlob в байтах.
riid
Тип: REFIID
Задает уникальный REFIID для объекта ID3D12PipelineLibra ry. Обычно задайте этот и следующий параметр с помощью макроса
ppPipelineLibrary
Тип: [out] void**
Возвращает указатель на созданную библиотеку.
Возвращаемое значение
Тип: HRESULT
Если функция успешно выполнена, она возвращает S_OK. В противном случае он возвращает кодошибки
Если передать nullptr
для pPipelineLibrary среда выполнения по-прежнему выполняет проверку большого двоичного объекта, но не создает фактическую библиотеку и возвращает S_FALSE, если библиотека была создана.
Кроме того, компоненту требуется обновленный драйвер, и попытка использовать его на старых драйверах вернет DXGI_ERROR_UNSUPPORTED.
Замечания
Библиотека конвейера включает следующие операции.
- Добавление объектов состояния конвейера (PSOS) в существующий объект библиотеки (см. ссылку на StorePipeline).
- Сериализация библиотеки PSO в непрерывный блок памяти для дискового хранилища (см. сериализация).
- Отмена сериализации библиотеки PSO из постоянного хранилища (она обрабатывается CreatePipelineLibrary).
- Получение отдельных psos из библиотеки (см. LoadComputePipeline и LoadGraphicsPipeline).
В этом жизненном цикле библиотеки конвейера дублирование между ПСО с идентичными подкомпонентами отсутствует.
Рекомендуемое решение для управления временем существования предоставленного указателя в то время как требуется только ref-count возвращаемого интерфейса— использовать ID3D12Object::SetPrivateDataInterfaceи использовать объект, реализующий IUnknown, и освобождает память, когда число ссылок достигает 0.
Безопасность потоков
Библиотека конвейеров является потокобезопасной для использования и будет внутренне синхронизироваться, за исключением одного исключения: несколько потоков, загружающих один и тот же PSO (через LoadComputePipeline, LoadGraphicsPipelineили LoadPipeline), должны синхронизировать себя, так как это действие может изменить состояние этого конвейера в библиотеке в непотокобезопасном режиме.
Примеры
См . примеркэша состояния конвейера Direct3D 12.
Требования
Требование | Ценность |
---|---|
целевая платформа | Виндоус |
заголовка | d3d12.h |
библиотеки |
D3d12.lib |
DLL | D3d12.dll |