mirror of
https://github.com/gfx-rs/wgpu.git
synced 2026-01-10 22:28:07 -05:00
Implements timer queries via write_timestamp on Metal for encoders (whenever timer queries are available) and passes (for Intel/AMD GPUs, where we should advertise TIMESTAMP_QUERY_INSIDE_PASSES now). Due to some bugs in Metal this was a lot harder than expected. I believe the solution is close to optimal with the current restrictions in place. For details see code comments.
Structure
For the simplest examples without using any helping code (see framework.rs here), check out:
hellofor printing adapter informationhello-trianglefor graphics and presentationhello-computefor pure computing
Notably, capture example shows rendering without a surface/window. It reads back the contents and saves them to a file.
All the examples use WGSL shaders unless specified otherwise.
All framework-based examples render to the window and are reftested against the screenshot in the directory.
Feature matrix
| Feature | boids | bunnymark | cube | mipmap | msaa-line | shadow | skybox | texture-arrays | water | conservative-raster | stencil-triangles |
|---|---|---|---|---|---|---|---|---|---|---|---|
| vertex attributes | ⭐ | ⭐ | ⭐ | ⭐ | ⭐ | ⭐ | ⭐ | ||||
| instancing | ⭐ | ||||||||||
| lines and points | ⭐ | ⭐ | |||||||||
| dynamic buffer offsets | ⭐ | ⭐ | |||||||||
| implicit layout | ⭐ | ||||||||||
| sampled color textures | ⭐ | ⭐ | ⭐ | ⭐ | ⭐ | ⭐ | ⭐ | ⭐ | |||
| storage textures | ⭐ | ||||||||||
| comparison samplers | ⭐ | ||||||||||
| subresource views | ⭐ | ⭐ | |||||||||
| cubemaps | ⭐ | ||||||||||
| multisampling | ⭐ | ||||||||||
| off-screen rendering | ⭐ | ⭐ | ⭐ | ||||||||
| stencil testing | ⭐ | ||||||||||
| depth testing | ⭐ | ⭐ | ⭐ | ||||||||
| depth biasing | ⭐ | ||||||||||
| read-only depth | ⭐ | ||||||||||
| blending | ⭐ | ⭐ | ⭐ | ||||||||
| render bundles | ⭐ | ⭐ | |||||||||
| compute passes | ⭐ | ||||||||||
| error scopes | ⭐ | ||||||||||
| optional extensions | ⭐ | ||||||||||
| - SPIR-V shaders | |||||||||||
| - binding array | ⭐ | ||||||||||
| - push constants | |||||||||||
| - depth clamping | ⭐ | ||||||||||
| - compressed textures | ⭐ | ||||||||||
| - polygon mode | ⭐ | ||||||||||
| - queries | ⭐ | ||||||||||
| - conservative rasterization | ⭐ | ||||||||||
| integrations | |||||||||||
| - staging belt | ⭐ | ||||||||||
| - typed arena | |||||||||||
| - obj loading | ⭐ |
Hacking
You can record an API trace any of the framework-based examples by starting them as:
mkdir -p trace && WGPU_TRACE=trace cargo run --features trace --bin <example-name>