Index: src/gpu/vk/GrVkGpuCommandBuffer.cpp |
diff --git a/src/gpu/vk/GrVkGpuCommandBuffer.cpp b/src/gpu/vk/GrVkGpuCommandBuffer.cpp |
index dc553e03772329aa4f03e9d75970a4acfd34ef4c..52fb55bf064618124268fcc5d566dc1ce13a729b 100644 |
--- a/src/gpu/vk/GrVkGpuCommandBuffer.cpp |
+++ b/src/gpu/vk/GrVkGpuCommandBuffer.cpp |
@@ -130,6 +130,38 @@ void GrVkGpuCommandBuffer::onSubmit(const SkIRect& bounds) { |
fRenderTarget, bounds); |
} |
+void GrVkGpuCommandBuffer::discard(GrRenderTarget* target) { |
+ if (fIsEmpty) { |
+ // We will change the render pass to do a clear load instead |
+ GrVkRenderPass::LoadStoreOps vkColorOps(VK_ATTACHMENT_LOAD_OP_DONT_CARE, |
+ VK_ATTACHMENT_STORE_OP_STORE); |
+ GrVkRenderPass::LoadStoreOps vkStencilOps(VK_ATTACHMENT_LOAD_OP_LOAD, |
jvanverth1
2016/06/29 16:00:30
Shouldn't this and the resolve be LOAD_OP_DONT_CAR
egdaniel
2016/06/29 16:11:30
In general, when we call discard on a RT do we mea
bsalomon
2016/06/29 17:45:24
both, I guess? The current discard stuff is not us
|
+ VK_ATTACHMENT_STORE_OP_STORE); |
+ GrVkRenderPass::LoadStoreOps vkResolveOps(VK_ATTACHMENT_LOAD_OP_LOAD, |
+ VK_ATTACHMENT_STORE_OP_STORE); |
+ |
+ const GrVkRenderPass* oldRP = fRenderPass; |
+ |
+ GrVkRenderTarget* vkRT = static_cast<GrVkRenderTarget*>(target); |
+ const GrVkResourceProvider::CompatibleRPHandle& rpHandle = |
+ vkRT->compatibleRenderPassHandle(); |
+ if (rpHandle.isValid()) { |
+ fRenderPass = fGpu->resourceProvider().findRenderPass(rpHandle, |
+ vkColorOps, |
+ vkResolveOps, |
+ vkStencilOps); |
+ } else { |
+ fRenderPass = fGpu->resourceProvider().findRenderPass(*vkRT, |
+ vkColorOps, |
+ vkResolveOps, |
+ vkStencilOps); |
+ } |
+ |
+ SkASSERT(fRenderPass->isCompatible(*oldRP)); |
+ oldRP->unref(fGpu); |
+ } |
+} |
+ |
void GrVkGpuCommandBuffer::onClearStencilClip(GrRenderTarget* target, |
const SkIRect& rect, |
bool insideClip) { |