[Bf-blender-cvs] [13687e89d81] blender2.8: GPUViewport: Fix huge memory leak.

Clément Foucault noreply at git.blender.org
Thu May 18 20:32:41 CEST 2017


Commit: 13687e89d81518cad25a8e831bbcd20895dd6c60
Author: Clément Foucault
Date:   Thu May 18 20:32:06 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB13687e89d81518cad25a8e831bbcd20895dd6c60

GPUViewport: Fix huge memory leak.

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

M	source/blender/gpu/intern/gpu_viewport.c

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

diff --git a/source/blender/gpu/intern/gpu_viewport.c b/source/blender/gpu/intern/gpu_viewport.c
index a965d4ef135..49c8d37f6f1 100644
--- a/source/blender/gpu/intern/gpu_viewport.c
+++ b/source/blender/gpu/intern/gpu_viewport.c
@@ -246,6 +246,27 @@ GPUTexture *GPU_viewport_texture_pool_query(GPUViewport *viewport, void *engine,
 	return tex;
 }
 
+static void gpu_viewport_texture_pool_clear_users(GPUViewport *viewport)
+{
+	ViewportTempTexture *tmp_tex_next;
+
+	for (ViewportTempTexture *tmp_tex = viewport->tex_pool.first; tmp_tex; tmp_tex = tmp_tex_next) {
+		tmp_tex_next = tmp_tex->next;
+		bool no_user = true;
+		for (int i = 0; i < MAX_ENGINE_BUFFER_SHARING; ++i) {
+			if (tmp_tex->user[i] != NULL) {
+				tmp_tex->user[i] = NULL;
+				no_user = false;
+			}
+		}
+
+		if (no_user) {
+			GPU_texture_free(tmp_tex->texture);
+			BLI_freelinkN(&viewport->tex_pool, tmp_tex);
+		}
+	}
+}
+
 static void gpu_viewport_texture_pool_free(GPUViewport *viewport)
 {
 	for (ViewportTempTexture *tmp_tex = viewport->tex_pool.first; tmp_tex; tmp_tex = tmp_tex->next) {
@@ -306,6 +327,8 @@ void GPU_viewport_bind(GPUViewport *viewport, const rcti *rect)
 		}
 	}
 
+	gpu_viewport_texture_pool_clear_users(viewport);
+
 	if (!dfbl->default_fb) {
 		bool ok = true;
 		viewport->size[0] = rect_w;




More information about the Bf-blender-cvs mailing list