[Mesa-dev] [PATCH] egl: Allow 24-bit visuals for 32-bit RGBA8888 configs
Chad Versace
chad.versace at linux.intel.com
Mon Feb 25 16:25:06 PST 2013
On 02/25/2013 04:22 PM, Chad Versace wrote:
> Two nits.
>
> On 02/25/2013 10:51 AM, Ian Romanick wrote:
>> From: Ian Romanick <ian.d.romanick at intel.com>
>>
>> Previously only the 32-bit X visual would match the 32-bit RGBA8888
>> configs. This resulted in every config with alpha getting the "magic"
>> visual whose alpha is used by the compositor. This also resulted in no
>> multisample visuals being advertised. How many ways could we lose?
>>
>> This patch inverts the problem... now you can't get the visual with
>> alpha used by the compositor even if you want it. I think we need to
>> invent a new value for EGL_TRANSPARENT_TYPE that apps can use to get
>> this. I'm surprised that there isn't already a choice for
>> EGL_TRANSPARENT_ALPHA.
>>
>> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
>> Tested-by: Tian Ye <yex.tian at intel.com>
>> Cc: Kristian Høgsberg <krh at bitplanet.net>
>> Cc: Chad Versace <chad.versace at linux.intel.com>
>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=59783
>> ---
>> src/egl/drivers/dri2/egl_dri2.c | 9 ++++++++-
>> 1 file changed, 8 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
>> index ae842d7..5d00e4f 100644
>> --- a/src/egl/drivers/dri2/egl_dri2.c
>> +++ b/src/egl/drivers/dri2/egl_dri2.c
>> @@ -195,7 +195,14 @@ dri2_add_config(_EGLDisplay *disp, const __DRIconfig *dri_config, int id,
>> for (i = 0; attr_list[i] != EGL_NONE; i += 2)
>> _eglSetConfigKey(&base, attr_list[i], attr_list[i+1]);
>>
>> - if (depth > 0 && depth != base.BufferSize)
>> + /* Allow a 24-bit RGB visual to match a 32-bit RGBA fbconfig. Otherwise it
>
> fbconfig occurs nowhere in this code, and encountering it here confused me. The
> code is dealing with an EGLConfig, so let's call it what it is.
>
>> + * will only match a 32-bit RGBA visual. On a composited window manager on
>> + * X11, this will make all of the fbconfigs with destination alpha get
>> + * blended by the compositor. This is probably not what the application
>> + * wants... especially on drivers that only have 32-bit RGBA fbconfigs!
>> + */
>> + if (depth > 0 &&
>> + !(depth == base.BufferSize || (depth == 24 && base.BufferSize == 32)))
>> return NULL;
>
> DeMorgan could simplify this to:
>
> depth > 0 &&
> depth != base.BufferSize &&
> !(depth == 24 && base.BufferSize == 32)
>
>>
>> if (rgba_masks && memcmp(rgba_masks, dri_masks, sizeof(dri_masks)))
>>
>
> The code's correct, so feel free to ignore my nits.
> And THANK YOU for fixing this bug. It's been bothering me for months.
>
> Reviewed-by: Chad Versace <chad.versace at linux.intel.com>
Well... I shouldn't have said the code is *correct*, because I don't know
what correct really means here given the constraints of EGLConfig suckage.
The code *correctly* does what you want it do, which trades an unwanted bug
to a preferable one. Yeah, that's what I originally meant to say.
More information about the mesa-dev
mailing list