Third Parties
Information about third-party libraries and tools used in the project.
gp-engine integrates a curated set of third-party libraries to support windowing, graphics API
abstraction, shader compilation, and performance profiling. This document lists every external
dependency, its version, and its role within the engine. We do not bundle dependencies beyond what
is listed here; all third-party code is tracked as submodules or vendored under the thirdparty/
directory.
Windowing & Input
SDL3
- Version:
3.4.0 - Role: Cross-platform windowing, OpenGL/Vulkan surface creation, input event handling, and gamepad support.
- SDL3 is the primary abstraction layer between
gp-engineand the host operating system's windowing system. All platform window handles passed to the rendering backends are obtained through SDL3. - License: Zlib
- Repository: libsdl-org/SDL
Testing
Catch2
- Version:
3.14.0 - Role: Unit and integration testing framework for all engine modules.
- We use Catch2 as the sole testing framework across the codebase. All tests are located in the
tests/directory and are organized to mirror the module structure of the engine. Do not introduce additional testing frameworks without prior discussion. - License: BSL-1.0
- Repository: catchorg/Catch2
Graphics APIs
The engine supports multiple rendering backends. Each backend maps to one or more of the following graphics API integrations.
The active backend is selected at CMake configuration time using the -DGP_USE_VULKAN=ON or
-DGP_USE_OPENGL=ON flags. Integrated APIs such as OpenGL, Metal, and DirectX 11 do not
require a separate installation step, as they are provided by the host platform.
DirectX 11 (integrated)
- Version: Integrated, provided by the Windows SDK.
- Role: Legacy Direct3D 11 rendering backend targeting Windows platforms.
- No vendored headers are required. The engine links against
d3d11.libanddxgi.libsupplied by the Windows SDK present in the build environment.
DirectXHeaders (D3D12)
- Version:
1.619.1 - Role: Provides the official D3D12 and DXGI headers for the Direct3D 12 rendering backend.
- These headers are sourced from Microsoft's official distribution and are preferred over those bundled with older Windows SDKs to ensure access to the latest API surface.
- License: MIT
- Repository: microsoft/DirectX-Headers
D3D12 Memory Allocator
- Version:
v3.1.0 - Role: GPU memory suballocation library for the Direct3D 12 rendering backend.
- We use D3D12MA to manage all D3D12 heap allocations. Do not call
ID3D12Device::CreateCommittedResourcedirectly in rendering code; route all resource creation through the allocator to ensure correct pooling and budget tracking. - License: MIT
- Repository: GPUOpen-LibrariesAndSDKs/D3D12MemoryAllocator
Metal (integrated)
- Version: Integrated, provided by the macOS/iOS SDK.
- Role: Metal rendering backend targeting Apple platforms.
- No vendored headers are required. The engine links against the
Metal.frameworkandQuartzCore.frameworksupplied by Xcode.
OpenGL (integrated)
- Version: Integrated, provided by the host platform's GPU drivers.
- Role: Cross-platform OpenGL rendering backend.
- OpenGL function pointers are loaded at runtime. We do not vendor a separate loader library; loading is handled by SDL3's built-in OpenGL function pointer resolution.
Vulkan-Headers
- Version:
1.4.341 - Role: Provides the Vulkan C API headers (
vulkan/vulkan.h) and the Vulkan XML registry. - These headers are used by the Vulkan rendering backend and by all shader toolchain libraries that consume Vulkan-specific SPIR-V metadata.
- License: Apache-2.0
- Repository: KhronosGroup/Vulkan-Headers
Vulkan-Loader
- Version:
1.4.341 - Role: Runtime loader that resolves Vulkan instance and device function pointers from the installed ICD (Installable Client Driver).
- On platforms where a system Vulkan loader is available, linking against the vendored loader is
optional and controlled by the
GP_USE_SYSTEM_VULKAN_LOADERCMake flag. - License: Apache-2.0
- Repository: KhronosGroup/Vulkan-Loader
Vulkan Memory Allocator
- Version:
v3.3.0 - Role: GPU memory suballocation library for the Vulkan rendering backend.
- We use VMA to manage all
VkDeviceMemoryallocations. Do not callvkAllocateMemorydirectly in rendering code; route all resource creation through the allocator to ensure correct pooling, defragmentation support, and budget tracking. - License: MIT
- Repository: GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator
Shader Toolchain
The engine uses a SPIR-V–centric shader pipeline. GLSL source shaders are compiled to SPIR-V at build time, reflected for resource binding metadata, and cross-compiled to backend-native shading languages where required.
Glslang
- Role: Reference GLSL/HLSL front-end compiler that produces SPIR-V bytecode.
- All GLSL shader sources in
shaders/are compiled viaglslangValidatoras a build step. Do not check in precompiled SPIR-V binaries; they are generated as part of the standard build. - License: Multiple, see repository
- Repository: KhronosGroup/glslang
DXC
- Version:
v1.9.2602 - Role: Microsoft's DirectX Shader Compiler, used to compile HLSL shader sources to DXIL and SPIR-V.
- DXC is the preferred compiler for all HLSL sources targeting the D3D12 backend. It is also used
as an alternative SPIR-V front-end for HLSL shaders on the Vulkan path. Do not use the legacy
fxccompiler for any new shader work. - License: University of Illinois Open Source License
- Repository: microsoft/DirectXShaderCompiler
SPIRV-Cross
- Role: Transpiles SPIR-V bytecode to GLSL, HLSL, and Metal Shading Language (MSL) for backends that do not natively consume SPIR-V.
- SPIRV-Cross is used at runtime on Metal and legacy OpenGL paths to produce backend-appropriate shader source from the canonical SPIR-V representation.
- License: Apache-2.0
- Repository: KhronosGroup/SPIRV-Cross
SPIRV-Tools
- Role: Provides SPIR-V validation, optimization, and binary manipulation utilities.
- The optimizer pass is run as a post-processing step on all compiled SPIR-V modules in
Releasebuilds. Always validate SPIR-V output during development using thespirv-valutility. - License: Apache-2.0
- Repository: KhronosGroup/SPIRV-Tools
SPIRV-Reflect
- Role: Lightweight library for extracting shader resource binding metadata directly from SPIR-V bytecode.
- We use SPIRV-Reflect at runtime to automatically build pipeline layouts and descriptor set layouts from compiled shader modules, without requiring manually authored binding tables.
- License: Apache-2.0
- Repository: KhronosGroup/SPIRV-Reflect
SPIRV-Headers
- Role: Provides the canonical SPIR-V header files (
spirv.h,GLSL.std.450.h, etc.) and machine-readable grammar JSON files consumed by other SPIR-V toolchain libraries. - SPIRV-Headers is a transitive dependency of Glslang, SPIRV-Tools, and SPIRV-Cross. Do not depend on it directly from engine code; use the higher-level toolchain libraries instead.
- License: MIT
- Repository: KhronosGroup/SPIRV-Headers
Profiling
Tracy
- Version:
0.13.1 - Role: Frame profiler providing CPU and GPU timing, memory allocation tracking, and flame graph visualization.
- Tracy instrumentation is compiled in under the
GP_ENABLE_PROFILING=ONCMake flag and stripped entirely fromShippingbuilds. Prefer Tracy zones over ad-hoc timing code for any performance investigation. Do not leave profiling markers in code paths that are not intentionally instrumented. - License: BSD-3-Clause
- Repository: wolfpld/tracy