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

Mario Kleiner mario.kleiner.de at gmail.com
Wed Sep 6 08:13:26 UTC 2017


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

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?

thanks,
-mario


More information about the Piglit mailing list