aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/vk/GrVkGpu.cpp
diff options
context:
space:
mode:
authorGravatar Robert Phillips <robertphillips@google.com>2017-08-08 18:00:03 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-08-08 22:32:36 +0000
commit952144753dc31d9d935683123cae43fca483bade (patch)
tree96c33ad4c1face6aa9f3e55214f7f3518987c013 /src/gpu/vk/GrVkGpu.cpp
parent8d8b016f5241dd04c48229200ebd44a9a36a2f45 (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.cpp28
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]);
}