It used to be if you wanted an indication of where desktop GPUs were headed, D3D was a good marker. DirectX, on the other hand, has always followed desktop hardware. These days OpenGL closely follows the development of commodity desktop GPU hardware, but this was not always the case - it contains baggage from the days of custom SGI workstations and lots of things in compatibility profiles have not been hardware native on desktop GPUs in decades. It may appear that the operating system has more to do with the equation than it actually does because Microsoft (more so) and Apple-who both maintain their own proprietary operating systems-are influential in the design of DirectX and OpenGL. Think of it like the kernel, nobody creates a CPU specifically to run it, and you do not have to re-compile the kernel everytime a new iteration of a processor architecture comes out that adds a new subset of instructions.Īpplication developers and IHVs (GPU vendors, as you call them) are the ones who primarily deal with changes to GPU architecture. so that DirectX and OpenGL applications work interoperably, but very little of the design of DirectX, OpenGL or GPUs in general has to do with this.
WDDM, which is Windows Vista's driver model defines things like common scheduling, memory management, etc. There is not a 1:1 correspondence between the graphics hardware abstraction and graphics API like OpenGL and Direct3D.
IMHO the lack of a unified AST or immediate shader code is one of the major shortcomings of OpenGL. OpenGL implementations however must implement their own GLSL shader compiler, which complicates things. If you develop purely for a core profile it simplifies a lot of things for example you no longer have to worry about a plethora of internal state when writing plugin.Īnother factor is, that for Direct3D there's exactly one shader compiler, which is not part of the driver infrastructure / implementation itself, but gets run at program build time. That's also the reason why recent versions of OpenGL core profiles did (overdue) work in cutting down support for legacy features this reduction of API complexity is also quite a liberating thing for developers.
This also means that full blown compatibility profile OpenGL implementations are quite complex beasts. Direct3D development OTOH is quick in cutting the ties with earlier versions. However OpenGL puts a lot of emphasis on backward compatibility and ease of transition to newer functionality. No, it means that each GPU vendor implements his own version of OpenGL and the Direct3D backend, which is where all the magic happens. So, when it is said that GPU vendors' support for DirectX is better than for OpenGL, does it simply mean that GPU vendors primarily take into account Microsoft's future plans of developing DirectX API structure and adjust future development of this interface to their needs? But in the end each new APIs release reflects the common denominator of the capabilities of the next hardware generation in development. In the case of DirectX the hardware makers submit drafts to and review the changes and suggestions made by Microsoft. In the case of Khronos the GPU makers are part of the controlling group of Khronos. After all they are close to where the rubber hits the road. In fact it's the other way round: Most of the graphic APIs specifications are laid out by the graphics hardware vendors. When OS developers decide to create new version of Graphic API, GPU vendors expand their interface
The actual OpenGL or Direct3D implementation happens in the hardware's drivers (and in fact the hardware itself is part of the implementation as well). Each OS then defines a so called ABI (Application Binary Interface) that specifies which system level APIs are supported by the OS (OpenGL and DirectX are system level APIs) and what rules an actual implementation must adhere to, when being run on the OS in question. The OpenGL API specification is controlled by Khronos, the DirectX API specification is controlled by Microsoft. But a specification is nothing more than a document, not software. DirectX and OpenGL are just specifications that define APIs. So DirectX and OpenGL are just wrappers for that interface.
As I understand GPU vendors defined standard interface to be used by OS Developers to communicate with their specific driver.