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. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs