Подскажите, как правильно синхронизировать vkQueuePresentKHR? Есть очередь с двумя изображениями. Последовательность

отрисовки такая:
1) Жду фенс текущего кадра
2) Получаю изображение через vkAcquireNextImageKHR
3) Жду фенса полученного изображения
4) Сбрасываю фенс кадра через vkResetFences
5) Делаю vkQueueSubmit с только что сброшенным фенсом
6) Делаю vkQueuePresentKHR
В определённый момент, судя по nsight'у, получаю длительность выполнения vkQueuePresentKHR в 11 секунд. Это не первый и не последний кадр, на самом кадре 1 треугольник. Далее, если по прошествии этих 11 секунд попытаться закрыть приложение, ловлю лок намертво в vkDeviceWaitIdle. Мне кажется, что причина в том, что пока vkQueuePresentKHR висит 11 секунд, CPU успевает насовать ему вагон новых сабмитов, потому как фенс сбрасывается до сабмита, а не после презента.
Если добавить после vkQueuePresentKHR vkQueueWaitIdle, то проблема лока уходит, но проблема 11 секунд на презент — нет.
В общем вопроса два: как лечить спайк презента и правильно это синхронизировать, чтобы даже в случае спайка не получить лок? По поводу синхронизации мысль ждать семафора от vkQueuePresentKHR самым первым пунктом, но не уверен, что это правильно.

5 ответов

23 просмотра

проверь тот ли фенс ждёшь, включи валидацию

Alexander "Ternvein"-Isaev Автор вопроса
Timur Gagiev
проверь тот ли фенс ждёшь, включи валидацию

Проверил, тот. В целом фенсы работают как надо, виснет только на vkDeviceWaitIdle, который я зову перед уничтожением всего.

Ты используешь validation layers? Если нет, то первым делом их включи. Иначе смысла 0 задавать вопросы здесь.

Anatoliy Tomilov [Russia]
Ты используешь validation layers? Если нет, то пер...

если почитать подальше, то можно обнаружить, что чел действительно написал, что использует

Constantine Shablia
если почитать подальше, то можно обнаружить, что ч...

да. Читаю. Непонятно, действительно ли они работают. Если они совсем молчат, то это вероятно.

Похожие вопросы

Обсуждают сегодня

Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
1
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Коллеги, я тут для личных нужд пошел ставить MQTT сервер, пощупал mosquitto, но ужаснулся отсутствию такой банальности, как HTTP API для посмотреть список топиков. А тут что,...
Maksim Lapshin
14
У меня задача: написать брокер сообщений. Очереди и потребители. Очереди поддерживают приоритеты. Очередь отдает сообщения, только обработчикам с соответствующими характеристи...
Aleksandr Filippov
2
Решил тут попробовать embassy на bluepill. Все установил, собрал blink и успешно залил с помощью St link 2 китайского. Но после этого чип шиться перестал. На форумах прочел, ч...
Lukutin R2AJP
6
Немного оффтопа: а кто на чем сидит для осдева в плане ide/редактора? Последнее время сидел на vscode, но я его прям не могу нормально воспринимать, перешел на сlion, но меня...
Evg Resh
29
Карта сайта