| Index: src/gpu/vk/GrVkPipelineState.cpp
 | 
| diff --git a/src/gpu/vk/GrVkPipelineState.cpp b/src/gpu/vk/GrVkPipelineState.cpp
 | 
| index dacd66b0e7e90fffad5ea7f55259b13d481e28a0..90a27e35a76a4b3e1f28310f7ec72da90ceb0955 100644
 | 
| --- a/src/gpu/vk/GrVkPipelineState.cpp
 | 
| +++ b/src/gpu/vk/GrVkPipelineState.cpp
 | 
| @@ -37,6 +37,8 @@ GrVkPipelineState::GrVkPipelineState(GrVkGpu* gpu,
 | 
|                                       const GrGLSLFragProcs& fragmentProcessors)
 | 
|      : fPipeline(pipeline)
 | 
|      , fPipelineLayout(layout)
 | 
| +    , fStartDS(SK_MaxS32)
 | 
| +    , fDSCount(0)
 | 
|      , fBuiltinUniformHandles(builtinUniformHandles)
 | 
|      , fGeometryProcessor(geometryProcessor)
 | 
|      , fXferProcessor(xferProcessor)
 | 
| @@ -46,7 +48,8 @@ GrVkPipelineState::GrVkPipelineState(GrVkGpu* gpu,
 | 
|      , fSamplerPoolManager(dsLayout[GrVkUniformHandler::kSamplerDescSet],
 | 
|                            VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, numSamplers, gpu)
 | 
|      , fUniformPoolManager(dsLayout[GrVkUniformHandler::kUniformBufferDescSet],
 | 
| -                          VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 2, gpu) {
 | 
| +                          VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
 | 
| +                          (vertexUniformSize || fragmentUniformSize) ? 2 : 0, gpu) {
 | 
|      fSamplers.setReserve(numSamplers);
 | 
|      fTextureViews.setReserve(numSamplers);
 | 
|      fTextures.setReserve(numSamplers);
 | 
| @@ -55,8 +58,10 @@ GrVkPipelineState::GrVkPipelineState(GrVkGpu* gpu,
 | 
|      fDescriptorSets[1] = VK_NULL_HANDLE;
 | 
|  
 | 
|      // Currently we are always binding a descriptor set for uniform buffers.
 | 
| -    fStartDS = GrVkUniformHandler::kUniformBufferDescSet;
 | 
| -    fDSCount = 1;
 | 
| +    if (vertexUniformSize || fragmentUniformSize) {
 | 
| +        fDSCount++;
 | 
| +        fStartDS = GrVkUniformHandler::kUniformBufferDescSet;
 | 
| +    }
 | 
|      if (numSamplers) {
 | 
|          fDSCount++;
 | 
|          fStartDS = SkTMin(fStartDS, (int)GrVkUniformHandler::kSamplerDescSet);
 | 
| @@ -189,13 +194,15 @@ void GrVkPipelineState::setData(GrVkGpu* gpu,
 | 
|      if (fNumSamplers) {
 | 
|          fSamplerPoolManager.getNewDescriptorSet(gpu,
 | 
|                                               &fDescriptorSets[GrVkUniformHandler::kSamplerDescSet]);
 | 
| +        this->writeSamplers(gpu, textureBindings);
 | 
|      }
 | 
| -    fUniformPoolManager.getNewDescriptorSet(gpu,
 | 
| -                                       &fDescriptorSets[GrVkUniformHandler::kUniformBufferDescSet]);
 | 
|  
 | 
| -    this->writeUniformBuffers(gpu);
 | 
|  
 | 
| -    this->writeSamplers(gpu, textureBindings);
 | 
| +    if (fVertexUniformBuffer.get() || fFragmentUniformBuffer.get()) {
 | 
| +        fUniformPoolManager.getNewDescriptorSet(gpu,
 | 
| +                                       &fDescriptorSets[GrVkUniformHandler::kUniformBufferDescSet]);
 | 
| +        this->writeUniformBuffers(gpu);
 | 
| +    }
 | 
|  }
 | 
|  
 | 
|  void GrVkPipelineState::writeUniformBuffers(const GrVkGpu* gpu) {
 | 
| @@ -218,7 +225,7 @@ void GrVkPipelineState::writeUniformBuffers(const GrVkGpu* gpu) {
 | 
|  
 | 
|          descriptorWrites[0].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
 | 
|          descriptorWrites[0].pNext = nullptr;
 | 
| -        descriptorWrites[0].dstSet = fDescriptorSets[1];
 | 
| +        descriptorWrites[0].dstSet = fDescriptorSets[GrVkUniformHandler::kUniformBufferDescSet];
 | 
|          descriptorWrites[0].dstBinding = GrVkUniformHandler::kVertexBinding;
 | 
|          descriptorWrites[0].dstArrayElement = 0;
 | 
|          descriptorWrites[0].descriptorCount = 1;
 | 
| @@ -249,7 +256,7 @@ void GrVkPipelineState::writeUniformBuffers(const GrVkGpu* gpu) {
 | 
|  
 | 
|          descriptorWrites[1].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
 | 
|          descriptorWrites[1].pNext = nullptr;
 | 
| -        descriptorWrites[1].dstSet = fDescriptorSets[1];
 | 
| +        descriptorWrites[1].dstSet = fDescriptorSets[GrVkUniformHandler::kUniformBufferDescSet];
 | 
|          descriptorWrites[1].dstBinding = GrVkUniformHandler::kFragBinding;;
 | 
|          descriptorWrites[1].dstArrayElement = 0;
 | 
|          descriptorWrites[1].descriptorCount = 1;
 | 
| 
 |