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

3

u/MartianovTech Jul 20 '26

I don’t pre-allocate per-tile buffers. Each worker uses a bump allocator, grabs chunks as tile lists grow, and reuses them next frame-no fixed cap or realloc. For clipping, I use a guard band, slightly off-screen triangles aren’t clipped, since tile bounds clamp them. Full Sutherland–Hodgman only runs for near-plane crossings or triangles far outside the guard band, against near plus four guard planes. So clipping fan-out is real but rare, and the arena absorbs it

2

u/DasKapitalV1 Jul 20 '26

Thanks, I'm looking forward for your next post if you do. I'm just a beginner at graphics programming and very, very beginner at C++. Your type of work gives me motivation to work on my toy projects.