diff options
author | Robert Phillips <robertphillips@google.com> | 2017-08-08 18:00:03 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-08-08 22:32:36 +0000 |
commit | 952144753dc31d9d935683123cae43fca483bade (patch) | |
tree | 96c33ad4c1face6aa9f3e55214f7f3518987c013 /src/gpu/vk/GrVkGpu.cpp | |
parent | 8d8b016f5241dd04c48229200ebd44a9a36a2f45 (diff) |
Add explicit clear of stencil buffer before opLists that use them
Change-Id: I9e2468e1331c6593dbc6da3ad510f08d1c589e8d
Reviewed-on: https://skia-review.googlesource.com/32041
Commit-Queue: Stan Iliev <stani@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src/gpu/vk/GrVkGpu.cpp')
-rw-r--r-- | src/gpu/vk/GrVkGpu.cpp | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/src/gpu/vk/GrVkGpu.cpp b/src/gpu/vk/GrVkGpu.cpp index 6da40e510b..f15258281a 100644 --- a/src/gpu/vk/GrVkGpu.cpp +++ b/src/gpu/vk/GrVkGpu.cpp @@ -258,9 +258,10 @@ void GrVkGpu::disconnect(DisconnectType type) { /////////////////////////////////////////////////////////////////////////////// GrGpuCommandBuffer* GrVkGpu::createCommandBuffer( + GrRenderTarget* rt, GrSurfaceOrigin origin, const GrGpuCommandBuffer::LoadAndStoreInfo& colorInfo, - const GrGpuCommandBuffer::LoadAndStoreInfo& stencilInfo) { - return new GrVkGpuCommandBuffer(this, colorInfo, stencilInfo); + const GrGpuCommandBuffer::StencilLoadAndStoreInfo& stencilInfo) { + return new GrVkGpuCommandBuffer(this, rt, origin, colorInfo, stencilInfo); } void GrVkGpu::submitCommandBuffer(SyncQueue sync) { @@ -1474,8 +1475,8 @@ void GrVkGpu::onFinishFlush(bool insertedSemaphore) { this->submitCommandBuffer(kSkip_SyncQueue); } -void GrVkGpu::clearStencil(GrRenderTarget* target) { - if (nullptr == target) { +void GrVkGpu::clearStencil(GrRenderTarget* target, int clearValue) { + if (!target) { return; } GrStencilAttachment* stencil = target->renderTargetPriv().getStencilAttachment(); @@ -1483,7 +1484,8 @@ void GrVkGpu::clearStencil(GrRenderTarget* target) { VkClearDepthStencilValue vkStencilColor; - memset(&vkStencilColor, 0, sizeof(VkClearDepthStencilValue)); + vkStencilColor.depth = 0.0f; + vkStencilColor.stencil = clearValue; vkStencil->setImageLayout(this, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, @@ -1971,6 +1973,7 @@ void adjust_bounds_to_granularity(SkIRect* dstBounds, const SkIRect& srcBounds, void GrVkGpu::submitSecondaryCommandBuffer(const SkTArray<GrVkSecondaryCommandBuffer*>& buffers, const GrVkRenderPass* renderPass, const VkClearValue* colorClear, + const VkClearValue* stencilClear, GrVkRenderTarget* target, const SkIRect& bounds) { const SkIRect* pBounds = &bounds; @@ -1993,7 +1996,20 @@ void GrVkGpu::submitSecondaryCommandBuffer(const SkTArray<GrVkSecondaryCommandBu pBounds = &adjustedBounds; } - fCurrentCmdBuffer->beginRenderPass(this, renderPass, colorClear, *target, *pBounds, true); +#ifdef SK_DEBUG + uint32_t index; + bool result = renderPass->colorAttachmentIndex(&index); + SkASSERT(result && 0 == index); + result = renderPass->stencilAttachmentIndex(&index); + if (result) { + SkASSERT(1 == index); + } +#endif + VkClearValue clears[2]; + clears[0].color = colorClear->color; + clears[1].depthStencil = stencilClear->depthStencil; + + fCurrentCmdBuffer->beginRenderPass(this, renderPass, clears, *target, *pBounds, true); for (int i = 0; i < buffers.count(); ++i) { fCurrentCmdBuffer->executeCommands(this, buffers[i]); } |