1/*
2* Copyright 2015 Google Inc.
3*
4* Use of this source code is governed by a BSD-style license that can be
5* found in the LICENSE file.
6*/
7
8#ifndef GrVkStencil_DEFINED
9#define GrVkStencil_DEFINED
10
11#include "GrStencilAttachment.h"
12#include "GrVkImage.h"
13#include "vulkan/vulkan.h"
14
15class GrVkImageView;
16class GrVkGpu;
17
18class GrVkStencilAttachment : public GrStencilAttachment {
19public:
20    struct Format {
21        VkFormat  fInternalFormat;
22        int  fStencilBits;
23        int  fTotalBits;
24        bool fPacked;
25    };
26
27    static GrVkStencilAttachment* Create(GrVkGpu* gpu, GrGpuResource::LifeCycle lifeCycle,
28                                         int width, int height,
29                                         int sampleCnt, const Format& format);
30
31    ~GrVkStencilAttachment() override;
32
33    const GrVkImage::Resource* imageResource() const { return fImageResource;  }
34    const GrVkImageView* stencilView() const { return fStencilView; }
35
36    VkFormat vkFormat() const { return fFormat.fInternalFormat; }
37
38protected:
39    void onRelease() override;
40    void onAbandon() override;
41
42private:
43    size_t onGpuMemorySize() const override;
44
45    GrVkStencilAttachment(GrVkGpu* gpu,
46                          GrGpuResource::LifeCycle lifeCycle,
47                          const Format& format,
48                          const GrVkImage::ImageDesc&,
49                          const GrVkImage::Resource*,
50                          const GrVkImageView* stencilView);
51
52    GrVkGpu* getVkGpu() const;
53
54    Format fFormat;
55
56    const GrVkImage::Resource* fImageResource;
57    const GrVkImageView*       fStencilView;
58
59    typedef GrStencilAttachment INHERITED;
60};
61
62#endif
63