[Bf-blender-cvs] [8301b264524] blender2.8: EEVEE: Fix bad framebuffer configuration

Clément Foucault noreply at git.blender.org
Thu Mar 29 13:37:29 CEST 2018


Commit: 8301b2645249a2522d817c77e295d7de139af5e7
Author: Clément Foucault
Date:   Thu Mar 29 13:43:23 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB8301b2645249a2522d817c77e295d7de139af5e7

EEVEE: Fix bad framebuffer configuration

Was causing black / corrupted scene because of broken downsample

Add a debug check to not run into this problem again.

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

M	source/blender/draw/engines/eevee/eevee_effects.c
M	source/blender/gpu/intern/gpu_framebuffer.c

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

diff --git a/source/blender/draw/engines/eevee/eevee_effects.c b/source/blender/draw/engines/eevee/eevee_effects.c
index 2cb02a9ad7b..977eb14a1bb 100644
--- a/source/blender/draw/engines/eevee/eevee_effects.c
+++ b/source/blender/draw/engines/eevee/eevee_effects.c
@@ -170,16 +170,13 @@ void EEVEE_effects_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, Object
 	if (GPU_type_matches(GPU_DEVICE_INTEL, GPU_OS_ANY, GPU_DRIVER_ANY)) {
 		/* Intel gpu seems to have problem rendering to only depth format */
 		DRW_texture_ensure_2D(&txl->maxzbuffer, size[0], size[1], DRW_TEX_R_32, DRW_TEX_MIPMAP);
-		GPU_framebuffer_ensure_config(&fbl->downsample_fb, {
-			GPU_ATTACHMENT_NONE,
-			GPU_ATTACHMENT_TEXTURE(txl->maxzbuffer)
-		});
 	}
 	else {
 		DRW_texture_ensure_2D(&txl->maxzbuffer, size[0], size[1], DRW_TEX_DEPTH_24, DRW_TEX_MIPMAP);
-		GPU_framebuffer_ensure_config(&fbl->downsample_fb, {
-			GPU_ATTACHMENT_TEXTURE(txl->maxzbuffer)
-		});
+	}
+
+	if (fbl->downsample_fb == NULL) {
+		fbl->downsample_fb = GPU_framebuffer_create();
 	}
 
 	/**
@@ -363,6 +360,7 @@ void EEVEE_create_minmax_buffer(EEVEE_Data *vedata, GPUTexture *depth_src, int l
 
 	/* Create lower levels */
 	GPU_framebuffer_recursive_downsample(fbl->downsample_fb, 8, &max_downsample_cb, vedata);
+	GPU_framebuffer_texture_detach(fbl->downsample_fb, txl->maxzbuffer);
 	DRW_stats_group_end();
 
 	/* Restore */
@@ -381,6 +379,7 @@ void EEVEE_downsample_buffer(EEVEE_Data *vedata, GPUTexture *texture_src, int le
 	DRW_stats_group_start("Downsample buffer");
 	GPU_framebuffer_texture_attach(fbl->downsample_fb, texture_src, 0, 0);
 	GPU_framebuffer_recursive_downsample(fbl->downsample_fb, level, &simple_downsample_cb, vedata);
+	GPU_framebuffer_texture_detach(fbl->downsample_fb, texture_src);
 	DRW_stats_group_end();
 }
 
@@ -396,6 +395,7 @@ void EEVEE_downsample_cube_buffer(EEVEE_Data *vedata, GPUTexture *texture_src, i
 	DRW_stats_group_start("Downsample Cube buffer");
 	GPU_framebuffer_texture_attach(fbl->downsample_fb, texture_src, 0, 0);
 	GPU_framebuffer_recursive_downsample(fbl->downsample_fb, level, &simple_downsample_cube_cb, vedata);
+	GPU_framebuffer_texture_detach(fbl->downsample_fb, texture_src);
 	DRW_stats_group_end();
 }
 
diff --git a/source/blender/gpu/intern/gpu_framebuffer.c b/source/blender/gpu/intern/gpu_framebuffer.c
index 458f2a1e031..e016ab358e2 100644
--- a/source/blender/gpu/intern/gpu_framebuffer.c
+++ b/source/blender/gpu/intern/gpu_framebuffer.c
@@ -616,6 +616,8 @@ void GPU_framebuffer_recursive_downsample(
 			}
 		}
 
+		BLI_assert(GPU_framebuffer_check_valid(fb, NULL));
+
 		glViewport(0, 0, current_dim[0], current_dim[1]);
 		callback(userData, i);



More information about the Bf-blender-cvs mailing list