Most popular desktop GPUs have been pretty well reverse engineered (or implemented from documentation) in Mesa, so you really can go and look at the nitty gritty details, and write assembly language if you so like.
The VC4 is also a fun target, because in addition to being supported in mesa, it is documented very well [1] and in a very popular product (the Raspberry Pi).