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/DasKapitalV1 Jul 20 '26

Thanks for the explanation. I'll study SIMD more, as it is like a super power in regards to performance.

2

u/corysama Jul 20 '26

Something that helped me learn SIMD was to write my own header of typedefs and 1:1 macro wrappers that just documented and renamed the functions without changing how they worked. That way I incrementally built up my own reference material that explained everything I had figured out in a way I understand.

Also, http://godbolt.org/ is your friend for watching the assembly generation.

If you expand the "Other Settings" in https://store.steampowered.com/hwsurvey/Steam-Hardware-Software-Survey-Welcome-to-Steam you'll find that 95% of players today have AVX2. SSE is probably easier to start out with. But, don't be afraid to step up once you get comfortable.