Description
Creating an empty buffer results in an underflow (0u64 - 1)
thread 'main' panicked at 'attempt to subtract with overflow', /home/rukai/.cargo/registry/src/github.com-1ecc6299db9ec823/gfx-memory-0.1.3/src/allocator/general.rs:484:29
stack backtrace:
0: backtrace::backtrace::libunwind::trace
at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.46/src/backtrace/libunwind.rs:86
1: backtrace::backtrace::trace_unsynchronized
at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.46/src/backtrace/mod.rs:66
2: std::sys_common::backtrace::_print_fmt
at src/libstd/sys_common/backtrace.rs:78
3: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt
at src/libstd/sys_common/backtrace.rs:59
4: core::fmt::write
at src/libcore/fmt/mod.rs:1069
5: std::io::Write::write_fmt
at src/libstd/io/mod.rs:1504
6: std::sys_common::backtrace::_print
at src/libstd/sys_common/backtrace.rs:62
7: std::sys_common::backtrace::print
at src/libstd/sys_common/backtrace.rs:49
8: std::panicking::default_hook::{{closure}}
at src/libstd/panicking.rs:198
9: std::panicking::default_hook
at src/libstd/panicking.rs:218
10: std::panicking::rust_panic_with_hook
at src/libstd/panicking.rs:511
11: rust_begin_unwind
at src/libstd/panicking.rs:419
12: core::panicking::panic_fmt
at src/libcore/panicking.rs:111
13: core::panicking::panic
at src/libcore/panicking.rs:54
14: <gfx_memory::allocator::general::GeneralAllocator<B> as gfx_memory::allocator::Allocator<B>>::alloc
at /home/rukai/.cargo/registry/src/github.com-1ecc6299db9ec823/gfx-memory-0.1.3/src/allocator/general.rs:484
15: gfx_memory::heaps::memory_type::MemoryType<B>::alloc
at /home/rukai/.cargo/registry/src/github.com-1ecc6299db9ec823/gfx-memory-0.1.3/src/heaps/memory_type.rs:92
16: gfx_memory::heaps::Heaps<B>::allocate_from
at /home/rukai/.cargo/registry/src/github.com-1ecc6299db9ec823/gfx-memory-0.1.3/src/heaps/mod.rs:168
17: gfx_memory::heaps::Heaps<B>::allocate
at /home/rukai/.cargo/registry/src/github.com-1ecc6299db9ec823/gfx-memory-0.1.3/src/heaps/mod.rs:137
18: wgpu_core::device::Device<B>::create_buffer
at /home/rukai/.cargo/git/checkouts/wgpu-53e70f8674b08dd4/eaf8f4a/wgpu-core/src/device/mod.rs:347
19: wgpu_core::device::<impl wgpu_core::hub::Global<G>>::device_create_buffer
at /home/rukai/.cargo/git/checkouts/wgpu-53e70f8674b08dd4/eaf8f4a/wgpu-core/src/device/mod.rs:595
20: wgpu::backend::direct::<impl wgpu::Context for wgpu_core::hub::Global<wgpu_core::hub::IdentityManagerFactory>>::device_create_buffer
at /home/rukai/.cargo/git/checkouts/wgpu-rs-40ea39809c03c5d8/7b866b1/src/backend/direct.rs:522
21: wgpu::Device::create_buffer
at /home/rukai/.cargo/git/checkouts/wgpu-rs-40ea39809c03c5d8/7b866b1/src/lib.rs:1124
22: wgpu::Device::create_buffer_with_data
at /home/rukai/.cargo/git/checkouts/wgpu-rs-40ea39809c03c5d8/7b866b1/src/lib.rs:1133
23: canon_collision::wgpu::buffers::Buffers::new
at canon_collision/src/wgpu/buffers.rs:60
24: canon_collision::wgpu::buffers::Buffers::new_fighter_frame
at canon_collision/src/wgpu/buffers.rs:112
25: canon_collision::wgpu::WgpuGraphics::draw_fighter_selector
at canon_collision/src/wgpu/mod.rs:1549
26: canon_collision::wgpu::WgpuGraphics::menu_render
at canon_collision/src/wgpu/mod.rs:1238
27: canon_collision::wgpu::WgpuGraphics::render
at canon_collision/src/wgpu/mod.rs:614
28: canon_collision::wgpu::WgpuGraphics::update
at canon_collision/src/wgpu/mod.rs:511
29: canon_collision::main::{{closure}}
at canon_collision/src/main.rs:44
30: winit::platform_impl::platform::sticky_exit_callback
at /home/rukai/.cargo/registry/src/github.com-1ecc6299db9ec823/winit-0.22.2/src/platform_impl/linux/mod.rs:698
31: winit::platform_impl::platform::x11::EventLoop<T>::run_return
at /home/rukai/.cargo/registry/src/github.com-1ecc6299db9ec823/winit-0.22.2/src/platform_impl/linux/x11/mod.rs:299
32: winit::platform_impl::platform::x11::EventLoop<T>::run
at /home/rukai/.cargo/registry/src/github.com-1ecc6299db9ec823/winit-0.22.2/src/platform_impl/linux/x11/mod.rs:390
33: winit::platform_impl::platform::EventLoop<T>::run
at /home/rukai/.cargo/registry/src/github.com-1ecc6299db9ec823/winit-0.22.2/src/platform_impl/linux/mod.rs:645
34: winit::event_loop::EventLoop<T>::run
at /home/rukai/.cargo/registry/src/github.com-1ecc6299db9ec823/winit-0.22.2/src/event_loop.rs:149
35: canon_collision::main
at canon_collision/src/main.rs:43
36: std::rt::lang_start::{{closure}}
at /home/rukai/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libstd/rt.rs:67
37: std::rt::lang_start_internal::{{closure}}
at src/libstd/rt.rs:52
38: std::panicking::try::do_call
at src/libstd/panicking.rs:331
39: std::panicking::try
at src/libstd/panicking.rs:274
40: std::panic::catch_unwind
at src/libstd/panic.rs:394
41: std::rt::lang_start_internal
at src/libstd/rt.rs:51
42: std::rt::lang_start
at /home/rukai/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libstd/rt.rs:67
43: main
44: __libc_start_main
45: _start
Repro steps
Let me know if you need a self contained repro but hopefully the stack trace is enough.
Platform
Latest commit of wgpu.
Ack, copy buffer with data and friends need zero size buffer checks. @kvark what is the intended behavior here, fail with an assert?
Pretty sure its meant to succeed.
https://github.com/gfx-rs/wgpu-rs/pull/257
Oh haha forgot about this one as well
https://github.com/gfx-rs/wgpu/pull/140
The original implementation (which got deleted somehow) put the check in the wgpu crate
Shouldnt it have gone in wgpu-core device_create_buffer though?
Yes, we need this back into device_create_buffer. Sorry about accidentally removing this!
All good, looks straightforward ill make a PR.
Most helpful comment
All good, looks straightforward ill make a PR.