| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "GrVkGpu.h" | 8 #include "GrVkGpu.h" |
| 9 | 9 |
| 10 #include "GrContextOptions.h" | 10 #include "GrContextOptions.h" |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 fHeaps[kCopyWriteBuffer_Heap].reset(new GrVkHeap(this, GrVkHeap::kSubAlloc_S
trategy, 16*1024*1024)); | 147 fHeaps[kCopyWriteBuffer_Heap].reset(new GrVkHeap(this, GrVkHeap::kSubAlloc_S
trategy, 16*1024*1024)); |
| 148 } | 148 } |
| 149 | 149 |
| 150 GrVkGpu::~GrVkGpu() { | 150 GrVkGpu::~GrVkGpu() { |
| 151 fCurrentCmdBuffer->end(this); | 151 fCurrentCmdBuffer->end(this); |
| 152 fCurrentCmdBuffer->unref(this); | 152 fCurrentCmdBuffer->unref(this); |
| 153 | 153 |
| 154 // wait for all commands to finish | 154 // wait for all commands to finish |
| 155 fResourceProvider.checkCommandBuffers(); | 155 fResourceProvider.checkCommandBuffers(); |
| 156 SkDEBUGCODE(VkResult res = ) VK_CALL(QueueWaitIdle(fQueue)); | 156 SkDEBUGCODE(VkResult res = ) VK_CALL(QueueWaitIdle(fQueue)); |
| 157 |
| 158 // On windows, sometimes calls to QueueWaitIdle return before actually signa
lling the fences |
| 159 // on the command buffers even though they have completed. This causes an as
sert to fire when |
| 160 // destroying the command buffers. Currently this ony seems to happen on win
dows, so we add a |
| 161 // sleep to make sure the fence singals. |
| 162 #ifdef SK_DEBUG |
| 163 #if defined(SK_BUILD_FOR_WIN) |
| 164 Sleep(10); // In milliseconds |
| 165 #else |
| 166 // Uncomment if above bug happens on non windows build. |
| 167 // sleep(1); // In seconds |
| 168 #endif |
| 169 #endif |
| 170 |
| 157 // VK_ERROR_DEVICE_LOST is acceptable when tearing down (see 4.2.4 in spec) | 171 // VK_ERROR_DEVICE_LOST is acceptable when tearing down (see 4.2.4 in spec) |
| 158 SkASSERT(VK_SUCCESS == res || VK_ERROR_DEVICE_LOST == res); | 172 SkASSERT(VK_SUCCESS == res || VK_ERROR_DEVICE_LOST == res); |
| 159 | 173 |
| 160 // must call this just before we destroy the VkDevice | 174 // must call this just before we destroy the VkDevice |
| 161 fResourceProvider.destroyResources(); | 175 fResourceProvider.destroyResources(); |
| 162 | 176 |
| 163 VK_CALL(DestroyCommandPool(fDevice, fCmdPool, nullptr)); | 177 VK_CALL(DestroyCommandPool(fDevice, fCmdPool, nullptr)); |
| 164 | 178 |
| 165 shaderc_compiler_release(fCompiler); | 179 shaderc_compiler_release(fCompiler); |
| 166 | 180 |
| (...skipping 1262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1429 GrVkRenderTarget* target, | 1443 GrVkRenderTarget* target, |
| 1430 const SkIRect& bounds) { | 1444 const SkIRect& bounds) { |
| 1431 // Currently it is fine for us to always pass in 1 for the clear count even
if no attachment | 1445 // Currently it is fine for us to always pass in 1 for the clear count even
if no attachment |
| 1432 // uses it. In the current state, we also only use the LOAD_OP_CLEAR for the
color attachment | 1446 // uses it. In the current state, we also only use the LOAD_OP_CLEAR for the
color attachment |
| 1433 // which is always at the first attachment. | 1447 // which is always at the first attachment. |
| 1434 fCurrentCmdBuffer->beginRenderPass(this, renderPass, 1, colorClear, *target,
bounds, true); | 1448 fCurrentCmdBuffer->beginRenderPass(this, renderPass, 1, colorClear, *target,
bounds, true); |
| 1435 fCurrentCmdBuffer->executeCommands(this, buffer); | 1449 fCurrentCmdBuffer->executeCommands(this, buffer); |
| 1436 fCurrentCmdBuffer->endRenderPass(this); | 1450 fCurrentCmdBuffer->endRenderPass(this); |
| 1437 } | 1451 } |
| 1438 | 1452 |
| OLD | NEW |