Skip to content

koubaa/goldy

Repository files navigation

Goldy Logo

Goldy: Modern GPU Library

License: MIT

A modern Rust GPU library that deliberately sheds legacy baggage. Goldy targets only modern GPU APIs (Vulkan 1.4+, DX12, Metal Tier2+) and can therefore be significantly simpler than libraries that must maintain backward compatibility.

Quick Example

use goldy::{Instance, DeviceType, Buffer, DataAccess, Color, CommandEncoder, FrameOutput, TextureFormat};

fn main() -> anyhow::Result<()> {
    let instance = Instance::new()?;
    let device = instance.create_device(DeviceType::DiscreteGpu)?;
    
    let frame = FrameOutput::new(&device, 800, 600, TextureFormat::Rgba8Unorm);
    let mut encoder = CommandEncoder::new();
    {
        let mut pass = encoder.begin_render_pass();
        pass.clear(Color::CORNFLOWER_BLUE);
    }
    
    let pixels = frame.render(encoder)?;
    Ok(())
}

Features

Attribute Description
Rust-native Idiomatic Rust API, not a wrapper around C
Modern-only Vulkan 1.4+, DX12, Metal Tier 2
Slang shaders Single shader language for all backends
Legacy-free No OpenGL, no Vulkan <1.4, no OpenCL
Unified Graphics and compute in one API
Fast-moving Not a standard—can iterate quickly

Installation

[dependencies]
goldy = "0.1"

Slang Compiler

Goldy uses Slang for shader compilation. The build script automatically downloads Slang 2026.4 during compilation. You can also:

  • Set GOLDY_SLANG_PATH to use a custom Slang installation
  • Run slang/download.sh to manually download vendored binaries

For FFI bindings (Python, .NET, C++), Slang libraries are bundled automatically by the respective build scripts. See PACKAGING.md for architecture details and DEBUGGING.md for troubleshooting.

Optional Rust vs Slang struct layout checks at shader compile time: set GOLDY_VALIDATE_LAYOUTS=1 and pass LayoutCheck data from #[derive(LayoutCheckable)] into ShaderModule::from_slang_with_options (see DEBUGGING.md and the gradient / checkerboard examples).

Documentation

📖 Full Documentation

Examples

Run the interactive examples:

cargo run --example triangle --release      # Basic triangle
cargo run --example digital_clock --release # 7-segment clock
cargo run --example plasma --release        # Demoscene plasma
cargo run --example mandelbrot --release    # Fractal explorer
cargo run --example starfield --release     # 3D starfield
cargo run --example particles --release     # Rain/snow

Selecting a Backend

By default, Goldy uses DX12 on Windows and Vulkan on Linux. Override with GOLDY_BACKEND:

# Run with Vulkan backend (on Windows)
GOLDY_BACKEND=vulkan cargo run --example triangle --release

# Run with DX12 backend
GOLDY_BACKEND=dx12 cargo run --example triangle --release

See all examples.

Motivation

Goldy is inspired by Sebastian Aaltonen's "No Graphics API" vision of what's possible with modern GPU hardware. By targeting only modern GPUs (2018+), Goldy can:

  • Use dynamic rendering (no render pass objects)
  • Use bindless descriptors (no descriptor sets)
  • Assume coherent caches (simpler synchronization)
  • Provide a dramatically simpler API

Goldy is also inspired by:

Read more in Design Philosophy.

Target Hardware

Platform Minimum
NVIDIA RTX 2000 / GTX 1600 (2018+)
AMD RDNA 1 / RX 5000 (2019+)
Intel Xe / Alchemist (2022+)
Apple M1 / A14 (2020+)

Development

Before submitting a PR, run the CI checks locally:

cargo fmt --all -- --check
cargo clippy -- -D warnings
cargo test

License

MIT License - see LICENSE for details.

Author

Mohamed Koubaa

Contributing

Contributions welcome! See CONTRIBUTING.

About

Rust Abstract GPU

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors