Refactor SetMapped()

Rename BufferBase::SetMapped() to FinalizeMap() since it does more than
just setting the state to mapped. Also add FinalizeMapImpl() for doing
implementation specific work. This will be used on Vulkan in a follow
up CL.

Bug: 432691010
Change-Id: I982953789163b11105cc0635bd8c380fadc39ba4
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/258555
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Kyle Charbonneau <kylechar@google.com>
Auto-Submit: Kyle Charbonneau <kylechar@google.com>
diff --git a/src/dawn/native/Buffer.cpp b/src/dawn/native/Buffer.cpp
index 34d173c..e932096 100644
--- a/src/dawn/native/Buffer.cpp
+++ b/src/dawn/native/Buffer.cpp
@@ -91,6 +91,8 @@
         return {};
     }
 
+    void FinalizeMapImpl() override {}
+
     MaybeError MapAsyncImpl(wgpu::MapMode mode, size_t offset, size_t size) override {
         DAWN_UNREACHABLE();
     }
@@ -258,7 +260,7 @@
                 error = true;
             } else if (auto** buffer = std::get_if<BufferBase*>(&*bufferOrError)) {
                 // Set the buffer state to Mapped if this pending map succeeded.
-                (*buffer)->SetMapped(BufferState::Mapped);
+                (*buffer)->FinalizeMap(BufferState::Mapped);
             }
         });
         if (error) {
@@ -469,7 +471,7 @@
     }
 }
 
-void BufferBase::SetMapped(BufferState newState) {
+void BufferBase::FinalizeMap(BufferState newState) {
     // There are only 2 valid transitions:
     //   1) Nominal: PendingMap -> Mapped
     //   2) MappedAtCreation case because initial state is unmapped: Unmapped -> MappedAtCreation.
@@ -486,6 +488,8 @@
     }
 
     mState.store(newState, std::memory_order::release);
+
+    FinalizeMapImpl();
 }
 
 MaybeError BufferBase::MapAtCreation() {
@@ -551,7 +555,7 @@
     mMapOffset = 0;
     mMapSize = mSize;
     mStagingBuffer = std::move(stagingBuffer);
-    SetMapped(BufferState::MappedAtCreation);
+    FinalizeMap(BufferState::MappedAtCreation);
     return mStagingBuffer != nullptr;
 }
 
diff --git a/src/dawn/native/Buffer.h b/src/dawn/native/Buffer.h
index ae32bf3..c8dc386 100644
--- a/src/dawn/native/Buffer.h
+++ b/src/dawn/native/Buffer.h
@@ -166,6 +166,7 @@
 
     virtual MaybeError MapAtCreationImpl() = 0;
     virtual MaybeError MapAsyncImpl(wgpu::MapMode mode, size_t offset, size_t size) = 0;
+    virtual void FinalizeMapImpl() = 0;
     virtual void* GetMappedPointerImpl() = 0;
     virtual void UnmapImpl() = 0;
 
@@ -181,7 +182,7 @@
     MaybeError UnmapInternal(WGPUMapAsyncStatus status, std::string_view message);
 
     // Updates internal state to reflect that the buffer is now mapped.
-    void SetMapped(BufferState newState);
+    void FinalizeMap(BufferState newState);
 
     const uint64_t mSize = 0;
     const wgpu::BufferUsage mUsage = wgpu::BufferUsage::None;
diff --git a/src/dawn/native/d3d11/BufferD3D11.cpp b/src/dawn/native/d3d11/BufferD3D11.cpp
index 4d0e128..be6727d 100644
--- a/src/dawn/native/d3d11/BufferD3D11.cpp
+++ b/src/dawn/native/d3d11/BufferD3D11.cpp
@@ -520,6 +520,8 @@
     return {};
 }
 
+void Buffer::FinalizeMapImpl() {}
+
 MaybeError Buffer::FinalizeMap(ScopedCommandRecordingContext* commandContext,
                                ExecutionSerial completedSerial,
                                wgpu::MapMode mode) {
diff --git a/src/dawn/native/d3d11/BufferD3D11.h b/src/dawn/native/d3d11/BufferD3D11.h
index b65594a..bfe849b 100644
--- a/src/dawn/native/d3d11/BufferD3D11.h
+++ b/src/dawn/native/d3d11/BufferD3D11.h
@@ -177,6 +177,7 @@
                           const ScopedCommandRecordingContext* commandContext);
     MaybeError ClearInitialResource(const ScopedCommandRecordingContext* commandContext);
     MaybeError MapAsyncImpl(wgpu::MapMode mode, size_t offset, size_t size) override;
