Код Explicit GPU Synchronization для Xwayland теперь объединен после более чем годового ожидания. Это довольно большое событие, которое должно особенно порадовать пользователей NVIDIA GPU в будущем.
Явная синхронизация необходима для нормального перехода на Wayland для многих пользователей с видеокартами NVIDIA, поскольку собственный драйвер NVIDIA вообще не поддерживает старую неявную синхронизацию. Пользователи NVIDIA столкнулись c такими глюками как значительное мерцание и проблемы с частотой кадров. Хотя их возникновение зависит от различных факторов.
С явным протоколом синхронизации, который будет реализован в композиторах и очень скоро в Xwayland и проприетарном драйвере NVidia, все эти проблемы наконец-то останутся в прошлом, и самый большой оставшийся препятствие для перехода пользователей NVidia на Wayland исчезнет.
Из запроса на слияние, который был первоначально открыт Эриком Курцингером из NVIDIA:
Вот наше предложение по добавлению явной синхронизации GPU в расширения DRI3 и Present, а также реализация для Xwayland. Хотя мы в NVIDIA, возможно, особенно заинтересованы в этом, так как наш драйвер не имеет поддержки неявной синхронизации, общий консенсус, похоже, формируется вокруг идеи, что явная синхронизация — лучший путь вперед для графического стека Linux. Xwayland, вероятно, останется важным компонентом этого стека еще некоторое время, и поэтому я чувствую, что эта работа принесет долгосрочную пользу сообществу в целом.
Дизайн черпает вдохновение из предложенного Wayland протокола wp_linux_explicit_sync_v2 [1], используя DRM syncobjs в качестве основного примитива. Я считаю, что это дает несколько преимуществ. Во-первых, то, что и X11, и Wayland используют схожий механизм для явной синхронизации, упростит разработку драйверов на стороне клиента, а во-вторых, это, надеюсь, позволит самому Xwayland добавить поддержку протокола явной синхронизации Wayland, предположительно, когда он будет более широко внедрен композиторами.
Я пытался сфокусировать это первоначальное предложение на создании пригодного для использования примитива синхронизации GPU и добавлении его поддержки в запрос PresentPixmap, считая, что это наиболее важная часть конвейера представления. Возможны и другие варианты использования этого примитива, например, в расширении Damage, но я считаю, что их лучше оставить на потом.
Осталось совсем немного, чтобы все подогнать, с учетом грядущей бета-версии драйвера NVIDIA, который должен увидеть свет в следующем месяце. Код для GNOME уже слит, для KDE тоже открыт запрос на слияние, в Mesa он тоже уже слит.