Another good example of this is Trenki's software renderer for the GPX2[1], which implements a shader architecture if memory serves. I haven't looked at it for many years, but I remember it being a useful resource when learning this stuff.
Other useful resources are, of course, Michael Abrash's Graphics Programming Black Book[2] (despite it's age, is still a great read filled with useful information), and for a really deep dive into the graphic's pipeline, ryg's (of Farbrausch fame) A Trip Through the Graphics Pipeline[3].
[1] http://www.trenki.net/content/view/18/38/
[2] https://github.com/jagregory/abrash-black-book
[3] https://fgiesen.wordpress.com/2011/07/09/a-trip-through-the-...