[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