+    void FinalizeMapImpl() override;
     void UnmapImpl() override;
     bool IsCPUWritableAtCreation() const override;
     MaybeError MapAtCreationImpl() override;
diff --git a/src/dawn/native/d3d12/BufferD3D12.cpp b/src/dawn/native/d3d12/BufferD3D12.cpp
index e1a6093..1a29834 100644
--- a/src/dawn/native/d3d12/BufferD3D12.cpp
+++ b/src/dawn/native/d3d12/BufferD3D12.cpp
@@ -507,6 +507,8 @@
     return MapInternal(mode & wgpu::MapMode::Write, offset, size, "D3D12 map async");
 }
 
+void Buffer::FinalizeMapImpl() {}
+
 void Buffer::UnmapImpl() {
     GetD3D12Resource()->Unmap(0, &mWrittenMappedRange);
     mMappedData = nullptr;
diff --git a/src/dawn/native/d3d12/BufferD3D12.h b/src/dawn/native/d3d12/BufferD3D12.h
index 072acc6..eade4b8 100644
--- a/src/dawn/native/d3d12/BufferD3D12.h
+++ b/src/dawn/native/d3d12/BufferD3D12.h
@@ -86,6 +86,7 @@
     MaybeError InitializeAsExternalBuffer(ComPtr<ID3D12Resource> d3dBuffer,
                                           const UnpackedPtr<BufferDescriptor>& descriptor);
     MaybeError MapAsyncImpl(wgpu::MapMode mode, size_t offset, size_t size) override;
+    void FinalizeMapImpl() override;
     void UnmapImpl() override;
     void DestroyImpl() override;
     bool IsCPUWritableAtCreation() const override;
diff --git a/src/dawn/native/metal/BufferMTL.h b/src/dawn/native/metal/BufferMTL.h
index 5837885..ed0b86b 100644
--- a/src/dawn/native/metal/BufferMTL.h
+++ b/src/dawn/native/metal/BufferMTL.h
@@ -66,6 +66,7 @@
     ~Buffer() override;
 
     MaybeError MapAsyncImpl(wgpu::MapMode mode, size_t offset, size_t size) override;
+    void FinalizeMapImpl() override;
     void UnmapImpl() override;
     void DestroyImpl() override;
     void SetLabelImpl() override;
diff --git a/src/dawn/native/metal/BufferMTL.mm b/src/dawn/native/metal/BufferMTL.mm
index e5ce0c1..a06a589 100644
--- a/src/dawn/native/metal/BufferMTL.mm
+++ b/src/dawn/native/metal/BufferMTL.mm
@@ -200,6 +200,8 @@
     return {};
 }
 
+void Buffer::FinalizeMapImpl() {}
+
 void* Buffer::GetMappedPointerImpl() {
     return [*mMtlBuffer contents];
 }
diff --git a/src/dawn/native/null/DeviceNull.cpp b/src/dawn/native/null/DeviceNull.cpp
index c1232cd..f114bf9 100644
--- a/src/dawn/native/null/DeviceNull.cpp
+++ b/src/dawn/native/null/DeviceNull.cpp
@@ -401,6 +401,8 @@
     return {};
 }
 
+void Buffer::FinalizeMapImpl() {}
+
 void* Buffer::GetMappedPointerImpl() {
     return mBackingData.get();
 }
diff --git a/src/dawn/native/null/DeviceNull.h b/src/dawn/native/null/DeviceNull.h
index 126514f..7b40c80 100644
--- a/src/dawn/native/null/DeviceNull.h
+++ b/src/dawn/native/null/DeviceNull.h
@@ -266,6 +266,7 @@
 
   private:
     MaybeError MapAsyncImpl(wgpu::MapMode mode, size_t offset, size_t size) override;
+    void FinalizeMapImpl() override;
     void UnmapImpl() override;
     void DestroyImpl() override;
     bool IsCPUWritableAtCreation() const override;
