• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
9 #ifndef GrVkTextureRenderTarget_DEFINED
10 #define GrVkTextureRenderTarget_DEFINED
11 
12 #include "GrVkTexture.h"
13 #include "GrVkRenderTarget.h"
14 #include "vk/GrVkTypes.h"
15 
16 class GrVkGpu;
17 
18 #ifdef SK_BUILD_FOR_WIN
19 // Windows gives bogus warnings about inheriting asTexture/asRenderTarget via dominance.
20 #pragma warning(push)
21 #pragma warning(disable: 4250)
22 #endif
23 
24 class GrVkImageView;
25 struct GrVkImageInfo;
26 
27 class GrVkTextureRenderTarget: public GrVkTexture, public GrVkRenderTarget {
28 public:
29     static sk_sp<GrVkTextureRenderTarget> MakeNewTextureRenderTarget(GrVkGpu*, SkBudgeted,
30                                                                      const GrSurfaceDesc&,
31                                                                      const GrVkImage::ImageDesc&,
32                                                                      GrMipMapsStatus);
33 
34     static sk_sp<GrVkTextureRenderTarget> MakeWrappedTextureRenderTarget(GrVkGpu*,
35                                                                          const GrSurfaceDesc&,
36                                                                          GrWrapOwnership,
37                                                                          GrWrapCacheable,
38                                                                          const GrVkImageInfo&,
39                                                                          sk_sp<GrVkImageLayout>);
40 
backendFormat()41     GrBackendFormat backendFormat() const override { return this->getBackendFormat(); }
42 
43 protected:
onAbandon()44     void onAbandon() override {
45         // In order to correctly handle calling texture idle procs, GrVkTexture must go first.
46         GrVkTexture::onAbandon();
47         GrVkRenderTarget::onAbandon();
48     }
49 
onRelease()50     void onRelease() override {
51         // In order to correctly handle calling texture idle procs, GrVkTexture must go first.
52         GrVkTexture::onRelease();
53         GrVkRenderTarget::onRelease();
54     }
55 
56 private:
57     // MSAA, not-wrapped
58     GrVkTextureRenderTarget(GrVkGpu* gpu,
59                             SkBudgeted budgeted,
60                             const GrSurfaceDesc& desc,
61                             const GrVkImageInfo& info,
62                             sk_sp<GrVkImageLayout> layout,
63                             const GrVkImageView* texView,
64                             const GrVkImageInfo& msaaInfo,
65                             sk_sp<GrVkImageLayout> msaaLayout,
66                             const GrVkImageView* colorAttachmentView,
67                             const GrVkImageView* resolveAttachmentView,
68                             GrMipMapsStatus);
69 
70     // non-MSAA, not-wrapped
71     GrVkTextureRenderTarget(GrVkGpu* gpu,
72                             SkBudgeted budgeted,
73                             const GrSurfaceDesc& desc,
74                             const GrVkImageInfo& info,
75                             sk_sp<GrVkImageLayout> layout,
76                             const GrVkImageView* texView,
77                             const GrVkImageView* colorAttachmentView,
78                             GrMipMapsStatus);
79 
80     // MSAA, wrapped
81     GrVkTextureRenderTarget(GrVkGpu* gpu,
82                             const GrSurfaceDesc& desc,
83                             const GrVkImageInfo& info,
84                             sk_sp<GrVkImageLayout> layout,
85                             const GrVkImageView* texView,
86                             const GrVkImageInfo& msaaInfo,
87                             sk_sp<GrVkImageLayout> msaaLayout,
88                             const GrVkImageView* colorAttachmentView,
89                             const GrVkImageView* resolveAttachmentView,
90                             GrMipMapsStatus,
91                             GrBackendObjectOwnership,
92                             GrWrapCacheable);
93 
94     // non-MSAA, wrapped
95     GrVkTextureRenderTarget(GrVkGpu* gpu,
96                             const GrSurfaceDesc& desc,
97                             const GrVkImageInfo& info,
98                             sk_sp<GrVkImageLayout> layout,
99                             const GrVkImageView* texView,
100                             const GrVkImageView* colorAttachmentView,
101                             GrMipMapsStatus,
102                             GrBackendObjectOwnership,
103                             GrWrapCacheable);
104 
105     // GrGLRenderTarget accounts for the texture's memory and any MSAA renderbuffer's memory.
106     size_t onGpuMemorySize() const override;
107 };
108 
109 #endif
110