Barer Metal Space Invaders

Motivated by Federico Ponzi’s cool project Bare Metal Space Invaders, in which he’s implemented the classic Space Invaders in Rust on Raspberry Pi 3 system with minimal OS/kernel interaction, I implemented the game on my toy SoC Accellant to conclude the project and see how everything put together stood up. First, a few words about … Continue reading Barer Metal Space Invaders

Pathsy: a Simple Path Tracer on an FPGA

Ever since I came across Tom Verbeure’s impressive project in which he’s implemented a real-time Whitted ray tracer on an FPGA, I had a burning desire to have a crack at something similar while adding a thing or two new on top of the idea. Thus was born the next project idea of mine: implementing … Continue reading Pathsy: a Simple Path Tracer on an FPGA

Mandelbrot in floating-point vs fixed-point

Feeling a lack of intuition about how a fixed-point implementation of a naturally floating-point algorithm would fare against native floating-point performance on modern GPUs, I set out to do a few simple experiments. As it stands, I don’t feel like having much insight on this currently, at least on a high-level and not i.e. u-arch … Continue reading Mandelbrot in floating-point vs fixed-point

A Short Introduction To SIMD-ifying Scalar Code

I finally took the opportunity that comes disguised as a lazy Sunday to write down a quick’n dirty post on how one could convert a super simple scalar function to SIMD for those who want to experiment with SIMD but feel intimidated by all those nasty-looking stuff. It’s mostly for absolute beginners, so it’ll be … Continue reading A Short Introduction To SIMD-ifying Scalar Code

Chasing Triangles in a Tile-based Rasterizer

If you followed along or just came across my Rasterization in One Weekend blog series without having actually compiled and run the demo workloads, you’d be in for a big surprise if I told you now how slow they turned out to be. I hinted at some of the existing techniques at the end that … Continue reading Chasing Triangles in a Tile-based Rasterizer

Rasterization in One Weekend, Part III

Code for this part can be found here. Go Wild! In Part II, we saw how we could utilize the algorithm for rendering 3D objects without perspective-divide with aid of a depth buffer. We left off saying that next is vertex attributes and perspective-correct interpolation so let’s get to it! If you are wondering what … Continue reading Rasterization in One Weekend, Part III

Rasterization in One Weekend, Part II

Code for this part can be found here. Go 3D! In Part I: Hello, Triangle!, we rendered a two-dimensional triangle defined in normalized device coordinates-space [-1, 1] directly. As simple as they can get, it was already perfect for projecting to our two-dimensional screen. Before we get into adding a third dimension to our virtual world, … Continue reading Rasterization in One Weekend, Part II

Rasterization in One Weekend, Part I

Code for this part can be found here. Hello, Triangle! Mission statement: Given a set of three vertices which form a triangle, we want to rasterize the triangle onto our 2D screen. Now how do we define those vertices? Two of the options are: raster(or pixel)-space and normalized device coordinates space. In raster-space, vertex coordinates … Continue reading Rasterization in One Weekend, Part I

Rasterization in One Weekend

Welcome to mini-series of Rasterization in One Weekend! Having lately gotten tired of (well, not really) chasing instructions and signals inside GPUs, I set out to do a small project. As I recently got myself into making another SW-based rasterizer that utilizes modern techniques in an efficient manner and not one that pretends it’s ’65, … Continue reading Rasterization in One Weekend