Skip to content

Commit 50a7936

Browse files
fixup! fix(core): use BufferMapState::Active for any BufferUsages::MAP_* flags
1 parent 1ee2372 commit 50a7936

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

wgpu-hal/src/gles/device.rs

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -526,7 +526,10 @@ impl crate::Device for super::Device {
526526
.private_caps
527527
.contains(PrivateCapabilities::BUFFER_ALLOCATION);
528528

529-
if emulate_map && desc.usage.intersects(wgt::BufferUses::MAP_WRITE) {
529+
if emulate_map
530+
&& (desc.usage.intersects(wgt::BufferUses::MAP_WRITE)
531+
&& !desc.usage.intersects(wgt::BufferUses::MAP_READ))
532+
{
530533
return Ok(super::Buffer {
531534
raw: None,
532535
target,
@@ -692,12 +695,21 @@ impl crate::Device for super::Device {
692695
}
693696
unsafe fn unmap_buffer(&self, buffer: &super::Buffer) {
694697
if let Some(raw) = buffer.raw {
695-
if buffer.data.is_none() {
696-
let gl = &self.shared.context.lock();
697-
unsafe { gl.bind_buffer(buffer.target, Some(raw)) };
698-
unsafe { gl.unmap_buffer(buffer.target) };
699-
unsafe { gl.bind_buffer(buffer.target, None) };
700-
*lock(&buffer.offset_of_current_mapping) = 0;
698+
match &buffer.data {
699+
None => {
700+
let gl = &self.shared.context.lock();
701+
unsafe { gl.bind_buffer(buffer.target, Some(raw)) };
702+
unsafe { gl.unmap_buffer(buffer.target) };
703+
unsafe { gl.bind_buffer(buffer.target, None) };
704+
*lock(&buffer.offset_of_current_mapping) = 0;
705+
}
706+
Some(data) => {
707+
let gl = &self.shared.context.lock();
708+
let data = lock(&**data);
709+
unsafe { gl.bind_buffer(buffer.target, Some(raw)) };
710+
unsafe { gl.buffer_sub_data_u8_slice(buffer.target, 0, &data) };
711+
unsafe { gl.bind_buffer(buffer.target, None) };
712+
}
701713
}
702714
}
703715
}

0 commit comments

Comments
 (0)