• 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 "GrVkGpu.h"
15 
16 #include "GrTexturePriv.h"
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 GrVkTextureRenderTarget* CreateNewTextureRenderTarget(GrVkGpu*, SkBudgeted,
30                                                                  const GrSurfaceDesc&,
31                                                                  const GrVkImage::ImageDesc&);
32 
33     static sk_sp<GrVkTextureRenderTarget> MakeWrappedTextureRenderTarget(GrVkGpu*,
34                                                                          const GrSurfaceDesc&,
35                                                                          GrWrapOwnership,
36                                                                          const GrVkImageInfo*);
37 
38     bool updateForMipmap(GrVkGpu* gpu, const GrVkImageInfo& newInfo);
39 
40 protected:
onAbandon()41     void onAbandon() override {
42         GrVkRenderTarget::onAbandon();
43         GrVkTexture::onAbandon();
44     }
45 
onRelease()46     void onRelease() override {
47         GrVkRenderTarget::onRelease();
48         GrVkTexture::onRelease();
49     }
50 
51 private:
GrVkTextureRenderTarget(GrVkGpu * gpu,SkBudgeted budgeted,const GrSurfaceDesc & desc,const GrVkImageInfo & info,const GrVkImageView * texView,const GrVkImageInfo & msaaInfo,const GrVkImageView * colorAttachmentView,const GrVkImageView * resolveAttachmentView)52     GrVkTextureRenderTarget(GrVkGpu* gpu,
53                             SkBudgeted budgeted,
54                             const GrSurfaceDesc& desc,
55                             const GrVkImageInfo& info,
56                             const GrVkImageView* texView,
57                             const GrVkImageInfo& msaaInfo,
58                             const GrVkImageView* colorAttachmentView,
59                             const GrVkImageView* resolveAttachmentView)
60         : GrSurface(gpu, desc)
61         , GrVkImage(info, GrVkImage::kNot_Wrapped)
62         , GrVkTexture(gpu, desc, info, texView, GrVkImage::kNot_Wrapped)
63         , GrVkRenderTarget(gpu, desc, info, msaaInfo, colorAttachmentView,
64                            resolveAttachmentView, GrVkImage::kNot_Wrapped) {
65         this->registerWithCache(budgeted);
66     }
67 
GrVkTextureRenderTarget(GrVkGpu * gpu,SkBudgeted budgeted,const GrSurfaceDesc & desc,const GrVkImageInfo & info,const GrVkImageView * texView,const GrVkImageView * colorAttachmentView)68     GrVkTextureRenderTarget(GrVkGpu* gpu,
69                             SkBudgeted budgeted,
70                             const GrSurfaceDesc& desc,
71                             const GrVkImageInfo& info,
72                             const GrVkImageView* texView,
73                             const GrVkImageView* colorAttachmentView)
74         : GrSurface(gpu, desc)
75         , GrVkImage(info, GrVkImage::kNot_Wrapped)
76         , GrVkTexture(gpu, desc, info, texView, GrVkImage::kNot_Wrapped)
77         , GrVkRenderTarget(gpu, desc, info, colorAttachmentView, GrVkImage::kNot_Wrapped) {
78         this->registerWithCache(budgeted);
79     }
GrVkTextureRenderTarget(GrVkGpu * gpu,const GrSurfaceDesc & desc,const GrVkImageInfo & info,const GrVkImageView * texView,const GrVkImageInfo & msaaInfo,const GrVkImageView * colorAttachmentView,const GrVkImageView * resolveAttachmentView,GrVkImage::Wrapped wrapped)80     GrVkTextureRenderTarget(GrVkGpu* gpu,
81                             const GrSurfaceDesc& desc,
82                             const GrVkImageInfo& info,
83                             const GrVkImageView* texView,
84                             const GrVkImageInfo& msaaInfo,
85                             const GrVkImageView* colorAttachmentView,
86                             const GrVkImageView* resolveAttachmentView,
87                             GrVkImage::Wrapped wrapped)
88         : GrSurface(gpu, desc)
89         , GrVkImage(info, wrapped)
90         , GrVkTexture(gpu, desc, info, texView, wrapped)
91         , GrVkRenderTarget(gpu, desc, info, msaaInfo, colorAttachmentView,
92                            resolveAttachmentView, wrapped) {
93         this->registerWithCacheWrapped();
94     }
95 
GrVkTextureRenderTarget(GrVkGpu * gpu,const GrSurfaceDesc & desc,const GrVkImageInfo & info,const GrVkImageView * texView,const GrVkImageView * colorAttachmentView,GrVkImage::Wrapped wrapped)96     GrVkTextureRenderTarget(GrVkGpu* gpu,
97                             const GrSurfaceDesc& desc,
98                             const GrVkImageInfo& info,
99                             const GrVkImageView* texView,
100                             const GrVkImageView* colorAttachmentView,
101                             GrVkImage::Wrapped wrapped)
102         : GrSurface(gpu, desc)
103         , GrVkImage(info, wrapped)
104         , GrVkTexture(gpu, desc, info, texView, wrapped)
105         , GrVkRenderTarget(gpu, desc, info, colorAttachmentView, wrapped) {
106         this->registerWithCacheWrapped();
107     }
108 
109     static GrVkTextureRenderTarget* Create(GrVkGpu*,
110                                            const GrSurfaceDesc&,
111                                            const GrVkImageInfo&,
112                                            SkBudgeted budgeted,
113                                            GrVkImage::Wrapped wrapped);
114 
115     // GrGLRenderTarget accounts for the texture's memory and any MSAA renderbuffer's memory.
onGpuMemorySize()116     size_t onGpuMemorySize() const override {
117         // The plus 1 is to account for the resolve texture.
118         return GrSurface::ComputeSize(fDesc, fDesc.fSampleCnt+1,      // TODO: this still correct?
119                                       this->texturePriv().hasMipMaps());
120     }
121 };
122 
123 #endif
124