NVIDIA Still Working On A Generic Allocator - Has Working Open-Source Implementation
Each year at the X.Org Developers' Conference (XDC) going back several they have presented concepts and work on a new device memory API with being unhappy over the semantics of GBM and that initially being one of the obstacles for NVIDIA's Linux driver in supporting Wayland compositors with many of them being tailored towards GBM while NVIDIA's initial Wayland support design has been around EGLStreams but they ultimately want this new hypothetical allocator API.
NVIDIA has been aiming for a better API than GBM, it's designed to be cross-vendor/driver, API agnostic, and various other improvements over the status quo. We hadn't heard much since the end of 2017 while last week at XDC2019 was finally an update by NVIDIA's James Jones.
NVIDIA engineers implemented their current proof-of-concept allocator within the Nouveau driver. With this new allocator and making use of modifiers and other features, they were able to see better performance in some workloads. James Jones reported performance was 50~300% better when not decompressing. But for a modified kmscube that behaves like a composited desktop the workflow gain was about 80% better overall.
Looking ahead NVIDIA is looking for review on their format modifier layout, getting their Mesa code reviewed and merged, writing an extension for their transition format modifier support, and integrating this code into Wayland protocols/compositors and libraries. They are also working on implementing this generic allocator within their proprietary driver with this open-source NVIDIA implementation proving to be a success.
There still is though a number of open design issues with this generic allocator as outlined via this PDF slide deck from XDC2019. So long story short, NVIDIA is still pursuing this new allocator design and perhaps in 2020 it might finally be ready for more widespread adoption if other driver vendors get onboard with it. The kernel-side bits for Nouveau's implementation can be found via this GitHub tree along with the Mesa code.