[Bf-blender-cvs] [3e10785c604] tmp-eevee-shadowmap-refactor: Cleanup: EEVEE: Split eevee_lights.c into smaller files

Clément Foucault noreply at git.blender.org
Mon Sep 2 16:53:42 CEST 2019


Commit: 3e10785c604e091d08b243f107267d30ce096a10
Author: Clément Foucault
Date:   Sat Aug 31 23:49:25 2019 +0200
Branches: tmp-eevee-shadowmap-refactor
https://developer.blender.org/rB3e10785c604e091d08b243f107267d30ce096a10

Cleanup: EEVEE: Split eevee_lights.c into smaller files

Also have some const correctness fix and some header cleanup.

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

M	source/blender/draw/CMakeLists.txt
M	source/blender/draw/engines/eevee/eevee_engine.c
M	source/blender/draw/engines/eevee/eevee_lightcache.c
M	source/blender/draw/engines/eevee/eevee_lightprobes.c
M	source/blender/draw/engines/eevee/eevee_lights.c
M	source/blender/draw/engines/eevee/eevee_materials.c
M	source/blender/draw/engines/eevee/eevee_private.h
M	source/blender/draw/engines/eevee/eevee_render.c
A	source/blender/draw/engines/eevee/eevee_sampling.c
A	source/blender/draw/engines/eevee/eevee_shadows.c
A	source/blender/draw/engines/eevee/eevee_shadows_cascade.c
A	source/blender/draw/engines/eevee/eevee_shadows_cube.c

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

diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 6402fe457b4..50851c41770 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -103,7 +103,11 @@ set(SRC
   engines/eevee/eevee_occlusion.c
   engines/eevee/eevee_render.c
   engines/eevee/eevee_screen_raytrace.c
+  engines/eevee/eevee_sampling.c
   engines/eevee/eevee_shaders.c
+  engines/eevee/eevee_shadows.c
+  engines/eevee/eevee_shadows_cube.c
+  engines/eevee/eevee_shadows_cascade.c
   engines/eevee/eevee_subsurface.c
   engines/eevee/eevee_temporal_sampling.c
   engines/eevee/eevee_volumes.c
diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c
index f2b8eb042ae..a1096390bce 100644
--- a/source/blender/draw/engines/eevee/eevee_engine.c
+++ b/source/blender/draw/engines/eevee/eevee_engine.c
@@ -84,7 +84,7 @@ static void eevee_engine_init(void *ved)
   /* EEVEE_effects_init needs to go first for TAA */
   EEVEE_effects_init(sldata, vedata, camera, false);
   EEVEE_materials_init(sldata, stl, fbl);
-  EEVEE_lights_init(sldata);
+  EEVEE_shadows_init(sldata);
   EEVEE_lightprobes_init(sldata, vedata);
 }
 
@@ -139,7 +139,7 @@ void EEVEE_cache_populate(void *vedata, Object *ob)
   }
 
   if (cast_shadow) {
-    EEVEE_lights_cache_shcaster_object_add(sldata, ob);
+    EEVEE_shadows_caster_register(sldata, ob);
   }
 }
 
@@ -223,7 +223,7 @@ static void eevee_draw_background(void *vedata)
 
     /* Refresh shadows */
     DRW_stats_group_start("Shadows");
