Mesa (master): nouveau: force luminance clear colors to have the same g/ b values as r

Ilia Mirkin imirkin at kemper.freedesktop.org
Thu Aug 14 06:11:55 UTC 2014


Module: Mesa
Branch: master
Commit: a89353381ac3603bacb7ec56f5e4b3bf6ef6fb59
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=a89353381ac3603bacb7ec56f5e4b3bf6ef6fb59

Author: Ilia Mirkin <imirkin at alum.mit.edu>
Date:   Sun Aug 10 15:13:44 2014 -0400

nouveau: force luminance clear colors to have the same g/b values as r

Fixes the LUMINANCE_ALPHA formats of fbo-clear-formats piglit test.

Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
Reviewed-by: Francisco Jerez <currojerez at riseup.net>

---

 src/mesa/drivers/dri/nouveau/nouveau_driver.c |   10 +++++++++-
 src/mesa/drivers/dri/nouveau/nouveau_util.h   |   15 ++++++++++++---
 2 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_driver.c b/src/mesa/drivers/dri/nouveau/nouveau_driver.c
index b0afb69..b2887f8 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_driver.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_driver.c
@@ -114,8 +114,16 @@ nouveau_clear(struct gl_context *ctx, GLbitfield buffers)
 			fb->Attachment[i].Renderbuffer)->surface;
 
 		if (buf & BUFFER_BITS_COLOR) {
+			const float *color = ctx->Color.ClearColor.f;
+
+			if (fb->Attachment[i].Renderbuffer->_BaseFormat ==
+			    GL_LUMINANCE_ALPHA)
+				value = pack_la_clamp_f(
+						s->format, color[0], color[3]);
+			else
+				value = pack_rgba_clamp_f(s->format, color);
+
 			mask = pack_rgba_i(s->format, ctx->Color.ColorMask[0]);
-			value = pack_rgba_clamp_f(s->format, ctx->Color.ClearColor.f);
 
 			if (mask)
 				context_drv(ctx)->surface_fill(
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_util.h b/src/mesa/drivers/dri/nouveau/nouveau_util.h
index 56b819b..e9721c3 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_util.h
+++ b/src/mesa/drivers/dri/nouveau/nouveau_util.h
@@ -31,7 +31,7 @@
 #include "main/colormac.h"
 
 static inline unsigned
-pack_rgba_i(mesa_format f, uint8_t c[])
+pack_rgba_i(mesa_format f, const uint8_t c[])
 {
 	switch (f) {
 	case MESA_FORMAT_B8G8R8A8_UNORM:
@@ -69,7 +69,7 @@ pack_zs_i(mesa_format f, uint32_t z, uint8_t s)
 }
 
 static inline unsigned
-pack_rgba_f(mesa_format f, float c[])
+pack_rgba_f(mesa_format f, const float c[])
 {
 	return pack_rgba_i(f, (uint8_t []) {
 			   FLOAT_TO_UBYTE(c[RCOMP]),
@@ -79,7 +79,7 @@ pack_rgba_f(mesa_format f, float c[])
 }
 
 static inline unsigned
-pack_rgba_clamp_f(mesa_format f, float c[])
+pack_rgba_clamp_f(mesa_format f, const float c[])
 {
 	GLubyte bytes[4];
 	_mesa_unclamped_float_rgba_to_ubyte(bytes, c);
@@ -92,6 +92,15 @@ pack_zs_f(mesa_format f, float z, uint8_t s)
 	return pack_zs_i(f, FLOAT_TO_UINT(z), s);
 }
 
+static inline unsigned
+pack_la_clamp_f(mesa_format f, float l, float a)
+{
+	GLubyte lb, ab;
+	UNCLAMPED_FLOAT_TO_UBYTE(lb, l);
+	UNCLAMPED_FLOAT_TO_UBYTE(ab, a);
+	return pack_rgba_i(f, (uint8_t []) { lb, lb, lb, ab });
+}
+
 /* Integer base-2 logarithm, rounded towards zero. */
 static inline unsigned
 log2i(unsigned i)




More information about the mesa-commit mailing list