Skip to content

Commit cbc3aa3

Browse files
committed
Merge pull request #119970 from blueskythlikesclouds/area-light-cluster-spec-constant
Put area light cluster iterations behind a spec constant.
2 parents 4d3bfd2 + 48f9cf1 commit cbc3aa3

5 files changed

Lines changed: 15 additions & 1 deletion

File tree

servers/rendering/renderer_rd/cluster_builder_rd.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,11 @@ class ClusterBuilderRD {
415415
render_element_count++;
416416
}
417417

418+
_FORCE_INLINE_ uint32_t get_cluster_count_by_type(ElementType p_element_type) const {
419+
DEV_ASSERT(p_element_type < ELEMENT_TYPE_MAX);
420+
return cluster_count_by_type[p_element_type];
421+
}
422+
418423
void bake_cluster();
419424
void debug(ElementType p_element);
420425

servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2181,6 +2181,10 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co
21812181
}
21822182
_pre_opaque_render(p_render_data, using_ssao, using_ssil, using_ssr, using_sdfgi || using_voxelgi, normal_roughness_views, rb_data.is_valid() && rb_data->has_voxelgi() ? rb_data->get_voxelgi() : RID());
21832183

2184+
if (current_cluster_builder) {
2185+
base_specialization.cluster_has_area_light = current_cluster_builder->get_cluster_count_by_type(ClusterBuilderRD::ELEMENT_TYPE_AREA_LIGHT) != 0;
2186+
}
2187+
21842188
RENDER_TIMESTAMP("Render Opaque Pass");
21852189

21862190
RD::get_singleton()->draw_command_begin_label("Render Opaque Pass");

servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ class SceneShaderForwardClustered {
127127
uint32_t multimesh_has_color : 1;
128128
uint32_t multimesh_has_custom_data : 1;
129129
uint32_t fog_use_legacy_blending : 1;
130+
uint32_t cluster_has_area_light : 1;
130131
};
131132
};
132133

servers/rendering/renderer_rd/shaders/forward_clustered/scene_forward_clustered.glsl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2817,7 +2817,7 @@ void fragment_shader(in SceneData scene_data) {
28172817
}
28182818
}
28192819

2820-
{ // area lights
2820+
if (sc_cluster_has_area_light()) { // area lights
28212821

28222822
uint cluster_area_offset = cluster_offset + implementation_data.cluster_type_size * 2;
28232823

servers/rendering/renderer_rd/shaders/forward_clustered/scene_forward_clustered_inc.glsl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,10 @@ bool sc_fog_use_legacy_blending() {
142142
return ((sc_packed_1() >> 4) & 1U) != 0;
143143
}
144144

145+
bool sc_cluster_has_area_light() {
146+
return ((sc_packed_1() >> 5) & 1U) != 0;
147+
}
148+
145149
float sc_luminance_multiplier() {
146150
// Not used in clustered renderer but we share some code with the mobile renderer that requires this.
147151
return 1.0;

0 commit comments

Comments
 (0)