Software Engineer

Donovan Maas

PGP

Languages

C, C++, C#, Java, x86 & x86-64 Assembly, LLVM IR, GLSL, HLSL, VHDL

Frameworks & Platforms

Micronaut, ASP.NET, Direct3D 10, Direct3D 11, Direct3D 12, Vulkan, OpenGL, NestJS, Docker, Podman, WDDM

Specialties

  • Computer Graphics Programming
  • Systems Engineering
  • Language and Data Parsers
  • Object Oriented Programming

Projects

Tau Engine

Tau Engine is a 3D rendering engine with backends written in OpenGL 4.3, Direct3D 10, and Direct3D 11.

The abstraction makes the backend implementation opaque to the end user, leaving no visual differences between the scenes.

You may notice a visual difference in the release as there is an additional post processing shader running in D3D. This is implemented for both APIs, but was disabled for OpenGL to provide a visual indication that they are in fact running different backends.

Tau Reflection Generator

Tau Reflection Generator is a utility executable designed to act similarly to Unreal Engine's UnrealHeaderTool.

I wanted to improve on the parsing abilities of the tool, as UE's tool had very rudimentary syntax parsing, so I used Clang's API to accurately parse C++.

The tool goes through header files, finds special macros, records their position, then iterates through the AST to capture the tagged element data. An extensible utility then generates a new header with macros for injecting custom code into the class.

As a demo, this generates reflection data for a class and allows you to configure which properties it adds the ability to get or set to. The special macros can currently take identifiers like "get" and "set", but the system can be extended to support richer lexable syntax.

Tau IR

Tau IR is a small proof-of-concept intermediate representation. It is intended to be encoded into a .exe file similar to the CLR.

When launched, it sets its entry point to a member of a DLL, which walks the IR and JIT-compiles it. The JIT first converts the stack-based IR into an SSA-based IR similar to LLVM IR, making it easier to optimize before lowering into optimized x86-64 assembly.

Parsers

I have a lot of experience writing parsers. I've written custom data file parsers, custom programming language parsers, HTML parsers, and JSON parsers.

I have also written RFC 822, RFC 2822, and RFC 5322 compliant email address validators.

GPU

For fun I've been designing my own GPU. While I do have some experience with VHDL, I am mostly leaving the hardware side to a friend.

In the meantime I've been working on writing the drivers. This includes the Kernel Mode Display Miniport Driver and the User Mode Vulkan Installable Client Driver.

In the future I plan on also adding the User Mode Display Driver (DirectX) and integrating the OpenGL ICD into the Vulkan ICD, as this seems to be a common industry practice.

I currently plan on emulating the GPU with GHDL and hosting it using a VirtualBox Device Module.

As an intermediary I have been implementing the GPU in software. This is designed with conversion to hardware in mind. This version is currently able to be loaded into VirtualBox, with a UEFI Graphics Output Protocol driver that can be successfully loaded, and the Display Miniport Driver can be loaded into Windows 10.