[Bf-blender-cvs] [3578212e462] blender2.8: Eevee: Fix missing UBO binds.

Clément Foucault noreply at git.blender.org
Thu Aug 2 18:36:39 CEST 2018


Commit: 3578212e462d2a67f49d64ce5fb64df43200654f
Author: Clément Foucault
Date:   Thu Aug 2 18:03:47 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB3578212e462d2a67f49d64ce5fb64df43200654f

Eevee: Fix missing UBO binds.

Some of them are unecessary and should be removed from the shader instead.

But for now we need a quick fix for the crashes happening on some platforms.

See T55475.

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

M	source/blender/draw/engines/eevee/eevee_lightprobes.c
M	source/blender/draw/engines/eevee/eevee_lookdev.c
M	source/blender/draw/engines/eevee/eevee_materials.c
M	source/blender/draw/engines/eevee/eevee_screen_raytrace.c
M	source/blender/draw/engines/eevee/eevee_temporal_sampling.c
M	source/blender/draw/engines/eevee/eevee_volumes.c
M	source/blender/draw/engines/eevee/shaders/lamps_lib.glsl

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

diff --git a/source/blender/draw/engines/eevee/eevee_lightprobes.c b/source/blender/draw/engines/eevee/eevee_lightprobes.c
index 691d6ffe6eb..8b021279411 100644
--- a/source/blender/draw/engines/eevee/eevee_lightprobes.c
+++ b/source/blender/draw/engines/eevee/eevee_lightprobes.c
@@ -376,7 +376,10 @@ void EEVEE_lightbake_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata,
 		DRW_shgroup_uniform_texture(grp, "texHammersley", e_data.hammersley);
 		// DRW_shgroup_uniform_texture(grp, "texJitter", e_data.jitter);
 		DRW_shgroup_uniform_texture(grp, "probeHdr", rt_color);
-		DRW_shgroup_call_add(grp, DRW_cache_fullscreen_quad_get(), NULL);
+		DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
+
+		struct GPUBatch *geom = DRW_cache_fullscreen_quad_get();
+		DRW_shgroup_call_add(grp, geom, NULL);
 	}
 
 	{
@@ -394,6 +397,7 @@ void EEVEE_lightbake_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata,
 #endif
 		DRW_shgroup_uniform_float(grp, "intensityFac", &pinfo->intensity_fac, 1);
 		DRW_shgroup_uniform_texture(grp, "probeHdr", rt_color);
+		DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
 
 		struct GPUBatch *geom = DRW_cache_fullscreen_quad_get();
 		DRW_shgroup_call_add(grp, geom, NULL);
@@ -413,6 +417,7 @@ void EEVEE_lightbake_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata,
 		DRW_shgroup_uniform_float(grp, "farClip", &pinfo->far_clip, 1);
 		DRW_shgroup_uniform_texture(grp, "texHammersley", e_data.hammersley);
 		DRW_shgroup_uniform_texture(grp, "probeDepth", rt_depth);
+		DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
 
 		struct GPUBatch *geom = DRW_cache_fullscreen_quad_get();
 		DRW_shgroup_call_add(grp, geom, NULL);
@@ -471,6 +476,13 @@ void EEVEE_lightprobes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedat
 					case GPU_MAT_SUCCESS:
 						grp = DRW_shgroup_material_create(gpumat, psl->probe_background);
 						DRW_shgroup_uniform_float(grp, "backgroundAlpha", &stl->g_data->background_alpha, 1);
+						/* TODO (fclem): remove thoses (need to clean the GLSL files). */
+						DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
+						DRW_shgroup_uniform_block(grp, "grid_block", sldata->grid_ubo);
+						DRW_shgroup_uniform_block(grp, "probe_block", sldata->probe_ubo);
+						DRW_shgroup_uniform_block(grp, "planar_block", sldata->planar_ubo);
+						DRW_shgroup_uniform_block(grp, "light_block", sldata->light_ubo);
+						DRW_shgroup_uniform_block(grp, "shadow_block", sldata->shadow_ubo);
 						DRW_shgroup_call_add(grp, geom, NULL);
 						break;
 					default:
diff --git a/source/blender/draw/engines/eevee/eevee_lookdev.c b/source/blender/draw/engines/eevee/eevee_lookdev.c
index 345a28590c6..deb724c9ae6 100644
--- a/source/blender/draw/engines/eevee/eevee_lookdev.c
+++ b/source/blender/draw/engines/eevee/eevee_lookdev.c
@@ -112,18 +112,14 @@ void EEVEE_lookdev_cache_init(
 			if (!pinfo) {
 				/* Do not fadeout when doing probe rendering, only when drawing the background */
 				DRW_shgroup_uniform_float(*grp, "studioLightBackground", &v3d->shading.studiolight_background, 1);
-				if (v3d->shading.studiolight_background > 0.0f) {
-					BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_EQUIRECTANGULAR_IRRADIANCE_GPUTEXTURE);
-					tex = sl->equirectangular_irradiance_gputexture;
-				}
+				BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_EQUIRECTANGULAR_IRRADIANCE_GPUTEXTURE);
+				tex = sl->equirectangular_irradiance_gputexture;
 			}
 			else {
 				BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_EQUIRECTANGULAR_RADIANCE_GPUTEXTURE);
 				tex = sl->equirectangular_radiance_gputexture;
 			}
