Skip to content

Releases: ConfettiFX/The-Forge

Release 1.28 - May 24th, 2019 - SWB Level Editor | Micro Profiler Re-Write | Log and File System improvements | better macOS/iOS support

11 Jun 05:11
Compare
Choose a tag to compare

We added a new section below the Examples to show screenshots and an explanation of some of the Tools that we integrated. We will fill this up over the next few releases.

  • We were helping James Webb with his level editor for 'Star Wars Galaxies' called SWB that now uses The Forge

Here is a screenshot

SWB Level Editor

SWB is an editor for the 2003 game 'Star Wars Galaxies' that can edit terrains, scenes, particles and import/export models via FBX. The editor uses an engine called 'atlas' that will be made open source in the future. It focuses on making efficient use of the new graphics APIs (with help from The-Forge!), ease-of-use and terrain rendering.

  • Memory tracking:
    • Fluid memory tracker cross-platform for Windows, macOS and Linux
    • We used MTuner to remove many memory leaks and improve memory usage. MTuner might be integrated in the future.
  • Micro Profiler: our initial implementation of Microprofiler needed to be re-done from scratch. This time we wanted to do the integration right and also implemented the dedicated UI.

Microprofiler in Visibility Buffer

Microprofiler in Visibility Buffer

To enable/disable profiling, go to file ProfileEnableMacro.h line 9 and set it
to 0(disabled) or 1(enabled).
It's supported on the following platforms:

  • Windows
  • Linux
  • macOS (GPU profiling is disabled)
  • iOS (GPU profiling is disabled)
  • Android(WIP will be enabled later on)

We can find MicroProfile integrated in the follwing examples (more will follow):

  • Unit Test 02_Compute
  • VisibilityBuffer

How to use it:
MicroProfile has different display modes. The most useful one when running inside
the application is Timers. We can change the display mode going to Mode and right
clicking the one we want.

If we are on Timer, we will be able to right click on the labels. This will enable
a graph at the bottom left.

If we wanted to just see some of the groups inside the profile display, go to Groups
and select the ones you want.

The other options are self explanatory.

If the user wants to dump the profile to a file, we just need to go to dump,
and right click on the amount of frames we want. This generates a html file in the
executable folder. Open it with your prefered web browser to have a look.

Dumping is useful, because we will be able to see the profile frame by frame,
without it being updated every frame. This will be useful when displaying in Detailed
mode.

There is also a Help menu item.

  • Log system improvements:
    • Support for multiple log files
    • Easy to use log macros
    • Scoped logging
    • Multithreaded support
    • New log format: date, time, thread, file, line, log level and message
    • No need to declare global LogManager, it will be created on demand
  • Filesystem improvements: this is fed back from one of our game engine integrations of The Forge
    • file time functions now use time_t
    • added FileWatcher class for Windows/Linux/macOS
    • added CombinePaths function
  • macOS / iOS Metal:
    • added Barriers with memoryBarrierWithScope for Buffers,Textures and Render targets
    • added GPU sync with MTLFence as fallback (for cross encoder synchranization and BlitEncoder where memoryBarrier isn't available). Removed force fence on render targets change because it is no longer necessary. There might be a small performance improvements coming from this
    • support of Microprofiler see above
    • refactor of windows support code: replaced MTKView for iOS and macOS with a custom NSview and NSWindow implementation. We have more explicit control now over the window.
  • Issues fixed:
    • #112 - cmdBindDescriptors performance issue (DX12)
    • #110 - RenderDoc compatibility with SM6+

Release 1.27 - April 25th, 2019 - Spring House Cleaning Release :-)

