Первые сущности используют динамические унифицированные буферы, вторые только стандартные унифицированные буферы
Тогда они не имеют одинаковые VkPipeline
.Является ли однородный буфер динамическим или нет, это часть конвейера , поскольку он является частью компоновки наборов дескрипторов этого конвейера.
Конвейеры могут иметь несколько наборов дескрипторов, но каждый набор представляетнабор ресурсов, , ко всем из которых конвейер может получить доступ одновременно.В вашем коде шейдера это то, что означает layout(set = #, descriptor = #)
;единообразный блок в шейдере относится к конкретному дескриптору в пределах определенного набора индексов .И он всегда будет ссылаться на этот конкретный дескриптор в указанном индексе набора.И то, является ли этот конкретный дескриптор в этом конкретном наборе динамическим или нет, является частью VkDescritorSetLayout
, используемого VkPipelineLayout
, используемого для создания объекта VkPipeline
.
Определенный набор дескрипторов в макете конвейеране может иметь два набора.Это не имеет смысла.
Чтобы сделать то, что вы хотите, необходимо создать два отдельных VkPipeline
объекта.Одно может быть производным от другого, чтобы подсказывать реализации, что изменения между ними не будут особенно большими.Но вам нужно два конвейера.
Но на самом деле, вероятно, было бы лучше иметь только один конвейер, который всегда использует динамические однородные буферы.