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
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to