diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2019-06-14 20:12:39 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2019-06-14 20:17:06 +0300 |
commit | 0707177ab868f1845dba1ecfd396e58c091e89b0 (patch) | |
tree | a3ba924b06631c961eb2ec49f9e5c6ca3ac88ae8 /source/blender/draw/engines/eevee/eevee_engine.c | |
parent | 486755460ab23f555036537f1ac79037d5e7ef08 (diff) |
Fix T64913 Eevee: shader compilation does not reset TAA
This tracks the number of compiling shaders and just reset the TAA
if previous number mismatch.
Diffstat (limited to 'source/blender/draw/engines/eevee/eevee_engine.c')
-rw-r--r-- | source/blender/draw/engines/eevee/eevee_engine.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c index cb2b3763c74..99be7ec631c 100644 --- a/source/blender/draw/engines/eevee/eevee_engine.c +++ b/source/blender/draw/engines/eevee/eevee_engine.c @@ -60,6 +60,7 @@ static void eevee_engine_init(void *ved) stl->g_data->background_alpha = DRW_state_draw_background() ? 1.0f : 0.0f; stl->g_data->valid_double_buffer = (txl->color_double_buffer != NULL); stl->g_data->valid_taa_history = (txl->taa_history != NULL); + stl->g_data->queued_shaders_count = 0; /* Main Buffer */ DRW_texture_ensure_fullscreen_2d(&txl->color, GPU_RGBA16F, DRW_TEX_FILTER | DRW_TEX_MIPMAP); @@ -145,6 +146,7 @@ void EEVEE_cache_populate(void *vedata, Object *ob) static void eevee_cache_finish(void *vedata) { EEVEE_ViewLayerData *sldata = EEVEE_view_layer_data_ensure(); + EEVEE_PrivateData *g_data = ((EEVEE_Data *)vedata)->stl->g_data; EEVEE_volumes_cache_finish(sldata, vedata); EEVEE_materials_cache_finish(sldata, vedata); @@ -153,6 +155,13 @@ static void eevee_cache_finish(void *vedata) EEVEE_effects_draw_init(sldata, vedata); EEVEE_volumes_draw_init(sldata, vedata); + + /* Restart taa if a shader has finish compiling. */ + /* HACK We should use notification of some sort from the compilation job instead. */ + if (g_data->queued_shaders_count != g_data->queued_shaders_count_prev) { + g_data->queued_shaders_count_prev = g_data->queued_shaders_count; + EEVEE_temporal_sampling_reset(vedata); + } } /* As renders in an HDR offscreen buffer, we need draw everything once |