Метод ID3D12Device1::CreatePipelineLibrary (d3d12.h)

Создает кэшированную библиотеку конвейера. Для объектов состояния конвейера (PSOS), которые, как ожидается, совместно используются для совместного использования данных, группирование их в библиотеку перед сериализированием означает, что из-за метаданных меньше накладных расходов, а также возможность избежать избыточной или повторяющейся записи данных на диск.

Вы можете запросить поддержку ID3D12PipelineLibrary с ID3D12Device::CheckFeatureSupportс D3D12_FEATURE_SHADER_CACHE и D3D12_FEATURE_DATA_SHADER_CACHE. Если элемент Flags D3D12_FEATURE_DATA_SHADER_CACHE содержит флаг D3D12_SHADER_CACHE_SUPPORT_LIBRARY, поддерживается интерфейс ID3D12PipelineLibrary. Если нет, то при вызове этой функции всегда возвращается DXGI_ERROR_NOT_SUPPORTED.

Синтаксис

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. В противном случае он возвращает кодошибки HRESULT, включая E_INVALIDARG, если большой двоичный объект поврежден или не распознан, D3D12_ERROR_DRIVER_VERSION_MISMATCH, если предоставленные данные пришли из старого драйвера или среды выполнения, и D3D12_ERROR_ADAPTER_NOT_FOUND, если данные пришли из другого оборудования.

Если передать 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

См. также