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));