/*
 * Copyright 2016 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
*/

#ifndef GrVkCopyManager_DEFINED
#define GrVkCopyManager_DEFINED

#include "GrTypes.h"
#include "GrVkDescriptorSetManager.h"
#include "vk/GrVkTypes.h"

class GrSurface;
class GrVkCopyPipeline;
class GrVkGpu;
class GrVkPipelineLayout;
class GrVkUniformBuffer;
class GrVkVertexBuffer;
struct SkIPoint;
struct SkIRect;

class GrVkCopyManager {
public:
    GrVkCopyManager();

    ~GrVkCopyManager();

    bool copySurfaceAsDraw(GrVkGpu* gpu,
                           GrSurface* dst, GrSurfaceOrigin dstOrigin,
                           GrSurface* src, GrSurfaceOrigin srcOrigin,
                           const SkIRect& srcRect, const SkIPoint& dstPoint,
                           bool canDiscardOutsideDstRect);

    void destroyResources(GrVkGpu* gpu);
    void abandonResources();

private:
    bool createCopyProgram(GrVkGpu* gpu);

    // Everything below is only created once and shared by all copy draws/pipelines
    VkShaderModule fVertShaderModule;
    VkShaderModule fFragShaderModule;
    VkPipelineShaderStageCreateInfo fShaderStageInfo[2];

    GrVkDescriptorSetManager::Handle fSamplerDSHandle;
    GrVkPipelineLayout* fPipelineLayout;

    sk_sp<GrVkVertexBuffer> fVertexBuffer;
    std::unique_ptr<GrVkUniformBuffer> fUniformBuffer;
};

#endif
