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

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

Вы можете запросить поддержку ID3D12PipelineLibrary с помощью ID3D12Device::CheckFeatureSupport, с D3D12_FEATURE_SHADER_CACHE и D3D12_FEATURE_DATA_SHADER_CACHE. Если элемент FlagsD3D12_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 для объекта ID3D12PipelineLibrary . Обычно этот и следующий параметр задаются с помощью макроса IID_PPV_ARGS(&Library), где Library — это имя объекта.

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).
  • Получение отдельных объектов ПОП из библиотеки (см . loadComputePipeline и LoadGraphicsPipeline).

Ни при каких этапах жизненного цикла библиотеки конвейера не существует дублирования между ПСО с идентичными подкомпонентами.

Рекомендуемое решение для управления временем существования предоставленного указателя при необходимости подсчета ссылок только для возвращаемого интерфейса — использовать ID3D12Object::SetPrivateDataInterface и использовать объект, который реализует IUnknown и освобождает память, когда число ссылок достигает 0.

Потокобезопасность

Библиотека конвейера является потокобезопасной для использования и будет внутренне синхронизироваться по мере необходимости, за одним исключением: несколько потоков, загружающих один и тот же PSO (через LoadComputePipeline, LoadGraphicsPipeline или LoadPipeline) должны синхронизироваться сами, так как это действие может изменить состояние этого конвейера в библиотеке непотобезопасным способом.

Примеры

См. пример кэша состояния конвейера Direct3D 12.

Требования

   
Целевая платформа Windows
Header d3d12.h
Библиотека D3d12.lib
DLL D3d12.dll

См. также раздел