[performance] Переиспользовать HD bind groups вместо создания заново на каждом кадре #13
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Проверка исходников на
90379f6. Полный Horizon/GPU на Mac не запускался; оценки сложности и ресурсов ниже не являются замерами FPS.В итоговом
gfx/hd.rs:light()создаёт bind group на кадр;finish()создаёт prefilter group, пять down groups, пять up groups и tone mapping group. При 6 bloom levels это 13 новых bind groups/кадр только для HD. Это resource churn, а не доказанная утечка. Большинство ресурсов этих groups не меняется между кадрами.Предложение: кэшировать lighting group по идентичности world color/depth/lightmap и собственных target ресурсов; bloom down/up groups пересоздавать только при resize/смене ресурсов; prefilter/tonemap cache иметь для возможных source targets (lit или fx). Uniform/storage buffer contents могут обновляться без пересоздания group. В
mod_post.rs::runуже есть пример cache по identity views.Критерий: при неизменных targets число create_bind_group на steady-state кадр близко к нулю; корректная инвалидация при resize, HD toggle и смене post mode; ресурсный cache ограничен текущими вариантами targets и не превращается в утечку. Проверить CPU encoding time/аллокации, визуал должен остаться тем же.
Код:
🤖 Agent: исправлено в https://gitea.maoniao.team/chexit/airdef/commit/0092ec6 (запушено в main).