wgpu

module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 10, 2025 License: MIT

README

wgpu

Pure Go WebGPU Implementation
No Rust, No CGO, Just Go.

CI codecov Go Reference Go Report Card License Go Version Zero CGO

Part of the GoGPU ecosystem

Status: v0.1.0-alpha — Types, Core, HAL, OpenGL ES and Vulkan backends complete!


Vision

A complete WebGPU implementation in pure Go:

  • No wgpu-native dependency — Standalone Go library
  • Direct GPU access — Vulkan, Metal, DX12 backends
  • WebGPU compliant — Following the W3C specification
  • WASM compatible — Run in browsers via WebAssembly

Installation

go get github.com/gogpu/wgpu

Usage (Preview)

import (
    "github.com/gogpu/wgpu/core"
    "github.com/gogpu/wgpu/types"
)

// Create instance for GPU discovery
instance := core.NewInstance(&types.InstanceDescriptor{
    Backends: types.BackendsVulkan | types.BackendsMetal,
})

// Request high-performance GPU
adapterID, _ := instance.RequestAdapter(&types.RequestAdapterOptions{
    PowerPreference: types.PowerPreferenceHighPerformance,
})

// Get adapter info
info, _ := core.GetAdapterInfo(adapterID)
fmt.Printf("GPU: %s\n", info.Name)

// Create device
deviceID, _ := core.RequestDevice(adapterID, &types.DeviceDescriptor{
    Label: "My Device",
})

// Get queue for command submission
queueID, _ := core.GetDeviceQueue(deviceID)

Architecture

wgpu/
├── types/         # WebGPU type definitions ✓
├── core/          # Validation, state tracking ✓
├── hal/           # Hardware abstraction layer ✓
│   ├── noop/      # No-op backend (testing) ✓
│   ├── gles/      # OpenGL ES backend ✓ (Pure Go, ~3500 LOC)
│   ├── vulkan/    # Vulkan backend ✓ (Pure Go, ~27K LOC)
│   │   ├── vk/        # Generated Vulkan bindings (~20K LOC)
│   │   └── memory/    # GPU memory allocator (~1.8K LOC)
│   ├── metal/     # Metal backend (planned)
│   └── dx12/      # DirectX 12 backend (planned)
└── cmd/
    ├── vk-gen/           # Vulkan bindings generator from vk.xml
    └── vulkan-triangle/  # Vulkan integration test (red triangle) ✓

Roadmap

Phase 1: Types Package

  • Backend types (Vulkan, Metal, DX12, GL)
  • Adapter and device types
  • Feature flags
  • GPU limits with presets
  • Texture formats (100+)
  • Buffer, sampler, shader types
  • Bind group and render state types
  • Vertex formats with size calculations

Phase 2: Core Validation

  • Type-safe ID system with generics
  • Epoch-based use-after-free prevention
  • Instance, Adapter, Device, Queue management
  • Hub with 17 resource registries
  • Comprehensive error handling
  • 127 tests with 95% coverage

Phase 3: HAL Interface

  • Backend abstraction layer (Backend, Instance, Adapter, Device, Queue)
  • Resource interfaces (Buffer, Texture, Surface, Sampler, etc.)
  • Command encoding (CommandEncoder, RenderPassEncoder, ComputePassEncoder)
  • Backend registration system
  • Noop backend for testing
  • 54 tests with 94% coverage

Phase 4: Pure Go Backends (In Progress)

  • OpenGL ES backend (hal/gles/) — Pure Go via goffi, Windows (WGL)
  • Vulkan backend (hal/vulkan/) — Pure Go via goffi, cross-platform (Windows/Linux/macOS), ~27K LOC
  • Metal backend (hal/metal/) — Required for macOS/iOS
  • DX12 backend (hal/dx12/) — Windows high-performance

Pure Go Approach

All backends implemented without CGO:

Backend Status Approach Platforms
OpenGL ES Done goffi + WGL Windows
Vulkan Done goffi + vk-gen from vk.xml Windows, Linux, macOS
Metal Planned goffi (Obj-C bridge) macOS, iOS
DX12 Planned goffi + COM Windows

Vulkan Backend Features

  • Auto-generated bindings from official Vulkan XML specification
  • Memory allocator with buddy allocation (O(log n), minimal fragmentation)
  • Vulkan 1.3 dynamic rendering — No render pass objects needed
  • Swapchain management with automatic recreation
  • Semaphore synchronization for frame presentation
  • Complete HAL implementation:
    • Buffer, Texture, TextureView, Sampler
    • ShaderModule, BindGroupLayout, BindGroup
    • PipelineLayout, RenderPipeline, ComputePipeline
    • CommandEncoder, RenderPassEncoder, ComputePassEncoder
    • Fence synchronization, WriteTexture immediate upload
  • Comprehensive unit tests (93 tests, 2200+ LOC):
    • Conversion functions (formats, usage, blend modes)
    • Descriptor allocator logic
    • Resource structures
    • Memory allocator (buddy allocation)

References

Project Description
gogpu/gogpu Graphics framework
gogpu/naga Pure Go shader compiler
go-webgpu/webgpu FFI bindings (current solution)

Contributing

We welcome contributions! See CONTRIBUTING.md for guidelines.

License

MIT License — see LICENSE for details.


wgpu — WebGPU in Pure Go

Directories

Path Synopsis
cmd
gles-test command
Command gles-test is an integration test for the Pure Go GLES backend.
Command gles-test is an integration test for the Pure Go GLES backend.
vk-gen command
Command vk-gen generates Pure Go Vulkan bindings from vk.xml specification.
Command vk-gen generates Pure Go Vulkan bindings from vk.xml specification.
vk-test command
Command vk-test is an integration test for the Pure Go Vulkan backend.
Command vk-test is an integration test for the Pure Go Vulkan backend.
vulkan-triangle command
Command vulkan-triangle is a full integration test for the Pure Go Vulkan backend.
Command vulkan-triangle is a full integration test for the Pure Go Vulkan backend.
Package core provides validation and state management for WebGPU resources.
Package core provides validation and state management for WebGPU resources.
hal
Package hal provides the Hardware Abstraction Layer for WebGPU implementations.
Package hal provides the Hardware Abstraction Layer for WebGPU implementations.
dx12
Package dx12 provides a DirectX 12 backend for the HAL.
Package dx12 provides a DirectX 12 backend for the HAL.
gles
Package gles implements the HAL backend for OpenGL ES 3.0 / OpenGL 3.3+.
Package gles implements the HAL backend for OpenGL ES 3.0 / OpenGL 3.3+.
gles/gl
Package gl provides OpenGL constants and types for the GLES backend.
Package gl provides OpenGL constants and types for the GLES backend.
gles/wgl
Package wgl provides Windows OpenGL (WGL) context management.
Package wgl provides Windows OpenGL (WGL) context management.
metal
Package metal provides a Metal backend for the HAL.
Package metal provides a Metal backend for the HAL.
noop
Package noop provides a no-operation GPU backend.
Package noop provides a no-operation GPU backend.
vulkan
Package vulkan provides Pure Go Vulkan backend for the HAL.
Package vulkan provides Pure Go Vulkan backend for the HAL.
vulkan/memory
Package memory provides GPU memory allocation for Vulkan backend.
Package memory provides GPU memory allocation for Vulkan backend.
Package types defines WebGPU types that are backend-agnostic.
Package types defines WebGPU types that are backend-agnostic.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL