16

As far as I know, there were many video cards which offered 2D acceleration (tasks like line drawing, colorfill, bitblit etc.) on Windows as early as Windows 3.1. Did they have any sort of standardised software interface?

1
  • 8
    From the application programmer's standpoint, GDI was the standardised API for performing tasks like line drawing, color filling and blitting. GDI also had a "back-end" interface to a video card driver, and if the video card driver supported hardware acceleration, GDI would take advantage of that.
    – DmytroL
    Jul 21 at 6:24
23

In Windows up to version 3.x included (and early versions of OS/2), the only interface available for graphics was the Graphics Device Interface. This defines a large number of 2D graphics primitives, from simple line-drawing to font rendering. Graphics drivers implemented the GDI Device Driver Interface, with primitives matching the GDI primitives; this was the shared interface. Microsoft provided a reference implementation which most (perhaps even all) drivers were based on; this included implementations of all the primitives, ultimately boiling down to point-plotting etc.

Early accelerators were sold as “Windows accelerators” and provided better versions of various GDI DDI primitives, e.g. line-drawing, rectangles, polyfills, font rendering in some cases (e.g. with hardware caches), hardware mouse cursors, etc. Essentially, this involved moving primitives, or parts of primitives, from the drivers into hardware. Benchmarks at the time were not based on real-world scenarios so real-world performance wasn’t necessarily improved all that much.

Later on, acceleration focused on primitives which were more useful to accelerate, in particular for games, instead of trying to tick all the boxes on a GDI checklist. The main desktop-relevant optimisation was hardware BitBlt (see also WinG, which provided fast bitblts, albeit not necessarily hardware-accelerated).

Windows 95 introduced mini-drivers based on a DIB engine: instead of implementing everything, drivers could delegate functions to the generic DIB engine (the Windows 95 DDK documents this). Acceleration efforts switched to DirectX, in 2D and 3D, with primitives designed with optimisation in mind. Comparing Direct2D and GDI Hardware Acceleration gives a good overview (albeit written long after Windows 3 lost its relevance).

10
  • Windows 3.1 also had WinG, that allowed a faster path to video memory. I don't think it actually used any hardware acceleration but I guess it is at least worth mentioning. Jul 21 at 17:35
  • "Windows 95 introduced mini-drivers based on a DIB engine" – Could you expand on this a bit or give a link to more info? Jul 21 at 17:53
  • @Diego it is, thanks; I’ve added it to the answer. Jul 21 at 18:36
  • @Alex the details are in the Windows 95 DDK; I can’t find it in a browser-friendly format online. It’s also mentioned briefly in the OS/2 Museum link at the start of the answer. I’ve added a little more information. Jul 21 at 18:38
  • 2
    @RonJohn, a lot of the stuff that gets accelerated is either already extremely fast (eg. drawing horizontal lines) or not used very often (eg. fancy fill patterns of complex shapes).
    – Mark
    Jul 22 at 1:01

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.