Skip to content

Commit

Permalink
bump crabslab, don't enumerate_adapters on WASM, regen shaders
Browse files Browse the repository at this point in the history
  • Loading branch information
schell committed May 21, 2024
1 parent d1b4612 commit 1134316
Show file tree
Hide file tree
Showing 19 changed files with 137 additions and 7 deletions.
9 changes: 5 additions & 4 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ resolver = "2"
assert_approx_eq = "1.1.0"
async-channel = "1.8"
bytemuck = { version = "1.13.0", features = ["derive"] }
crabslab = { version = "0.5.0", default-features = false }
crabslab = { version = "0.5.1", default-features = false }
dagga = "0.2.1"
env_logger = "0.10.0"
futures-lite = "1.13"
Expand Down
40 changes: 40 additions & 0 deletions DEVLOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,45 @@
# devlog

## Tue May 21, 2024

### Crabslab updates

I replaced the slab indexing in `crabslab` with `spirv_std::IndexUnchecked` when the `target_arch`
is `"spirv"`. This had the effect of DRASTICALLY reducing the nesting in the resulting WGSL code,
and also GREATLY reducing the size of that code. Here are some percentage changes in the SPIR-V
shader files produced by `rust-gpu`:

```
- 7.55%: bloom-bloom_downsample_fragment.spv
-10.00%: bloom-bloom_mix_fragment.spv
-10.81%: bloom-bloom_upsample_fragment.spv
0.00%: bloom-bloom_vertex.spv
0.00%: convolution-brdf_lut_convolution_fragment.spv
0.00%: convolution-brdf_lut_convolution_vertex.spv
0.00%: convolution-generate_mipmap_fragment.spv
0.00%: convolution-generate_mipmap_vertex.spv
0.00%: convolution-prefilter_environment_cubemap_fragment.spv
-36.00%: convolution-prefilter_environment_cubemap_vertex.spv
0.00%: skybox-skybox_cubemap_fragment.spv
-33.08%: skybox-skybox_cubemap_vertex.spv
0.00%: skybox-skybox_equirectangular_fragment.spv
-40.00%: skybox-skybox_vertex.spv
-25.27%: stage-renderlet_fragment.spv
-30.77%: stage-renderlet_vertex.spv
- 6.78%: tonemapping-tonemapping_fragment.spv
0.00%: tonemapping-tonemapping_vertex.spv
0.00%: tutorial-tutorial_implicit_isosceles_vertex.spv
0.00%: tutorial-tutorial_passthru_fragment.spv
-39.29%: tutorial-tutorial_slabbed_renderlet.spv
-37.76%: tutorial-tutorial_slabbed_vertices.spv
-37.50%: tutorial-tutorial_slabbed_vertices_no_instance.spv
```

Drastically reducing the nesting in resulting WGSL code means that `naga` shouldn't err when
translating the SPIR-V code into WGSL on web. This means that `renderling` works on web again!

Greatly reducing the size of the SPIR-V files may eliminate the stack overflow on Windows.

## Tue May 14, 2024

### Website!
Expand Down
7 changes: 5 additions & 2 deletions crates/renderling/src/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -154,8 +154,11 @@ fn new_instance() -> wgpu::Instance {
..Default::default()
});

let adapters = instance.enumerate_adapters(backends);
log::trace!("available adapters: {adapters:#?}");
#[cfg(not(target_arch = "wasm32"))]
{
let adapters = instance.enumerate_adapters(backends);
log::trace!("available adapters: {adapters:#?}");
}

instance
}
Expand Down
86 changes: 86 additions & 0 deletions crates/renderling/src/linkage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -328,4 +328,90 @@ mod test {
}
}
}

