Допустимое использование для всех команд vkCmdDraw
говорит:
Все входные привязки вершины, доступные через входные переменные вершины, объявленные в интерфейсе точки входа вершинного шейдера, должны иметь допустимые буферы, ограниченные
Это очень похоже на правило для других привязок ресурсов, которые обрабатываются с помощью дескрипторов:
Дескрипторы в каждом наборе связанных дескрипторов, заданные с помощью vkCmdBindDescriptorSets, должны быть действительными, если они статически используются связанным объектом VkPipeline, указанным с помощью vkCmdBindPipeline
Спецификация соответствует , а не , требующей устранения мертвого кода на основе констант специализации. Без DCE вызов f(input)
все еще присутствует в шейдере, даже если он никогда не будет выполнен. Таким образом, переменная input
все еще статически используется / объявляется в интерфейсе, и применимо вышеупомянутое допустимое использование.
Так что вам нужно ограничить буфер. Тем не менее, он может быть очень маленьким, поскольку вы на самом деле никогда не читаете из него, и вам не нужно заполнять его данными ... он может содержать случайный неинициализированный мусор (если уровни проверки жалуются на это, это должно быть только предупреждением). , не как ошибка).