| Index: src/gpu/vk/GrVkRenderPass.h | 
| diff --git a/src/gpu/vk/GrVkRenderPass.h b/src/gpu/vk/GrVkRenderPass.h | 
| index 082cccda776223d6240ef24b47a6be56b0579062..b4f4b2b2bbedad903e3fb49ba14576e5bf31cb32 100644 | 
| --- a/src/gpu/vk/GrVkRenderPass.h | 
| +++ b/src/gpu/vk/GrVkRenderPass.h | 
| @@ -21,25 +21,51 @@ class GrVkRenderTarget; | 
| class GrVkRenderPass : public GrVkResource { | 
| public: | 
| GrVkRenderPass() : INHERITED(), fRenderPass(VK_NULL_HANDLE) {} | 
| + | 
| +    struct LoadStoreOps { | 
| +        VkAttachmentLoadOp  fLoadOp; | 
| +        VkAttachmentStoreOp fStoreOp; | 
| + | 
| +        LoadStoreOps(VkAttachmentLoadOp loadOp, VkAttachmentStoreOp storeOp) | 
| +            : fLoadOp(loadOp) | 
| +            , fStoreOp(storeOp) {} | 
| + | 
| +        bool operator==(const LoadStoreOps& right) const { | 
| +            return fLoadOp == right.fLoadOp && fStoreOp == right.fStoreOp; | 
| +        } | 
| + | 
| +        bool operator!=(const LoadStoreOps& right) const { | 
| +            return !(*this == right); | 
| +        } | 
| +    }; | 
| + | 
| void initSimple(const GrVkGpu* gpu, const GrVkRenderTarget& target); | 
| +    void init(const GrVkGpu* gpu, | 
| +              const GrVkRenderTarget& target, | 
| +              const LoadStoreOps& colorOp, | 
| +              const LoadStoreOps& resolveOp, | 
| +              const LoadStoreOps& stencilOp); | 
| + | 
| +    void init(const GrVkGpu* gpu, | 
| +              const GrVkRenderPass& compatibleRenderPass, | 
| +              const LoadStoreOps& colorOp, | 
| +              const LoadStoreOps& resolveOp, | 
| +              const LoadStoreOps& stencilOp); | 
|  | 
| struct AttachmentsDescriptor { | 
| struct AttachmentDesc { | 
| VkFormat fFormat; | 
| int fSamples; | 
| -            VkAttachmentLoadOp fLoadOp; | 
| -            VkAttachmentStoreOp fStoreOp; | 
| +            LoadStoreOps fLoadStoreOps; | 
|  | 
| AttachmentDesc() | 
| : fFormat(VK_FORMAT_UNDEFINED) | 
| , fSamples(0) | 
| -                , fLoadOp(VK_ATTACHMENT_LOAD_OP_LOAD) | 
| -                , fStoreOp(VK_ATTACHMENT_STORE_OP_STORE) {} | 
| +                , fLoadStoreOps(VK_ATTACHMENT_LOAD_OP_LOAD, VK_ATTACHMENT_STORE_OP_STORE) {} | 
| bool operator==(const AttachmentDesc& right) const { | 
| return (fFormat == right.fFormat && | 
| fSamples == right.fSamples && | 
| -                        fLoadOp == right.fLoadOp && | 
| -                        fStoreOp == right.fStoreOp); | 
| +                        fLoadStoreOps == right.fLoadStoreOps); | 
| } | 
| bool operator!=(const AttachmentDesc& right) const { | 
| return !(*this == right); | 
| @@ -84,6 +110,10 @@ public: | 
| // basic RenderPasses that can be used when creating a VkFrameBuffer object. | 
| bool isCompatible(const GrVkRenderTarget& target) const; | 
|  | 
| +    bool equalLoadStoreOps(const LoadStoreOps& colorOps, | 
| +                           const LoadStoreOps& resolveOps, | 
| +                           const LoadStoreOps& stencilOps) const; | 
| + | 
| VkRenderPass vkRenderPass() const { return fRenderPass; } | 
|  | 
| void genKey(GrProcessorKeyBuilder* b) const; | 
| @@ -91,6 +121,11 @@ public: | 
| private: | 
| GrVkRenderPass(const GrVkRenderPass&); | 
|  | 
| +    void init(const GrVkGpu* gpu, | 
| +              const LoadStoreOps& colorOps, | 
| +              const LoadStoreOps& resolveOps, | 
| +              const LoadStoreOps& stencilOps); | 
| + | 
| void freeGPUData(const GrVkGpu* gpu) const override; | 
|  | 
| VkRenderPass          fRenderPass; | 
|  |