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 
15 class GrVkImageView;
16 class GrVkGpu;
17 
18 class GrVkStencilAttachment : public GrStencilAttachment {
19 public:
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 
imageResource()33     const GrVkImage::Resource* imageResource() const { return fImageResource;  }
stencilView()34     const GrVkImageView* stencilView() const { return fStencilView; }
35 
vkFormat()36     VkFormat vkFormat() const { return fFormat.fInternalFormat; }
37 
38 protected:
39     void onRelease() override;
40     void onAbandon() override;
41 
42 private:
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