The Forge Cross-Platform Rendering Framework PC Windows, Steamdeck (native), Ray Tracing, macOS / iOS, Android, XBOX, PS4, PS5, Switch, Quest 2
As the year winds slowly down, we finally found time to do another release. First of all, Happy Holidays and a happy new Year!
Most of us will take off over the Holiday season and spent time with their families. We should be back online in the middle of January 2021.
*OSBase.*
files you can find a snippet of code that looks like this:if (pApp->mSettings.mResetGraphics)
{
pApp->Unload();
pApp->Load();
pApp->mSettings.mResetGraphics = false;
}
Breadcrumb are user defined markers used to pinpoint which command has caused GPU to stall. In the Breadcrumb unit test, two markers get injected into the command list. Pressing the crash button would result in a GPU hang. In this situation, the first marker would be written before the draw command, but the second one would stall for the draw command to finish. Due to the infinite loop in the shader, the second marker won't be written, and we can reason that the draw command has caused the GPU to hang. We log the markers' information to verify this. Check out this link for more info: D3D12 Device Removed Extended Data (DRED)
Here is how the current Lua support in the functional tests might look like:
DX11 refactor: we re-wrote the DX11 run-time a few times. We ended up with the most straighforward version. This version only recently shipped in Hades along with the Vulkan run-time on PC.
YUV support: we have now YUV support for all our Vulkan API platforms PC, Linux, Android and Switch. There is a new functional test for YUV. It runs on all these platforms:
Audio: we removed the audio functional test. It was the only test that was released unfinished and didn't run on all our platforms. Our customers show love for FMOD ... would make more sense to show an integration of that.
GitHub issues fixed:
Numerous other fixes ...
Here is a screenshot of Hades running on Switch:
Here is an article by Forbes about Hades being at the top of the Nintendo Switch Charts. Hades is also a technology showcase for Intel's integrated GPUs on macOS and Windows. The target group of the game seems to often own those GPUs.
Here are the screenshots:
Windows:
macOS:
Linux:
Here are the screenshots:
Windows final scene:
Without denoising:
With denoising:
PS4:
macOS:
Here are the screenshots:
File system: our old file system was designed more for tools or Windows applications than for games. It consumed more memory than the whole rendering system and used Windows file methods extensively. That is the opposite of what you want in a game. It took us now several months to correct the mistake and come up with a file system that is tailored towards games. That means that the interface changed substantially. Thanks to all those who pointed this out. Sometimes it takes a couple of iterations to land on a design that is efficient. If you look at the new interface there are still path related functions in there. They will be removed step-by-step. Please check out the new file system interface and let us know what you think.
Android Vulkan: validation layer is now supported
Mobile Devices: DPI scaling is properly handled now so we shouldn't see messed up UI anymore on mobile devices
Android: the following Unit-tests are now included for Android:
gamepad support: tested with PS4 controller
sample size reduction
proper closing of apps with the back button
proper handling of vSync
.zip filesystem handling
shader compile #include directive support
overall stability improvements
improved swapchain creation process and proper handling of current frame index
Linux:
MTuner MTuner was integrated into the Windows 10 runtime of The Forge following a request for more in-depth memory profiling capabilities by one of the developers we support. It has been adapted to work closely with our framework and its existing memory tracking capabilities to provide a complete picture of a given application’s memory usage.
To use The Forge’s MTuner functionality, simply drag and drop the .MTuner file generated alongside your application’s executable into the MTuner host app, and you can immediately begin analyzing your program’s memory usage. The intuitive interface and exhaustive supply of allocation info contained in a single capture file makes it easy to identify usage patterns and hotspots, as well as tracking memory leaks down to the file and line number. The full documentation of MTuner can be found [here](link: https://milostosic.github.io/MTuner/).
Currently, this feature is only available on Windows 10, but support for additional platforms provided by The Forge is forthcoming. Here is a screenshot of an example capture done on our first Unit Test, 01_Transformations:
Most of us are working from home now due to the Covid-19 outbreak. We are all trying to balance life and work in new ways. Since the last release we made a thorough pass through the macOS / iOS run-time, so that it is easier to make macOS your main development environment for games. Unit-tests fixes:
Metal runtime fixes:
Closed Issues:
Based on request we are providing a Path Tracing Benchmark in 16_RayTracing. It allows you to compare the performance of three platforms:
We believe that every benchmarking tool should be open-source, so that everyone can see what the source code is doing. We will extend this benchmark to the non-public platforms we support to compare the PC performance with console performance. The benchmark comes with batch files for all three platforms. Each run generates a HTML output file from the microprofiler that is integrated in TF. The default number of iterations is 64 but you can adjust that. There is a Readme file in the 16_RayTracing folder that describes the options.
Windows DirectX 12 DXR, GeForce RTX 2070 Super, 3840x1600, NVIDIA Driver 441.99
Windows Vulkan RTX, GeForce RTX 2070 Super, 3840x1600, NVIDIA Driver 441.99
Linux Vulkan RTX, Geforce RTX 2060, 1920x1080, NVIDIA Driver 435.21
We will adjust the output of the benchmark to what users request.
This release took much longer than expected ... :-)
The Forge has now support for Sparse Virtual Textures on Windows and Linux with DirectX 12 / Vulkan. Sparse texture (also known as "virtual texture", “tiled texture”, or “mega-texture”) is a technique to load huge size (such as 16k x 16k or more) textures in GPU memory. It breaks an original texture down into small square or rectangular tiles to load only visible part of them.
The unit test 18_Virtual_Texture is using 7 sparse textures:
There is a unit test that shows a solar system where you can approach planets with Sparse Virtual Textures attached and the resolution of the texture will increase when you approach.
Linux 1080p NVIDIA RTX 2060 Vulkan Driver version 435
Windows 10 1080p AMD RX550 DirectX 12 Driver number: Adrenaline software 19.10.1
Windows 10 1080p NVIDIA 1080 Vulkan Driver number: 418.81
Ephemeris 2 - the game Stormland from Insomniac was released. This game is using a custom version of Ephemeris 2. We worked for more than six months on this project.
Head over to Custom Middleware to check out the source code.
macOS 1920x1080 AMD Pro Vega 64
iOS iPhone X 812x375
Windows 10 1080p NVIDIA RTX 2080 with DXR Driver version 441.12
Windows 10 1080p NVIDIA RTX 2080 with RTX Driver version 441.12
Linux 1080p NVIDIA RTX 2060 with RTX Driver version 435