GDI isnt any more low level than directx
I dont think Low level or high level has much to do with software rendering, if you write your own routines to draw text, polygons, sprites it's software rendered.
If you used opengl or directx to render pixels as small quads, it's still software rendered as far as I am concerned because it's your custom written functions that are used to create the polygons, lines or whatever else you make.
low level and high level language refers to how much like english a command set is.
At it's lowest level, programs are binary patterns, the higher the level of language, the more readable to humans it becomes.
You could use assembly language to invoke opengl or directx function calls, similarly you can use the same language to open a window and plot pixels onto it by writing into screen memory.
Therefore software rendering must mean manually writing pixels into some kind of display buffer.