11 Jun 05:10
fea06be
Compare
Choose a tag to compare
  • DirectX
    • Improved our support for DXGI_FORMAT_BC6H_SF16, DXGI_FORMAT_BC7_UNORM
    • DirectX12 removed CPU wait on GPU only fences.
  • Windows - header include cleanup, resolved conflict with CALLTYPE enum in objidl.h
  • macOS / iOS - utilize packed_* data types more in shaders
  • Replaced some usages of GPURingBuffer with API Buffers, for reduced dependencies
  • Unit tests fixes
    • Fixed sky frag shaders in all unit tests
    • Fixed unit test debug vk crash from validation layer with AMD gpu (Vulkan SDK 1.1.101)
  • UI fixes + improvements
    • Added an example of how to use the texture previewer widget in the ui unit test (13_UserInterface)
    • App can now control the UI descriptor binder update freq
  • Improved ThreadedTask system and added helper texture loading code that uses the new async loading system in 06_MaterialPlayground and Visibility Buffer
  • Fixed issue #100 "About FBX resource import?"

Release 1.26 - April 3rd, 2019 - Vulkan Ray Tracing for Windows & Linux

04 Apr 00:35
23084e8
Compare
Choose a tag to compare
  • Ray Tracing with the Vulkan API (Vulkan SDK 1.1.101.0) is now working on Windows and Ubuntu through our unified Ray Tracing interface in IRay.h:

PC Ubuntu Vulkan RTX, GeForce RTX 2070, Driver Version 418.56 1080p
Ray Tracing on PC Ubuntu with Vulkan RTX

PC Windows 10 RS5, DirectX12, GeForce RTX 2070, Driver version 418.81 1080p:
Ray Tracing on PC With DXR

Mac Mini with Intel Core i5 3GHz cpu with integrated graphics Intel UHD Graphics 630 (Part No. MRTT2RU/A) with resolution 3440x1440:
Ray Tracing on macOS

iPad 6th Generation iOS 12.1.3 (16D39) with a resolution of 2048x1536
Ray Tracing on iOS

  • New Descriptor Memory Management System: we did a second pass over that system and improved performance and memory consumption further. Now we can group individual descriptor bindors into a single one. A lot of bug and memory leak fixes were done as well.
  • Async / Sync Resource Loading system: instead of allocating additional memory, it uses now fixed size memory and splits resources for upload
  • Unified UniformRingBuffer and MeshRingBuffer into GPURingBuffer
  • Vulkan: we implemented now something close to the official recommendation how to convert "Vsync on/off" to Vulkan parameters (in pseudocode) (thanks to Adam Sawicki
    @Reg__):
if mEnableVsync:
    Try to find among available present modes, in this order: FIFO_RELAXED, FIFO
else:
    Try to find among available present modes, in this order: IMMEDIATE, MAILBOX, FIFO (we prefer here FIFO_RELAXED instead)

if chosen mode == IMMEDIATE:
    imageCount = (Fullscreen ? 2 : 3)
else if chosen mode == MAILBOX:
    imageCount = 3
else if chosen mode == FIFO or FIFO_RELAXED:
    imageCount = 2
imageCount = max(VkSurfaceCapabilitiesKHR::minImageCount, min(imageCount, VkSurfaceCapabilitiesKHR::maxImageCount))

Release 1.25 - March 15th, 2019 - New Descriptor Memory Management System | Refactored Input System

17 Mar 22:07
0df6d60
Compare
Choose a tag to compare
  • The purpose of the DescriptorBinder approach is to allocate all memory descriptor space at load time, instead of doing it on-demand at runtime, as it is commonly done. This is done in an effort to allow applications to have better control over memory footprint overhead, which is especially important on mobile targets, and to improve performance by avoiding runtime memory allocations.
    The system will use shader reflection to determine the appropriate descriptor layouts in combination with descriptor update frequency knowledge. This knowledge will come from the client domain or from content editor tools.
    With this information, we are able to allocate all necessary descriptor memory up-front, giving more control to the application about the memory footprint. This is one of the initiatives leading up to the new version of The Forge.
    Read more Descriptor Management

  • The input system was refactored and streamlined. This is mostly a rewrite of the code layer above gainput.

    • IOperatingSystem.h: getMousePosition, getKeyDown, getKeyUp, getJoystickButtonDown, getJoystickButtonUp were removed
    • InputSystem.h:
      • KeyMappingDescription - changed now every axis should be defined as separate entry
      • IsButtonPressed, IsButtonTriggered, IsButtonReleased, MapKey, SetActiveInputMap, GetButtonData, GetDisplayWidth, GetDisplayHeight, were removed
      • New functions GetBoolInput, GetFloatInput. KeyMappingDescription for new function require directly specifying intended action(released, pressed, triggered) via DEFINE_DEVICE_ACTION macro
      • For InputEventHandler old style definition is used

