diff --git a/include/libcamera/internal/shaders/bayer_1x_packed.frag b/include/libcamera/internal/shaders/bayer_1x_packed.frag
index c0632eb1..8b35dd63 100644
--- a/include/libcamera/internal/shaders/bayer_1x_packed.frag
+++ b/include/libcamera/internal/shaders/bayer_1x_packed.frag
@@ -69,6 +69,7 @@ uniform sampler2D red_param;
 uniform sampler2D green_param;
 uniform sampler2D blue_param;
 uniform mat3 ccm;
+uniform vec3 awb;
 
 void main(void)
 {
@@ -216,6 +217,11 @@ void main(void)
 			vec3(patterns.y, C, patterns.x) :
 			vec3(patterns.wz, C));
 
+	/* Apply white balance before colour correction matrix */
+	rgb.r = rgb.r * awb.r;
+	rgb.g = rgb.g * awb.g;
+	rgb.b = rgb.b * awb.b;
+
 #if defined(APPLY_CCM_PARAMETERS)
 	/*
 	 *   CCM is a 3x3 in the format
diff --git a/include/libcamera/internal/shaders/bayer_unpacked.frag b/include/libcamera/internal/shaders/bayer_unpacked.frag
index 74ce1509..37bd4812 100644
--- a/include/libcamera/internal/shaders/bayer_unpacked.frag
+++ b/include/libcamera/internal/shaders/bayer_unpacked.frag
@@ -28,6 +28,7 @@ varying vec4            center;
 varying vec4            yCoord;
 varying vec4            xCoord;
 uniform mat3		ccm;
+uniform vec3		awb;
 
 void main(void) {
     vec3 rgb;
@@ -111,6 +112,11 @@ void main(void) {
             vec3(PATTERN.w, C, PATTERN.z) :
             vec3(PATTERN.yx, C));
 
+	/* Apply white balance before colour correction matrix */
+	rgb.r = rgb.r * awb.r;
+	rgb.g = rgb.g * awb.g;
+	rgb.b = rgb.b * awb.b;
+
 #if defined(APPLY_CCM_PARAMETERS)
 	/*
 	 *   CCM is a 3x3 in the format
