
Hello everyone
I wanted to share progress on my compositor. It is entirely CPU-rendered and uses multiple threads to render different screen regions in parallel.
The compositor uses a dirty-rectangle approach: when windows move, only the updated regions are redrawn. Each region is processed by worker threads, which allows even relatively heavy effects like Gaussian blur (radius ~10) and per-pixel opacity blending to remain smooth on Vms with VMX on good cpus.
Key points of the design:
• Multithreaded tile/region-based rendering
• AVX2-accelerated two-pass Gaussian blur
• Premultiplied alpha blending with both per-pixel and global opacity
• Shared temporary buffers for blur passes indexed by real screen coordinates
• Smooth window dragging even with blur and transparency enabled
Interestingly, on bare metal with an 8-thread CPU, moving windows feels almost like GPU compositing. Even inside a VM (with enough vCPUs and vmx), the compositor remains reasonably smooth.
Performance difference between environments is also noticeable:
• QEMU with WHPX: smooth
• Bare metal: smooth with a lot of cuts in fast movements, maybe due to frame canceling
At this point, the main challenges seem to be pipeline correctness and surface separation rather than performance.
I’d love feedback from people experienced with compositors or graphics pipelines on how they handle blur + alpha + partial redraw without artifacts.

