Существуют ли директивы DirectX для привязки и отмены привязки ресурсов между вызовами отрисовки?
Все книги и учебники по DirectX настоятельно рекомендуемсокращение выделения ресурсов между вызовами отрисовки до минимума - но я не могу найти какие-либо руководящие принципы, которые более подробно. Изучив множество примеров кода, найденных в Интернете, я пришел к выводу, что программисты имеют совершенно разные принципы кодирования по этому вопросу. Некоторые даже установлены и не установлены
VS/PS
VS/PS ResourceViews
RasterizerStage
DepthStencilState
PrimitiveTopology
...
до и послекаждый сделать вызов (хотя настройка остается неизменной), а другие нет.
Я думаю, это немного преувеличено ...
Из моих собственных экспериментов я обнаружил, что единственные ресурсы, которые я должен связывать при каждом вызове, - этоShaderResourceViews
(вVS
а такжеPS
в моем случае). Это требование может быть вызвано использованием вычислительных шейдеров, так как я связываю / снимаю привязкуUAVs
к буферам, которые связаны сVS
/ PS
позже.
Я потерял много часов работы, прежде чем обнаружил, что этот переплет необходим. И я полагаю, что многие кодеры не уверены в этом и предпочитают отвязывать и привязывать «слишком много» вместо того, чтобы попасть в аналогичную ловушку.
Вопрос 1: Существуют ли хотя бы некоторые практические правила в отношении этой проблемы?
Вопрос 2: Возможно ли, что мойShaderResourceViews
связан сVS/PS
не связаны ядром драйвера / DirectX, потому что я связываюUAVs
в те же буферы до вызова диспетчеризации CS (я неSRVs
себя)?
Вопрос 3: Я даже не поставилVS/PS
обнулить, прежде чем использовать вычислительные шейдеры. Работает без проблем, но я чувствую себя постоянно неуверенным, копаю ли я свою следующую ловушку, используя такой «ленивый» подход.