У меня есть простое приложение на вулканском языке, которое имеет:
3 буфера команд для каждого изображения цепочки обмена (# 1, # 2, # 3)
1 унифицированный буфер с данными матрицы проекции
Я хочу связать единый буфер один раз. я использую командный буфер # 1 для привязки единого буфера:
begin();
bindDescriptorSets();
end();
submit();
waitIdle();
reset();
Затем я записываю команды для каждого образа swapchain (3 раза):
begin()
bindVertexBuffers()
beginRenderPass()
bindPipeline()
draw()
endRenderPass()
end();
Рисование работает, как и ожидалось, но слой проверки регистрирует ошибку:
[ UNASSIGNED-CoreValidation-DrawState-DescriptorSetNotBound ] Object: 0x1a57aad7910 (Type = 6) | VkPipeline 0x21 uses set #0 but that set is not bound.
Если я переместу строку bindDescriptorSets();
во второй блок записи, например:
begin()
bindDescriptorSets();
bindVertexBuffers()
beginRenderPass()
bindPipeline()
draw()
endRenderPass()
end();
Проверка в порядке, но нет никакой разницы в рендеринге.
Итак, вопрос в том: нужно ли связывать наборы дескрипторов для каждой записи буфера? Если да, почему приложение работает нормально, когда я связываю дескрипторные наборы один раз?