Commit: 90aff807ab9c3b75511f49e8e22daa39c76b9b8a
Author: Clément Foucault
Date:   Tue May 16 20:18:57 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB90aff807ab9c3b75511f49e8e22daa39c76b9b8a

Draw Manager: Texture Memory usage improvement.

-Use 11_11_10 buffers for hdr content.
-Eevee compositing share 1 buffer if bloom and DOF are both activated.
-Fix slowdown when resizing EEVEE viewport.
-Removed DRW_BUF_*** enums causing confusion.

===================================================================

M       source/blender/draw/engines/basic/basic_engine.c
M       source/blender/draw/engines/clay/clay_engine.c
M       source/blender/draw/engines/eevee/eevee_effects.c
M       source/blender/draw/engines/eevee/eevee_engine.c
M       source/blender/draw/engines/eevee/eevee_lights.c
M       source/blender/draw/engines/eevee/eevee_probes.c
M       source/blender/draw/intern/DRW_render.h
M       source/blender/draw/intern/draw_manager.c
M       source/blender/draw/modes/edit_curve_mode.c
M       source/blender/draw/modes/edit_lattice_mode.c
M       source/blender/draw/modes/edit_mesh_mode.c
M       source/blender/draw/modes/edit_metaball_mode.c
M       source/blender/draw/modes/edit_surface_mode.c
M       source/blender/draw/modes/edit_text_mode.c
M       source/blender/draw/modes/object_mode.c
M       source/blender/draw/modes/paint_texture_mode.c
M       source/blender/draw/modes/particle_mode.c
M       source/blender/draw/modes/sculpt_mode.c
M       source/blender/gpu/GPU_texture.h
M       source/blender/gpu/intern/gpu_texture.c

===================================================================

diff --git a/source/blender/draw/engines/basic/basic_engine.c 
b/source/blender/draw/engines/basic/basic_engine.c
index 64585604bbd..96eaf541cae 100644
--- a/source/blender/draw/engines/basic/basic_engine.c
+++ b/source/blender/draw/engines/basic/basic_engine.c
@@ -136,7 +136,7 @@ static void BASIC_engine_init(void *vedata)
 #ifdef USE_DEPTH
        if (DRW_state_is_fbo()) {
                const float *viewport_size = DRW_viewport_size_get();
-               DRWFboTexture tex = {&txl->depth_dup, DRW_BUF_DEPTH_24, 0};
+               DRWFboTexture tex = {&txl->depth_dup, DRW_TEX_DEPTH_24, 0};
                DRW_framebuffer_init(&fbl->dupli_depth, &draw_engine_basic_type,
                                     (int)viewport_size[0], 
(int)viewport_size[1],
                                     &tex, 1);
diff --git a/source/blender/draw/engines/clay/clay_engine.c 
b/source/blender/draw/engines/clay/clay_engine.c
index 3d692c0b3d9..ff0c37aa623 100644
--- a/source/blender/draw/engines/clay/clay_engine.c
+++ b/source/blender/draw/engines/clay/clay_engine.c
@@ -369,7 +369,7 @@ static void CLAY_engine_init(void *vedata)
 
        if (DRW_state_is_fbo()) {
                const float *viewport_size = DRW_viewport_size_get();
-               DRWFboTexture tex = {&e_data.depth_dup, DRW_BUF_DEPTH_24, 
DRW_TEX_TEMP};
+               DRWFboTexture tex = {&e_data.depth_dup, DRW_TEX_DEPTH_24, 
DRW_TEX_TEMP};
                DRW_framebuffer_init(&fbl->dupli_depth, &draw_engine_clay_type,
                                     (int)viewport_size[0], 
(int)viewport_size[1],
                                     &tex, 1);
diff --git a/source/blender/draw/engines/eevee/eevee_effects.c 
b/source/blender/draw/engines/eevee/eevee_effects.c
index 0a86fc1afb4..b19bbce801c 100644
--- a/source/blender/draw/engines/eevee/eevee_effects.c
+++ b/source/blender/draw/engines/eevee/eevee_effects.c
@@ -178,7 +178,7 @@ void EEVEE_effects_init(EEVEE_Data *vedata)
 
        effects = stl->effects;
 
-       effects->enabled_effects = 0;
+       int enabled_effects = 0;
 
 #if ENABLE_EFFECT_MOTION_BLUR
        if (BKE_collection_engine_property_value_get_bool(props, 
"motion_blur_enable")) {
@@ -207,7 +207,7 @@ void EEVEE_effects_init(EEVEE_Data *vedata)
                                invert_m4(effects->current_ndc_to_world);
 
                                effects->motion_blur_samples = 
BKE_collection_engine_property_value_get_int(props, "motion_blur_samples");
-                               effects->enabled_effects |= EFFECT_MOTION_BLUR;
+                               enabled_effects |= EFFECT_MOTION_BLUR;
                        }
                }
        }
