[performance] Переиспользовать HD bind groups вместо создания заново на каждом кадре #13

Closed
opened 2026-10-29 11:59:18 +00:00 by chexit · 1 comment
Owner

Проверка исходников на 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/аллокации, визуал должен остаться тем же.

Код:

+ let group = device.create_bind_group(&wgpu::BindGroupDescriptor {
,
+ device.create_bind_group(&wgpu::BindGroupDescriptor {
,
+ let group = device.create_bind_group(&wgpu::BindGroupDescriptor {
; функции сохранены в патче 12.

Проверка исходников на `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/аллокации, визуал должен остаться тем же. Код: https://gitea.maoniao.team/chexit/airdef/src/commit/90379f6/horizon-patches/0011-HD-lighting-G-buffer-pass-per-pixel-mod-point-lights.patch#L900, https://gitea.maoniao.team/chexit/airdef/src/commit/90379f6/horizon-patches/0011-HD-lighting-G-buffer-pass-per-pixel-mod-point-lights.patch#L917, https://gitea.maoniao.team/chexit/airdef/src/commit/90379f6/horizon-patches/0011-HD-lighting-G-buffer-pass-per-pixel-mod-point-lights.patch#L941; функции сохранены в патче 12.
chexit added the area:renderingneeds:profilingpriority:P2type:performance labels 2026-10-29 13:09:43 +00:00
Author
Owner

🤖 Agent: исправлено в https://gitea.maoniao.team/chexit/airdef/commit/0092ec6 (запушено в main).

🤖 Agent: исправлено в https://gitea.maoniao.team/chexit/airdef/commit/0092ec6 (запушено в main).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chexit/airdef#13