0bd7d0531c
On Vulkan, the Windows default, a presentation stall longer than a second crashed the client. wgpu-hal 27.0.4's `acquire_texture` maps a `VK_TIMEOUT` from its post-acquire fence wait to `DeviceError::Unexpected`. wgpu-core treats that as a lost device, and Bevy then panics on "Couldn't get swap chain texture". Upstream tracks this as gfx-rs/wgpu#9029, still open in wgpu 30. wgpu-hal 27.0.4 is now vendored under `third_party/wgpu-hal` through `[patch.crates-io]`, as `kira` is. Only `src/vulkan/instance.rs` differs. A timeout of the previous submission's wait, of the acquire, or of the acquired image's fence now waits again within a 30 s budget, then fails as upstream does. The Vulkan spec leaves the semaphore and fence unaffected by a timed-out call, so the retry is legal. Each retry logs, with the raw result. `BENILLA.md` says how to check the patch and when to drop it. Tests: the lock resolves to the patch. Built for Linux and Windows. Fixes #2373 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
32 lines
1.6 KiB
Rust
32 lines
1.6 KiB
Rust
fn main() {
|
|
cfg_aliases::cfg_aliases! {
|
|
native: { not(target_arch = "wasm32") },
|
|
send_sync: { any(
|
|
not(target_arch = "wasm32"),
|
|
all(feature = "fragile-send-sync-non-atomic-wasm", not(target_feature = "atomics"))
|
|
) },
|
|
webgl: { all(target_arch = "wasm32", not(target_os = "emscripten"), gles) },
|
|
Emscripten: { all(target_os = "emscripten", gles) },
|
|
dx12: { all(target_os = "windows", feature = "dx12") },
|
|
gles: { all(feature = "gles") },
|
|
// Within the GL ES backend, use `std` and be Send + Sync only if we are using a target
|
|
// that, among the ones where the GL ES backend is supported, has `std`.
|
|
gles_with_std: { all(
|
|
feature = "gles",
|
|
any(
|
|
not(target_arch = "wasm32"),
|
|
// Accept wasm32-unknown-unknown, which uniquely has a stub `std`
|
|
all(target_vendor = "unknown", target_os = "unknown"),
|
|
// Accept wasm32-unknown-emscripten and similar, which has a real `std`
|
|
target_os = "emscripten"
|
|
)
|
|
) },
|
|
metal: { all(target_vendor = "apple", feature = "metal") },
|
|
vulkan: { all(not(target_arch = "wasm32"), feature = "vulkan") },
|
|
// ⚠️ Keep in sync with target.cfg() definition in Cargo.toml and cfg_alias in `wgpu` crate ⚠️
|
|
static_dxc: { all(target_os = "windows", feature = "static-dxc", not(target_arch = "aarch64")) },
|
|
supports_64bit_atomics: { target_has_atomic = "64" },
|
|
supports_ptr_atomics: { target_has_atomic = "ptr" }
|
|
}
|
|
}
|