Метод 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 |
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по