Here's a list of what I want and why I want it, I'm curious about other programmers/designers thought on the topic.
Slim API with standard command stream API.
Software:
Have a standard state block(s) that I manage by myself, let me send the whole state at each draw call and handle them.
Drivers:
Either much simplified or moved into hardware. (see below)
Hardware:
If it's standard you might as well have dedicated hardware to translate them into your GPU specific states.
Standard texture formats
Software:
No more translation from one format to another that takes time, just let me set my textures in the final format and be done with it. (Already true for S3TC I believe).
(Also a pre-requisite for the next point.)
Drivers:
Simplified.
Hardware:
Support for those standard texture layouts.
MMU(like) access/control
Software:
Let me setup the mapping between physical and logical memory, so I can use the whole memory as a nice cache and use whichever algorithm I want.
No more memory management nightmares, I can map virtual contiguous memory to physical pages and just provide a header for the buffers.
Drivers:
Simplified again.
Hardware:
Real access to the MMU might be a little tricky for system security and the like, but there might be a way to do something similarly powerful.
If the hardware could register page faults with some data, I could load what was missing in a usual just-too-late timeframe
That's a bit rough, but I think it's pretty much making GPU more akin to CPU when it comes to access and control.
The MMU part is critical to simplify memory management, handling memory as a cache makes things a lot simpler for streaming data and Virtual Memory avoid fragmentation issues.
(Except internal fragmentation if the page size are too big, I'm rather for 4KiB pages, but I think I could live with 8/16KiB ones.)
Slim API with standard command stream API.
Software:
Have a standard state block(s) that I manage by myself, let me send the whole state at each draw call and handle them.
Drivers:
Either much simplified or moved into hardware. (see below)
Hardware:
If it's standard you might as well have dedicated hardware to translate them into your GPU specific states.
Standard texture formats
Software:
No more translation from one format to another that takes time, just let me set my textures in the final format and be done with it. (Already true for S3TC I believe).
(Also a pre-requisite for the next point.)
Drivers:
Simplified.
Hardware:
Support for those standard texture layouts.
MMU(like) access/control
Software:
Let me setup the mapping between physical and logical memory, so I can use the whole memory as a nice cache and use whichever algorithm I want.
No more memory management nightmares, I can map virtual contiguous memory to physical pages and just provide a header for the buffers.
Drivers:
Simplified again.
Hardware:
Real access to the MMU might be a little tricky for system security and the like, but there might be a way to do something similarly powerful.
If the hardware could register page faults with some data, I could load what was missing in a usual just-too-late timeframe
That's a bit rough, but I think it's pretty much making GPU more akin to CPU when it comes to access and control.
The MMU part is critical to simplify memory management, handling memory as a cache makes things a lot simpler for streaming data and Virtual Memory avoid fragmentation issues.
(Except internal fragmentation if the page size are too big, I'm rather for 4KiB pages, but I think I could live with 8/16KiB ones.)