#[test]
fn before_after() {
let before = [
(5.3 * 1000.0, "bloom-bloom_downsample_fragment.spv"),
(2.0 * 1000.0, "bloom-bloom_mix_fragment.spv"),
(3.7 * 1000.0, "bloom-bloom_upsample_fragment.spv"),
(1.3 * 1000.0, "bloom-bloom_vertex.spv"),
(
5.2 * 1000.0,
"convolution-brdf_lut_convolution_fragment.spv",
),
(1.4 * 1000.0, "convolution-brdf_lut_convolution_vertex.spv"),
(608.0, "convolution-generate_mipmap_fragment.spv"),
(1.2 * 1000.0, "convolution-generate_mipmap_vertex.spv"),
(
6.5 * 1000.0,
"convolution-prefilter_environment_cubemap_fragment.spv",
),
(
15.0 * 1000.0,
"convolution-prefilter_environment_cubemap_vertex.spv",
),
(1.1 * 1000.0, "skybox-skybox_cubemap_fragment.spv"),
(13.0 * 1000.0, "skybox-skybox_cubemap_vertex.spv"),
(1.4 * 1000.0, "skybox-skybox_equirectangular_fragment.spv"),
(12.0 * 1000.0, "skybox-skybox_vertex.spv"),
(91.0 * 1000.0, "stage-renderlet_fragment.spv"),
(52.0 * 1000.0, "stage-renderlet_vertex.spv"),
(5.9 * 1000.0, "tonemapping-tonemapping_fragment.spv"),
(1.1 * 1000.0, "tonemapping-tonemapping_vertex.spv"),
(756.0, "tutorial-tutorial_implicit_isosceles_vertex.spv"),
(328.0, "tutorial-tutorial_passthru_fragment.spv"),
(28.0 * 1000.0, "tutorial-tutorial_slabbed_renderlet.spv"),
(9.8 * 1000.0, "tutorial-tutorial_slabbed_vertices.spv"),
(
8.8 * 1000.0,
"tutorial-tutorial_slabbed_vertices_no_instance.spv",
),
];
let after = [
(4.9 * 1000.0, "bloom-bloom_downsample_fragment.spv"),
(1.8 * 1000.0, "bloom-bloom_mix_fragment.spv"),
(3.3 * 1000.0, "bloom-bloom_upsample_fragment.spv"),
(1.3 * 1000.0, "bloom-bloom_vertex.spv"),
(
5.2 * 1000.0,
"convolution-brdf_lut_convolution_fragment.spv",
),
(1.4 * 1000.0, "convolution-brdf_lut_convolution_vertex.spv"),
(608.0, "convolution-generate_mipmap_fragment.spv"),
(1.2 * 1000.0, "convolution-generate_mipmap_vertex.spv"),
(
6.5 * 1000.0,
"convolution-prefilter_environment_cubemap_fragment.spv",
),
(
9.6 * 1000.0,
"convolution-prefilter_environment_cubemap_vertex.spv",
),
(1.1 * 1000.0, "skybox-skybox_cubemap_fragment.spv"),
(8.7 * 1000.0, "skybox-skybox_cubemap_vertex.spv"),
(1.4 * 1000.0, "skybox-skybox_equirectangular_fragment.spv"),
(7.2 * 1000.0, "skybox-skybox_vertex.spv"),
(68.0 * 1000.0, "stage-renderlet_fragment.spv"),
(36.0 * 1000.0, "stage-renderlet_vertex.spv"),
(5.5 * 1000.0, "tonemapping-tonemapping_fragment.spv"),
(1.1 * 1000.0, "tonemapping-tonemapping_vertex.spv"),
(756.0, "tutorial-tutorial_implicit_isosceles_vertex.spv"),
(328.0, "tutorial-tutorial_passthru_fragment.spv"),
(17.0 * 1000.0, "tutorial-tutorial_slabbed_renderlet.spv"),
(6.1 * 1000.0, "tutorial-tutorial_slabbed_vertices.spv"),
(
5.5 * 1000.0,
"tutorial-tutorial_slabbed_vertices_no_instance.spv",
),
];

for ((before_size, before_name), (after_size, after_name)) in
before.into_iter().zip(after.into_iter())
{
assert_eq!(before_name, after_name);
let change = 100.0 * (after_size - before_size) / before_size;
log::info!("{change:0.02}%: {before_name}");
}
}
}
Binary file modified crates/renderling/src/linkage/bloom-bloom_downsample_fragment.spv
Binary file not shown.
Binary file modified crates/renderling/src/linkage/bloom-bloom_mix_fragment.spv
Binary file not shown.
Binary file modified crates/renderling/src/linkage/bloom-bloom_upsample_fragment.spv
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file modified crates/renderling/src/linkage/skybox-skybox_cubemap_vertex.spv
Binary file not shown.
Binary file modified crates/renderling/src/linkage/skybox-skybox_vertex.spv
Binary file not shown.
Binary file modified crates/renderling/src/linkage/stage-renderlet_fragment.spv
Binary file not shown.
Binary file modified crates/renderling/src/linkage/stage-renderlet_vertex.spv
Binary file not shown.
Binary file modified crates/renderling/src/linkage/tonemapping-tonemapping_fragment.spv
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

0 comments on commit 1134316

Please sign in to comment.