-			if (tex != NULL) {
-				DRW_shgroup_uniform_texture(*grp, "image", tex);
-			}
+			DRW_shgroup_uniform_texture(*grp, "image", tex);
 
 			/* Do we need to recalc the lightprobes? */
 			if (pinfo &&
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
index 39f7443145f..fd097aa783c 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -971,6 +971,13 @@ void EEVEE_materials_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
 					case GPU_MAT_SUCCESS:
 						grp = DRW_shgroup_material_create(gpumat, psl->background_pass);
 						DRW_shgroup_uniform_float(grp, "backgroundAlpha", &stl->g_data->background_alpha, 1);
+						/* TODO (fclem): remove thoses (need to clean the GLSL files). */
+						DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
+						DRW_shgroup_uniform_block(grp, "grid_block", sldata->grid_ubo);
+						DRW_shgroup_uniform_block(grp, "probe_block", sldata->probe_ubo);
+						DRW_shgroup_uniform_block(grp, "planar_block", sldata->planar_ubo);
+						DRW_shgroup_uniform_block(grp, "light_block", sldata->light_ubo);
+						DRW_shgroup_uniform_block(grp, "shadow_block", sldata->shadow_ubo);
 						DRW_shgroup_call_add(grp, geom, NULL);
 						break;
 					case GPU_MAT_QUEUED:
@@ -998,10 +1005,12 @@ void EEVEE_materials_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
 		DRWState state = DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_WIRE;
 		psl->depth_pass = DRW_pass_create("Depth Pass", state);
 		stl->g_data->depth_shgrp = DRW_shgroup_create(e_data.default_prepass_sh, psl->depth_pass);
+		DRW_shgroup_uniform_block(stl->g_data->depth_shgrp, "clip_block", sldata->clip_ubo);
 
 		state = DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_CULL_BACK;
 		psl->depth_pass_cull = DRW_pass_create("Depth Pass Cull", state);
 		stl->g_data->depth_shgrp_cull = DRW_shgroup_create(e_data.default_prepass_sh, psl->depth_pass_cull);
+		DRW_shgroup_uniform_block(stl->g_data->depth_shgrp_cull, "clip_block", sldata->clip_ubo);
 
 		state = DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_CLIP_PLANES | DRW_STATE_WIRE;
 		psl->depth_pass_clip = DRW_pass_create("Depth Pass Clip", state);
diff --git a/source/blender/draw/engines/eevee/eevee_screen_raytrace.c b/source/blender/draw/engines/eevee/eevee_screen_raytrace.c
index b882db174b0..46229c2dc9b 100644
--- a/source/blender/draw/engines/eevee/eevee_screen_raytrace.c
+++ b/source/blender/draw/engines/eevee/eevee_screen_raytrace.c
@@ -227,6 +227,8 @@ void EEVEE_screen_raytrace_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *v
 		DRW_shgroup_uniform_texture_ref(grp, "maxzBuffer", &txl->maxzbuffer);
 		DRW_shgroup_uniform_texture_ref(grp, "planarDepth", &vedata->txl->planar_depth);
 		DRW_shgroup_uniform_texture(grp, "utilTex", EEVEE_materials_get_util_tex());
+		DRW_shgroup_uniform_block(grp, "grid_block", sldata->grid_ubo);
+		DRW_shgroup_uniform_block(grp, "probe_block", sldata->probe_ubo);
 		DRW_shgroup_uniform_block(grp, "planar_block", sldata->planar_ubo);
 		DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
 		if (!effects->reflection_trace_full) {
@@ -245,6 +247,7 @@ void EEVEE_screen_raytrace_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *v
 		DRW_shgroup_uniform_texture_ref(grp, "hitBuffer", &effects->ssr_hit_output);
 		DRW_shgroup_uniform_texture_ref(grp, "pdfBuffer", &effects->ssr_pdf_output);
 		DRW_shgroup_uniform_texture_ref(grp, "prevColorBuffer", &txl->color_double_buffer);
+		DRW_shgroup_uniform_block(grp, "grid_block", sldata->grid_ubo);
 		DRW_shgroup_uniform_block(grp, "probe_block", sldata->probe_ubo);
 		DRW_shgroup_uniform_block(grp, "planar_block", sldata->planar_ubo);
 		DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
diff --git a/source/blender/draw/engines/eevee/eevee_temporal_sampling.c b/source/blender/draw/engines/eevee/eevee_temporal_sampling.c
index 76e11e02d26..6cb2d1d3b53 100644
--- a/source/blender/draw/engines/eevee/eevee_temporal_sampling.c
+++ b/source/blender/draw/engines/eevee/eevee_temporal_sampling.c
@@ -299,11 +299,11 @@ void EEVEE_temporal_sampling_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data
 
 		DRW_shgroup_uniform_texture_ref(grp, "colorHistoryBuffer", &txl->color_double_buffer);
 		DRW_shgroup_uniform_texture_ref(grp, "colorBuffer", &txl->color);
+		DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
 
 		if (effects->enabled_effects & EFFECT_TAA_REPROJECT) {
 			// DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
 			DRW_shgroup_uniform_texture_ref(grp, "velocityBuffer", &effects->velocity_tx);
-			DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
 		}
 		else {
 			DRW_shgroup_uniform_float(grp, "alpha", &effects->taa_alpha, 1);
diff --git a/source/blender/draw/engines/eevee/eevee_volumes.c b/source/blender/draw/engines/eevee/eevee_volumes.c
index d0cea65d05e..4f163af2202 100644
--- a/source/blender/draw/engines/eevee/eevee_volumes.c
+++ b/source/blender/draw/engines/eevee/eevee_volumes.c
@@ -397,6 +397,12 @@ void EEVEE_volumes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
 
 			if (grp) {
 				DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
+				/* TODO (fclem): remove thoses (need to clean the GLSL files). */
+				DRW_shgroup_uniform_block(grp, "grid_block", sldata->grid_ubo);
+				DRW_shgroup_uniform_block(grp, "probe_block", sldata->probe_ubo);
+				DRW_shgroup_uniform_block(grp, "planar_block", sldata->planar_ubo);
+				DRW_shgroup_uniform_block(grp, "light_block", sldata->light_ubo);
+				DRW_shgroup_uniform_block(grp, "shadow_block", sldata->shadow_ubo);
 			}
 		}
 
diff --git a/source/blender/draw/engines/eevee/shaders/lamps_lib.glsl b/source/blender/draw/engines/eevee/shaders/lamps_lib.glsl
index ec5f6f4472f..7281eb4cf2d 100644
--- a/source/blender/draw/engines/eevee/shaders/lamps_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/lamps_lib.glsl
@@ -318,6 +318,8 @@ float light_specular(LightData ld, vec4 ltc_mat, vec3 N, vec3 V, vec4 l_vector)
 #define SSS_LUT_SIZE 64.0
 #define SSS_LUT_SCALE ((SSS_LUT_SIZE - 1.0) / float(SSS_LUT_SIZE))
 #define SSS_LUT_BIAS (0.5 / float(SSS_LUT_SIZE))
+
+#ifdef USE_TRANSLUCENCY
 layout(std140) uniform sssProfile {
 	vec4 kernel[MAX_SSS_SAMPLES];
 	vec4 radii_max_radius;
@@ -330,6 +332,7 @@ vec3 sss_profile(float s) {
 	s /= radii_max_radius.w;
 	return texture(sssTexProfile

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list