diff --git a/src/dawn/native/opengl/BufferGL.cpp b/src/dawn/native/opengl/BufferGL.cpp
index 2482712..005b9be 100644
--- a/src/dawn/native/opengl/BufferGL.cpp
+++ b/src/dawn/native/opengl/BufferGL.cpp
@@ -231,6 +231,8 @@
     return {};
 }
 
+void Buffer::FinalizeMapImpl() {}
+
 void* Buffer::GetMappedPointerImpl() {
     // The mapping offset has already been removed.
     return mMappedData;
diff --git a/src/dawn/native/opengl/BufferGL.h b/src/dawn/native/opengl/BufferGL.h
index 8c62342..384792d 100644
--- a/src/dawn/native/opengl/BufferGL.h
+++ b/src/dawn/native/opengl/BufferGL.h
@@ -60,6 +60,7 @@
     Buffer(Device* device, const UnpackedPtr<BufferDescriptor>& descriptor, GLuint handle);
     ~Buffer() override;
     MaybeError MapAsyncImpl(wgpu::MapMode mode, size_t offset, size_t size) override;
+    void FinalizeMapImpl() override;
     void UnmapImpl() override;
     void DestroyImpl() override;
     bool IsCPUWritableAtCreation() const override;
diff --git a/src/dawn/native/vulkan/BufferVk.cpp b/src/dawn/native/vulkan/BufferVk.cpp
index a9da033..ee3a66a 100644
--- a/src/dawn/native/vulkan/BufferVk.cpp
+++ b/src/dawn/native/vulkan/BufferVk.cpp
@@ -537,6 +537,8 @@
     return {};
 }
 
+void Buffer::FinalizeMapImpl() {}
+
 void Buffer::UnmapImpl() {
     // No need to do anything, we keep CPU-visible memory mapped at all time.
 }
diff --git a/src/dawn/native/vulkan/BufferVk.h b/src/dawn/native/vulkan/BufferVk.h
index c7074ce..4ad8acd 100644
--- a/src/dawn/native/vulkan/BufferVk.h
+++ b/src/dawn/native/vulkan/BufferVk.h
@@ -87,6 +87,7 @@
                      uint64_t size = 0);
 
     MaybeError MapAsyncImpl(wgpu::MapMode mode, size_t offset, size_t size) override;
+    void FinalizeMapImpl() override;
     void UnmapImpl() override;
     void DestroyImpl() override;
     bool IsCPUWritableAtCreation() const override;
diff --git a/src/dawn/native/webgpu/BufferWGPU.cpp b/src/dawn/native/webgpu/BufferWGPU.cpp
index e5a26b9..792eefc 100644
--- a/src/dawn/native/webgpu/BufferWGPU.cpp
+++ b/src/dawn/native/webgpu/BufferWGPU.cpp
@@ -116,6 +116,8 @@
     return {};
 }
 
+void Buffer::FinalizeMapImpl() {}
+
 void* Buffer::GetMappedPointerImpl() {
     // The mapping offset has already been removed.
     return mMappedData;
diff --git a/src/dawn/native/webgpu/BufferWGPU.h b/src/dawn/native/webgpu/BufferWGPU.h
index aaecce8..a5970a0 100644
--- a/src/dawn/native/webgpu/BufferWGPU.h
+++ b/src/dawn/native/webgpu/BufferWGPU.h
@@ -46,6 +46,7 @@
   private:
     MaybeError MapAsyncImpl(wgpu::MapMode mode, size_t offset, size_t size) override;
     void UnmapImpl() override;
+    void FinalizeMapImpl() override;
     bool IsCPUWritableAtCreation() const override;
     MaybeError MapAtCreationImpl() override;
     void* GetMappedPointerImpl() override;
diff --git a/src/dawn/tests/unittests/native/mocks/BufferMock.h b/src/dawn/tests/unittests/native/mocks/BufferMock.h
index 83c351f..196b24e 100644
--- a/src/dawn/tests/unittests/native/mocks/BufferMock.h
+++ b/src/dawn/tests/unittests/native/mocks/BufferMock.h
@@ -54,6 +54,7 @@
                 MapAsyncImpl,
                 (wgpu::MapMode mode, size_t offset, size_t size),
                 (override));
+    MOCK_METHOD(void, FinalizeMapImpl, (), (override));
     MOCK_METHOD(void*, GetMappedPointerImpl, (), (override));
     MOCK_METHOD(void, UnmapImpl, (), (override));