| I think what's broken is not OpenGL, D3D, etc What's broken is that the abstraction between graphics card and data (on the screen) is too big We don't have troublesome/fat drivers as these since the "Softmodem" days and even then (Wifi is also complicated) It's too big of a gap. In 2D graphics, you send graphical data and it is displayed. You may even write it directly to memory after some setup. Audio, same thing. Network, it's bytes to the wire. Disk drive, "write these bytes to sector X" (yes, it's more complicated then that, still) With 3D, we have two APIs that have an awful amount of work to do between the getting the data and displaying it. I'll profess my ignorance in the low-level aspects, I only know "GlTriangle" , OpenGL 101 kind of stuff, and I have no idea how: 1 - this is sent to the videocard, 2 - how does it decide to turn that into what we see on the screen. Compared to the other drivers this is a lot of work and a lot of possibilities of getting this wrong. Adding GPGPU stuff makes it easier in one aspect and more complicated in other aspects. We don't have a generic way of producing equal results from equal inputs (not even the same programming environment is available) We don't have OpenGL, we have "this OpenGL works on nVidia, this other one works on ATI, this one works on iOS, or sometimes it doesn't work anywhere even though it might be officially allowed" |
Because the GPU is cutting-edge, there is a certain amount of magic voodoo required for top performance that needs to get abstracted away- maybe this particular model of GPU you have doesn't support some common instruction. You don't want to handle that in your software, you want to hide that in the driver.
Beyond that, the API is also there to make the GPU easier to use. OpenGL is a mess, sure, but to my understanding most developers would pull their hair out and give up if they had to program the GPU directly.