-    EEVEE_draw_shadows(sldata, vedata, stl->effects->taa_view);
+    EEVEE_shadows_draw(sldata, vedata, stl->effects->taa_view);
     DRW_stats_group_end();
 
     if (((stl->effects->enabled_effects & EFFECT_TAA) != 0) &&
@@ -475,7 +475,7 @@ static void eevee_engine_free(void)
   EEVEE_depth_of_field_free();
   EEVEE_effects_free();
   EEVEE_lightprobes_free();
-  EEVEE_lights_free();
+  EEVEE_shadows_free();
   EEVEE_materials_free();
   EEVEE_mist_free();
   EEVEE_motion_blur_free();
diff --git a/source/blender/draw/engines/eevee/eevee_lightcache.c b/source/blender/draw/engines/eevee/eevee_lightcache.c
index 05aea652591..e32194a11de 100644
--- a/source/blender/draw/engines/eevee/eevee_lightcache.c
+++ b/source/blender/draw/engines/eevee/eevee_lightcache.c
@@ -743,7 +743,7 @@ static void eevee_lightbake_cache_create(EEVEE_Data *vedata, EEVEE_LightBake *lb
 
   EEVEE_effects_init(sldata, vedata, NULL, true);
   EEVEE_materials_init(sldata, stl, fbl);
-  EEVEE_lights_init(sldata);
+  EEVEE_shadows_init(sldata);
   EEVEE_lightprobes_init(sldata, vedata);
 
   EEVEE_effects_cache_init(sldata, vedata);
diff --git a/source/blender/draw/engines/eevee/eevee_lightprobes.c b/source/blender/draw/engines/eevee/eevee_lightprobes.c
index 63594e64df9..2d23359a175 100644
--- a/source/blender/draw/engines/eevee/eevee_lightprobes.c
+++ b/source/blender/draw/engines/eevee/eevee_lightprobes.c
@@ -904,7 +904,7 @@ static void lightbake_render_scene_face(int face, EEVEE_BakeRenderData *user_dat
   struct GPUFrameBuffer **face_fb = user_data->face_fb;
 
   /* Be sure that cascaded shadow maps are updated. */
-  EEVEE_draw_shadows(sldata, user_data->vedata, views[face]);
+  EEVEE_shadows_draw(sldata, user_data->vedata, views[face]);
 
   GPU_framebuffer_bind(face_fb[face]);
   GPU_framebuffer_clear_depth(face_fb[face], 1.0f);
@@ -962,7 +962,7 @@ static void lightbake_render_scene_reflected(int layer, EEVEE_BakeRenderData *us
   DRW_stats_group_start("Planar Reflection");
 
   /* Be sure that cascaded shadow maps are updated. */
-  EEVEE_draw_shadows(sldata, vedata, stl->g_data->planar_views[layer]);
+  EEVEE_shadows_draw(sldata, vedata, stl->g_data->planar_views[layer]);
 
   GPU_framebuffer_bind(fbl->planarref_fb);
   GPU_framebuffer_clear_depth(fbl->planarref_fb, 1.0);
diff --git a/source/blender/draw/engines/eevee/eevee_lights.c b/source/blender/draw/engines/eevee/eevee_lights.c
index 7ca9790bda6..48a2dacd2a9 100644
--- a/source/blender/draw/engines/eevee/eevee_lights.c
+++ b/source/blender/draw/engines/eevee/eevee_lights.c
@@ -20,12 +20,7 @@
  * \ingroup DNA
  */
 
-#include "DRW_render.h"
-
-#include "BLI_bitmap.h"
-#include "BLI_dynstr.h"
-#include "BLI_rand.h"
-#include "BLI_rect.h"
+#include "BLI_sys_types.h" /* bool */
 
 #include "BKE_object.h"
 
@@ -33,368 +28,20 @@
 
 #include "eevee_private.h"
 
-#define SH_CASTER_ALLOC_CHUNK 32
-
-// #define DEBUG_CSM
-// #define DEBUG_SHADOW_DISTRIBUTION
-
-static struct {
-  struct GPUShader *shadow_sh;
-} e_data = {NULL}; /* Engine data */
-
-extern char datatoc_shadow_vert_glsl[];
-extern char datatoc_shadow_frag_glsl[];
-
-extern char datatoc_common_view_lib_glsl[];
-
-/* Prototypes */
-static void eevee_light_setup(Object *ob, EEVEE_Light *evli);
-static void eevee_contact_shadow_setup(const Light *la, EEVEE_Shadow *evsh);
-static float light_attenuation_radius_get(Light *la, float light_threshold);
-
-/* *********** FUNCTIONS *********** */
-
-void EEVEE_lights_init(EEVEE_ViewLayerData *sldata)
-{
-  const uint shadow_ubo_size = sizeof(EEVEE_Shadow) * MAX_SHADOW +
-                               sizeof(EEVEE_ShadowCube) * MAX_SHADOW_CUBE +
-                               sizeof(EEVEE_ShadowCascade) * MAX_SHADOW_CASCADE;
-
-  const DRWContextState *draw_ctx = DRW_context_state_get();
-  const Scene *scene_eval = DEG_get_evaluated_scene(draw_ctx->depsgraph);
-
-  if (!e_data.shadow_sh) {
-    e_data.shadow_sh = DRW_shader_create_with_lib(datatoc_shadow_vert_glsl,
-                                                  NULL,
-                                                  datatoc_shadow_frag_glsl,
-                                                  datatoc_common_view_lib_glsl,
-                                                  NULL);
-  }
-
-  if (!sldata->lights) {
-    sldata->lights = MEM_callocN(sizeof(EEVEE_LightsInfo), "EEVEE_LightsInfo");
-    sldata->light_ubo = DRW_uniformbuffer_create(sizeof(EEVEE_Light) * MAX_LIGHT, NULL);
-    sldata->shadow_ubo = DRW_uniformbuffer_create(shadow_ubo_size, NULL);
-
-    for (int i = 0; i < 2; ++i) {
-      sldata->shcasters_buffers[i].bbox = MEM_callocN(
-          sizeof(EEVEE_BoundBox) * SH_CASTER_ALLOC_CHUNK, __func__);
-      sldata->shcasters_buffers[i].update = BLI_BITMAP_NEW(SH_CASTER_ALLOC_CHUNK, __func__);
-      sldata->shcasters_buffers[i].alloc_count = SH_CASTER_ALLOC_CHUNK;
-      sldata->shcasters_buffers[i].count = 0;
-    }
-    sldata->lights->shcaster_frontbuffer = &sldata->shcasters_buffers[0];
-    sldata->lights->shcaster_backbuffer = &sldata->shcasters_buffers[1];
-  }
-
-  /* Flip buffers */
-  SWAP(EEVEE_ShadowCasterBuffer *,
-       sldata->lights->shcaster_frontbuffer,
-       sldata->lights->shcaster_backbuffer);
-
-  int sh_cube_size = scene_eval->eevee.shadow_cube_size;
-  int sh_cascade_size = scene_eval->eevee.shadow_cascade_size;
-  const bool sh_high_bitdepth = (scene_eval->eevee.flag & SCE_EEVEE_SHADOW_HIGH_BITDEPTH) != 0;
-  sldata->lights->soft_shadows = (scene_eval->eevee.flag & SCE_EEVEE_SHADOW_SOFT) != 0;
-
-  EEVEE_LightsInfo *linfo = sldata->lights;
-  if ((linfo->shadow_cube_size != sh_cube_size) ||
-      (linfo->shadow_high_bitdepth != sh_high_bitdepth)) {
-    BLI_assert((sh_cube_size > 0) && (sh_cube_size <= 4096));
-    DRW_TEXTURE_FREE_SAFE(sldata->shadow_cube_pool);
-    CLAMP(sh_cube_size, 1, 4096);
-  }
-
-  if ((linfo->shadow_cascade_size != sh_cascade_size) ||
-      (linfo->shadow_high_bitdepth != sh_high_bitdepth)) {
-    BLI_assert((sh_cascade_size > 0) && (sh_cascade_size <= 4096));
-    DRW_TEXTURE_FREE_SAFE(sldata->shadow_cascade_pool);
-    CLAMP(sh_cascade_size, 1, 4096);
-  }
-
-  linfo->shadow_high_bitdepth = sh_high_bitdepth;
-  linfo->shadow_cube_size = sh_cube_size;
-  linfo->shadow_cascade_size = sh_cascade_size;
-}
-
-void EEVEE_lights_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
-{
-  EEVEE_LightsInfo *linfo = sldata->lights;
-  EEVEE_StorageList *stl = vedata->stl;
-  EEVEE_PassList *psl = vedata->psl;
-
-  EEVEE_ShadowCasterBuffer *backbuffer = linfo->shcaster_backbuffer;
-  EEVEE_ShadowCasterBuffer *frontbuffer = linfo->shcaster_frontbuffer;
-
-  frontbuffer->count = 0;
-  linfo->num_light = 0;
-  linfo->num_cube_layer = 0;
-  linfo->num_cascade_layer = 0;
-  linfo->cube_len = linfo->cascade_len = linfo->shadow_len = 0;
-
-  /* Shadow Casters: Reset flags. */
-  BLI_bitmap_set_all(backbuffer->update, true, backbuffer->alloc_count);
-  /* Is this one needed? */
-  BLI_bitmap_set_all(frontbuffer->update, false, frontbuffer->alloc_count);
-
-  INIT_MINMAX(linfo->shcaster_aabb.min, linfo->shcaster_aabb.max);
-
-  psl->shadow_cube_store_pass = NULL;
-  psl->shadow_cube_store_high_pass = NULL;
-  psl->shadow_cascade_store_pass = NULL;
-  psl->shadow_cascade_store_high_pass = NULL;
-
-  {
-    DRWState state = DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_SHADOW_OFFSET;
-    DRW_PASS_CREATE(psl->shadow_pass, state);
-
-    stl->g_data->shadow_shgrp = DRW_shgroup_create(e_data.shadow_sh, psl->shadow_pass);
-  }
-}
-
-void EEVEE_lights_cache_add(EEVEE_ViewLayerData *sldata, Object *ob)
-{
-  EEVEE_LightsInfo *linfo = sldata->lights;
-
-  /* Step 1 find all lights in the scene and setup them */
-  if (linfo->num_light >= MAX_LIGHT) {
-    printf("Too many lights in the scene !!!\n");
-  }
-  else {
-    const Light *la = (Light *)ob->data;
-
-    /* Early out if light has no power. */
-    if (la->energy == 0.0f || is_zero_v3(&la->r)) {
-      return;
-    }
-
-    EEVEE_Light *evli = linfo->light_data + linfo->num_light;
-    eevee_light_setup(ob, evli);
-
-    if (la->mode & LA_SHADOW) {
-      if (la->type == LA_SUN) {
-        if (linfo->cascade_len < MAX_SHADOW_CASCADE) {
-          EEVEE_Shadow *sh_data = linfo->shadow_data + linfo->shadow_len;
-          EEVEE_ShadowCascade *csm_data = linfo->shadow_cascade_data + linfo->cascade_len;
-          EEVEE_ShadowCascadeRender *csm_render = linfo->shadow_cascade_render +
-                                                  linfo->cascade_len;
-
-          eevee_contact_shadow_setup(la, sh_data);
-
-          linfo->shadow_cascade_light_indices[linfo->cascade_len] = linfo->num_light;
-          evli

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list