Skip to content

v0.1.0 - gpgpu MVP 🎉

Compare
Choose a tag to compare
@jeronimosg jeronimosg released this 04 Nov 00:19
· 23 commits to dev since this release
v0.1.0
46b7f7a

gpgpu is a GPGPU compute framework built on top of wgpu compute pipeline. It tries to be simple to use whilst being easy to integrate with wgpu.

✨ Features

🔖 GPU Compute made simple

gpgpu exposes some GPU objects with clearly defined methods for read and write data from / to the GPU. Some of these objects are:

  • GpuBuffer: Homogeneous read-write (in shaders) buffer on the GPU.
  • GpuUniformBuffer: Homogeneous read-only (in shaders) buffer on the GPU. Perfect for small, readonly data.
  • GpuConstImage and GpuImage: 2D homogeneous image on the GPU. The former is read-only, while the latter is write-only (in shaders).

gpgpu also exposes DescriptorSet and Kernel objects to make easier the management and reuse of binding groups and executions of shaders.

🚩 integrate-image feature for integration with image crate

  • Compile-time type conversion safety from/to image::ImageBuffer to/from gpgpu::GpuImage and gpgpu::GpuConsyImageobjects
    • Supported pixel types:
      • RGBA8 Uint
      • RGBA8 Uint Norm
      • RGBA8 Sint
      • RGBA8 Sint Norm
    • Bidirectional conversions between image::ImageBuffer and gpgpu::GpuImage or gpgpu::GpuConsyImage
      • Sync and async read
      • Sync and async writes

â›° Enviroment backend selection

Using the env variable WGPU_BACKEND, the gpgpu-rs backend can be selected. Available options are:

  • Vulkan: "vulkan" or "vk"
  • DX12: "dx12" or "d3d12"
  • DX11: "dx11" or "d3d11"
  • Metal: "metal" or "mtl"
  • OpenGL ES: "opengl", "gles" or "gl"
  • WebGPU: "webgpu"
    Any comma separeted combiantion of any of the previous options is valid. ex. WGPU_BACKEND='vk,gl'

🆘 Help wanted

  • For an efficient implementation of the conversion between image and gpgpu types, some unsafe code was required. A review of this fragment is very much appreciated 😄 (in src/features/integrate_image.rs 👀).
  • I'm running out of ideas. The initial goal of this project was to allow me develop a GPU-based image processing library (imageproc_gpu). Since I think gpgpu is enough for that (but still very lacking), I'll continue with that project, adding whatever I need for GPGPU computing back at gpgpu. Any other idea is appreciated.

Full Changelog: v0.0.0-alpha.2...v0.1.0