[RFCv2 4/9] gl-renderer: Tweak YUV shader.

John Kåre Alsaker john.kare.alsaker at gmail.com
Fri Nov 16 18:23:55 PST 2012


A more vectorized version of the YUV shader, may or may not be faster.

It's also untested...
---
 src/gl-shaders.c | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/src/gl-shaders.c b/src/gl-shaders.c
index 32bb70d..8595daf 100644
--- a/src/gl-shaders.c
+++ b/src/gl-shaders.c
@@ -225,13 +225,12 @@ shader_yuv_constructor(struct shader_builder *sb)
 	}
 
 	append(&sb->body, sample);
-	append(&sb->body,
-		"yuv = vec3(1.16438356 * (yuv.x - 0.0625), yuv.yz - 0.5);\n" \
-		"gl_FragColor.r = yuv.x + 1.59602678 * yuv.z;\n" \
-		"gl_FragColor.g = yuv.x - 0.39176229 * yuv.y - " \
-			"0.81296764 * yuv.z;\n" \
-		"gl_FragColor.b = yuv.x + 2.01723214 * yuv.y;\n" \
-		"gl_FragColor.a = 1.0;\n");
+	append(&sb->body,  "yuv = yuv * vec3(1.16438356, 1.0, 0.81296764) - " \
+			"vec3(0.07277397, 0.5, 0.40648382);\n" \
+		"vec3 diff = vec3(yuv.x, yuv.x - yuv.z, 1.0);\n" \
+		"gl_FragColor = yuv.zyyy * " \
+			"vec4(1.96321071, -0.39176229, 2.01723214, 0.0) + " \
+			"diff.xyxz;\n");
 
 	return 1;
 }
-- 
1.8.0



More information about the wayland-devel mailing list