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 #ifdef SK_BUILD_FOR_WIN 17 // Windows gives bogus warnings about inheriting asTexture/asRenderTarget via dominance. 18 #pragma warning(push) 19 #pragma warning(disable: 4250) 20 #endif 21 22 class GrVkImageView; 23 24 class GrVkTextureRenderTarget: public GrVkTexture, public GrVkRenderTarget { 25 public: 26 static GrVkTextureRenderTarget* CreateNewTextureRenderTarget(GrVkGpu*, const GrSurfaceDesc&, 27 GrGpuResource::LifeCycle, 28 const GrVkImage::ImageDesc&); 29 30 static GrVkTextureRenderTarget* CreateWrappedTextureRenderTarget(GrVkGpu*, 31 const GrSurfaceDesc&, 32 GrGpuResource::LifeCycle, 33 VkFormat, 34 GrVkImage::Resource*); 35 36 protected: onAbandon()37 void onAbandon() override { 38 GrVkRenderTarget::onAbandon(); 39 GrVkTexture::onAbandon(); 40 } 41 onRelease()42 void onRelease() override { 43 GrVkRenderTarget::onRelease(); 44 GrVkTexture::onRelease(); 45 } 46 47 private: GrVkTextureRenderTarget(GrVkGpu * gpu,const GrSurfaceDesc & desc,GrGpuResource::LifeCycle lifeCycle,const GrVkImage::Resource * imageResource,const GrVkImageView * texView,const GrVkImage::Resource * msaaResource,const GrVkImageView * colorAttachmentView,const GrVkImageView * resolveAttachmentView)48 GrVkTextureRenderTarget(GrVkGpu* gpu, 49 const GrSurfaceDesc& desc, 50 GrGpuResource::LifeCycle lifeCycle, 51 const GrVkImage::Resource* imageResource, 52 const GrVkImageView* texView, 53 const GrVkImage::Resource* msaaResource, 54 const GrVkImageView* colorAttachmentView, 55 const GrVkImageView* resolveAttachmentView) 56 : GrSurface(gpu, lifeCycle, desc) 57 , GrVkImage(imageResource) 58 , GrVkTexture(gpu, desc, lifeCycle, imageResource, texView, GrVkTexture::kDerived) 59 , GrVkRenderTarget(gpu, desc, lifeCycle, imageResource, msaaResource, colorAttachmentView, 60 resolveAttachmentView, GrVkRenderTarget::kDerived) { 61 this->registerWithCache(); 62 } 63 GrVkTextureRenderTarget(GrVkGpu * gpu,const GrSurfaceDesc & desc,GrGpuResource::LifeCycle lifeCycle,const GrVkImage::Resource * imageResource,const GrVkImageView * texView,const GrVkImageView * colorAttachmentView)64 GrVkTextureRenderTarget(GrVkGpu* gpu, 65 const GrSurfaceDesc& desc, 66 GrGpuResource::LifeCycle lifeCycle, 67 const GrVkImage::Resource* imageResource, 68 const GrVkImageView* texView, 69 const GrVkImageView* colorAttachmentView) 70 : GrSurface(gpu, lifeCycle, desc) 71 , GrVkImage(imageResource) 72 , GrVkTexture(gpu, desc, lifeCycle, imageResource, texView, GrVkTexture::kDerived) 73 , GrVkRenderTarget(gpu, desc, lifeCycle, imageResource, colorAttachmentView, 74 GrVkRenderTarget::kDerived) { 75 this->registerWithCache(); 76 } 77 78 static GrVkTextureRenderTarget* Create(GrVkGpu*, const GrSurfaceDesc&, 79 GrGpuResource::LifeCycle, 80 VkFormat format, 81 const GrVkImage::Resource* imageResource); 82 83 // GrGLRenderTarget accounts for the texture's memory and any MSAA renderbuffer's memory. onGpuMemorySize()84 size_t onGpuMemorySize() const override { 85 return GrVkRenderTarget::onGpuMemorySize(); 86 } 87 }; 88 89 #endif 90