diff --git a/src/gpu/vk/GrVkGpu.cpp b/src/gpu/vk/GrVkGpu.cpp
index e0aa2d2..496f38c 100644
--- a/src/gpu/vk/GrVkGpu.cpp
+++ b/src/gpu/vk/GrVkGpu.cpp
@@ -1293,26 +1293,26 @@
 
     return true;
 }
-bool GrVkGpu::prepareDrawState(const GrPipeline& pipeline,
-                               const GrPrimitiveProcessor& primProc,
-                               GrPrimitiveType primitiveType,
-                               const GrVkRenderPass& renderPass,
-                               GrVkPipelineState** pipelineState) {
-    *pipelineState = fResourceProvider.findOrCreateCompatiblePipelineState(pipeline,
-                                                                           primProc,
-                                                                           primitiveType,
-                                                                           renderPass);
+sk_sp<GrVkPipelineState> GrVkGpu::prepareDrawState(const GrPipeline& pipeline,
+                                                   const GrPrimitiveProcessor& primProc,
+                                                   GrPrimitiveType primitiveType,
+                                                   const GrVkRenderPass& renderPass) {
+    sk_sp<GrVkPipelineState> pipelineState =
+        fResourceProvider.findOrCreateCompatiblePipelineState(pipeline,
+                                                              primProc,
+                                                              primitiveType,
+                                                              renderPass);
     if (!pipelineState) {
-        return false;
+        return pipelineState;
     }
 
-    (*pipelineState)->setData(this, primProc, pipeline);
+    pipelineState->setData(this, primProc, pipeline);
 
-    (*pipelineState)->bind(this, fCurrentCmdBuffer);
+    pipelineState->bind(this, fCurrentCmdBuffer);
 
     GrVkPipeline::SetDynamicState(this, fCurrentCmdBuffer, pipeline);
 
-    return true;
+    return pipelineState;
 }
 
 void GrVkGpu::onDraw(const GrPipeline& pipeline,
@@ -1329,9 +1329,12 @@
 
     fCurrentCmdBuffer->beginRenderPass(this, renderPass, *vkRT);
 
-    GrVkPipelineState* pipelineState = nullptr;
     GrPrimitiveType primitiveType = meshes[0].primitiveType();
-    if (!this->prepareDrawState(pipeline, primProc, primitiveType, *renderPass, &pipelineState)) {
+    sk_sp<GrVkPipelineState> pipelineState = this->prepareDrawState(pipeline,
+                                                                    primProc,
+                                                                    primitiveType,
+                                                                    *renderPass);
+    if (!pipelineState) {
         return;
     }
 
@@ -1386,11 +1389,13 @@
                 // pipelineState:setData but this will allow for quicker freeing of resources if the
                 // pipelineState sits in a cache for a while.
                 pipelineState->freeTempResources(this);
-                pipelineState->unref();
                 SkDEBUGCODE(pipelineState = nullptr);
                 primitiveType = nonIdxMesh->primitiveType();
-                if (!this->prepareDrawState(pipeline, primProc, primitiveType, *renderPass,
-                                            &pipelineState)) {
+                pipelineState = this->prepareDrawState(pipeline,
+                                                       primProc,
+                                                       primitiveType,
+                                                       *renderPass);
+                if (!pipelineState) {
                     return;
                 }
             }
@@ -1422,7 +1427,6 @@
     // pipelineState:setData but this will allow for quicker freeing of resources if the
     // pipelineState sits in a cache for a while.
     pipelineState->freeTempResources(this);
-    pipelineState->unref();
 
 #if SWAP_PER_DRAW
     glFlush();
