Use typed integers for the Fence FenceAPISerial This will prevent mixing it up with other serial types in the future. Bug: dawn:442 Change-Id: I1cdb35ee01be3c771183003bc357c84d46aa5745 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/28922 Commit-Queue: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Jiawei Shao <jiawei.shao@intel.com> Reviewed-by: Austin Eng <enga@chromium.org>
diff --git a/src/dawn_native/Fence.cpp b/src/dawn_native/Fence.cpp index f16274e..5c2a64f 100644 --- a/src/dawn_native/Fence.cpp +++ b/src/dawn_native/Fence.cpp
@@ -60,12 +60,14 @@ if (IsError()) { return 0; } - return mCompletedValue; + return uint64_t(mCompletedValue); } - void Fence::OnCompletion(uint64_t value, + void Fence::OnCompletion(uint64_t apiValue, wgpu::FenceOnCompletionCallback callback, void* userdata) { + FenceAPISerial value(apiValue); + WGPUFenceCompletionStatus status; if (GetDevice()->ConsumedError(ValidateOnCompletion(value, &status))) { callback(status, userdata); @@ -84,7 +86,7 @@ mRequests.Enqueue(std::move(request), value); } - uint64_t Fence::GetSignaledValue() const { + FenceAPISerial Fence::GetSignaledValue() const { ASSERT(!IsError()); return mSignalValue; } @@ -94,13 +96,13 @@ return mQueue.Get(); } - void Fence::SetSignaledValue(uint64_t signalValue) { + void Fence::SetSignaledValue(FenceAPISerial signalValue) { ASSERT(!IsError()); ASSERT(signalValue > mSignalValue); mSignalValue = signalValue; } - void Fence::SetCompletedValue(uint64_t completedValue) { + void Fence::SetCompletedValue(FenceAPISerial completedValue) { ASSERT(!IsError()); ASSERT(completedValue <= mSignalValue); ASSERT(completedValue > mCompletedValue); @@ -116,7 +118,7 @@ mRequests.ClearUpTo(mCompletedValue); } - MaybeError Fence::ValidateOnCompletion(uint64_t value, + MaybeError Fence::ValidateOnCompletion(FenceAPISerial value, WGPUFenceCompletionStatus* status) const { *status = WGPUFenceCompletionStatus_DeviceLost; DAWN_TRY(GetDevice()->ValidateIsAlive());
diff --git a/src/dawn_native/Fence.h b/src/dawn_native/Fence.h index b4fb821..f5f4be6 100644 --- a/src/dawn_native/Fence.h +++ b/src/dawn_native/Fence.h
@@ -18,6 +18,7 @@ #include "common/SerialMap.h" #include "dawn_native/Error.h" #include "dawn_native/Forward.h" +#include "dawn_native/IntegerTypes.h" #include "dawn_native/ObjectBase.h" #include "dawn_native/dawn_platform.h" @@ -34,7 +35,7 @@ static Fence* MakeError(DeviceBase* device); - uint64_t GetSignaledValue() const; + FenceAPISerial GetSignaledValue() const; const QueueBase* GetQueue() const; // Dawn API @@ -44,24 +45,25 @@ protected: friend class QueueBase; friend class FenceSignalTracker; - void SetSignaledValue(uint64_t signalValue); - void SetCompletedValue(uint64_t completedValue); + void SetSignaledValue(FenceAPISerial signalValue); + void SetCompletedValue(FenceAPISerial completedValue); private: Fence(DeviceBase* device, ObjectBase::ErrorTag tag); ~Fence() override; - MaybeError ValidateOnCompletion(uint64_t value, WGPUFenceCompletionStatus* status) const; + MaybeError ValidateOnCompletion(FenceAPISerial value, + WGPUFenceCompletionStatus* status) const; struct OnCompletionData { wgpu::FenceOnCompletionCallback completionCallback = nullptr; void* userdata = nullptr; }; - uint64_t mSignalValue; - uint64_t mCompletedValue; + FenceAPISerial mSignalValue; + FenceAPISerial mCompletedValue; Ref<QueueBase> mQueue; - SerialMap<Serial, OnCompletionData> mRequests; + SerialMap<FenceAPISerial, OnCompletionData> mRequests; }; } // namespace dawn_native
diff --git a/src/dawn_native/FenceSignalTracker.cpp b/src/dawn_native/FenceSignalTracker.cpp index b8243a2..2147ea6 100644 --- a/src/dawn_native/FenceSignalTracker.cpp +++ b/src/dawn_native/FenceSignalTracker.cpp
@@ -26,7 +26,7 @@ ASSERT(mFencesInFlight.Empty()); } - void FenceSignalTracker::UpdateFenceOnComplete(Fence* fence, uint64_t value) { + void FenceSignalTracker::UpdateFenceOnComplete(Fence* fence, FenceAPISerial value) { // Because we currently only have a single queue, we can simply update // the fence completed value once the last submitted serial has passed. mFencesInFlight.Enqueue(FenceInFlight{fence, value},
diff --git a/src/dawn_native/FenceSignalTracker.h b/src/dawn_native/FenceSignalTracker.h index 623140f..f1ea883 100644 --- a/src/dawn_native/FenceSignalTracker.h +++ b/src/dawn_native/FenceSignalTracker.h
@@ -17,6 +17,7 @@ #include "common/RefCounted.h" #include "common/SerialQueue.h" +#include "dawn_native/IntegerTypes.h" namespace dawn_native { @@ -26,14 +27,14 @@ class FenceSignalTracker { struct FenceInFlight { Ref<Fence> fence; - uint64_t value; + FenceAPISerial value; }; public: FenceSignalTracker(DeviceBase* device); ~FenceSignalTracker(); - void UpdateFenceOnComplete(Fence* fence, uint64_t value); + void UpdateFenceOnComplete(Fence* fence, FenceAPISerial value); void Tick(Serial finishedSerial);
diff --git a/src/dawn_native/IntegerTypes.h b/src/dawn_native/IntegerTypes.h index 3b72722..f7e97ab 100644 --- a/src/dawn_native/IntegerTypes.h +++ b/src/dawn_native/IntegerTypes.h
@@ -54,6 +54,9 @@ // that was sent. using MapRequestID = TypedInteger<struct MapRequestIDT, uint64_t>; + // The type for the WebGPU API fence serial values. + using FenceAPISerial = TypedInteger<struct FenceAPISerialT, uint64_t>; + } // namespace dawn_native #endif // DAWNNATIVE_INTEGERTYPES_H_
diff --git a/src/dawn_native/Queue.cpp b/src/dawn_native/Queue.cpp index 3b7376e..c655139 100644 --- a/src/dawn_native/Queue.cpp +++ b/src/dawn_native/Queue.cpp
@@ -155,7 +155,9 @@ } } - void QueueBase::Signal(Fence* fence, uint64_t signalValue) { + void QueueBase::Signal(Fence* fence, uint64_t apiSignalValue) { + FenceAPISerial signalValue(apiSignalValue); + DeviceBase* device = GetDevice(); if (device->ConsumedError(ValidateSignal(fence, signalValue))) { return; @@ -312,7 +314,7 @@ return {}; } - MaybeError QueueBase::ValidateSignal(const Fence* fence, uint64_t signalValue) const { + MaybeError QueueBase::ValidateSignal(const Fence* fence, FenceAPISerial signalValue) const { DAWN_TRY(GetDevice()->ValidateIsAlive()); DAWN_TRY(GetDevice()->ValidateObject(this)); DAWN_TRY(GetDevice()->ValidateObject(fence));
diff --git a/src/dawn_native/Queue.h b/src/dawn_native/Queue.h index 2a0f7fc..cf1d384 100644 --- a/src/dawn_native/Queue.h +++ b/src/dawn_native/Queue.h
@@ -17,6 +17,7 @@ #include "dawn_native/Error.h" #include "dawn_native/Forward.h" +#include "dawn_native/IntegerTypes.h" #include "dawn_native/ObjectBase.h" #include "dawn_native/dawn_platform.h" @@ -65,7 +66,7 @@ const Extent3D& writeSize); MaybeError ValidateSubmit(uint32_t commandCount, CommandBufferBase* const* commands) const; - MaybeError ValidateSignal(const Fence* fence, uint64_t signalValue) const; + MaybeError ValidateSignal(const Fence* fence, FenceAPISerial signalValue) const; MaybeError ValidateCreateFence(const FenceDescriptor* descriptor) const; MaybeError ValidateWriteBuffer(const BufferBase* buffer, uint64_t bufferOffset,