| Index: src/gpu/vk/GrVkResourceProvider.cpp
 | 
| diff --git a/src/gpu/vk/GrVkResourceProvider.cpp b/src/gpu/vk/GrVkResourceProvider.cpp
 | 
| index 3e0dfa028d4c01b45aa23ae1a30f971324b7ffa1..8bdb946cb8c1b4194486f2865436deed139a5cc0 100644
 | 
| --- a/src/gpu/vk/GrVkResourceProvider.cpp
 | 
| +++ b/src/gpu/vk/GrVkResourceProvider.cpp
 | 
| @@ -21,11 +21,13 @@ SkRandom GrVkResource::fRandom;
 | 
|  
 | 
|  GrVkResourceProvider::GrVkResourceProvider(GrVkGpu* gpu) : fGpu(gpu)
 | 
|                                                           , fPipelineCache(VK_NULL_HANDLE) {
 | 
| +    fPipelineStateCache = new PipelineStateCache(gpu);
 | 
|  }
 | 
|  
 | 
|  GrVkResourceProvider::~GrVkResourceProvider() {
 | 
|      SkASSERT(0 == fSimpleRenderPasses.count());
 | 
|      SkASSERT(VK_NULL_HANDLE == fPipelineCache);
 | 
| +    delete fPipelineStateCache;
 | 
|  }
 | 
|  
 | 
|  void GrVkResourceProvider::init() {
 | 
| @@ -94,6 +96,14 @@ GrVkSampler* GrVkResourceProvider::findOrCreateCompatibleSampler(const GrTexture
 | 
|      return sampler;
 | 
|  }
 | 
|  
 | 
| +GrVkPipelineState* GrVkResourceProvider::findOrCreateCompatiblePipelineState(
 | 
| +                                                                 const GrPipeline& pipeline,
 | 
| +                                                                 const GrPrimitiveProcessor& proc,
 | 
| +                                                                 GrPrimitiveType primitiveType,
 | 
| +                                                                 const GrVkRenderPass& renderPass) {
 | 
| +    return fPipelineStateCache->refPipelineState(pipeline, proc, primitiveType, renderPass);
 | 
| +}
 | 
| +
 | 
|  GrVkCommandBuffer* GrVkResourceProvider::createCommandBuffer() {
 | 
|      GrVkCommandBuffer* cmdBuffer = GrVkCommandBuffer::Create(fGpu, fGpu->cmdPool());
 | 
|      fActiveCommandBuffers.push_back(cmdBuffer);
 | 
| @@ -132,6 +142,8 @@ void GrVkResourceProvider::destroyResources() {
 | 
|      }
 | 
|      fSamplers.reset();
 | 
|  
 | 
| +    fPipelineStateCache->release();
 | 
| +
 | 
|  #ifdef SK_TRACE_VK_RESOURCES
 | 
|      SkASSERT(0 == GrVkResource::fTrace.count());
 | 
|  #endif
 | 
| @@ -160,6 +172,8 @@ void GrVkResourceProvider::abandonResources() {
 | 
|      }
 | 
|      fSamplers.reset();
 | 
|  
 | 
| +    fPipelineStateCache->abandon();
 | 
| +
 | 
|  #ifdef SK_TRACE_VK_RESOURCES
 | 
|      SkASSERT(0 == GrVkResource::fTrace.count());
 | 
|  #endif
 | 
| 
 |