So you could say that DirectDraw is a "way" to do Software rendering (in Windows).
Hi there,
I'm sorry if my participation in this thread counts as a necro job, I wish I'd seen it sooner. I just wanted to chime in with my 2 cents from the perspective of a developer, specializing in DirectX.
It's important to disambiguate software and hardware rendering and to understand what is done in software, why and how. Hopefully I can do this with brevity and minimum confusion.
DirectDraw is, as you know, part of DirectX. The goal of DirectX is to allow the game (or application) developer to cut through all the layers of abstraction that Windows imposes and directly access the video/graphics hardware. To provide this functionality, the burden falls on the video card manufacturer to support, in their drivers, as many of the features of DirectDraw as they can. This includes but is not limited to: Blt, BltFast, Flip, Clippers, Palettes, Gamma Ramps, Color Controls and Color Keying.
Sometimes, the video card manufacturer cannot offer one or more of these features (although the first 3 will be supported on all except the oldest of video cards) in hardware but can offer them in software. The graphics card driver is still involved, but the operation will be done with the CPU and usually with system memory. Not all features missing from the hardware are provided through the HEL (hardware emulation layer). It depends on the video card manufacturer. When the HEL is required due to lack of hardware/driver support, it's usually done transparently, sometimes with an impact on performance, depending on the operation.
Today, if you look at DirectDraw on your typical NVIDIA card, it supports just enough of it in hardware for most DirectDraw games to run on Windows 11, usually with compatibility mode options. If you could play Diablo II today, you could run it using either DirectDraw 7 or Direct3D 7 and it'd run like the wind. How I do miss that damned game.
Historically speaking, if you want to build a vintage PC that runs DirectDraw games with maximum in-hardware features, find yourself a Matrox card. Matrox were and still are the undisputed kings of 2D performance and functionality.
Perhaps of lesser interest to you but worth noting is that to get Direct3D 7, you must use DirectDraw 7. The IDirect3D7 interface is obtained from the IDirectDraw7 interface using COM QueryInterface(). Direct3D 7 literally derives from DirectDraw 7.
DirectDraw 7, on contemporary hardware, is the fastest 2D API going, especially when compiled for 64-bit. It can push incredible amounts of VRAM with lightning speed. I'm talking blitting 16384x16384 32bit color surfaces (which is 1Gb of VRAM), in mere µs (microseconds). DirectDraw and Direct3D 7 are very much supported in hardware, today.