[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