From aba356e882d498ada7f4443afd6ddcf7ace2c9bf Mon Sep 17 00:00:00 2001
From: Bastiaan Olij <mux213@gmail.com>
Date: Wed, 5 Oct 2022 21:51:22 +1100
Subject: [PATCH] Make sure atlas rect for directional lights is calculated
 using floats

---
 .../forward_clustered/render_forward_clustered.cpp     | 10 +++++-----
 .../forward_mobile/render_forward_mobile.cpp           | 10 +++++-----
 2 files changed, 10 insertions(+), 10 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 cf08949d998..69d444aeeb2 100644
--- a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp
+++ b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp
@@ -2174,11 +2174,11 @@ void RenderForwardClustered::_render_shadow_pass(RID p_light, RID p_shadow_atlas
 			}
 		}
 
-		int directional_shadow_size = light_storage->directional_shadow_get_size();
-		atlas_rect.position /= directional_shadow_size;
-		atlas_rect.size /= directional_shadow_size;
-
-		light_storage->light_instance_set_directional_shadow_atlas_rect(p_light, p_pass, atlas_rect);
+		float directional_shadow_size = light_storage->directional_shadow_get_size();
+		Rect2 atlas_rect_norm = atlas_rect;
+		atlas_rect_norm.position /= directional_shadow_size;
+		atlas_rect_norm.size /= directional_shadow_size;
+		light_storage->light_instance_set_directional_shadow_atlas_rect(p_light, p_pass, atlas_rect_norm);
 
 		zfar = RSG::light_storage->light_get_param(base, RS::LIGHT_PARAM_RANGE);
 
diff --git a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp
index c3ce1b05f11..2b2090f8edd 100644
--- a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp
+++ b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp
@@ -1128,11 +1128,11 @@ void RenderForwardMobile::_render_shadow_pass(RID p_light, RID p_shadow_atlas, i
 			}
 		}
 
-		int directional_shadow_size = light_storage->directional_shadow_get_size();
-		atlas_rect.position /= directional_shadow_size;
-		atlas_rect.size /= directional_shadow_size;
-
-		light_storage->light_instance_set_directional_shadow_atlas_rect(p_light, p_pass, atlas_rect);
+		float directional_shadow_size = light_storage->directional_shadow_get_size();
+		Rect2 atlas_rect_norm = atlas_rect;
+		atlas_rect_norm.position /= directional_shadow_size;
+		atlas_rect_norm.size /= directional_shadow_size;
+		light_storage->light_instance_set_directional_shadow_atlas_rect(p_light, p_pass, atlas_rect_norm);
 
 		zfar = RSG::light_storage->light_get_param(base, RS::LIGHT_PARAM_RANGE);