Cross-platform, safe, pure-rust graphics api.
Go to file
bors[bot] a60f3f13fa Merge #62
62: Separate object identity from storage r=grovesNL a=kvark

This turned out to be a giant change touching multiple parts... with main goal to prepare for wgpu-remote. The basic incompatibility I found is that the client side needs to know the IDs and manage them, while the server side needs to access the actual objects by those IDs. This change moves the `IdentityManager` out, while still making it convenient for the local bindings to use it the old way.

The actions for creating a buffer remotely would be:
  1. client allocates a new ID
  2. client sends the descriptor and ID to the server
  3. server creates an actual backend object from the descriptor
  4. server associates it with the given ID

While doing that, I also decided to bring the local/remote registries closer together. There isn't much benefit from representing an ID with a pointer in local mode. Locking is still the same (at least, it's hugely problematic to make it different and maintain both paths sanely), and the cache utilization is better when they are stored sequentially. This simplification leaded to the renaming and refactoring of "registry/mod.rs" to just "hub.rs".

Total list of changes:
  - separate object identity from storage, this affects all the entry points creating items. They are now split into a public-visible "_impl()" method that just creates something, and the old creation is only visible under "local" feature now, using that helper. The sequence of actions on remote is different, as described above.
  - unified local/remote registries
  - "local" feature instead of "remote"
  - removed blend and depth/stencil interfaces in favor of structs inside the pipeline descriptors
  - pipeline descriptors are update to reflect the IDL (shader stages, rasterization state, color states, etc)

Co-authored-by: Dzmitry Malyshau <dmalyshau@mozilla.com>
2019-02-15 15:14:47 +00:00
examples Renamed the impl methods, switched structure argumetns from references to contained items 2019-02-15 10:13:04 -05:00
gfx-examples Renamed the impl methods, switched structure argumetns from references to contained items 2019-02-15 10:13:04 -05:00
wgpu-bindings Renamed the impl methods, switched structure argumetns from references to contained items 2019-02-15 10:13:04 -05:00
wgpu-native Renamed the impl methods, switched structure argumetns from references to contained items 2019-02-15 10:13:04 -05:00
wgpu-rs Renamed the impl methods, switched structure argumetns from references to contained items 2019-02-15 10:13:04 -05:00
.gitignore Create C example 2018-09-23 13:25:05 -06:00
.travis.yml Separate object identity from storage 2019-02-14 14:28:55 -05:00
bors.toml CI scripts 2018-09-14 11:39:24 -04:00
Cargo.lock Command encoder interface 2019-02-12 16:48:56 -05:00
Cargo.toml Basic gfx-examples framework 2019-02-02 21:02:33 -05:00
LICENSE Initial commit 2018-09-13 15:18:51 -04:00
Makefile Separate object identity from storage 2019-02-14 14:28:55 -05:00
README.md Document how to run examples 2019-02-12 22:01:49 +11:00
rustfmt.toml CI scripts 2018-09-14 11:39:24 -04:00

WebGPU

Build Status Crates.io Gitter

This is an experimental WebGPU implementation as a native static library. It's written in Rust and is based on gfx-hal and satellite libraries. The corresponding WebIDL specification can be found at gpuweb project.

The implementation consists of the following parts:

  • wgpu-native - the native implementation of WebGPU as a C API library
  • wgpu-bindings - automatic generator of actual C headers
  • wgpu-remote - remoting layer to work with WebGPU across the process boundary
  • wgpu-rs - idiomatic Rust wrapper of the native library

Example

To run an example, simply cd to the examples or gfx-examples directory, then use cargo run with --features {backend} to specify the backend (where {backend} is either vulkan, dx12, dx11 or metal). For example:

# Clone the wgpu repository
git clone https://github.com/gfx-rs/wgpu
# Change directory to `examples`
cd wgpu/examples
# Vulkan (Linux/Windows)
cargo run --bin hello_triangle --features vulkan
# Metal (macOS/iOS)
cargo run --bin hello_triangle --features metal
# DirectX12 (Windows)
cargo run --bin hello_triangle --features dx12

cd ../gfx-examples
# Vulkan (Linux/Windows)
cargo run --bin cube --features vulkan
# Metal (macOS/iOS)
cargo run --bin cube --features metal
# DirectX12 (Windows)
cargo run --bin cube --features dx12

These examples assume that necessary dependencies for the graphics backend are already installed. For more information about installation and usage, refer to the Getting Started guide.