From 283ec65f632a2f8afa93f1e92ba60449c3956569 Mon Sep 17 00:00:00 2001 From: Emircan Uysaler Date: Thu, 31 Oct 2019 15:33:31 -0400 Subject: [PATCH] Handle all failures for vkWaitForFences Bug: chromium:1019469 Change-Id: Ic32be65775cf6b7d3261d1d8b4076363d0e65874 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251821 Reviewed-by: Greg Daniel Commit-Queue: Greg Daniel --- src/gpu/vk/GrVkCommandBuffer.cpp | 5 ++--- src/gpu/vk/GrVkGpu.cpp | 12 ++++++++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/gpu/vk/GrVkCommandBuffer.cpp b/src/gpu/vk/GrVkCommandBuffer.cpp index 5f95ccfe88e6b..b06fb0807f62c 100644 --- a/src/gpu/vk/GrVkCommandBuffer.cpp +++ b/src/gpu/vk/GrVkCommandBuffer.cpp @@ -580,11 +580,10 @@ void GrVkPrimaryCommandBuffer::submitToQueue( if (GrVkGpu::kForce_SyncQueue == sync) { err = GR_VK_CALL(gpu->vkInterface(), WaitForFences(gpu->device(), 1, &fSubmitFence, true, UINT64_MAX)); - if (VK_TIMEOUT == err) { - SkDebugf("Fence failed to signal: %d\n", err); + if (VK_SUCCESS != err) { + SkDebugf("Fence failed: %d\n", err); SK_ABORT("failing"); } - SkASSERT(!err); fFinishedProcs.reset(); diff --git a/src/gpu/vk/GrVkGpu.cpp b/src/gpu/vk/GrVkGpu.cpp index d9baea4d25666..44658aa421fb7 100644 --- a/src/gpu/vk/GrVkGpu.cpp +++ b/src/gpu/vk/GrVkGpu.cpp @@ -1753,7 +1753,7 @@ bool GrVkGpu::createVkImageForBackendSurface(VkFormat vkFormat, int w, int h, bo SkASSERT(!err); err = VK_CALL(WaitForFences(this->device(), 1, &fence, VK_TRUE, UINT64_MAX)); - if (VK_TIMEOUT == err) { + if (VK_SUCCESS != err) { GrVkImage::DestroyImageInfo(this, info); if (buffer != VK_NULL_HANDLE) { // workaround for an older NVidia driver crash GrVkMemory::FreeBufferMemory(this, GrVkBuffer::kCopyRead_Type, bufferAlloc); @@ -1761,10 +1761,14 @@ bool GrVkGpu::createVkImageForBackendSurface(VkFormat vkFormat, int w, int h, bo } VK_CALL(FreeCommandBuffers(fDevice, fCmdPool->vkCommandPool(), 1, &cmdBuffer)); VK_CALL(DestroyFence(this->device(), fence, nullptr)); - SkDebugf("Fence failed to signal: %d\n", err); - SK_ABORT("failing"); + if (VK_TIMEOUT == err) { + SkDebugf("Fence failed to signal: %d\n", err); + SK_ABORT("failing"); + } else { + SkDebugf("Fence failed: %d\n", err); + return false; + } } - SkASSERT(!err); // Clean up transfer resources if (buffer != VK_NULL_HANDLE) { // workaround for an older NVidia driver crash