OpenGL. As multitasking user environments such as Windows and the X Window System (X11) on Unix-like systems became prevalent, the relevance of this hardware faded. Microsoft had marketed Direct3D as faster based on in-house performance comparisons of these two software libraries. The performance deficit was blamed on the rigorous specification and conformance required of OpenGL. This perception was changed at the 1996 Special Interest Group on GRAPHics and Interactive Techniques (SIGGRAPH) conference. At that time, Silicon Graphics (SGI) challenged Microsoft with their own optimized Windows software implementation of OpenGL called CosmoGL which in various demos matched or exceeded the performance of Direct3D. For SGI, this was a critical milestone as it showed that OpenGL's poor software rendering performance was due to Microsoft's reference OpenGL implementation, and not due to alleged design flaws in OpenGL. In contrast, software rendering by the 3D API was largely irrelevant for both Direct3D and OpenGL applications. Not many DirectX applications used Direct3D's software rendering, preferring to perform their own software rendering using DirectDraw's facilities to access the display hardware. As for OpenGL applications, hardware support was expected, and the hardware was so much faster that software fallback by the OpenGL application constituted a rude surprise to the OpenGL developer. In any case, by the time SGI had demonstrated that OpenGL software rendering performance could be competitive with that of Direct3D, software rendering was fast becoming irrelevant due to the wide availability of low cost 3D graphics hardware. By 1998, even the S3 ViRGE graphics accelerator was substantially faster than the fastest Pentium II running Direct3D's MMX rasterizer. Marshalling A more substantive and modern performance difference arises because of the structure of the hardware drivers provided by hardware developers. Under DirectX, independent hardware vendor (IHV) drivers are kernel-mode drivers installed into the operating system. The user-mode part of the API is handled by the DirectX runtime provided by Microsoft. Under OpenGL however, the IHV driver is divided in two parts: a user-mode part that implements the OpenGL API, and a kernel-mode driver that is called by the user-mode part. This is an issue because calling kernel-mode operations from user-mode requires performing a system call (i.e., making the CPU switch to kernel mode). This is a slow operation, taking on the order of microseconds to complete. During this time, the CPU can perform no operations. As such, minimizing the number of times this switching operation occurs would