Remove MapRead/WriteAsync and CreateBufferMapped
Bug: dawn:445
Change-Id: I0b0755b6bb754d1fff99aa59b08362f89950e300
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/26301
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
diff --git a/dawn.json b/dawn.json
index 791763c..48aa2fa 100644
--- a/dawn.json
+++ b/dawn.json
@@ -176,20 +176,6 @@
"category": "object",
"methods": [
{
- "name": "map read async",
- "args": [
- {"name": "callback", "type": "buffer map read callback"},
- {"name": "userdata", "type": "void", "annotation": "*"}
- ]
- },
- {
- "name": "map write async",
- "args": [
- {"name": "callback", "type": "buffer map write callback"},
- {"name": "userdata", "type": "void", "annotation": "*"}
- ]
- },
- {
"name": "map async",
"args": [
{"name": "mode", "type": "map mode"},
@@ -248,24 +234,6 @@
{"name": "userdata", "type": "void", "annotation": "*"}
]
},
- "buffer map read callback": {
- "category": "callback",
- "args": [
- {"name": "status", "type": "buffer map async status"},
- {"name": "data", "type": "void", "annotation": "const*"},
- {"name": "data length", "type": "uint64_t"},
- {"name": "userdata", "type": "void", "annotation": "*"}
- ]
- },
- "buffer map write callback": {
- "category": "callback",
- "args": [
- {"name": "status", "type": "buffer map async status"},
- {"name": "data", "type": "void", "annotation": "*"},
- {"name": "data length", "type": "uint64_t"},
- {"name": "userdata", "type": "void", "annotation": "*"}
- ]
- },
"buffer map async status": {
"category": "enum",
"values": [
@@ -294,14 +262,6 @@
"char": {
"category": "native"
},
- "create buffer mapped result": {
- "category": "structure",
- "members": [
- {"name": "buffer", "type": "buffer"},
- {"name": "data length", "type": "uint64_t"},
- {"name": "data", "type": "void", "annotation": "*", "length": "data length"}
- ]
- },
"color": {
"category": "structure",
"members": [
@@ -576,13 +536,6 @@
"TODO": "enga@: Make this part of a dawn_wire extension"
},
{
- "name": "create buffer mapped",
- "returns": "create buffer mapped result",
- "args": [
- {"name": "descriptor", "type": "buffer descriptor", "annotation": "const*"}
- ]
- },
- {
"name": "create command encoder",
"returns": "command encoder",
"args": [
diff --git a/dawn_wire.json b/dawn_wire.json
index b2256a5..0c59c42 100644
--- a/dawn_wire.json
+++ b/dawn_wire.json
@@ -90,19 +90,15 @@
},
"special items": {
"client_side_structures": [
- "CreateBufferMappedResult",
"SurfaceDescriptorFromMetalLayer",
"SurfaceDescriptorFromWindowsHWND",
"SurfaceDescriptorFromXlib"
],
"client_side_commands": [
"BufferMapAsync",
- "BufferMapReadAsync",
- "BufferMapWriteAsync",
"BufferGetConstMappedRange",
"BufferGetMappedRange",
"DeviceCreateBuffer",
- "DeviceCreateBufferMapped",
"DevicePopErrorScope",
"DeviceSetDeviceLostCallback",
"DeviceSetUncapturedErrorCallback",
diff --git a/docs/testing.md b/docs/testing.md
index 7b6f4b6..a37d0b5 100644
--- a/docs/testing.md
+++ b/docs/testing.md
@@ -52,7 +52,7 @@
**BufferUploadPerf**
-Tests repetitively uploading data to the GPU using either `WriteBuffer` or `CreateBufferMapped`.
+Tests repetitively uploading data to the GPU using either `WriteBuffer` or `CreateBuffer` with `mappedAtCreation = true`.
**DrawCallPerf**
diff --git a/generator/templates/mock_webgpu.cpp b/generator/templates/mock_webgpu.cpp
index 0abfe9a..801260b 100644
--- a/generator/templates/mock_webgpu.cpp
+++ b/generator/templates/mock_webgpu.cpp
@@ -76,26 +76,6 @@
return OnDevicePopErrorScopeCallback(self, callback, userdata);
}
-void ProcTableAsClass::BufferMapReadAsync(WGPUBuffer self,
- WGPUBufferMapReadCallback callback,
- void* userdata) {
- auto object = reinterpret_cast<ProcTableAsClass::Object*>(self);
- object->mapReadCallback = callback;
- object->userdata = userdata;
-
- OnBufferMapReadAsyncCallback(self, callback, userdata);
-}
-
-void ProcTableAsClass::BufferMapWriteAsync(WGPUBuffer self,
- WGPUBufferMapWriteCallback callback,
- void* userdata) {
- auto object = reinterpret_cast<ProcTableAsClass::Object*>(self);
- object->mapWriteCallback = callback;
- object->userdata = userdata;
-
- OnBufferMapWriteAsyncCallback(self, callback, userdata);
-}
-
void ProcTableAsClass::BufferMapAsync(WGPUBuffer self,
WGPUMapModeFlags mode,
size_t offset,
@@ -132,22 +112,6 @@
object->deviceLostCallback(message, object->userdata);
}
-void ProcTableAsClass::CallMapReadCallback(WGPUBuffer buffer,
- WGPUBufferMapAsyncStatus status,
- const void* data,
- uint64_t dataLength) {
- auto object = reinterpret_cast<ProcTableAsClass::Object*>(buffer);
- object->mapReadCallback(status, data, dataLength, object->userdata);
-}
-
-void ProcTableAsClass::CallMapWriteCallback(WGPUBuffer buffer,
- WGPUBufferMapAsyncStatus status,
- void* data,
- uint64_t dataLength) {
- auto object = reinterpret_cast<ProcTableAsClass::Object*>(buffer);
- object->mapWriteCallback(status, data, dataLength, object->userdata);
-}
-
void ProcTableAsClass::CallMapAsyncCallback(WGPUBuffer buffer, WGPUBufferMapAsyncStatus status) {
auto object = reinterpret_cast<ProcTableAsClass::Object*>(buffer);
object->mapAsyncCallback(status, object->userdata);
diff --git a/generator/templates/mock_webgpu.h b/generator/templates/mock_webgpu.h
index 0a44248..502e403 100644
--- a/generator/templates/mock_webgpu.h
+++ b/generator/templates/mock_webgpu.h
@@ -59,12 +59,6 @@
WGPUDeviceLostCallback callback,
void* userdata);
bool DevicePopErrorScope(WGPUDevice self, WGPUErrorCallback callback, void* userdata);
- void BufferMapReadAsync(WGPUBuffer self,
- WGPUBufferMapReadCallback callback,
- void* userdata);
- void BufferMapWriteAsync(WGPUBuffer self,
- WGPUBufferMapWriteCallback callback,
- void* userdata);
void BufferMapAsync(WGPUBuffer self,
WGPUMapModeFlags mode,
size_t offset,
@@ -86,12 +80,6 @@
virtual bool OnDevicePopErrorScopeCallback(WGPUDevice device,
WGPUErrorCallback callback,
void* userdata) = 0;
- virtual void OnBufferMapReadAsyncCallback(WGPUBuffer buffer,
- WGPUBufferMapReadCallback callback,
- void* userdata) = 0;
- virtual void OnBufferMapWriteAsyncCallback(WGPUBuffer buffer,
- WGPUBufferMapWriteCallback callback,
- void* userdata) = 0;
virtual void OnBufferMapAsyncCallback(WGPUBuffer buffer,
WGPUBufferMapCallback callback,
void* userdata) = 0;
@@ -103,8 +91,6 @@
// Calls the stored callbacks
void CallDeviceErrorCallback(WGPUDevice device, WGPUErrorType type, const char* message);
void CallDeviceLostCallback(WGPUDevice device, const char* message);
- void CallMapReadCallback(WGPUBuffer buffer, WGPUBufferMapAsyncStatus status, const void* data, uint64_t dataLength);
- void CallMapWriteCallback(WGPUBuffer buffer, WGPUBufferMapAsyncStatus status, void* data, uint64_t dataLength);
void CallMapAsyncCallback(WGPUBuffer buffer, WGPUBufferMapAsyncStatus status);
void CallFenceOnCompletionCallback(WGPUFence fence, WGPUFenceCompletionStatus status);
@@ -112,8 +98,6 @@
ProcTableAsClass* procs = nullptr;
WGPUErrorCallback deviceErrorCallback = nullptr;
WGPUDeviceLostCallback deviceLostCallback = nullptr;
- WGPUBufferMapReadCallback mapReadCallback = nullptr;
- WGPUBufferMapWriteCallback mapWriteCallback = nullptr;
WGPUBufferMapCallback mapAsyncCallback = nullptr;
WGPUFenceOnCompletionCallback fenceOnCompletionCallback = nullptr;
void* userdata = 0;
@@ -149,8 +133,6 @@
MOCK_METHOD(void, OnDeviceSetUncapturedErrorCallback, (WGPUDevice device, WGPUErrorCallback callback, void* userdata), (override));
MOCK_METHOD(void, OnDeviceSetDeviceLostCallback, (WGPUDevice device, WGPUDeviceLostCallback callback, void* userdata), (override));
MOCK_METHOD(bool, OnDevicePopErrorScopeCallback, (WGPUDevice device, WGPUErrorCallback callback, void* userdata), (override));
- MOCK_METHOD(void, OnBufferMapReadAsyncCallback, (WGPUBuffer buffer, WGPUBufferMapReadCallback callback, void* userdata), (override));
- MOCK_METHOD(void, OnBufferMapWriteAsyncCallback, (WGPUBuffer buffer, WGPUBufferMapWriteCallback callback, void* userdata), (override));
MOCK_METHOD(void,
OnBufferMapAsyncCallback,
(WGPUBuffer buffer, WGPUBufferMapCallback callback, void* userdata),
diff --git a/src/dawn_native/Buffer.cpp b/src/dawn_native/Buffer.cpp
index 4dd1f3a..dcdfb9c 100644
--- a/src/dawn_native/Buffer.cpp
+++ b/src/dawn_native/Buffer.cpp
@@ -65,14 +65,6 @@
return {};
}
- MaybeError MapReadAsyncImpl() override {
- UNREACHABLE();
- return {};
- }
- MaybeError MapWriteAsyncImpl() override {
- UNREACHABLE();
- return {};
- }
MaybeError MapAsyncImpl(wgpu::MapMode mode, size_t offset, size_t size) override {
UNREACHABLE();
return {};
@@ -149,8 +141,6 @@
BufferBase::~BufferBase() {
if (mState == BufferState::Mapped) {
ASSERT(!IsError());
- CallMapReadCallback(mMapSerial, WGPUBufferMapAsyncStatus_Unknown, nullptr, 0u);
- CallMapWriteCallback(mMapSerial, WGPUBufferMapAsyncStatus_Unknown, nullptr, 0u);
CallMapCallback(mMapSerial, WGPUBufferMapAsyncStatus_Unknown);
}
}
@@ -213,48 +203,6 @@
}
}
- void BufferBase::CallMapReadCallback(uint32_t serial,
- WGPUBufferMapAsyncStatus status,
- const void* pointer,
- uint64_t dataLength) {
- ASSERT(!IsError());
- if (mMapReadCallback != nullptr && serial == mMapSerial) {
- ASSERT(mMapWriteCallback == nullptr);
-
- // Tag the callback as fired before firing it, otherwise it could fire a second time if
- // for example buffer.Unmap() is called inside the application-provided callback.
- WGPUBufferMapReadCallback callback = mMapReadCallback;
- mMapReadCallback = nullptr;
-
- if (GetDevice()->IsLost()) {
- callback(WGPUBufferMapAsyncStatus_DeviceLost, nullptr, 0, mMapUserdata);
- } else {
- callback(status, pointer, dataLength, mMapUserdata);
- }
- }
- }
-
- void BufferBase::CallMapWriteCallback(uint32_t serial,
- WGPUBufferMapAsyncStatus status,
- void* pointer,
- uint64_t dataLength) {
- ASSERT(!IsError());
- if (mMapWriteCallback != nullptr && serial == mMapSerial) {
- ASSERT(mMapReadCallback == nullptr);
-
- // Tag the callback as fired before firing it, otherwise it could fire a second time if
- // for example buffer.Unmap() is called inside the application-provided callback.
- WGPUBufferMapWriteCallback callback = mMapWriteCallback;
- mMapWriteCallback = nullptr;
-
- if (GetDevice()->IsLost()) {
- callback(WGPUBufferMapAsyncStatus_DeviceLost, nullptr, 0, mMapUserdata);
- } else {
- callback(status, pointer, dataLength, mMapUserdata);
- }
- }
- }
-
void BufferBase::CallMapCallback(uint32_t serial, WGPUBufferMapAsyncStatus status) {
ASSERT(!IsError());
if (mMapCallback != nullptr && serial == mMapSerial) {
@@ -271,66 +219,6 @@
}
}
- void BufferBase::MapReadAsync(WGPUBufferMapReadCallback callback, void* userdata) {
- GetDevice()->EmitDeprecationWarning(
- "Buffer::MapReadAsync is deprecated. Use Buffer::MapAsync instead");
-
- WGPUBufferMapAsyncStatus status;
- if (GetDevice()->ConsumedError(ValidateMap(wgpu::BufferUsage::MapRead, &status))) {
- callback(status, nullptr, 0, userdata);
- return;
- }
- ASSERT(!IsError());
-
- ASSERT(mMapWriteCallback == nullptr);
-
- // TODO(cwallez@chromium.org): what to do on wraparound? Could cause crashes.
- mMapSerial++;
- mMapReadCallback = callback;
- mMapUserdata = userdata;
- mMapOffset = 0;
- mMapSize = mSize;
- mState = BufferState::Mapped;
-
- if (GetDevice()->ConsumedError(MapReadAsyncImpl())) {
- CallMapReadCallback(mMapSerial, WGPUBufferMapAsyncStatus_DeviceLost, nullptr, 0);
- return;
- }
-
- MapRequestTracker* tracker = GetDevice()->GetMapRequestTracker();
- tracker->Track(this, mMapSerial, MapType::Read);
- }
-
- void BufferBase::MapWriteAsync(WGPUBufferMapWriteCallback callback, void* userdata) {
- GetDevice()->EmitDeprecationWarning(
- "Buffer::MapReadAsync is deprecated. Use Buffer::MapAsync instead");
-
- WGPUBufferMapAsyncStatus status;
- if (GetDevice()->ConsumedError(ValidateMap(wgpu::BufferUsage::MapWrite, &status))) {
- callback(status, nullptr, 0, userdata);
- return;
- }
- ASSERT(!IsError());
-
- ASSERT(mMapReadCallback == nullptr);
-
- // TODO(cwallez@chromium.org): what to do on wraparound? Could cause crashes.
- mMapSerial++;
- mMapWriteCallback = callback;
- mMapUserdata = userdata;
- mMapOffset = 0;
- mMapSize = mSize;
- mState = BufferState::Mapped;
-
- if (GetDevice()->ConsumedError(MapWriteAsyncImpl())) {
- CallMapWriteCallback(mMapSerial, WGPUBufferMapAsyncStatus_DeviceLost, nullptr, 0);
- return;
- }
-
- MapRequestTracker* tracker = GetDevice()->GetMapRequestTracker();
- tracker->Track(this, mMapSerial, MapType::Write);
- }
-
void BufferBase::MapAsync(wgpu::MapMode mode,
size_t offset,
size_t size,
@@ -367,7 +255,7 @@
}
MapRequestTracker* tracker = GetDevice()->GetMapRequestTracker();
- tracker->Track(this, mMapSerial, MapType::Async);
+ tracker->Track(this, mMapSerial);
}
void* BufferBase::GetMappedRange(size_t offset, size_t size) {
@@ -450,14 +338,10 @@
// A map request can only be called once, so this will fire only if the request wasn't
// completed before the Unmap.
// Callbacks are not fired if there is no callback registered, so this is correct for
- // CreateBufferMapped.
- CallMapReadCallback(mMapSerial, WGPUBufferMapAsyncStatus_Unknown, nullptr, 0u);
- CallMapWriteCallback(mMapSerial, WGPUBufferMapAsyncStatus_Unknown, nullptr, 0u);
+ // mappedAtCreation = true.
CallMapCallback(mMapSerial, WGPUBufferMapAsyncStatus_Unknown);
UnmapImpl();
- mMapReadCallback = nullptr;
- mMapWriteCallback = nullptr;
mMapCallback = nullptr;
mMapUserdata = 0;
@@ -599,7 +483,7 @@
switch (mState) {
case BufferState::Mapped:
case BufferState::MappedAtCreation:
- // A buffer may be in the Mapped state if it was created with CreateBufferMapped
+ // A buffer may be in the Mapped state if it was created with mappedAtCreation
// even if it did not have a mappable usage.
return {};
case BufferState::Unmapped:
@@ -626,20 +510,8 @@
mState = BufferState::Destroyed;
}
- void BufferBase::OnMapCommandSerialFinished(uint32_t mapSerial, MapType type) {
- switch (type) {
- case MapType::Read:
- CallMapReadCallback(mapSerial, WGPUBufferMapAsyncStatus_Success,
- GetMappedRangeInternal(false, 0, mSize), GetSize());
- break;
- case MapType::Write:
- CallMapWriteCallback(mapSerial, WGPUBufferMapAsyncStatus_Success,
- GetMappedRangeInternal(true, 0, mSize), GetSize());
- break;
- case MapType::Async:
- CallMapCallback(mapSerial, WGPUBufferMapAsyncStatus_Success);
- break;
- }
+ void BufferBase::OnMapCommandSerialFinished(uint32_t mapSerial) {
+ CallMapCallback(mapSerial, WGPUBufferMapAsyncStatus_Success);
}
bool BufferBase::IsDataInitialized() const {
diff --git a/src/dawn_native/Buffer.h b/src/dawn_native/Buffer.h
index 1dd5278..fdd0f7c 100644
--- a/src/dawn_native/Buffer.h
+++ b/src/dawn_native/Buffer.h
@@ -52,7 +52,7 @@
wgpu::BufferUsage GetUsage() const;
MaybeError MapAtCreation();
- void OnMapCommandSerialFinished(uint32_t mapSerial, MapType type);
+ void OnMapCommandSerialFinished(uint32_t mapSerial);
MaybeError ValidateCanUseOnQueueNow() const;
@@ -61,8 +61,6 @@
void SetIsDataInitialized();
// Dawn API
- void MapReadAsync(WGPUBufferMapReadCallback callback, void* userdata);
- void MapWriteAsync(WGPUBufferMapWriteCallback callback, void* userdata);
void MapAsync(wgpu::MapMode mode,
size_t offset,
size_t size,
@@ -85,8 +83,6 @@
private:
virtual MaybeError MapAtCreationImpl() = 0;
- virtual MaybeError MapReadAsyncImpl() = 0;
- virtual MaybeError MapWriteAsyncImpl() = 0;
virtual MaybeError MapAsyncImpl(wgpu::MapMode mode, size_t offset, size_t size) = 0;
virtual void UnmapImpl() = 0;
virtual void DestroyImpl() = 0;
@@ -95,14 +91,6 @@
virtual bool IsMappableAtCreation() const = 0;
MaybeError CopyFromStagingBuffer();
void* GetMappedRangeInternal(bool writable, size_t offset, size_t size);
- void CallMapReadCallback(uint32_t serial,
- WGPUBufferMapAsyncStatus status,
- const void* pointer,
- uint64_t dataLength);
- void CallMapWriteCallback(uint32_t serial,
- WGPUBufferMapAsyncStatus status,
- void* pointer,
- uint64_t dataLength);
void CallMapCallback(uint32_t serial, WGPUBufferMapAsyncStatus status);
MaybeError ValidateMap(wgpu::BufferUsage requiredUsage,
@@ -122,8 +110,6 @@
std::unique_ptr<StagingBufferBase> mStagingBuffer;
- WGPUBufferMapReadCallback mMapReadCallback = nullptr;
- WGPUBufferMapWriteCallback mMapWriteCallback = nullptr;
WGPUBufferMapCallback mMapCallback = nullptr;
void* mMapUserdata = 0;
uint32_t mMapSerial = 0;
diff --git a/src/dawn_native/Device.cpp b/src/dawn_native/Device.cpp
index fcb2876..1f76e49 100644
--- a/src/dawn_native/Device.cpp
+++ b/src/dawn_native/Device.cpp
@@ -612,27 +612,6 @@
return result.Detach();
}
- WGPUCreateBufferMappedResult DeviceBase::CreateBufferMapped(
- const BufferDescriptor* descriptor) {
- EmitDeprecationWarning(
- "CreateBufferMapped is deprecated, use wgpu::BufferDescriptor::mappedAtCreation and "
- "wgpu::Buffer::GetMappedRange instead");
-
- BufferDescriptor fixedDesc = *descriptor;
- fixedDesc.mappedAtCreation = true;
- BufferBase* buffer = CreateBuffer(&fixedDesc);
-
- WGPUCreateBufferMappedResult result = {};
- result.buffer = reinterpret_cast<WGPUBuffer>(buffer);
- result.data = buffer->GetMappedRange(0, descriptor->size);
- result.dataLength = descriptor->size;
-
- if (result.data != nullptr) {
- memset(result.data, 0, result.dataLength);
- }
-
- return result;
- }
CommandEncoder* DeviceBase::CreateCommandEncoder(const CommandEncoderDescriptor* descriptor) {
return new CommandEncoder(this, descriptor);
}
diff --git a/src/dawn_native/Device.h b/src/dawn_native/Device.h
index 0bb7254..6c7e6d4 100644
--- a/src/dawn_native/Device.h
+++ b/src/dawn_native/Device.h
@@ -145,7 +145,6 @@
BindGroupBase* CreateBindGroup(const BindGroupDescriptor* descriptor);
BindGroupLayoutBase* CreateBindGroupLayout(const BindGroupLayoutDescriptor* descriptor);
BufferBase* CreateBuffer(const BufferDescriptor* descriptor);
- WGPUCreateBufferMappedResult CreateBufferMapped(const BufferDescriptor* descriptor);
CommandEncoder* CreateCommandEncoder(const CommandEncoderDescriptor* descriptor);
ComputePipelineBase* CreateComputePipeline(const ComputePipelineDescriptor* descriptor);
PipelineLayoutBase* CreatePipelineLayout(const PipelineLayoutDescriptor* descriptor);
diff --git a/src/dawn_native/MapRequestTracker.cpp b/src/dawn_native/MapRequestTracker.cpp
index 91af10b..faf7034 100644
--- a/src/dawn_native/MapRequestTracker.cpp
+++ b/src/dawn_native/MapRequestTracker.cpp
@@ -27,11 +27,10 @@
ASSERT(mInflightRequests.Empty());
}
- void MapRequestTracker::Track(BufferBase* buffer, uint32_t mapSerial, MapType type) {
+ void MapRequestTracker::Track(BufferBase* buffer, uint32_t mapSerial) {
Request request;
request.buffer = buffer;
request.mapSerial = mapSerial;
- request.type = type;
mInflightRequests.Enqueue(std::move(request), mDevice->GetPendingCommandSerial());
mDevice->AddFutureCallbackSerial(mDevice->GetPendingCommandSerial());
@@ -39,7 +38,7 @@
void MapRequestTracker::Tick(Serial finishedSerial) {
for (auto& request : mInflightRequests.IterateUpTo(finishedSerial)) {
- request.buffer->OnMapCommandSerialFinished(request.mapSerial, request.type);
+ request.buffer->OnMapCommandSerialFinished(request.mapSerial);
}
mInflightRequests.ClearUpTo(finishedSerial);
}
diff --git a/src/dawn_native/MapRequestTracker.h b/src/dawn_native/MapRequestTracker.h
index 1daf47d..78744e0 100644
--- a/src/dawn_native/MapRequestTracker.h
+++ b/src/dawn_native/MapRequestTracker.h
@@ -20,15 +20,12 @@
namespace dawn_native {
- // TODO(dawn:22) remove this enum once MapReadAsync/MapWriteAsync are removed.
- enum class MapType : uint32_t { Read, Write, Async };
-
class MapRequestTracker {
public:
MapRequestTracker(DeviceBase* device);
~MapRequestTracker();
- void Track(BufferBase* buffer, uint32_t mapSerial, MapType type);
+ void Track(BufferBase* buffer, uint32_t mapSerial);
void Tick(Serial finishedSerial);
private:
@@ -37,7 +34,6 @@
struct Request {
Ref<BufferBase> buffer;
uint32_t mapSerial;
- MapType type;
};
SerialQueue<Request> mInflightRequests;
};
diff --git a/src/dawn_native/d3d12/BufferD3D12.cpp b/src/dawn_native/d3d12/BufferD3D12.cpp
index 6699110..095dca0 100644
--- a/src/dawn_native/d3d12/BufferD3D12.cpp
+++ b/src/dawn_native/d3d12/BufferD3D12.cpp
@@ -103,7 +103,7 @@
resourceDescriptor.SampleDesc.Count = 1;
resourceDescriptor.SampleDesc.Quality = 0;
resourceDescriptor.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;
- // Add CopyDst for non-mappable buffer initialization in CreateBufferMapped
+ // Add CopyDst for non-mappable buffer initialization with mappedAtCreation
// and robust resource initialization.
resourceDescriptor.Flags = D3D12ResourceFlags(GetUsage() | wgpu::BufferUsage::CopyDst);
@@ -293,14 +293,6 @@
return {};
}
- MaybeError Buffer::MapReadAsyncImpl() {
- return MapInternal(false, 0, size_t(GetSize()), "D3D12 map read async");
- }
-
- MaybeError Buffer::MapWriteAsyncImpl() {
- return MapInternal(true, 0, size_t(GetSize()), "D3D12 map write async");
- }
-
MaybeError Buffer::MapAsyncImpl(wgpu::MapMode mode, size_t offset, size_t size) {
CommandRecordingContext* commandContext;
DAWN_TRY_ASSIGN(commandContext, ToBackend(GetDevice())->GetPendingCommandContext());
diff --git a/src/dawn_native/d3d12/BufferD3D12.h b/src/dawn_native/d3d12/BufferD3D12.h
index a2af099..7ab6d5a 100644
--- a/src/dawn_native/d3d12/BufferD3D12.h
+++ b/src/dawn_native/d3d12/BufferD3D12.h
@@ -53,16 +53,13 @@
private:
~Buffer() override;
- // Dawn API
- MaybeError MapReadAsyncImpl() override;
- MaybeError MapWriteAsyncImpl() override;
MaybeError MapAsyncImpl(wgpu::MapMode mode, size_t offset, size_t size) override;
void UnmapImpl() override;
void DestroyImpl() override;
-
bool IsMappableAtCreation() const override;
virtual MaybeError MapAtCreationImpl() override;
void* GetMappedPointerImpl() override;
+
MaybeError MapInternal(bool isWrite, size_t start, size_t end, const char* contextInfo);
bool TransitionUsageAndGetResourceBarrier(CommandRecordingContext* commandContext,
diff --git a/src/dawn_native/metal/BufferMTL.h b/src/dawn_native/metal/BufferMTL.h
index ad6ed5f..59a7dc0 100644
--- a/src/dawn_native/metal/BufferMTL.h
+++ b/src/dawn_native/metal/BufferMTL.h
@@ -41,15 +41,12 @@
private:
using BufferBase::BufferBase;
MaybeError Initialize();
+
~Buffer() override;
- // Dawn API
- MaybeError MapReadAsyncImpl() override;
- MaybeError MapWriteAsyncImpl() override;
MaybeError MapAsyncImpl(wgpu::MapMode mode, size_t offset, size_t size) override;
void UnmapImpl() override;
void DestroyImpl() override;
void* GetMappedPointerImpl() override;
-
bool IsMappableAtCreation() const override;
MaybeError MapAtCreationImpl() override;
diff --git a/src/dawn_native/metal/BufferMTL.mm b/src/dawn_native/metal/BufferMTL.mm
index 2c82a7c..30568b4 100644
--- a/src/dawn_native/metal/BufferMTL.mm
+++ b/src/dawn_native/metal/BufferMTL.mm
@@ -120,14 +120,6 @@
return {};
}
- MaybeError Buffer::MapReadAsyncImpl() {
- return {};
- }
-
- MaybeError Buffer::MapWriteAsyncImpl() {
- return {};
- }
-
MaybeError Buffer::MapAsyncImpl(wgpu::MapMode mode, size_t offset, size_t size) {
CommandRecordingContext* commandContext =
ToBackend(GetDevice())->GetPendingCommandContext();
diff --git a/src/dawn_native/null/DeviceNull.cpp b/src/dawn_native/null/DeviceNull.cpp
index 3a542a9..26d673e 100644
--- a/src/dawn_native/null/DeviceNull.cpp
+++ b/src/dawn_native/null/DeviceNull.cpp
@@ -311,14 +311,6 @@
memcpy(mBackingData.get() + bufferOffset, data, size);
}
- MaybeError Buffer::MapReadAsyncImpl() {
- return {};
- }
-
- MaybeError Buffer::MapWriteAsyncImpl() {
- return {};
- }
-
MaybeError Buffer::MapAsyncImpl(wgpu::MapMode mode, size_t offset, size_t size) {
return {};
}
diff --git a/src/dawn_native/null/DeviceNull.h b/src/dawn_native/null/DeviceNull.h
index 81c10fc..343c48a 100644
--- a/src/dawn_native/null/DeviceNull.h
+++ b/src/dawn_native/null/DeviceNull.h
@@ -204,14 +204,9 @@
private:
~Buffer() override;
-
- // Dawn API
- MaybeError MapReadAsyncImpl() override;
- MaybeError MapWriteAsyncImpl() override;
MaybeError MapAsyncImpl(wgpu::MapMode mode, size_t offset, size_t size) override;
void UnmapImpl() override;
void DestroyImpl() override;
-
bool IsMappableAtCreation() const override;
MaybeError MapAtCreationImpl() override;
void* GetMappedPointerImpl() override;
diff --git a/src/dawn_native/opengl/BufferGL.cpp b/src/dawn_native/opengl/BufferGL.cpp
index 6289c6e..a582f72 100644
--- a/src/dawn_native/opengl/BufferGL.cpp
+++ b/src/dawn_native/opengl/BufferGL.cpp
@@ -123,26 +123,6 @@
return {};
}
- MaybeError Buffer::MapReadAsyncImpl() {
- const OpenGLFunctions& gl = ToBackend(GetDevice())->gl;
-
- // TODO(cwallez@chromium.org): this does GPU->CPU synchronization, we could require a high
- // version of OpenGL that would let us map the buffer unsynchronized.
- gl.BindBuffer(GL_ARRAY_BUFFER, mBuffer);
- mMappedData = gl.MapBuffer(GL_ARRAY_BUFFER, GL_READ_ONLY);
- return {};
- }
-
- MaybeError Buffer::MapWriteAsyncImpl() {
- const OpenGLFunctions& gl = ToBackend(GetDevice())->gl;
-
- // TODO(cwallez@chromium.org): this does GPU->CPU synchronization, we could require a high
- // version of OpenGL that would let us map the buffer unsynchronized.
- gl.BindBuffer(GL_ARRAY_BUFFER, mBuffer);
- mMappedData = gl.MapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
- return {};
- }
-
MaybeError Buffer::MapAsyncImpl(wgpu::MapMode mode, size_t offset, size_t size) {
const OpenGLFunctions& gl = ToBackend(GetDevice())->gl;
diff --git a/src/dawn_native/opengl/BufferGL.h b/src/dawn_native/opengl/BufferGL.h
index 8fcc7fc..54d6a95 100644
--- a/src/dawn_native/opengl/BufferGL.h
+++ b/src/dawn_native/opengl/BufferGL.h
@@ -35,16 +35,13 @@
private:
~Buffer() override;
- // Dawn API
- MaybeError MapReadAsyncImpl() override;
- MaybeError MapWriteAsyncImpl() override;
MaybeError MapAsyncImpl(wgpu::MapMode mode, size_t offset, size_t size) override;
void UnmapImpl() override;
void DestroyImpl() override;
-
bool IsMappableAtCreation() const override;
MaybeError MapAtCreationImpl() override;
void* GetMappedPointerImpl() override;
+
uint64_t GetAppliedSize() const;
void InitializeToZero();
diff --git a/src/dawn_native/vulkan/BufferVk.cpp b/src/dawn_native/vulkan/BufferVk.cpp
index e011455..12224d9 100644
--- a/src/dawn_native/vulkan/BufferVk.cpp
+++ b/src/dawn_native/vulkan/BufferVk.cpp
@@ -141,7 +141,7 @@
// TODO(cwallez@chromium.org): Have a global "zero" buffer that can do everything instead
// of creating a new 4-byte buffer?
createInfo.size = std::max(GetSize(), uint64_t(4u));
- // Add CopyDst for non-mappable buffer initialization in CreateBufferMapped
+ // Add CopyDst for non-mappable buffer initialization with mappedAtCreation
// and robust resource initialization.
createInfo.usage = VulkanBufferUsage(GetUsage() | wgpu::BufferUsage::CopyDst);
createInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
@@ -250,22 +250,6 @@
return {};
}
- MaybeError Buffer::MapReadAsyncImpl() {
- Device* device = ToBackend(GetDevice());
-
- CommandRecordingContext* recordingContext = device->GetPendingRecordingContext();
- TransitionUsageNow(recordingContext, wgpu::BufferUsage::MapRead);
- return {};
- }
-
- MaybeError Buffer::MapWriteAsyncImpl() {
- Device* device = ToBackend(GetDevice());
-
- CommandRecordingContext* recordingContext = device->GetPendingRecordingContext();
- TransitionUsageNow(recordingContext, wgpu::BufferUsage::MapWrite);
- return {};
- }
-
MaybeError Buffer::MapAsyncImpl(wgpu::MapMode mode, size_t offset, size_t size) {
Device* device = ToBackend(GetDevice());
diff --git a/src/dawn_native/vulkan/BufferVk.h b/src/dawn_native/vulkan/BufferVk.h
index 14495d1..f9c6ba0 100644
--- a/src/dawn_native/vulkan/BufferVk.h
+++ b/src/dawn_native/vulkan/BufferVk.h
@@ -57,13 +57,9 @@
void InitializeToZero(CommandRecordingContext* recordingContext);
void ClearBuffer(CommandRecordingContext* recordingContext, uint32_t clearValue);
- // Dawn API
- MaybeError MapReadAsyncImpl() override;
- MaybeError MapWriteAsyncImpl() override;
MaybeError MapAsyncImpl(wgpu::MapMode mode, size_t offset, size_t size) override;
void UnmapImpl() override;
void DestroyImpl() override;
-
bool IsMappableAtCreation() const override;
MaybeError MapAtCreationImpl() override;
void* GetMappedPointerImpl() override;
diff --git a/src/dawn_wire/client/Buffer.cpp b/src/dawn_wire/client/Buffer.cpp
index 86f5944..aad0253 100644
--- a/src/dawn_wire/client/Buffer.cpp
+++ b/src/dawn_wire/client/Buffer.cpp
@@ -115,78 +115,6 @@
mRequests.clear();
}
- void Buffer::MapReadAsync(WGPUBufferMapReadCallback callback, void* userdata) {
- struct ProxyData {
- WGPUBufferMapReadCallback callback;
- void* userdata;
- Buffer* self;
- };
- ProxyData* proxy = new ProxyData;
- proxy->callback = callback;
- proxy->userdata = userdata;
- proxy->self = this;
-
- MapAsync(
- WGPUMapMode_Read, 0, mSize,
- [](WGPUBufferMapAsyncStatus status, void* userdata) {
- ProxyData* proxy = static_cast<ProxyData*>(userdata);
- Buffer* self = proxy->self;
-
- if (status == WGPUBufferMapAsyncStatus_Success) {
- // On buffer creation we assert that a mappable buffer cannot be bigger than
- // MAX_SIZE_T so we should never have a successful mapping in this case.
- ASSERT(self->mSize <= std::numeric_limits<size_t>::max());
- self->mMapOffset = 0;
- self->mMapSize = self->mSize;
- }
-
- if (proxy->callback) {
- const void* data = self->GetConstMappedRange(0, self->mSize);
- uint64_t dataLength = data == nullptr ? 0 : self->mSize;
- proxy->callback(status, data, dataLength, proxy->userdata);
- }
-
- delete proxy;
- },
- proxy);
- }
-
- void Buffer::MapWriteAsync(WGPUBufferMapWriteCallback callback, void* userdata) {
- struct ProxyData {
- WGPUBufferMapWriteCallback callback;
- void* userdata;
- Buffer* self;
- };
- ProxyData* proxy = new ProxyData;
- proxy->callback = callback;
- proxy->userdata = userdata;
- proxy->self = this;
-
- MapAsync(
- WGPUMapMode_Write, 0, mSize,
- [](WGPUBufferMapAsyncStatus status, void* userdata) {
- ProxyData* proxy = static_cast<ProxyData*>(userdata);
- Buffer* self = proxy->self;
-
- if (status == WGPUBufferMapAsyncStatus_Success) {
- // On buffer creation we assert that a mappable buffer cannot be bigger than
- // MAX_SIZE_T so we should never have a successful mapping in this case.
- ASSERT(self->mSize <= std::numeric_limits<size_t>::max());
- self->mMapOffset = 0;
- self->mMapSize = self->mSize;
- }
-
- if (proxy->callback) {
- void* data = self->GetMappedRange(0, self->mSize);
- uint64_t dataLength = data == nullptr ? 0 : self->mSize;
- proxy->callback(status, data, dataLength, proxy->userdata);
- }
-
- delete proxy;
- },
- proxy);
- }
-
void Buffer::MapAsync(WGPUMapModeFlags mode,
size_t offset,
size_t size,
diff --git a/src/dawn_wire/client/Buffer.h b/src/dawn_wire/client/Buffer.h
index 5c32c75..f419583 100644
--- a/src/dawn_wire/client/Buffer.h
+++ b/src/dawn_wire/client/Buffer.h
@@ -34,8 +34,6 @@
~Buffer();
void ClearMapRequests(WGPUBufferMapAsyncStatus status);
- void MapReadAsync(WGPUBufferMapReadCallback callback, void* userdata);
- void MapWriteAsync(WGPUBufferMapWriteCallback callback, void* userdata);
bool OnMapAsyncCallback(uint32_t requestSerial,
uint32_t status,
uint64_t readInitialDataInfoLength,
diff --git a/src/dawn_wire/client/Device.cpp b/src/dawn_wire/client/Device.cpp
index addc977..40dc322 100644
--- a/src/dawn_wire/client/Device.cpp
+++ b/src/dawn_wire/client/Device.cpp
@@ -149,19 +149,6 @@
return Buffer::Create(this, descriptor);
}
- WGPUCreateBufferMappedResult Device::CreateBufferMapped(
- const WGPUBufferDescriptor* descriptor) {
- WGPUBufferDescriptor descMappedAtCreation = *descriptor;
- descMappedAtCreation.mappedAtCreation = true;
-
- WGPUCreateBufferMappedResult result;
- result.buffer = CreateBuffer(&descMappedAtCreation);
- result.data = FromAPI(result.buffer)->GetMappedRange(0, descriptor->size);
- result.dataLength = result.data == nullptr ? 0 : descriptor->size;
-
- return result;
- }
-
WGPUBuffer Device::CreateErrorBuffer() {
return Buffer::CreateError(this);
}
diff --git a/src/dawn_wire/client/Device.h b/src/dawn_wire/client/Device.h
index 2b554e3..38d2762 100644
--- a/src/dawn_wire/client/Device.h
+++ b/src/dawn_wire/client/Device.h
@@ -38,7 +38,6 @@
void PushErrorScope(WGPUErrorFilter filter);
bool PopErrorScope(WGPUErrorCallback callback, void* userdata);
WGPUBuffer CreateBuffer(const WGPUBufferDescriptor* descriptor);
- WGPUCreateBufferMappedResult CreateBufferMapped(const WGPUBufferDescriptor* descriptor);
WGPUBuffer CreateErrorBuffer();
void HandleError(WGPUErrorType errorType, const char* message);
diff --git a/src/tests/end2end/BufferTests.cpp b/src/tests/end2end/BufferTests.cpp
index 6251ff4..5d80624 100644
--- a/src/tests/end2end/BufferTests.cpp
+++ b/src/tests/end2end/BufferTests.cpp
@@ -17,307 +17,6 @@
#include <array>
#include <cstring>
-class BufferMapReadTests : public DawnTest {
- protected:
- static void MapReadCallback(WGPUBufferMapAsyncStatus status,
- const void* data,
- uint64_t,
- void* userdata) {
- ASSERT_EQ(WGPUBufferMapAsyncStatus_Success, status);
- ASSERT_NE(nullptr, data);
-
- static_cast<BufferMapReadTests*>(userdata)->mappedData = data;
- }
-
- const void* MapReadAsyncAndWait(const wgpu::Buffer& buffer) {
- buffer.MapReadAsync(MapReadCallback, this);
-
- while (mappedData == nullptr) {
- WaitABit();
- }
-
- return mappedData;
- }
-
- void UnmapBuffer(const wgpu::Buffer& buffer) {
- buffer.Unmap();
- mappedData = nullptr;
- }
-
- private:
- const void* mappedData = nullptr;
-};
-
-// Test that the simplest map read works.
-TEST_P(BufferMapReadTests, SmallReadAtZero) {
- wgpu::BufferDescriptor descriptor;
- descriptor.size = 4;
- descriptor.usage = wgpu::BufferUsage::MapRead | wgpu::BufferUsage::CopyDst;
- wgpu::Buffer buffer = device.CreateBuffer(&descriptor);
-
- uint32_t myData = 0x01020304;
- queue.WriteBuffer(buffer, 0, &myData, sizeof(myData));
-
- const void* mappedData = MapReadAsyncAndWait(buffer);
- ASSERT_EQ(myData, *reinterpret_cast<const uint32_t*>(mappedData));
-
- UnmapBuffer(buffer);
-}
-
-// Map, read and unmap twice. Test that both of these two iterations work.
-TEST_P(BufferMapReadTests, MapTwice) {
- wgpu::BufferDescriptor descriptor;
- descriptor.size = 4;
- descriptor.usage = wgpu::BufferUsage::MapRead | wgpu::BufferUsage::CopyDst;
- wgpu::Buffer buffer = device.CreateBuffer(&descriptor);
-
- uint32_t myData = 0x01020304;
- queue.WriteBuffer(buffer, 0, &myData, sizeof(myData));
-
- const void* mappedData = MapReadAsyncAndWait(buffer);
- EXPECT_EQ(myData, *reinterpret_cast<const uint32_t*>(mappedData));
-
- UnmapBuffer(buffer);
-
- myData = 0x05060708;
- queue.WriteBuffer(buffer, 0, &myData, sizeof(myData));
-
- const void* mappedData1 = MapReadAsyncAndWait(buffer);
- EXPECT_EQ(myData, *reinterpret_cast<const uint32_t*>(mappedData1));
-
- UnmapBuffer(buffer);
-}
-
-// Test mapping a large buffer.
-TEST_P(BufferMapReadTests, LargeRead) {
- constexpr uint32_t kDataSize = 1000 * 1000;
- std::vector<uint32_t> myData;
- for (uint32_t i = 0; i < kDataSize; ++i) {
- myData.push_back(i);
- }
-
- wgpu::BufferDescriptor descriptor;
- descriptor.size = static_cast<uint32_t>(kDataSize * sizeof(uint32_t));
- descriptor.usage = wgpu::BufferUsage::MapRead | wgpu::BufferUsage::CopyDst;
- wgpu::Buffer buffer = device.CreateBuffer(&descriptor);
-
- queue.WriteBuffer(buffer, 0, myData.data(), kDataSize * sizeof(uint32_t));
-
- const void* mappedData = MapReadAsyncAndWait(buffer);
- ASSERT_EQ(0, memcmp(mappedData, myData.data(), kDataSize * sizeof(uint32_t)));
-
- UnmapBuffer(buffer);
-}
-
-// Test mapping a zero-sized buffer.
-TEST_P(BufferMapReadTests, ZeroSized) {
- wgpu::BufferDescriptor descriptor;
- descriptor.size = 0;
- descriptor.usage = wgpu::BufferUsage::MapRead | wgpu::BufferUsage::CopyDst;
- wgpu::Buffer buffer = device.CreateBuffer(&descriptor);
-
- MapReadAsyncAndWait(buffer);
- UnmapBuffer(buffer);
-}
-
-// Test the result of GetMappedRange when mapped for reading.
-TEST_P(BufferMapReadTests, GetMappedRange) {
- wgpu::BufferDescriptor descriptor;
- descriptor.size = 4;
- descriptor.usage = wgpu::BufferUsage::MapRead | wgpu::BufferUsage::CopyDst;
- wgpu::Buffer buffer = device.CreateBuffer(&descriptor);
-
- const void* mappedData = MapReadAsyncAndWait(buffer);
- ASSERT_EQ(buffer.GetConstMappedRange(), mappedData);
- ASSERT_NE(buffer.GetConstMappedRange(), nullptr);
- UnmapBuffer(buffer);
-}
-
-// Test the result of GetMappedRange when mapped for reading for a zero-sized buffer.
-TEST_P(BufferMapReadTests, GetMappedRangeZeroSized) {
- wgpu::BufferDescriptor descriptor;
- descriptor.size = 0;
- descriptor.usage = wgpu::BufferUsage::MapRead | wgpu::BufferUsage::CopyDst;
- wgpu::Buffer buffer = device.CreateBuffer(&descriptor);
-
- const void* mappedData = MapReadAsyncAndWait(buffer);
- ASSERT_EQ(buffer.GetConstMappedRange(), mappedData);
- ASSERT_NE(buffer.GetConstMappedRange(), nullptr);
- UnmapBuffer(buffer);
-}
-
-DAWN_INSTANTIATE_TEST(BufferMapReadTests,
- D3D12Backend(),
- MetalBackend(),
- OpenGLBackend(),
- VulkanBackend());
-
-class BufferMapWriteTests : public DawnTest {
- protected:
- static void MapWriteCallback(WGPUBufferMapAsyncStatus status,
- void* data,
- uint64_t,
- void* userdata) {
- ASSERT_EQ(WGPUBufferMapAsyncStatus_Success, status);
- ASSERT_NE(nullptr, data);
-
- static_cast<BufferMapWriteTests*>(userdata)->mappedData = data;
- }
-
- void* MapWriteAsyncAndWait(const wgpu::Buffer& buffer) {
- buffer.MapWriteAsync(MapWriteCallback, this);
-
- while (mappedData == nullptr) {
- WaitABit();
- }
-
- // Ensure the prior write's status is updated.
- void* resultPointer = mappedData;
- mappedData = nullptr;
-
- return resultPointer;
- }
-
- void UnmapBuffer(const wgpu::Buffer& buffer) {
- buffer.Unmap();
- mappedData = nullptr;
- }
-
- private:
- void* mappedData = nullptr;
-};
-
-// Test that the simplest map write works.
-TEST_P(BufferMapWriteTests, SmallWriteAtZero) {
- wgpu::BufferDescriptor descriptor;
- descriptor.size = 4;
- descriptor.usage = wgpu::BufferUsage::MapWrite | wgpu::BufferUsage::CopySrc;
- wgpu::Buffer buffer = device.CreateBuffer(&descriptor);
-
- uint32_t myData = 2934875;
- void* mappedData = MapWriteAsyncAndWait(buffer);
- memcpy(mappedData, &myData, sizeof(myData));
- UnmapBuffer(buffer);
-
- EXPECT_BUFFER_U32_EQ(myData, buffer, 0);
-}
-
-// Map, write and unmap twice. Test that both of these two iterations work.
-TEST_P(BufferMapWriteTests, MapTwice) {
- wgpu::BufferDescriptor descriptor;
- descriptor.size = 4;
- descriptor.usage = wgpu::BufferUsage::MapWrite | wgpu::BufferUsage::CopySrc;
- wgpu::Buffer buffer = device.CreateBuffer(&descriptor);
-
- uint32_t myData = 2934875;
- void* mappedData = MapWriteAsyncAndWait(buffer);
- memcpy(mappedData, &myData, sizeof(myData));
- UnmapBuffer(buffer);
-
- EXPECT_BUFFER_U32_EQ(myData, buffer, 0);
-
- myData = 9999999;
- void* mappedData1 = MapWriteAsyncAndWait(buffer);
- memcpy(mappedData1, &myData, sizeof(myData));
- UnmapBuffer(buffer);
-
- EXPECT_BUFFER_U32_EQ(myData, buffer, 0);
-}
-
-// Test mapping a large buffer.
-TEST_P(BufferMapWriteTests, LargeWrite) {
- constexpr uint32_t kDataSize = 1000 * 1000;
- std::vector<uint32_t> myData;
- for (uint32_t i = 0; i < kDataSize; ++i) {
- myData.push_back(i);
- }
-
- wgpu::BufferDescriptor descriptor;
- descriptor.size = static_cast<uint32_t>(kDataSize * sizeof(uint32_t));
- descriptor.usage = wgpu::BufferUsage::MapWrite | wgpu::BufferUsage::CopySrc;
- wgpu::Buffer buffer = device.CreateBuffer(&descriptor);
-
- void* mappedData = MapWriteAsyncAndWait(buffer);
- memcpy(mappedData, myData.data(), kDataSize * sizeof(uint32_t));
- UnmapBuffer(buffer);
-
- EXPECT_BUFFER_U32_RANGE_EQ(myData.data(), buffer, 0, kDataSize);
-}
-
-// Test mapping a zero-sized buffer.
-TEST_P(BufferMapWriteTests, ZeroSized) {
- wgpu::BufferDescriptor descriptor;
- descriptor.size = 0;
- descriptor.usage = wgpu::BufferUsage::MapWrite | wgpu::BufferUsage::CopySrc;
- wgpu::Buffer buffer = device.CreateBuffer(&descriptor);
-
- MapWriteAsyncAndWait(buffer);
- UnmapBuffer(buffer);
-}
-
-// Stress test mapping many buffers.
-TEST_P(BufferMapWriteTests, ManyWrites) {
- constexpr uint32_t kDataSize = 1000;
- std::vector<uint32_t> myData;
- for (uint32_t i = 0; i < kDataSize; ++i) {
- myData.push_back(i);
- }
-
- std::vector<wgpu::Buffer> buffers;
-
- constexpr uint32_t kBuffers = 100;
- for (uint32_t i = 0; i < kBuffers; ++i) {
- wgpu::BufferDescriptor descriptor;
- descriptor.size = static_cast<uint32_t>(kDataSize * sizeof(uint32_t));
- descriptor.usage = wgpu::BufferUsage::MapWrite | wgpu::BufferUsage::CopySrc;
- wgpu::Buffer buffer = device.CreateBuffer(&descriptor);
-
- void* mappedData = MapWriteAsyncAndWait(buffer);
- memcpy(mappedData, myData.data(), kDataSize * sizeof(uint32_t));
- UnmapBuffer(buffer);
-
- buffers.push_back(buffer); // Destroy buffers upon return.
- }
-
- for (uint32_t i = 0; i < kBuffers; ++i) {
- EXPECT_BUFFER_U32_RANGE_EQ(myData.data(), buffers[i], 0, kDataSize);
- }
-}
-
-// Test the result of GetMappedRange when mapped for writing.
-TEST_P(BufferMapWriteTests, GetMappedRange) {
- wgpu::BufferDescriptor descriptor;
- descriptor.size = 4;
- descriptor.usage = wgpu::BufferUsage::MapWrite | wgpu::BufferUsage::CopySrc;
- wgpu::Buffer buffer = device.CreateBuffer(&descriptor);
-
- void* mappedData = MapWriteAsyncAndWait(buffer);
- ASSERT_EQ(buffer.GetMappedRange(), mappedData);
- ASSERT_EQ(buffer.GetMappedRange(), buffer.GetConstMappedRange());
- ASSERT_NE(buffer.GetMappedRange(), nullptr);
- UnmapBuffer(buffer);
-}
-
-// Test the result of GetMappedRange when mapped for writing for a zero-sized buffer.
-TEST_P(BufferMapWriteTests, GetMappedRangeZeroSized) {
- wgpu::BufferDescriptor descriptor;
- descriptor.size = 0;
- descriptor.usage = wgpu::BufferUsage::MapWrite | wgpu::BufferUsage::CopySrc;
- wgpu::Buffer buffer = device.CreateBuffer(&descriptor);
-
- void* mappedData = MapWriteAsyncAndWait(buffer);
- ASSERT_EQ(buffer.GetMappedRange(), mappedData);
- ASSERT_EQ(buffer.GetMappedRange(), buffer.GetConstMappedRange());
- ASSERT_NE(buffer.GetMappedRange(), nullptr);
- UnmapBuffer(buffer);
-}
-
-DAWN_INSTANTIATE_TEST(BufferMapWriteTests,
- D3D12Backend(),
- MetalBackend(),
- OpenGLBackend(),
- VulkanBackend());
-
class BufferMappingTests : public DawnTest {
protected:
void MapAsyncAndWait(const wgpu::Buffer& buffer,
@@ -737,290 +436,6 @@
OpenGLBackend(),
VulkanBackend());
-class CreateBufferMappedTests : public DawnTest {
- protected:
- static void MapReadCallback(WGPUBufferMapAsyncStatus status,
- const void* data,
- uint64_t,
- void* userdata) {
- ASSERT_EQ(WGPUBufferMapAsyncStatus_Success, status);
- ASSERT_NE(nullptr, data);
-
- static_cast<CreateBufferMappedTests*>(userdata)->mappedData = data;
- }
-
- const void* MapReadAsyncAndWait(const wgpu::Buffer& buffer) {
- buffer.MapReadAsync(MapReadCallback, this);
-
- while (mappedData == nullptr) {
- WaitABit();
- }
-
- return mappedData;
- }
-
- void UnmapBuffer(const wgpu::Buffer& buffer) {
- buffer.Unmap();
- mappedData = nullptr;
- }
-
- void CheckResultStartsZeroed(const wgpu::CreateBufferMappedResult& result, uint64_t size) {
- ASSERT_EQ(result.dataLength, size);
- for (uint64_t i = 0; i < result.dataLength; ++i) {
- uint8_t value = *(reinterpret_cast<uint8_t*>(result.data) + i);
- ASSERT_EQ(value, 0u);
- }
- }
-
- wgpu::CreateBufferMappedResult CreateBufferMapped(wgpu::BufferUsage usage, uint64_t size) {
- wgpu::BufferDescriptor descriptor = {};
- descriptor.size = size;
- descriptor.usage = usage;
-
- wgpu::CreateBufferMappedResult result = device.CreateBufferMapped(&descriptor);
- CheckResultStartsZeroed(result, size);
- return result;
- }
-
- wgpu::CreateBufferMappedResult CreateBufferMappedWithData(wgpu::BufferUsage usage,
- const std::vector<uint32_t>& data) {
- size_t byteLength = data.size() * sizeof(uint32_t);
- wgpu::CreateBufferMappedResult result = CreateBufferMapped(usage, byteLength);
- memcpy(result.data, data.data(), byteLength);
-
- return result;
- }
-
- private:
- const void* mappedData = nullptr;
-};
-
-// Test that the simplest CreateBufferMapped works for MapWrite buffers.
-TEST_P(CreateBufferMappedTests, MapWriteUsageSmall) {
- uint32_t myData = 230502;
- wgpu::CreateBufferMappedResult result = CreateBufferMappedWithData(
- wgpu::BufferUsage::MapWrite | wgpu::BufferUsage::CopySrc, {myData});
- UnmapBuffer(result.buffer);
- EXPECT_BUFFER_U32_EQ(myData, result.buffer, 0);
-}
-
-// Test that the simplest CreateBufferMapped works for MapRead buffers.
-TEST_P(CreateBufferMappedTests, MapReadUsageSmall) {
- uint32_t myData = 230502;
- wgpu::CreateBufferMappedResult result =
- CreateBufferMappedWithData(wgpu::BufferUsage::MapRead, {myData});
- UnmapBuffer(result.buffer);
-
- const void* mappedData = MapReadAsyncAndWait(result.buffer);
- ASSERT_EQ(myData, *reinterpret_cast<const uint32_t*>(mappedData));
- UnmapBuffer(result.buffer);
-}
-
-// Test that the simplest CreateBufferMapped works for non-mappable buffers.
-TEST_P(CreateBufferMappedTests, NonMappableUsageSmall) {
- uint32_t myData = 4239;
- wgpu::CreateBufferMappedResult result =
- CreateBufferMappedWithData(wgpu::BufferUsage::CopySrc, {myData});
- UnmapBuffer(result.buffer);
-
- EXPECT_BUFFER_U32_EQ(myData, result.buffer, 0);
-}
-
-// Test CreateBufferMapped for a large MapWrite buffer
-TEST_P(CreateBufferMappedTests, MapWriteUsageLarge) {
- constexpr uint64_t kDataSize = 1000 * 1000;
- std::vector<uint32_t> myData;
- for (uint32_t i = 0; i < kDataSize; ++i) {
- myData.push_back(i);
- }
-
- wgpu::CreateBufferMappedResult result = CreateBufferMappedWithData(
- wgpu::BufferUsage::MapWrite | wgpu::BufferUsage::CopySrc, {myData});
- UnmapBuffer(result.buffer);
-
- EXPECT_BUFFER_U32_RANGE_EQ(myData.data(), result.buffer, 0, kDataSize);
-}
-
-// Test CreateBufferMapped for a large MapRead buffer
-TEST_P(CreateBufferMappedTests, MapReadUsageLarge) {
- constexpr uint64_t kDataSize = 1000 * 1000;
- std::vector<uint32_t> myData;
- for (uint32_t i = 0; i < kDataSize; ++i) {
- myData.push_back(i);
- }
-
- wgpu::CreateBufferMappedResult result =
- CreateBufferMappedWithData(wgpu::BufferUsage::MapRead, myData);
- UnmapBuffer(result.buffer);
-
- const void* mappedData = MapReadAsyncAndWait(result.buffer);
- ASSERT_EQ(0, memcmp(mappedData, myData.data(), kDataSize * sizeof(uint32_t)));
- UnmapBuffer(result.buffer);
-}
-
-// Test CreateBufferMapped for a large non-mappable buffer
-TEST_P(CreateBufferMappedTests, NonMappableUsageLarge) {
- constexpr uint64_t kDataSize = 1000 * 1000;
- std::vector<uint32_t> myData;
- for (uint32_t i = 0; i < kDataSize; ++i) {
- myData.push_back(i);
- }
-
- wgpu::CreateBufferMappedResult result =
- CreateBufferMappedWithData(wgpu::BufferUsage::CopySrc, {myData});
- UnmapBuffer(result.buffer);
-
- EXPECT_BUFFER_U32_RANGE_EQ(myData.data(), result.buffer, 0, kDataSize);
-}
-
-// Test destroying a non-mappable buffer mapped at creation.
-// This is a regression test for an issue where the D3D12 backend thought the buffer was actually
-// mapped and tried to unlock the heap residency (when actually the buffer was using a staging
-// buffer)
-TEST_P(CreateBufferMappedTests, DestroyNonMappableWhileMappedForCreation) {
- wgpu::CreateBufferMappedResult result = CreateBufferMapped(wgpu::BufferUsage::CopySrc, 4);
- result.buffer.Destroy();
-}
-
-// Test destroying a mappable buffer mapped at creation.
-TEST_P(CreateBufferMappedTests, DestroyMappableWhileMappedForCreation) {
- wgpu::CreateBufferMappedResult result = CreateBufferMapped(wgpu::BufferUsage::MapRead, 4);
- result.buffer.Destroy();
-}
-
-// Test that mapping a buffer is valid after CreateBufferMapped and Unmap
-TEST_P(CreateBufferMappedTests, CreateThenMapSuccess) {
- static uint32_t myData = 230502;
- static uint32_t myData2 = 1337;
- wgpu::CreateBufferMappedResult result = CreateBufferMappedWithData(
- wgpu::BufferUsage::MapWrite | wgpu::BufferUsage::CopySrc, {myData});
- UnmapBuffer(result.buffer);
-
- EXPECT_BUFFER_U32_EQ(myData, result.buffer, 0);
-
- bool done = false;
- result.buffer.MapWriteAsync(
- [](WGPUBufferMapAsyncStatus status, void* data, uint64_t, void* userdata) {
- ASSERT_EQ(WGPUBufferMapAsyncStatus_Success, status);
- ASSERT_NE(nullptr, data);
-
- *static_cast<uint32_t*>(data) = myData2;
- *static_cast<bool*>(userdata) = true;
- },
- &done);
-
- while (!done) {
- WaitABit();
- }
-
- UnmapBuffer(result.buffer);
- EXPECT_BUFFER_U32_EQ(myData2, result.buffer, 0);
-}
-
-// Test that is is invalid to map a buffer twice when using CreateBufferMapped
-TEST_P(CreateBufferMappedTests, CreateThenMapBeforeUnmapFailure) {
- uint32_t myData = 230502;
- wgpu::CreateBufferMappedResult result = CreateBufferMappedWithData(
- wgpu::BufferUsage::MapWrite | wgpu::BufferUsage::CopySrc, {myData});
-
- ASSERT_DEVICE_ERROR([&]() {
- bool done = false;
- result.buffer.MapWriteAsync(
- [](WGPUBufferMapAsyncStatus status, void* data, uint64_t, void* userdata) {
- ASSERT_EQ(WGPUBufferMapAsyncStatus_Error, status);
- ASSERT_EQ(nullptr, data);
-
- *static_cast<bool*>(userdata) = true;
- },
- &done);
-
- while (!done) {
- WaitABit();
- }
- }());
-
- // CreateBufferMapped is unaffected by the MapWrite error.
- UnmapBuffer(result.buffer);
- EXPECT_BUFFER_U32_EQ(myData, result.buffer, 0);
-}
-
-// Test that creating a zero-sized buffer mapped is allowed.
-TEST_P(CreateBufferMappedTests, ZeroSized) {
- wgpu::BufferDescriptor descriptor;
- descriptor.size = 0;
- descriptor.usage = wgpu::BufferUsage::Vertex;
- wgpu::CreateBufferMappedResult result = device.CreateBufferMapped(&descriptor);
-
- ASSERT_EQ(0u, result.dataLength);
- ASSERT_NE(nullptr, result.data);
-
- // Check that unmapping the buffer works too.
- UnmapBuffer(result.buffer);
-}
-
-// Test that creating a zero-sized mapppable buffer mapped. (it is a different code path)
-TEST_P(CreateBufferMappedTests, ZeroSizedMappableBuffer) {
- wgpu::BufferDescriptor descriptor;
- descriptor.size = 0;
- descriptor.usage = wgpu::BufferUsage::MapWrite;
- wgpu::CreateBufferMappedResult result = device.CreateBufferMapped(&descriptor);
-
- ASSERT_EQ(0u, result.dataLength);
- ASSERT_NE(nullptr, result.data);
-
- // Check that unmapping the buffer works too.
- UnmapBuffer(result.buffer);
-}
-
-// Test that creating a zero-sized error buffer mapped. (it is a different code path)
-TEST_P(CreateBufferMappedTests, ZeroSizedErrorBuffer) {
- DAWN_SKIP_TEST_IF(IsDawnValidationSkipped());
-
- wgpu::BufferDescriptor descriptor;
- descriptor.size = 0;
- descriptor.usage = wgpu::BufferUsage::MapWrite | wgpu::BufferUsage::Storage;
- wgpu::CreateBufferMappedResult result;
- ASSERT_DEVICE_ERROR(result = device.CreateBufferMapped(&descriptor));
-
- ASSERT_EQ(0u, result.dataLength);
- ASSERT_NE(nullptr, result.data);
-}
-
-// Test the result of GetMappedRange when mapped at creation.
-TEST_P(CreateBufferMappedTests, GetMappedRange) {
- wgpu::BufferDescriptor descriptor;
- descriptor.size = 4;
- descriptor.usage = wgpu::BufferUsage::CopyDst;
- wgpu::CreateBufferMappedResult result;
- result = device.CreateBufferMapped(&descriptor);
-
- ASSERT_EQ(result.buffer.GetMappedRange(), result.data);
- ASSERT_EQ(result.buffer.GetMappedRange(), result.buffer.GetConstMappedRange());
- ASSERT_NE(result.buffer.GetMappedRange(), nullptr);
- result.buffer.Unmap();
-}
-
-// Test the result of GetMappedRange when mapped at creation for a zero-sized buffer.
-TEST_P(CreateBufferMappedTests, GetMappedRangeZeroSized) {
- wgpu::BufferDescriptor descriptor;
- descriptor.size = 0;
- descriptor.usage = wgpu::BufferUsage::CopyDst;
- wgpu::CreateBufferMappedResult result;
- result = device.CreateBufferMapped(&descriptor);
-
- ASSERT_EQ(result.buffer.GetMappedRange(), result.data);
- ASSERT_EQ(result.buffer.GetMappedRange(), result.buffer.GetConstMappedRange());
- ASSERT_NE(result.buffer.GetMappedRange(), nullptr);
- result.buffer.Unmap();
-}
-
-DAWN_INSTANTIATE_TEST(CreateBufferMappedTests,
- D3D12Backend(),
- D3D12Backend({}, {"use_d3d12_resource_heap_tier2"}),
- MetalBackend(),
- OpenGLBackend(),
- VulkanBackend());
-
class BufferMappedAtCreationTests : public DawnTest {
protected:
static void MapCallback(WGPUBufferMapAsyncStatus status, void* userdata) {
@@ -1302,49 +717,6 @@
ASSERT_DEVICE_ERROR(device.CreateBuffer(&descriptor));
}
-// Test that a very large CreateBufferMapped fails gracefully.
-TEST_P(BufferTests, CreateBufferMappedOOM) {
- // TODO(http://crbug.com/dawn/27): Missing support.
- DAWN_SKIP_TEST_IF(IsOpenGL());
- DAWN_SKIP_TEST_IF(IsAsan());
-
- // Test non-mappable buffer
- {
- wgpu::BufferDescriptor descriptor;
- descriptor.size = 4;
- descriptor.usage = wgpu::BufferUsage::CopyDst;
-
- // Control: test a small buffer works.
- device.CreateBufferMapped(&descriptor);
-
- // Test an enormous buffer fails
- descriptor.size = std::numeric_limits<uint64_t>::max();
- ASSERT_DEVICE_ERROR(device.CreateBufferMapped(&descriptor));
-
- // UINT64_MAX may be special cased. Test a smaller, but really large buffer also fails
- descriptor.size = 1ull << 50;
- ASSERT_DEVICE_ERROR(device.CreateBufferMapped(&descriptor));
- }
-
- // Test mappable buffer
- {
- wgpu::BufferDescriptor descriptor;
- descriptor.size = 4;
- descriptor.usage = wgpu::BufferUsage::CopySrc | wgpu::BufferUsage::MapWrite;
-
- // Control: test a small buffer works.
- device.CreateBufferMapped(&descriptor);
-
- // Test an enormous buffer fails
- descriptor.size = std::numeric_limits<uint64_t>::max();
- ASSERT_DEVICE_ERROR(device.CreateBufferMapped(&descriptor));
-
- // UINT64_MAX may be special cased. Test a smaller, but really large buffer also fails
- descriptor.size = 1ull << 50;
- ASSERT_DEVICE_ERROR(device.CreateBufferMapped(&descriptor));
- }
-}
-
// Test that a very large buffer mappedAtCreation fails gracefully.
TEST_P(BufferTests, BufferMappedAtCreationOOM) {
// TODO(http://crbug.com/dawn/27): Missing support.
@@ -1390,81 +762,6 @@
}
}
-// Test that mapping an OOM buffer for reading fails gracefully
-TEST_P(BufferTests, CreateBufferOOMMapReadAsync) {
- // TODO(http://crbug.com/dawn/27): Missing support.
- DAWN_SKIP_TEST_IF(IsOpenGL());
- DAWN_SKIP_TEST_IF(IsAsan());
-
- auto RunTest = [this](const wgpu::BufferDescriptor& descriptor) {
- wgpu::Buffer buffer;
- ASSERT_DEVICE_ERROR(buffer = device.CreateBuffer(&descriptor));
-
- bool done = false;
- ASSERT_DEVICE_ERROR(buffer.MapReadAsync(
- [](WGPUBufferMapAsyncStatus status, const void* ptr, uint64_t dataLength,
- void* userdata) {
- EXPECT_EQ(status, WGPUBufferMapAsyncStatus_Error);
- EXPECT_EQ(ptr, nullptr);
- EXPECT_EQ(dataLength, 0u);
- *static_cast<bool*>(userdata) = true;
- },
- &done));
-
- while (!done) {
- WaitABit();
- }
- };
-
- // Test an enormous buffer
- wgpu::BufferDescriptor descriptor;
- descriptor.usage = wgpu::BufferUsage::CopyDst | wgpu::BufferUsage::MapRead;
-
- descriptor.size = std::numeric_limits<uint64_t>::max();
- RunTest(descriptor);
-
- // UINT64_MAX may be special cased. Test a smaller, but really large buffer also fails
- descriptor.size = 1ull << 50;
- RunTest(descriptor);
-}
-
-// Test that mapping an OOM buffer for reading fails gracefully
-TEST_P(BufferTests, CreateBufferOOMMapWriteAsync) {
- // TODO(http://crbug.com/dawn/27): Missing support.
- DAWN_SKIP_TEST_IF(IsOpenGL());
- DAWN_SKIP_TEST_IF(IsAsan());
-
- auto RunTest = [this](const wgpu::BufferDescriptor& descriptor) {
- wgpu::Buffer buffer;
- ASSERT_DEVICE_ERROR(buffer = device.CreateBuffer(&descriptor));
-
- bool done = false;
- ASSERT_DEVICE_ERROR(buffer.MapWriteAsync(
- [](WGPUBufferMapAsyncStatus status, void* ptr, uint64_t dataLength, void* userdata) {
- EXPECT_EQ(status, WGPUBufferMapAsyncStatus_Error);
- EXPECT_EQ(ptr, nullptr);
- EXPECT_EQ(dataLength, 0u);
- *static_cast<bool*>(userdata) = true;
- },
- &done));
-
- while (!done) {
- WaitABit();
- }
- };
-
- wgpu::BufferDescriptor descriptor;
- descriptor.usage = wgpu::BufferUsage::CopySrc | wgpu::BufferUsage::MapWrite;
-
- // Test an enormous buffer
- descriptor.size = std::numeric_limits<uint64_t>::max();
- RunTest(descriptor);
-
- // UINT64_MAX may be special cased. Test a smaller, but really large buffer also fails
- descriptor.size = 1ull << 50;
- RunTest(descriptor);
-}
-
// Test that mapping an OOM buffer fails gracefully
TEST_P(BufferTests, CreateBufferOOMMapAsync) {
// TODO(http://crbug.com/dawn/27): Missing support.
diff --git a/src/tests/end2end/BufferZeroInitTests.cpp b/src/tests/end2end/BufferZeroInitTests.cpp
index 6a65f17..8a15bfe 100644
--- a/src/tests/end2end/BufferZeroInitTests.cpp
+++ b/src/tests/end2end/BufferZeroInitTests.cpp
@@ -679,7 +679,7 @@
// Test that the code path of readable buffer mapping clears the buffer correctly when it is the
// first use of the buffer.
-TEST_P(BufferZeroInitTest, MapReadAsync) {
+TEST_P(BufferZeroInitTest, MapAsync_Read) {
constexpr uint32_t kBufferSize = 16u;
constexpr wgpu::BufferUsage kBufferUsage =
wgpu::BufferUsage::MapRead | wgpu::BufferUsage::CopyDst;
@@ -724,7 +724,7 @@
// Test that the code path of writable buffer mapping clears the buffer correctly when it is the
// first use of the buffer.
-TEST_P(BufferZeroInitTest, MapWriteAsync) {
+TEST_P(BufferZeroInitTest, MapAsync_Write) {
constexpr uint32_t kBufferSize = 16u;
constexpr wgpu::BufferUsage kBufferUsage =
wgpu::BufferUsage::MapWrite | wgpu::BufferUsage::CopySrc;
diff --git a/src/tests/end2end/DeviceLostTests.cpp b/src/tests/end2end/DeviceLostTests.cpp
index 710a9d4..125d957 100644
--- a/src/tests/end2end/DeviceLostTests.cpp
+++ b/src/tests/end2end/DeviceLostTests.cpp
@@ -333,34 +333,6 @@
}
// Test it's possible to GetMappedRange on a buffer created mapped after device loss
-TEST_P(DeviceLostTest, GetMappedRange_CreateBufferMappedAfterLoss) {
- SetCallbackAndLoseForTesting();
-
- wgpu::BufferDescriptor desc;
- desc.size = 4;
- desc.usage = wgpu::BufferUsage::CopySrc;
- ASSERT_DEVICE_ERROR(wgpu::CreateBufferMappedResult result = device.CreateBufferMapped(&desc));
-
- ASSERT_NE(result.buffer.GetMappedRange(), nullptr);
- ASSERT_EQ(result.buffer.GetMappedRange(), result.data);
-}
-
-// Test that device loss doesn't change the result of GetMappedRange, createBufferMapped version.
-TEST_P(DeviceLostTest, GetMappedRange_CreateBufferMappedBeforeLoss) {
- wgpu::BufferDescriptor desc;
- desc.size = 4;
- desc.usage = wgpu::BufferUsage::CopySrc;
- wgpu::CreateBufferMappedResult result = device.CreateBufferMapped(&desc);
-
- void* rangeBeforeLoss = result.buffer.GetMappedRange();
- SetCallbackAndLoseForTesting();
-
- ASSERT_NE(result.buffer.GetMappedRange(), nullptr);
- ASSERT_EQ(result.buffer.GetMappedRange(), rangeBeforeLoss);
- ASSERT_EQ(result.buffer.GetMappedRange(), result.data);
-}
-
-// Test it's possible to GetMappedRange on a buffer created mapped after device loss
TEST_P(DeviceLostTest, GetMappedRange_CreateBufferMappedAtCreationAfterLoss) {
SetCallbackAndLoseForTesting();
@@ -422,8 +394,8 @@
ASSERT_EQ(buffer.GetConstMappedRange(), rangeBeforeLoss);
}
-// mapreadasync + resolve + loss getmappedrange != nullptr.
-// mapwriteasync + resolve + loss getmappedrange != nullptr.
+// TODO mapasync read + resolve + loss getmappedrange != nullptr.
+// TODO mapasync write + resolve + loss getmappedrange != nullptr.
// Test that Command Encoder Finish fails when device lost
TEST_P(DeviceLostTest, CommandEncoderFinishFails) {
diff --git a/src/tests/unittests/validation/BufferValidationTests.cpp b/src/tests/unittests/validation/BufferValidationTests.cpp
index 43a0a17..325b760 100644
--- a/src/tests/unittests/validation/BufferValidationTests.cpp
+++ b/src/tests/unittests/validation/BufferValidationTests.cpp
@@ -20,44 +20,6 @@
using namespace testing;
-class MockBufferMapReadCallback {
- public:
- MOCK_METHOD(void,
- Call,
- (WGPUBufferMapAsyncStatus status,
- const uint32_t* ptr,
- uint64_t dataLength,
- void* userdata));
-};
-
-static std::unique_ptr<MockBufferMapReadCallback> mockBufferMapReadCallback;
-static void ToMockBufferMapReadCallback(WGPUBufferMapAsyncStatus status,
- const void* ptr,
- uint64_t dataLength,
- void* userdata) {
- // Assume the data is uint32_t to make writing matchers easier
- mockBufferMapReadCallback->Call(status, reinterpret_cast<const uint32_t*>(ptr), dataLength,
- userdata);
-}
-
-class MockBufferMapWriteCallback {
- public:
- MOCK_METHOD(
- void,
- Call,
- (WGPUBufferMapAsyncStatus status, uint32_t* ptr, uint64_t dataLength, void* userdata));
-};
-
-static std::unique_ptr<MockBufferMapWriteCallback> mockBufferMapWriteCallback;
-static void ToMockBufferMapWriteCallback(WGPUBufferMapAsyncStatus status,
- void* ptr,
- uint64_t dataLength,
- void* userdata) {
- // Assume the data is uint32_t to make writing matchers easier
- mockBufferMapWriteCallback->Call(status, reinterpret_cast<uint32_t*>(ptr), dataLength,
- userdata);
-}
-
class MockBufferMapAsyncCallback {
public:
MOCK_METHOD(void, Call, (WGPUBufferMapAsyncStatus status, void* userdata));
@@ -86,14 +48,6 @@
return device.CreateBuffer(&descriptor);
}
- wgpu::CreateBufferMappedResult CreateBufferMapped(uint64_t size, wgpu::BufferUsage usage) {
- wgpu::BufferDescriptor descriptor;
- descriptor.size = size;
- descriptor.usage = usage;
-
- return device.CreateBufferMapped(&descriptor);
- }
-
wgpu::Buffer BufferMappedAtCreation(uint64_t size, wgpu::BufferUsage usage) {
wgpu::BufferDescriptor descriptor;
descriptor.size = size;
@@ -116,16 +70,12 @@
void SetUp() override {
ValidationTest::SetUp();
- mockBufferMapReadCallback = std::make_unique<MockBufferMapReadCallback>();
- mockBufferMapWriteCallback = std::make_unique<MockBufferMapWriteCallback>();
mockBufferMapAsyncCallback = std::make_unique<MockBufferMapAsyncCallback>();
queue = device.GetDefaultQueue();
}
void TearDown() override {
// Delete mocks so that expectations are checked
- mockBufferMapReadCallback = nullptr;
- mockBufferMapWriteCallback = nullptr;
mockBufferMapAsyncCallback = nullptr;
ValidationTest::TearDown();
@@ -488,50 +438,6 @@
}
}
-// Test the success case for mapping buffer for reading
-TEST_F(BufferValidationTest, MapReadAsyncSuccess) {
- wgpu::Buffer buf = CreateMapReadBuffer(4);
-
- buf.MapReadAsync(ToMockBufferMapReadCallback, nullptr);
-
- EXPECT_CALL(*mockBufferMapReadCallback,
- Call(WGPUBufferMapAsyncStatus_Success, Ne(nullptr), 4u, _))
- .Times(1);
- WaitForAllOperations(device);
-
- buf.Unmap();
-}
-
-// Test the success case for mapping buffer for writing
-TEST_F(BufferValidationTest, MapWriteAsyncSuccess) {
- wgpu::Buffer buf = CreateMapWriteBuffer(4);
-
- buf.MapWriteAsync(ToMockBufferMapWriteCallback, nullptr);
-
- EXPECT_CALL(*mockBufferMapWriteCallback,
- Call(WGPUBufferMapAsyncStatus_Success, Ne(nullptr), 4u, _))
- .Times(1);
- WaitForAllOperations(device);
-
- buf.Unmap();
-}
-
-// Test the success case for CreateBufferMapped
-TEST_F(BufferValidationTest, CreateBufferMappedSuccess) {
- wgpu::CreateBufferMappedResult result = CreateBufferMapped(4, wgpu::BufferUsage::MapWrite);
- ASSERT_NE(result.data, nullptr);
- ASSERT_EQ(result.dataLength, 4u);
- result.buffer.Unmap();
-}
-
-// Test the success case for non-mappable CreateBufferMapped
-TEST_F(BufferValidationTest, NonMappableCreateBufferMappedSuccess) {
- wgpu::CreateBufferMappedResult result = CreateBufferMapped(4, wgpu::BufferUsage::CopySrc);
- ASSERT_NE(result.data, nullptr);
- ASSERT_EQ(result.dataLength, 4u);
- result.buffer.Unmap();
-}
-
// Test the success case for mappedAtCreation
TEST_F(BufferValidationTest, MappedAtCreationSuccess) {
BufferMappedAtCreation(4, wgpu::BufferUsage::MapWrite);
@@ -547,228 +453,6 @@
ASSERT_DEVICE_ERROR(BufferMappedAtCreation(2, wgpu::BufferUsage::MapWrite));
}
-// Test map reading a buffer with wrong current usage
-TEST_F(BufferValidationTest, MapReadWrongUsage) {
- wgpu::BufferDescriptor descriptor;
- descriptor.size = 4;
- descriptor.usage = wgpu::BufferUsage::CopyDst;
-
- wgpu::Buffer buf = device.CreateBuffer(&descriptor);
-
- EXPECT_CALL(*mockBufferMapReadCallback, Call(WGPUBufferMapAsyncStatus_Error, nullptr, 0u, _))
- .Times(1);
-
- ASSERT_DEVICE_ERROR(buf.MapReadAsync(ToMockBufferMapReadCallback, nullptr));
-}
-
-// Test map writing a buffer with wrong current usage
-TEST_F(BufferValidationTest, MapWriteWrongUsage) {
- wgpu::BufferDescriptor descriptor;
- descriptor.size = 4;
- descriptor.usage = wgpu::BufferUsage::CopySrc;
-
- wgpu::Buffer buf = device.CreateBuffer(&descriptor);
-
- EXPECT_CALL(*mockBufferMapWriteCallback, Call(WGPUBufferMapAsyncStatus_Error, nullptr, 0u, _))
- .Times(1);
-
- ASSERT_DEVICE_ERROR(buf.MapWriteAsync(ToMockBufferMapWriteCallback, nullptr));
-}
-
-// Test map reading a buffer that is already mapped
-TEST_F(BufferValidationTest, MapReadAlreadyMapped) {
- wgpu::Buffer buf = CreateMapReadBuffer(4);
-
- buf.MapReadAsync(ToMockBufferMapReadCallback, this + 0);
- EXPECT_CALL(*mockBufferMapReadCallback,
- Call(WGPUBufferMapAsyncStatus_Success, Ne(nullptr), 4u, this + 0))
- .Times(1);
-
- EXPECT_CALL(*mockBufferMapReadCallback,
- Call(WGPUBufferMapAsyncStatus_Error, nullptr, 0u, this + 1))
- .Times(1);
- ASSERT_DEVICE_ERROR(buf.MapReadAsync(ToMockBufferMapReadCallback, this + 1));
-
- WaitForAllOperations(device);
-}
-
-// Test map writing a buffer that is already mapped
-TEST_F(BufferValidationTest, MapWriteAlreadyMapped) {
- wgpu::Buffer buf = CreateMapWriteBuffer(4);
-
- buf.MapWriteAsync(ToMockBufferMapWriteCallback, this + 0);
- EXPECT_CALL(*mockBufferMapWriteCallback,
- Call(WGPUBufferMapAsyncStatus_Success, Ne(nullptr), 4u, this + 0))
- .Times(1);
-
- EXPECT_CALL(*mockBufferMapWriteCallback,
- Call(WGPUBufferMapAsyncStatus_Error, nullptr, 0u, this + 1))
- .Times(1);
- ASSERT_DEVICE_ERROR(buf.MapWriteAsync(ToMockBufferMapWriteCallback, this + 1));
-
- WaitForAllOperations(device);
-}
-// TODO(cwallez@chromium.org) Test a MapWrite and already MapRead and vice-versa
-
-// Test unmapping before having the result gives UNKNOWN - for reading
-TEST_F(BufferValidationTest, MapReadUnmapBeforeResult) {
- wgpu::Buffer buf = CreateMapReadBuffer(4);
-
- buf.MapReadAsync(ToMockBufferMapReadCallback, nullptr);
-
- EXPECT_CALL(*mockBufferMapReadCallback, Call(WGPUBufferMapAsyncStatus_Unknown, nullptr, 0u, _))
- .Times(1);
- buf.Unmap();
-
- // The callback shouldn't be called again.
- WaitForAllOperations(device);
-}
-
-// Test unmapping before having the result gives UNKNOWN - for writing
-TEST_F(BufferValidationTest, MapWriteUnmapBeforeResult) {
- wgpu::Buffer buf = CreateMapWriteBuffer(4);
-
- buf.MapWriteAsync(ToMockBufferMapWriteCallback, nullptr);
-
- EXPECT_CALL(*mockBufferMapWriteCallback, Call(WGPUBufferMapAsyncStatus_Unknown, nullptr, 0u, _))
- .Times(1);
- buf.Unmap();
-
- // The callback shouldn't be called again.
- WaitForAllOperations(device);
-}
-
-// Test destroying the buffer before having the result gives UNKNOWN - for reading
-// TODO(cwallez@chromium.org) currently this doesn't work because the buffer doesn't know
-// when its external ref count reaches 0.
-TEST_F(BufferValidationTest, DISABLED_MapReadDestroyBeforeResult) {
- {
- wgpu::Buffer buf = CreateMapReadBuffer(4);
-
- buf.MapReadAsync(ToMockBufferMapReadCallback, nullptr);
-
- EXPECT_CALL(*mockBufferMapReadCallback,
- Call(WGPUBufferMapAsyncStatus_Unknown, nullptr, 0u, _))
- .Times(1);
- }
-
- // The callback shouldn't be called again.
- WaitForAllOperations(device);
-}
-
-// Test destroying the buffer before having the result gives UNKNOWN - for writing
-// TODO(cwallez@chromium.org) currently this doesn't work because the buffer doesn't know
-// when its external ref count reaches 0.
-TEST_F(BufferValidationTest, DISABLED_MapWriteDestroyBeforeResult) {
- {
- wgpu::Buffer buf = CreateMapWriteBuffer(4);
-
- buf.MapWriteAsync(ToMockBufferMapWriteCallback, nullptr);
-
- EXPECT_CALL(*mockBufferMapWriteCallback,
- Call(WGPUBufferMapAsyncStatus_Unknown, nullptr, 0u, _))
- .Times(1);
- }
-
- // The callback shouldn't be called again.
- WaitForAllOperations(device);
-}
-
-// When a MapRead is cancelled with Unmap it might still be in flight, test doing a new request
-// works as expected and we don't get the cancelled request's data.
-TEST_F(BufferValidationTest, MapReadUnmapBeforeResultThenMapAgain) {
- wgpu::Buffer buf = CreateMapReadBuffer(4);
-
- buf.MapReadAsync(ToMockBufferMapReadCallback, this + 0);
-
- EXPECT_CALL(*mockBufferMapReadCallback,
- Call(WGPUBufferMapAsyncStatus_Unknown, nullptr, 0u, this + 0))
- .Times(1);
- buf.Unmap();
-
- buf.MapReadAsync(ToMockBufferMapReadCallback, this + 1);
-
- EXPECT_CALL(*mockBufferMapReadCallback,
- Call(WGPUBufferMapAsyncStatus_Success, Ne(nullptr), 4u, this + 1))
- .Times(1);
- WaitForAllOperations(device);
-}
-// TODO(cwallez@chromium.org) Test a MapWrite and already MapRead and vice-versa
-
-// When a MapWrite is cancelled with Unmap it might still be in flight, test doing a new request
-// works as expected and we don't get the cancelled request's data.
-TEST_F(BufferValidationTest, MapWriteUnmapBeforeResultThenMapAgain) {
- wgpu::Buffer buf = CreateMapWriteBuffer(4);
-
- buf.MapWriteAsync(ToMockBufferMapWriteCallback, this + 0);
-
- EXPECT_CALL(*mockBufferMapWriteCallback,
- Call(WGPUBufferMapAsyncStatus_Unknown, nullptr, 0u, this + 0))
- .Times(1);
- buf.Unmap();
-
- buf.MapWriteAsync(ToMockBufferMapWriteCallback, this + 1);
-
- EXPECT_CALL(*mockBufferMapWriteCallback,
- Call(WGPUBufferMapAsyncStatus_Success, Ne(nullptr), 4u, this + 1))
- .Times(1);
- WaitForAllOperations(device);
-}
-
-// Test that the MapReadCallback isn't fired twice when unmap() is called inside the callback
-TEST_F(BufferValidationTest, UnmapInsideMapReadCallback) {
- wgpu::Buffer buf = CreateMapReadBuffer(4);
-
- buf.MapReadAsync(ToMockBufferMapReadCallback, nullptr);
-
- EXPECT_CALL(*mockBufferMapReadCallback,
- Call(WGPUBufferMapAsyncStatus_Success, Ne(nullptr), 4u, _))
- .WillOnce(InvokeWithoutArgs([&]() { buf.Unmap(); }));
-
- WaitForAllOperations(device);
-}
-
-// Test that the MapWriteCallback isn't fired twice when unmap() is called inside the callback
-TEST_F(BufferValidationTest, UnmapInsideMapWriteCallback) {
- wgpu::Buffer buf = CreateMapWriteBuffer(4);
-
- buf.MapWriteAsync(ToMockBufferMapWriteCallback, nullptr);
-
- EXPECT_CALL(*mockBufferMapWriteCallback,
- Call(WGPUBufferMapAsyncStatus_Success, Ne(nullptr), 4u, _))
- .WillOnce(InvokeWithoutArgs([&]() { buf.Unmap(); }));
-
- WaitForAllOperations(device);
-}
-
-// Test that the MapReadCallback isn't fired twice the buffer external refcount reaches 0 in the
-// callback
-TEST_F(BufferValidationTest, DestroyInsideMapReadCallback) {
- wgpu::Buffer buf = CreateMapReadBuffer(4);
-
- buf.MapReadAsync(ToMockBufferMapReadCallback, nullptr);
-
- EXPECT_CALL(*mockBufferMapReadCallback,
- Call(WGPUBufferMapAsyncStatus_Success, Ne(nullptr), 4u, _))
- .WillOnce(InvokeWithoutArgs([&]() { buf = wgpu::Buffer(); }));
-
- WaitForAllOperations(device);
-}
-
-// Test that the MapWriteCallback isn't fired twice the buffer external refcount reaches 0 in the
-// callback
-TEST_F(BufferValidationTest, DestroyInsideMapWriteCallback) {
- wgpu::Buffer buf = CreateMapWriteBuffer(4);
-
- buf.MapWriteAsync(ToMockBufferMapWriteCallback, nullptr);
-
- EXPECT_CALL(*mockBufferMapWriteCallback,
- Call(WGPUBufferMapAsyncStatus_Success, Ne(nullptr), 4u, _))
- .WillOnce(InvokeWithoutArgs([&]() { buf = wgpu::Buffer(); }));
-
- WaitForAllOperations(device);
-}
-
// Test that it is valid to destroy an unmapped buffer
TEST_F(BufferValidationTest, DestroyUnmappedBuffer) {
{
@@ -781,44 +465,6 @@
}
}
-// Test that it is valid to destroy a mapped buffer
-TEST_F(BufferValidationTest, DestroyMappedBuffer) {
- {
- wgpu::Buffer buf = CreateMapReadBuffer(4);
- buf.MapReadAsync(ToMockBufferMapReadCallback, nullptr);
- buf.Destroy();
- }
- {
- wgpu::Buffer buf = CreateMapWriteBuffer(4);
- buf.MapWriteAsync(ToMockBufferMapWriteCallback, nullptr);
- buf.Destroy();
- }
-}
-
-// Test that destroying a buffer implicitly unmaps it
-TEST_F(BufferValidationTest, DestroyMappedBufferCausesImplicitUnmap) {
- {
- wgpu::Buffer buf = CreateMapReadBuffer(4);
- buf.MapReadAsync(ToMockBufferMapReadCallback, this + 0);
- // Buffer is destroyed. Callback should be called with UNKNOWN status
- EXPECT_CALL(*mockBufferMapReadCallback,
- Call(WGPUBufferMapAsyncStatus_Unknown, nullptr, 0, this + 0))
- .Times(1);
- buf.Destroy();
- WaitForAllOperations(device);
- }
- {
- wgpu::Buffer buf = CreateMapWriteBuffer(4);
- buf.MapWriteAsync(ToMockBufferMapWriteCallback, this + 1);
- // Buffer is destroyed. Callback should be called with UNKNOWN status
- EXPECT_CALL(*mockBufferMapWriteCallback,
- Call(WGPUBufferMapAsyncStatus_Unknown, nullptr, 0, this + 1))
- .Times(1);
- buf.Destroy();
- WaitForAllOperations(device);
- }
-}
-
// Test that it is valid to Destroy a destroyed buffer
TEST_F(BufferValidationTest, DestroyDestroyedBuffer) {
wgpu::Buffer buf = CreateMapWriteBuffer(4);
@@ -840,64 +486,6 @@
}
}
-// Test that it is invalid to map a destroyed buffer
-TEST_F(BufferValidationTest, MapDestroyedBuffer) {
- {
- wgpu::Buffer buf = CreateMapReadBuffer(4);
- buf.Destroy();
- ASSERT_DEVICE_ERROR(buf.MapReadAsync(ToMockBufferMapReadCallback, nullptr));
- }
- {
- wgpu::Buffer buf = CreateMapWriteBuffer(4);
- buf.Destroy();
- ASSERT_DEVICE_ERROR(buf.MapWriteAsync(ToMockBufferMapWriteCallback, nullptr));
- }
-}
-
-// Test that is is invalid to Map a mapped buffer
-TEST_F(BufferValidationTest, MapMappedBuffer) {
- {
- wgpu::Buffer buf = CreateMapReadBuffer(4);
- buf.MapReadAsync(ToMockBufferMapReadCallback, nullptr);
- ASSERT_DEVICE_ERROR(buf.MapReadAsync(ToMockBufferMapReadCallback, nullptr));
- WaitForAllOperations(device);
- }
- {
- wgpu::Buffer buf = CreateMapWriteBuffer(4);
- buf.MapWriteAsync(ToMockBufferMapWriteCallback, nullptr);
- ASSERT_DEVICE_ERROR(buf.MapWriteAsync(ToMockBufferMapWriteCallback, nullptr));
- WaitForAllOperations(device);
- }
-}
-
-// Test that is is invalid to Map a CreateBufferMapped buffer
-TEST_F(BufferValidationTest, MapCreateBufferMappedBuffer) {
- {
- wgpu::Buffer buf = CreateBufferMapped(4, wgpu::BufferUsage::MapRead).buffer;
- ASSERT_DEVICE_ERROR(buf.MapReadAsync(ToMockBufferMapReadCallback, nullptr));
- WaitForAllOperations(device);
- }
- {
- wgpu::Buffer buf = CreateBufferMapped(4, wgpu::BufferUsage::MapWrite).buffer;
- ASSERT_DEVICE_ERROR(buf.MapWriteAsync(ToMockBufferMapWriteCallback, nullptr));
- WaitForAllOperations(device);
- }
-}
-
-// Test that is is invalid to Map a buffer mapped at creation.
-TEST_F(BufferValidationTest, MapBufferMappedAtCreation) {
- {
- wgpu::Buffer buf = BufferMappedAtCreation(4, wgpu::BufferUsage::MapRead);
- ASSERT_DEVICE_ERROR(buf.MapReadAsync(ToMockBufferMapReadCallback, nullptr));
- WaitForAllOperations(device);
- }
- {
- wgpu::Buffer buf = BufferMappedAtCreation(4, wgpu::BufferUsage::MapWrite);
- ASSERT_DEVICE_ERROR(buf.MapWriteAsync(ToMockBufferMapWriteCallback, nullptr));
- WaitForAllOperations(device);
- }
-}
-
// Test that it is valid to submit a buffer in a queue with a map usage if it is unmapped
TEST_F(BufferValidationTest, SubmitBufferWithMapUsage) {
wgpu::BufferDescriptor descriptorA;
@@ -951,50 +539,6 @@
WaitForAllOperations(device);
}
{
- wgpu::Buffer bufA = device.CreateBuffer(&descriptorA);
- wgpu::Buffer bufB = device.CreateBuffer(&descriptorB);
-
- bufA.MapWriteAsync(ToMockBufferMapWriteCallback, nullptr);
-
- wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
- encoder.CopyBufferToBuffer(bufA, 0, bufB, 0, 4);
- wgpu::CommandBuffer commands = encoder.Finish();
- ASSERT_DEVICE_ERROR(queue.Submit(1, &commands));
- WaitForAllOperations(device);
- }
- {
- wgpu::Buffer bufA = device.CreateBuffer(&descriptorA);
- wgpu::Buffer bufB = device.CreateBuffer(&descriptorB);
-
- bufB.MapReadAsync(ToMockBufferMapReadCallback, nullptr);
-
- wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
- encoder.CopyBufferToBuffer(bufA, 0, bufB, 0, 4);
- wgpu::CommandBuffer commands = encoder.Finish();
- ASSERT_DEVICE_ERROR(queue.Submit(1, &commands));
- WaitForAllOperations(device);
- }
- {
- wgpu::Buffer bufA = device.CreateBufferMapped(&descriptorA).buffer;
- wgpu::Buffer bufB = device.CreateBuffer(&descriptorB);
-
- wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
- encoder.CopyBufferToBuffer(bufA, 0, bufB, 0, 4);
- wgpu::CommandBuffer commands = encoder.Finish();
- ASSERT_DEVICE_ERROR(queue.Submit(1, &commands));
- WaitForAllOperations(device);
- }
- {
- wgpu::Buffer bufA = device.CreateBuffer(&descriptorA);
- wgpu::Buffer bufB = device.CreateBufferMapped(&descriptorB).buffer;
-
- wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
- encoder.CopyBufferToBuffer(bufA, 0, bufB, 0, 4);
- wgpu::CommandBuffer commands = encoder.Finish();
- ASSERT_DEVICE_ERROR(queue.Submit(1, &commands));
- WaitForAllOperations(device);
- }
- {
wgpu::BufferDescriptor mappedBufferDesc = descriptorA;
mappedBufferDesc.mappedAtCreation = true;
wgpu::Buffer bufA = device.CreateBuffer(&mappedBufferDesc);
@@ -1056,24 +600,6 @@
wgpu::Buffer buf = CreateMapReadBuffer(4);
// Buffer starts unmapped. Unmap should succeed.
buf.Unmap();
- buf.MapReadAsync(ToMockBufferMapReadCallback, nullptr);
- buf.Unmap();
- // Unmapping twice should succeed
- buf.Unmap();
- }
- {
- wgpu::Buffer buf = CreateMapWriteBuffer(4);
- // Buffer starts unmapped. Unmap should succeed.
- buf.Unmap();
- buf.MapWriteAsync(ToMockBufferMapWriteCallback, nullptr);
- // Unmapping twice should succeed
- buf.Unmap();
- buf.Unmap();
- }
- {
- wgpu::Buffer buf = CreateMapReadBuffer(4);
- // Buffer starts unmapped. Unmap should succeed.
- buf.Unmap();
buf.MapAsync(wgpu::MapMode::Read, 0, 4, nullptr, nullptr);
buf.Unmap();
// Unmapping twice should succeed
@@ -1103,15 +629,6 @@
ASSERT_EQ(nullptr, buf.GetConstMappedRange());
}
- // Unmapped after CreateBufferMapped case.
- {
- wgpu::Buffer buf = CreateBufferMapped(4, wgpu::BufferUsage::CopySrc).buffer;
- buf.Unmap();
-
- ASSERT_EQ(nullptr, buf.GetMappedRange());
- ASSERT_EQ(nullptr, buf.GetConstMappedRange());
- }
-
// Unmapped after mappedAtCreation case.
{
wgpu::Buffer buf = BufferMappedAtCreation(4, wgpu::BufferUsage::CopySrc);
@@ -1121,34 +638,6 @@
ASSERT_EQ(nullptr, buf.GetConstMappedRange());
}
- // Unmapped after MapReadAsync case.
- {
- wgpu::Buffer buf = CreateMapReadBuffer(4);
-
- buf.MapReadAsync(ToMockBufferMapReadCallback, nullptr);
- EXPECT_CALL(*mockBufferMapReadCallback,
- Call(WGPUBufferMapAsyncStatus_Success, Ne(nullptr), 4u, _))
- .Times(1);
- WaitForAllOperations(device);
- buf.Unmap();
-
- ASSERT_EQ(nullptr, buf.GetMappedRange());
- ASSERT_EQ(nullptr, buf.GetConstMappedRange());
- }
-
- // Unmapped after MapWriteAsync case.
- {
- wgpu::Buffer buf = CreateMapWriteBuffer(4);
- buf.MapWriteAsync(ToMockBufferMapWriteCallback, nullptr);
- EXPECT_CALL(*mockBufferMapWriteCallback,
- Call(WGPUBufferMapAsyncStatus_Success, Ne(nullptr), 4u, _))
- .Times(1);
- WaitForAllOperations(device);
- buf.Unmap();
-
- ASSERT_EQ(nullptr, buf.GetMappedRange());
- ASSERT_EQ(nullptr, buf.GetConstMappedRange());
- }
// Unmapped after MapAsync read case.
{
wgpu::Buffer buf = CreateMapReadBuffer(4);
@@ -1191,15 +680,6 @@
ASSERT_EQ(nullptr, buf.GetConstMappedRange());
}
- // Destroyed after CreateBufferMapped case.
- {
- wgpu::Buffer buf = CreateBufferMapped(4, wgpu::BufferUsage::CopySrc).buffer;
- buf.Destroy();
-
- ASSERT_EQ(nullptr, buf.GetMappedRange());
- ASSERT_EQ(nullptr, buf.GetConstMappedRange());
- }
-
// Destroyed after mappedAtCreation case.
{
wgpu::Buffer buf = BufferMappedAtCreation(4, wgpu::BufferUsage::CopySrc);
@@ -1209,34 +689,6 @@
ASSERT_EQ(nullptr, buf.GetConstMappedRange());
}
- // Destroyed after MapReadAsync case.
- {
- wgpu::Buffer buf = CreateMapReadBuffer(4);
-
- buf.MapReadAsync(ToMockBufferMapReadCallback, nullptr);
- EXPECT_CALL(*mockBufferMapReadCallback,
- Call(WGPUBufferMapAsyncStatus_Success, Ne(nullptr), 4u, _))
- .Times(1);
- WaitForAllOperations(device);
- buf.Destroy();
-
- ASSERT_EQ(nullptr, buf.GetMappedRange());
- ASSERT_EQ(nullptr, buf.GetConstMappedRange());
- }
-
- // Destroyed after MapWriteAsync case.
- {
- wgpu::Buffer buf = CreateMapWriteBuffer(4);
- buf.MapWriteAsync(ToMockBufferMapWriteCallback, nullptr);
- EXPECT_CALL(*mockBufferMapWriteCallback,
- Call(WGPUBufferMapAsyncStatus_Success, Ne(nullptr), 4u, _))
- .Times(1);
- WaitForAllOperations(device);
- buf.Destroy();
-
- ASSERT_EQ(nullptr, buf.GetMappedRange());
- ASSERT_EQ(nullptr, buf.GetConstMappedRange());
- }
// Destroyed after MapAsync read case.
{
wgpu::Buffer buf = CreateMapReadBuffer(4);
@@ -1278,14 +730,6 @@
// Test valid cases to call GetMappedRange on a buffer.
TEST_F(BufferValidationTest, GetMappedRange_ValidBufferStateCases) {
- // GetMappedRange after CreateBufferMapped case.
- {
- wgpu::CreateBufferMappedResult result = CreateBufferMapped(4, wgpu::BufferUsage::CopySrc);
- ASSERT_NE(result.buffer.GetConstMappedRange(), nullptr);
- ASSERT_EQ(result.buffer.GetConstMappedRange(), result.buffer.GetMappedRange());
- ASSERT_EQ(result.buffer.GetConstMappedRange(), result.data);
- }
-
// GetMappedRange after mappedAtCreation case.
{
wgpu::Buffer buffer = BufferMappedAtCreation(4, wgpu::BufferUsage::CopySrc);
@@ -1323,41 +767,6 @@
uint64_t kStupidLarge = uint64_t(1) << uint64_t(63);
- // GetMappedRange after CreateBufferMapped a zero-sized buffer returns a non-nullptr.
- // This is to check we don't do a malloc(0).
- {
- wgpu::CreateBufferMappedResult result;
- ASSERT_DEVICE_ERROR(result = CreateBufferMapped(
- 0, wgpu::BufferUsage::Storage | wgpu::BufferUsage::MapRead));
-
- ASSERT_NE(result.buffer.GetConstMappedRange(), nullptr);
- ASSERT_EQ(result.buffer.GetConstMappedRange(), result.buffer.GetMappedRange());
- ASSERT_EQ(result.buffer.GetConstMappedRange(), result.data);
- }
-
- // GetMappedRange after CreateBufferMapped non-OOM returns a non-nullptr.
- {
- wgpu::CreateBufferMappedResult result;
- ASSERT_DEVICE_ERROR(result = CreateBufferMapped(
- 4, wgpu::BufferUsage::Storage | wgpu::BufferUsage::MapRead));
-
- ASSERT_NE(result.buffer.GetConstMappedRange(), nullptr);
- ASSERT_EQ(result.buffer.GetConstMappedRange(), result.buffer.GetMappedRange());
- ASSERT_EQ(result.buffer.GetConstMappedRange(), result.data);
- }
-
- // GetMappedRange after CreateBufferMapped OOM case returns nullptr.
- {
- wgpu::CreateBufferMappedResult result;
- ASSERT_DEVICE_ERROR(result =
- CreateBufferMapped(kStupidLarge, wgpu::BufferUsage::Storage |
- wgpu::BufferUsage::MapRead));
-
- ASSERT_EQ(result.buffer.GetConstMappedRange(), nullptr);
- ASSERT_EQ(result.buffer.GetConstMappedRange(), result.buffer.GetMappedRange());
- ASSERT_EQ(result.buffer.GetConstMappedRange(), result.data);
- }
-
// GetMappedRange after mappedAtCreation a zero-sized buffer returns a non-nullptr.
// This is to check we don't do a malloc(0).
{
diff --git a/src/tests/unittests/validation/QueueSubmitValidationTests.cpp b/src/tests/unittests/validation/QueueSubmitValidationTests.cpp
index b4ee859..3eb2d7e 100644
--- a/src/tests/unittests/validation/QueueSubmitValidationTests.cpp
+++ b/src/tests/unittests/validation/QueueSubmitValidationTests.cpp
@@ -165,17 +165,6 @@
// Test WriteBuffer with mapped buffer
TEST_F(QueueWriteBufferValidationTest, MappedBuffer) {
- // CreateBufferMapped
- {
- wgpu::BufferDescriptor descriptor;
- descriptor.size = 4;
- descriptor.usage = wgpu::BufferUsage::CopyDst;
- wgpu::CreateBufferMappedResult result = device.CreateBufferMapped(&descriptor);
-
- uint32_t value = 0;
- ASSERT_DEVICE_ERROR(queue.WriteBuffer(result.buffer, 0, &value, sizeof(value)));
- }
-
// mappedAtCreation
{
wgpu::BufferDescriptor descriptor;
diff --git a/src/tests/white_box/D3D12ResidencyTests.cpp b/src/tests/white_box/D3D12ResidencyTests.cpp
index 8d958ab5..b8b439c 100644
--- a/src/tests/white_box/D3D12ResidencyTests.cpp
+++ b/src/tests/white_box/D3D12ResidencyTests.cpp
@@ -87,8 +87,6 @@
}
wgpu::Buffer mSourceBuffer;
- void* mMappedWriteData = nullptr;
- const void* mMappedReadData = nullptr;
};
class D3D12ResourceResidencyTests : public D3D12ResidencyTestBase {
@@ -109,26 +107,6 @@
bool IsUMA() const {
return reinterpret_cast<dawn_native::d3d12::Device*>(device.Get())->GetDeviceInfo().isUMA;
}
-
- static void MapReadCallback(WGPUBufferMapAsyncStatus status,
- const void* data,
- uint64_t,
- void* userdata) {
- ASSERT_EQ(WGPUBufferMapAsyncStatus_Success, status);
- ASSERT_NE(nullptr, data);
-
- static_cast<D3D12ResourceResidencyTests*>(userdata)->mMappedReadData = data;
- }
-
- static void MapWriteCallback(WGPUBufferMapAsyncStatus status,
- void* data,
- uint64_t,
- void* userdata) {
- ASSERT_EQ(WGPUBufferMapAsyncStatus_Success, status);
- ASSERT_NE(nullptr, data);
-
- static_cast<D3D12ResourceResidencyTests*>(userdata)->mMappedWriteData = data;
- }
};
class D3D12DescriptorResidencyTests : public D3D12ResidencyTestBase {};
@@ -211,7 +189,7 @@
EXPECT_FALSE(CheckIfBufferIsResident(bufferSet1[indexOfBufferInSet1]));
}
-// Check that calling MapReadAsync makes the buffer resident and keeps it locked resident.
+// Check that calling MapAsync for reading makes the buffer resident and keeps it locked resident.
TEST_P(D3D12ResourceResidencyTests, AsyncMappedBufferRead) {
// Create a mappable buffer.
wgpu::Buffer buffer = CreateBuffer(4, kMapReadBufferUsage);
@@ -231,11 +209,18 @@
// The mappable buffer should have been evicted.
EXPECT_FALSE(CheckIfBufferIsResident(buffer));
- // Calling MapReadAsync should make the buffer resident.
- buffer.MapReadAsync(MapReadCallback, this);
+ // Calling MapAsync for reading should make the buffer resident.
+ bool done = false;
+ buffer.MapAsync(
+ wgpu::MapMode::Read, 0, sizeof(uint32_t),
+ [](WGPUBufferMapAsyncStatus status, void* userdata) {
+ ASSERT_EQ(WGPUBufferMapAsyncStatus_Success, status);
+ *static_cast<bool*>(userdata) = true;
+ },
+ &done);
EXPECT_TRUE(CheckIfBufferIsResident(buffer));
- while (mMappedReadData == nullptr) {
+ while (!done) {
WaitABit();
}
@@ -254,7 +239,7 @@
EXPECT_FALSE(CheckIfBufferIsResident(buffer));
}
-// Check that calling MapWriteAsync makes the buffer resident and keeps it locked resident.
+// Check that calling MapAsync for writing makes the buffer resident and keeps it locked resident.
TEST_P(D3D12ResourceResidencyTests, AsyncMappedBufferWrite) {
// Create a mappable buffer.
wgpu::Buffer buffer = CreateBuffer(4, kMapWriteBufferUsage);
@@ -270,11 +255,18 @@
// The mappable buffer should have been evicted.
EXPECT_FALSE(CheckIfBufferIsResident(buffer));
- // Calling MapWriteAsync should make the buffer resident.
- buffer.MapWriteAsync(MapWriteCallback, this);
+ // Calling MapAsync for writing should make the buffer resident.
+ bool done = false;
+ buffer.MapAsync(
+ wgpu::MapMode::Write, 0, sizeof(uint32_t),
+ [](WGPUBufferMapAsyncStatus status, void* userdata) {
+ ASSERT_EQ(WGPUBufferMapAsyncStatus_Success, status);
+ *static_cast<bool*>(userdata) = true;
+ },
+ &done);
EXPECT_TRUE(CheckIfBufferIsResident(buffer));
- while (mMappedWriteData == nullptr) {
+ while (!done) {
WaitABit();
}