@@ -228,7 +228,7 @@ void EEVEE_effects_init(EEVEE_Data *vedata)
                effects->blit_texel_size[0] = 1.0f / (float)blitsize[0];
                effects->blit_texel_size[1] = 1.0f / (float)blitsize[1];
 
-               DRWFboTexture tex_blit = {&txl->bloom_blit, DRW_BUF_RGBA_16, 
DRW_TEX_FILTER};
+               DRWFboTexture tex_blit = {&txl->bloom_blit, 
DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER};
                DRW_framebuffer_init(&fbl->bloom_blit_fb, 
&draw_engine_eevee_type,
                                    (int)blitsize[0], (int)blitsize[1],
                                    &tex_blit, 1);
@@ -263,7 +263,7 @@ void EEVEE_effects_init(EEVEE_Data *vedata)
                        effects->downsamp_texel_size[i][0] = 1.0f / 
(float)texsize[0];
                        effects->downsamp_texel_size[i][1] = 1.0f / 
(float)texsize[1];
 
-                       DRWFboTexture tex_bloom = {&txl->bloom_downsample[i], 
DRW_BUF_RGBA_16, DRW_TEX_FILTER};
+                       DRWFboTexture tex_bloom = {&txl->bloom_downsample[i], 
DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER};
                        DRW_framebuffer_init(&fbl->bloom_down_fb[i], 
&draw_engine_eevee_type,
                                            (int)texsize[0], (int)texsize[1],
                                            &tex_bloom, 1);
@@ -276,13 +276,13 @@ void EEVEE_effects_init(EEVEE_Data *vedata)
                        texsize[0] = MAX2(texsize[0], 2);
                        texsize[1] = MAX2(texsize[1], 2);
 
-                       DRWFboTexture tex_bloom = {&txl->bloom_upsample[i], 
DRW_BUF_RGBA_16, DRW_TEX_FILTER};
+                       DRWFboTexture tex_bloom = {&txl->bloom_upsample[i], 
DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER};
                        DRW_framebuffer_init(&fbl->bloom_accum_fb[i], 
&draw_engine_eevee_type,
                                            (int)texsize[0], (int)texsize[1],
                                            &tex_bloom, 1);
                }
 
-               effects->enabled_effects |= EFFECT_BLOOM;
+               enabled_effects |= EFFECT_BLOOM;
        }
 #endif /* ENABLE_EFFECT_BLOOM */
 
@@ -298,16 +298,31 @@ void EEVEE_effects_init(EEVEE_Data *vedata)
 
                        int buffer_size[2] = {(int)viewport_size[0] / 2, 
(int)viewport_size[1] / 2};
 
+                       struct GPUTexture **dof_down_near = &txl->dof_down_near;
+
+                       /* Reuse buffer from Bloom if available */
+                       /* WATCH IT : must have the same size */
+                       if ((enabled_effects & EFFECT_BLOOM) != 0) {
+                               dof_down_near = &txl->bloom_downsample[0]; /* 
should always exists */
+                       }
+                       else if ((effects->enabled_effects & EFFECT_BLOOM) != 
0) {
+                               /* if framebuffer was configured to share 
buffer with bloom last frame */
+                               if (fbl->dof_down_fb != NULL) {
+                                       DRW_framebuffer_free(fbl->dof_down_fb);
+                                       fbl->dof_down_fb = NULL;
+                               }
+                       }
+
                        /* Setup buffers */