Release 1.24 - March 1st, 2019 - Asynchronous Resource Loading | Micro Profiler

17 Mar 22:06
cf944b1
Compare
Choose a tag to compare

The Forge now allows to asynchronously load resources on all platforms. There are two ways to do this:

  • use addResource/updateResource with boolean parameter called batch set to true, and later wait for completion with waitBatchCompleted (used in 01_Transformations, 03_MultiThread, 06_MaterialPlayground, 09_LightShadowPlayground, 09a_HybridRaytracing, 12_RendererRumtimeSwitch, 15_Transparency)
  • use addResource with SyncToken parameter and check for completion with isTokenCompleted or wait for completion with waitTokenCompleted (used in 10_PixelProjectedReflections)
    addResource/updateResource with boolean parameter set to false are the old blocking versions.
    Let us know what you think of this system.
  • We integrated zeux's Micro Profiler into The Forge. So far it supports DirectX 11, 12 and Vulkan. We are still working on Metal and Android support.

Chrome
Micro Profiler in Chrome

Visibility Buffer on PC Windows 10
Micro Profiler in Visibility Buffer

Linux Ubuntu
Micro Profiler Linux Ubuntu

  • Better integration of Ray Tracing into the renderer; still Vulkan RTX is work in progress
  • Fixed Vulkan instance extension bug: "InstanceLayers loop is wrong in CreateInstance" issue #92

Release 1.23 - February 14th, 2019 - New Cross-Platform Ray Tracing Interface

17 Mar 22:06
3d4e512
Compare
Choose a tag to compare

Happy Valentines! Here is some love from The Forge team:

  • new cross-platform Ray Tracing interface in IRay.h, currently supporting DXR (Vulkan comes next) and Metal Ray Tracing on Windows, macOS and iOS. In other words you can now write Ray Tracing code that runs on Windows, macOS and iOS. You will need a RTX GPU to run this on Windows. On macOS / iOS only latest software update is needed.

PC Windows 10 RS5, DirectX12, GeForce RTX 2070, Driver version 418.81 with resolution 3440x1440:
Ray Tracing on PC With DXR

Mac Mini with Intel Core i5 3GHz cpu with integrated graphics Intel UHD Graphics 630 (Part No. MRTT2RU/A) with resolution 3440x1440:
Ray Tracing on macOS

iPad 6th Generation iOS 12.1.3 (16D39) with a resolution of 2048x1536
Ray Tracing on iOS

  • Rewrote the Light & Shadow Playground from scratch, thanks to Mateusz Kielan:

iMac with AMD RADEON 580 (Part No. MNED2xxA) with resolution of 5120x2880:
Light & Shadow Playground

iPhone 7 iOS 12.1.4 (16D57) with a resolution of 1334x750:
Light & Shadow Playground

Linux Ubuntu 18.04.1 LTS Vulkan 1.1.92 RADEON 480 Driver 18.30 with a resolution of 1920x1080:
Light & Shadow Playground

  • macOS / iOS:

    • upgraded to
      • macOS Mojave 10.14.4 beta (18E174f)
      • iOS 12.2 beta (16E5181f)
      • Xcode 10.2 beta (10P82s)
    • a few months ago, we submitted a bug report for wave intrinsics to Apple and with the latest firmware beta (see above), wave intrinsics are working now in unit test 15
    • support PVR texture compression (V3 header) on iOS
  • Improvements for all Platforms:

    • 3D Texture mip maps for write
    • Unified texture subresource updates across all APIs
    • Memory optimizations: much less memory is used across all platforms
  • All the unit tests are now in one folder unit test and they are in one solution file

