В чем смысл SetGraphicsRootSignature D3D12?

Меня немного смущает существование ID3D12GraphicsCommandList::SetGraphicsRootSignature. метод. Насколько я понимаю этой страницы MSDN, кажется, единственно допустимое его использование — всегда вызывать его после SetPipelineState, давая ему ту же корневую подпись, которая была предоставлена ​​при создании объекта состояния конвейера. Если это так, то какая польза в том, что это не подразумевается? Существуют ли другие способы использования этого метода?


person Trillian    schedule 22.07.2016    source источник
comment
Обратите внимание, что ссылка MSDN содержит пример, где SetGraphicsRootSignature вызывается перед SetPipelineState.   -  person Matthias    schedule 03.10.2020


Ответы (3)


Это оптимизация ЦП, внутренне можно подготовить часть отображения из слотов корневой подписи в фактическую привязку. Если вы используете общую корневую подпись для разных объектов состояния конвейера, то эту работу можно выполнить один раз для каждой корневой подписи, а не один раз для объекта состояния конвейера.

Скорее всего, вы будете звонить SetGraphicsRootSignature реже, чем SetGraphicPipelineState. Вот почему.

person galop1n    schedule 23.07.2016
comment
Хорошо, я могу купить это, хотя я ожидал, что несколько состояний графического конвейера смогут внутренне ссылаться на одну и ту же корневую подпись, с которой они были созданы. - person Trillian; 23.07.2016

«Корневая подпись» в DirectX 12 предоставляет общую информацию о макете для обмена данными между структурами данных ЦП и выполнением языка шейдеров графического процессора. DirectX 12 заставляет программиста решать, сколько корневых подписей они хотят использовать, когда их использовать и какие объекты состояния конвейера нуждаются в какой корневой подписи. В Direct3D 11, по сути, постоянно активна одна «корневая подпись», которая довольно велика.

Корневые подписи можно довольно часто менять без серьезных последствий, но предполагается, что у вас будет несколько корневых подписей и много PSO, а не соответствие 1:1.

Для простоты в наборе инструментов DirectX для DirectX 12 мы устанавливаем корневую подпись каждый раз, когда устанавливаем PSO в IEffect::Apply, несмотря на то, что мы используем только несколько разных корневых подписей.

person Chuck Walbourn    schedule 26.07.2016

@Чак Уолборн

«Корневые подписи можно менять довольно часто без серьезных последствий»

https://developer.nvidia.com/dx12-dos-and-donts#roots

  • Minimize the number of Root Signature changes
    • The problem is not the change of the RS but there is usually a follow up cost of initializing the root signature entries after such a change
person macrod    schedule 09.01.2019