Выходные данные шейдера фрагмента привязаны к индексу Location
. Это индекс в массиве pColorAttachments
подпроцесса.
Если у вас есть шейдер, который по какой-либо причине записывает в местоположения 0 и 2, это означает, что pColorAttachments
должен иметь 3 записи. Индекс входа 1: VK_ATTACHMENT_UNUSED
.
Теперь, почему ваш шейдер это сделал? Что ж, можно использовать один и тот же шейдерный модуль в разных конвейерах, предназначенных для разных подпроходов. В одном подпроцессе может быть 3 вложения, и этот шейдер просто не записывает в местоположение 1 (он отключает запись в это вложение как часть настройки конвейера). В другом подпункте есть только 2 вложения, но вы хотите использовать тот же шейдер.
Да, теоретически вы можете использовать константы специализации для изменения индекса Location
. Я бы не сказал, что это широко используемая или очень полезная функция. Но нет причин не поддерживать это.