[Bf-blender-cvs] [9d77b5d5910] blender2.8: Eevee: Remove uses of DRW_shgroup_call_dynamic_add_empty in shadows and probe rendering.

Clément Foucault noreply at git.blender.org
Mon Nov 6 17:43:20 CET 2017


Commit: 9d77b5d5910b65bed88817169d5444cfb189eb63
Author: Clément Foucault
Date:   Mon Nov 6 16:54:33 2017 +0100
Branches: blender2.8
https://developer.blender.org/rB9d77b5d5910b65bed88817169d5444cfb189eb63

Eevee: Remove uses of DRW_shgroup_call_dynamic_add_empty in shadows and probe rendering.

This was adding an unecessary high number of DRWCall per objects.

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

M	source/blender/draw/engines/eevee/eevee_effects.c
M	source/blender/draw/engines/eevee/eevee_lightprobes.c
M	source/blender/draw/engines/eevee/eevee_lights.c
M	source/blender/draw/intern/DRW_render.h

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

diff --git a/source/blender/draw/engines/eevee/eevee_effects.c b/source/blender/draw/engines/eevee/eevee_effects.c
index a01ba6a3acf..e8ccd886630 100644
--- a/source/blender/draw/engines/eevee/eevee_effects.c
+++ b/source/blender/draw/engines/eevee/eevee_effects.c
@@ -214,8 +214,7 @@ void EEVEE_effects_cache_init(EEVEE_SceneLayerData *UNUSED(sldata), EEVEE_Data *
 		DRW_shgroup_uniform_buffer(grp, "source", &e_data.color_src);
 		DRW_shgroup_uniform_float(grp, "texelSize", &e_data.cube_texel_size, 1);
 		DRW_shgroup_uniform_int(grp, "Layer", &zero, 1);
-		for (int i = 0; i < 6; ++i)
-			DRW_shgroup_call_dynamic_add_empty(grp);
+		DRW_shgroup_set_instance_count(grp, 6);
 	}
 
 	{
diff --git a/source/blender/draw/engines/eevee/eevee_lightprobes.c b/source/blender/draw/engines/eevee/eevee_lightprobes.c
index 7b134ab4967..7913689d299 100644
--- a/source/blender/draw/engines/eevee/eevee_lightprobes.c
+++ b/source/blender/draw/engines/eevee/eevee_lightprobes.c
@@ -410,7 +410,7 @@ void EEVEE_lightprobes_cache_init(EEVEE_SceneLayerData *sldata, EEVEE_Data *veda
 		// DRW_shgroup_uniform_texture(grp, "texJitter", e_data.jitter);
 		DRW_shgroup_uniform_texture(grp, "probeHdr", sldata->probe_rt);
 
-		DRW_shgroup_call_dynamic_add_empty(grp);
+		DRW_shgroup_set_instance_count(grp, 1);
 	}
 
 	{
diff --git a/source/blender/draw/engines/eevee/eevee_lights.c b/source/blender/draw/engines/eevee/eevee_lights.c
index 5f25f5ef815..6c1ed277005 100644
--- a/source/blender/draw/engines/eevee/eevee_lights.c
+++ b/source/blender/draw/engines/eevee/eevee_lights.c
@@ -307,16 +307,12 @@ void EEVEE_lights_cache_shcaster_add(EEVEE_SceneLayerData *sldata, EEVEE_PassLis
 	DRWShadingGroup *grp = DRW_shgroup_instance_create(e_data.shadow_sh, psl->shadow_cube_pass, geom);
 	DRW_shgroup_uniform_block(grp, "shadow_render_block", sldata->shadow_render_ubo);
 	DRW_shgroup_uniform_mat4(grp, "ShadowModelMatrix", (float *)obmat);
-
-	for (int i = 0; i < 6; ++i)
-		DRW_shgroup_call_dynamic_add_empty(grp);
+	DRW_shgroup_set_instance_count(grp, 6);
 
 	grp = DRW_shgroup_instance_create(e_data.shadow_sh, psl->shadow_cascade_pass, geom);
 	DRW_shgroup_uniform_block(grp, "shadow_render_block", sldata->shadow_render_ubo);
 	DRW_shgroup_uniform_mat4(grp, "ShadowModelMatrix", (float *)obmat);
-
-	for (int i = 0; i < MAX_CASCADE_NUM; ++i)
-		DRW_shgroup_call_dynamic_add_empty(grp);
+	DRW_shgroup_set_instance_count(grp, MAX_CASCADE_NUM);
 }
 
 void EEVEE_lights_cache_shcaster_material_add(
@@ -333,8 +329,7 @@ void EEVEE_lights_cache_shcaster_material_add(
 	if (alpha_threshold != NULL)
 		DRW_shgroup_uniform_float(grp, "alphaThreshold", alpha_threshold, 1);
 
-	for (int i = 0; i < 6; ++i)
-		DRW_shgroup_call_dynamic_add_empty(grp);
+	DRW_shgroup_set_instance_count(grp, 6);
 
 	grp = DRW_shgroup_material_instance_create(gpumat, psl->shadow_cascade_pass, geom, ob);
 	DRW_shgroup_uniform_block(grp, "shadow_render_block", sldata->shadow_render_ubo);
@@ -343,8 +338,7 @@ void EEVEE_lights_cache_shcaster_material_add(
 	if (alpha_threshold != NULL)
 		DRW_shgroup_uniform_float(grp, "alphaThreshold", alpha_threshold, 1);
 
-	for (int i = 0; i < MAX_CASCADE_NUM; ++i)
-		DRW_shgroup_call_dynamic_add_empty(grp);
+	DRW_shgroup_set_instance_count(grp, MAX_CASCADE_NUM);
 }
 
 void EEVEE_lights_cache_finish(EEVEE_SceneLayerData *sldata)
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 599656ae163..fe489315e97 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -326,9 +326,11 @@ void DRW_shgroup_call_dynamic_add_array(DRWShadingGroup *shgroup, const void *at
 	const void *array[] = {__VA_ARGS__}; \
 	DRW_shgroup_call_dynamic_add_array(shgroup, array, (sizeof(array) / sizeof(*array))); \
 } while (0)
+/* Use this only to make your instances selectable. */
 #define DRW_shgroup_call_dynamic_add_empty(shgroup) do { \
 	DRW_shgroup_call_dynamic_add_array(shgroup, NULL, 0); \
 } while (0)
+/* Use this to set a high number of instances. */
 void DRW_shgroup_set_instance_count(DRWShadingGroup *shgroup, int count);
 
 void DRW_shgroup_state_enable(DRWShadingGroup *shgroup, DRWState state);



More information about the Bf-blender-cvs mailing list