D3D11: Fix bugs in Queue::WriteBuffer for mappable buffers.
Previously when Queue::WriteBuffer was called on a mappable buffer,
D3D11's GPUUsableBuffer would:
1. Mark the buffer as being used by the GPU.
2. Map the mappable storage.
3. Call WriteInternal().
- WriteInternal() checks if the buffer's last usage serial is less
than the completed serial to decide whether to map.
- This check would always fail due to step 1, causing WriteInternal()
to use a non-mappable storage instead of the mapped one.
- This resulted in both mappable and non-mappable storages being
modified in the same function, causing an assertion failure.
Fix by deferring MarkUsedInPendingCommands() to the end of Write(). This
ensures WriteInternal() can successfully map the buffer. Also remove
redundant mapping code from the base class' Write() & Clear() since
WriteInternal() already handles mapping.
Additionally, fix a bug where WriteBuffer with a full buffer
overwrite would skip storage sync but fail to update the revision
number, leaving the storage in an inconsistent state.
Finally, fix a bug in Queue::ForceEventualFlushOfCommands() where it
previously did nothing.
Bug: 345471009
Change-Id: I20d5dbbc386960853783dd1e75ed0cab24fd33d3
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/285235
Commit-Queue: Quyen Le <lehoangquyen@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Dawn is an open-source and cross-platform implementation of the WebGPU standard. More precisely it implements webgpu.h that is a one-to-one mapping with the WebGPU IDL. Dawn is meant to be integrated as part of a larger system and is the underlying implementation of WebGPU in Chromium.
Dawn provides several WebGPU building blocks:
webgpu.h version that Dawn implements.webgpu.h.Helpful links:
Developer documentation:
User documentation: (TODO, figure out what overlaps with the webgpu.h docs)
BSD 3-Clause License, please see LICENSE.
This is not an officially supported Google product.