Release 1.22 - January 22nd, 2019 - TressFX Hair | Entity Component System | Lua Scripting System

23 Jan 00:40
a36471d
Compare
Choose a tag to compare

This is the first release in 2019 and The Forge GitHub repository is today exactly one year old, with the first release on the same day last year :-) In 2018 we made 22 releases and we improved The Forge in many areas.
If you followed us so far ... why not just join us? We are looking for more graphics programmer joining our teams. We have offices in Encinitas, CA USA (Main) / Mumbai, India / Shanghai, China / Breda, Netherlands / St. Petersburg, Russia and in Lviv, Ukraine.

Now back to release notes: many years ago in 2012 / 2013, we helped AMD and Crystal Dynamics with the development of TressFX for Tomb Raider. We also wrote an article about the implementation in GPU Pro 5 and gave a few joint presentations on conferences like FMX. At the end of last year we revisited TressFX. We took the current code in the GitHub repository, changed it a bit and ported it to The Forge. It now runs on PC with DirectX 12 / Vulkan, macOS and iOS with Metal 2 and on the XBOX One. We also created a few new hair assets so that we can showcase it. Here are screenshots of our programmers art:

PC Windows DirectX 12 GTX 950 Driver 416.81:

Hair on PC

iPad (Model A1803):

Hair on iOS

The current implementation is overall too slow to be used on some of our platforms but we are going to improve performance over time. We are also going to improve on the hair art assets.
Apart from Hair, the Material Playground now also has improved versions of Metal and a new material category Wood:

Metal:

Material Playground Metal on PC

Wood:

Material Playground Wood on PC

Image of the Entity Component System unit test in The Forge

  • Lua Scripting System for all platforms: the Lua scripting integration allows to register functions to lua contexts so these functions will be available via scripts. Functions can be static or lambda. In latter case you can store some state information within lambda. Scripts are executed using LuaManager::RunScript() or LuaManager::AddAsyncScript() methods. In second case scripts are still executed in synchronous way. Async execution implementation is planned. Also there is "updateable" script. It is loaded (at this point script main body is executed), then it can be "updated" - update() function from script is invoked. Script can invoke any registered function and can store state information which will be available from update to update. The script can be reloaded - can be useful for fast iterations when you just modify script and don't even need to restart application. If that script contains exit() function then it will be executed when script is reloaded or closed. Checkout unit test 06_MaterialPlayground for an example on how to use it. In this unit tests it executes three scripts to load models and textures and animate the camera.

Release 1.21 - December 1st, 2018 - Season Greetings with new Skinning Unit Test | Unified Vulkan Shaders

23 Jan 00:39
63a3c30
Compare
Choose a tag to compare

The team will soon go into winter hybernation mode ... which means many Confetti people will fly home over the holiday season to spend time with their loved ones. We will be back with more releases next year, probably in February.

To send you season greetings, we extended our Ozz implementation by adding a new Skinning unit test:

PC Windows 10 DirectX 12 GeForce 950 Driver 411.63 with a resolution of 1080p
PC Windows 10 skinning unit test

Linux Ubuntu 18.04.1 LTS Vulkan 1.1.92 RADEON 480 Driver 18.30 with a resolution of 1920x1080
Ubuntu skinning unit test

iMac with AMD RADEON 580 (Part No. MNED2xx/A) with resolution of 1920x1080
macOS skinning unit test

iPhone 7 iOS 12.0.1 (16A404) with a resolution of 1334x750
iOS skinning unit test

XBOX One
XBOX One skinning unit test

  • Vulkan:
    • all three Vulkan platforms (Windows, Linux, Android) use now the same Vulkan shaders
    • Upgraded Linux and Windows SDK to 1.1.92.1
  • The math library now supports more integer data types
  • Updated assimp to use latest master + added projects instead of shipping binaries
  • macOS / iOS
    • Added support for iOS Gestures (Not currently in use in the unit-tests)
    • Improved pixel projected reflections on Metal Platforms
    • Upgraded all the XCode projects to target Xcode 10.1 (10B61) and iOS Version 12.0.1 (16A404)
    • Started Testing additionally on A12 Devices Phone Xs Max (Model MT5D2LL/A)
  • Numerous shader translator updates. Head over to Confetti Shader Translator check them out :-) It is getting more and more stable.

