In order to make Android boot on most hardware platforms, developers usually have to mix open-source code with proprietary files. These so-called blobs are distributed by vendors to support some platform-specific features. Robert Foss from Collabora reported that is now possible to boot Android on i.MX6 platforms without the use of proprietary blobs at all.
Support for buffer modifiers has been added in both Mesa and gbm_gralloc. Mesa has had support added to many of the buffer allocation functions and to GBM (which is the API provided by Mesa, that gbm_gralloc uses). On the other hand, gbm_gralloc in turn had support added for using a new GBM API call, GBM_BO_IMPORT_FD_MODIFIER, which imports a buffer object as well as accompanying information like modifier used by the buffer object in question.
The NXP’s i.MX6 is one of the many embedded SoCs that no longer requires proprietary blobs at all to boot Android. This makes the i.MX6 more attractive as a development platform, and also lays the groundwork for supporting the i.MX8 platform in the future.
When modifiers are in place they are used to represent different properties of buffers. These properties can cover a range of different information about a buffer, for example, compression and tiling.
For the case of the iMX6 and the Vivante GPU which it is equipped with, the modifiers are related to tiling. The reason being that buffers can be tiled in different ways (Tiled, Super Tiled, etc.) or not at all (Linear). Before sending buffers out to a display, they need to have the associated tiling information made available, so that the actual image that is being sent out is not tiled.
To better understand how all this works, please take a look at the video below to see ZII RDU2 board (i.MX 6QuadPlus) booting Android using the Mesa open-source graphics stack.
While this is a huge win for the open-source, we should not expect many OEMs to start sporting this SoC in their devices. One of the major drawbacks of the platform is its age. The platform was first unveiled in 2011.