Войти
ПрограммированиеФорумГрафика

[Решено] Pipeline Statistics Query в Вулкане периодически возвращает -1 (2 стр)

Страницы: 1 2
#15
9:20, 13 янв. 2020

а если вызвать device wait idle перед получением результата?
тогда все проблемы с синхронизацией отбрасываются.


#16
9:22, 13 янв. 2020

/A\
> а если вызвать device wait idle перед получением результата?
радикальное решение

#17
9:56, 13 янв. 2020

innuendo
> assiduous
>
> сделай пример - мы потестим
Попробую.

/A\
> а если вызвать device wait idle перед получением результата?
> тогда все проблемы с синхронизацией отбрасываются.
Да, тогда работает. Но не очень быстро, как можно догадаться. Там точно что-то с синхронизацией, но timestamp и pipeline stats обрабатываются совершенно одинаково, и с timestamp никаких проблем нет.

Suslik
Может быть ты в двух словах напишешь, как ты query делаешь, и я сравню с тем, как у меня

#18
(Правка: 10:14) 10:13, 13 янв. 2020

assiduous
у меня может быть несколько одновременно фреймов в кольцевом буфере, которые рендерятся. фрейм отправляется на рендер, как только vkAcquireNextImageKHR возвращает очередное изображение (это значит, что оно готово, чтоб в него рендерить). при этом у каждого frame-in-flight есть своя копия ресурсов, которые могут динамически меняться каждый кадр: это скринспейс рендертаргеты, буферы констант с временем жизни меньше одного кадра, итп. это позволяет заполнять команды для текущего кадра, пока несколько предыдущих уже засабмичены и рендерятся. однако, нужно быть осторожным, потому что если vkAcquireNextImageKHR возвращает изображение n, это значит, что именно ресурсы, ассоциированные с изображением n можно переиспользовать, а они могут не всегда быть самыми старыми в кольцевом буфере. то есть если ты просто используешь все ресурсы фреймов по порядку, то не исключено такое, что ты query-ишь данные, которые уже невалидны.

#19
11:24, 13 янв. 2020

Suslik
> что ты query-ишь данные, которые уже невалидны.

это же статистика пейплайна  - рисуется, как я понимаю, нормально

#20
20:23, 13 янв. 2020

Suslik
Я делаю немного по-другому. У меня нет явной привязки к какому-то количеству фреймов. Вместо этого, когда какой-то ресурс необходимо синхронизовать с CPU для переиспользования, этот ресурс отправляется в очередь вместе с фенсом, который был просигнален в момент отправки командного буфера, использующего этот ресурс, в очередь.

В случае с фенсами, это работает чуть-чуть по-другому, поскольку приложение само проверяет, исполнилась ли команада на GPU.

Suslik
> не исключено такое, что ты query-ишь данные, которые уже невалидны.
Я никак не могу понять, как такое возможно. Вот у меня есть командный буфер, в который я пишу ResetPool, BeginQuery, Draw, Draw, Draw, EndQuery, ставлю фенс. Когда фенс просигналился на CPU, я беру данные. Что тут и как может стань невалидным? Объект Query Pool специально предназначен для того, чтобы хранить данные query.

#21
20:57, 13 янв. 2020

assiduous
> У меня нет явной привязки к какому-то количеству фреймов.
у суслика более правильно

#22
21:17, 13 янв. 2020

innuendo
> у суслика более правильно
Это больше философский вопрос, не думаю, что он имеет отношение к проблеме с query

#23
21:29, 13 янв. 2020

В общем, у всех прошу прощения за шум. Обновление драйвера все починило :-|

#24
21:32, 13 янв. 2020

assiduous
> В общем, у всех прошу прощения за шум. Обновление драйвера все починило

убогое апи

Страницы: 1 2
ПрограммированиеФорумГрафика