← Back to context

Comment by notabotiswear

3 days ago

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.

  • Modern "GPUs" have the ability to scan out from multiple buffers at the same time and do rectangular compositing during the scan out -- basically like a few giant sprites. It's got absolutely nothing to do with normal GPU work. Zero.

    It lets a few unobstructed windows do animation without having to involve the compositor => lower latency AND lower energy use. They do NOT have to be full screen at all.

    Oh, and they can also handle framebuffer formats that aren't RGB. This is very useful for video, as the natural format there is YUV or something similar. The YUV => RGB conversion step becomes unnecessary.

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.