Release 1.20 - November 15th, 2018 - Triangle Visibility Buffer with PBR | Ray Marching Unit Test | Font Rendering Dark Mode

17 Nov 03:53
f42cd52
Compare
Choose a tag to compare
  • Triangle Visibility Buffer (for PC and XBOX One. macOS and Linux will be supported in the next release):
    • Added PBR art assets and PBR Lighting (please download the art assets again with the script see Install section below)
    • Added swapchain3 DirectX 12 HDR support (in the future swapchain4 and Vulkan HDR will be added) and additionally made sure the PBR art assets are HDR "enabled"
    • There is an automatic camera fly-through to make demos easier
    • God rays were added for additional "awesomeness"
    • With the new PBR art assets and God rays (switchable), we still expect it to run faster than before on all target platforms

PC Windows 10 DirectX12 NVIDIA GeForce 1080 Driver 416.16 with a resolution of 3840x2160 in window mode (MSAA x2)
Triangle Visibility Buffer PC DirectX 12

PC Windows 10 Vulkan 1.1.85 NVIDIA GeForce 1080 Driver 416.16 with a resolution of 3840x2160 in window mode (MSAA x2)
Triangle Visibility Buffer PC Vulkan

Linux Ubuntu 18.04.1 LTS Vulkan 1.1.85 AMD RX480 resolution of 1920x1080 in window mode (MSAA x2)
Triangle Visibility Buffer Linux Vulkan

iMac with AMD RADEON 580 (Part No. MNED2xx/A) 2560x1440 in window mode (MSAA x1)
Triangle Visibility Buffer iMac

Xbox One resolution of 1920x1080
Triangle Visibility Buffer XBOX One

PC Windows 10 Vulkan 1.1.85 GeForce 950 Driver 416.81 with a resolution of 1920x1080 in window mode:
Ray Marching example PC

iMac with AMD RADEON 580 (Part No. MNED2xx/A) with resolution of 1920x1080 in window mode:
Ray Marching example iMac

Linux Vulkan 1.1.85 RADEON 480 Driver 18.30 with a resolution of 1920x1080 in window mode:
Ray Marching example Linux

  • The font rendering unit test was upgraded
    • Added light and dark theme (... inspired by macOS here)
    • Added fit-to-screen functionality for arbitrary resolutions
    • Scene text is now docked to center

Image of the Font Rendering Unit test

  • There were many updates for iOS / macOS and XBOX One run-times and a few for Linux

Release 1.19 - November 1st, 2018 - Material Playground

02 Nov 00:32
ad772b0
Compare
Choose a tag to compare
  • Added more materials to the Material Playground. Therefore you want to download the Art folder again just for this release (see the Install section below on how to do this).
    Here are shots of five of the supported platforms:

PC Windows 10 Vulkan 1.1.82.1 GeForce 1080 Driver 399.07 with a resolution of 1920x1080 in full-screen:
Material Playground on PC

Linux Vulkan 1.1.82.1 RADEON 480 Driver 18.30 with a resolution of 1920x1080 in full-screen:
Material Playground on PC

iMac with AMD RADEON 580 (Part No. MNED2xx/A) with resolution of 5120x2880 in full-screen:
Material Playground on iMac

iPad (Model A1803) with iOS 12.0 and a resolution of 2048x1536 in full-screen:
Material Playground on iPad

XBOX One:
Material Playground on XBOX One

  • Updated Fontstash library to the latest version and added .OTF font file support
  • macOS / iOS Metal 2 we are working on applications running on those run-times, so there is a constant stream of improvmements coming in:
    • Sampler arrays
    • Enable some parts of GPU profiler code for debug markers, cpu timestamps on Metal runtime
    • File system bug fixes
    • Include headers fixes
    • Improved error and warnings in Metal shaders