mirror of
https://github.com/gfx-rs/wgpu.git
synced 2024-11-21 22:33:49 +00:00
expect to timeout when targeting WebGL
This commit is contained in:
parent
ddf0e67da7
commit
394bf37f98
@ -154,7 +154,10 @@ impl Drop for Queue {
|
|||||||
self.device.raw().wait(
|
self.device.raw().wait(
|
||||||
fence.as_ref(),
|
fence.as_ref(),
|
||||||
last_successful_submission_index,
|
last_successful_submission_index,
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
crate::device::CLEANUP_WAIT_MS,
|
crate::device::CLEANUP_WAIT_MS,
|
||||||
|
#[cfg(target_arch = "wasm32")]
|
||||||
|
0, // WebKit and Chromium don't support a non-0 timeout
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
drop(fence);
|
drop(fence);
|
||||||
@ -163,6 +166,13 @@ impl Drop for Queue {
|
|||||||
Ok(true) => {}
|
Ok(true) => {}
|
||||||
// Note: If we don't panic here we are in UB land (destroying resources while they are still in use by the GPU).
|
// Note: If we don't panic here we are in UB land (destroying resources while they are still in use by the GPU).
|
||||||
Ok(false) => {
|
Ok(false) => {
|
||||||
|
// It's fine that we timed out on WebGL; GL objects can be deleted early as they
|
||||||
|
// will be kept around by the driver if GPU work hasn't finished.
|
||||||
|
// Moreover, the way we emulate read mappings on WebGL allows us to execute map_buffer earlier than on other
|
||||||
|
// backends since getBufferSubData is synchronous with respect to the other previously enqueued GL commands.
|
||||||
|
// Relying on this behavior breaks the clean abstraction wgpu-hal tries to maintain and
|
||||||
|
// we should find ways to improve this. See https://github.com/gfx-rs/wgpu/issues/6538.
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
panic!("We timed out while waiting on the last successful submission to complete!");
|
panic!("We timed out while waiting on the last successful submission to complete!");
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
|
@ -1563,6 +1563,10 @@ impl crate::Device for super::Device {
|
|||||||
) -> Result<bool, crate::DeviceError> {
|
) -> Result<bool, crate::DeviceError> {
|
||||||
if fence.last_completed.load(Ordering::Relaxed) < wait_value {
|
if fence.last_completed.load(Ordering::Relaxed) < wait_value {
|
||||||
let gl = &self.shared.context.lock();
|
let gl = &self.shared.context.lock();
|
||||||
|
// MAX_CLIENT_WAIT_TIMEOUT_WEBGL is:
|
||||||
|
// - 1s in Gecko https://searchfox.org/mozilla-central/rev/754074e05178e017ef6c3d8e30428ffa8f1b794d/dom/canvas/WebGLTypes.h#1386
|
||||||
|
// - 0 in WebKit https://github.com/WebKit/WebKit/blob/4ef90d4672ca50267c0971b85db403d9684508ea/Source/WebCore/html/canvas/WebGL2RenderingContext.cpp#L110
|
||||||
|
// - 0 in Chromium https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.cc;l=112;drc=a3cb0ac4c71ec04abfeaed199e5d63230eca2551
|
||||||
let timeout_ns = if cfg!(any(webgl, Emscripten)) {
|
let timeout_ns = if cfg!(any(webgl, Emscripten)) {
|
||||||
0
|
0
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user