[v5,05/24] libcamera: shaders: Use highp not mediump for float precision
diff mbox series

Message ID 20251127023739.179652-6-bryan.odonoghue@linaro.org
State New
Headers show
Series
  • Add GLES 2.0 GPUISP to libcamera
Related show

Commit Message

Bryan O'Donoghue Nov. 27, 2025, 2:37 a.m. UTC
mediump gives 10 bits of mantissa as the resolution. At higher resolutions
10 bits of accuracy is insufficient - for example at a width of 1928 bytes
we need log2(1928) = ~11 bit resolution.

Switching to highp gives us 23 bits of mantissa giving a sample width
precision of about 2^23 ~ 8,388,608.

Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
 src/libcamera/shaders/RGB.frag             | 2 +-
 src/libcamera/shaders/YUV_2_planes.frag    | 2 +-
 src/libcamera/shaders/YUV_3_planes.frag    | 2 +-
 src/libcamera/shaders/YUV_packed.frag      | 2 +-
 src/libcamera/shaders/bayer_1x_packed.frag | 2 +-
 src/libcamera/shaders/bayer_unpacked.frag  | 2 +-
 6 files changed, 6 insertions(+), 6 deletions(-)

Patch
diff mbox series

diff --git a/src/libcamera/shaders/RGB.frag b/src/libcamera/shaders/RGB.frag
index 4c374ac98..724395894 100644
--- a/src/libcamera/shaders/RGB.frag
+++ b/src/libcamera/shaders/RGB.frag
@@ -6,7 +6,7 @@ 
  */
 
 #ifdef GL_ES
-precision mediump float;
+precision highp float;
 #endif
 
 varying vec2 textureOut;
diff --git a/src/libcamera/shaders/YUV_2_planes.frag b/src/libcamera/shaders/YUV_2_planes.frag
index 1d5d12062..d286f1179 100644
--- a/src/libcamera/shaders/YUV_2_planes.frag
+++ b/src/libcamera/shaders/YUV_2_planes.frag
@@ -6,7 +6,7 @@ 
  */
 
 #ifdef GL_ES
-precision mediump float;
+precision highp float;
 #endif
 
 varying vec2 textureOut;
diff --git a/src/libcamera/shaders/YUV_3_planes.frag b/src/libcamera/shaders/YUV_3_planes.frag
index 8f788e90a..8e3e0b4a5 100644
--- a/src/libcamera/shaders/YUV_3_planes.frag
+++ b/src/libcamera/shaders/YUV_3_planes.frag
@@ -6,7 +6,7 @@ 
  */
 
 #ifdef GL_ES
-precision mediump float;
+precision highp float;
 #endif
 
 varying vec2 textureOut;
diff --git a/src/libcamera/shaders/YUV_packed.frag b/src/libcamera/shaders/YUV_packed.frag
index b9ef9d41b..3c9e3e397 100644
--- a/src/libcamera/shaders/YUV_packed.frag
+++ b/src/libcamera/shaders/YUV_packed.frag
@@ -6,7 +6,7 @@ 
  */
 
 #ifdef GL_ES
-precision mediump float;
+precision highp float;
 #endif
 
 varying vec2 textureOut;
diff --git a/src/libcamera/shaders/bayer_1x_packed.frag b/src/libcamera/shaders/bayer_1x_packed.frag
index f53f55758..19b13ad08 100644
--- a/src/libcamera/shaders/bayer_1x_packed.frag
+++ b/src/libcamera/shaders/bayer_1x_packed.frag
@@ -20,7 +20,7 @@ 
  */
 
 #ifdef GL_ES
-precision mediump float;
+precision highp float;
 #endif
 
 /*
diff --git a/src/libcamera/shaders/bayer_unpacked.frag b/src/libcamera/shaders/bayer_unpacked.frag
index 7e35ca88e..aa7a1b004 100644
--- a/src/libcamera/shaders/bayer_unpacked.frag
+++ b/src/libcamera/shaders/bayer_unpacked.frag
@@ -16,7 +16,7 @@  Copyright (C) 2021, Linaro
 
 //Pixel Shader
 #ifdef GL_ES
-precision mediump float;
+precision highp float;
 #endif
 
 /** Monochrome RGBA or GL_LUMINANCE Bayer encoded texture.*/