GlaireDaggers🍉🏳️‍⚧️🎄
glairedaggers.bsky.social
GlaireDaggers🍉🏳️‍⚧️🎄
@glairedaggers.bsky.social
she/they
😷 wearer
in lesbians w/ 💍 @cyndervox.bsky.social 💍

Previous: Spry Fox / Netflix, Galvanic Games, Super Bit Machine

gamedev links: https://linktr.ee/glairedaggers

Tags: #foxbladefable | #art | #pixelart
(will also add "DMA"-esque commands which allow memory to be copied to and from VRAM - which, otherwise, is inaccessible to the CPU to simplify emulation)
February 14, 2026 at 7:58 AM
Things remaining for rasterization:
- Textures (texture formats, bilinear filtering, & mipmapping)
- Table fog
- Blending
- Antialiasing?

(and then hooking up some kind of "command list" system to allow the emulated CPU to control all of this)
February 14, 2026 at 7:58 AM
(oh, and you can also specify a clip rectangle now)
February 14, 2026 at 7:28 AM
Can configure the z-buffer address, enable color/depth writes, enable depth test, & configure depth compare op.

(also added support for configuring whether the rasterizer swizzles output tile order for rendering to a format suitable for textures)
February 14, 2026 at 7:26 AM
(for reference: Larrabee was an experimental GPGPU architecture by Intel, and one of the interesting things is that it had almost no fixed function bits at all, so even rasterization was implemented using compute resources)
February 13, 2026 at 9:34 PM
This was an extremely useful set of posts for triangle rasterization.

fgiesen.wordpress.com/2013/02/08/t...

It has some broken links, but also one of the posts references the "Larrabee" rasterizer, which I managed to find on the wayback machine (& is where I got the idea to split into tiles)
Triangle rasterization in practice
This post is part of a series – go here for the index. Welcome back! The previous post gave us a lot of theoretical groundwork on triangles. This time, let’s turn it into a working tria…
fgiesen.wordpress.com
February 13, 2026 at 9:34 PM
Midnight & noon should just be 0 tbh. Then it's just a wrap/modulo operation 😅
February 13, 2026 at 9:20 PM
As for video output I guess you'd probably have a "resolve" step which copies the rendered output to another address & reshuffles all of the data so it's in the correct layout for the video encoder.

(this would also be where I'd add support for resolving multi-sampled buffers I think)
February 13, 2026 at 9:10 PM
(might also swizzle the order of these 8x8 blocks so that the output of the rasterizer matches what the texture units will expect, so that rendered output can seamlessly be used as a texture.)
February 13, 2026 at 9:10 PM
(and also if you misconfigure registers it will look busted in fairly authentic "fucking around with the hardware" ways lmao😅)
February 13, 2026 at 9:10 PM
The other thing is I can start emulating all kinds of funky memory shit :)
For example, since the rasterizer already works in 8x8 tiles, I could lay out each of those tiles contiguously in memory.

And then a linear scanout of that looks REAL funny lmao.
February 13, 2026 at 9:10 PM
One of the reasons for doing this is I can now arbitrarily confgure:

- the target address in VRAM for the rasterizer, and width/height of that
- the source address in VRAM for the video encoder, and the output format
February 13, 2026 at 9:10 PM
eyy 2x multisampling is pretty trivial yeah (not yet storing both color samples, so rn I'm just computing a "coverage" factor & multiplying color by that, but still!)
February 13, 2026 at 6:38 AM
Works pretty much exactly like I initially planned, although I think for attribute interpolation I might just cheat and directly multiply with barycentric weights instead of summing 🤷‍♀️

Also think 2x MSAA would be pretty trivial to implement fwiw (just a bias & sign check for the second sample)
February 13, 2026 at 6:18 AM
(oh forgot to mention but this is RiscV emulation btw)
February 12, 2026 at 5:56 PM
Also fun wrinkle was finding out that, even though the top 16 MIE and MIP bits are basically allowed for platform-defined interrupts, Unicorn explicitly masks them out so I can't use them.

So I had to basically build my own emulation of a PLIC as well.
February 12, 2026 at 5:55 PM
Once I get interrupts working I think I can move on to having the CPU actually issue commands to the GPU, and from there start working on triangles & whatnot
February 12, 2026 at 5:49 PM
Problem: for some reason even if I never flag that AtomicBool the wait function still successfully exits, which shouldn't be possible??

So that's what I'm debugging now.
February 12, 2026 at 5:49 PM