d3d: remove unnecessary event object in Queue{D3D11,D3D12}
Bug: chromium:335553337
Change-Id: I6bfd6d4d4d19913f35d4e7e2577d82139de5af0a
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/184624
Commit-Queue: Peng Huang <penghuang@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
diff --git a/src/dawn/native/d3d/QueueD3D.h b/src/dawn/native/d3d/QueueD3D.h
index 090a91d..ee9e7a4 100644
--- a/src/dawn/native/d3d/QueueD3D.h
+++ b/src/dawn/native/d3d/QueueD3D.h
@@ -45,11 +45,11 @@
virtual ResultOrError<Ref<SharedFence>> GetOrCreateSharedFence() = 0;
+ ResultOrError<bool> WaitForQueueSerial(ExecutionSerial serial, Nanoseconds timeout) override;
+
private:
virtual void SetEventOnCompletion(ExecutionSerial serial, HANDLE event) = 0;
- ResultOrError<bool> WaitForQueueSerial(ExecutionSerial serial, Nanoseconds timeout) override;
-
MutexProtected<SerialMap<ExecutionSerial, SystemEventReceiver>> mSystemEventReceivers;
};
diff --git a/src/dawn/native/d3d11/QueueD3D11.cpp b/src/dawn/native/d3d11/QueueD3D11.cpp
index 2689909..a368d92 100644
--- a/src/dawn/native/d3d11/QueueD3D11.cpp
+++ b/src/dawn/native/d3d11/QueueD3D11.cpp
@@ -27,6 +27,7 @@
#include "dawn/native/d3d11/QueueD3D11.h"
+#include <limits>
#include <utility>
#include "dawn/native/d3d/D3DError.h"
@@ -53,10 +54,6 @@
->CreateFence(0, D3D11_FENCE_FLAG_SHARED, IID_PPV_ARGS(&mFence)),
"D3D11: creating fence"));
- // Create the fence event.
- mFenceEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr);
- DAWN_ASSERT(mFenceEvent != nullptr);
-
DAWN_TRY_ASSIGN(mSharedFence, SharedFence::Create(ToBackend(GetDevice()),
"Internal shared DXGI fence", mFence));
@@ -84,11 +81,6 @@
}
void Queue::DestroyImpl() {
- if (mFenceEvent != nullptr) {
- ::CloseHandle(mFenceEvent);
- mFenceEvent = nullptr;
- }
-
// Release the shared fence here to prevent a ref-cycle with the device, but do not destroy the
// underlying native fence so that we can return a SharedFence on EndAccess after destruction.
mSharedFence = nullptr;
@@ -238,9 +230,9 @@
MaybeError Queue::WaitForIdleForDestruction() {
DAWN_TRY(NextSerial());
// Wait for all in-flight commands to finish executing
- DAWN_TRY(WaitForSerial(GetLastSubmittedCommandSerial()));
-
- return {};
+ DAWN_TRY_ASSIGN(std::ignore, WaitForQueueSerial(GetLastSubmittedCommandSerial(),
+ std::numeric_limits<Nanoseconds>::max()));
+ return CheckPassedSerials();
}
MaybeError Queue::NextSerial() {
@@ -257,18 +249,6 @@
return {};
}
-MaybeError Queue::WaitForSerial(ExecutionSerial serial) {
- DAWN_TRY(CheckPassedSerials());
- if (GetCompletedCommandSerial() >= serial) {
- return {};
- }
-
- DAWN_TRY(CheckHRESULT(mFence->SetEventOnCompletion(uint64_t(serial), mFenceEvent),
- "D3D11 set event on completion"));
- WaitForSingleObject(mFenceEvent, INFINITE);
- return CheckPassedSerials();
-}
-
void Queue::SetEventOnCompletion(ExecutionSerial serial, HANDLE event) {
mFence->SetEventOnCompletion(static_cast<uint64_t>(serial), event);
}
diff --git a/src/dawn/native/d3d11/QueueD3D11.h b/src/dawn/native/d3d11/QueueD3D11.h
index c20e72f..ef7a8c6 100644
--- a/src/dawn/native/d3d11/QueueD3D11.h
+++ b/src/dawn/native/d3d11/QueueD3D11.h
@@ -50,7 +50,6 @@
SubmitMode submitMode);
MaybeError SubmitPendingCommands() override;
MaybeError NextSerial();
- MaybeError WaitForSerial(ExecutionSerial serial);
// Separated from creation because it creates resources, which is not valid before the
// DeviceBase is fully created.
@@ -90,7 +89,6 @@
MaybeError CheckAndMapReadyBuffers(ExecutionSerial completedSerial);
ComPtr<ID3D11Fence> mFence;
- HANDLE mFenceEvent = nullptr;
Ref<SharedFence> mSharedFence;
MutexProtected<CommandRecordingContext, CommandRecordingContextGuard> mPendingCommands;
std::atomic<bool> mPendingCommandsNeedSubmit = false;
diff --git a/src/dawn/native/d3d12/QueueD3D12.cpp b/src/dawn/native/d3d12/QueueD3D12.cpp
index 39bd61b..a358f85 100644
--- a/src/dawn/native/d3d12/QueueD3D12.cpp
+++ b/src/dawn/native/d3d12/QueueD3D12.cpp
@@ -27,6 +27,7 @@
#include "dawn/native/d3d12/QueueD3D12.h"
+#include <limits>
#include <utility>
#include "dawn/common/Math.h"
@@ -73,9 +74,6 @@
D3D12_FENCE_FLAG_SHARED, IID_PPV_ARGS(&mFence)),
"D3D12 create fence"));
- mFenceEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr);
- DAWN_ASSERT(mFenceEvent != nullptr);
-
DAWN_TRY_ASSIGN(mSharedFence, SharedFence::Create(ToBackend(GetDevice()),
"Internal shared DXGI fence", mFence));
@@ -88,11 +86,6 @@
mPendingCommands.Release();
mCommandQueue.Reset();
- if (mFenceEvent != nullptr) {
- ::CloseHandle(mFenceEvent);
- mFenceEvent = nullptr;
- }
-
// Release the shared fence here to prevent a ref-cycle with the device, but do not destroy the
// underlying native fence so that we can return a SharedFence on EndAccess after destruction.
mSharedFence = nullptr;
@@ -167,11 +160,9 @@
if (GetCompletedCommandSerial() >= serial) {
return {};
}
- DAWN_TRY(CheckHRESULT(mFence->SetEventOnCompletion(uint64_t(serial), mFenceEvent),
- "D3D12 set event on completion"));
- WaitForSingleObject(mFenceEvent, INFINITE);
- DAWN_TRY(CheckPassedSerials());
- return {};
+ DAWN_TRY_ASSIGN(std::ignore,
+ WaitForQueueSerial(serial, std::numeric_limits<Nanoseconds>::max()));
+ return CheckPassedSerials();
}
bool Queue::HasPendingCommands() const {
diff --git a/src/dawn/native/d3d12/QueueD3D12.h b/src/dawn/native/d3d12/QueueD3D12.h
index 22a88fc..8a997fb 100644
--- a/src/dawn/native/d3d12/QueueD3D12.h
+++ b/src/dawn/native/d3d12/QueueD3D12.h
@@ -79,7 +79,6 @@
void SetLabelImpl() override;
ComPtr<ID3D12Fence> mFence;
- HANDLE mFenceEvent = nullptr;
Ref<SharedFence> mSharedFence;
CommandRecordingContext mPendingCommands;