Comment by bartread

3 days ago

I'm going to guess if you did it on the video card and simply disabled those enhancements it would be considerably more energy efficient than doing it on the CPU as well which (a) means your laptop battery lasts longer on a charge, and (b) also opens up the possibility of not needing a particularly powerful CPU in order to juice the resolution, because the video hardware is doing the work for you.

From a programming perspective I do completely get the desire to have the CPU do all the work though - if you want absolutely everything under your control it's easier, and especially if your game is single-threaded.

I've mentioned this elsewhere, but nowadays, anything you see out of an HDMI/DP/eDP cable comes out of a GPU. Modern OSs make it impossible to do 'software rendering' any more; it's just that much faster and that much more efficient, even if it is harder to program directly. Even IPMI BMCs have a tiny GPU doing stuff.

  • Why is it “impossible”? If you mean that a rendered frame has to reside in the graphics memory before being sent to the display, then I think that was the case even when software rendering was a thing.

    If you mean rendering a frame entirely in the main memory by the CPU, then there is nothing making it impossible. I mean, most major 3D rendering software still have CPU renderers as an option. Slow, but doable.

    P.S: I am using offline renderers here as an extreme example. A game renderer - especially for scenes like Quake’s - are definitely going to be far simpler and cheaper.

    • By 'impossible', I mean it in a very strict sense of blitting full-screen frames directly into the framebuffers provided by HDMI or (e)DP representing a visible surface. This is still kind of possible in Windows when games are properly full screen and not 'borderless full screen', but the OS still does compositing in the background, and the GPU is still involved to some extent.

      Of course, offline rendering is a different story.

      4 replies →

    • Using the extra unpopulated memory slots on your VGA card to get that 1024x786 at 256 colors. 800x600 is the largest which will fit in 512k of video memory at that colors depth, or getting 16bit color space in 800x600 due to having doubled your memory from 512k to 1024k. And those were definately the software rendering days, every ramdac needs it's own memory pool.

  • It's also because at this point the operating systems themselves use the accelerated graphics architecture for things like window compositing, because that also turned out to be faster. And it's much easier to do cute little visual effects like wiggles and window distorts if those entities are actually 3D rendered graphics objects.

    Even the standard desktop experience is a 3D graphics application these days.

  • I think you're misunderstanding. No one is saying that a GPU isn't involved at all.

    But if you rasterize your frames into a buffer using the CPU (and not OpenGL, Vulkan, Metal, D3D, etc.), and then scan that out on the GPU, that is indeed software rendering in the sense that matters here.

    The idea that software rendering is impossible because the GPU owns the scanout buffers is just silly pedantry.