Email: | [email protected] |
---|---|
Website: | donovanmaas.dev |
Phone: | +1 (507) 403-0427 |
Github: | github.com/hyfloac |
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 API's, but was disabled for OpenGL to provide a visual indication that they are in fact running different backends.
Tau Reflection Generator is a utilty 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 sytnax parsing, so I used Clang's api to be able to accurately C++.
The tool will go through header files and find the special macros and record their position. After the preprocessing phase it will iterate through the AST and when it encounters an element that was directly after one of the special macros it will record its data. Then an extensible utility will go through every tagged element and generate a new header which contains macros for injecting custom code into the class. As a demo this generates reflection data for a class, allowing you to configure which properties (fields) it will add the ability to get or set to. The special macros take in a var args, which during normal compilation will consume any tokens, but during the Tau codegen it can take any tokens passed in and parse them however it likes, currently this just uses single identifiers like "get" and "set", but could take any lexable syntax.
Tau IR is a small PoC 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 will go through IR and JIT it. The JIT'ing is done by first converting the stack based IR into a different SSA based IR similar to LLVM IR. This SSA IR is easier to optimize, but can be substantially less compressed due to the extra type tagging. The SSA IR can then be easily converted into optimized x86-64 assembly.
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 emulting the GPU with GHDL and host 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.
x86 Assembly, IA-32 Assembly, x86-64 Assembly, C, C++, C#, Java, LLVM IR, GLSL, HLSL, VHDL
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 API's, but was disabled for OpenGL to provide a visual indication that they are in fact running different backends.
Tau Reflection Generator is a utilty 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 sytnax parsing, so I used Clang's api to be able to accurately C++.
The tool will go through header files and find the special macros and record their position. After the preprocessing phase it will iterate through the AST and when it encounters an element that was directly after one of the special macros it will record its data. Then an extensible utility will go through every tagged element and generate a new header which contains macros for injecting custom code into the class. As a demo this generates reflection data for a class, allowing you to configure which properties (fields) it will add the ability to get or set to. The special macros take in a var args, which during normal compilation will consume any tokens, but during the Tau codegen it can take any tokens passed in and parse them however it likes, currently this just uses single identifiers like "get" and "set", but could take any lexable syntax.
Tau IR is a small PoC 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 will go through IR and JIT it. The JIT'ing is done by first converting the stack based IR into a different SSA based IR similar to LLVM IR. This SSA IR is easier to optimize, but can be substantially less compressed due to the extra type tagging. The SSA IR can then be easily converted into optimized x86-64 assembly.
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 emulting the GPU with GHDL and host 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.