[Mesa-dev] [PATCH 2/2] mesa: check bits per channel for GL_RGBA_SIGNED_COMPONENTS_EXT query
Brian Paul
brianp at vmware.com
Tue Jan 7 08:35:23 PST 2014
If a channel has zero bits it's not signed.
---
src/mesa/main/get.c | 28 +++++++++++++++++++++-------
1 file changed, 21 insertions(+), 7 deletions(-)
diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
index c45a8d1..bb138c8 100644
--- a/src/mesa/main/get.c
+++ b/src/mesa/main/get.c
@@ -769,13 +769,27 @@ find_custom_value(struct gl_context *ctx, const struct value_desc *d, union valu
/* Note: we only check the 0th color attachment. */
const struct gl_renderbuffer *rb =
ctx->DrawBuffer->_ColorDrawBuffers[0];
- const GLboolean is_signed =
- rb ? _mesa_is_format_signed(rb->Format) : GL_FALSE;
- /* At this time, all color channels have same signedness */
- v->value_int_4[0] =
- v->value_int_4[1] =
- v->value_int_4[2] =
- v->value_int_4[3] = is_signed;
+ if (rb && _mesa_is_format_signed(rb->Format)) {
+ /* Issue 17 of GL_EXT_packed_float: If a component (such as
+ * alpha) has zero bits, the component should not be considered
+ * signed and so the bit for the respective component should be
+ * zeroed.
+ */
+ v->value_int_4[0] =
+ _mesa_get_format_bits(rb->Format, GL_RED_BITS) > 0;
+ v->value_int_4[1] =
+ _mesa_get_format_bits(rb->Format, GL_GREEN_BITS) > 0;
+ v->value_int_4[2] =
+ _mesa_get_format_bits(rb->Format, GL_BLUE_BITS) > 0;
+ v->value_int_4[3] =
+ _mesa_get_format_bits(rb->Format, GL_ALPHA_BITS) > 0;
+ }
+ else {
+ v->value_int_4[0] =
+ v->value_int_4[1] =
+ v->value_int_4[2] =
+ v->value_int_4[3] = 0;
+ }
}
break;
--
1.7.10.4
More information about the mesa-dev
mailing list