diff options
author | Dario <dariosamo@gmail.com> | 2024-11-04 13:53:42 -0300 |
---|---|---|
committer | Dario <dariosamo@gmail.com> | 2024-11-04 14:35:40 -0300 |
commit | 53099c56f0b00b753823dfc5f68cb7bf0da64562 (patch) | |
tree | bb2c1aa0456fc2cf90fd134362ad3a534fab7677 /servers/rendering/renderer_rd/forward_clustered | |
parent | 1bffd6c73b44b85e5889f54e14b2193940cf5bb1 (diff) | |
download | redot-engine-53099c56f0b00b753823dfc5f68cb7bf0da64562.tar.gz |
Add multiple specialization constants to Forward+ and Mobile.
Diffstat (limited to 'servers/rendering/renderer_rd/forward_clustered')
3 files changed, 19 insertions, 1 deletions
diff --git a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp index 76d8972ad9..e9c5de9daf 100644 --- a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp +++ b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp @@ -395,6 +395,10 @@ void RenderForwardClustered::_render_list_template(RenderingDevice::DrawListID p RID xforms_uniform_set = surf->owner->transforms_uniform_set; SceneShaderForwardClustered::ShaderSpecialization pipeline_specialization = p_params->base_specialization; + pipeline_specialization.multimesh = bool(surf->owner->base_flags & INSTANCE_DATA_FLAG_MULTIMESH); + pipeline_specialization.multimesh_format_2d = bool(surf->owner->base_flags & INSTANCE_DATA_FLAG_MULTIMESH_FORMAT_2D); + pipeline_specialization.multimesh_has_color = bool(surf->owner->base_flags & INSTANCE_DATA_FLAG_MULTIMESH_HAS_COLOR); + pipeline_specialization.multimesh_has_custom_data = bool(surf->owner->base_flags & INSTANCE_DATA_FLAG_MULTIMESH_HAS_CUSTOM_DATA); if constexpr (p_pass_mode == PASS_MODE_COLOR) { pipeline_specialization.use_light_soft_shadows = element_info.uses_softshadow; diff --git a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp index 532b5b6484..00a70e3690 100644 --- a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp +++ b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp @@ -374,6 +374,10 @@ void SceneShaderForwardClustered::ShaderData::_create_pipeline(PipelineKey p_pip sc.type = RD::PIPELINE_SPECIALIZATION_CONSTANT_TYPE_INT; specialization_constants.push_back(sc); + sc.constant_id = 1; + sc.int_value = p_pipeline_key.shader_specialization.packed_1; + specialization_constants.push_back(sc); + RID shader_rid = get_shader_variant(p_pipeline_key.version, p_pipeline_key.color_pass_flags, p_pipeline_key.ubershader); ERR_FAIL_COND(shader_rid.is_null()); diff --git a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.h b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.h index 8d79539b3d..e1ed85779e 100644 --- a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.h +++ b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.h @@ -117,7 +117,17 @@ public: uint32_t packed_0; }; - uint32_t packed_1; + union { + struct { + uint32_t multimesh : 1; + uint32_t multimesh_format_2d : 1; + uint32_t multimesh_has_color : 1; + uint32_t multimesh_has_custom_data : 1; + }; + + uint32_t packed_1; + }; + uint32_t packed_2; }; |