Fix T87464 EEVEE: Crash with deformation Motion Blur

This was caused by the new depsgraph persistence.

The GPUbatches we got from the cache being the same for each frame
means that we need to be more careful about cleanning the additional
VBOs references.

Moving the `EEVEE_motion_blur_swap_data` function call at the end of
the loop makes sure the references are cleaned.
This commit is contained in:
Clément Foucault 2021-04-28 15:36:33 +02:00
parent 73913ed845
commit c4bebc03e0
Notes: blender-bot 2023-02-14 05:43:04 +01:00
Referenced by issue #87607, Eevee crashes with motion blur and displacement modifier
Referenced by issue #87464, EEVEE Animation crashes with Motion Blur and Displacement modifier
1 changed files with 9 additions and 6 deletions

View File

@ -494,12 +494,7 @@ static void eevee_render_to_image(void *vedata,
/* Previous motion step. */
if (do_motion_blur_fx) {
if (i > 0) {
/* The previous step of this iteration N is exactly the next step of iteration N - 1.
* So we just swap the resources to avoid too much re-evaluation. */
EEVEE_motion_blur_swap_data(vedata);
}
else {
if (i == 0) {
EEVEE_motion_blur_step_set(ved, MB_PREV);
DRW_render_set_time(engine, depsgraph, floorf(time_prev), fractf(time_prev));
EEVEE_render_modules_init(vedata, engine, depsgraph);
@ -570,6 +565,14 @@ static void eevee_render_to_image(void *vedata,
DRW_cache_restart();
}
}
if (do_motion_blur_fx) {
/* The previous step of next iteration N is exactly the next step of this iteration N - 1.
* So we just swap the resources to avoid too much re-evaluation.
* Note that this also clears the VBO references from the GPUBatches of deformed
* geometries. */
EEVEE_motion_blur_swap_data(vedata);
}
}
EEVEE_volumes_free_smoke_textures();