[Bf-blender-cvs] [ad8b187a538] blender2.8: Fix T56803: Indirect lightning bake crashes Blender

Clément Foucault noreply at git.blender.org
Mon Sep 17 12:21:01 CEST 2018


Commit: ad8b187a538d4a52331d6b001ea8c1f1ce3f7758
Author: Clément Foucault
Date:   Mon Sep 17 11:53:43 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBad8b187a538d4a52331d6b001ea8c1f1ce3f7758

Fix T56803: Indirect lightning bake crashes Blender

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

M	source/blender/draw/engines/eevee/eevee_lightcache.c
M	source/blender/draw/intern/DRW_render.h
M	source/blender/draw/intern/draw_manager.c

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

diff --git a/source/blender/draw/engines/eevee/eevee_lightcache.c b/source/blender/draw/engines/eevee/eevee_lightcache.c
index ee962898a79..5ac2257e01a 100644
--- a/source/blender/draw/engines/eevee/eevee_lightcache.c
+++ b/source/blender/draw/engines/eevee/eevee_lightcache.c
@@ -636,6 +636,7 @@ static void eevee_lightbake_delete_resources(EEVEE_LightBake *lbake)
 /* Cache as in draw cache not light cache. */
 static void eevee_lightbake_cache_create(EEVEE_Data *vedata, EEVEE_LightBake *lbake)
 {
+	EEVEE_TextureList *txl = vedata->txl;
 	EEVEE_StorageList *stl = vedata->stl;
 	EEVEE_FramebufferList *fbl = vedata->fbl;
 	EEVEE_ViewLayerData *sldata = EEVEE_view_layer_data_ensure();
@@ -660,6 +661,14 @@ static void eevee_lightbake_cache_create(EEVEE_Data *vedata, EEVEE_LightBake *lb
 		sldata->clip_ubo = DRW_uniformbuffer_create(sizeof(sldata->clip_data), &sldata->clip_data);
 	}
 
+	/* HACK: set txl->color but unset it before Draw Manager frees it. */
+	txl->color = lbake->rt_color;
+	int viewport_size[2] = {
+		GPU_texture_width(txl->color),
+		GPU_texture_height(txl->color)
+	};
+	DRW_render_viewport_size_set(viewport_size);
+
 	EEVEE_effects_init(sldata, vedata, NULL);
 	EEVEE_materials_init(sldata, stl, fbl);
 	EEVEE_lights_init(sldata);
@@ -685,6 +694,8 @@ static void eevee_lightbake_cache_create(EEVEE_Data *vedata, EEVEE_LightBake *lb
 	EEVEE_lights_cache_finish(sldata);
 	EEVEE_lightprobes_cache_finish(sldata, vedata);
 
+	txl->color = NULL;
+
 	DRW_render_instance_buffer_finish();
 	DRW_hair_update();
 }
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index eedac5e43c2..2e0de3b903b 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -482,6 +482,7 @@ void DRW_render_object_iter(
 	void *vedata, struct RenderEngine *engine, struct Depsgraph *depsgraph,
 	void (*callback)(void *vedata, struct Object *ob, struct RenderEngine *engine, struct Depsgraph *depsgraph));
 void DRW_render_instance_buffer_finish(void);
+void DRW_render_viewport_size_set(int size[2]);
 
 void DRW_custom_pipeline(
         DrawEngineType *draw_engine_type,
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index b5729d2ef55..221702b0912 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -423,6 +423,13 @@ void DRW_engine_viewport_data_size_get(
 	}
 }
 
+/* WARNING: only use for custom pipeline. 99% of the time, you don't want to use this. */
+void DRW_render_viewport_size_set(int size[2])
+{
+	DST.size[0] = size[0];
+	DST.size[1] = size[1];
+}
+
 const float *DRW_viewport_size_get(void)
 {
 	return DST.size;



More information about the Bf-blender-cvs mailing list