mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-07-12 16:15:55 +00:00
D3D12: Check for device lost after ID3D12Fence::GetCompletedValue
The D3D12 docs say it returns UINT64_MAX if the device was removed Fixed: dawn:1051 Change-Id: Ide3731e9389bdb4a5a81c9f65aa9bcad1b049446 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/60961 Reviewed-by: Bryan Bernhart <bryan.bernhart@intel.com> Reviewed-by: Austin Eng <enga@chromium.org> Commit-Queue: Austin Eng <enga@chromium.org>
This commit is contained in:
parent
213ac89edf
commit
ae840d5e61
@ -288,13 +288,21 @@ namespace dawn_native { namespace d3d12 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ResultOrError<ExecutionSerial> Device::CheckAndUpdateCompletedSerials() {
|
ResultOrError<ExecutionSerial> Device::CheckAndUpdateCompletedSerials() {
|
||||||
ExecutionSerial completeSerial = ExecutionSerial(mFence->GetCompletedValue());
|
ExecutionSerial completedSerial = ExecutionSerial(mFence->GetCompletedValue());
|
||||||
|
if (DAWN_UNLIKELY(completedSerial == ExecutionSerial(UINT64_MAX))) {
|
||||||
|
// GetCompletedValue returns UINT64_MAX if the device was removed.
|
||||||
|
// Try to query the failure reason.
|
||||||
|
DAWN_TRY(CheckHRESULT(mD3d12Device->GetDeviceRemovedReason(),
|
||||||
|
"ID3D12Device::GetDeviceRemovedReason"));
|
||||||
|
// Otherwise, return a generic device lost error.
|
||||||
|
return DAWN_DEVICE_LOST_ERROR("Device lost");
|
||||||
|
}
|
||||||
|
|
||||||
if (completeSerial <= GetCompletedCommandSerial()) {
|
if (completedSerial <= GetCompletedCommandSerial()) {
|
||||||
return ExecutionSerial(0);
|
return ExecutionSerial(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return completeSerial;
|
return completedSerial;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Device::ReferenceUntilUnused(ComPtr<IUnknown> object) {
|
void Device::ReferenceUntilUnused(ComPtr<IUnknown> object) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user