All the reverse-engineered GPU drivers we have now (freedreno, etnaviv, nouveau, lima) started out with intercepting kernel ioctls, being able to observe the blobs at work. Many of them at one point ran with the vendor kernel interface but open-source userspace.
In many ways the kernel part of a GPU is arguably the least important part and it's the userland where the shader compiler sits and produces the magic, but if you start from nothing it's very useful to have a working kernel interface that initializes the hardware and accepts command streams to run.
reply