-                       DRWFboTexture tex_down[3] = {{&txl->dof_down_near, 
DRW_BUF_RGBA_16, 0},
-                                                    {&txl->dof_down_far, 
DRW_BUF_RGBA_16, 0},
-                                                    {&txl->dof_coc, 
DRW_BUF_RG_16, 0}};
+                       DRWFboTexture tex_down[3] = {{dof_down_near, 
DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER}, /* filter to not interfeer with bloom */
+                                                    {&txl->dof_down_far, 
DRW_TEX_RGB_11_11_10, 0},
+                                                    {&txl->dof_coc, 
DRW_TEX_RG_16, 0}};
                        DRW_framebuffer_init(&fbl->dof_down_fb, 
&draw_engine_eevee_type, buffer_size[0], buffer_size[1], tex_down, 3);
 
-                       DRWFboTexture tex_scatter_far = {&txl->dof_far_blur, 
DRW_BUF_RGBA_16, DRW_TEX_FILTER};
+                       DRWFboTexture tex_scatter_far = {&txl->dof_far_blur, 
DRW_TEX_RGBA_16, DRW_TEX_FILTER};
                        DRW_framebuffer_init(&fbl->dof_scatter_far_fb, 
&draw_engine_eevee_type, buffer_size[0], buffer_size[1], &tex_scatter_far, 1);
 
-                       DRWFboTexture tex_scatter_near = {&txl->dof_near_blur, 
DRW_BUF_RGBA_16, DRW_TEX_FILTER};
+                       DRWFboTexture tex_scatter_near = {&txl->dof_near_blur, 
DRW_TEX_RGBA_16, DRW_TEX_FILTER};
                        DRW_framebuffer_init(&fbl->dof_scatter_near_fb, 
&draw_engine_eevee_type, buffer_size[0], buffer_size[1], &tex_scatter_near, 1);
 
                        /* Parameters */
@@ -341,15 +356,17 @@ void EEVEE_effects_init(EEVEE_Data *vedata)
                        effects->dof_bokeh[2] = ratio;
                        effects->dof_bokeh[3] = 
BKE_collection_engine_property_value_get_float(props, "bokeh_max_size");
 
-                       effects->enabled_effects |= EFFECT_DOF;
+                       enabled_effects |= EFFECT_DOF;
                }
        }
 #endif /* ENABLE_EFFECT_DOF */
 
