diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2020-04-22 22:27:07 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2020-04-22 22:41:10 +0300 |
commit | a68bd94d110a187b00f530a6e9a7122ca76a52ab (patch) | |
tree | be2d16935e51aac8b6512057b8f4e496171eceb9 /source/blender/draw/engines/workbench | |
parent | f7753bf97fd38720bf1e91cd8179dd3227a7bb12 (diff) |
Workbench: Use GPU_texture_copy instead of GPU_framebuffer_blit for TAA
This fixes T75477 which seems to be a driver but caused by framebuffer
blitting.
Diffstat (limited to 'source/blender/draw/engines/workbench')
-rw-r--r-- | source/blender/draw/engines/workbench/workbench_effect_antialiasing.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/source/blender/draw/engines/workbench/workbench_effect_antialiasing.c b/source/blender/draw/engines/workbench/workbench_effect_antialiasing.c index 5c960acbd78..a7ddd1c547b 100644 --- a/source/blender/draw/engines/workbench/workbench_effect_antialiasing.c +++ b/source/blender/draw/engines/workbench/workbench_effect_antialiasing.c @@ -417,8 +417,10 @@ void workbench_antialiasing_draw_pass(WORKBENCH_Data *vedata) { WORKBENCH_PrivateData *wpd = vedata->stl->wpd; WORKBENCH_FramebufferList *fbl = vedata->fbl; + WORKBENCH_TextureList *txl = vedata->txl; WORKBENCH_PassList *psl = vedata->psl; DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get(); + DefaultTextureList *dtxl = DRW_viewport_texture_list_get(); if (wpd->taa_sample_len == 0) { /* AA disabled. */ @@ -438,12 +440,14 @@ void workbench_antialiasing_draw_pass(WORKBENCH_Data *vedata) const bool taa_finished = wpd->taa_sample >= wpd->taa_sample_len; if (wpd->taa_sample == 0) { wpd->valid_history = true; + GPU_texture_copy(txl->history_buffer_tx, dtxl->color); /* In playback mode, we are sure the next redraw will not use the same viewmatrix. * In this case no need to save the depth buffer. */ - eGPUFrameBufferBits bits = GPU_COLOR_BIT | (!wpd->is_playback ? GPU_DEPTH_BIT : 0); - GPU_framebuffer_blit(dfbl->default_fb, 0, fbl->antialiasing_fb, 0, bits); + if (!wpd->is_playback) { + GPU_texture_copy(txl->depth_buffer_tx, dtxl->depth); + } if (workbench_in_front_history_needed(vedata)) { - GPU_framebuffer_blit(dfbl->in_front_fb, 0, fbl->antialiasing_in_front_fb, 0, GPU_DEPTH_BIT); + GPU_texture_copy(txl->depth_buffer_in_front_tx, dtxl->depth_in_front); } } else { @@ -453,9 +457,9 @@ void workbench_antialiasing_draw_pass(WORKBENCH_Data *vedata) DRW_draw_pass(psl->aa_accum_ps); } /* Copy back the saved depth buffer for correct overlays. */ - GPU_framebuffer_blit(fbl->antialiasing_fb, 0, dfbl->default_fb, 0, GPU_DEPTH_BIT); + GPU_texture_copy(dtxl->depth, txl->depth_buffer_tx); if (workbench_in_front_history_needed(vedata)) { - GPU_framebuffer_blit(fbl->antialiasing_in_front_fb, 0, dfbl->in_front_fb, 0, GPU_DEPTH_BIT); + GPU_texture_copy(dtxl->depth_in_front, txl->depth_buffer_in_front_tx); } } |