Add zstd release note (#20053)

# Objective

- Add a release note for the new zstd backend.
- Doing so, I realized it was really cumbersome to enable this feature
because we default-enable ruzstd AND make it take precedence if both are
enabled. We can improve ux a bit by making the optional feature take
precedence when both are enabled. This still doesnt remove the unneeded
dependency, but oh well.

Note: it would be nice to have a way to make zstd_c not do anything when
building wasm, but im not sure theres a way to do that, as it seems like
it would need negative features.

---------

Co-authored-by: Jan Hohenheim <jan@hohenheim.ch>
This commit is contained in:
atlv 2025-07-14 16:53:26 -04:00 committed by GitHub
parent 1e057d8419
commit e0383a0b96
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 29 additions and 2 deletions

View File

@ -58,7 +58,7 @@ pub fn ktx2_buffer_to_image(
})?;
levels.push(decompressed);
}
#[cfg(feature = "zstd_rust")]
#[cfg(all(feature = "zstd_rust", not(feature = "zstd_c")))]
SupercompressionScheme::Zstandard => {
let mut cursor = std::io::Cursor::new(level.data);
let mut decoder = ruzstd::decoding::StreamingDecoder::new(&mut cursor)
@ -71,7 +71,7 @@ pub fn ktx2_buffer_to_image(
})?;
levels.push(decompressed);
}
#[cfg(all(feature = "zstd_c", not(feature = "zstd_rust")))]
#[cfg(feature = "zstd_c")]
SupercompressionScheme::Zstandard => {
levels.push(zstd::decode_all(level.data).map_err(|err| {
TextureError::SuperDecompressionError(format!(

View File

@ -0,0 +1,27 @@
---
title: Faster Zstd decompression option
authors: ["@atlv24", "@brianreavis"]
pull_requests: [19793]
---
There is now an option to use the [zstd](https://crates.io/crates/zstd) c-bindings instead of [ruzstd](https://crates.io/crates/ruzstd).
This is less safe and portable, but can be around 44% faster.
The two features that control which one is used are `zstd_rust` and `zstd_c`.
`zstd_rust` is enabled by default, but `zstd_c` takes precedence if both are enabled.
To enable it, add the feature to the `bevy` entry of your Cargo.toml:
```toml
bevy = { version = "0.17.0", features = ["zstd_c"] }
```
Note: this will still include a dependency on `ruzstd`, because mutually exclusive features are not supported by Cargo.
To remove this dependency, disable default-features, and manually enable any default features you need:
```toml
bevy = { version = "0.17.0", default-features = false, features = [
"zstd_c",
"bevy_render", # etc..
] }
```