diff --git a/src/libcamera/shaders/bayer_1x_packed.frag b/src/libcamera/shaders/bayer_1x_packed.frag
index 23747f78..7993ea1d 100644
--- a/src/libcamera/shaders/bayer_1x_packed.frag
+++ b/src/libcamera/shaders/bayer_1x_packed.frag
@@ -70,6 +70,10 @@ uniform vec3 blacklevel;
 uniform float gamma;
 uniform float contrastExp;
 
+uniform sampler2D lsc_tex_red;
+uniform sampler2D lsc_tex_blue;
+uniform sampler2D lsc_tex_green;
+
 float apply_contrast(float value)
 {
 	// Apply simple S-curve
@@ -227,6 +231,12 @@ void main(void)
 
 	rgb = rgb - blacklevel;
 
+	#if defined(DO_LSC)
+	rgb.r = rgb.r + rgb.r * 3.0 * texture2D(lsc_tex_red, textureOut).x;
+	rgb.g = rgb.g + rgb.g * 3.0 * texture2D(lsc_tex_green, textureOut).x;
+	rgb.b = rgb.b + rgb.b * 3.0 * texture2D(lsc_tex_blue, textureOut).x;
+	#endif
+
 	/*
 	 *   CCM is a 3x3 in the format
 	 *
diff --git a/src/libcamera/shaders/bayer_unpacked.frag b/src/libcamera/shaders/bayer_unpacked.frag
index 1b85196a..f0b9a6cc 100644
--- a/src/libcamera/shaders/bayer_unpacked.frag
+++ b/src/libcamera/shaders/bayer_unpacked.frag
@@ -29,6 +29,10 @@ uniform vec3            blacklevel;
 uniform float           gamma;
 uniform float           contrastExp;
 
+uniform sampler2D lsc_tex_red;
+uniform sampler2D lsc_tex_blue;
+uniform sampler2D lsc_tex_green;
+
 float apply_contrast(float value)
 {
     // Apply simple S-curve
@@ -130,6 +134,12 @@ void main(void) {
 
     rgb = rgb - blacklevel;
 
+    #if defined(DO_LSC)
+    rgb.r = rgb.r + rgb.r * 3.0 * texture2D(lsc_tex_red, center.xy).x;
+    rgb.g = rgb.g + rgb.g * 3.0 * texture2D(lsc_tex_green, center.xy).x;
+    rgb.b = rgb.b + rgb.b * 3.0 * texture2D(lsc_tex_blue, center.xy).x;
+    #endif
+
     /*
      *   CCM is a 3x3 in the format
      *
