v0.1.0 - gpgpu MVP 🎉
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
andGpuImage
: 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/fromgpgpu::GpuImage
andgpgpu::GpuConsyImage
objects- Supported pixel types:
- RGBA8 Uint
- RGBA8 Uint Norm
- RGBA8 Sint
- RGBA8 Sint Norm
- Bidirectional conversions between
image::ImageBuffer
andgpgpu::GpuImage
orgpgpu::GpuConsyImage
- Sync and async read
- Sync and async writes
- Supported pixel types:
â›° 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
andgpgpu
types, someunsafe
code was required. A review of this fragment is very much appreciated 😄 (insrc/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 atgpgpu
. Any other idea is appreciated.
Full Changelog: v0.0.0-alpha.2...v0.1.0