Skip to content

Commit

Permalink
Handle all failures for vkWaitForFences
Browse files Browse the repository at this point in the history
Bug: chromium:1019469
Change-Id: Ic32be65775cf6b7d3261d1d8b4076363d0e65874
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/251821
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
  • Loading branch information
uysalere authored and Skia Commit-Bot committed Oct 31, 2019
1 parent f5ad3f4 commit 283ec65
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 7 deletions.
5 changes: 2 additions & 3 deletions src/gpu/vk/GrVkCommandBuffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand Down
12 changes: 8 additions & 4 deletions src/gpu/vk/GrVkGpu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1753,18 +1753,22 @@ 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);
VK_CALL(DestroyBuffer(fDevice, buffer, nullptr));
}
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
Expand Down

0 comments on commit 283ec65

Please sign in to comment.