diff --git a/src/gpu/vk/GrVkCopyManager.cpp b/src/gpu/vk/GrVkCopyManager.cpp
index f91b04e..fd91507 100644
--- a/src/gpu/vk/GrVkCopyManager.cpp
+++ b/src/gpu/vk/GrVkCopyManager.cpp
@@ -156,6 +156,11 @@
         return false;
     }
 
+    if (gpu->vkCaps().newCBOnPipelineChange()) {
+        // We bind a new pipeline here for the copy so we must start a new command buffer.
+        gpu->finishFlush(0, nullptr);
+    }
+
     GrVkRenderTarget* rt = static_cast<GrVkRenderTarget*>(dst->asRenderTarget());
     if (!rt) {
         return false;
@@ -290,6 +295,8 @@
         gpu->onResolveRenderTarget(texRT);
     }
 
+    GrVkPrimaryCommandBuffer* cmdBuffer = gpu->currentCommandBuffer();
+
     // TODO: Make tighter bounds and then adjust bounds for origin and granularity if we see
     //       any perf issues with using the whole bounds
     SkIRect bounds = SkIRect::MakeWH(rt->width(), rt->height());
@@ -348,17 +355,9 @@
 
     SkASSERT(renderPass->isCompatible(*rt->simpleRenderPass()));
 
-    GrVkPrimaryCommandBuffer* cmdBuffer = gpu->currentCommandBuffer();
-    cmdBuffer->beginRenderPass(gpu, renderPass, nullptr, *rt, bounds, true);
 
-    GrVkSecondaryCommandBuffer* secondary =
-                                       gpu->resourceProvider().findOrCreateSecondaryCommandBuffer();
-    if (!secondary) {
-        return false;
-    }
-    secondary->begin(gpu, rt->framebuffer(), renderPass);
-
-    secondary->bindPipeline(gpu, pipeline);
+    cmdBuffer->beginRenderPass(gpu, renderPass, nullptr, *rt, bounds, false);
+    cmdBuffer->bindPipeline(gpu, pipeline);
 
     // Uniform DescriptorSet, Sampler DescriptorSet, and vertex shader uniformBuffer
     SkSTArray<3, const GrVkRecycledResource*> descriptorRecycledResources;
@@ -372,7 +371,7 @@
     descriptorResources.push_back(srcTex->textureView());
     descriptorResources.push_back(srcTex->resource());
 
-    secondary->bindDescriptorSets(gpu,
+    cmdBuffer->bindDescriptorSets(gpu,
                                   descriptorRecycledResources,
                                   descriptorResources,
                                   fPipelineLayout,
@@ -391,7 +390,7 @@
     viewport.height = SkIntToScalar(rt->height());
     viewport.minDepth = 0.0f;
     viewport.maxDepth = 1.0f;
-    secondary->setViewport(gpu, 0, 1, &viewport);
+    cmdBuffer->setViewport(gpu, 0, 1, &viewport);
 
     // We assume the scissor is not enabled so just set it to the whole RT
     VkRect2D scissor;
@@ -399,14 +398,11 @@
     scissor.extent.height = rt->height();
     scissor.offset.x = 0;
     scissor.offset.y = 0;
-    secondary->setScissor(gpu, 0, 1, &scissor);
+    cmdBuffer->setScissor(gpu, 0, 1, &scissor);
 
-    secondary->bindInputBuffer(gpu, 0, fVertexBuffer.get());
-    secondary->draw(gpu, 4, 1, 0, 0);
-    secondary->end(gpu);
-    cmdBuffer->executeCommands(gpu, secondary);
+    cmdBuffer->bindInputBuffer(gpu, 0, fVertexBuffer.get());
+    cmdBuffer->draw(gpu, 4, 1, 0, 0);
     cmdBuffer->endRenderPass(gpu);
-    secondary->unref(gpu);
 
     // Release all temp resources which should now be reffed by the cmd buffer
     pipeline->unref(gpu);
