d3d11: only check debug layer error if the debug layer is enabled
With recent change https://dawn-review.googlesource.com/c/dawn/+/160180,
wgpu will fallback to create d3d11 device without debug layer, if
dxsdk is not installed on the system. So we should only check
errors if debug interface does exist with d3d11 device object.
Bug: dawn:1938
Change-Id: Iab91f727646d011a1ac46e89800ce98c02a59ad7
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/162020
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Peng Huang <penghuang@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/src/dawn/native/d3d11/DeviceD3D11.cpp b/src/dawn/native/d3d11/DeviceD3D11.cpp
index 01aa883..c26bb98 100644
--- a/src/dawn/native/d3d11/DeviceD3D11.cpp
+++ b/src/dawn/native/d3d11/DeviceD3D11.cpp
@@ -59,6 +59,7 @@
#include "dawn/native/d3d11/SharedTextureMemoryD3D11.h"
#include "dawn/native/d3d11/SwapChainD3D11.h"
#include "dawn/native/d3d11/TextureD3D11.h"
+#include "dawn/native/d3d11/UtilsD3D11.h"
#include "dawn/platform/DawnPlatform.h"
#include "dawn/platform/tracing/TraceEvent.h"
@@ -121,6 +122,8 @@
DAWN_TRY_ASSIGN(mD3d11Device, ToBackend(GetPhysicalDevice())->CreateD3D11Device());
DAWN_ASSERT(mD3d11Device != nullptr);
+ mIsDebugLayerEnabled = IsDebugLayerEnabled(mD3d11Device);
+
DAWN_TRY(DeviceBase::Initialize(Queue::Create(this, &descriptor->defaultQueue)));
// Get the ID3D11Device5 interface which is need for creating fences.
@@ -418,7 +421,7 @@
}
MaybeError Device::CheckDebugLayerAndGenerateErrors() {
- if (!GetPhysicalDevice()->GetInstance()->IsBackendValidationEnabled()) {
+ if (!mIsDebugLayerEnabled) {
return {};
}
diff --git a/src/dawn/native/d3d11/DeviceD3D11.h b/src/dawn/native/d3d11/DeviceD3D11.h
index d4b1f33..ea61d94 100644
--- a/src/dawn/native/d3d11/DeviceD3D11.h
+++ b/src/dawn/native/d3d11/DeviceD3D11.h
@@ -156,6 +156,7 @@
HANDLE mFenceEvent = nullptr;
ComPtr<ID3D11Device> mD3d11Device;
+ bool mIsDebugLayerEnabled = false;
ComPtr<ID3D11Device5> mD3d11Device5;
CommandRecordingContext mPendingCommands;
SerialQueue<ExecutionSerial, ComPtr<IUnknown>> mUsedComObjectRefs;
diff --git a/src/dawn/native/d3d11/PhysicalDeviceD3D11.cpp b/src/dawn/native/d3d11/PhysicalDeviceD3D11.cpp
index 9717a71..91468be 100644
--- a/src/dawn/native/d3d11/PhysicalDeviceD3D11.cpp
+++ b/src/dawn/native/d3d11/PhysicalDeviceD3D11.cpp
@@ -36,6 +36,7 @@
#include "dawn/native/d3d11/BackendD3D11.h"
#include "dawn/native/d3d11/DeviceD3D11.h"
#include "dawn/native/d3d11/PlatformFunctionsD3D11.h"
+#include "dawn/native/d3d11/UtilsD3D11.h"
namespace dawn::native::d3d11 {
namespace {
@@ -74,11 +75,6 @@
"D3D11 InfoQueue pushing storage filter");
}
-bool IsDebugLayerEnabled(const ComPtr<ID3D11Device>& d3d11Device) {
- ComPtr<ID3D11Debug> d3d11Debug;
- return SUCCEEDED(d3d11Device.As(&d3d11Debug));
-}
-
} // namespace
PhysicalDevice::PhysicalDevice(Backend* backend,
diff --git a/src/dawn/native/d3d11/UtilsD3D11.cpp b/src/dawn/native/d3d11/UtilsD3D11.cpp
index 512b793..a453b2d 100644
--- a/src/dawn/native/d3d11/UtilsD3D11.cpp
+++ b/src/dawn/native/d3d11/UtilsD3D11.cpp
@@ -76,4 +76,9 @@
object->SetPrivateData(WKPDID_D3DDebugObjectName, objectName.length(), objectName.c_str());
}
+bool IsDebugLayerEnabled(const ComPtr<ID3D11Device>& d3d11Device) {
+ ComPtr<ID3D11Debug> d3d11Debug;
+ return SUCCEEDED(d3d11Device.As(&d3d11Debug));
+}
+
} // namespace dawn::native::d3d11
diff --git a/src/dawn/native/d3d11/UtilsD3D11.h b/src/dawn/native/d3d11/UtilsD3D11.h
index fe2939e..07acfc5 100644
--- a/src/dawn/native/d3d11/UtilsD3D11.h
+++ b/src/dawn/native/d3d11/UtilsD3D11.h
@@ -40,6 +40,7 @@
D3D11_COMPARISON_FUNC ToD3D11ComparisonFunc(wgpu::CompareFunction func);
void SetDebugName(Device* device, ID3D11DeviceChild* object, const char* prefix, std::string label);
+bool IsDebugLayerEnabled(const ComPtr<ID3D11Device>& d3d11Device);
} // namespace dawn::native::d3d11