summaryrefslogtreecommitdiff
path: root/dri3
diff options
context:
space:
mode:
authorMario Kleiner <mario.kleiner.de@gmail.com>2018-04-30 09:06:08 +0200
committerAdam Jackson <ajax@redhat.com>2018-04-30 13:48:00 -0400
commit55db3c9cfc1bc92a53b75b99e8fa49a32d7efe63 (patch)
tree8696ebf66da61c040c348d1b9ece5f02cc052188 /dri3
parentfbc5c5cd532962d2df96a04e5c8cc0d21b47b08a (diff)
dri3: Robustly clamp to 1.0 if not all screens support 1.2
Checking for dri3_screen_info_rec.version >= 2 is insufficient, as some shipping drivers, e.g., intel-ddx, nouveau-ddx, set the version to DRI3_SCREEN_INFO_VERSION, ie. to whatever version the installed servers headers define. On server 1.20 that would be version 2, but the drivers still don't support the v1.2 hooks. Make sure all hooks are defined before reporting v1.2. Also make clamping of reported version to minimum of client or server robust against possible future clients with possible majorVersion >= 2.0. Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com> Reviewed-by: Adam Jackson <ajax@redhat.com> Cc: Daniel Stone <daniels@collabora.com>
Diffstat (limited to 'dri3')
-rw-r--r--dri3/dri3_request.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/dri3/dri3_request.c b/dri3/dri3_request.c
index 61d3f9d05..e34bebedb 100644
--- a/dri3/dri3_request.c
+++ b/dri3/dri3_request.c
@@ -37,7 +37,10 @@ dri3_screen_can_one_point_two(ScreenPtr screen)
{
dri3_screen_priv_ptr dri3 = dri3_screen_priv(screen);
- if (dri3 && dri3->info && dri3->info->version >= 2)
+ if (dri3 && dri3->info && dri3->info->version >= 2 &&
+ dri3->info->pixmap_from_fds && dri3->info->fds_from_pixmap &&
+ dri3->info->get_formats && dri3->info->get_modifiers &&
+ dri3->info->get_drawable_modifiers)
return TRUE;
return FALSE;
@@ -79,7 +82,8 @@ proc_dri3_query_version(ClientPtr client)
*/
if (rep.majorVersion > stuff->majorVersion ||
- rep.minorVersion > stuff->minorVersion) {
+ (rep.majorVersion == stuff->majorVersion &&
+ rep.minorVersion > stuff->minorVersion)) {
rep.majorVersion = stuff->majorVersion;
rep.minorVersion = stuff->minorVersion;
}