+       effects->enabled_effects = enabled_effects;
+
        /* Only allocate if at least one effect is activated */
        if (effects->enabled_effects != 0) {
                /* Ping Pong buffer */
-               DRWFboTexture tex = {&txl->color_post, DRW_BUF_RGBA_16, 
DRW_TEX_FILTER};
+               DRWFboTexture tex = {&txl->color_post, DRW_TEX_RGB_11_11_10, 
DRW_TEX_FILTER};
 
                DRW_framebuffer_init(&fbl->effect_fb, &draw_engine_eevee_type,
                                    (int)viewport_size[0], 
(int)viewport_size[1],
@@ -538,7 +555,13 @@ void EEVEE_draw_effects(EEVEE_Data *vedata)
                DRW_draw_pass(psl->dof_scatter);
 
                /* Scatter Near */
-               effects->unf_source_buffer = txl->dof_down_near;
+               if ((effects->enabled_effects & EFFECT_BLOOM) != 0) {
+                       /* Reuse bloom half res buffer */
+                       effects->unf_source_buffer = txl->bloom_downsample[0];
+               }
+               else {
+                       effects->unf_source_buffer = txl->dof_down_near;
+               }
                copy_v2_fl2(effects->dof_layer_select, 1.0f, 0.0f);
                DRW_framebuffer_bind(fbl->dof_scatter_near_fb);
                DRW_framebuffer_clear(true, false, false, clear_col, 0.0f);
diff --git a/source/blender/draw/engines/eevee/eevee_engine.c 
b/source/blender/draw/engines/eevee/eevee_engine.c
index 7311ec5a459..9b4a7a15630 100644
--- a/source/blender/draw/engines/eevee/eevee_engine.c
+++ b/source/blender/draw/engines/eevee/eevee_engine.c
@@ -165,7 +165,7 @@ static struct GPUTexture *create_ggx_lut_texture(int 
UNUSED(w), int UNUSED(h))
 
        tex = DRW_texture_create_2D(w, h, DRW_TEX_RG_16, DRW_TEX_FILTER, (float 
*)texels);
 
-       DRWFboTexture tex_filter = {&tex, DRW_BUF_RG_16, DRW_TEX_FILTER};
+       DRWFboTexture tex_filter = {&tex, DRW_TEX_RG_16, DRW_TEX_FILTER};
        DRW_framebuffer_init(&fb, &draw_engine_eevee_type, w, h, &tex_filter, 
1);
 
        DRW_framebuffer_bind(fb);
@@ -212,7 +212,7 @@ static void EEVEE_engine_init(void *ved)
        EEVEE_FramebufferList *fbl = vedata->fbl;
        EEVEE_StorageList *stl = vedata->stl;
 
-       DRWFboTexture tex = {&txl->color, DRW_BUF_RGBA_16, DRW_TEX_FILTER};
+       DRWFboTexture tex = {&txl->color, DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER};
 
        const float *viewport_size = DRW_viewport_size_get();
        DRW_framebuffer_init(&fbl->main, &draw_engine_eevee_type,
diff --git a/source/blender/draw/engines/eevee/eevee_lights.c 
b/source/blender/draw/engines/eevee/eevee_lights.c
index bec3d8a047a..aeeb25ca1c0 100644
--- a/source/blender/draw/engines/eevee/eevee_lights.c
+++ b/source/blender/draw/engines/eevee/eevee_lights.c
@@ -167,13 +167,13 @@ void EEVEE_lights_cache_finish(EEVEE_StorageList *stl, 
EEVEE_TextureList *txl, E
                }
        }
 
-       DRWFboTexture tex_cube = {&txl->shadow_depth_cube_pool, 
DRW_BUF_DEPTH_24, DRW_TEX_FILTER | DRW_TEX_COMPARE};
+       DRWFboTexture tex_cube = {&txl->shadow_depth_cube_pool, 
DRW_TEX_DEPTH_24, DRW_TEX_FILTER | DRW_TEX_COMPARE};
        DRW_framebuffer_init(&fbl->shadow_cube_fb, &draw_engine_eevee_type, 
512, 512, &tex_cube, 1);
 
-       DRWFboTexture tex_map = {&txl->shadow_depth_map_pool, DRW_BUF_DEPTH_24, 
DRW_TEX_FILTER | DRW_TEX_COMPARE};
+       DRWFboTexture tex_map = {&txl->shadow_depth_map_pool, DRW_TEX_DEPTH_24, 
DRW_TEX_FILTER | DRW_TEX_COMPARE};
        DRW_framebuffer_init(&fbl->shadow_map_fb, &draw_engine_eevee_type, 512, 
512, &tex_map, 1);
 
-       DRWFboTexture tex_cascade = {&txl->shadow_depth_cascade_pool, 
DRW_BUF_DEPTH_24, DRW_TEX_FILTER | DRW_TEX_COMPARE};
+       DRWFboTexture tex_cascade = {&txl->shadow_depth_cascade_pool, 
DRW_TEX_DEPTH_24, DRW_TEX_FILTER | DRW_TEX_COMPARE};
        DRW_framebuffer_init(&fbl->shadow_cascade_fb, &draw_engine_eevee_type, 
512, 512, &tex_cascade, 1);
 }
 
diff --git a/source/blender/draw/engines/eevee/eevee_probes.c 
b/source/blender/draw/engines/eevee/eevee_probes.c
index b3ca21d17cc..8a97373f9e4 100644
--- a/source/blender/draw/engines/eevee/eevee_probes.c
+++ b/source/blender/draw/engines/eevee/eevee_probes.c
@@ -54,53 +54,26 @@ void EEVEE_probes_init(EEVEE_Data *vedata)
        }
 
        if (!txl->probe_rt) {
-               float *test_tex;
-               const float fac

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to