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