В главе «Привязка набора дескрипторов» в спецификации Vulkan делается следующее утверждение:
Совместимый набор дескрипторов должен быть привязан ко всем номерам наборов, к которым имеют доступ любые шейдеры в конвейере, во время записи команды рисования или отправки для выполнения с использованием этого конвейера.
Где определяется «совместимый дескриптор»? Я не нашел определение в спецификации. Интересно, должен ли набор дескрипторов точно соответствовать макету набора в шейдере или разрешено ли набору дескрипторов иметь ресурс, связанный с точкой привязки, которой нет в шейдере.
Причина этого вопроса заключается в следующем: предположим, что у меня есть два почти идентичных шейдера (рассмотрим их «вариации» шаблонного шейдера), они имеют одинаковые макеты, за исключением того, что один из них не использует одну конкретную привязку точка (т. е. это может быть «быстрый путь», получаемый из общего пути с помощью #ifdef, что приводит к оптимизации одной точки привязки). Предположим, у меня есть два вызова отрисовки: первый использует один шейдер, а второй - другой, и предположим, что требуемые ресурсы идентичны, за исключением того, что есть дополнительный ресурс для одного шейдера, который имеет эту особую точку привязки. Также предположим, что я использую тот же макет набора дескрипторов, который отображается точно на один шейдер, который имеет дополнительную точку привязки. В этой ситуации я бы предпочел использовать один и тот же набор дескрипторов для обоих шейдеров, чтобы уменьшить количество обновлений / привязок наборов дескрипторов. Набор будет точно соответствовать одному шейдеру и будет содержать привязку ресурса, которой нет в другом шейдере.