For example, any software library based on ILI9341_t3 must either use the self-contained (wrt SPI) functions available like drawPixel(), drawFastVLine(), fillRect(), etc. These functions call startTransmission() and endTransmission() at every invocation (fillRect() calls them many times, ostensibly to be a good neighbor on the SPI bus). These seems rather expensive, particularly with drawPixel().

It would be nice if there were equivalent functions for these primitives that didn't always include the SPI transaction. This way the user application can initiate the transaction manually, call all of the primitives they need, and then end transmission when they're done.

I'm curious if there is another reason (besides bus contention) that these were designed this way and if there would be any reason a pull request with these changes might get rejected. The current Adafruit_ILI9341 code seems to do what I'm proposing as well, but that's certainly not a justification for it.