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,