[Piglit] [PATCH 1/4] utils/glx: Don't create X pixmaps deeper than the root window.

Michel Dänzer michel at daenzer.net
Wed Sep 6 08:20:14 UTC 2017


On 06/09/17 05:13 PM, Mario Kleiner wrote:
> On 09/06/2017 09:30 AM, Michel Dänzer wrote:
>> On 05/09/17 02:52 PM, Mario Kleiner wrote:
>>> XCreatePixmap doesn't like that. Fixes piglit regression if the
>>> GL implementation exposes RGB10 depth 30 FBConfigs, but the X-Screen
>>> is set to default DefaultDepth of 24 bits, and therefore the root
>>> window only supports depth 24 pixmaps.
>>>
>>> On RGB10 enabled Mesa fixes these tests on depth 24 screen:
>>>
>>> glx-visuals-depth -pixmap
>>> glx-visuals-stencil -pixmap
>>>
>>> Signed-off-by: Mario Kleiner <mario.kleiner.de at gmail.com>
>>> ---
>>>   tests/util/piglit-glx-util.c | 6 ++++++
>>>   1 file changed, 6 insertions(+)
>>>
>>> diff --git a/tests/util/piglit-glx-util.c b/tests/util/piglit-glx-util.c
>>> index 95e33ae..643692a 100644
>>> --- a/tests/util/piglit-glx-util.c
>>> +++ b/tests/util/piglit-glx-util.c
>>> @@ -273,6 +273,7 @@ piglit_glx_iterate_pixmap_fbconfigs(enum
>>> piglit_result (*draw)(Display *dpy,
>>>       bool any_fail = false;
>>>       bool any_pass = false;
>>>       Window root_win;
>>> +    int root_depth;
>>>         Display *dpy = XOpenDisplay(NULL);
>>>       if (!dpy) {
>>> @@ -281,6 +282,7 @@ piglit_glx_iterate_pixmap_fbconfigs(enum
>>> piglit_result (*draw)(Display *dpy,
>>>       }
>>>       screen = DefaultScreen(dpy);
>>>       root_win = RootWindow(dpy, screen);
>>> +    root_depth = DefaultDepth(dpy, screen);
>>>         configs = glXGetFBConfigs(dpy, screen, &n_configs);
>>>       if (!configs) {
>>> @@ -305,6 +307,10 @@ piglit_glx_iterate_pixmap_fbconfigs(enum
>>> piglit_result (*draw)(Display *dpy,
>>>             glXGetFBConfigAttrib(dpy, config, GLX_BUFFER_SIZE,
>>>                        &depth);
>>> +
>>> +        if (depth > root_depth)
>>> +            continue;
>>> +
>>>           ctx = glXCreateNewContext(dpy, config, GLX_RGBA_TYPE,
>>>                         NULL, true);
>>>           pix = XCreatePixmap(dpy, root_win,
>>>
>>
>> This is not correct. This X server, running at depth 24, supports the
>> following pixmap depths according to xdpyinfo:
>>
>> number of supported pixmap formats:    7
>> supported pixmap formats:
>>      depth 1, bits_per_pixel 1, scanline_pad 32
>>      depth 4, bits_per_pixel 8, scanline_pad 32
>>      depth 8, bits_per_pixel 8, scanline_pad 32
>>      depth 15, bits_per_pixel 16, scanline_pad 32
>>      depth 16, bits_per_pixel 16, scanline_pad 32
>>      depth 24, bits_per_pixel 32, scanline_pad 32
>>      depth 32, bits_per_pixel 32, scanline_pad 32
>>
>> It sounds like this doesn't list depth 30 for you, which indicates an
>> issue with the Xorg (driver) changes for depth 30 support.
> 
> What i see is the same as above for DefaultDepth 24, but for
> DefaultDepth 30 i additionally get
> 
>       depth 30, bits_per_pixel 32, scanline_pad 32

A side point is that the X server should at least theoretically be able
to support depth 30 pixmaps even if the screen depth != 30.


> But i think re-reading the XCreatePixmap man page i think i know what
> you mean. It actually says "The depth argument must be one of the depths
> supported by the screen of the specified drawable, or a BadValue error
> results."
> 
> So that check is too strict, as it doesn't matter what the root window
> has by default, but what the screen associated with the root window
> supports.
> 
> So i think a proper check would be to get all supported depths via
> XListDepths() and then skip configs with a 'depth' that isn't contained
> in the returned list?

Exactly.


-- 
Earthling Michel Dänzer               |               http://www.amd.com
Libre software enthusiast             |             Mesa and X developer


More information about the Piglit mailing list