mirror of
https://github.com/servo/servo.git
synced 2025-07-28 01:30:32 +01:00
Prevent redundant texture and buffer destroy calls
This commit is contained in:
parent
84185eb1da
commit
851f83c61f
4 changed files with 15 additions and 9 deletions
|
@ -184,6 +184,7 @@ impl GPUBufferMethods for GPUBuffer {
|
|||
GPUBufferState::Mapped | GPUBufferState::MappedAtCreation => {
|
||||
self.Unmap();
|
||||
},
|
||||
GPUBufferState::Destroyed => return,
|
||||
_ => {},
|
||||
};
|
||||
if let Err(e) = self
|
||||
|
|
|
@ -18,6 +18,7 @@ use crate::dom::gpudevice::{
|
|||
};
|
||||
use crate::dom::gputextureview::GPUTextureView;
|
||||
use dom_struct::dom_struct;
|
||||
use std::cell::Cell;
|
||||
use std::num::NonZeroU32;
|
||||
use std::string::String;
|
||||
use webgpu::{
|
||||
|
@ -40,6 +41,7 @@ pub struct GPUTexture {
|
|||
dimension: GPUTextureDimension,
|
||||
format: GPUTextureFormat,
|
||||
texture_usage: u32,
|
||||
destroyed: Cell<bool>,
|
||||
}
|
||||
|
||||
impl GPUTexture {
|
||||
|
@ -67,6 +69,7 @@ impl GPUTexture {
|
|||
dimension,
|
||||
format,
|
||||
texture_usage,
|
||||
destroyed: Cell::new(false),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -197,6 +200,9 @@ impl GPUTextureMethods for GPUTexture {
|
|||
|
||||
/// https://gpuweb.github.io/gpuweb/#dom-gputexture-destroy
|
||||
fn Destroy(&self) {
|
||||
if self.destroyed.get() {
|
||||
return;
|
||||
}
|
||||
if let Err(e) = self
|
||||
.channel
|
||||
.0
|
||||
|
@ -207,5 +213,6 @@ impl GPUTextureMethods for GPUTexture {
|
|||
self.texture.0, e
|
||||
);
|
||||
};
|
||||
self.destroyed.set(true);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue