Skip to content

Methane Kit v0.2

Compare
Choose a tag to compare
@egorodet egorodet released this 17 Jan 15:08
· 2465 commits to master since this release

Asteroids sample with multi-threaded rendering and many optimizations was added in this release:

  • Asteroids sample demonstrating multi-threaded rendering Methane Asteroids DirectX 12
    • Many rendering optimizations implemented:
      • Multi-threaded rendering with ParallelRenderCommandList was implemented to reduce CPU frame time.
      • Dynamic asteroid mesh LOD selection implemented with estimation of visible asteroid screen-size. This resolved main GPU performance bottleneck. Visualization of asteroid LODs with coloring as well as dynamic changing LODs distribution are available by hot-keys.
      • 16-bit index buffers are used instead of 32-bit index buffers for all meshes.
      • Asteroids array uniforms buffer update on CPU was significantly accelerated by reducing number of matrix multiplications and using SSE-accelerated implementation of CML matrix multiplication operator.
      • Minimized pixel overdraw with near-to-far rendering order and inverted depth buffer.
      • Minimized texture binding calls with binding whole textures array to program argument at once and selecting asteroid texture with texture index uniform.
    • Application controller added for hot-keys handling:
      • change scene complexity;
      • switch parallel rendering;
      • switch mesh LOD coloring;
      • change mesh LOD complexity;
      • show simulation parameters in message box.
    • Sample is instrumented with scope timers for fast low-overhead profiling.
    • Methane logo badge rendering added.
    • Numerous bug fixes.
  • Graphics Core API new features
    • RenderPass on Windows now uses native D3D12 render-pass feature whenever possible (closed #47).
    • ParallelRenderCommandList was added for multi-threaded rendering with an array of internally managed RenderCommandLists into single RenderPass (closed #9).
    • RenderCommandList now can be reset without RenderState setup.
    • RenderState was extended:
      • Depth::write_enabled state was added.
      • Blending state settings were added.
      • Incremental state applying was implemented to eliminate repeated state setup in command list.
    • Program::ResourceBindings improvements:
      • Resources array binding to program arguments is supported.
      • Apply behavior flags added for optimization purposes.
      • Parallel initialization of resource bindings with copying descriptors to GPU.
    • Context improvements:
      • clear_color and clear_depth_stencil settings are now optional (closed #40).
      • Metal frame capture in Xcode is fixed with explicit specification of capture-scope.
      • Getter of content scaling ratio was added (DPI factor on Windows, Retina factor on MacOS).
    • Vulkan API implementation stubs added.
  • Graphics Extensions and Helpers new features
    • ScreenQuad graphics extension was added.
    • LogoBadge convenience primitive was added and used for drawing Methane watermark in samples and tutorials (closed #46)
    • Mesh generators now use 16-bit indices instead of 32-bit for lower memory overhead.
    • FpsCounter calculates CPU work percent additionally to frame time (displayed in window header HUD), allowing easily detect CPU/GPU-bound scenario.
  • Platform abstraction and Data module features
    • ScopeTimer is implemented for low-overhead profiling.
    • ParallelFor implementation was updated to use Parallel Primitives Library (PPL) on Windows and home-brewed std::async-based implementation on other platforms.
    • Graphics::App rendering is suspended when window is minimized (closed #48).
    • LinuxApp stub implementation added.
  • External libraries
    • CML library extended with SSE-accelerated implementation of matrix multiplication operator.
  • Build infrastructure
    • Shaders compilation improvements:
      • Metal Shading Language 2.0 is now used instead of 1.0 on MacOS.
      • Fixed HLSL shaders compilation with different macro-definition values in build-time.
      • HLSL shader optimisation compiler flags applied in Release builds.
    • Build scripts were improved:
      • CMake build parameters added to script variables.
      • Build/Posix/Build.sh can be used both on MacOS and Linux.
    • Build version is now correctly added in application files metadata.
    • Linux build is now supported both by Build/Posix/Build.sh script, Visual Studio and Azure Pipelines CI.
    • Gitpod cloud-IDE is now supported:
      • Gitpod configuration added to repository
      • Open in Gitpod button added on ReadMe page.
    • VS Code workspace configuration added.
    • Resharper C++ configuration was added back to repository.
    • Sonar Cube binaries updated to latest version, unfortunately static code analysis is still broken.