[Bf-blender-cvs] [2e766ff7624] blender-v3.1-release: Image Editor: Fix slowdown with 8b colormanaged images.

Jeroen Bakker noreply at git.blender.org
Fri Feb 4 15:32:31 CET 2022


Commit: 2e766ff7624349b65a5d908dc3895ad10b240050
Author: Jeroen Bakker
Date:   Fri Feb 4 15:28:48 2022 +0100
Branches: blender-v3.1-release
https://developer.blender.org/rB2e766ff7624349b65a5d908dc3895ad10b240050

Image Editor: Fix slowdown with 8b colormanaged images.

Byte images are converted to float. Due to an issue how VSE cache is
freeing its images we cannot store these float buffers what leads
to recalculating it for each change in the image editor.

This fix will reduce the slowdown to areas that have the root cause of
the memory leak, so the buffers can be reused between refreshes.

NOTE: The root cause should still be fixed.

Thanks for reporting Sybren!

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

M	source/blender/draw/engines/image/image_drawing_mode.hh

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

diff --git a/source/blender/draw/engines/image/image_drawing_mode.hh b/source/blender/draw/engines/image/image_drawing_mode.hh
index 16d3ff30890..b56f3062901 100644
--- a/source/blender/draw/engines/image/image_drawing_mode.hh
+++ b/source/blender/draw/engines/image/image_drawing_mode.hh
@@ -231,7 +231,7 @@ template<typename TextureMethod> class ScreenSpaceDrawingMode : public AbstractD
       if (iterator.tile_data.tile_buffer == nullptr) {
         continue;
       }
-      const bool float_buffer_created = ensure_float_buffer(*iterator.tile_data.tile_buffer);
+      ensure_float_buffer(*iterator.tile_data.tile_buffer);
       const float tile_width = static_cast<float>(iterator.tile_data.tile_buffer->x);
       const float tile_height = static_cast<float>(iterator.tile_data.tile_buffer->y);
 
@@ -338,10 +338,6 @@ template<typename TextureMethod> class ScreenSpaceDrawingMode : public AbstractD
                                0);
         imb_freerectImbuf_all(&extracted_buffer);
       }
-      /* TODO(jbakker): Find leak when rendering VSE and remove this call. */
-      if (float_buffer_created) {
-        imb_freerectfloatImBuf(iterator.tile_data.tile_buffer);
-      }
     }
   }
 
@@ -419,6 +415,9 @@ template<typename TextureMethod> class ScreenSpaceDrawingMode : public AbstractD
     const int texture_width = texture_buffer.x;
     const int texture_height = texture_buffer.y;
     const bool float_buffer_created = ensure_float_buffer(tile_buffer);
+    /* TODO(jbakker): Find leak when rendering VSE and don't free here. */
+    const bool do_free_float_buffer = float_buffer_created &&
+                                      instance_data.image->type == IMA_TYPE_R_RESULT;
 
     /* IMB_transform works in a non-consistent space. This should be documented or fixed!.
      * Construct a variant of the info_uv_to_texture that adds the texel space
@@ -456,8 +455,7 @@ template<typename TextureMethod> class ScreenSpaceDrawingMode : public AbstractD
                   uv_to_texel,
                   crop_rect_ptr);
 
-    /* TODO(jbakker): Find leak when rendering VSE and remove this call. */
-    if (float_buffer_created) {
+    if (do_free_float_buffer) {
       imb_freerectfloatImBuf(&tile_buffer);
     }
   }



More information about the Bf-blender-cvs mailing list