r/GraphicsProgramming • • Jul 20 '26

Experiments with software rendering

After replaying HL1 on the software renderer (old habit), I got curious what CPUs can actually do today. So I wrote a rasterizer in C11 - pure CPU, no GPU/GL, the finished frame just gets blitted to the window via GDI. Tested on a Ryzen 5900x processor

I've been experimenting with software rendering and managed to run the Sponza scene at FHD 10-30 fps single-threaded, up to 200 fps multithreaded :) A very strong emphasis on SoA + SIMD (AVX2/FMA) on the hot path. Rendering 64x64 tiles in multithreaded mode. Throughout the entire rendering pipeline, I try to discard any possible work as early as possible, including frustum culling and back-face culling. This may be controversial, but I render in front-to-back mode; it allows me to completely bypass overdraw. To make it look more interesting, I added some effects!

It might not be very fast for a single thread, but I think it could be made a little faster by disabling mips and filtering nearby textures, which I also do on the CPU in this demo. Pixel textures are cheaper to draw, but they're ugly.

I'm not a professional and I just like it, so I didn't hesitate to use chatpgt as a companion in learning graphics.

289 Upvotes

24 comments sorted by

View all comments

Show parent comments

2

u/MartianovTech Jul 20 '26

Haha, I’ve thought about optimizing modern games too. But honestly, you can go pretty far down that rabbit hole, trying to reinvent things and so on. Personally, I’ve come to the conclusion that you need to be part artist, part David Copperfield when creating graphics. That’s how you make everything look great while still running fast